((nil . ((tab-width . 8)
(sentence-end-double-space . t)
(fill-column . 70)))
- (c-mode . ((c-file-style . "GNU")))
+ (c-mode . ((c-file-style . "GNU")
+ (c-noise-macro-with-parens-names . ("IF_LINT"))
+ (eval . (c-make-noise-macro-regexps))
+ ))
(objc-mode . ((c-file-style . "GNU")))
(log-edit-mode . ((log-edit-font-lock-gnu-style . t)
(log-edit-setup-add-author . t)))
*.tiff binary
etc/e/eterm-color binary
+# Git's builtin diff hunk header styles.
+*.ada diff=ada
+*.[ch] diff=cpp
+*.cc diff=cpp
+*.cpp diff=cpp
+*.hh diff=cpp
+*.for diff=fortran
+*.html diff=html
+*.shtml diff=html
+*.xml diff=html
+*.java diff=java
+*.m diff=objc
+*.perl diff=perl
+*.pl diff=perl
+*.php diff=php
+*.py diff=python
+*.rb diff=ruby
+*.ruby diff=ruby
+*.tex diff=tex
+
# Hooks for non-default diff hunk headers; see autogen.sh.
*.el diff=elisp
+*.ac diff=m4
+*.m4 diff=m4
+*.mk diff=make
+*[Mm]akefile diff=make
+Makefile.in diff=make
+*.sh diff=shell
*.texi diff=texinfo
+#
+# Diff hunk header special-case file names.
+admin/build-configs diff=perl
+admin/charsets/mapconv diff=shell
+admin/diff-tar-files diff=shell
+admin/make-emacs diff=perl
+admin/merge-gnulib diff=shell
+admin/merge-pkg-config diff=shell
+admin/quick-install-emacs diff=shell
+admin/update-copyright diff=shell
+admin/update_autogen diff=shell
+build-aux/git-hooks/commit-msg diff=shell
+build-aux/git-hooks/pre-commit diff=shell
+build-aux/gitlog-to-emacslog diff=shell
+build-aux/make-info-dir diff=shell
+build-aux/move-if-change diff=shell
+build-aux/msys-to-w32 diff=shell
+build-aux/update-subdirs diff=shell
+lib-src/rcs2log diff=shell
+/make-dist diff=shell
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
# Lisp-level sources built by 'make'.
*cus-load.el
*loaddefs.el
-leim/changed.misc
-leim/changed.tit
lisp/cedet/semantic/bovine/c-by.el
lisp/cedet/semantic/bovine/make-by.el
lisp/cedet/semantic/bovine/scm-by.el
lisp/leim/quail/quick-cns.el
lisp/leim/quail/tsang-b5.el
lisp/leim/quail/tsang-cns.el
+lisp/mh-e/mh-autoloads.el
lisp/subdirs.el
# Dependencies.
# Object files and debugging.
*.a
*.dSYM/
+*.dll
*.core
*.elc
*.o
*.res
*.so
-*.dll
[0-9]*.core
core
core.*[0-9]
+gmon.out
oo/
oo-spd/
src/*.map
# Tests.
test/indent/*.new
-test/biditest.txt
-test/etags/srclist
-test/etags/regexfile
-test/etags/ETAGS
-test/etags/CTAGS
+test/make-test-deps.mk
+test/manual/biditest.txt
+test/manual/etags/srclist
+test/manual/etags/regexfile
+test/manual/etags/ETAGS
+test/manual/etags/CTAGS
# ctags, etags.
TAGS
GNU ELPA has a 'debbugs' package that allows accessing the tracker
database from Emacs.
+Bugs needs regular attention. A large backlog of bugs is
+disheartening to the developers, and a culture of ignoring bugs is
+harmful to users, who expect software that works. Bugs have to be
+regularly looked at and acted upon. Not all bugs are critical, but at
+the least, each bug needs to be regularly re-reviewed to make sure it
+is still reproducible.
+
+The process of going through old or new bugs and acting on them is
+called bug triage. This process is described in the file
+admin/notes/bug-triage.
+
** Documenting your changes
Any change that matters to end-users should have an entry in etc/NEWS.
'ert-deftest' definition with ":tags '(:expensive-test)".
To run tests on the entire Emacs tree, run "make check" from the
-top-level directory. Most tests are in the directory
-"test/automated". From the "test/automated" directory, run "make
-<filename>" to run the tests for <filename>.el(c). See "test/README"
-for more information.
+top-level directory. Most tests are in the directory "test/". From
+the "test/" directory, run "make <filename>" to run the tests for
+<filename>.el(c). See "test/README" for more information.
** Understanding Emacs internals
-2016-03-02 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Fix Bug#22859
* lisp/filenotify.el (file-notify-callback): Return a `deleted'
event in case of kqueue and file1 is nil. (Bug#22859)
-2016-03-01 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix reordering of bidi text in an isolate inside an override
isolate when the FSI...PDI text is inside a directional override.
(Bug#22786)
-2016-03-01 Alan Mackenzie <acm@muc.de>
+2016-03-04 Alan Mackenzie <acm@muc.de>
Document c-guess-basic-syntax in the CC Mode manual.
(Custom Line-Up): Add a note on using c-guess-basic-syntax with a pxref to
Syntactic Analysis.
-2016-03-01 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Fix targets in test/automated/Makefile.in
* test/automated/Makefile.in: Use $(SELECTOR_DEFAULT) also for
empty target and target all.
-2016-03-01 Leo Liu <sdl.web@gmail.com>
+2016-03-04 Leo Liu <sdl.web@gmail.com>
Comment on last change to define-derived-mode
* lisp/emacs-lisp/derived.el (define-derived-mode): Add comment.
-2016-03-01 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Allow binding `url-mime-accept-string'
(cherry picked from commit 144bb0cf322b9756d29def3e27a42303e2edce43)
-2016-03-01 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Also allow setting the paragraph direction to nil
* lisp/net/eww.el (eww-toggle-paragraph-direction): Also allow
setting the paragraph direction to nil ("auto").
-2016-02-29 Anders Lindgren <andlind@gmail.com>
+2016-03-04 Anders Lindgren <andlind@gmail.com>
Made the new OS X visible bell more visible.
"caution" image five times, as the image in its original size
was hard to see.
-2016-02-29 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Use the correct background color when filling nested <divs>
(cherry picked from commit cad0bc70558f9c28c808711c5295dec9fc5ad6e5)
-2016-02-29 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Make <div> in <li> not insert extra newlines
(cherry picked from commit 379a846b8548dc32a9019ef0a37c02f62cd9bad1)
-2016-02-29 Dmitry Gutov <dgutov@yandex.ru>
+2016-03-04 Dmitry Gutov <dgutov@yandex.ru>
Uncomment the next-error-function integration in xref
Uncomment the next-error-function integration
(http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20489#110).
-2016-02-29 Dmitry Gutov <dgutov@yandex.ru>
+2016-03-04 Dmitry Gutov <dgutov@yandex.ru>
Remove the word "valid", to avoid ambiguity
* doc/emacs/maintaining.texi (Identifier Search)
(Looking Up Identifiers): Remove the word "valid" (bug#22692).
-2016-02-28 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
-2016-02-28 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Set auto-revert-use-notify to nil in global-auto-revert-mode. (Bug#22814)
* lisp/autorevert.el (global-auto-revert-mode): Set
`auto-revert-use-notify' to nil. (Bug#22814)
-2016-02-28 Paul Eggert <eggert@cs.ucla.edu>
+2016-03-04 Paul Eggert <eggert@cs.ucla.edu>
* etc/TODO: Minor quoting and grammar fixes.
-2016-02-28 Friedrich Beckmann <friedrich.beckmann@gmx.de> (tiny change)
+2016-03-04 Friedrich Beckmann <friedrich.beckmann@gmx.de> (tiny change)
Fix ModelSim error parsing
* lisp/progmodes/vhdl-mode.el (vhdl-compiler-alist): Fix
ModelSim error parsing (bug#5768).
-2016-02-28 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Make parse-time-string-chars faster
* lisp/calendar/parse-time.el (parse-time-string-chars): Clean
up the code (backport:).
-2016-02-28 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Add a eww command to toggle paragraph direction
* doc/misc/eww.texi (Advanced): Mention the `D' command.
-2016-02-27 Glenn Morris <rgm@gnu.org>
+2016-03-04 Glenn Morris <rgm@gnu.org>
* nextstep/WISHLIST: Merge into etc/TODO and remove.
* etc/TODO: Merge in items from nextstep/WISHLIST.
* nextstep/README: Update for this change.
-2016-02-27 Andreas Schwab <schwab@linux-m68k.org>
+2016-03-04 Andreas Schwab <schwab@linux-m68k.org>
Fix char signedness issue in bidi code
* src/dispextern.h (struct bidi_t): Change type of resolved_level
and isolate_level to signed char. (Bug#22830)
-2016-02-27 Andreas Schwab <schwab@linux-m68k.org>
+2016-03-04 Andreas Schwab <schwab@linux-m68k.org>
* lib-src/pop.c (socket_connection): Fix format string.
-2016-02-27 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Avoid inflooping in thing-at-point-looking-at
(Bug#22756)
Describe the argument DISTANCE in the doc string.
-2016-02-27 Leo Liu <sdl.web@gmail.com>
+2016-03-04 Leo Liu <sdl.web@gmail.com>
* lisp/emacs-lisp/derived.el (define-derived-mode): Revert indent change.
-2016-02-26 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
etc/PROBLEMS: Mention problems with using file descriptors
* etc/PROBLEMS: Mention problems with using file descriptors
of kqueue file notification library.
-2016-02-26 Kaushal Modi <kaushal.modi@gmail.com>
+2016-03-04 Kaushal Modi <kaushal.modi@gmail.com>
* lisp/apropos.el (apropos-variable): Doc fix. (Bug#22813).
-2016-02-25 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Remove unneeded workaround in xftfont.c
XftTextExtents8 behavior, as it is no longer needed. Suggested by
Fangwen Yu <yynyygy@gmail.com>. (Bug#22383)
-2016-02-25 Stefan Monnier <monnier@iro.umontreal.ca>
+2016-03-04 Stefan Monnier <monnier@iro.umontreal.ca>
* lisp/saveplace.el (save-place-local-mode): New minor mode
(save-place--setup-hooks): New function.
(save-place-mode): Use it.
-2016-02-25 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix redisplay on a TTY after 'make-frame'
* src/xdisp.c (clear_garbaged_frames): Don't clear/redraw a
garbaged TTY frame if it is not the selected frame. (Bug#22794)
-2016-02-25 Alan Mackenzie <acm@muc.de>
+2016-03-04 Alan Mackenzie <acm@muc.de>
Make double-click-1 work with unbalanced parens in CC Mode. Fixes bug#5560.
* lisp/mouse.el (mouse-start-end): check the syntax of alleged parens with
`syntax-after' to ensure syntax-table text properties are respected.
-2016-02-25 Magnus Henoch <magnus.henoch@gmail.com>
+2016-03-04 Magnus Henoch <magnus.henoch@gmail.com>
Input method polish-slash should not use keyboard translation
* lisp/leim/quail/latin-pre.el ("polish-slash"): Input method
polish-slash should not use keyboard translation (bug#19081).
-2016-02-25 Chris Feng <chris.w.feng@gmail.com>
+2016-03-04 Chris Feng <chris.w.feng@gmail.com>
Fix an assertion
* src/dispnew.c (clear_glyph_matrix_rows): Test matrix->nrows == 0 (which
implies start == 0) separately.
-2016-02-24 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix 'toggle-save-place'
* lisp/saveplace.el (toggle-save-place): Set up hooks necessary to
support save-place in the buffer. Autoload the command.
-2016-02-24 Stefan Monnier <monnier@iro.umontreal.ca>
+2016-03-04 Stefan Monnier <monnier@iro.umontreal.ca>
* src/keyboard.c: Don't inadvertently set immediate_echo (bug#22581)
immediate_echo when we don't want any echo-keystrokes.
(echo_keystrokes_p): Move earlier.
-2016-02-24 Chris Zheng <chriszheng99@gmail.com> (tiny change)
+2016-03-04 Chris Zheng <chriszheng99@gmail.com> (tiny change)
Minor fixes in calculator.el
(calculator-last-input): Fix a bug with pressing F1.
(Bug#20764)
-2016-02-24 Anders Lindgren <andlind@gmail.com>
+2016-03-04 Anders Lindgren <andlind@gmail.com>
Update HISTORY section in readme for the NextStep interface.
* nextstep/README: Update HISTORY after suggestion
from former maintainer Adrian Robert.
-2016-02-24 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Improve documentation of 'save-place-mode'
* etc/NEWS: Mention the need to call 'save-place-mode' for turning
on the mode in all buffers.
-2016-02-24 Chris Feng <chris.w.feng@gmail.com> (tiny change)
+2016-03-04 Chris Feng <chris.w.feng@gmail.com> (tiny change)
Allocate glyph matrices for the initial frame
* src/dispnew.c (clear_glyph_matrix_rows): matrix->nrows can be 0.
-2016-02-24 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Fix white space in last checkin
-2016-02-24 Dima Kogan <gnuplot@dima.secretsauce.net>
+2016-03-04 Dima Kogan <gnuplot@dima.secretsauce.net>
Make `insert-pair' always leave the cursor where documented
after the opening character. This was not true if the pair was
inserted to surround a region (bug#16949).
-2016-02-24 Kaushal Modi <kaushal.modi@gmail.com>
+2016-03-04 Kaushal Modi <kaushal.modi@gmail.com>
etc/NEWS: Mention the new second parameter to `package-install'
* etc/NEWS: Mention the new second parameter to
`package-install' (bug#22784).
-2016-02-24 John F. Trudeau <JFTrudeau@aetna.com> (tiny change)
+2016-03-04 John F. Trudeau <JFTrudeau@aetna.com> (tiny change)
Highlight assignments in Makefiles more correctly
(cherry picked from commit bbd86c5642bd62c43d72391669f28eaa14459fd5)
-2016-02-23 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Improve documentation of focus-related hooks
* doc/lispref/commands.texi (Focus Events): Mention focus-related
hooks. (Bug#21728)
-2016-02-23 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Further improve doc string of 'disable-point-adjustment'
* src/keyboard.c (syms_of_keyboard): <disable-point-adjustment>
<global-disable-point-adjustment>: Clarify doc strings. (Bug#22771)
-2016-02-23 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Further adaptions in file-notify-tests.el for w32notify
(file-notify-test08-watched-file-in-watched-dir):
Adapt expected events for w32notify.
-2016-02-23 Jan Tatarik <jan.tatarik@gmail.com>
+2016-03-04 Jan Tatarik <jan.tatarik@gmail.com>
Don't bug out on localised dates in gnus-icalendar
(gnus-icalendar-event:org-timestamp): Don't bug out on
localised dates.
-2016-02-23 Drew Adams <drew.adams@oracle.com>
+2016-03-04 Drew Adams <drew.adams@oracle.com>
(ls-lisp-insert-directory): Make -B work
(cherry picked from commit ef52e66efd78aac4c4e5bd5e11870e5ba3b37a1e)
-2016-02-23 Vaidheeswaran C <vaidheeswaran.chinnaraju@gmail.com>
+2016-03-04 Vaidheeswaran C <vaidheeswaran.chinnaraju@gmail.com>
Make buttons in header lines work
(cherry picked from commit c11e565a6b6d09fa39d4c3ef65bef08190eaecc1)
-2016-02-23 Christopher Wellons <wellons@nullprogram.com>
+2016-03-04 Christopher Wellons <wellons@nullprogram.com>
Make setf for frame-height/width work again
* lisp/emacs-lisp/cl-lib.el (frame-height): Make setf for
frame-height/width work again (bug#21979).
-2016-02-23 Łukasz Stelmach <stlman@poczta.fm>
+2016-03-04 Łukasz Stelmach <stlman@poczta.fm>
Encode header strings before printing
(cherry picked from commit 3cedbdcc71ebefc12bd20ec84f74251fe99ee7d0)
-2016-02-23 Nicolas Richard <youngfrog@members.fsf.org>
+2016-03-04 Nicolas Richard <youngfrog@members.fsf.org>
(cl-union): Do not ignore :test argument when lists are equal.
* test/automated/cl-seq-tests.el: New file (bug#22729).
-2016-02-23 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Add `isearch' to `basic-faces'
* lisp/replace.el (match): Add `isearch' to the `basic-faces'
group, too (bug#22760).
-2016-02-23 Dmitry Gutov <dgutov@yandex.ru>
+2016-03-04 Dmitry Gutov <dgutov@yandex.ru>
Make $, : and @ "prefix characters" in ruby-mode
(ruby-font-lock-keywords): Adjust the constants matcher for `:'
not being a symbol constituent anymore.
-2016-02-23 Dmitry Gutov <dgutov@yandex.ru>
+2016-03-04 Dmitry Gutov <dgutov@yandex.ru>
Make find-tag-default-bounds more strict
* lisp/subr.el (find-tag-default-bounds): Delegate to
bounds-of-thing-at-point (bug#22692).
-2016-02-22 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Minor fixes in filenotify.el
(file-notify--event-watched-file): Use cl-caadr.
(file-notify-callback): Handle also `ignore' events from inotify.
-2016-02-22 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Additional fixes for file notification
(file-notify-test07-backup): Adapt expected events for gfilenotify.
(file-notify-test08-watched-file-in-watched-dir): Improve.
-2016-02-22 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix documentation of 'global-disable-point-adjustment'
* src/keyboard.c (syms_of_keyboard) <disable-point-adjustment>
<global-disable-point-adjustment>: Doc fixes. (Bug#22771)
-2016-02-22 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Set file modes of pinentry socket for extra safety
This is just for extra safety since the parent directory is already
protected with `server-ensure-safe-dir'.
-2016-02-22 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Clarify GnuPG version compatibility chapter
* doc/misc/epa.texi (GnuPG version compatibility): Make the gpg-agent
description a bit clearer.
-2016-02-22 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Revert "Change the default socket location for pinentry"
This reverts commit e34fbdee8aca84b98393b06b2450837d175999ca.
It turned out that the address is fixed in Pinentry itself.
-2016-02-21 Dmitry Gutov <dgutov@yandex.ru>
+2016-03-04 Dmitry Gutov <dgutov@yandex.ru>
Kill off xref--display-history
(xref--show-pos-in-buf): Update accordingly.
(xref--xref-buffer-mode-map): Remove xref-quit binding.
-2016-02-21 Dmitry Gutov <dgutov@yandex.ru>
+2016-03-04 Dmitry Gutov <dgutov@yandex.ru>
Keep the xref buffer visible until the user quits it explicitly
(xref--find-xrefs, xref--find-definitions): Rename WINDOW argument
to DISPLAY-ACTION as well.
-2016-02-21 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Change the default socket location for pinentry
This is just for extra safety since the parent directory is already
protected with `server-ensure-safe-dir'.
-2016-02-21 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Mention how to enable pinentry feature
* etc/NEWS: Mention "gpgconf --reload gpg-agent".
* lisp/net/pinentry.el: Likewise.
-2016-02-21 Paul Eggert <eggert@cs.ucla.edu>
+2016-03-04 Paul Eggert <eggert@cs.ucla.edu>
Sync with gnulib
2016-02-10 stdalign: port to older HP and IBM cc
* doc/misc/texinfo.tex, lib/stdalign.in.h: Copy from gnulib.
-2016-02-21 David Engster <deng@randomsample.de>
+2016-03-04 David Engster <deng@randomsample.de>
Remove `semanticdb-save-all-db-idle' from `auto-save-hook'
already be called in the `semantic-idle-work-core-handler', which
runs when Emacs is actually idle.
-2016-02-21 David Engster <deng@randomsample.de>
+2016-03-04 David Engster <deng@randomsample.de>
Restore point when writing semantic table to disk
`semantic-fetch-tags' in `save-excursion', since it might move point
in current buffer. (Bug #22287)
-2016-02-21 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Mention pinentry.el in epa manual
to enable pinentry.el.
(Caching Passphrases): Add xref to the compatibility chapter.
-2016-02-21 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Fix Bug#22736
(file-notify-test08-watched-file-in-watched-dir): Bind
`file-notify--test-tmpfile' temporarily in `dir-callback'.
-2016-02-21 Wieland Hoffmann <themineo@gmail.com> (tiny change)
+2016-03-04 Wieland Hoffmann <themineo@gmail.com> (tiny change)
Grammar fix in doc string
* lisp/custom.el (defgroup): Grammar fix in doc string.
-2016-02-20 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Naming fix for consistency
`epg-configuration-find' to be consistent with other epg-* functions.
Change all callers.
-2016-02-20 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Prefer customized value for GnuPG executable
* lisp/epg-config.el (epg-configuration-find): Don't check GPG
configuration if it is already set with custom. (Bug#22747)
-2016-02-20 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix memory reservation on MS-Windows
no one can use, since memory reservation must produce 64KB-aligned
addresses. (Bug#22526)
-2016-02-20 Anders Lindgren <andlind@gmail.com>
+2016-03-04 Anders Lindgren <andlind@gmail.com>
Update NextStep readme and add wish list.
* nextstep/WISHLIST: New file containing list of issues and ideas
associated with the NS port of Emacs.
-2016-02-20 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Report also result in `file-notify--test-event-handler'
-2016-02-20 Michael Albinus <michael.albinus@gmx.de>
+2016-03-04 Michael Albinus <michael.albinus@gmx.de>
Improve file-notify-test08-watched-file-in-watched-dir
`file-notify--test-results'.
(file-notify-test08-watched-file-in-watched-dir): Fix docstring.
-2016-02-20 Stephen Berman <stephen.berman@gmx.net>
+2016-03-04 Stephen Berman <stephen.berman@gmx.net>
Fix todo-mode item date editing bugs
(todo-read-date): When using the numerical month date component make
sure to use `*' for an arbitrary month instead of its numerical value.
-2016-02-20 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix "[:upper:]" for non-ASCII characters
* src/regex.c (re_match_2_internal): Support [:upper:] and
[:lower:] for non-ASCII characters. (Bug#18150)
-2016-02-20 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Allow customising the article mode cursor behavior
* lisp/gnus/gnus-art.el (gnus-article-show-cursor): New variable.
(gnus-article-mode): Use it.
-2016-02-20 Ari Roponen <ari.roponen@gmail.com>
+2016-03-04 Ari Roponen <ari.roponen@gmail.com>
Use pop-to-buffer-same-window in woman.el
the wrong buffer by using `pop-to-buffer-same-window' (bug#22332).
(WoMan-find-buffer): Ditto.
-2016-02-20 Tassilo Horn <tsdh@gnu.org>
+2016-03-04 Tassilo Horn <tsdh@gnu.org>
New filenotify test for bug#22736
(file-notify-test08-watched-file-in-watched-dir):
(file-notify--test-desc1): New filenotify test for bug#22736
-2016-02-20 Marcin Borkowski <mbork@mbork.pl>
+2016-03-04 Marcin Borkowski <mbork@mbork.pl>
Report critical battery errors
* lisp/battery.el (battery-pmset): Report critical battery
errors (bug#18157).
-2016-02-19 Kaushal Modi <kaushal.modi@gmail.com> (tiny change)
+2016-03-04 Kaushal Modi <kaushal.modi@gmail.com> (tiny change)
Make eww message toggling message clearer
* lisp/net/eww.el (eww-toggle-fonts): Make the message
clearer.
-2016-02-19 Mark Oteiza <mvoteiza@udel.edu>
+2016-03-04 Mark Oteiza <mvoteiza@udel.edu>
* lisp/calc/calc-units.el (math-standard-units): Update to 2014 CODATA adjustment.
-2016-02-18 Martin Rudalics <rudalics@gmx.at>
+2016-03-04 Martin Rudalics <rudalics@gmx.at>
Fix bugs in window resizing code
with preserved size would not get resized. Also now signal an
error when the window cannot be shrunk or enlarged as requested.
-2016-02-17 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix decoding DOS EOL in a unibyte buffer
* src/coding.c (decode_eol): Loop over bytes, not characters.
(Bug#5251)
-2016-02-17 Alan Mackenzie <acm@muc.de>
+2016-03-04 Alan Mackenzie <acm@muc.de>
Correct c-parse-state cache manipulation error.
* lisp/progmodes/cc-engine.el (c-invalidate-state-cache-1): Correct a
comparison bound. Amend comments.
-2016-02-17 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Take advantage of new GnuPG version check function
(package-refresh-contents): Use `epg-configuration-find' to check if EPG
is usable.
-2016-02-17 Daiki Ueno <ueno@gnu.org>
+2016-03-04 Daiki Ueno <ueno@gnu.org>
Make GnuPG version check robuster
(epg-configuration): Mark as obsolete.
* lisp/epg.el (epg-context): Use `epg-configuration-find'.
-2016-02-17 Paul Eggert <eggert@cs.ucla.edu>
+2016-03-04 Paul Eggert <eggert@cs.ucla.edu>
Fix x-load-color-file pointer signedness
For sscanf and int *, use %d, not %u.
Problem found on Ubuntu 15.10 x32, which lacks X support.
-2016-02-17 Paul Eggert <eggert@cs.ucla.edu>
+2016-03-04 Paul Eggert <eggert@cs.ucla.edu>
* lisp/time-stamp.el (time-stamp-time-zone): Fix doc string punct.
-2016-02-16 Mark Oteiza <mvoteiza@udel.edu>
+2016-03-04 Mark Oteiza <mvoteiza@udel.edu>
Follow convention for greek letter constants.
* lisp/calc/calc-units.el (math-standard-units):
Add "sigma" and alias σ to it.
-2016-02-16 Mark Oteiza <mvoteiza@udel.edu>
+2016-03-04 Mark Oteiza <mvoteiza@udel.edu>
Add Stefan-Boltzmann constant to calc units table.
* lisp/calc/calc-units.el (math-standard-units):
Add Stefan-Boltzmann constant.
-2016-02-16 Mark Oteiza <mvoteiza@udel.edu>
+2016-03-04 Mark Oteiza <mvoteiza@udel.edu>
* lisp/calc/calc-units.el (math-build-units-table-buffer): Use special-mode.
-2016-02-16 Glenn Morris <rgm@gnu.org>
+2016-03-04 Glenn Morris <rgm@gnu.org>
Avoid loading cl-lib for term/xterm.elc, eg in -Q -nw. (Bug#22669)
* lisp/emacs-lisp/cl-generic.el (cl--generic-dispatchers):
Prefill with relevant elements for term/xterm.
-2016-02-16 Tassilo Horn <tsdh@gnu.org>
+2016-03-04 Tassilo Horn <tsdh@gnu.org>
Fix soffice UserInstallation-URL for Windows
* lisp/doc-view.el (doc-view-odf->pdf-converter-soffice): Fix
UserInstallation-URL when calling soffice on Windows.
-2016-02-16 Lars Ingebrigtsen <larsi@gnus.org>
+2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
Fix display of <pre> elements
parsing so that <pre> elements don't render with ^M at the end
of the lines.
-2016-02-15 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Minor fixes in global-auto-composition-mode
* lisp/composite.el (global-auto-composition-mode): Make it a
globalized mode. (Bug#22682)
-2016-02-15 Alan Mackenzie <acm@muc.de>
+2016-03-04 Alan Mackenzie <acm@muc.de>
Allow arithmetic operators inside C++ template constructs.
multichar operator in place of the former c->-op-without->-cont-regexp.
Add code to skip forwards over a balanced parenthesized expression.
-2016-02-15 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Avoid crashes in semi-malformed 'condition-case'
* src/eval.c (internal_lisp_condition_case): Treat a handler
'(nil)' as if it were '(nil nil)'. (Bug#22675)
-2016-02-15 Alan Mackenzie <acm@muc.de>
+2016-03-04 Alan Mackenzie <acm@muc.de>
Allow arithmetic operators inside C++ template constructs.
multichar operator in place of the former c->-op-without->-cont-regexp.
Add code to skip forwards over a balanced parenthesized expression.
-2016-02-15 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix regression with 'recent-keys' and keyboard macros
* src/keyboard.c (record_char): Don't record in 'recent_keys'
events that come from executing keyboard macros. (Bug#22674)
-2016-02-15 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix wording in a doc-view.el comment
* lisp/doc-view.el (doc-view--current-cache-dir): Don't use
"illegal" for something that is not against the law.
-2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
+2016-03-04 Paul Eggert <eggert@cs.ucla.edu>
CONTRIBUTE cleanups and updates
* admin/notes/git-workflow: Change emacs-24 to emacs-25,
and trunk to master. This file still needs work.
-2016-02-14 Paul Eggert <eggert@cs.ucla.edu>
+2016-03-04 Paul Eggert <eggert@cs.ucla.edu>
Port USE_STACK_LISP_OBJECTS fix to Clang
Recent versions of Clang claim to be GCC 4.2.1 but do not have
the GCC bug.
-2016-02-14 Paul Eggert <eggert@cs.ucla.edu>
+2016-03-04 Paul Eggert <eggert@cs.ucla.edu>
Port to x86 GCC 4.3.1 and earlier
* src/lisp.h (USE_STACK_LISP_OBJECTS): Default to false
for GCC 4.3.1 and earlier.
-2016-02-14 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix point movement under 'scroll-conservatively'
* src/xdisp.c (redisplay_window): Correct a typo in computing the
effective number of text lines in a window. (Bug#22637)
-2016-02-14 Thomas Plass <thomas.plass@arcor.de>
+2016-03-04 Thomas Plass <thomas.plass@arcor.de>
Replace colon in file name (not legal on Windows)
* lisp/doc-view.el (doc-view--current-cache-dir): Replace colon in file
name (not legal on Windows). [tiny change]
-2016-02-14 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Fix a typo in edt.texi
* doc/misc/edt.texi: Fix a typo in an email address. Reported by
"Herbert J. Skuhra" <herbert@mailbox.org>.
-2016-02-14 Eli Zaretskii <eliz@gnu.org>
+2016-03-04 Eli Zaretskii <eliz@gnu.org>
Make 'mmap_realloc' on MS-Windows more reliable
if the call to VirtualAlloc to commit more pages fails.
(Bug#22526)
-2016-02-14 Oscar Fuentes <ofv@wanadoo.es>
+2016-03-04 Oscar Fuentes <ofv@wanadoo.es>
Grep alias `all' shall not match parent directory
* lisp/progmodes/grep.el (grep-files-aliases): Don't match parent
directory for `all'. Fixes bug#22577
-2016-02-13 Nicolas Petton <nicolas@petton.fr>
+2016-03-04 Nicolas Petton <nicolas@petton.fr>
Bump version to 25.0.91
* configure.ac:
* msdos/sed2v2.inp: Bump version to 25.0.91.
-2016-02-13 Nicolas Petton <nicolas@petton.fr>
+2016-03-04 Nicolas Petton <nicolas@petton.fr>
* etc/AUTHORS: Update the AUTHORS file
-2016-02-13 Glenn Morris <rgm@gnu.org>
+2016-03-04 Glenn Morris <rgm@gnu.org>
+2016-02-15 Glenn Morris <rgm@gnu.org>
* lisp/dired-aux.el: Require cl-lib. (Bug#22613)
-2016-02-13 Eli Zaretskii <eliz@gnu.org>
+2016-02-15 Eli Zaretskii <eliz@gnu.org>
Index tilde characters in names of backup files
* doc/emacs/files.texi (Backup Names): Improve indexing.
(Bug#22625)
-2016-02-13 Eli Zaretskii <eliz@gnu.org>
+2016-02-15 Eli Zaretskii <eliz@gnu.org>
Document deprecation of hi-lock-mode's 'C-x w' bindings
* etc/NEWS: Mark the deprecation entry as documented.
-2016-02-13 Stefan Monnier <monnier@iro.umontreal.ca>
+2016-02-15 Stefan Monnier <monnier@iro.umontreal.ca>
Announce that the `C-x w' bindings are deprecated
-2016-02-13 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Suppress GNUstep hardening
(GNU_OBJC_CFLAGS): Omit options like
‘-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1’.
-2016-02-12 Eli Zaretskii <eliz@gnu.org>
+2016-02-15 Eli Zaretskii <eliz@gnu.org>
Fix redisplay after a large insertion
"optimization 3" if the cursor ends up in a partially visible
glyph row. (Bug22637)
-2016-02-12 Andreas Schwab <schwab@linux-m68k.org>
+2016-02-15 Andreas Schwab <schwab@linux-m68k.org>
Revert "Fix gnus-group-get-new-news-this-group on group with closed server"
* lisp/gnus/nnimap.el (nnimap-change-group): Revert last
change. (Bug#22634)
-2016-02-11 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
* lib-src/make-docfile.c: Include stdarg.h.
-2016-02-11 Alan Mackenzie <acm@muc.de>
+2016-02-15 Alan Mackenzie <acm@muc.de>
Extend gpm-mouse-mode's doc string and doc to point out limitations.
* doc/emacs/frames.texi (Text-Only Mouse): Note the inability to transfer text
between Emacs and other progrmas which use GPM.
-2016-02-11 Eli Zaretskii <eliz@gnu.org>
+2016-02-15 Eli Zaretskii <eliz@gnu.org>
Revert "Backport: * lisp/isearch.el: Turn char-folding off by default"
This reverts commit 12c50e82c9b432b2fc31f8fb2215f43ceea80822.
-2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-15 Lars Ingebrigtsen <larsi@gnus.org>
Revert "Support integer image rotation and respect EXIF rotations"
This change does not work on Fedora.
-2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-15 Lars Ingebrigtsen <larsi@gnus.org>
Revert "Document EXIF image rotation"
This change does not work on Fedora, for instance.
-2016-02-11 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Document OS X LANG default
Document OS X Language and Region system preference.
Suggested by Alan Third.
-2016-02-11 Alan Third <alan@idiocy.org>
+2016-02-15 Alan Third <alan@idiocy.org>
Set locale when run from OS X GUI
* src/nsterm.m (ns_init_locale): Get locale from OS and set LANG.
* src/nsterm.h: Include ns_init_locale.
-2016-02-10 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
make-docfile cleanup for I/O, etc.
(search_lisp_doc_at_eol): Don't worry about ungetc of EOF; it's
portable now.
-2016-02-10 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Memory-management cleanup in make-docfile
(write_globals, scan_c_stream, scan_lisp_file): Avoid memory leak.
(scan_c_stream): Check for add_global failure.
-2016-02-10 Kevin Gallagher <Kevin.Gallagher@boeing.com>
+2016-02-15 Kevin Gallagher <Kevin.Gallagher@boeing.com>
Kevin Gallagher has new email address
* etc/edt-user.el:
* doc/misc/edt.texi: Update Kevin Gallagher's email address.
-2016-02-10 Eli Zaretskii <eliz@gnu.org>
+2016-02-15 Eli Zaretskii <eliz@gnu.org>
Improve doc strings of 'forward/backward-word-strictly'
* src/syntax.c (Fforward_word): Refer to 'forward-word-strictly'
in the doc string. (Bug#22560)
-2016-02-10 Michael Albinus <michael.albinus@gmx.de>
+2016-02-15 Michael Albinus <michael.albinus@gmx.de>
Describe Makefile test targets in test/README
* Makefile.in:
* test/README: Describe Makefile test targets.
-2016-02-10 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-15 Artur Malabarba <bruce.connor.am@gmail.com>
Backport: * lisp/isearch.el: Turn char-folding off by default
(search-default-mode): Set default value to nil.
-2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-15 Lars Ingebrigtsen <larsi@gnus.org>
Document EXIF image rotation
* doc/lispref/display.texi (ImageMagick Images): Mention EXIF rotation.
-2016-02-10 Dima Kogan <dima@secretsauce.net>
+2016-02-15 Dima Kogan <dima@secretsauce.net>
Support integer image rotation and respect EXIF rotations
pre-rotated. All information such as width/height is reported for the
rotated image.
-2016-02-10 Matthew Carter <m@ahungry.com>
+2016-02-15 Matthew Carter <m@ahungry.com>
Quote table names for postgres listings (sql-mode)
* lisp/progmodes/sql.el (sql-postgres-completion-object): Avoid passing
unquoted table names to the completion list.
-2016-02-10 Juri Linkov <juri@linkov.net>
+2016-02-15 Juri Linkov <juri@linkov.net>
* lisp/replace.el (replace-match-maybe-edit): Make arg `backward' optional.
(replace-search, replace-highlight): Make arg `backward' optional.
(Bug#18388)
-2016-02-10 Juri Linkov <juri@linkov.net>
+2016-02-15 Juri Linkov <juri@linkov.net>
* lisp/simple.el (next-line-or-history-element): Reset temporary-goal-column.
(previous-line-or-history-element): Reset temporary-goal-column.
Use end-of-visual-line instead of line-end-position. (Bug#22544)
-2016-02-10 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Suppress ACL ops if configured with --disable-acl
* src/fileio.c [!USE_ACL]: Do not include sys/acl.h.
(Ffile_acl, Fset_file_acl) [!USE_ACL]: Return nil in this case.
-2016-02-09 Katsumi Yamaoka <yamaoka@jpl.org>
+2016-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
Mention web bugs
* doc/misc/emacs-mime.texi (Display Customization):
Mention web bugs in the mm-html-blocked-images section.
-2016-02-09 Katsumi Yamaoka <yamaoka@jpl.org>
+2016-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
Make mm-html-blocked-images default to "" again
* doc/misc/emacs-mime.texi (Display Customization):
Mention that mm-html-blocked-images defaults to "".
-2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Minor alignas cleanup
* src/lisp.h (alignas): Remove now-redundant #ifdef that was left
over from the old way of doing things, before Bug#20862 was fixed.
-2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Add lmalloc commentary and tweak laligned
* src/alloc.c (laligned): Help compiler in a tiny way by putting
the more-commonly-failing disjunct first.
-2016-02-09 Eli Zaretskii <eliz@gnu.org>
+2016-02-15 Eli Zaretskii <eliz@gnu.org>
Clarify documentation of key binding conventions
* doc/lispref/tips.texi (Key Binding Conventions): Clarify which
"punctuation characters" are reserved after "C-c". (Bug#22604)
-2016-02-09 Oscar Fuentes <ofv@wanadoo.es>
+2016-02-15 Oscar Fuentes <ofv@wanadoo.es>
* etc/NEWS: mention the `vc-faces' customization group
-2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Sync with gnulib
* doc/misc/texinfo.tex, lib/stdalign.in.h, m4/acl.m4, m4/getgroups.m4:
Copy from gnulib.
-2016-02-09 Michael Albinus <michael.albinus@gmx.de>
+2016-02-15 Michael Albinus <michael.albinus@gmx.de>
* CONTRIBUTE: Add more examples for $(SELECTOR) make variable.
-2016-02-09 Katsumi Yamaoka <yamaoka@jpl.org>
+2016-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
Make mm-html-inhibit-images and mm-html-blocked-images default to nil
* etc/NEWS (Gnus): Document mm-html-inhibit-images and
mm-html-blocked-images.
-2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Increase success rate of fallback lmalloc
larger and larger sizes, to increase the probability that
the allocator will return a Lisp-aligned pointer.
-2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-15 Lars Ingebrigtsen <larsi@gnus.org>
Make backgrounds extend to the end of the lines in shr
* lisp/net/shr.el (shr-face-background): Faces can also be on
the form `(:background "#fff)' (bug#22547).
-2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-15 Lars Ingebrigtsen <larsi@gnus.org>
Make the `R' command get the correct relative <img>s
Backport:
-2016-02-09 Mike Kupfer <m.kupfer@acm.org>
+2016-02-15 Mike Kupfer <m.kupfer@acm.org>
Fix typos in emacs-mime.texi and gnus.texi
* doc/misc/emacs-mime.texi (Display Customization):
* doc/misc/gnus.texi (HTML): Fix typo.
-2016-02-09 Katsumi Yamaoka <yamaoka@jpl.org>
+2016-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
* doc/misc/emacs-mime.texi (Display Customization):
Doc fix for mm-html-inhibit-images.
-2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-15 Lars Ingebrigtsen <larsi@gnus.org>
Fix message-cross-post-followup-to group names
* lisp/gnus/message.el (message-cross-post-followup-to): Don't
insert group names like "nntp+foo:zot", because those aren't valid.
-2016-02-09 David Edmondson <dme@dme.org>
+2016-02-15 David Edmondson <dme@dme.org>
Compare recipient and keys case-insensitively
recipient address with that from a key, do so in a case insensitive
manner (bug#22603).
-2016-02-08 Glenn Morris <rgm@gnu.org>
+2016-02-15 Glenn Morris <rgm@gnu.org>
* lisp/gnus/mm-decode.el (mm-alist-to-plist): Doc fix.
-2016-02-08 Katsumi Yamaoka <yamaoka@jpl.org>
+2016-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
Refactor HTML images handling of Gnus and mm-* (a part of bug#21650)
* lisp/gnus/mm-view.el (mm-setup-w3m): Use mm-html-inhibit-images
instead of mm-inline-text-html-with-images.
-2016-02-08 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Port to FreeBSD 11-CURRENT i386
* src/lisp.h (NONPOINTER_BITS): Remove. All uses removed.
No longer needed now that alloc.c uses lmalloc and lrealloc.
-2016-02-08 Michael Albinus <michael.albinus@gmx.de>
+2016-02-15 Michael Albinus <michael.albinus@gmx.de>
Some fixes in file-notify-tests.el
backends fire two `changed' events. Backup by rename doesn't
work for kqueue.
-2016-02-07 Michael Albinus <michael.albinus@gmx.de>
+2016-02-15 Michael Albinus <michael.albinus@gmx.de>
Fix Bug#22557
backup file.
(file-notify-test07-backup): New test.
-2016-02-07 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-15 Paul Eggert <eggert@cs.ucla.edu>
Fix test for dladdr
* configure.ac (dladdr): Link with LIBMODULES when checking for
this function.
-2016-02-07 Andreas Schwab <schwab@linux-m68k.org>
+2016-02-15 Andreas Schwab <schwab@linux-m68k.org>
Fix gnus-group-get-new-news-this-group on group with closed server
* lisp/gnus/nnimap.el (nnimap-change-group): Lookup server
method and pass to nnimap-open-server.
-2016-02-07 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-15 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-14 Nicolas Petton <nicolas@petton.fr>
- * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring
+ * doc/lispref/sequences.texi: Add documentation for seq-map-indexed
- While tabs in code are mostly fine because the Emacs sources have a
- .dir-locals file specifying tab-width, the same is not true of tabs in
- code examples inside docstrings. The docstring is printed on a *Help*
- buffer, which can be created on any directory and won't necessarily have
- the same tab-width set.
+2016-02-14 Nicolas Petton <nicolas@petton.fr>
-2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
+ New function seq-map-indexed
- Don't inloop gnus-uu-mark-thread on the last thread
+ * lisp/emacs-lisp/seq.el (seq-map-indexed): New function.
+ * test/lisp/emacs-lisp/seq-tests.el: Add tests for seq-map-indexed.
- * lisp/gnus/gnus-uu.el (gnus-uu-mark-thread): Don't infloop on the
- final thread in the summary buffer (bug#16666).
+2016-02-14 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/gnus/mm-util.el: Remove the mm-string-as-multibyte alias.
- Display non-ASCII group names better in prompts
+2016-02-14 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/gnus/gnus-sum.el (gnus-articles-to-read): To decode the
- group name, we have to do that before we remove the prefix.
+ Fix problem with wrong encoding of non-ASCII message bodies
-2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/gnus/mml.el (mml-generate-mime-1): Disable
+ multibyteness before encoding the data.
- Default to gpg2 instead of gpg
+2016-02-14 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/epg-config.el (epg-gpg-program): Prefer gpg2 over gpg, if
- it exists. This fixes many problems with using the GPG
- authentication agent.
+ Remove codepage setup code from mm-util
-2016-02-06 David Edmondson <dme@dme.org>
+ * lisp/gnus/mm-util.el (mm-codepage-setup): Remove.
+ (mm-codepage-iso-8859-list): Remove.
+ (mm-codepage-ibm-list, mm-setup-codepage-iso-8859)
+ (mm-setup-codepage-ibm): Remove.
+ (mm-charset-eval-alist): Remove the code pages from the
+ default value.
- src/process.c Correctly convert AF_INET6 addresses
+2016-02-14 Lars Ingebrigtsen <larsi@gnus.org>
- * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are
- converted to a list of 16 bit quantities by
- conv_sockaddr_to_lisp(). conv_lisp_to_sockaddr() should follow the
- same scheme rather than expecting a (longer) list of 8 bit
- quantities.
+ Remove compat code for older Emacsen
- Backport:
+ * lisp/gnus/gnus-art.el (gnus-button-url-regexp): Remove
+ XEmacs compat code.
- (cherry picked from commit 55ce3c30d617c38eb086d5ad4ffbd881c20c559c)
+ * lisp/gnus/gnus-sync.el (gnus-sync-json-alist-p): Remove
+ unused compat function.
+ (gnus-sync-json-plist-p): Ditto.
-2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
+ * lisp/gnus/message.el (message-default-charset): Make obsolete.
+ (message-info): Remove compat code.
+ (message-setup-fill-variables): Remove kludge needed earlier
+ to not overwrite `normal-auto-fill-function'.
+ (message-split-line): Remove compat code.
- * lisp/isearch.el (isearch-define-mode-toggle): Improve logic
+ * lisp/gnus/mm-view.el (mm-display-inline-fontify): Remove
+ compat code.
-2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-14 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/menu-bar.el (menu-bar-options-menu): New search submenu
+ Remove some compat functions from gmm-utils.el
- (menu-bar-search-options-menu): New variable
+ * lisp/gnus/gmm-utils.el (gmm-tool-bar-from-list): Remove
+ compat code.
+ (gmm-image-search-load-path): Remove.
+ (gmm-image-load-path-for-library): Remove.
-2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-14 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/isearch.el (search-default-mode)
+ Remove the gmm-lazy and nnmail-lazy compat widgets
- (isearch-regexp-function): Improve docstrings.
+ * lisp/gnus/gmm-utils.el (gmm-lazy): Remove.
-2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
+ * lisp/gnus/nnmail.el (nnmail-lazy): Remove.
- * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- (search-default-mode): New variable.
- (isearch-mode, isearch-define-mode-toggle)
- (isearch--describe-regexp-mode): Update accordingly.
- * lisp/menu-bar.el (nonincremental-search-forward): Update accordingly.
- * etc/NEWS: Update accordingly.
- * doc/emacs/search.texi: Update accordingly.
+ Clean up nnimap-request-move-article slightly
-2016-02-06 Oscar Fuentes <ofv@wanadoo.es>
+ * lisp/gnus/nnheader.el (subr-x): Require.
- Use monitor's resolution for positioning tooltips
+ * lisp/gnus/nnimap.el (nnimap-request-move-article): Clean up
+ the code slightly.
- * src/xfns.c (compute_tip_xy): Use the resolution of the monitor where
- the mouse pointer is to avoid placing the tooltip over the border of
- the monitor on multi-head displays. Fixes bug#22549.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-06 Eli Zaretskii <eliz@gnu.org>
+ Use open-network-stream instead of open-protocol-stream
- Fix file-notify-test on MS-Windows
+ * lisp/gnus/nnimap.el: Use open-network-stream instead of
+ open-protocol-stream.
- * test/automated/file-notify-tests.el (file-notify--test-timeout):
- Reduce w32notify timeout to 10 sec.
- (file-notify-test06-many-events): Call read-event after each
- rename, to keep the w32notify backend happy in batch mode.
- (Bug#22534)
+ * lisp/gnus/nntp.el: Ditto.
-2016-02-06 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/pop3.el: Ditto.
- Fix issues found by auditing w32notify code
+ * lisp/gnus/sieve-manage.el: Ditto.
- * src/w32inevt.c (handle_file_notifications): Count the number of
- events to be returned.
- * src/w32notify.c (send_notifications): Don't copy to the file
- notification buffer more than it can hold. (Bug#22534)
+ * lisp/net/network-stream.el (open-protocol-stream): Make obsolete.
-2016-02-06 Eli Zaretskii <eliz@gnu.org>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Extend etags Ruby support for accessors
+ Remove compat code that relies on (featurep 'mule)
- * lib-src/etags.c (Ruby_functions): Support accessors defined with
- parentheses. (Bug#22563)
+ * lisp/gnus/gnus-group.el (gnus-group-name-decode): Remove
+ compat code.
- * test/etags/ruby-src/test1.ru (A::B): Add tests for accessors
- defined with parentheses.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
+ * lisp/gnus/gnus-start.el (gnus-read-descriptions-file):
+ Remove compat code.
-2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/gnus/mm-bodies.el (mm-decode-body, mm-decode-string):
+ Remove compat code.
- Update publicsuffix.txt.
+ * lisp/gnus/mm-view.el (mm-w3m-standalone-supports-m17n-p):
+ Remove compat code.
+ (mm-w3m-standalone-supports-m17n-p): Ditto.
- * etc/publicsuffix.txt: Updated from
- https://publicsuffix.org/list/public_suffix_list.dat.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove compat functions from starttls.el
- Ensure that Gnus dribble handling allows removing entries
+ * lisp/gnus/starttls.el
+ (starttls-set-process-query-on-exit-flag): Remove.
- * lisp/gnus/gnus-start.el (gnus-dribble-enter): Ensure that each
- entry is on a single line.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-05 OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> (tiny change)
+ Remove compat functions from smime.el
- Be consistent when using encoded strings in nnimap data
+ * lisp/gnus/smime.el (smime-replace-in-string): Remove.
+ (smime-make-temp-file): Remove.
- * lisp/gnus/nnimap.el (nnimap-encode-gnus-group): New function
- (nnimap-request-list): Use it.
- (nnimap-request-newgroups): Ditto.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-05 OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> (tiny change)
+ Remove compat code from smiley
- Display the decoded Gnus group name
+ * lisp/gnus/smiley.el (smiley-style): Remove compat code.
- * lisp/gnus/gnus-sum.el (gnus-summary-read-group-1): Use the
- decoded group name in the message.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove compat code from rfc2047
- Use completion-ignore-case instead of defining command
+ * lisp/gnus/rfc2047.el (rfc2047-encode-message-header): Remove
+ compat code.
+ (rfc2047-decode-string): Ditto.
- * lisp/erc/erc.el (erc-mode): Set completion-ignore-case so
- that we get case-insensitive completion.
- (erc-completion-at-point): Remove.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-05 Eli Zaretskii <eliz@gnu.org>
+ Remove compat function from pop3
- Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+ * lisp/gnus/pop3.el (pop3-set-process-query-on-exit-flag): Remove.
-2016-02-05 Michael Albinus <michael.albinus@gmx.de>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+ Remove compat code in Gnus backends
- Reduce the number of iterations to 250 in case of w32notify.
+ * lisp/gnus/nndiary.el (nndiary-error): Remove.
-2016-02-05 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/nndraft.el (nndraft-request-associate-buffer): Ditto.
- Fix problems caused by new implementation of sub-word mode
+ * lisp/gnus/nnfolder.el (nnfolder-read-folder): Ditto.
- * lisp/subr.el (forward-word-strictly, backward-word-strictly):
- New functions.
- (word-move-empty-char-table): New variable.
+ * lisp/gnus/nnheader.el (nnheader-find-file-noselect): Ditto.
- * etc/NEWS: Mention 'forward-word-strictly' and
- 'backward-word-strictly'.
+ * lisp/gnus/nnimap.el (nnimap-log-buffer): Remove compat code.
- * doc/lispref/positions.texi (Word Motion): Document
- 'find-word-boundary-function-table', 'forward-word-strictly', and
- 'backward-word-strictly'. (Bug#22560)
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * src/syntax.c (syms_of_syntax)
- <find-word-boundary-function-table>: Doc fix.
+ Remove compat code from some mml files
- * lisp/wdired.el (wdired-xcase-word):
- * lisp/textmodes/texnfo-upd.el (texinfo-copy-node-name)
- (texinfo-copy-section-title, texinfo-start-menu-description)
- (texinfo-copy-menu-title, texinfo-specific-section-type)
- (texinfo-insert-node-lines, texinfo-copy-next-section-title):
- * lisp/textmodes/texinfo.el (texinfo-clone-environment)
- (texinfo-insert-@end):
- * lisp/textmodes/texinfmt.el (texinfo-format-scan)
- (texinfo-anchor, texinfo-multitable-widths)
- (texinfo-multitable-item):
- * lisp/textmodes/tex-mode.el (latex-env-before-change):
- * lisp/textmodes/flyspell.el (texinfo-mode-flyspell-verify):
- * lisp/skeleton.el (skeleton-insert):
- * lisp/simple.el (count-words):
- * lisp/progmodes/vhdl-mode.el (vhdl-beginning-of-libunit)
- (vhdl-beginning-of-defun, vhdl-beginning-of-statement-1)
- (vhdl-update-sensitivity-list, vhdl-template-block)
- (vhdl-template-break, vhdl-template-case, vhdl-template-default)
- (vhdl-template-default-indent, vhdl-template-for-loop)
- (vhdl-template-if-then-use, vhdl-template-bare-loop)
- (vhdl-template-nature, vhdl-template-procedural)
- (vhdl-template-process, vhdl-template-selected-signal-asst)
- (vhdl-template-type, vhdl-template-variable)
- (vhdl-template-while-loop, vhdl-beginning-of-block)
- (vhdl-hooked-abbrev, vhdl-port-copy, vhdl-hs-forward-sexp-func):
- * lisp/progmodes/verilog-mode.el (verilog-backward-sexp)
- (verilog-forward-sexp, verilog-beg-of-statement)
- (verilog-set-auto-endcomments, verilog-backward-token)
- (verilog-do-indent):
- * lisp/progmodes/vera-mode.el (vera-guess-basic-syntax)
- (vera-indent-block-closing):
- * lisp/progmodes/simula.el (simula-context)
- (simula-backward-up-level, simula-forward-down-level)
- (simula-previous-statement, simula-next-statement)
- (simula-skip-comment-backward, simula-calculate-indent)
- (simula-find-if, simula-electric-keyword):
- * lisp/progmodes/sh-script.el (sh-smie--rc-newline-semi-p):
- * lisp/progmodes/ruby-mode.el (ruby-smie--redundant-do-p)
- (ruby-smie--forward-token, ruby-smie--backward-token)
- (ruby-singleton-class-p, ruby-calculate-indent)
- (ruby-forward-sexp, ruby-backward-sexp):
- * lisp/progmodes/ps-mode.el (ps-run-goto-error):
- * lisp/progmodes/perl-mode.el (perl-syntax-propertize-function)
- (perl-syntax-propertize-special-constructs)
- (perl-backward-to-start-of-continued-exp):
- * lisp/progmodes/pascal.el (pascal-indent-declaration):
- * lisp/progmodes/octave.el (octave-function-file-p):
- * lisp/progmodes/mantemp.el (mantemp-insert-cxx-syntax):
- * lisp/progmodes/js.el (js--forward-function-decl):
- * lisp/progmodes/idlwave.el (idlwave-show-begin-check)
- (idlwave-beginning-of-block, idlwave-end-of-block)
- (idlwave-block-jump-out, idlwave-determine-class):
- * lisp/progmodes/icon.el (icon-is-continuation-line)
- (icon-backward-to-start-of-continued-exp, end-of-icon-defun):
- * lisp/progmodes/hideif.el (hide-ifdef-define):
- * lisp/progmodes/f90.el (f90-change-keywords):
- * lisp/progmodes/cperl-mode.el (cperl-electric-pod)
- (cperl-linefeed, cperl-electric-terminator)
- (cperl-find-pods-heres, cperl-fix-line-spacing)
- (cperl-invert-if-unless):
- * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur):
- * lisp/progmodes/cc-align.el (c-lineup-java-inher):
- * lisp/progmodes/ada-mode.el (ada-compile-goto-error)
- (ada-adjust-case-skeleton, ada-create-case-exception)
- (ada-create-case-exception-substring)
- (ada-case-read-exceptions-from-file, ada-after-keyword-p)
- (ada-scan-paramlist, ada-get-current-indent, ada-get-indent-end)
- (ada-get-indent-if, ada-get-indent-block-start)
- (ada-get-indent-loop, ada-get-indent-type)
- (ada-search-prev-end-stmt, ada-check-defun-name)
- (ada-goto-decl-start, ada-goto-matching-start)
- (ada-goto-matching-end, ada-looking-at-semi-or)
- (ada-looking-at-semi-private, ada-in-paramlist-p)
- (ada-search-ignore-complex-boolean, ada-move-to-start)
- (ada-move-to-end, ada-which-function, ada-gen-treat-proc):
- * lisp/net/quickurl.el (quickurl-grab-url):
- * lisp/mail/sendmail.el (mail-do-fcc):
- * lisp/mail/rmail.el (rmail-resend):
- * lisp/mail/mailabbrev.el (mail-abbrev-complete-alias):
- * lisp/mail/mail-extr.el (mail-extract-address-components):
- * lisp/json.el (json-read-keyword):
- * lisp/files.el (insert-directory):
- * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
- * lisp/completion.el (symbol-under-point, symbol-before-point)
- (symbol-before-point-for-complete, next-cdabbrev)
- (add-completions-from-c-buffer):
- * lisp/cedet/semantic/texi.el (semantic-up-context)
- (semantic-beginning-of-context):
- * lisp/cedet/semantic/bovine/el.el (semantic-get-local-variables):
- use 'forward-word-strictly' and 'backward-word-strictly' instead
- of 'forward-word' and 'backward-word'.
+ * lisp/gnus/mml-sec.el (mml-secure-passphrase-cache-expiry):
+ Remove compat code.
-2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/gnus/mml-smime.el (mml-smime-openssl-sign-query):
+ Always use `mail-extract-address-components', since this isn't
+ time critical.
+ (mml-smime-get-dns-cert): Ditto.
- Fix doc string of tls-program
+ * lisp/gnus/mml.el (mml-preview): Remove compat code.
- * lisp/net/tls.el (tls-program): Document the %t parameter (bug#22559).
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove compat code and compat functions from mm-util.el
- Restore window conf in nsm
+ * lisp/gnus/mm-util.el (mm-mime-mule-charset-alist): Remove
+ compat code.
+ (mm-coding-system-priorities)
+ (mm-mule-charset-to-mime-charset, mm-charset-after)
+ (mm-mime-charset, mm-iso-8859-x-to-15-region): Remove compat code.
+ (mm-detect-coding-region): Define unconditionally.
+ (mm-detect-mime-charset-region): Ditto.
+ (mm-coding-system-to-mime-charset): It's 'mime-charset now.
+ (coding-system-name)
+ (find-file-coding-system-for-read-from-filename)
+ (find-operation-coding-system): Remove aliases.
- * lisp/net/nsm.el (nsm-query-user): Restore the window configuration.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Backport:
+ Remove some compat code from mm-*.el
-2016-02-05 Mark Oteiza <mvoteiza@udel.edu>
+ * lisp/gnus/mm-bodies.el (mm-decode-body): Ditto.
- * etc/NEWS: Document new mpc.el features
+ * lisp/gnus/mm-decode.el (mm-tmp-directory)
+ (mm-valid-image-format-p): Remove compat code.
-2016-02-04 Leo Liu <sdl.web@gmail.com>
+ * lisp/gnus/mm-url.el (mm-url-insert-file-contents): Remove
+ "Connection" "Close" workaround for older Emacsen.
- * lisp/custom.el (defface): Revert indentation change. (Bug#22524)
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-04 Alan Mackenzie <acm@muc.de>
+ Remove compat code and functions from message.el
- Correctly fontify C++ initializations which "look like" functions.
+ * lisp/gnus/message.el (message-send-mail-function): Remove
+ compat code.
+ (message-dont-reply-to-names, message-mode)
+ (message-setup-fill-variables, message-fill-paragraph)
+ (message-remove-blank-cited-lines, message-make-from)
+ (message-forward-rmail-make-body, message-tool-bar-gnome)
+ (message-tab): Remove compat code.
+ (message-completion-in-region): Remove.
+ (message-read-from-minibuffer): Remove compat code.
- Fixes bug#7579.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- lisp/progmodes/cc-engine.el (c-forward-declarator): Add extra optional
- parameter to enable handling of "anonymous" declarators in declarations.
+ Declare rfc1843 instead of autoloading
- lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Check more rigorously
- whether a "(" opens a parameter list of a function, or an initialization of a
- variable.
+ * lisp/gnus/gnus-art.el (rfc1843-decode-region): Declare
+ instead of autoload.
-2016-02-04 Ulf Jasper <ulf.jasper@web.de>
+2016-02-13 Eli Zaretskii <eliz@gnu.org>
- Improve newsticker-treeview-selection-face
+ Avoid signaling an error in 'dired-do-find-regexp-and-replace'
- * lisp/net/newst-treeview.el (newsticker-treeview-selection-face): Improve
- readability for dark background.
+ * lisp/dired-aux.el: Require cl-lib, so that 'cl-mapcan' is
+ autoloaded correctly. (Bug#22613)
-2016-02-04 Eli Zaretskii <eliz@gnu.org>
+2016-02-13 Eli Zaretskii <eliz@gnu.org>
- Minor fix in tagging Ruby accessors by etags
+ Fix network-stream-tests.el for MS-Windows
- * lib-src/etags.c (Ruby_functions): Don't tag accessors whose
- names are not literal symbols. (Bug#22241)
+ * test/lisp/net/network-stream-tests.el
+ (connect-to-tls-ipv6-nowait): Skip for MS-Windows builds.
+ (connect-to-tls-ipv4-wait): Add a 0.1 sleep-for.
-2016-02-04 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Spelling fixes
+ Remove some Message compat functions
-2016-02-04 Dmitry Gutov <dgutov@yandex.ru>
+ * lisp/gnus/message.el (message-kill-all-overlays): Define
+ unconditionally.
+ (message-window-inside-pixel-edges): Remove.
+ (mail-dont-reply-to): Remove.
- Remove 'def X' from the example
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * test/etags/ruby-src/test1.ru (A::B): Remove 'def X'
- (http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00167.html).
- * test/etags/CTAGS.good:
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6: Adjust accordingly.
+ Remove some Gnus compat code
-2016-02-04 Vasilij Schneidermann <v.schneidermann@gmail.com> (tiny change)
+ * lisp/gnus/gnus-art.el (gnus-mime-inline-part): Remove compat code.
+ (gnus-mm-display-part): Ditto.
- Allow sending empty hidden values in eww
+ * lisp/gnus/gnus-start.el (gnus-dribble-read-file): Remove
+ compat code.
- * lisp/net/eww.el (eww-tag-input): Allow sending empty hidden
- values (bug#22388).
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- (cherry picked from commit 5898da8210af7953e638ddf7821c05260979c3f0)
+ Sort groups before inserting them into the group buffer
- Backport:
+ * lisp/gnus/gnus-group.el (gnus-group-describe-all-groups):
+ Sort groups before inserting them.
-2016-02-04 David Edmondson <dme@dme.org>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Make erc work better when encountering unknown prefix chars
+ Make "unseen" tracking work again in Gnus
- * lisp/erc/erc.el (erc-channel-receive-names): Output a warning
- instead of erroring out on unknown prefix chars (bug#22380).
+ * lisp/gnus/gnus-sum.el (gnus-update-marks): Make "unseen"
+ tracking work again.
-2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Make erc completion case-insensitive again
+ Remove Gnus compat functions defined in gnus.el
- * lisp/erc/erc.el (erc-completion-at-point): Make erc completion
- case-insensitive again (bug#11360).
+ * lisp/gnus/gnus.el (gnus-extent-detached-p): Remove.
+ (gnus-extent-start-open, gnus-character-to-event)
+ (gnus-assq-delete-all, gnus-add-text-properties)
+ (gnus-put-text-property, gnus-key-press-event-p):
-2016-02-04 Carlos Pita <carlosjosepita@gmail.com> (tiny change)
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Make complection in erc use consistent casing
+ Remove compat code from gnus-uu and win
- * lisp/erc/erc-pcomplete.el (pcomplete-erc-all-nicks): Make
- case in the complection consistent (bug#18509).
+ * lisp/gnus/gnus-util.el (gnus-image-type-available-p): Remove
+ compat code.
-2016-02-04 Francis Litterio <flitterio@gmail.com>
+ * lisp/gnus/gnus-uu.el (gnus-uu-tmp-dir): Remove compat code.
- Make /QUIT in erc more robust
+ * lisp/gnus/gnus-win.el (gnus-frames-on-display-list): Remove.
- * lisp/erc/erc.el (erc-kill-query-buffers): Don't bug out if we're
- issuing /QUIT to disconnected servers (bug#22099).
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-04 Kevin Brubeck Unhammer <unhammer@fsfe.org> (tiny change)
+ Remove several gnus-util compat functions
- Make tracking faces in Emacs work more reliably
+ * lisp/gnus/gnus-util.el (gnus-set-process-query-on-exit-flag): Remove.
+ (gnus-read-shell-command): Remove.
+ (gnus-match-substitute-replacement): Remove.
+ (gnus-string-match-p): Remove.
+ (gnus-string-prefix-p): Remove.
- * lisp/erc/erc-track.el (erc-faces-in): Always return lists of
- faces to avoid later ambiguity (bug#22424).
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove the gnus-merge alias
- Make shr not bug out on images on non-graphical displays
+ * lisp/gnus/gnus-util.el (gnus-merge): Remove.
- * lisp/net/shr.el (shr-put-image): Don't bug out on alt-less
- images on non-graphical displays (bug#22327).
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove the gnus-union alias
- Fix bookmark display widths
+ * lisp/gnus/gnus-util.el (gnus-union): Remove.
- * lisp/net/eww.el (eww-list-bookmarks): Pop to the buffer before
- preparing it so that the widths are computed correctly (bug#22328).
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove the gnus-delete-alist alias
- Fix typo in eww-make-unique-file-name
+ * lisp/gnus/gnus-util.el (gnus-run-mode-hooks): Remove compat code.
+ (gnus-delete-alist): Remove.
- * lisp/net/eww.el (eww-make-unique-file-name): Make this function
- actually work.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-03 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove the gnus-float-time alias
- Make it possible to TAB to input fields
+ * lisp/gnus/gnus-util.el (gnus-completion-styles): Remove
+ compat code.
+ (gnus-float-time): Remove.
- * lisp/net/eww.el (eww-tag-input): Make it possible to TAB to
- input fields (bug#22540).
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-03 Lars Ingebrigtsen <larsi@gnus.org>
+ Remove compat code from gnus-srvr, start and sum
- Insert complete alt texts when images are disabled
+ * lisp/gnus/gnus-srvr.el (gnus-browse-foreign-server): Remove
+ compat code.
- * lisp/net/shr.el (shr-tag-img): When images are disabled, insert
- the complete alt/title string (bug#22293).
+ * lisp/gnus/gnus-start.el (gnus-check-reasonable-setup):
+ Remove compat code.
-2016-02-03 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/gnus/gnus-sum.el (gnus-summary-display-arrow)
+ (gnus-summary-make-menu-bar, gnus-summary-make-tool-bar)
+ (gnus-recenter)
+ (gnus-summary-limit-strange-charsets-predicate)
+ (gnus-summary-show-thread): Remove compat code.
- Allow eww text fields to grow
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/net/eww.el (eww-process-text-input): Allow text fields to
- grow when typing in stuff that's longer than the original width.
+ Remove compat code from gnus-spec.el
-2016-02-03 Dima Kogan <dima@secretsauce.net>
+ * lisp/gnus/gnus-spec.el (gnus-lrm-string-p): Remove compat code.
+ (gnus-balloon-face-function): Remove compat code.
- Make erc work when subword-mode is switched on
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/erc/erc-backend.el (erc-forward-word, erc-word-at-arg-p)
- (erc-bounds-of-word-at-point): New functions to do word-based
- things when subword-mode is switched on.
+ Fix compat change in last check-in
- * lisp/erc/erc-button.el (erc-button-add-nickname-buttons): Use them
- (bug#17558).
+ * lisp/gnus/gnus-group.el
+ (gnus-group-name-charset-group-alist): `find-coding-system'
+ doesn't exist in Emacs.
-2016-02-03 Teemu Likonen <tlikonen@iki.fi>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Fix IMAP doc example
+ Always use url-queue
- * doc/misc/gnus.texi (Client-Side IMAP Splitting): Fix example.
+ * lisp/gnus/gnus-html.el (gnus-html-schedule-image-fetching):
+ Always use url-queue.
-2016-02-03 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Quoting fixes in doc strings and diagnostics
+ Remove compat functions from gnus-html.el
- * lisp/emacs-lisp/bytecomp.el (byte-compile-setq, byte-compile-funcall):
- * lisp/gnus/mml-smime.el (mml-smime-get-dns-cert)
- (mml-smime-get-ldap-cert):
- Follow user style preference when quoting diagnostics.
+ * lisp/gnus/gnus-html.el (gnus-html-encode-url-chars): Remove.
-2016-02-03 Noam Postavsky <npostavs@gmail.com>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Fix warning message in hack-local-variables
+ Remove compat code from gnus-group.el
- * lisp/files.el (hack-local-variables): use 'thisbuf' to reference
- the original buffer name in the warning message. (Bug#21681)
+ * lisp/gnus/gnus-group.el (gnus-group-name-charset-group-alist)
+ (gnus-group-make-tool-bar, gnus-group-update-tool-bar): Remove compat code.
-2016-02-03 Eli Zaretskii <eliz@gnu.org>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Etags: yet another improvement in Ruby tags
+ Define gnus-diary-kill-entire-line unconditionally
- * lib-src/etags.c (Ruby_functions): Handle continuation lines in
- Ruby accessor definitions. (Bug#22241)
+ * lisp/gnus/gnus-diary.el (gnus-diary-kill-entire-line):
+ Define unconditionally.
- * test/etags/ruby-src/test1.ru (A::B#X): Add some more tests for
- accessors and multiline definitions.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-03 Eli Zaretskii <eliz@gnu.org>
+ Remove compat code from gnus-cache and gnus-bookmark
- Fix x-popup-menu on TTYs without a mouse
+ * lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-mode-map): Ditto.
- * src/menu.c (Fx_popup_menu): Be sure to initialize 'x' and 'y'
- for the TTY case without a mouse. (Bug#22538)
+ * lisp/gnus/gnus-cache.el (gnus-cache-decoded-group-name):
+ Remove compat code.
-2016-02-03 Nicolas Petton <nicolas@petton.fr>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/emacs-lisp/map.el: Improvements to the docstring of the pcase macro
+ Remove compat code from gnus-art.el
-2016-02-02 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/gnus/gnus-art.el (gnus-article-prepare)
+ (gnus-mime-copy-part, gnus-output-to-file)
+ (gnus-article-reply-with-original)
+ (gnus-button-handle-apropos-variable)
+ (gnus-button-handle-apropos-documentation):
- Use pop-to-buffer-same-window in eww
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/net/eww.el: pop-to-buffer-same-window throughout instead of
- switch-to-buffer (bug#22244).
+ Remove compat code from gnus-agent.el
-2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/gnus/gnus-agent.el (gnus-agent-make-mode-line-string):
+ Remove compat code.
- * autogen.sh: Revert all recent changes.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-02 Glenn Morris <rgm@gnu.org>
+ Rewrite gmm-labels usage to use cl-labels
- * make-dist: Updates related to nt/.
+ * lisp/gnus/gmm-utils.el (gmm-tool-bar-style): Remove compat code.
+ (gmm-labels): Remove.
- * make-dist: Add modules/.
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * make-dist: Update for super-special file that can't live in etc/.
+ Remove compat code from canlock.el
-2016-02-02 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/canlock.el (defmacro): Remove
- Fix failure to compile ns-win.el in parallel builds
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * src/Makefile.in ($(lispsource)/term/ns-win.elc): Add order-only
- dependency on $(lispsource)/international/charprop.el.
- (Bug#22501)
+ Remove compat code from auth-source
-2016-02-02 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/auth-source.el (auth-source-read-char-choice):
+ Remove compat code.
- Fix names of tags generated for Ruby accessors
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- * lib-src/etags.c (Ruby_functions): Don't include the leading
- colon ':' in tags for Ruby accessors and aliases. (Bug#22241)
+ Fix gnus-group.el compilation warnings about unprefixed variables
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
+ * lisp/gnus/gnus-group.el (gnus-group-update-eval-form): Avoid
+ compilation warnings by passing in the dynamic variables as
+ explicit lexical parameters to `eval'.
-2016-02-02 Eli Zaretskii <eliz@gnu.org>
+2016-02-13 Lars Ingebrigtsen <larsi@gnus.org>
- Fix file-name recognition in 'etags'
+ Fix the :tracker slot name
- * lib-src/etags.c (get_language_from_filename): If FILE includes a
- leading directory, compare only its basename to the known file
- names in lang_names[].
+ * lisp/gnus/registry.el (registry-lookup-secondary): The
+ `tracker' slot is called `tracker', not `:tracker'.
- * test/etags/Makefile (RBSRC): Adapt to recent test1.ruby
- renaming.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to changes in Ruby file names and
- to the results in Makefile due to the above etags.c fix.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-02 Eli Zaretskii <eliz@gnu.org>
+ Fix compilation warnings in gnus-art.el
- Change Ruby file names and extensions recognized by 'etags'
+ * lisp/gnus/gnus-art.el (rfc1843-decode-region): Autoload.
+ (gnus-article-hide): Avoid compilation warnings.
- * lib-src/etags.c <Ruby_filenames>: New variable, holds names
- of Ruby files.
- <Ruby_suffixes>: Treat .rb, .ru, and .rbw as Ruby extensions.
- <lang_names>: Add Ruby_filenames to the Ruby entry.
- * test/etags/ruby-src/test1.ru: Renamed from test1.ruby.
- (Bug#22241)
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-02 Eli Zaretskii <eliz@gnu.org>
+ Fix compilation warning in gnus-score.el
- More improvements for Ruby support in 'etags'
+ * lisp/gnus/gnus-score.el (gnus-art): Require to silence byte
+ compiler.
- * lib-src/etags.c (Ruby_functions): Tag Ruby accessors and
- alias_method. Identify constants even if the assignment is not
- followed by whitespace. (Bug#22241)
+2016-02-12 Andreas Schwab <schwab@linux-m68k.org>
- * test/etags/ruby-src/test1.ru: Add tests for constants,
- accessors, and alias_method.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
+ Revert "Fix gnus-group-get-new-news-this-group on group with closed server"
-2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
+ This reverts commit 9dc77e37aa84c6df9b3ddb4609f3c09201b0580e.
- Add --git-config option to autogen.sh
+ This makes nnimap groups not be activated.
- * autogen.sh: New options --git-config, --help.
- (git_config): New shell var. Alter function to respect this var.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-02 Lars Ingebrigtsen <larsi@gnus.org>
+ Fix encoding problem introduced by previous patch series
- Fix editing undo changes in eww fields
+ * lisp/gnus/rfc2047.el: Ditto (bug#22648).
- * eww.el (eww-tag-form): Don't overwrite initial form data in text
- fields.
- (eww-process-text-input): Make `M-t' at the end of text fields work
- better (bug#19085).
+ * lisp/gnus/rfc2231.el: Fix problem created by the
+ mm-replace-in-string conversion.
-2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Allow the user more control of popping up the eww window
+ Revert "Avoid defvarring prefix-less variables"
- * eww.el (eww): Use pop-to-buffer-same-window (suggested by
- Michael Heerdegen) (bug#22244).
+ This reverts commit 303390bda34f98b400798d5383cf0d722e35ba19.
-2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
+ The defvars are needed if we're doing lexical-binding
- Make eww-browse-url with new-window parameter work again
+2016-02-12 Glenn Morris <rgm@gnu.org>
- * eww.el (eww-browse-url): Stay in the same buffer if we're
- already in a eww mode buffer so that eww-browse-url with a
- new-window parameter works (bug#22244).
+ * test/lisp/url/url-auth-tests.el (url-auth-test-digest-auth):
+ Make it pass.
-2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
+ * test/lisp/url/url-auth-tests.el
+ (url-auth-test-digest-auth-retrieve-cache): Fix obvious typo.
- Clean up eww code slightly
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- * eww.el (eww-browse-url): Clean up code slightly.
+ Finish up cl-defmethoding registry,el
-2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/gnus/registry.el (initialize-instance): Use cl-defmethod.
- Don't insert nil faces in shr
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- * shr.el (shr-insert-table): Don't add nil faces, because that
- will show up in *Messages* as "Invalid face reference: nil [32
- times]".
+ Revert the gnus-replace-in-string change, fix arguments, reapply
-2016-02-01 Glenn Morris <rgm@gnu.org>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Improve the custom type of some user options.
+ Silence more message.el compilation warnings
- * lisp/autoinsert.el (auto-insert-alist):
- * lisp/replace.el (query-replace-from-to-separator):
- * lisp/gnus/gnus-art.el (gnus-hidden-properties):
- * lisp/gnus/gnus-gravatar.el (gnus-gravatar-properties):
- * lisp/gnus/gnus-picon.el (gnus-picon-properties):
- * lisp/progmodes/prolog.el (prolog-keywords, prolog-types)
- (prolog-mode-specificators, prolog-determinism-specificators)
- (prolog-directives, prolog-program-name, prolog-program-switches)
- (prolog-consult-string, prolog-compile-string, prolog-eof-string)
- (prolog-prompt-regexp): Improve custom type.
+ * lisp/gnus/message.el (message-generate-headers): Don't use
+ variable values directly to get the header values, because
+ that breaks with lexical binding (without unprefixed defvars).
-2016-02-01 Glenn Morris <rgm@gnu.org>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Mark some risky calendar variables.
+ Fix various compilation warnings in message.el
- * lisp/calendar/cal-china.el (chinese-calendar-time-zone):
- Remove risky setting for deleted obsolete alias.
- (calendar-chinese-standard-time-zone-name)
- (calendar-chinese-daylight-saving-start)
- (calendar-chinese-daylight-saving-end):
- * lisp/calendar/calendar.el (calendar-iso-date-display-form)
- (calendar-european-date-display-form)
- (calendar-american-date-display-form, calendar-date-display-form):
- * lisp/calendar/diary-lib.el (diary-remind-message)
- (diary-header-line-format):
- * lisp/calendar/solar.el (calendar-time-display-form)
- (calendar-location-name): Mark as risky.
+ * lisp/gnus/message.el (message-fix-before-sending): Use
+ read-multiple-choice instead of gnus-multiple-choice.
+ (mm-util): Require.
+ (rfc2047): Require.
+ (message-remove-blank-cited-lines): Use message instead of
+ gnus-message.
+ (message-send): Use y-or-n-p instead of gnus-y-or-n-p.
-2016-02-01 Simen Heggestøyl <simenheg@gmail.com>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Highlight two additional SCSS keywords
+ Silence compilation warning in mm-view
- * lisp/textmodes/css-mode.el (css-bang-ids): New defconst holding CSS
- identifiers on the form !foo.
- (scss-bang-ids): New defconst holding SCSS identifiers on the form
- !foo.
- (css--font-lock-keywords): Highlight the new SCSS bang identifiers in
- `font-lock-builtin-face'.
+ * lisp/gnus/mm-view.el (mm-display-inline-fontify): Silence
+ compilation warning.
- * test/indent/css-mode.css: Add bang rule test case.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- * test/indent/scss-mode.scss: Add test cases for the introduced bang
- rules.
+ Fix epg-related compilation warnings in mml-sec
-2016-02-01 Karl Fogel <kfogel@red-bean.com>
+ * lisp/gnus/mml-sec.el: Fix compilation warnings from the epg
+ library.
- Recommend enabling integrity-checking in git
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- * admin/notes/git-workflow: Recommend setting transfer.fsckObjects.
+ rmail-dont-reply-to-names is obsolete
- This is related to the autogen.sh changes made by Paul Eggert in
- commit d766ca8f (2016-02-01) and commit cedd7cad (2016-02-01), and to
- my edits today to http://www.emacswiki.org/emacs/GitForEmacsDevs and
- to emacswiki.org/emacs/GitQuickStartForEmacsDevs. See also the thread
- "Recommend these .gitconfig settings for git integrity." at
- https://lists.gnu.org/archive/html/emacs-devel/2016-01/threads.html#01802.
+ * lisp/gnus/nnmail.el (nnmail-fancy-expiry-target): Don't bind
+ the obsolete `rmail-dont-reply-to-names' variable.
-2016-02-01 Martin Rudalics <rudalics@gmx.at>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Some corrections in Elisp manual
+ Partially revert the defmethod->cl-defmethod change in registry.el
- * doc/lispref/buffers.texi (Read Only Buffers): Describe optional
- argument POSITION.
- * doc/lispref/debugging.texi (Error Debugging): `debug-on-signal'
- is an option.
- * doc/lispref/display.texi (Refresh Screen): Describe optional
- argument FRAME of `redraw-frame'.
- (Attribute Functions): Describe optional argument CHARACTER of
- `face-font'.
- (Defining Images): `image-load-path' is an option.
- (Beeping): `ring-bell-function' is an option.
- * doc/lispref/frames.texi (Size and Position): The PIXELWISE
- argument of `set-frame-size' is optional.
- (Raising and Lowering): The TERMINAL argument of `tty-top-frame'
- is optional.
- * doc/lispref/keymaps.texi (Controlling Active Maps): Fix doc of
- `set-transient-map'.
- * doc/lispref/minibuf.texi (Text from Minibuffer):
- `read-regexp-defaults-function' is an option.
- (Minibuffer Contents): `delete-minibuffer-contents' is a command.
- * doc/lispref/modes.texi (Mode Line Variables):
- `mode-line-position' and `mode-line-modes' are variables, not
- options.
- * doc/lispref/strings.texi (Creating Strings): The START argument
- of `substring' is optional.
- * doc/lispref/text.texi (Buffer Contents): Describe optional
- argument NO-PROPERTIES of `thing-at-point'.
- (User-Level Deletion): Both arguments of
- `delete-trailing-whitespace' are optional.
- (Margins): Use @key{RET} instead of @kbd{RET}.
- * doc/lispref/windows.texi (Display Action Functions): Write
- non-@code{nil} instead of non-nil.
- (Choosing Window Options): The WINDOW arg of
- `split-window-sensibly' is optional.
- (Choosing Window Options): Write non-@code{nil} instead of
- non-nil.
- (Window Start and End): Both args of `window-group-end' are
- optional.
+ * lisp/gnus/registry.el (initialize-instance): Use defmethod,
+ since cl-defmethod doesn't work with :after.
+ (initialize-instance): Ditto, but with :before.
- * src/buffer.c (Fbarf_if_buffer_read_only): Rename argument POS
- to POSITION to keep consisteny with doc-string.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-01 Paul Eggert <eggert@cs.ucla.edu>
+ Avoid obsolete function in plstore
- Chatter when autogen.sh changes Git configuration
+ * lisp/gnus/plstore.el (plstore--insert-buffer): Use setf
+ instead of the obsolete epg-context-set-armor.
- * autogen.sh (git_config): New function. Use it instead of ‘git config’.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-02-01 Kyle Meyer <kyle@kyleam.com>
+ Use cl-defmethod in registry.el
- * lisp/org/org-compat.el (org-font-lock-ensure): Fix bogus test (bug#22399)
+ * lisp/gnus/registry.el: Use cl-defmethod instead of the
+ obsolete defmethod.
-2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Omit unnecessary history from Lisp intro
+ Make sieve-manage require sasl
- * doc/lispintro/emacs-lisp-intro.texi (Review, Digression into C)
- (Conclusion): Reword so as not to talk about earlier versions
- of Emacs in what should be an intro.
+ * lisp/gnus/sieve-manage.el: Fix compilation warning by
+ requiring sasl.
-2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- * etc/HISTORY: Add some more history, plus git tags.
+ Avoid defvarring prefix-less variable
-2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/gnus/mm-uu.el (mm-uu-entry): Rename from `entry'.
- Improve elisp “Security Considerations” doc
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- * doc/lispref/os.texi (Security Considerations):
- Mention call-process and rename-file as opposed to shell commands.
- Add some more cross-references.
+ * lisp/gnus/mailcap.el: Remove usage of mailcap-delete-duplicates.
-2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- autogen.sh now arranges for git to check hashes
+ Don't use the obsolete char-valid-p function
- Suggested by Karl Fogel in:
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01802.html
- * autogen.sh: Do "git config transfer.fsckObjects true".
+ * lisp/gnus/mm-url.el (mm-url-decode-entities): Don't use the
+ obsolete char-valid-p function.
-2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Fix (c & 040) typo in emergency escapes
+ Fix missed translation in a previous commit
- * src/keyboard.c (handle_interrupt): Fix recently-introduced
- typo (040 should have been ~040) that silently suppressed
- auto-saves after emergency escapes. Redo comparison to avoid
- similar problems.
+ * lisp/gnus/mailcap.el (mailcap-mime-types): Fix missed
+ translation of mailcap-delete-duplicates.
-2016-01-31 Eli Zaretskii <eliz@gnu.org>
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
- Fix display of overlay strings with 'display' and 'box' property
+ Avoid using mm-make-temp-file
- * src/xdisp.c (get_next_display_element): Take the box face from
- display stack level that comes from a buffer, not an overlay
- string. (Bug#22499)
+ * lisp/gnus/mail-source.el (mail-source-delete-crash-box): Ditto.
-2016-01-31 Andreas Schwab <schwab@linux-m68k.org>
+ * lisp/gnus/mm-decode.el (mm-display-external): Ditto.
- Fix imap-starttls-open
+ * lisp/gnus/mml-smime.el (mml-smime-openssl-encrypt): Ditto.
- * lisp/net/imap.el (imap-starttls-open): Log imap process
- output. Call imap-parse-greeting. (Bug#22500)
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-31 Andreas Schwab <schwab@linux-m68k.org>
+ Fix compilation warning in gnus-start
- Fix return value of imap-starttls-open
+ * lisp/gnus/gnus-start.el (gnus-slave-save-newsrc): Avoid
+ mm-make-temp-file.
- * lisp/net/imap.el (imap-starttls-open): Fix return value.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-31 John Wiegley <johnw@newartisans.com>
+ Avoid the obsoleted defmethod
- Correct reference to DARWIN_OS preprocessor symbol
+ * lisp/gnus/gnus-icalendar.el: Use cl-defmethod instead of
+ defmethod.
- * src/alloc.c: Correct a preprocessor reference to DARWIN_OS, which may
- not be defined.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
+ Avoid defvarring prefix-less variables
- Spelling fix
+ * lisp/gnus/gnus-group.el (gnus-group-update-eval-form): We
+ don't need to `defvar' the short variables to allow `eval' to
+ use them.
- Spelling fixes
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
+ nnweb doesn't need unibyte buffers
- Pacify GCC on C library without glibc API
+ * lisp/gnus/nnweb.el (nnweb-retrieve-headers)
+ (nnweb-read-overview, nnweb-request-article)
+ (nnweb-google-reference): Unibyte buffers are not needed here.
- Without this change, with --enable-gcc-warnings GCC would complain
- “error: redundant redeclaration of ‘aligned_alloc’”.
- * configure.ac: Simplify aligned_alloc testing.
- * src/alloc.c (aligned_alloc): Don’t use if DARWIN_OS,
- since the simplified configure.ac no longer checks for that.
- Don’t declare if HAVE_ALIGNED_ALLOC.
- Correct misspelling of HAVE_ALIGNED_ALLOC in ifdef.
+2016-02-12 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Artur Malabarba <bruce.connor.am@gmail.com>
+ Encode before sending from nnspool
- Backport: * lisp/files.el: Remove support for extra .dir-locals file
+ * lisp/gnus/nnspool.el (nnspool-request-post): Encode data
+ before sending it to the news server.
- (dir-locals-file-2, dir-locals--all-files): Remove.
- (dir-locals-collect-variables, dir-locals-file, dir-locals-find-file)
- (dir-locals-read-from-file, hack-dir-local-variables): Revert changes.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/files-x.el (modify-dir-local-variable): Revert changes.
+ nnrss buffers don't have to be unibyte
- * lisp/help-fns.el (describe-variable): Revert changes.
+ * lisp/gnus/nnrss.el (nnrss-insert): The buffer doesn't have
+ to be unibyte just to receive data, I think.
- * doc/emacs/custom.texi (Directory Variables): Revert changes.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- * etc/NEWS: Revert changes.
+ Don't use mm-with-unibyte-current-buffer in mml2015
-2016-01-30 Glenn Morris <rgm@gnu.org>
+ * lisp/gnus/mml2015.el (mml2015-mailcrypt-encrypt): Don't use
+ mm-with-unibyte-current-buffer.
- * lisp/net/browse-url.el (browse-url-default-browser):
- Lower priority of non-free Chrome.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Glenn Morris <rgm@gnu.org>
+ Don't use mm-with-unibyte-current in mml1991
- Improve the custom type of some user options.
+ * lisp/gnus/mml1991.el (mml1991-epg-sign): Don't use
+ mm-with-unibyte-current.
- * lisp/desktop.el (desktop-minor-mode-table):
- * lisp/man.el (Man-frame-parameters):
- * lisp/midnight.el (midnight-delay):
- * lisp/speedbar.el (speedbar-select-frame-method):
- * lisp/tooltip.el (tooltip-frame-parameters):
- * lisp/tree-widget.el (tree-widget-space-width):
- * lisp/type-break.el (type-break-keystroke-threshold):
- * lisp/woman.el (woman-imenu-generic-expression):
- * lisp/cedet/ede.el (ede-debug-program-function):
- * lisp/cedet/ede/project-am.el (project-am-debug-target-function):
- * lisp/emulation/viper-keym.el (viper-toggle-key):
- * lisp/erc/erc-networks.el (erc-server-alist):
- * lisp/gnus/message.el (message-deletable-headers, message-signature):
- * lisp/mail/mailalias.el (mail-directory-stream):
- * lisp/play/tetris.el (tetris-x-colors):
- * lisp/progmodes/gud.el (gud-tooltip-modes): Improve custom type.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Simen Heggestøyl <simenheg@gmail.com>
+ Don't use mm-with-unibyte-current in mml1991
- Highlight CSS variables with variable name face
+ * lisp/gnus/mml1991.el (mml1991-pgg-sign): Don't use
+ mm-with-unibyte-current.
- * lisp/textmodes/css-mode.el (css-nmstart-re): Don't match variables.
- (css--font-lock-keywords): Highlight variables in
- `font-lock-variable-name-face'.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Glenn Morris <rgm@gnu.org>
+ Don't use mm-with-unibyte-buffer in utf7
- * lisp/gnus/gnus-kill.el (gnus-winconf-kill-file): Not user-serviceable.
+ * lisp/gnus/utf7.el (utf7-fragment-encode): Don't use
+ mm-with-unibyte-buffer.
-2016-01-30 Glenn Morris <rgm@gnu.org>
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- Mark some user options that can get evalled as risky.
+ Remove XEmacs compat code from Gnus helper libraries
- * lisp/allout.el (allout-title):
- * lisp/emacs-lisp/edebug.el (edebug-global-break-condition):
- * lisp/gnus/message.el (message-mailer-swallows-blank-line):
- * lisp/progmodes/gud.el (gud-tooltip-display):
- * lisp/vc/ediff-mult.el (ediff-default-filtering-regexp):
- Mark as risky.
+ * lisp/gnus/plstore.el (plstore-called-interactively-p): Remove.
-2016-01-30 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/pop3.el (pop3-make-date): Remove XEmacs compat.
- Disable DebPrint in sys_read on MS-Windows
+ * lisp/gnus/sieve-mode.el: Remove XEmacs compat.
- * src/w32.c (sys_read): Disable a debugging print that is normal
- when non-blocking reads are retried.
+ * lisp/gnus/spam-stat.el (spam-stat-called-interactively-p): Remove.
-2016-01-30 Martin Rudalics <rudalics@gmx.at>
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- ;Fix ChangeLog entry
+ Remove XEmacs compat code from Gnus backends
-2016-01-30 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/mm-view.el (mm-inline-image-xemacs): Remove.
+ (mm-inline-image): Rename from mm-inline-image-emacs.
- Fix typos in Introduction to Emacs Lisp manual
+ * lisp/gnus/mml.el: Remove XEmacs compat code.
- * doc/lispintro/emacs-lisp-intro.texi (Emacs Initialization)
- (kill-new function, Digression into C)
- (Complete forward-sentence, Divide and Conquer, Find a File)
- (lengths-list-many-files, Columns of a graph, defcustom)
- (recursive-count-words): Fix typos. Reported by Daniel Bastos
- <dbastos@toledo.com>.
+ * lisp/gnus/nnheader.el: Remove XEmacs compat code.
-2016-01-30 Nicolas Petton <nicolas@petton.fr>
+ * lisp/gnus/nnimap.el (nnimap-open-connection-1): Remove
+ XEmacs compat code.
- Bump version to 25.0.90
+ * lisp/gnus/nnir.el (nnir-run-gmane): Remove XEmacs compat code.
- * README:
- * configure.ac:
- * msdos/sed2v2.inp: Bump version to 25.0.90.
+ * lisp/gnus/nnmail.el (nnmail-pathname-coding-system): Remove
+ XEmacs compat code.
-2016-01-30 Nicolas Petton <nicolas@petton.fr>
+ * lisp/gnus/nnmairix.el: Remove XEmacs compat code.
- * etc/AUTHORS: Update the AUTHORS file
+ * lisp/gnus/nnrss.el: Remove XEmacs compat code.
-2016-01-30 Nicolas Petton <nicolas@petton.fr>
+ * lisp/gnus/nntp.el: Remove XEmacs compat code.
- Bump version to 25.0.90
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- * README:
- * configure.ac:
- * msdos/sed2v2.inp: Bump version to 25.0.90.
+ Remove XEmacs compat functions from mm-util.el
+
+ * lisp/gnus/mm-util.el (mm-special-display-p): Remove.
+ (mm-decode-coding-string, mm-encode-coding-string)
+ (mm-decode-coding-region, mm-encode-coding-region): Remove.
+ (mm-string-to-multibyte): Remove.
+ (mm-char-or-char-int-p): Remove.
+ (mm-ucs-to-char): Remove compat versions of the function.
+ (mm-read-coding-system): Remove.
+ (mm-coding-system-p): Remove compat code.
+ (mm-enrich-utf-8-by-mule-ucs): Remove.
+ (mm-enable-multibyte, mm-disable-multibyte): Remove compat versions.
+ (mm-delete-duplicates): Remove.
+ (mm-multibyte-p): Remove compat versions.
+ (mm-xemacs-find-mime-charset-1): Remove.
+ (mm-xemacs-find-mime-charset): Remove.
+ (mm-make-temp-file): Made obsolete.
+ (mm-find-buffer-file-coding-system): Remove XEmacs compat.
-2016-01-30 Nicolas Petton <nicolas@petton.fr>
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- * etc/AUTHORS: Update the AUTHORS file
+ Remove Message and mm-decode XEmacs compat code
-2016-01-30 Nicolas Petton <nicolas@petton.fr>
+ * lisp/gnus/message.el: Remove XEmacs compat code.
- authors.el updates
+ * lisp/gnus/mm-decode.el (mm-create-image-xemacs): Remove.
- * admin/authors.el (authors-renamed-files-alist): Additions.
+ * lisp/gnus/mm-util.el: Remove some XEmacs compat code.
-2016-01-30 Nicolas Petton <nicolas@petton.fr>
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- Make it possible to run make change-history on emacs-25
+ Remove som XEmacs compat code from message.el
- * Makefile.in: Check if the current branch is emacs-25 instead of
- master.
+ * lisp/gnus/message.el: Remove some XEmacs compat code.
-2016-01-30 lu4nx <lx@shellcodes.org>
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- Support Go language in 'etags'
+ Remove XEmacs compat code from ietf-drums.el
- * lib-src/etags.c <Ruby_help>: Fix documentation of Ruby tags.
- <Go_help>: New help.
- <Go_suffixes>: New variable.
- (Go_functions): New function.
- <lang_names>: Add entry for Go. (Bug#22370)
+ * lisp/gnus/ietf-drums.el (ietf-drums-syntax-table): Drop
+ XEmacs compat.
- * doc/emacs/maintaining.texi (Tag Syntax): Document Go support.
- * doc/man/etags.1: Mention Go support.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- * etc/NEWS: Mention Go support.
+ Remove XEmacs compat code from gravatar.el
- * test/etags/go-src/test.go:
- * test/etags/go-src/test1.go: New test files.
- * test/etags/Makefile (GOSRC): New variable.
- (SRCS): Add $(GOSRC).
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to addition of Go tests.
+ * lisp/gnus/gravatar.el: Remove XEmacs compat code from
+ gravatar.el.
-2016-01-30 Eli Zaretskii <eliz@gnu.org>
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
- Improve Ruby support in 'etags'
+ Remove more XEmacs compat code from Gnus
- * lib-src/etags.c (Ruby_functions): Tag constants. Don't tag
- singleton classes. Remove class qualifiers from tags generated
- for method and constant names. (Bug#22241)
+ * lisp/gnus/gnus-util.el (gnus-bound-and-true-p): Remove.
+ (gnus-timer--function): Remove.
- * doc/emacs/maintaining.texi (Tag Syntax): Mention that constants
- are tagged by etags in Ruby.
+ * lisp/gnus/gnus-uu.el (gnus-uu-save-article): Remove XEmacs
+ 19.2 compat.
- * etc/NEWS: Mention that constants are tagged by etags in Ruby.
+ * lisp/gnus/gnus-win.el: Remove XEmacs compat code.
- * test/etags/ruby-src/test1.ru: Add more tests.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to the changes in etags and in Ruby
- tests.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Eli Zaretskii <eliz@gnu.org>
+ Remove more XEmacs compat functions from gnus-util.el
- Adjust etags test results to changes in copyright years
+ * lisp/gnus/gnus-util.el (gnus-put-display-table): Remove.
+ (gnus-get-display-table): Remove.
+ (gnus-format-message): Remove.
- * test/etags/CTAGS.good:
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6: Adjust to shift in characters and
- in line numbers.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Andreas Schwab <schwab@linux-m68k.org>
+ Remove more XEmacs compat functions from Gnus
- Revert "Re-enable checks in member, memql, delete to complain about non-lists"
+ * lisp/gnus/gnus-util.el (gnus-next-char-property-change): Remove.
+ (gnus-previous-char-property-change): Remove.
+ (gnus-graphic-display-p): Remove.
+ (gnus-select-frame-set-input-focus): Remove.
- This reverts commit f524e8b7f12d9b5a8b92084e5385429fe7b085b9.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Nicolas Petton <nicolas@petton.fr>
+ Remove more XEmacs compat code from gnus-util
- Make it possible to run make change-history on emacs-25
+ * lisp/gnus/gnus-util.el (gnus-make-local-hook): Remove (and
+ all its usages).
+ (gnus-invisible-p): Remove.
- * Makefile.in: Check if the current branch is emacs-25 instead of
- master.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
+ Remove gnus-make-local-hook
- Don't fiddle with DEFAULT
+ * lisp/gnus/gnus-util.el (gnus-make-local-hook): Remove (and
+ all its usages).
- * lisp/progmodes/project.el (project--completing-read-strict):
- Don't change DEFAULT, whether is has any matches in
- COLLECTION, or not.
+2016-02-11 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Eli Zaretskii <eliz@gnu.org>
+ gnus-replace-in-string -> replace-regexp-in-string
- Document xwidget commands and functions
+ * lisp/gnus/gnus-util.el (gnus-replace-in-string): Declare
+ obsolete. Transform all usages of it into
+ replace-regexp-in-string.
- * doc/lispref/display.texi (Xwidgets): New section, describes some
- of the xwidget primitives.
- * doc/lispref/display.texi (Display): Update the chapter menu.
- * doc/emacs/misc.texi (Embedded WebKit Widgets): New section.
- * doc/emacs/emacs.texi (Top): Update the master menu to include
- the xwidget node.
+ * lisp/gnus/mailcap.el (mailcap-replace-in-string): Remove.
-2016-01-30 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
- Build fix for shr.el
+ Remove Gnus XEmacs compat
- * shr.el (seq): Require.
+ * lisp/gnus/gnus-start.el (gnus-dribble-enter): Remove comment
+ about code that doesn't work in XEmacs.
-2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
+ * lisp/gnus/gnus-sum.el: Remove XEmacs compat.
- Improve project-find-file yet again!
+ * lisp/gnus/gnus-topic.el: Remove XEmacs compat.
- * lisp/progmodes/project.el (project--completing-read-strict):
- New function.
- (project-find-file-in): Use it.
- (project-file-completion-table): Move the default
- implementation inside the cl-defgeneric form.
- (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01720.html)
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
+ Remove compat functions in gnus-spec.el
- Don't pass DIR to 'hg status'
+ * lisp/gnus/gnus-spec.el (gnus-string-width-function): Remove.
+ (gnus-substring-function): Remove.
+ (gnus-use-correct-string-widths): Remove.
+ (gnus-make-format-preserve-properties): Remove.
+ (gnus-xmas-format): Remove.
- * lisp/vc/vc-hg.el (vc-hg-dir-status-files):
- Don't pass DIR to 'hg status' (bug#22481).
+ * lisp/gnus/gnus-srvr.el (gnus-server-mode): Remove XEmacs compat.
-2016-01-30 Stephen Leake <stephen_leake@stephe-leake.org>
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
- Fix typo in previous commits
+ Remove Gnus XEmacs compat functions
- * lisp/progmodes/project.el (project-find-file-in):
- * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): Fix typo in previous
- commit.
+ * lisp/gnus/gnus-registry.el: Remove XEmacs compat.
-2016-01-30 Stephen Leake <stephen_leake@stephe-leake.org>
+ * lisp/gnus/gnus-salt.el: Remove XEmacs compat.
- Improve project-find-file
+ * lisp/gnus/gnus-score.el (gnus-decay-score): Remove XEmacs compat.
- * lisp/progmodes/project.el (project-file-completion-table): New.
- (project-find-file, project-or-external-find-file): Default to filename
- at point.
- (project-file-completion-table): New, split out from
- project--find-file-in.
- (project-find-file-in): Renamed from project--find-file-in, use
- project-file-completion-table.
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/progmodes/xref.el (ede-minor-mode): New declaration.
- (xref--find-ignores-arguments): Add doc string.
+ Remove Gnus XEmacs compatibility
-2016-01-30 Stephen Leake <stephen_leake@stephe-leake.org>
+ * lisp/gnus/gnus-demon.el (gnus-demon-idle-since): Remove
+ XEmacs compat.
- Implement vc-mtn-find-ignore-file, fix some doc strings
+ * lisp/gnus/gnus-dired.el: Remove XEmacs compat.
- * lisp/cedet/cedet-global.el (cedet-gnu-global-root): Improve doc string.
+ * lisp/gnus/gnus-draft.el: Remove XEmacs compat.
- * lisp/cedet/ede/locate.el (initialize-instance): Improve doc string.
+ * lisp/gnus/gnus-gravatar.el (gnus-gravatar-insert): Remove
+ XEmacs compat.
- * lisp/vc/vc-git.el (vc-git-find-ignore-file): Fix doc string.
+ * lisp/gnus/gnus-group.el: Remove XEmacs compat.
- * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): New function.
+ * lisp/gnus/gnus-html.el: Remove XEmacs compat.
-2016-01-29 Vincent Belaïche <vincentb1@users.sourceforge.net>
+ * lisp/gnus/gnus-ml.el: Remove XEmacs compat.
- Correct a whole bunch of bugs coming with renamed cell relocation.
+ * lisp/gnus/gnus-picon.el (gnus-picon-style): Remove XEmacs comment.
- This is the same change as commit on master branch. See
- http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=badcd38aa86ed7973f2be2743c405710973a0bdd
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/ses.el (ses-localvars): rename variable
- `ses--renamed-cell-symb-list' into `ses--in-killing-named-cell-list'
- and adjust the comment about it.
- (ses-plist-delq): new defun.
- (ses--ses-buffer-list): new defvar.
- (ses--unbind-cell-name): new defun.
- (ses-relocate-symbol): Do not relocate symbol when it is a named cell.
- (ses-relocate-formula): Undo change of
- 2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net that was
- preventing relocation for named cell --- now doing this is delegated
- to function `ses-relocate-symbol'.
- (ses-relocate-range): In docstring, undo change of
- 2016-01-03T07:31:52Z!johnw@newartisans.com, `ses-range' must remain
- lower case as it is not a variable.
- (ses-relocate-all): Cell name relocation : 1) check that cell is a
- renamed cell by testing `ses-cell' property to :ses-named, rather than
- comparing name to corresponding standard name. Set rowcol of renamed
- cell into the hashmap --- `ses-cell' property must not be used for
- that as the same name can be used for different locations in different
- SES sheets ; 2) use `local-variable-if-set-p' rather than `boundp' and
- `local-variable-p' to check if cell name is already in use in this
- sheet or needs initialization.
- (ses-relocate-all): Cell value relocation : 1) like for name
- relocation use the `ses-cell' property rather than comparing actual
- name to corresponding standard name. 2) Correct bug introduced in
- 2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net, as the test was
- made the other way round than the intention --- ie value relocation
- was disabled for standard cell, not for renamed cell as was the
- intention.
- (ses-relocate-all): Add loop for unbinding deleted renamed cells
- names.
- (ses-killbuffer-hook): new defun.
- (ses-mode): Add the ses--ses-buffer-list maintenance mechanism ---
- kill buffer hook, plus pushing current buffer if new in list.
- (ses-delete-row, ses-delete-column): Collect deleted renamed cells
- into `ses--in-killing-named-cell-list'.
- (ses-rename-cell): Remove update of variable
- `ses--renamed-cell-symb-list', this variable is renamed to
- `ses--in-killing-named-cell-list', and its setting is done in
- functions `ses-delete-row' and , `ses-delete-column' now.
- (ses-rename-cell): Make cell new name a buffer local variable.
- (ses-rename-cell): Change correction of
- 2015-12-30T23:10:37Z!vincentb1@users.sourceforge.net concerning
- computation of the range over which `cursor-intangible' property was
- to be updated. This correction was ok for non spilling cells, but not
- for cells spilling over following blank cells. Simply use
- `next-single-property-change' rather than computing the end column
- from column widths.
+ Don't use image-map if it isn't defined
-2016-01-29 Andreas Schwab <schwab@linux-m68k.org>
+ * lisp/net/shr.el (shr-image-map): Only use image-map as a
+ parent if it's defined (bug#22614).
- Re-enable checks in member, memql, delete to complain about non-lists
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
- * src/fns.c (Fmember, Fmemql, Fdelete): Revert 2007-10-16 change.
+ Check for MagickAutoOrientImage
-2016-01-29 Martin Rudalics <rudalics@gmx.at>
+ * configure.ac: Check for MagickAutoOrientImage.
- Minor doc(-string) tweaks
+ * src/image.c (imagemagick_load_image): Don't use
+ MagickAutoOrientImage unless it's available.
- * lisp/window.el (window-in-direction): Fix doc-string typo.
- * doc/lispref/frames.texi (Frame Font): Mention canonical
- character width/height.
- * doc/lispref/windows.texi (Windows and Frames): Clarify
- handling of minibuffer window for `window-in-direction'.
- (Window Sizes): Minor tweaks in descriptions of
- `window-max-chars-per-line', `window-min-width' and
- `window-min-size'.
- (Deleting Windows): Minor tweak in `delete-window' description.
- (Selecting Windows): Clarify window use time description.
- (Cyclic Window Ordering): Minor tweak.
- (Switching Buffers): Clarify description of
- `switch-to-buffer-in-dedicated-window'.
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-29 Eli Zaretskii <eliz@gnu.org>
+ Document EXIF image rotation
- Minor improvements to 'pcase' documentation
+ * doc/lispref/display.texi (ImageMagick Images): Mention EXIF rotation.
- * doc/lispref/control.texi (Pattern matching case statement):
- Improve the documentation of 'pcase' per comments. See two
- discussion threads on emacs-devel@gnu.org for the details:
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01335.html
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01336.html.
+2016-02-10 Dima Kogan <dima@secretsauce.net>
-2016-01-29 Glenn Morris <rgm@gnu.org>
+ Support integer image rotation and respect EXIF rotations
- Don't use eval to quieten prolog.el compilation.
+ * src/image.c (imagemagick_load_image): Allow integer rotations in
+ addition to floating point rotations (bug#22591).
+ * src/image.c (imagemagick_load_image): Images that have an
+ orientation given in EXIF and have no explicit :rotation tag are now
+ pre-rotated. All information such as width/height is reported for the
+ rotated image.
- * lisp/progmodes/prolog.el (pltrace-on, pltrace-off): Declare.
- (prolog-enable-sicstus-sd, prolog-disable-sicstus-sd): Don't use eval.
+2016-02-10 Wolfgang Jenkner <wjenkner@inode.at>
-2016-01-29 Glenn Morris <rgm@gnu.org>
+ * lisp/net/shr.el (image-map): Defvar it. (Bug#22614)
- Mark some risky prolog variables.
+2016-02-10 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/progmodes/prolog.el (prolog-system-version)
- (prolog-keywords, prolog-types, prolog-mode-specificators)
- (prolog-determinism-specificators, prolog-directives)
- (prolog-program-name, prolog-program-switches)
- (prolog-consult-string, prolog-compile-string)
- (prolog-eof-string, prolog-prompt-regexp, prolog-help-function):
- Mark anything processed by prolog-find-value-by-system as risky.
+ * lisp/gnus/gnus-cite.el: Remove XEmacs compat code.
-2016-01-28 Glenn Morris <rgm@gnu.org>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/custom.el (defcustom): Doc fix.
+ Remove compat code from gnus-bookmark.el
- * doc/lispref/customize.texi (Variable Definitions):
- Defcustom should always have a type.
+ * lisp/gnus/gnus-bookmark.el (gnus-bookmark-mouse-available-p): Remove.
+ (gnus-bookmark-remove-properties): Remove.
-2016-01-28 Glenn Morris <rgm@gnu.org>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/cedet/semantic/db-file.el (semanticdb-persistent-path):
- Fix :type.
+ Remove XEmacs compat code from gnus-a*.el
- * lisp/emacs-lisp/package.el (package-load-list): Improve :type.
+ * lisp/gnus/gnus-agent.el: Remove compat code.
-2016-01-28 Michael Albinus <michael.albinus@gmx.de>
+ * lisp/gnus/gnus-art.el: Remove compat code.
- Fix Bug#22452
+ * lisp/gnus/gnus-async.el: Remove compat code.
- * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection):
- * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
- * lisp/net/tramp-sh.el (tramp-maybe-open-connection):
- * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection):
- Mark it as connected.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/net/tramp.el (tramp-handle-file-remote-p): Check also, if
- connection property "connected" is set. (Bug#22452)
+ Remove gmm compat functions
-2016-01-27 Glenn Morris <rgm@gnu.org>
+ * lisp/gnus/gmm-utils.el (gmm-image-search-load-path): Remove.
+ (gmm-write-region): Remove.
+ (gmm-called-interactively-p): Remove.
- * lisp/xwidget.el (xwidget-query-on-exit-flag): Declare.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/xwidget.el (xwidget-webkit-browse-url): Give explicit error
- if not compiled with xwidgets.
+ * lisp/gnus/ecomplete.el: Remove XEmacs compat code.
-2016-01-27 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- C-u C-x = example doc fix
+ Remove compat code from compface.el
- * doc/emacs/mule.texi (International Chars):
- Adjust example to match current behavior of C-u C-x =.
+ * lisp/gnus/compface.el: Remove XEmacs compat code throughout.
-2016-01-27 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- malloc.h hygiene
+ Remove the now empty gnus-ems.el and references to it
- This attempts to future-proof Emacs a bit against possible glibc
- changes, by having Emacs use <malloc.h> declarations rather than
- coding them up by hand. Problem noted by Florian Weimer in:
- https://sourceware.org/ml/libc-alpha/2016-01/msg00777.html
- Implement this mainly by moving malloc.h-related functions from
- emacs.c (which does not include <malloc.h>) to alloc.c (which does).
- * src/alloc.c (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]:
- New function.
- The remaining changes to this file apply only if DOUG_LEA_MALLOC.
- (alloc_unexec_pre, alloc_unexec_post): New functions.
- (malloc_initialize_hook): Use my_heap_start and alloc_unexec_post.
- (__MALLOC_HOOK_VOLATILE): New macro, if not already defined.
- (__malloc_initialize_hook): Use it.
- (malloc_state_ptr, malloc_initialize_hook, __malloc_initialize_hook):
- Move here from ...
- * src/emacs.c: ... here.
- (malloc_get_state, malloc_set_state): Remove extern decls.
- (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]: Remove static var.
- All uses changed to similarly-named new function.
- (Fdump_emacs): Use new functions alloc_unexec_pre, alloc_unexec_post.
- * src/lisp.h (my_heap_start, alloc_unexec_pre, alloc_unexec_post):
- New decls.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-26 Eli Zaretskii <eliz@gnu.org>
+ Remove Gnus compat names for mouse bindings
- * doc/emacs/mark.texi (Using Region): Clarify wording. (Bug#22467)
+ * lisp/gnus/gnus-ems.el (gnus-widget-button-keymap): Remove.
+ (gnus-down-mouse-2): Remove.
+ (gnus-down-mouse-3): Remove.
-2016-01-26 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- Remove never-set var handle_user_signal_hook
+ Drop Gnus compat functions
- * src/keyboard.c, src/keyboard.h (handle_user_signal_hook):
- Remove never-set var. All uses removed.
+ * lisp/gnus/gnus-ems.el (gnus-mule-max-width-function): Remove.
-2016-01-26 K. Handa <handa@gnu.org>
+ * lisp/gnus/gnus-util.el (gnus-kill-all-overlays): Move here.
- Backport:fix previous change of src/ftfont.c (ftfont_shape_by_flt)
+ * lisp/gnus/gnus.el (gnus-mode-line-modified): Remove.
- * src/ftfont.c (ftfont_shape_by_flt): Fix previous change. Access the
- second glyph only when there are enough glyphs.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- (cherry picked from commit 9835757013569673854b692ccbb58bfb3c3ed1f7)
+ Get rid of gnus-ems-redefine
-2016-01-26 K. Handa <handa@gnu.org>
+ * lisp/gnus/gnus-ems.el (gnus-mouse-face-prop): Remove.
- support rendering of wider range of combinging characters by ftfont backend
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/language/hebrew.el (hebrew-shape-gstring): If the font backend
- supports rendering of combining characters, call
- font-shape-gstring.
+ * lisp/gnus/gnus-spec.el: Move definition here from gnus-ems.el.
- * src/font.c (Ffont_get): Handle `combining-capability' property.
- (syms_of_font): New symbol ":combining-capability'.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * src/font.h (struct font_driver): New member combining_capability.
+ Remove Gnus compat code
- * src/ftfont.c: Include "category.h".
- (ftfont_driver): Initialize combining_capability to
- ftfont_combining_capability.
- (ftfont_shape_by_flt): If OTF is null, try to find a suitable
- FLT in advance.
- (ftfont_combining_capability): New function.
+ * lisp/gnus/gnus-ems.el (gnus-ems-redefine): Remove
+ transitional code from ten years ago.
- (cherry picked from commit 536f48e9a2251b9e654ea974bd90ff2f40218753)
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-26 Anders Lindgren <andlind@gmail.com>
+ Allow interactively scaling past :max-width etc
- Fixed NextStep fullscreen issue (bug#22468)
+ * lisp/image.el (image--current-scaling)
+ (image--image-without-parameters): New functions.
+ (image--change-size): Use them to allow changing the size of a
+ image even if it has :width/:max-width (etc.) already set.
- When in fullscreen mode, `[screen visibleFrame]' sometimes
- includes, sometimes excludes the menu bar. This could cause
- a frame to be placed too low when in fullscreen mode.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * src/nsterm.m (ns_menu_bar_should_be_hidden): Trace.
- (constrain_frame_rect): New parameter, isFullscreen, when true don't
- query the height of the menu bar.
- (ns_constrain_all_frames): Pass `false' (isFullscreen) to
- `constrain_frame_rect'.
- ([EmacsView initFrameFromEmacs:]): Trace.
- ([EmacsView isFullscreen]): Trace.
- ([EmacsWindow constrainFrameRect:toScreen:]): Pass fullscreen
- state to `constrain_frame_rect'.
+ * lisp/gnus/mm-decode.el (shr-image-map): Compilation fix.
-2016-01-26 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/files.el: Use a fixed file name for the second dir-locals file
+ Allow accessing the image commands via shr
- (dir-locals-file): Revert to its original fixed value.
- (dir-locals-file-2): New const.
- (dir-locals--all-files): Don't use `file-name-all-completions'.
- Instead, just check for the 2 dir-locals files and return a list
- of the ones that exit (if any).
+ * lisp/gnus/mm-decode.el (mm-convert-shr-links): Allow
+ accessing the image commands.
- * etc/NEWS: Document the change.
+ * lisp/net/shr.el (shr-image-map): New map used for images.
+ (shr-urlify): Don't overwrite image maps when applying URL maps.
- * doc/emacs/custom.texi (Directory Variables): Document the change.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * doc/lispref/variables.texi (Directory Local Variables): Update
- accordingly.
+ Use a sparse image keymap
-2016-01-26 Artur Malabarba <bruce.connor.am@gmail.com>
+ * lisp/image.el (image-map): Use a sparse keymap.
- * lisp/files-x.el (modify-dir-local-variable): Small rewrite
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- Change a variable name to be more meaningful, and reorder some of
- the code with no change in behaviour.
+ Put a keymap on images created with insert-image and friends
-2016-01-26 Artur Malabarba <bruce.connor.am@gmail.com>
+ * lisp/image.el (image-save): New command.
+ (image-rotate): Ditto.
+ (image-map): New keymap.
+ (insert-image): Put the image-map on all images.
+ (insert-sliced-image): Ditto.
+ * doc/lispref/display.texi (Showing Images): Document the
+ image map.
- * lisp/files.el (dir-locals-find-file): Refactor return values
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- Returning a cache remains unchanged, but the case of returning a
- file (or pattern) is now changed to return the contaning
- directory.
+ Fix some folding issues in read-multiple-choice
- (dir-locals-read-from-file): Rename to `dir-locals-read-from-dir'
- and make obsolete.
- (dir-locals-read-from-dir): Simplify accordingly.
- (hack-dir-local-variables): Simplify accordingly and rename a
- variable.
+ * lisp/subr.el (read-multiple-choice): Fix folding when you
+ have many items.
-2016-01-26 Glenn Morris <rgm@gnu.org>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/textmodes/flyspell.el (flyspell--prev-meta-tab-binding):
- Declare.
+ Fix typo in last checkin
- * configure.ac (USE_CAIRO): Rename to more standard HAVE_CAIRO.
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- * configure.ac (--with-cairo): Say it's experimental.
+ Remove Gnus compat functions
- * lisp/xwidget.el (xwidget-webkit-scroll-behavior):
- Rename using American spelling. Update all uses.
+ * lisp/gnus/gnus-ems.el (gnus-mark-active-p)
+ (gnus-region-active-p, gnus-select-lowest-window)
+ (gnus-summary-display-table, gnus-max-width-function): Remove
+ compat functions.
-2016-01-26 Glenn Morris <rgm@gnu.org>
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
- Yet more xwidget doc fixes.
+ Move non-compat Gnus functions to gnus-util.el
- * lisp/xwidget.el (xwidget-webkit-scroll-behaviour)
- (xwidget-insert, xwidget-webkit-browse-url)
- (xwidget-webkit-scroll-up, xwidget-webkit-scroll-down)
- (xwidget-webkit-scroll-forward, xwidget-webkit-scroll-backward)
- (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
- (xwidget-webkit-show-id-element)
- (xwidget-webkit-show-id-or-named-element)
- (xwidget-webkit-adjust-size, xwidget-webkit-current-url)
- (xwidget-webkit-execute-script-rv)
- (xwidget-webkit-copy-selection-as-kill, xwidget-get)
- (xwidget-put): Doc fixes.
- (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
- (xwidget-webkit-show-id-element)
- (xwidget-webkit-show-id-or-named-element): Prompt fixes.
+ * lisp/gnus/gnus-util.el (gnus-remove-image, gnus-put-image)
+ (gnus-create-image, gnus-image-type-available-p): Move here
+ from gnus-ems.el, since these aren't compat functions.
-2016-01-25 Ted Zlatanov <tzz@lifelogs.com>
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/gnus/gnus-art.el (gnus-blocked-images):
- Add explicit nil choice and tags.
+ Omit valloc decl if redundant
-2016-01-25 Paul Eggert <eggert@cs.ucla.edu>
+ * src/gmalloc.c (valloc): Omit decl if malloc.h is included,
+ to pacify --enable-gcc-warnings.
- Spelling fixes
+2016-02-09 Wolfgang Jenkner <wjenkner@inode.at>
-2016-01-25 Stefan Monnier <monnier@iro.umontreal.ca>
+ Restore the calloc family.
- (font-lock-ensure-function): Fix bug#22399
+ * src/gmalloc.c (calloc, gcalloc, hybrid_calloc): Restore definitions.
+ They were lost in a4817d8 but calloc is still (marginally) used in
+ code statically liked with emacs, so hybrid_calloc is needed.
+ Also, in the non-hybrid case, we can't get rid of calloc anyway as
+ other libraries liked with emacs may need it.
+ * src/conf_post.h: Restore redefinition of calloc to hybrid_calloc.
- * lisp/font-lock.el (font-lock-ensure-function): Fix handling when
- font-lock-mode is not enabled (bug#22399).
+2016-02-09 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-25 Alan Mackenzie <acm@muc.de>
+ Remove some Gnus compat functions
- Expunge "allow" + infinitive from source and doc, part 2.
+ * lisp/gnus/gnus-ems.el (gnus-string-mark-left-to-right)
+ (gnus-window-inside-pixel-edges, gnus-set-process-plist)
+ (gnus-process-plist, gnus-process-get, gnus-process-put): Remove.
- Do the same for "permit", "enable", "prevent", and (where appropriate)
- "require".
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- doc/misc/reftex.texi:
- doc/misc/url.texi:
- lib/get-permissions.c:
- lib/strftime.c:
- lisp/org/org-element.el:
- lisp/org/org-mobile.el:
- lisp/textmodes/reftex-vars.el:
- src/bidi.c:
- src/emacs.c:
- src/xdisp.c:
- test/etags/c-src/emacs/src/lisp.h:
+ -
- Expunge the likes of "This allows to do something" from the above files.
+ -
-2016-01-25 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Redundant line
+ Merge from origin/emacs-25
- `special-mode' is already read-only.
+ 4feb962 * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring
+ cc419fb Don't inloop gnus-uu-mark-thread on the last thread
+ 51c77a2 Display non-ASCII group names better in prompts
+ f93d669 Default to gpg2 instead of gpg
-2016-01-25 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/emacs-lisp/ert.el (ert--results-move): Change error to user-error
+ Merge from origin/emacs-25
+
+ 9ffe7dd * lisp/isearch.el (isearch-define-mode-toggle): Improve logic
+ 16140f7 * lisp/menu-bar.el (menu-bar-options-menu): New search submenu
+ 3db6adb * lisp/isearch.el (search-default-mode)
+ 4ea1ea7 * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode
+ c77ffc8 Use monitor's resolution for positioning tooltips
+ 49e5749 Fix file-notify-test on MS-Windows
+ be1d874 Fix issues found by auditing w32notify code
+ 87ae218 Extend etags Ruby support for accessors
+ aa35257 Update publicsuffix.txt.
+ 6816bff Ensure that Gnus dribble handling allows removing entries
+ 691feae Be consistent when using encoded strings in nnimap data
+ 3ed423b Display the decoded Gnus group name
+ 5428b5b Use completion-ignore-case instead of defining command
-2016-01-25 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- Port "$@" to OpenIndiana ksh93
+ Merge from origin/emacs-25
- In http://lists.gnu.org/archive/html/bug-autoconf/2015-12/msg00000.html
- Pavel Raiskup reports that ${1+"$@"} runs afoul of a bug in /bin/sh
- (derived from ksh 93t+ 2010-03-05). ${1+"$@"} works around an ancient
- bug in long-dead shells, so remove the workaround.
- * admin/check-doc-strings, configure.ac, lib-src/rcs2log:
- Use plain "$@" rather than ${1+"$@"}.
+ 1eaf68f * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+ d333716 ; * etc/NEWS: Expand news entry for scss-mode
+ c32c16f ; Better document changes in ls-lisp default behavior
+ dc6eed2 Fix doc string of tls-program
-2016-01-25 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- * src/xwidget.c (Fxwidget_set_adjustment): Fix doc string quoting typo.
+ Merge from origin/emacs-25
-2016-01-25 Paul Eggert <eggert@cs.ucla.edu>
+ 2c117fc * etc/NEWS: Document new mpc.el features
+ 71a0496 * lisp/custom.el (defface): Revert indentation change. (Bug#22524)
+ 9dfece1 Correctly fontify C++ initializations which "look like" functions.
+ 4485222 Improve newsticker-treeview-selection-face
+ 4236944 Minor fix in tagging Ruby accessors by etags
+ 35fc77d Spelling fixes
+ 3dda110 Remove 'def X' from the example
- Improve wording for SMB support
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- * doc/misc/tramp.texi (External methods): Improve and modernize
- wording for discussion of smbclient. There is no longer any
- need to mention the laundry list of old MS Windows implementations
- of SMB and CIFS, nor to mention CIFS. Also, give a URL for Samba.
+ Minor alignas cleanup
-2016-01-24 Paul Eggert <eggert@cs.ucla.edu>
+ * src/lisp.h (alignas): Remove now-redundant #ifdef that was left
+ over from the old way of doing things, before Bug#20862 was fixed.
- Merge from gnulib
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- This incorporates:
- 2016-01-24 openat_proc_name: fix last '/' overwritten on OS/2 kLIBC
- 2016-01-24 closedir, dirfd, opendir: port to OpenSolaris 5.10
- 2016-01-15 detect utimes() correctly on OS/2 kLIBC
- 2016-01-15 openat_proc_name: port to OS/2 kLIBC
- 2016-01-14 stdint: check _INTPTR_T_DECLARED for intptr_t etc.
- 2016-01-14 opendir, closedir, dirfd, fdopendir: port to OS/2 kLIBC
- 2016-01-14 dup, dup2, fcntl: support a directory fd on OS/2 kLIBC
- 2016-01-14 binary-io: don't put fd in binary mode if a console on EMX
- 2016-01-14 sig2str: list all signals on FreeBSD >= 7
- 2016-01-13 acl-permissions: port to USE_ACL==0 platforms
- 2016-01-12 mktime: rename macro to avoid glibc clash
- 2016-01-12 Port "$@" to OpenIndiana ksh93
- 2016-01-12 Port Universal Time settings to strict POSIX
- * build-aux/gitlog-to-changelog, build-aux/update-copyright:
- * doc/misc/texinfo.tex, lib/acl-internal.c, lib/acl-internal.h:
- * lib/binary-io.h, lib/dirent.in.h, lib/dirfd.c, lib/dup2.c:
- * lib/fcntl.c, lib/fdopendir.c, lib/mktime.c, lib/openat-proc.c:
- * lib/sig2str.h, lib/stdint.in.h, m4/dirfd.m4, m4/dup2.m4:
- * m4/fcntl.m4, m4/utimes.m4:
- Copy from gnulib.
- * m4/gnulib-comp.m4: Regenerate.
+ Add lmalloc commentary and tweak laligned
-2016-01-24 Alan Mackenzie <acm@muc.de>
+ * src/alloc.c (laligned): Help compiler in a tiny way by putting
+ the more-commonly-failing disjunct first.
- Expunge "allow" + infinitive without direct object from source and doc.
+2016-02-09 Eli Zaretskii <eliz@gnu.org>
- Do the same for "permit", "enable", and "prevent".
+ Clarify documentation of key binding conventions
- * doc/emacs/mule.texi:
- * doc/lispref/control.texi:
- * doc/lispref/display.texi:
- * doc/lispref/frames.texi:
- * doc/lispref/functions.texi:
- * doc/lispref/nonascii.texi:
- * doc/lispref/streams.texi:
- * doc/lispref/windows.texi:
- * doc/misc/dbus.texi:
- * doc/misc/eww.texi:
- * doc/misc/flymake.texi:
- * doc/misc/octave-mode.texi:
- * doc/misc/org.texi:
- * doc/misc/reftex.texi:
- * doc/misc/tramp.texi:
- * doc/misc/wisent.texi:
- * etc/NEWS:
- * lisp/autorevert.el:
- * lisp/cedet/mode-local.el:
- * lisp/cedet/semantic/senator.el:
- * lisp/cedet/semantic/wisent.el:
- * lisp/dos-fns.el:
- * lisp/frameset.el:
- * lisp/gnus/gnus-agent.el:
- * lisp/gnus/mm-util.el:
- * lisp/international/characters.el:
- * lisp/ldefs-boot.el:
- * lisp/mail/mailclient.el:
- * lisp/man.el:
- * lisp/mh-e/mh-search.el:
- * lisp/net/tramp-cmds.el:
- * lisp/net/tramp-gvfs.el:
- * lisp/org/org-crypt.el:
- * lisp/org/org-element.el:
- * lisp/org/org-feed.el:
- * lisp/org/org.el:
- * lisp/org/ox-ascii.el:
- * lisp/org/ox-icalendar.el:
- * lisp/org/ox-publish.el:
- * lisp/org/ox.el:
- * lisp/play/gamegrid.el:
- * lisp/play/gomoku.el:
- * lisp/progmodes/antlr-mode.el:
- * lisp/progmodes/python.el:
- * lisp/progmodes/vhdl-mode.el:
- * lisp/strokes.el:
- * lisp/textmodes/ispell.el:
- * lisp/tree-widget.el:
- * lisp/vc/pcvs.el:
- * lisp/window.el:
- * src/lisp.h:
- * src/w32.c:
- * src/w32heap.c:
- * src/w32term.c:
- * src/window.c:
- * src/xfaces.c:
+ * doc/lispref/tips.texi (Key Binding Conventions): Clarify which
+ "punctuation characters" are reserved after "C-c". (Bug#22604)
- Replace solecisms like "This allow to do something" with a correct
- alternative, such as "This allow you to do something", "This allows
- something to be done" or "This allows the doing of something".
+2016-02-09 Oscar Fuentes <ofv@wanadoo.es>
-2016-01-24 l3thal <kwhite@gnu.org>
+ * etc/NEWS: mention the `vc-faces' customization group
- Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-24 Kelvin White <kwhite@gnu.org>
+ Sync with gnulib
- Add NEWS entry for asynchronous reconnect in ERC
+ This incorporates:
+ 2016-02-09 stdalign: port to clang 3.7.0
+ 2016-02-06 misc: port better to gcc -fsanitize=address
+ * doc/misc/texinfo.tex, lib/stdalign.in.h, m4/acl.m4, m4/getgroups.m4:
+ Copy from gnulib.
-2016-01-24 l3thal <kwhite@gnu.org>
+2016-02-09 Michael Albinus <michael.albinus@gmx.de>
- Add NEWS entry for asynchronous reconnect in ERC
+ * CONTRIBUTE: Add more examples for $(SELECTOR) make variable.
-2016-01-24 Kelvin White <kwhite@gnu.org>
+2016-02-09 Katsumi Yamaoka <yamaoka@jpl.org>
- browse-url.el: Add 'google-chrome' to supported browsers.
+ Make mm-html-inhibit-images and mm-html-blocked-images default to nil
-2016-01-24 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/gnus/mm-decode.el (mm-html-inhibit-images)
+ (mm-html-blocked-images): Default to nil.
- Port Tramp manual to latest Texinfo
+ * doc/misc/emacs-mime.texi (Display Customization): Mention that
+ mm-html-inhibit-images and mm-html-blocked-images default to nil.
- Otherwise, 'make pdf' did not work (Bug#22416).
- * doc/misc/tramp.texi (xxx, yyy): Remove macros.
- (trampfn): Specialize to the case where METHOD is nonempty.
- The 2nd argument is now user@host, not 2nd user and 3rd host args.
- All uses changed.
- (trampf): New macro.
+ * etc/NEWS (Gnus): Document mm-html-inhibit-images and
+ mm-html-blocked-images.
-2016-01-24 Lars Ingebrigtsen <larsi@gnus.org>
+2016-02-08 Paul Eggert <eggert@cs.ucla.edu>
- * eww.el (eww-render): Protect against empty content-types.
+ Increase success rate of fallback lmalloc
-2016-01-24 Nicolas Petton <nicolas@petton.fr>
+ * src/alloc.c (lmalloc, lrealloc): Reallocate with (typically)
+ larger and larger sizes, to increase the probability that
+ the allocator will return a Lisp-aligned pointer.
- authors.el updates
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- * admin/authors.el (authors-ignored-files, authors-renamed-files-alist):
- Additions.
+ Make backgrounds extend to the end of the lines in shr
-2016-01-24 Dmitry Gutov <dgutov@yandex.ru>
+ * lisp/net/shr.el (shr-face-background): Faces can also be on
+ the form `(:background "#fff)' (bug#22547).
- Rename xref-query-replace to xref-query-replace-in-results
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/progmodes/xref.el(xref-query-replace):
- Rename to xref-query-replace-in-results.
- (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01240.html)
+ Make the `R' command get the correct relative <img>s
- * lisp/progmodes/xref.el (xref--xref-buffer-mode-map):
- * lisp/dired-aux.el (dired-do-find-regexp-and-replace):
- * doc/emacs/dired.texi (Operating on Files):
- * doc/emacs/maintaining.texi (Xref Commands)
- (Identifier Search, Identifier Search): Update accordingly.
+ * lisp/net/eww.el (eww-readable): Preserve the base URL so
+ that image expansions are fetched from the right place (bug#22605).
-2016-01-24 Dmitry Gutov <dgutov@yandex.ru>
+ (cherry picked from commit 8722e849f75ceafb82a1c17105e8ab76077a8ebc)
- Update cl-defgeneric and cl-defmethod docstrings
+ Backport:
- * lisp/emacs-lisp/cl-generic.el: Remove outdated TODO item.
- (cl-defgeneric): Rename BODY to DEFAULT-BODY.
- (cl-defmethod): Mention that multiple dispatch arguments are
- allowed. Document supported types. (Bug#22336)
+2016-02-08 Mike Kupfer <m.kupfer@acm.org>
-2016-01-23 Dmitry Gutov <dgutov@yandex.ru>
+ Fix typos in emacs-mime.texi and gnus.texi
- Comment out next-error-function integration in xref
+ * doc/misc/emacs-mime.texi (Display Customization):
+ * doc/misc/gnus.texi (HTML): Fix typo.
- * lisp/progmodes/xref.el (xref--xref-buffer-mode):
- Comment out next-error-function integration
- (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01286.html).
+2016-02-08 Katsumi Yamaoka <yamaoka@jpl.org>
-2016-01-23 John Wiegley <johnw@newartisans.com>
+ * doc/misc/emacs-mime.texi (Display Customization):
+ Doc fix for mm-html-inhibit-images.
- Correct a use of "which" in intro.texi
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-23 Alan Mackenzie <acm@muc.de>
+ Fix message-cross-post-followup-to group names
- Distinguish the two meanings of Java's keyword "default". Fixes bug #22358.
+ * lisp/gnus/message.el (message-cross-post-followup-to): Don't
+ insert group names like "nntp+foo:zot", because those aren't valid.
- * lisp/progmodes/cc-engine.el (c-guess-basic-syntax CASE 14): Check the
- context of case labels (including "default") more rigorously.
- (c-guess-basic-syntax CASE 15): Consequential amendment.
+2016-02-08 David Edmondson <dme@dme.org>
- * lisp/progmodes/cc-langs.el (c-modifier-kwds): Add "default" to Java's value.
+ Compare recipient and keys case-insensitively
-2016-01-23 Oscar Fuentes <ofv@wanadoo.es>
+ * lisp/gnus/mml2015.el: (mml-secure-check-user-id): When comparing a
+ recipient address with that from a key, do so in a case insensitive
+ manner (bug#22603).
- Don't operate on menu bar of nonexistent frame
+2016-02-08 Glenn Morris <rgm@gnu.org>
- * src/xfns.c (Fx_hide_tip) [USE_LUCID]: Check that the current frame
- is valid before redisplaying its menu. Fixes bug#22438.
+ * lisp/gnus/mm-decode.el (mm-alist-to-plist): Doc fix.
-2016-01-23 Anders Lindgren <andlind@gmail.com>
+2016-02-08 Katsumi Yamaoka <yamaoka@jpl.org>
- Unbreak the GNUstep build.
+ Refactor HTML images handling of Gnus and mm-* (a part of bug#21650)
- * src/nsterm.m ([EmacsBell init]): In GNUstep, don't use the
- predefined "caution" image. Add trace.
- (x_set_window_size): Remove unused variables `cols' and `rows'.
- (ns_draw_fringe_bitmap): Exclude assignment of `fromRect' when
- GNUstep is used.
- ([EmacsView updateFrameSize:]): Remove unused variable `win'.
- ([EmacsWindow zoom:]): Remove unused variable `f'.
+ * doc/misc/emacs-mime.texi (Display Customization):
+ Remove mm-inline-text-html-with-images; add documentations for
+ mm-html-inhibit-images and mm-html-blocked-images.
-2016-01-23 Eli Zaretskii <eliz@gnu.org>
- John Wiegley <johnw@gnu.org>
- Michael Heerdegen <michael_heerdegen@web.de>
+ * lisp/gnus/gnus-art.el (gnus-article-show-images):
+ No need to bind mm-inline-text-html-with-images.
+ (gnus-bind-safe-url-regexp): Rename to gnus-bind-mm-vars.
+ (gnus-bind-mm-vars): Rename from gnus-bind-safe-url-regexp;
+ bind mm-html-inhibit-images and mm-html-blocked-images.
+ (gnus-mime-view-all-parts, gnus-mime-view-part-internally)
+ (gnus-mm-display-part, gnus-mime-display-single)
+ (gnus-mime-display-alternative): Use gnus-bind-mm-vars.
- Improve documentation of 'pcase'
+ * lisp/gnus/mm-decode.el (mm-inline-text-html-with-images): Remove.
+ (mm-html-inhibit-images, mm-html-blocked-images): New user options.
+ (mm-shr): Bind shr-inhibit-images and shr-blocked-images with
+ mm-html-inhibit-images and mm-html-blocked-images respectively
+ instead of gnus-inhibit-images and gnus-blocked-images.
- * doc/lispref/control.texi (Pattern matching case statement):
- Reorganize, expand, and improve wording.
+ * lisp/gnus/mm-view.el (mm-setup-w3m): Use mm-html-inhibit-images
+ instead of mm-inline-text-html-with-images.
- * etc/NEWS: Mention that 'pcase' changes are documented.
+2016-02-08 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-23 Paul Eggert <eggert@cs.ucla.edu>
+ Port to FreeBSD 11-CURRENT i386
- * etc/NEWS: Say that Cairo is experimental.
+ Problem reported by Herbert J. Skuhra in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00354.html
+ Instead of trying
+ * src/alloc.c (lmalloc, lrealloc, laligned): New functions.
+ (xmalloc, xzalloc, xrealloc, lisp_malloc): Use them.
+ (__alignof__) [!__GNUC__ && !__alignof__]: New macro.
+ (MALLOC_IS_GC_ALIGNED): New macro.
+ * src/lisp.h (NONPOINTER_BITS): Remove. All uses removed.
+ No longer needed now that alloc.c uses lmalloc and lrealloc.
-2016-01-23 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-08 Michael Albinus <michael.albinus@gmx.de>
- Report error for PNG under Cairo
+ Some fixes in file-notify-tests.el
- * src/image.c (lookup_rgb_color): Signal a file error instead
- of dumping core when mishandling an image.
+ * test/automated/file-notify-tests.el
+ (file-notify--test-with-events-check)
+ (file-notify--test-with-events-explainer): New defuns.
+ (file-notify--test-with-events): Use it.
+ (file-notify-test07-backup): Fix docstring. Some of the
+ backends fire two `changed' events. Backup by rename doesn't
+ work for kqueue.
-2016-01-23 Arash Esbati <esbati@gmx.de>
+2016-02-07 Michael Albinus <michael.albinus@gmx.de>
- Delete a spurious backquote (tiny change)
+ Fix Bug#22557
- * lisp/textmodes/reftex-ref.el (reftex-label): Delete a
- spurious backquote which raises an error with emacs 25.
+ * lisp/filenotify.el (file-notify-callback): Do not send a
+ `stopped' event in case of backup by renaming. (Bug#22557)
-2016-01-23 Paul Eggert <eggert@cs.ucla.edu>
+ * test/automated/Makefile.in: Use $(SELECTOR_EXPENSIVE) for
+ all targets but check and check-maybe.
- Pacify --enable-gcc-warnings --with-cairo
+ * test/automated/file-notify-tests.el
+ (file-notify--test-read-event-timeout): New defconst.
+ (file-notify--deftest-remote, file-notify--wait-for-events)
+ (file-notify-test02-events)
+ (file-notify-test04-file-validity)
+ (file-notify-test06-many-events): Use it.
+ (file-notify--test-cleanup): Make it more robust. Delete also
+ backup file.
+ (file-notify-test07-backup): New test.
- Problem reported by Alexander Kuleshov in:
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01289.html
- * src/gtkutil.c (xg_get_page_setup):
- Use switch rather than if-then-else.
- * src/image.c (COLOR_TABLE_SUPPORT):
- Define directly rather than via #define and optional later #undef.
- (lookup_rgb_color) [USE_CAIRO && ENABLE_CHECKING]:
- Crash when the pixel is undefined, as there is a genuine bug
- here (Bug#22442).
- * src/image.c (tiff_load, gif_load, svg_load_image)
- (x_kill_gs_process) [USE_CAIRO]:
- * src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]:
- Omit unused locals, or move them to where they’re needed.
- (x_clear_area1): Now ATTRIBUTE_UNUSED.
+2016-02-07 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-23 Eli Zaretskii <eliz@gnu.org>
+ Fix test for dladdr
- Update documentation for Dired search and replace
+ Problem reported by Andreas Schwab in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00327.html
+ * configure.ac (dladdr): Link with LIBMODULES when checking for
+ this function.
- * doc/emacs/dired.texi (Operating on Files): Update descriptions
- of 'A' and 'Q' now bound to 'dired-do-find-regexp' and
- 'dired-do-find-regexp-and-replace'.
+2016-02-07 Andreas Schwab <schwab@linux-m68k.org>
- * etc/NEWS: Mention xref-related changes in Dired.
+ Fix gnus-group-get-new-news-this-group on group with closed server
-2016-01-23 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/gnus/nnimap.el (nnimap-change-group): Lookup server
+ method and pass to nnimap-open-server.
- Port recent xdisp.c fix to picky C compilers
+2016-02-07 Artur Malabarba <bruce.connor.am@gmail.com>
- * src/xdisp.c (dump_glyph): Redo the call to fprintf to avoid
- putting #if inside the arguments to a standard function, which
- the C standard says has undefined behavior.
+ * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring
-2016-01-22 Alan Mackenzie <acm@muc.de>
+ While tabs in code are mostly fine because the Emacs sources have a
+ .dir-locals file specifying tab-width, the same is not true of tabs in
+ code examples inside docstrings. The docstring is printed on a *Help*
+ buffer, which can be created on any directory and won't necessarily have
+ the same tab-width set.
- Prevent spurious recognition of K&R argument declarations. Fixes bug #2203
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/progmodes/cc-engine.el (c-forward-declarator): New function.
- (c-in-knr-argdecl): Before recognizing a K&R argument declaration, check it is
- contained in the preceding arg list.
+ Don't inloop gnus-uu-mark-thread on the last thread
- * lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Use the new function
- `c-forward-declarator' in place of inline code.
+ * lisp/gnus/gnus-uu.el (gnus-uu-mark-thread): Don't infloop on the
+ final thread in the summary buffer (bug#16666).
-2016-01-22 Eli Zaretskii <eliz@gnu.org>
+2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
- Fix the build with --enable-checking=glyphs
+ Display non-ASCII group names better in prompts
- * src/xdisp.c (dump_glyph): Don't refer to glyph->u.xwidget in a
- build without xwidget support.
+ * lisp/gnus/gnus-sum.el (gnus-articles-to-read): To decode the
+ group name, we have to do that before we remove the prefix.
-2016-01-22 Eli Zaretskii <eliz@gnu.org>
+2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
- Document cl-generic.el
+ Default to gpg2 instead of gpg
- * doc/lispref/functions.texi (Generic Functions): New section.
- (Bug#22336)
- (Functions): Update the chapter menu.
- * doc/lispref/elisp.texi: Update the master menu.
+ * lisp/epg-config.el (epg-gpg-program): Prefer gpg2 over gpg, if
+ it exists. This fixes many problems with using the GPG
+ authentication agent.
-2016-01-22 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-06 David Edmondson <dme@dme.org>
- xwidgets style cleanup
+ src/process.c Correctly convert AF_INET6 addresses
- Adjust the newly-added Xwidgets code so that it uses a more-typical
- Emacs style. This should not affect behavior, except that in
- a few places it adds runtime checks that Lisp arguments are of
- the proper type, and in one place it uses more-precise arithmetic.
- * src/buffer.c, src/dispnew.c, src/emacs.c, src/emacsgtkfixed.c:
- * src/emacs.c, src/print.c, src/window.c, src/xdisp.c, src/xterm.c:
- Include xwidget.h unconditionally.
- * src/buffer.c (Fkill_buffer):
- * src/dispnew.c (update_window):
- * src/emacs.c (main):
- * src/print.c (print_object):
- * src/window.c (Fdelete_window_internal):
- * src/xdisp.c (handle_single_display_spec, push_it, pop_it)
- (get_next_element, set_iterator_to_next, next_element_from_xwidget)
- (dump_glyph, calc_pixel_width_or_height, BUILD_GLYPH_STRINGS_XW)
- (BUILD_GLYPH_STRINGS, x_produce_glyphs, get_window_cursor_type):
- * src/xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
- Call xwidget functions and macros without worrying about
- HAVE_XWIDGETS when the code is a no-op on non-xwidget
- platforms.
- * src/dispextern.h (XWIDGET_GLYPH, struct glyph_string.xwidget)
- (IT_XWIDGET, GET_FROM_XWIDGET, struct it.u.xwidget)
- (struct it.xwidget):
- * src/lisp.h (PVEC_XWIDGET, PVEC_XWIDGET_VIEW):
- Always define.
- * src/emacsgtkfixed.h: Omit unnecessary comment.
- * src/keyboard.c: Fix spacing.
- * src/xdisp.c (BUILD_XWIDGET_GLYPH_STRING, produce_xwidget_glyph):
- Define to be a no-op if not HAVE_XWIDGETS.
- * src/xwidget.c: Include xwidget.h first (after config.h)
- to make sure that it can stand by itself.
- (Fmake_xwidget, Fxwidget_webkit_execute_script):
- Fix typo in doc string.
- (Fmake_xwidget): Check type of args.
- (Fmake_xwidget, offscreen_damage_event)
- (webkit_document_load_finished_cb, webkit_download_cb)
- (webkit_new_window_policy_decision_requested_cb)
- (webkit_navigation_policy_decision_requested_cb)
- (xwidget_osr_draw_cb, xwidget_osr_event_forward)
- (xwidget_osr_event_set_embedder, xwidget_init_view):
- Omit unnecessary casts.
- * src/xwidget.c (Fmake_xwidget, xwidget_hidden)
- (xwidget_show_view, xwidget_hide_view)
- (x_draw_xwidget_glyph_string, xwidget_start_redisplay, xwidget_touch)
- (xwidget_touched):
- * src/xwidget.h (struct xwidget.kill_without_query)
- (struct xwidget_view.redisplayed, struct xwidget_view.hidden):
- Use bool for boolean.
- * src/xwidget.c (store_xwidget_event_string, Fxwidget_size_request):
- Simplify by using list functions.
- (WEBKIT_FN_INIT): Omit unnecessary test for nil.
- (Fxwidget_resize): Check type of integer args
- before doing any work. Check that they are nonnegative.
- (Fxwidget_set_adjustment): Check type of integer arg.
- Avoid redundant call to gtk_scrolled_window_get_vadjustment.
- Simplify. Use double, not float.
- (Fxwidget_info, Fxwidget_view_info): Simplify by using CALLN.
- (valid_xwidget_spec_p): Simplify.
- (xwidget_spec_value): Omit unused arg FOUND. All callers changed.
- * src/xwidget.h: Include lisp.h first, so that includers do
- not need to worry about doing that before including this file.
- Make this .h file safe to include even on non-HAVE_XWIDGETS
- configurations, to simplify the includers.
- (x_draw_xwidget_glyph_string, syms_of_xwidget, valid_xwidget_spec_p)
- (xwidget_end_redisplay, lookup_xwidget)
- (xwidget_view_delete_all_in_window, kill_buffer_xwidgets):
- Now a no-op if !HAVE_XWIDGETS, to simplify callers.
- (struct glyph_matrix, struct glyph_string, struct xwidget)
- (struct xwidget_view, struct window):
- New forward or incomplete decls, so that includers need not
- assume the corresponding .h files are already included, or that
- HAVE_XWIDGETS is defined.
- (struct xwidget_type, xwidget_from_id): Remove; unused.
-
-2016-01-22 Michael Albinus <michael.albinus@gmx.de>
-
- Backport kqueue integration from master
-
- * configure.ac (--with-file-notification): Add kqueue.
- (top): Remove special test for "${HAVE_NS}" and
- ${with_file_notification}, this is handled inside gfilenotify
- tests. Add kqueue tests. Use NOTIFY_CFLAGS and NOTIFY_LIBS
- instead of library specific variables. Add error message for
- gfile on Nextstep.
-
- * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
- Fix some glitches in the example.
-
- * etc/NEWS: Mention kqueue.
-
- * lisp/filenotify.el (file-notify--library)
- (file-notify-descriptors, file-notify-callback)
- (file-notify-add-watch, file-notify-rm-watch)
- (file-notify-valid-p): Add kqueue support.
- (file-notify--rm-descriptor): Remove WHAT arg.
-
- * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
-
- * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
-
- * src/inotify.c (inotifyevent_to_event): Extract file name from
- watch_object if the event doesn't provide it.
- (Finotify_add_watch): Add file name to watch_object.
-
- * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
-
- * src/kqueue.c: New file.
-
- * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
-
- * test/automated/file-notify-tests.el
- (file-notify--test-expected-events): Remove.
- (file-notify--test-cleanup): Do not set that variable.
- (file-notify--test-timeout) Use different timeouts for
- different libraries.
- (file-notify--test-library): New defun.
- (file-notify--test-event-test): Make stronger checks.
- (file-notify--test-with-events): EVENTS can also be a list of
- lists. Flush outstanding events before running the body.
- Make timeout heuristically depend on the number of events.
- (file-notify-test01-add-watch, file-notify-test02-events)
- (file-notify-test04-file-validity, file-notify-test05-dir-validity):
- Rewrite in order to call file monitors but directory monitors.
- (file-notify-test02-events, file-notify-test04-file-validity): Do
- not skip cygwin tests. Add additional test for file creation.
- Adapt expected result for different backends.
- (file-notify-test03-autorevert): Some of the tests don't work for
- w32notify.
- (file-notify-test06-many-events): New test.
-
-2016-01-22 John Wiegley <johnw@newartisans.com>
-
- Further corrections to the pcase docstring
-
-2016-01-22 Eli Zaretskii <eliz@gnu.org>
-
- * doc/emacs/anti.texi (Antinews): Rewrite for Emacs 25.
-
-2016-01-22 Stephen Leake <stephen_leake@stephe-leake.org>
-
- In xref-collect-references, force backends to respect the 'dir' arg
-
- * lisp/progmodes/xref.el (xref-collect-references): Force symref backends
- to use `default-directory'.
+ * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are
+ converted to a list of 16 bit quantities by
+ conv_sockaddr_to_lisp(). conv_lisp_to_sockaddr() should follow the
+ same scheme rather than expecting a (longer) list of 8 bit
+ quantities.
-2016-01-22 John Wiegley <johnw@newartisans.com>
+ Backport:
- Minor correction to pcase docstring
+ (cherry picked from commit 55ce3c30d617c38eb086d5ad4ffbd881c20c559c)
-2016-01-22 John Wiegley <johnw@newartisans.com>
+2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
- Write a new docstring for the pcase macro
+ * lisp/isearch.el (isearch-define-mode-toggle): Improve logic
- * lisp/emacs-lisp/pcase.el (pcase): Write a new docstring.
+2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
-2016-01-21 Stephen Berman <stephen.berman@gmx.net>
+ * lisp/menu-bar.el (menu-bar-options-menu): New search submenu
- Avoid byte-compiler warning in todo-mode (bug#21953)
+ (menu-bar-search-options-menu): New variable
- * lisp/calendar/todo-mode.el (todo-convert-legacy-files): Add limit argument
- to looking-back to comply with advertised-calling-convention.
+2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
-2016-01-21 Stephen Berman <stephen.berman@gmx.net>
+ * lisp/isearch.el (search-default-mode)
- Fix desktop support in todo-mode and doc-view (bug#22377)
+ (isearch-regexp-function): Improve docstrings.
- * lisp/calendar/todo-mode.el (todo-restore-desktop-buffer):
- * lisp/doc-view.el (doc-view-restore-desktop-buffer): Return current buffer.
+2016-02-06 Artur Malabarba <bruce.connor.am@gmail.com>
- * lisp/calendar/todo-mode.el (todo-modes-set-2):
- * lisp/doc-view.el (doc-view-mode): Set desktop-save-buffer unconditionally.
+ * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode
-2016-01-21 Paul Eggert <eggert@cs.ucla.edu>
+ (search-default-mode): New variable.
+ (isearch-mode, isearch-define-mode-toggle)
+ (isearch--describe-regexp-mode): Update accordingly.
+ * lisp/menu-bar.el (nonincremental-search-forward): Update accordingly.
+ * etc/NEWS: Update accordingly.
+ * doc/emacs/search.texi: Update accordingly.
- No need to configure gobject-introspection
+2016-02-06 Oscar Fuentes <ofv@wanadoo.es>
- It wasn’t needed for the recently-installed xwidget_mvp code; see:
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01154.html
- * configure.ac (DOES_XWIDGETS_USE_GIR, GIR_REQUIRED, GIR_MODULES):
- (HAVE_GIR):
- * src/Makefile.in (GIR_LIBS, GIR_CFLAGS):
- Remove. All uses removed.
- * configure.ac (emacs_config_features): Don’t worry about GIR.
+ Use monitor's resolution for positioning tooltips
-2016-01-20 Paul Eggert <eggert@cs.ucla.edu>
+ * src/xfns.c (compute_tip_xy): Use the resolution of the monitor where
+ the mouse pointer is to avoid placing the tooltip over the border of
+ the monitor on multi-head displays. Fixes bug#22549.
- Don’t export C symbols not used elsewhere
+2016-02-06 Eli Zaretskii <eliz@gnu.org>
- These were recently added, mostly as part of xwidget code.
- * src/emacsgtkfixed.c (emacs_fixed_get_type): Now static.
- (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
- Now static functions here, not macros in emacsgtkfixed.h.
- * src/emacsgtkfixed.h (EMACS_TYPE_FIXED):
- Remove. All uses replaced by definiens.
- (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
- Remove; these are now static functions in emacsgtkfixed.c.
- (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS):
- Remove; unused.
- (emacs_fixed_get_type): Remove decl; no longer extern.
- * src/xwidget.c (offscreen_damage_event)
- (webkit_mime_type_policy_typedecision_requested_cb)
- (webkit_new_window_policy_decision_requested_cb)
- (webkit_navigation_policy_decision_requested_cb)
- (xwidget_spec_value, xwidget_view_lookup)
- (xwidget_start_redisplay, xwidget_touch):
- Now static.
- * src/xwidget.h (xwidget_start_redisplay, xwidget_touch):
- Remove decls.
+ Fix file-notify-test on MS-Windows
-2016-01-20 Dmitry Gutov <dgutov@yandex.ru>
+ * test/automated/file-notify-tests.el (file-notify--test-timeout):
+ Reduce w32notify timeout to 10 sec.
+ (file-notify-test06-many-events): Call read-event after each
+ rename, to keep the w32notify backend happy in batch mode.
+ (Bug#22534)
- Support squiggly heredocs in ruby-mode
+2016-02-06 Eli Zaretskii <eliz@gnu.org>
- * lisp/progmodes/ruby-mode.el (ruby-here-doc-beg-re):
- Support squiggly heredocs added in Ruby 2.3.
+ Fix issues found by auditing w32notify code
- * test/indent/ruby.rb: Add squiggly example.
+ * src/w32inevt.c (handle_file_notifications): Count the number of
+ events to be returned.
+ * src/w32notify.c (send_notifications): Don't copy to the file
+ notification buffer more than it can hold. (Bug#22534)
-2016-01-20 Glenn Morris <rgm@gnu.org>
+2016-02-06 Eli Zaretskii <eliz@gnu.org>
- * configure.ac (emacs_config_features): Remove WEBKIT.
+ Extend etags Ruby support for accessors
-2016-01-20 Paul Eggert <eggert@cs.ucla.edu>
+ * lib-src/etags.c (Ruby_functions): Support accessors defined with
+ parentheses. (Bug#22563)
- Port to platforms with gtk3 but not webkitgtk3
+ * test/etags/ruby-src/test1.ru (A::B): Add tests for accessors
+ defined with parentheses.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
- I ran into this problem on my Fedora 23 installation;
- Emacs configured but did not build when --with-xwidgets was specified.
- * configure.ac (HAVE_WEBKIT, HAVE_GIR): Omit unnecessary initializations.
- (DOES_XWIDGETS_USE_GIR): New var.
- If --with-xwidgets is specified, report an error if not
- doable, to be consistent with the other --with options.
- Require webkitgtk3 to use Xwidgets, as the Xwidgets code does
- not work at all without webkitgtk3. Simplify use of
- EMACS_CHECK_MODULES. Output message about gobject
- introspection only if xwidgets are used.
- * etc/NEWS: Users need webkitgtk3, not merely webkit.
- * src/xwidget.c (syms_of_xwidget): Don’t worry about HAVE_WEBKIT_OSR,
- since this file is no longer compiled if webkitgtk3 is not available.
+2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-20 Eli Zaretskii <eliz@gnu.org>
+ Update publicsuffix.txt.
- Fix doc string of 'isearch-search-fun-function'
+ * etc/publicsuffix.txt: Updated from
+ https://publicsuffix.org/list/public_suffix_list.dat.
- * lisp/isearch.el (isearch-search-fun-function)
- (isearch-search-string): Doc fixes. (Bug#22411)
+2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ Ensure that Gnus dribble handling allows removing entries
- * lisp/xwidget.el: Nitpicks
+ * lisp/gnus/gnus-start.el (gnus-dribble-enter): Ensure that each
+ entry is on a single line.
- * lisp/xwidget.el (xwidget-log, xwidget-webkit-callback):
- Use with-current-buffer rather than save-excursion + set-buffer.
+2016-02-05 OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> (tiny change)
-2016-01-20 Glenn Morris <rgm@gnu.org>
+ Be consistent when using encoded strings in nnimap data
- Don't hard-code 1 as point-min.
+ * lisp/gnus/nnimap.el (nnimap-encode-gnus-group): New function
+ (nnimap-request-list): Use it.
+ (nnimap-request-newgroups): Ditto.
- * lisp/image-mode.el (image-display-size):
- * lisp/xwidget.el (xwidget-webkit-last-session)
- (xwidget-webkit-current-session): Don't hard-code 1 as point-min.
+2016-02-05 OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> (tiny change)
-2016-01-20 Glenn Morris <rgm@gnu.org>
+ Display the decoded Gnus group name
- * lisp/xwidget.el: Add declarations to silence non-xwidget compilation.
+ * lisp/gnus/gnus-sum.el (gnus-summary-read-group-1): Use the
+ decoded group name in the message.
-2016-01-20 Glenn Morris <rgm@gnu.org>
+2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
- Trivial doc copyedits.
+ Use completion-ignore-case instead of defining command
- * src/xwidget.c (Fmake_xwidget, Fget_buffer_xwidgets)
- (Fxwidget_webkit_get_title, Fxwidget_resize)
- (Fxwidget_set_adjustment, Fxwidgetp, Fxwidget_view_p)
- (Fxwidget_info, Fxwidget_view_lookup)
- (Fset_xwidget_query_on_exit_flag): Trivial doc copyedits.
+ * lisp/erc/erc.el (erc-mode): Set completion-ignore-case so
+ that we get case-insensitive completion.
+ (erc-completion-at-point): Remove.
-2016-01-20 Glenn Morris <rgm@gnu.org>
+2016-02-05 Eli Zaretskii <eliz@gnu.org>
- Avoid advising image-display-size for xwidgets.
+ Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
- * lisp/xwidget.el (xwidget-image-display-size): Remove.
- (image-display-size): Remove advice.
- * lisp/image-mode.el (xwidget-info, xwidget-at): Declare.
- (image-display-size): Incorporate xwidget code directly.
+2016-02-05 Michael Albinus <michael.albinus@gmx.de>
-2016-01-20 Glenn Morris <rgm@gnu.org>
+ * test/automated/file-notify-tests.el (file-notify-test06-many-events):
- Avoid breaking non-xwidget Emacs that happen to load xwidget.el.
+ Reduce the number of iterations to 250 in case of w32notify.
- * lisp/xwidget.el (window-configuration-change-hook)
- (kill-buffer-query-functions): Only modify these hooks if
- compiled with xwidget support.
+2016-02-05 Eli Zaretskii <eliz@gnu.org>
-2016-01-20 Glenn Morris <rgm@gnu.org>
+ Fix problems caused by new implementation of sub-word mode
- * lisp/xwidget.el (xwidget-webkit-scroll-behaviour): Fix custom spec.
+ * lisp/subr.el (forward-word-strictly, backward-word-strictly):
+ New functions.
+ (word-move-empty-char-table): New variable.
-2016-01-19 Glenn Morris <rgm@gnu.org>
+ * etc/NEWS: Mention 'forward-word-strictly' and
+ 'backward-word-strictly'.
- * configure.ac (WEBKIT, GIR, CAIRO): Use EMACS_CHECK_MODULES, not PKG_.
+ * doc/lispref/positions.texi (Word Motion): Document
+ 'find-word-boundary-function-table', 'forward-word-strictly', and
+ 'backward-word-strictly'. (Bug#22560)
- * configure.ac (emacs_config_features): Add XWIDGETS, WEBKIT, GIR.
+ * src/syntax.c (syms_of_syntax)
+ <find-word-boundary-function-table>: Doc fix.
- * configure.ac (HAVE_WEBKIT_OSR): Remove broken, duplicated gtk3 test.
+ * lisp/wdired.el (wdired-xcase-word):
+ * lisp/textmodes/texnfo-upd.el (texinfo-copy-node-name)
+ (texinfo-copy-section-title, texinfo-start-menu-description)
+ (texinfo-copy-menu-title, texinfo-specific-section-type)
+ (texinfo-insert-node-lines, texinfo-copy-next-section-title):
+ * lisp/textmodes/texinfo.el (texinfo-clone-environment)
+ (texinfo-insert-@end):
+ * lisp/textmodes/texinfmt.el (texinfo-format-scan)
+ (texinfo-anchor, texinfo-multitable-widths)
+ (texinfo-multitable-item):
+ * lisp/textmodes/tex-mode.el (latex-env-before-change):
+ * lisp/textmodes/flyspell.el (texinfo-mode-flyspell-verify):
+ * lisp/skeleton.el (skeleton-insert):
+ * lisp/simple.el (count-words):
+ * lisp/progmodes/vhdl-mode.el (vhdl-beginning-of-libunit)
+ (vhdl-beginning-of-defun, vhdl-beginning-of-statement-1)
+ (vhdl-update-sensitivity-list, vhdl-template-block)
+ (vhdl-template-break, vhdl-template-case, vhdl-template-default)
+ (vhdl-template-default-indent, vhdl-template-for-loop)
+ (vhdl-template-if-then-use, vhdl-template-bare-loop)
+ (vhdl-template-nature, vhdl-template-procedural)
+ (vhdl-template-process, vhdl-template-selected-signal-asst)
+ (vhdl-template-type, vhdl-template-variable)
+ (vhdl-template-while-loop, vhdl-beginning-of-block)
+ (vhdl-hooked-abbrev, vhdl-port-copy, vhdl-hs-forward-sexp-func):
+ * lisp/progmodes/verilog-mode.el (verilog-backward-sexp)
+ (verilog-forward-sexp, verilog-beg-of-statement)
+ (verilog-set-auto-endcomments, verilog-backward-token)
+ (verilog-do-indent):
+ * lisp/progmodes/vera-mode.el (vera-guess-basic-syntax)
+ (vera-indent-block-closing):
+ * lisp/progmodes/simula.el (simula-context)
+ (simula-backward-up-level, simula-forward-down-level)
+ (simula-previous-statement, simula-next-statement)
+ (simula-skip-comment-backward, simula-calculate-indent)
+ (simula-find-if, simula-electric-keyword):
+ * lisp/progmodes/sh-script.el (sh-smie--rc-newline-semi-p):
+ * lisp/progmodes/ruby-mode.el (ruby-smie--redundant-do-p)
+ (ruby-smie--forward-token, ruby-smie--backward-token)
+ (ruby-singleton-class-p, ruby-calculate-indent)
+ (ruby-forward-sexp, ruby-backward-sexp):
+ * lisp/progmodes/ps-mode.el (ps-run-goto-error):
+ * lisp/progmodes/perl-mode.el (perl-syntax-propertize-function)
+ (perl-syntax-propertize-special-constructs)
+ (perl-backward-to-start-of-continued-exp):
+ * lisp/progmodes/pascal.el (pascal-indent-declaration):
+ * lisp/progmodes/octave.el (octave-function-file-p):
+ * lisp/progmodes/mantemp.el (mantemp-insert-cxx-syntax):
+ * lisp/progmodes/js.el (js--forward-function-decl):
+ * lisp/progmodes/idlwave.el (idlwave-show-begin-check)
+ (idlwave-beginning-of-block, idlwave-end-of-block)
+ (idlwave-block-jump-out, idlwave-determine-class):
+ * lisp/progmodes/icon.el (icon-is-continuation-line)
+ (icon-backward-to-start-of-continued-exp, end-of-icon-defun):
+ * lisp/progmodes/hideif.el (hide-ifdef-define):
+ * lisp/progmodes/f90.el (f90-change-keywords):
+ * lisp/progmodes/cperl-mode.el (cperl-electric-pod)
+ (cperl-linefeed, cperl-electric-terminator)
+ (cperl-find-pods-heres, cperl-fix-line-spacing)
+ (cperl-invert-if-unless):
+ * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur):
+ * lisp/progmodes/cc-align.el (c-lineup-java-inher):
+ * lisp/progmodes/ada-mode.el (ada-compile-goto-error)
+ (ada-adjust-case-skeleton, ada-create-case-exception)
+ (ada-create-case-exception-substring)
+ (ada-case-read-exceptions-from-file, ada-after-keyword-p)
+ (ada-scan-paramlist, ada-get-current-indent, ada-get-indent-end)
+ (ada-get-indent-if, ada-get-indent-block-start)
+ (ada-get-indent-loop, ada-get-indent-type)
+ (ada-search-prev-end-stmt, ada-check-defun-name)
+ (ada-goto-decl-start, ada-goto-matching-start)
+ (ada-goto-matching-end, ada-looking-at-semi-or)
+ (ada-looking-at-semi-private, ada-in-paramlist-p)
+ (ada-search-ignore-complex-boolean, ada-move-to-start)
+ (ada-move-to-end, ada-which-function, ada-gen-treat-proc):
+ * lisp/net/quickurl.el (quickurl-grab-url):
+ * lisp/mail/sendmail.el (mail-do-fcc):
+ * lisp/mail/rmail.el (rmail-resend):
+ * lisp/mail/mailabbrev.el (mail-abbrev-complete-alias):
+ * lisp/mail/mail-extr.el (mail-extract-address-components):
+ * lisp/json.el (json-read-keyword):
+ * lisp/files.el (insert-directory):
+ * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
+ * lisp/completion.el (symbol-under-point, symbol-before-point)
+ (symbol-before-point-for-complete, next-cdabbrev)
+ (add-completions-from-c-buffer):
+ * lisp/cedet/semantic/texi.el (semantic-up-context)
+ (semantic-beginning-of-context):
+ * lisp/cedet/semantic/bovine/el.el (semantic-get-local-variables):
+ use 'forward-word-strictly' and 'backward-word-strictly' instead
+ of 'forward-word' and 'backward-word'.
-2016-01-19 Katsumi Yamaoka <yamaoka@jpl.org>
+2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/gnus/nnir.el (nnir-request-update-mark):
- Default to the original mark.
- cf. <http://thread.gmane.org/gmane.emacs.gnus.general/86583>
- and <http://thread.gmane.org/gmane.emacs.gnus.general/86640>
+ Fix doc string of tls-program
-2016-01-19 Glenn Morris <rgm@gnu.org>
+ * lisp/net/tls.el (tls-program): Document the %t parameter (bug#22559).
- * lisp/xwidget.el (report-xwidget-bug): Remove.
+2016-02-05 Mark Oteiza <mvoteiza@udel.edu>
- (top-level): No longer require reporter.
+ * etc/NEWS: Document new mpc.el features
-2016-01-19 Joakim Verona <joakim@verona.se>
- Grégoire Jadi <daimrod@gmail.com>
+2016-02-04 Leo Liu <sdl.web@gmail.com>
- Support for the new Xwidget feature.
+ * lisp/custom.el (defface): Revert indentation change. (Bug#22524)
- * configure.ac:
- (HAVE_XWIDGETS, WIDGET_OBJ, EMACS_CONFIG_FEATURES):
- * src/xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
- * src/xdisp.c:
- (handle_display_spec, handle_single_display_spec, push_it)
- (pop_it, set_iterator_to_next, dump_glyph)
- (calc_pixel_width_or_height, fill_xwidget_glyph_string)
- (BUILD_XWIDGET_GLYPH_STRING, BUILD_GLYPH_STRINGS)
- (produce_xwidget_glyph, x_produce_glyphs)
- (get_window_cursor_type):
- * src/window.c (Fdelete_window_internal):
- * src/termhooks.h (e):
- * src/print.c (print_object):
- * src/lisp.h (ptrdiff_t):
- * src/keyboard.c (kbd_buffer_get_event, make_lispy_event)
- (syms_of_keyboard):
- * src/emacs.c (main):
- * src/dispnew.c (update_window, scrolling_window):
- * src/dispextern.h (g, i):
- * Makefile.in (XWIDGETS_OBJ, WEBKIT_CFLAGS, WEBKIT_LIBS)
- (GIR_LIBS, ALL_CFLAGS, base_obj, LIBES):
- * src/keyboard.c (kbd_buffer_get_event):
- * src/emacsgtkfixed.c (emacs_fixed_gtk_widget_size_allocate)
- (emacs_fixed_class_init): Add case for an xwidget view.
+2016-02-04 Alan Mackenzie <acm@muc.de>
- * src/xwidget.c, src/xwidget.h, lisp/xwidget.el: New files for xwidgets
+ Correctly fontify C++ initializations which "look like" functions.
+ Fixes bug#7579.
- Various improvements to the Xwidget feature.
- * src/xwidget.c:
- * src/emacsgtkfixed.c:
- * lisp/xwidget.el:
+ lisp/progmodes/cc-engine.el (c-forward-declarator): Add extra optional
+ parameter to enable handling of "anonymous" declarators in declarations.
-2016-01-19 Eli Zaretskii <eliz@gnu.org>
+ lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Check more rigorously
+ whether a "(" opens a parameter list of a function, or an initialization of a
+ variable.
- Improve documentation of 'alist-get'
+2016-02-04 Ulf Jasper <ulf.jasper@web.de>
- * doc/lispref/variables.texi (Setting Generalized Variables): Add
- 'alist-get' to the list of functions that can appear in PLACE
- argument of 'setf'.
+ Improve newsticker-treeview-selection-face
-2016-01-19 Eli Zaretskii <eliz@gnu.org>
+ * newst-treeview.el (newsticker-treeview-selection-face): Improve
+ readability for dark background.
- Minor copyedits of doc/emacs/maintaining.texi
+2016-02-04 Eli Zaretskii <eliz@gnu.org>
- * doc/emacs/maintaining.texi (List Identifiers): More accurate
- description of "C-M-i" wrt tags tables.
- (Tags Tables): Move the definition of "tag" to a footnote.
+ Minor fix in tagging Ruby accessors by etags
-2016-01-19 Eli Zaretskii <eliz@gnu.org>
+ * lib-src/etags.c (Ruby_functions): Don't tag accessors whose
+ names are not literal symbols. (Bug#22241)
- Unbreak the Cygwin-w32 build
+2016-02-04 Paul Eggert <eggert@cs.ucla.edu>
- * src/w32fns.c (globals_of_w32fns): Move the initialization of
- resetstkoflw into a part that isn't compiled on Cygwin.
- (Bug#22403)
+ Spelling fixes
-2016-01-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2016-02-04 Dmitry Gutov <dgutov@yandex.ru>
- * shr.el (shr-table-body): Allow tables to have text children.
+ Remove 'def X' from the example
-2016-01-19 Phillip Lord <phillip.lord@russet.org.uk>
+ * test/etags/ruby-src/test1.ru (A::B): Remove 'def X'
+ (http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00167.html).
+ * test/etags/CTAGS.good:
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6: Adjust accordingly.
- Cope with multiple overlapping faces.
+2016-02-09 Eli Zaretskii <eliz@gnu.org>
- * lisp/htmlfontify.el (hfy-face-to-style-i): Treat inheritance right to
- left.
- (hfy-face-resolve-face): Handle font specification as well as font
- name. Documentation update. (Bug#21990)
+ Fix network-stream-tests on MS-Windows
-2016-01-19 Paul Eggert <eggert@cs.ucla.edu>
+ * test/lisp/net/network-stream-tests.el (make-local-unix-server):
+ Skip if local sockets are not supported.
- Fix spurious escapes in describe-input-method
+2016-02-09 Michael Albinus <michael.albinus@gmx.de>
- Problem reported by Vincent Belaïche (Bug#22309).
- * lisp/international/mule-cmds.el (describe-language-environment):
- * lisp/international/quail.el (quail-help):
- Apply substitute-command-keys to doc strings before displaying them.
+ * admin/notes/bug-triage: Fix bug priorities. Explain colors in debbugs-gnu.
-2016-01-19 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-09 Eli Zaretskii <eliz@gnu.org>
- Minor improvements to (random t) documentation
+ Disable 'timer-list'
- * doc/lispref/numbers.texi (Random Numbers):
- * src/fns.c (Frandom):
- Omit unnecessary details about randomness fallback.
- Say that it is a fallback.
+ * lisp/emacs-lisp/timer-list.el: Make 'timer-list' a disabled
+ command.
-2016-01-19 Dmitry Gutov <dgutov@yandex.ru>
+2016-02-09 Paul Eggert <eggert@cs.ucla.edu>
- Rename methods in Ruby etags example file
+ Avoid aligned_alloc static/extern collision
- * test/etags/ruby-src/test.rb: Rename the example methods to
- correspond to the common terminology used in Ruby.
- * test/etags/CTAGS.good:
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6: Adjust accordingly.
+ * src/alloc.c (aligned_alloc): Define to private name when a
+ static function, to avoid collision with lisp.h extern decl.
+ Reported by John Yates in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00439.html
-2016-01-19 Dmitry Gutov <dgutov@yandex.ru>
+2016-02-08 Michal Nazarewicz <mina86@mina86.com>
- Propertize backtick in 'def `(abc)' as symbol constituent
+ Make `message-beginning-of-line' aware of folded headers
- * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
- Propertize backtick in 'def `(abc)' as symbol constituent.
- (ruby-syntax-propertize-function):
- Rename to ruby-syntax-propertize.
+ * lisp/gnus/message.pl (message-beginning-of-header): New function which
+ moves point to the beginning of a mail header. The function is aware of
+ folded headers and with non-nil argument looks for the true beginning of
+ a header while with nil argument moves to the indented text of header's
+ value.
+ (message-beginning-of-line): Function is now aware of folded headers and
+ either moves point to the indention of a header or, in visual-line-mode,
+ searches for the beginning of the header.
-2016-01-18 Eli Zaretskii <eliz@gnu.org>
+2016-02-08 Michal Nazarewicz <mina86@mina86.com>
- Fix scrolling under scroll-preserve-screen-position on TTY
+ Optimise ‘point in message header’ check
- * src/window.c (window_scroll_line_based): When setting point to
- preserve screen coordinates, don't let cursor enter either of the
- two scroll margins. (Bug#22395)
+ * lisp/gnus/message.el (message-point-in-header-p): Replace two unbound
+ regular expression matches with a single bound string match thus
+ reducing amount of work the function is doing.
-2016-01-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- Fix shr table rendering of nested tables
+ Make the `R' command get the correct relative <img>s
- * shr.el (shr-table-body): Don't include all tbodies in nested
- tables in the levels above.
+ * lisp/net/eww.el (eww-readable): Preserve the base URL so
+ that image expansions are fetched from the right place (bug#22605).
-2016-01-18 Dmitry Gutov <dgutov@yandex.ru>
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/progmodes/project.el (project--read-regexp): Quote the identifier.
+ Add a mode to list and cancel timers
-2016-01-18 Dmitry Gutov <dgutov@yandex.ru>
+ * doc/lispref/os.texi (Timers): Menton `timer-list'.
- Add xref-based replacements for Dired search commands
+ * lisp/emacs-lisp/timer-list.el: New file.
- * lisp/dired-aux.el (dired-do-find-regexp)
- (dired-do-find-regexp-and-replace): New commands.
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00864.html
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/dired.el (dired-mode-map): Change bindings for `A' and
- `Q' to the new commands.
+ Add new commands to allow changing the size of images
- * lisp/progmodes/xref.el (xref-query-replace)
- (xref-collect-matches): Add progress reporters.
- (xref--find-ignores-arguments): Return nil for zero ignores.
- (xref--show-xrefs): Add an optional argument.
- (xref-collect-matches): Drop the assert. 'find' accepts a
- regular file in place of directory argument, too.
+ * lisp/image.el (image-increase-size, image-decrease-size):
+ New commands.
+ (image-change-size): New function.
-2016-01-18 Alan Mackenzie <acm@muc.de>
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- * doc/lispref/frames.texi (Position Parameters): Say they don't exist on TTYs.
+ Allow the image scale to be a floating point number
-2016-01-18 Eli Zaretskii <eliz@gnu.org>
+ * src/image.c (compute_image_size): The scale can be a
+ floating point number.
- Improve user documentation of Xref
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- * doc/emacs/maintaining.texi (Xref, Find Identifiers)
- (Looking Up Identifiers, Identifier Search, List Identifiers):
- Adjudicate comments by Dmitry Gutov <dgutov@yandex.ru>. See
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00650.html
- for the details.
+ Add an IPv6 test
-2016-01-18 Eli Zaretskii <eliz@gnu.org>
+ * test/lisp/net/network-stream-tests.el
+ (connect-to-tls-ipv6-nowait): Add an ipv6 test, too.
- Fix scrolling under scroll-preserve-screen-position and margins
+2016-02-08 Lars Ingebrigtsen <larsi@gnus.org>
- * src/window.c (window_scroll_pixel_based): When setting point to
- preserve screen coordinates, don't let cursor enter either of the
- two scroll margins. Fix incorrect usage of
- WINDOW_WANTS_HEADER_LINE_P and use WINDOW_HEADER_LINE_HEIGHT
- instead of CURRENT_HEADER_LINE_HEIGHT. (Bug#22395)
+ Use gnutls-serv instead of openssh
-2016-01-18 Eli Zaretskii <eliz@gnu.org>
+ * test/lisp/net/network-stream-tests.el (make-tls-server): Use
+ gnutls-serv instead of openssh.
- Unbreak the MS-Windows build
+2016-02-08 Daniel Colascione <dancol@dancol.org>
- * src/sysdep.c (emacs_gnutls_global_init, gnutls_rnd): Disable for
- WINDOWSNT, to avoid link failure. (Bug#22202)
+ Performance improvements for vc-hg
-2016-01-18 Alan Mackenzie <acm@muc.de>
+ Teach vc-hg how to read some Mercurial internal data structures,
+ allowing us to avoid the need to run hg status -A, which is very slow
+ for large repositories. Fall back to running hg if anything looks
+ funny. vc-hg now puts the _working directory_ revision in the
+ modeline instead of the file revision, which greatly improves
+ performance and which allows us to again skip running hg in the case
+ that we have an active bookmark.
- Desktop: protect users against inadvertant upgrading of desktop file.
+ * lisp/vc/vc-hg.el (vc-hg-state): Try calling `vc-hg-statefast'
+ (vc-hg-symbolic-revision-styles)
+ (vc-hg-use-file-version-for-mode-line-version)
+ (vc-hg-parse-hg-data-structures): New user preferences
+ (vc-hg--active-bookmark-internal, vc-hg--run-log)
+ (vc-hg--symbolic-revision, vc-hg-mode-line-string)
+ (vc-hg--read-u8, vc-hg--read-u32-be)
+ (vc-hg--raw-dirstate-search, vc-hg--cached-dirstate-search)
+ (vc-hg--parts-to-string, vc-hg--pcre-to-elisp-re)
+ (vc-hg--glob-to-pcre, vc-hg--hgignore-add-pcre)
+ (vc-hg--hgignore-add-glob, vc-hg--hgignore-add-path)
+ (vc-hg--slurp-hgignore-1, vc-hg--slurp-hgignore)
+ (vc-hg--ignore-patterns-valid-p)
+ (vc-hg--ignore-patterns-ignored-p, vc-hg--time-to-fixnum)
+ (vc-hg--file-ignored-p, vc-hg--read-repo-requirements)
+ (vc-hg--requirements-understood-p, vc-hg--dirstate-scan-cache)
+ (vc-hg-state-fast): New functions.
+ (vc-hg--hgignore-patterns, vc-hg--hgignore-filenames)
+ (vc-hg--cached-ignore-patterns, vc-hg--dirstate-scan-cache)
+ (vc-hg--dirstate-scan-cache): New internal variables.
+ * lisp/vc/vc-hooks.el (vc-refresh-state): Invoke vc find-file-hook
+ before updating modeline.
- An upgraded (version 208) desktop file cannot be read in Emacs < 25.
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
- * etc/NEWS: Add an entry about upgrading a desktop file.
+ Skip TLS tests if we don't have openssl
- * lisp/desktop.el (desktop-file-version): Amend doc string.
- (desktop-native-file-version, desktop-io-file-version): new variables.
- (desktop-clear): Set desktop-io-file-version to nil.
- (desktop-buffer-info): make the presence of the last item on the list
- conditional on (>= desktop-io-file-version 208).
- (desktop-save): Add extra parameter VERSION to take user's C-u or C-u C-u.
- Amend the doc string. Add code to determine the output file version.
- (desktop-create-buffer): Set desktop-io-file-version to the input file's
- version.
+ * test/lisp/net/network-stream-tests.el (connect-to-tls): Skip
+ TLS tests if we don't have openssl and GnuTLS.
-2016-01-18 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
- Initialize GnuTLS before calling gnutls_rnd
+ Automatically scale images up on high-density screens
- * src/gnutls.c (emacs_gnutls_global_init): Now extern.
- Don’t set gnutls_global_initialized if gnutls_global_init fails.
- * src/sysdep.c: Include "gnutls.h", and <gnutls/crypto.h>
- if 2.12 or later, which has gnutls_rnd.
- (emacs_gnutls_global_init, gnutls_rnd): New fallback
- placeholder macros if before 2.12.
- (init_random): Initialize gnutls globals before trying to
- use gnutls_rnd.
+ * doc/lispref/display.texi (ImageMagick Images): Mention :scale.
+ (Defining Images): Mention image-scaling-factor.
-2016-01-18 Andreas Schwab <schwab@linux-m68k.org>
+ * lisp/image.el (image-compute-scaling-factor): New function
+ (bug#22172).
+ (create-image): Use it.
+ (image-scaling-factor): New variable.
- Don't use GnuTLS before it is initialized
+ * src/image.c (compute_image_size): Take :scale into account.
- * src/sysdep.c (init_random): Don't use gnutls_rnd.
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-17 Paul Eggert <eggert@cs.ucla.edu>
+ Ensure progress when fetching from the queue
- Port cleanup attribute to OpenBSD
+ * lisp/url/url-queue.el (url-queue-check-progress): Ensure
+ that we have progress when fetching queued requests (bug#22576).
- The OpenBSD C compiler issues false alarms about strcpy, strcat, and
- sprintf, and this messes up 'configure' when it tests for the cleanup
- attribute. Work around the problem by using __has_attribute directly.
- Problem reported by Joakim Jalap (Bug#22385).
- * configure.ac: Don’t use AX_GCC_VAR_ATTRIBUTE.
- * m4/ax_gcc_var_attribute.m4: Remove.
- * src/conf_post.h (__has_attribute): Provide a substitute, for
- non-GCC or older GCC compilers. All uses changed to assume
- the substitute. Check for the cleanup attribute.
- * src/emacs-module.c (module_has_cleanup): Just use __has_attribute.
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-17 Paul Eggert <eggert@cs.ucla.edu>
+ Make mail-extract-address-components return the user name more
- Prefer GnuTLS when acquiring random seed
+ * lisp/mail/mail-extr.el (mail-extract-address-components):
+ Return the name even if it's the same as the mailbox name (if
+ `mail-extr-ignore-single-names' isn't set) (bug#22594).
- This attempts to improve on the fix for Bug#22202.
- * configure.ac (HAVE_DEV_URANDOM): Remove.
- Check /dev/urandom existence at run time, not at build time,
- since the device could exist in the former but not the latter.
- * src/sysdep.c [HAVE_GNUTLS]: Include gnutls/gnutls.h.
- (gnutls_rnd) [GNUTLS_VERSION_NUMBER < 0x020c00]: New fallback macro.
- (random_seed): New typedef.
- (set_random_seed): New static function.
- (seed_random): Use them.
- (init_random): Use random_seed instead of uintmax_t, so as to
- not consume more entropy than needed. Prefer gnutls_rnd if it
- works; this avoids a redundant open of /dev/urandom on
- GNU/Linux with modern GnuTLS.
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ Message no longer warns about unknown top level domains
- Improve documentation of dynamic modules
+2016-02-07 Jarno Malmari <jarno@malmari.fi>
- * doc/lispref/loading.texi (How Programs Do Loading): Update the
- description of searching for files in 'load' when Emacs was built
- with support for dynamic modules.
+ Add tests for url-auth
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ * test/lisp/url/url-auth-tests.el: New file.
- * INSTALL: Document --with-modules.
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ Add a TLS connection test
- Document 'function-put'
+ * test/lisp/net/network-stream-tests.el (connect-to-tls): Add
+ a TLS connection test.
- * doc/lispref/symbols.texi (Symbol Plists): Document
- 'function-put'. Update documentation of 'function-get'.
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ Add more network tests
- Document 'funcall-interactively'
+ * test/lisp/net/network-stream-tests.el (echo-server-nowait):
+ New test.
- * doc/lispref/commands.texi (Interactive Call): Document
- 'funcall-interactively'.
- * doc/lispref/functions.texi (Calling Functions): Mention
- 'funcall-interactively' and provide a cross-reference.
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ Add network tests
- * doc/lispref/lists.texi (Association Lists): Document 'alist-get'.
+ * test/lisp/net/network-stream-tests.el: New suite of network tests.
- * doc/lispref/strings.texi (Text Comparison): Document 'string-greaterp'.
+2016-02-07 Foo <rasmus@gmx.us>
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ Allow various Gnus and Message address variables to be functions
- Document renaming of selection-related functions
+ * doc/misc/gnus.texi (To From Newsgroups):
+ gnus-ignored-from-addresses can be a function.
- * doc/lispref/frames.texi (Window System Selections): Rename "x-*"
- functions into the corresponding "gui-*" functions. Make the
- description slightly less X-centric.
+ * doc/misc/message.texi (Wide Reply):
+ message-dont-reply-to-names can be a function.
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/gnus-icalendar.el (gnus-icalendar-identities):
+ message-alternative-emails can be a function.
- * doc/lispref/macros.texi (Expansion): Document 'macroexpand-1'.
+ * lisp/gnus/gnus-notifications.el (gnus-notifications):
+ message-alternative-emails can be a function (bug#22315).
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/gnus-sum.el
+ (gnus-summary-from-or-to-or-newsgroups):
+ gnus-ignored-from-addresses can be a function (bug#22315).
- Document 'define-inline'
+2016-02-07 Lars Ingebrigtsen <larsi@gnus.org>
- * doc/lispref/functions.texi (Defining Functions): Document
- 'define-inline' and related macros.
+ Fix typo in Gnus regexp
- * lisp/emacs-lisp/inline.el (inline-letevals): Doc fix.
+ * lisp/gnus/gnus-art.el (gnus-button-valid-fqdn-regexp): Fix
+ typo in last change to this regexp (bug#22592).
-2016-01-16 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-07 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/files.el (dir-locals--all-files): Respect absolute file-names
+ Port to FreeBSD x86
- * lisp/help-fns.el (describe-variable): Fix a left-over parenthesis
+ Reported by Herbert J. Skuhra in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00336.html
+ * src/lisp.h (NONPOINTER_BITS) [__FreeBSD__]: Zero in this case too,
+ since malloc always returns a multiple of 8 in FreeBSD.
-2016-01-16 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-07 Alan Mackenzie <acm@muc.de>
- * lisp/dired-x.el (dired-omit-here-always): Use add-dir-local-variable
+ On leaving CC Mode, clean up by removing character properties.
- instead of manually writing a dir-locals file.
+ * lisp/progmodes/cc-mode.el (c-leave-cc-mode-mode): Remove from the buffer
+ all instances of the text properties/extents category, syntax-table,
+ c-is-sws, c-in-sws, c-type, and c-awk-NL-prop.
-2016-01-16 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/files.el (dir-locals--all-files): Use completion instead of wildcards
+ * lisp/gnus/gnus-art.el (gnus-button-valid-fqdn-regexp): Don't use
+ the no-longer-existing message-valid-fqdn-regexp variable.
- (dir-locals-file)
- * lisp/files-x.el (modify-dir-local-variable)
- * lisp/dos-fns.el (dosified-file-name)
- * lisp/help-fns.el (describe-variable): Change accordingly.
+2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-16 Jussi Lahdenniemi <jussi@aprikoodi.fi> (tiny change)
+ Remove message-valid-fqdn-regexp, since it changes too much now
+ * lisp/gnus/message.el (message-valid-fqdn-regexp): Remove.
+ (message-bogus-recipient-p): Don't use it any more.
+ (message-make-fqdn): Ditto. Suggested by Lars-Johan Liman.
- Fix incompatbilities with MS-Windows 2000 and older
+2016-02-06 Paul van der Walt <paul@denknerd.org> (tiny change)
- * src/w32.c <multiByteToWideCharFlags>: New global variable.
- (filename_to_utf16, filename_from_ansi, check_windows_init_file):
- Use it instead of the literal MB_ERR_INVALID_CHARS.
- (maybe_load_unicows_dll): Initialize multiByteToWideCharFlags as
- appropriate for the underlying OS version. For details, see
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
- * src/w32.h: Declare multiByteToWideCharFlags.
- * src/w32fns.c (Fx_file_dialog, Fw32_shell_execute)
- (add_tray_notification): Use multiByteToWideCharFlags instead of
- the literal MB_ERR_INVALID_CHARS.
- (_resetstkoflw_proc): New typedef.
- (w32_reset_stack_overflow_guard): Call _resetstkoflw via a
- pointer, as this function is absent in msvcrt.dll shipped with W2K
- and older systems.
+ * lisp/gnus/message.el (message-subject-re-regexp): Also match
+ "Re :" as a "Re:" prefix (commonly used in France).
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+2016-02-06 Adam Sjøgren <asjo@koldfront.dk>
- Mention in PROBLEMS an issue with MS-Windows NT4
+ * lisp/net/shr.el (shr-tag-del, shr-tag-ins): New functions.
- * etc/PROBLEMS (MS-Windows): Mention the problem with Shell32.dll
- on Windows NT4. For the details, see
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
+2016-02-06 David Edmondson <dme@dme.org>
-2016-01-16 Jussi Lahdenniemi <jussi@aprikoodi.fi> (tiny change)
+ src/process.c Correctly convert AF_INET6 addresses
+ * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are
+ converted to a list of 16 bit quantities by
+ conv_sockaddr_to_lisp(). conv_lisp_to_sockaddr() should follow the
+ same scheme rather than expecting a (longer) list of 8 bit
+ quantities.
- Ensure 8-byte aligned memory allocation on MS-Windows 9X
+2016-02-06 Martin Jesper Low Madsen <martin@martinjlowm.dk> (tiny change)
- * src/w32heap.c (init_heap): Redirect malloc, realloc, and free to
- special functions on Windows 9X. Refuse to dump Emacs on Windows 9X.
- (malloc_after_dump_9x, realloc_after_dump_9x)
- (free_after_dump_9x): New functions. (Bug#22379) See also
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00852.html
- for more details about the original problem.
+ * lisp/gnus/auth-source.el (auth-source-macos-keychain-search):
+ Search for all host/port (or protocol) combinations for a match in
+ the OS X keychain.
- * nt/inc/ms-w32.h (malloc_after_dump_9x, realloc_after_dump_9x)
- (free_after_dump_9x): Add prototypes.
+2016-02-06 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ Remove nonsensical setting of gnus-newsgroup-unseen
- Fix tests for active region in hideif.el
+ * lisp/gnus/gnus-sum.el (gnus-update-marks): Remove nonsensical
+ setting of gnus-newsgroup-unseen.
- * lisp/progmodes/hideif.el (hif-evaluate-macro, hide-ifdef-block): Use
- 'use-region-p' to test whether to operate on region, instead of
- testing 'mark-active'.
+2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-16 Eli Zaretskii <eliz@gnu.org>
+ Use underline on all terminals that support it
- Fix interactive specs in some hideif.el commands
+ * lisp/subr.el (read-multiple-choice): Use
+ display-supports-face-attributes-p instead of
+ display-graphic-p to determine whether we can use underlining.
- * lisp/progmodes/hideif.el (hif-evaluate-macro)
- (hide-ifdef-undef, show-ifdef-block): Don't use '(interactive "r")'
- in commands that should only act on the region if it's active.
+2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-15 Phillip Lord <phillip.lord@russet.org.uk>
+ Make the nsm query say what it did after the user interaction
- Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+ * lisp/net/nsm.el (nsm-query): Issue a message about
+ aborting/accepting messages (suggested by N. Jackson)
+ (bug#22531).
-2016-01-15 Phillip Lord <phillip.lord@russet.org.uk>
+2016-02-05 Paul Eggert <eggert@cs.ucla.edu>
- Enable test selector from command line
+ Omit XLI (init) == 0 optimization in make-vector
- * test/automated/Makefile.in: Change variable manipulation to avoid
- over-writing selector.
+ * src/alloc.c (Fmake_vector): Simplify by omitting the (XLI (init)
+ == 0) case, as this optimization is probably not worth the hassle.
+ Just for the record, the test for that case could have been
+ (XLI (init) % ((EMACS_UINT) -1 / UCHAR_MAX) == 0) (!),
+ assuming the typical platform with no padding bits and where
+ conversion to int omits the most significant bits.
-2016-01-15 Alan Mackenzie <acm@muc.de>
+2016-02-05 Paul Eggert <eggert@cs.ucla.edu>
- Don't confuse "::" with ":" when trying to parse member initializers.
+ * autogen.sh: Port to dash (Bug#22556).
- * lisp/progmodes/cc-engine.el (c-back-over-member-initializers): Check
- more robustly for ":" token when searching backwards for it.
+2016-02-05 Michael Albinus <michael.albinus@gmx.de>
- * lisp/progmodes/cc-langs.el (c-:$-multichar-token-regexp): New language
- variable.
+ Minor cleanup for Tramp "doas".
-2016-01-15 Eli Zaretskii <eliz@gnu.org>
+ * doc/misc/tramp.texi (Inline methods): Add "doas" method.
- Ensure positive number of glyphs for margins of positive width
+ * etc/NEWS: Add Tramp connection method "doas".
- * src/dispnew.c (margin_glyphs_to_reserve): Always return a
- positive value when a non-zero width of the marginal area was
- requested. (Bug#22356)
+ * lisp/net/tramp-sh.el (tramp-methods) <doas>:
+ Add `tramp-remote-shell-args'.
-2016-01-15 Eli Zaretskii <eliz@gnu.org>
+2016-02-05 Xi Lu <lx@shellcodes.org>
- Fix crashes when mini-window has non-zero margins
+ * lisp/net/tramp-sh.el (tramp-methods) <doas>: Add. (Bug#22542)
- * src/window.c (resize_frame_windows): Use 'new_size' to set
- minibuffer window's 'total_cols' value, as 'size' might be in
- pixels. (Bug#22356)
+ (tramp-default-user-alist): Add rule for "doas".
+ (top): Completion function for "doas" is
+ `tramp-completion-function-alist-su'.
-2016-01-15 Alan Mackenzie <acm@muc.de>
+2016-02-05 Lars Ingebrigtsen <larsi@gnus.org>
- In comment-dwim with style `extra-line', respect indent-tabs-mode.
+ Restore the window configuration
- This fixes bug #22369.
+ * lisp/net/nsm.el (nsm-query-user): Restore the window
+ configuration (bug#22532).
- * lisp/newcomment.el (comment-make-bol-ws): New function.
- (comment-make-extra-lines): Use new function instead of a crude `make-string'.
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-15 Eli Zaretskii <eliz@gnu.org>
+ Use an X popup in read-multiple-choice if running from a mouse command
- Make 'random' seeds cryptographically secure if possible
+ * lisp/subr.el (read-multiple-choice): Use an X popup if
+ called from a mouse action (bug#19368).
- * configure.ac: Check for "/dev/urandom".
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
- * src/sysdep.c (init_random) [HAVE_DEV_URANDOM]: Read the stream
- for the seed from "/dev/urandom".
- [WINDOWSNT]: Obtain the stream for the seed from w32 APIs.
- * src/fns.c (Frandom): Update the doc string to indicate that
- system entropy is used when available.
- * src/w32.c: Include wincrypt.h.
- (w32_init_crypt_random, w32_init_random): New functions, use the
- CryptGenRandom API.
- (globals_of_w32): Initialize w32_crypto_hprov handle to zero.
- * src/w32.h (w32_init_random): Add prototype.
+ Display cursor in echo area when prompting
- * doc/lispref/numbers.texi (Random Numbers): Document more details
- about 't' as the argument to 'random'.
+ * lisp/subr.el (read-multiple-choice): Display the cursor in
+ the echo area when prompting (bug#19368).
- * etc/NEWS: Mention that '(random t)' now uses a cryptographically
- strong seed if possible.
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
- (Bug#22202)
+ Make NSM prompting clearer
-2016-01-15 Eli Zaretskii <eliz@gnu.org>
+ * lisp/net/nsm.el (nsm-query-user): Use read-multiple-choice
+ to prompt in a nicer way (bug#19368).
- Unhide the --no-line-directive option to 'etags'
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
- * lib-src/etags.c (print_help): Un-undocument the --no-line-directive
- option. (Bug#22306)
+ Underline read-multiple-choice-face
- * doc/man/etags.1: Document the --no-line-directive option.
+ * lisp/faces.el (read-multiple-choice-face): Also underline
+ the choice.
-2016-01-15 Alan J Third <alan@idiocy.org> (tiny change)
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
- Fix picture-mode wrt double-width characters
+ Make the read-multiple-choice prompt a bit prettier
- * lisp/textmodes/picture.el (picture-insert): Check the width of
- the character being replaced, not just that of the replacement.
- (Bug#1808)
+ * doc/lispref/commands.texi (Reading One Event): Mention
+ read-multiple-choice-face.
-2016-01-15 Eric Abrahamsen <eric@ericabrahamsen.net>
+ * lisp/subr.el (read-multiple-choice): Make the prompting a bit
+ prettier.
- Honor docstring of gnus-group-get-new-news
+2016-02-04 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/gnus/gnus-start.el (gnus-get-unread-articles): If the prefix arg is t,
- but non-numeric, unconditionally consider all groups to need updating.
+ Prefer memcpy and memset to doing it by hand
-2016-01-14 Simen Heggestøyl <simenheg@gmail.com>
+ * src/alloc.c (Fmake_vector):
+ * src/ccl.c (setup_ccl_program):
+ Use memset to clear array.
+ * src/alloc.c (Fvector, Fmake_byte_code):
+ * src/charset.c (Fdefine_charset_internal):
+ Use memcpy to copy array.
- Disallow parenthesis in non-pseudo CSS selectors
+2016-02-04 Nicolas Petton <nicolas@petton.fr>
- * lisp/textmodes/css-mode.el (css--font-lock-keywords): Disallow
- parenthesis in selectors except for in the function notation that
- might appear right after a pseudo-class.
- * test/indent/scss-mode.scss: Add a test for it.
+ Do not ignore redirections of 301, 302 and 307 status codes
-2016-01-14 Katsumi Yamaoka <yamaoka@jpl.org>
+ The current version of HTTP/1.1 (RFC 7231) no longer requires
+ confirmation on 301, 302 or 307 status codes, therefore we do not have
+ to ignore redirects for other requests than GET and HEAD.
- * lisp/gnus/nntp.el (nntp-request-newgroups): Simplify
+ * lisp/url/url-http.el (url-http-parse-headers): Do not ignore 301, 302
+ and 307 redirects for other requests than GET and HEAD.
-2016-01-14 Michael Albinus <michael.albinus@gmx.de>
+2016-02-04 Mark Oteiza <mvoteiza@udel.edu>
- check-maybe shall run only default tests
+ * lisp/net/eww.el (eww-switch-to-buffer): Use pop-to-buffer-same-window instead.
- * test/automated/Makefile.in (check, check-expensive): Depend on
- mostlyclean.
- (check-maybe): Re-run only default tests.
- (check-doit): Use code of check-maybe.
- (mostlyclean): Move *.log files away.
+2016-02-04 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-14 Mark Oteiza <mvoteiza@udel.edu>
+ Simplify USE_ALIGNED_ALLOC
- * lisp/thingatpt.el (thing-at-point-uri-schemes): Add "magnet:"
+ * src/alloc.c (USE_ALIGNED_ALLOC): Simplify, now that we’ve merged
+ in the emacs-25 changes. Omit no-longer-needed decl for aligned_alloc.
-2016-01-14 Dmitry Gutov <dgutov@yandex.ru>
+2016-02-04 Eric Abrahamsen <eric@ericabrahamsen.net>
- Un-obsolete tags-loop-continue
+ Honor docstring of gnus-group-get-new-news
- * lisp/progmodes/etags.el (tags-loop-continue): Un-obsolete.
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00682.html
+ * lisp/gnus/gnus-start.el (gnus-get-unread-articles): If the prefix arg
+ is t, but non-numeric, unconditionally consider all groups to need
+ updating.
-2016-01-13 Eli Zaretskii <eliz@gnu.org>
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
- Document obsoletion of 'intangible' and 'point-entered/left'
+ New function read-multiple-choice
+
+ * doc/lispref/commands.texi (Reading One Event): Document
+ read-multiple-choice.
+
+ * lisp/faces.el (read-multiple-choice-face): New face.
+
+ * lisp/subr.el (read-multiple-choice): New function.
+
+2016-02-04 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ ee73997 Make erc work better when encountering unknown prefix chars
+ b99141d Make erc completion case-insensitive again
+ 66c4620 Make complection in erc use consistent casing
+ 8c562b2 Make /QUIT in erc more robust
+ d93d2c5 Make tracking faces in Emacs work more reliably
+ af6ab7e Make shr not bug out on images on non-graphical displays
+ 3311f40 Fix bookmark display widths
+ d90ab1e Fix typo in eww-make-unique-file-name
+ 7f81825 Make it possible to TAB to input fields
+ a43a1dc Insert complete alt texts when images are disabled
+ 56ed4e1 Allow eww text fields to grow
+ 66b315c Make erc work when subword-mode is switched on
+ 255b68f Fix IMAP doc example
+ 91557f5 Quoting fixes in doc strings and diagnostics
+ 2c0dc9f Fix warning message in hack-local-variables
+ 504696d Etags: yet another improvement in Ruby tags
+ 8784ebf Fix x-popup-menu on TTYs without a mouse
+ 8b87ecb * lisp/emacs-lisp/map.el: Improvements to the docstring of the
+ pcase macro
+ 6191003 Use pop-to-buffer-same-window in eww
+ fe321fd * autogen.sh: Revert all recent changes.
+ 74ebd4a * make-dist: Updates related to nt/.
+ 737193a * make-dist: Add modules/.
+ 3696bf2 * make-dist: Update for super-special file that can't live in etc/.
+ a4278e2 Fix failure to compile ns-win.el in parallel builds
+ 860da4d Fix names of tags generated for Ruby accessors
+ f6213ce Fix file-name recognition in 'etags'
+ e42e662 Change Ruby file names and extensions recognized by 'etags'
+ 58bfb6a More improvements for Ruby support in 'etags'
+ c04e911 Add --git-config option to autogen.sh
+ 5713466 Fix editing undo changes in eww fields
+ 51362d6 Allow the user more control of popping up the eww window
+ ee0fbd8 Make eww-browse-url with new-window parameter work again
+ 9c3142d Clean up eww code slightly
+ cb035f3 Don't insert nil faces in shr
+ 4c3fae3 ; * lisp/progmodes/prolog.el: Remove some obsolete commentary.
+ 93f2153 Improve the custom type of some user options.
+ 9f60d7e Mark some risky calendar variables.
+ 1d07dcd Highlight two additional SCSS keywords
+ ee8b466 Recommend enabling integrity-checking in git
+ e639e10 Some corrections in Elisp manual
+ d766ca8 Chatter when autogen.sh changes Git configuration
+ 3b734e1 * org/org-compat.el (org-font-lock-ensure): Fix bogus test (bug#22399)
+ 43cb9f8 Omit unnecessary history from Lisp intro
+ 2fbd1da * etc/HISTORY: Add some more history, plus git tags.
+ c90e1b4 Improve elisp “Security Considerations” doc
+ cedd7ca autogen.sh now arranges for git to check hashes
+ 86ce76b ; Fix ChangeLog.2 commit ID.
+ 7b1d2b1 Fix (c & 040) typo in emergency escapes
+ a8273da Fix display of overlay strings with 'display' and 'box' property
+ fc48106 Fix imap-starttls-open
+ cdecbed Fix return value of imap-starttls-open
+ 20c7e34 ; * etc/NEWS: Fix renamed command name
+ 98bdbdb Correct reference to DARWIN_OS preprocessor symbol
+ b250d29 Spelling fix
+ b920a0e Spelling fixes
+ 93b144b Pacify GCC on C library without glibc API
+
+2016-02-04 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ ea26c8a * lisp/net/browse-url.el (browse-url-default-browser): Lower
+ priority of non-free Chrome.
+ 0fac75f Improve the custom type of some user options.
+ 2df0e04 Highlight CSS variables with variable name face
+ 3cf5e81 * lisp/gnus/gnus-kill.el (gnus-winconf-kill-file): Not
+ user-serviceable.
+ 2a5233c Mark some user options that can get evalled as risky.
+ 39b166f Disable DebPrint in sys_read on MS-Windows
+ 9fd0189 ;Fix ChangeLog entry
+ 4bb7233 Fix typos in Introduction to Emacs Lisp manual
- * doc/lispref/text.texi (Special Properties): Document the new
- properties 'cursor-intangible' and 'cursor-sensor-functions'.
- Document the obsolete status of 'intangible', 'pointer-left',
- and 'point-entered' properties, and of 'inhibit-point-motion-hooks'.
- * doc/lispref/display.texi (Overlay Properties): Document that
- 'intangible' overlay property is obsolete.
+2016-02-04 Vasilij Schneidermann <v.schneidermann@gmail.com> (tiny change)
- * lisp/emacs-lisp/cursor-sensor.el (cursor-sensor-mode): Doc fix.
+ Allow sending empty hidden values in eww
-2016-01-13 Eli Zaretskii <eliz@gnu.org>
+ * lisp/net/eww.el (eww-tag-input): Allow sending empty hidden
+ values (bug#22388).
- Updater documentation of 'looking-back'
+ (cherry picked from commit 5898da8210af7953e638ddf7821c05260979c3f0)
- * doc/lispref/searching.texi (Regexp Search): Update documentation
- of 'looking-back'. Fix markup.
+ Backport:
-2016-01-13 Eli Zaretskii <eliz@gnu.org>
+2016-02-04 David Edmondson <dme@dme.org>
- Document 'pre-redisplay-functions'
+ Make erc work better when encountering unknown prefix chars
- * doc/lispref/hooks.texi (Standard Hooks):
- * doc/lispref/display.texi (Forcing Redisplay): Document
- 'pre-redisplay-functions'.
+ * lisp/erc/erc.el (erc-channel-receive-names): Output a warning
+ instead of erroring out on unknown prefix chars (bug#22380).
-2016-01-13 Eli Zaretskii <eliz@gnu.org>
+2016-02-04 Mark Oteiza <mvoteiza@udel.edu>
- Document the new deafault value of 'load-read-function'
+ Add a new command to switch between erc buffers
- * doc/lispref/loading.texi (How Programs Do Loading): Document the
- change in the default value of 'load-read-function'.
+ * doc/misc/eww.texi: Document eww-switch-to-buffer and its keybinding
+ * etc/NEWS: Mention new command
+ * lisp/net/eww.el (eww-mode-map): Bind eww-switch-to-buffer to "s"
+ (eww-mode-map): Add menu item
+ (eww-switch-to-buffer): New command
-2016-01-13 Eli Zaretskii <eliz@gnu.org>
+2016-02-04 David Edmondson <dme@dme.org>
- Document 'bufferpos-to-filepos' and 'filepos-to-bufferpos'
+ Make erc work better when encountering unknown prefix chars
- * doc/lispref/nonascii.texi (Text Representations): Document
- 'bufferpos-to-filepos' and 'filepos-to-bufferpos'.
+ * lisp/erc/erc.el (erc-channel-receive-names): Output a warning
+ instead of erroring out on unknown prefix chars (bug#22380).
-2016-01-13 Eli Zaretskii <eliz@gnu.org>
+2016-02-04 Vasilij Schneidermann <v.schneidermann@gmail.com> (tiny change)
- Document the new prefix-command hooks
+ Allow sending empty hidden values in eww
- * doc/lispref/hooks.texi (Standard Hooks): Document
- `prefix-command-echo-keystrokes-functions' and
- `prefix-command-preserve-state-hook'.
+ * lisp/net/eww.el (eww-tag-input): Allow sending empty hidden
+ values (bug#22388).
-2016-01-13 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
- Fix one more misuse of time-stamp-time-zone
+ Make erc completion case-insensitive again
- * test/etags/html-src/softwarelibero.html: Use "UTC0" rather
- than the unportable "GMT" for time zone.
+ * lisp/erc/erc.el (erc-completion-at-point): Make erc completion
+ case-insensitive again (bug#11360).
-2016-01-13 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-04 Carlos Pita <carlosjosepita@gmail.com> (tiny change)
- Fix NNTP NEWGROUPS off-by-a-few-hours bug
+ Make complection in erc use consistent casing
- * lisp/gnus/nntp.el (nntp-request-newgroups): Format string
- in Universal Time, since we’re telling the server “GMT”.
+ * lisp/erc/erc-pcomplete.el (pcomplete-erc-all-nicks): Make
+ case in the complection consistent (bug#18509).
-2016-01-13 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-04 Francis Litterio <flitterio@gmail.com>
- Update publicsuffix.txt from upstream
+ Make /QUIT in erc more robust
- * etc/publicsuffix.txt: Update from
- https://publicsuffix.org/list/effective_tld_names.dat
- dated 2016-01-12 11:52:01 UTC.
+ * lisp/erc/erc.el (erc-kill-query-buffers): Don't bug out if we're
+ issuing /QUIT to disconnected servers (bug#22099).
-2016-01-13 Glenn Morris <rgm@gnu.org>
+2016-02-04 Kevin Brubeck Unhammer <unhammer@fsfe.org> (tiny change)
- Fix some declarations.
+ Make tracking faces in Emacs work more reliably
- * lisp/descr-text.el (internal-char-font):
- * lisp/cedet/mode-local.el (xref-item-location):
- * lisp/gnus/mml-smime.el (epg-key-sub-key-list)
- (epg-sub-key-capability, epg-sub-key-validity):
- * lisp/international/mule-util.el (internal-char-font):
- Fix declarations.
+ * lisp/erc/erc-track.el (erc-faces-in): Always return lists of
+ faces to avoid later ambiguity (bug#22424).
-2016-01-13 Glenn Morris <rgm@gnu.org>
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
- Fix some custom types.
+ Make shr not bug out on images on non-graphical displays
- * lisp/gnus/gnus-fun.el (gnus-x-face-omit-files, gnus-face-omit-files):
- * lisp/gnus/gnus.el (gnus-valid-select-methods):
- * lisp/mail/rmail.el (rmail-get-coding-function):
- * lisp/net/newst-treeview.el (newsticker-groups-filename):
- * lisp/progmodes/hideif.el (hide-ifdef-exclude-define-regexp):
- * lisp/textmodes/tildify.el (tildify-space-predicates):
- * lisp/url/url-tramp.el (url-tramp-protocols):
- Fix custom types.
+ * lisp/net/shr.el (shr-put-image): Don't bug out on alt-less
+ images on non-graphical displays (bug#22327).
-2016-01-13 Glenn Morris <rgm@gnu.org>
+2016-02-04 Andrew Hyatt <ahyatt@gmail.com>
- Add some missing version tags.
+ Remove packages obsoleted before Emacs 24.
- * lisp/electric.el (electric-quote-comment)
- (electric-quote-string, electric-quote-paragraph):
- * lisp/epg-config.el (epg-gpgconf-program):
- * lisp/rect.el (rectangle-preview):
- * lisp/emacs-lisp/check-declare.el (check-declare-ext-errors):
- * lisp/emacs-lisp/package.el (package-selected-packages)
- (package-hidden-regexps):
- * lisp/erc/erc.el (erc-network-hide-list, erc-channel-hide-list):
- * lisp/eshell/em-term.el (eshell-destroy-buffer-when-process-dies):
- * lisp/gnus/mml-sec.el (mml1991-signers, mml2015-signers)
- (mml-smime-signers, mml1991-encrypt-to-self, mml2015-encrypt-to-self)
- (mml-smime-encrypt-to-self, mml2015-sign-with-sender)
- (mml-smime-sign-with-sender, mml2015-always-trust)
- (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
- * lisp/net/browse-url.el (browse-url-conkeror-new-window-is-buffer)
- (browse-url-conkeror-arguments):
- * lisp/net/newst-reader.el (newsticker-download-logos):
- * lisp/progmodes/gud.el (gud-guiler-command-name):
- * lisp/progmodes/prog-mode.el (prettify-symbols-unprettify-at-point):
- * lisp/progmodes/project.el (project-vc):
- * lisp/progmodes/python.el (python-indent-guess-indent-offset-verbose)
- (python-shell-remote-exec-path, python-shell-first-prompt-hook)
- (python-shell-completion-native-disabled-interpreters)
- (python-shell-completion-native-enable)
- (python-shell-completion-native-output-timeout)
- (python-shell-completion-native-try-output-timeout):
- * lisp/progmodes/xref.el (xref):
- * lisp/term/screen.el (xterm-screen-extra-capabilities):
- * lisp/term/xterm.el (xterm-max-cut-length):
- Add missing version tags.
+ In accordance with the policy discussed in the emacs-devel list,
+ packages that have been obsoleted for a full major release cycle are up
+ for deletion.
-2016-01-13 Glenn Morris <rgm@gnu.org>
+ This removes almost all packages that are now eligible for deletion,
+ with the exception of "cl-compat", which seems it is likely to still be
+ used, and "optional", which offers some functionality that doesn't have
+ a replacement yet.
- * test/automated/core-elisp-tests.el
- (core-elisp-tests-1-defvar-in-let): Add a custom type.
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-13 Glenn Morris <rgm@gnu.org>
+ Fix bookmark display widths
- * src/buffer.c (syms_of_buffer) <major-mode>: Doc fix.
+ * lisp/net/eww.el (eww-list-bookmarks): Pop to the buffer before
+ preparing it so that the widths are computed correctly (bug#22328).
- Remove comments that do not apply since 2005-08-09. (Bug#22349)
+2016-02-04 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-12 Paul Eggert <eggert@cs.ucla.edu>
+ Fix typo in eww-make-unique-file-name
- Merge from gnulib
+ * lisp/net/eww.el (eww-make-unique-file-name): Make this function
+ actually work.
- This mostly just changes "UTC" to "UTC0" for POSIX conformance.
- It also updates to the latest version of texinfo.tex.
- * build-aux/gitlog-to-changelog, build-aux/move-if-change:
- * build-aux/update-copyright, doc/misc/texinfo.tex:
- Update from gnulib.
+2016-02-03 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-12 Eli Zaretskii <eliz@gnu.org>
+ Make it possible to TAB to input fields
- Update documentation of 'process-running-child-p'
+ * lisp/net/eww.el (eww-tag-input): Make it possible to TAB to
+ input fields (bug#22540).
- * doc/lispref/processes.texi (Input to Processes): Document the
- changes in return value of 'process-running-child-p'.
+2016-02-03 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-12 Eli Zaretskii <eliz@gnu.org>
+ Insert complete alt texts when images are disabled
- Update documentation of 'deactivate-mark'.
+ * lisp/net/shr.el (shr-tag-img): When images are disabled, insert
+ the complete alt/title string (bug#22293).
- * doc/lispref/markers.texi (The Mark): Document that
- 'deactivate-mark' is now buffer-local when set.
+2016-02-03 Lars Ingebrigtsen <larsi@gnus.org>
-2016-01-12 Eli Zaretskii <eliz@gnu.org>
+ Allow eww text fields to grow
- Update documentation of 'completion-table-dynamic'
+ * lisp/net/eww.el (eww-process-text-input): Allow text fields to
+ grow when typing in stuff that's longer than the original width.
- * doc/lispref/minibuf.texi (Programmed Completion): Document the
- new optional argument to 'completion-table-dynamic'.
+2016-02-03 Dima Kogan <dima@secretsauce.net>
-2016-01-12 Eli Zaretskii <eliz@gnu.org>
+ Make erc work when subword-mode is switched on
- Document changes in 'read-buffer' and 'read-buffer-function'
+ * lisp/erc/erc-backend.el (erc-forward-word, erc-word-at-arg-p)
+ (erc-bounds-of-word-at-point): New functions to do word-based
+ things when subword-mode is switched on.
- * doc/lispref/minibuf.texi (High-Level Completion): Document the
- 4th argument to 'read-buffer' and 'read-buffer-function'.
+ * lisp/erc/erc-button.el (erc-button-add-nickname-buttons): Use them
+ (bug#17558).
-2016-01-12 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-03 Teemu Likonen <tlikonen@iki.fi>
- Fix time-stamp-time-zone bugs introduced in July
+ Fix IMAP doc example
- This fixes a bug introduced when the July changes to
- format-time-string installed, as the changes were not
- correctly handled in this module (Bug#22302).
- Also, document time stamp time zones.
- * lisp/time-stamp.el (time-stamp-time-zone): Document values better.
- (time-stamp--format): New private function.
- (time-stamp-string, time-stamp-string-preprocess)
- (time-stamp-do-number): Use it.
- * doc/emacs/files.texi (Time Stamps): Mention time zones.
- * doc/misc/autotype.texi (Timestamps): Document time-stamp-time-zone.
+ * doc/misc/gnus.texi (Client-Side IMAP Splitting): Fix example.
-2016-01-12 Eli Zaretskii <eliz@gnu.org>
+2016-02-03 Paul Eggert <eggert@cs.ucla.edu>
- Make piping to subprocesses more robust on MS-Windows
+ Quoting fixes in doc strings and diagnostics
- * src/w32.c (sys_write): Don't write to a pipe more stuff than its
- buffer can hold. Don't return -1 if something has been written to
- the pipe. Zero out 'errno' before calling '_write', to avoid
- returning a stale value. (Bug#22344)
- * src/w32proc.c (syms_of_ntproc) <w32-pipe-buffer-size>: New variable.
- * src/w32.c (pipe2): Use it to request a user-defined size for the
- pipe being created.
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-setq, byte-compile-funcall):
+ * lisp/gnus/mml-smime.el (mml-smime-get-dns-cert)
+ (mml-smime-get-ldap-cert):
+ Follow user style preference when quoting diagnostics.
- * etc/NEWS: Mention 'w32-pipe-buffer-size'.
+2016-02-03 Paul Eggert <eggert@cs.ucla.edu>
- * doc/emacs/msdos.texi (Windows Processes): Document
- 'w32-pipe-buffer-size'.
+ Mention context when resume from emergency escape
-2016-01-11 Dmitry Gutov <dgutov@yandex.ru>
+ That way, if the user has been doing something else for a while,
+ they are reminded of the situation when restarting Emacs,
+ and are more likely to understand the two questions.
+ * doc/emacs/trouble.texi (Emergency Escape): Document this.
+ * src/keyboard.c (handle_interrupt): Implement this.
- test/automated/vc-hg.el: Support out-of-tree build
+2016-02-03 Noam Postavsky <npostavs@gmail.com>
- * test/automated/vc-hg.el
- (vc-hg-annotate-extract-revision-at-line-with-filename)
- (vc-hg-annotate-extract-revision-at-line-with-both):
- Don't refer to source-directory.
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00755.html
+ Fix warning message in hack-local-variables
-2016-01-11 Michael Albinus <michael.albinus@gmx.de>
+ * lisp/files.el (hack-local-variables): use 'thisbuf' to reference
+ the original buffer name in the warning message. (Bug#21681)
- Minor change in tramp-tests.el
+2016-02-03 Eli Zaretskii <eliz@gnu.org>
- * test/automated/tramp-tests.el (tramp-test29-vc-registered):
- Use `dired-uncache' instead of a Tramp internal function.
+ Etags: yet another improvement in Ruby tags
-2016-01-11 Peter Feigl <peter.feigl@nexoid.at>
+ * lib-src/etags.c (Ruby_functions): Handle continuation lines in
+ Ruby accessor definitions. (Bug#22241)
- * etc/HELLO: Add Armenian and Mongolian greetings.
+ * test/etags/ruby-src/test1.ru (A::B#X): Add some more tests for
+ accessors and multiline definitions.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
- (Bug#22346)
+2016-02-03 Eli Zaretskii <eliz@gnu.org>
-2016-01-11 Alan Mackenzie <acm@muc.de>
+ Fix x-popup-menu on TTYs without a mouse
- Java Mode: Fontify identifiers in the presence of annotations.
+ * src/menu.c (Fx_popup_menu): Be sure to initialize 'x' and 'y'
+ for the TTY case without a mouse. (Bug#22538)
- * lisp/progmodes/cc-engine.el (c-forward-annotation): Tidy up the coding:
- Don't move point when the defun fails.
- (c-forward-decl-or-cast-1): Correct a usage of match data.
-
- * lisp/progmodes/cc-fonts.el (c-font-lock-maybe-decl-faces): Remove.
- (c-font-lock-declarations): Use the new c-maybe-decl-faces in place of the
- removed variable.
-
- * lisp/progmodes/cc-langs.el (c-maybe-decl-faces): New language variable.
-
-2016-01-11 Eli Zaretskii <eliz@gnu.org>
+2016-02-03 Nicolas Petton <nicolas@petton.fr>
- Avoid an infloop when we run out of memory
+ * lisp/emacs-lisp/map.el: Improvements to the docstring of the pcase macro
- * src/alloc.c (garbage_collect_1): Don't bother saving and
- restoring the echo-area message if we are GC'ing after running out
- of memory. This avoids an infloop due to repeated attempts to
- allocate memory for the cons cell needed to save the message,
- which signals the memory-full error, which attempts to save the
- echo-area message, which signals memory-full again, etc.
+2016-02-03 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-11 Eli Zaretskii <eliz@gnu.org>
+ Port aligned_alloc decl to Cygwin.
- Avoid unnecessary failures of auto-saving after fatal error
+ Problem reported by Ken Brown (Bug#22522#38).
+ * configure.ac (aligned_alloc): Check for decl too.
+ * src/lisp.h (aligned_alloc): Declare if not already declared.
- * src/w32.c (map_w32_filename): Avoid non-trivial system calls for
- the benefit of FAT volumes if we are called as part of shutting
- down due to a fatal error, which probably means we are trying to
- auto-save the session.
- * src/lread.c (check_obarray): Don't bother making the obarray
- valid if we are shutting down due to a fatal error. This avoids
- interfering with auto-saving the crashed session.
+2016-02-03 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-11 Paul Eggert <eggert@cs.ucla.edu>
+ autogen.sh now configures git only on request
- Simplify HAVE_MODULES use in mark_maybe_pointer
+ * autogen.sh (do_autoconf, do_git): New vars.
+ Support new arguments --help, all, autoconf, git.
+ By default, just do autoconf-related configuration, not git.
+ Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
+ If GNU cp is available, use it to backup .git/config before
+ changing it. When configuring git, chatter about what is being
+ done, and configure git to check hashes. Avoid some duplicate
+ file name specification when creating git hooks.
- * src/alloc.c (HAVE_MODULES): Now a constant 0 if not defined,
- so that later code can use 'if' rather than '#ifdef'.
- (mark_maybe_pointer): Simplify based on HAVE_MODULES now
- always working.
+ * GNUmakefile (ALL_IF_GIT): New macro.
+ (configure): Use it.
+ * INSTALL.REPO: Suggest './autogen.sh all'.
-2016-01-11 Paul Eggert <eggert@cs.ucla.edu>
+2016-02-02 Lars Ingebrigtsen <larsi@gnus.org>
- Revert attempt to use 'noexcept' in typedef
+ Use pop-to-buffer-same-window in eww
- This use of 'noexcept' runs afoul of the C++11 standard.
- Problem reported by Philipp Stephani in:
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00706.html
- * src/emacs-module.c (emacs_finalizer_function):
- Move this typedef here ...
- * src/emacs-module.h: ... from here, and use only the C
- version of the typedef. The typedef is now private since it
- is never used in the .h file now and anyway it seemed to be
- causing more confusion than it cured.
- (make_user_ptr, get_user_finalizer, set_user_finalizer):
- Open-code the type instead.
+ * lisp/net/eww.el: pop-to-buffer-same-window throughout instead of
+ switch-to-buffer (bug#22244).
-2016-01-10 Eli Zaretskii <eliz@gnu.org>
+2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
- Update documentation of 'indirect-function'
+ * autogen.sh: Revert all recent changes.
- * doc/lispref/eval.texi (Function Indirection): Update the
- documentation of 'indirect-function'.
+2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-10 Eli Zaretskii <eliz@gnu.org>
+ Build with C11 if available
- Update documentation for obsoleting 'syntax-begin-function'
+ * admin/merge-gnulib (GNULIB_MODULES): Add std-gnu11.
+ * m4/std-gnu11.m4: New file, from gnulib.
+ * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
- * doc/lispref/syntax.texi (Position Parse): Undocument
- 'syntax-begin-function' that is now obsolete.
+2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-10 Eli Zaretskii <eliz@gnu.org>
+ Update gnulib copy
- Document new features if Eshell
+ * doc/misc/texinfo.tex: Copy from gnulib.
- * doc/misc/eshell.texi (Input/Output): Document the new
- '#<bufname>' syntax.
- (Input/Output): Document 'eshell-destroy-buffer-when-process-dies'.
- Disable "Key Index" generation, as there are no @kindex entries in
- this manual.
+2016-02-02 Glenn Morris <rgm@gnu.org>
-2016-01-10 Michael Albinus <michael.albinus@gmx.de>
+ * make-dist: Updates related to nt/.
- Handle too long commands in Tramp
+ * make-dist: Add modules/.
- * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link)
- (tramp-do-file-attributes-with-ls): Send sequence of commands, in
- order to not exceed shell command line limit.
+ * make-dist: Update for super-special file that can't live in etc/.
- * test/automated/tramp-tests.el (tramp--test-darwin-p): Remove.
- (tramp--test-utf8): Include Arabic file name, again.
+2016-02-02 Eli Zaretskii <eliz@gnu.org>
-2016-01-10 Paul Eggert <eggert@cs.ucla.edu>
+ Fix failure to compile ns-win.el in parallel builds
- * .gitattributes: *.cur and *.pif are binary files too.
+ * src/Makefile.in ($(lispsource)/term/ns-win.elc): Add order-only
+ dependency on $(lispsource)/international/charprop.el.
+ (Bug#22501)
-2016-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+2016-02-02 Eli Zaretskii <eliz@gnu.org>
- * src/alloc.c (mark_maybe_pointer): HAVE_MODULES may be undefined
+ Fix names of tags generated for Ruby accessors
-2016-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+ * lib-src/etags.c (Ruby_functions): Don't include the leading
+ colon ':' in tags for Ruby accessors and aliases. (Bug#22241)
- * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Improve indentation inside $(...)
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to changes in Ruby tags.
- * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Improve indentation
- within $(...).
- * test/indent/shell.sh: Add corresponding test.
+2016-02-02 Glenn Morris <rgm@gnu.org>
-2016-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+ * lisp/vc/add-log.el (change-log-directory-files, find-change-log):
+ Doc tweaks.
- * src/alloc.c (mark_maybe_pointer): Also check wide-int's emacs_value
+2016-02-02 Eli Zaretskii <eliz@gnu.org>
- (mark_memory): Simplify loop. Don't assume a pointer-sized word can be
- cast to Lisp_Object.
+ Fix file-name recognition in 'etags'
-2016-01-10 Dmitry Gutov <dgutov@yandex.ru>
+ * lib-src/etags.c (get_language_from_filename): If FILE includes a
+ leading directory, compare only its basename to the known file
+ names in lang_names[].
- Use short date for 'hg annotate', and output the author
+ * test/etags/Makefile (RBSRC): Adapt to recent test1.ruby
+ renaming.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to changes in Ruby file names and
+ to the results in Makefile due to the above etags.c fix.
- * lisp/vc/vc-hg.el (vc-hg-annotate-command):
- Change '-d' to '-dq'. (Bug#21805)
- (vc-hg-annotate-switches): Default to "-u" "--follow".
- (vc-hg-annotate-re): Update to recognize the short date format
- and the optional username.
- (vc-hg-annotate-time)
- (vc-hg-annotate-extract-revision-at-line): Update accordingly.
+2016-02-02 Eli Zaretskii <eliz@gnu.org>
- * test/automated/vc-hg.el: New file.
+ Change Ruby file names and extensions recognized by 'etags'
-2016-01-10 Paul Eggert <eggert@cs.ucla.edu>
+ * lib-src/etags.c <Ruby_filenames>: New variable, holds names
+ of Ruby files.
+ <Ruby_suffixes>: Treat .rb, .ru, and .rbw as Ruby extensions.
+ <lang_names>: Add Ruby_filenames to the Ruby entry.
+ * test/etags/ruby-src/test1.ru: Renamed from test1.ruby.
+ (Bug#22241)
- Spelling fix
+2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-09 Eli Zaretskii <eliz@gnu.org>
+ Port better to platforms lacking aligned_alloc
- Document user-level functions in project.el
+ Problem reported by Ken Brown (Bug#22522).
+ * src/lisp.h (hybrid_aligned_alloc)
+ [HYBRID_MALLOC && !HAVE_ALIGNED_ALLOC]: New decl.
- * lisp/progmodes/project.el (project-find-file)
- (project-or-external-find-file): Add doc strings.
+2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-09 Eli Zaretskii <eliz@gnu.org>
+ Port malloc.h hygiene fix to LTO
- Document the user-level features of the Xref package
+ * src/alloc.c (__malloc_initialize_hook):
+ Make it externally visible (Bug#22522).
- * doc/emacs/maintaining.texi (Maintaining): Add a list of
- described features.
- (Xref): New section, made out of thoroughly rewritten "Tags"
- section.
- (Find Identifiers, Looking Up Identifiers, Xref Commands)
- (Identifier Search, List Identifiers): New subsections,
- incorporating the old tags commands and the new xref commands.
- (Tags Tables, Tag Syntax, Create Tags Table, Etags Regexps):
- Section and subsections demoted to a lower level.
- * doc/emacs/search.texi (Search):
- * doc/emacs/windows.texi (Pop Up Window):
- * doc/emacs/frames.texi (Creating Frames):
- * doc/emacs/programs.texi (Imenu, Symbol Completion):
- * doc/emacs/building.texi (Grep Searching):
- * doc/emacs/dired.texi (Operating on Files):
- * doc/emacs/glossary.texi (Glossary): All references to tags changed.
+2016-02-02 Eli Zaretskii <eliz@gnu.org>
-2016-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
+ More improvements for Ruby support in 'etags'
- * doc/lispref/loading.texi: Add `define-type' entry for load-history
+ * lib-src/etags.c (Ruby_functions): Tag Ruby accessors and
+ alias_method. Identify constants even if the assignment is not
+ followed by whitespace. (Bug#22241)
- * doc/lispref/loading.texi (Where Defined): Remove incorrect
- cl-defmethod description, and add missing define-type entry.
+ * test/etags/ruby-src/test1.ruby: Add tests for constants,
+ accessors, and alias_method.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to changes in Ruby tests.
-2016-01-09 Eli Zaretskii <eliz@gnu.org>
+2016-02-02 Paul Eggert <eggert@cs.ucla.edu>
- Improve doc strings and prompts in xref.el
+ Add --git-config option to autogen.sh
- * lisp/progmodes/xref.el (xref-backend-functions)
- (xref-find-definitions): Doc fixes.
- (xref-query-replace): Doc fix. Improve prompts for arguments.
+ * autogen.sh: New options --git-config, --help.
+ (git_config): New shell var. Alter function to respect this var.
-2016-01-09 Alan Mackenzie <acm@muc.de>
+2016-02-02 Lars Ingebrigtsen <larsi@gnus.org>
- Allow the use of `font-lock-extend-region-multiline' in CC Mode.
+ Fix editing undo changes in eww fields
- * lisp/progmodes/cc-mode.el (c-font-lock-init): Remove
- `font-lock-extend-regions-wholelines' from
- `font-lock-extend-region-functions' rather than setting the latter to
- nil.
+ * eww.el (eww-tag-form): Don't overwrite initial form data in text
+ fields.
+ (eww-process-text-input): Make `M-t' at the end of text fields work
+ better (bug#19085).
-2016-01-09 Michael Albinus <michael.albinus@gmx.de>
+2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
- Fix coding system for Tramp on OS X.
+ Allow the user more control of popping up the eww window
- * lisp/net/tramp-compat.el: Require ucs-normalize.
+ * eww.el (eww): Use pop-to-buffer-same-window (suggested by
+ Michael Heerdegen) (bug#22244).
- * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
- Set coding system to `utf-8-hfs' for Mac OS X.
+2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
- * test/automated/tramp-tests.el (tramp-test29-vc-registered):
- Flush directory properties when needed.
- (tramp--test-utf8): Include Chinese file name, again.
+ Make eww-browse-url with new-window parameter work again
-2016-01-09 Eli Zaretskii <eliz@gnu.org>
+ * eww.el (eww-browse-url): Stay in the same buffer if we're
+ already in a eww mode buffer so that eww-browse-url with a
+ new-window parameter works (bug#22244).
- Update 'load-history' docs
+2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
- * doc/lispref/loading.texi (Where Defined): Update the list of
- forms in 'load-history' by adding the forms created for the
- 'cl-generic' generics. (Bug#21422)
+ Clean up eww code slightly
-2016-01-09 Paul Eggert <eggert@cs.ucla.edu>
+ * eww.el (eww-browse-url): Clean up code slightly.
- Fix (error ...) error
+2016-02-01 Lars Ingebrigtsen <larsi@gnus.org>
- Problem reported by Glenn Morris in:
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00561.html
- * lisp/vc/add-log.el (change-log-goto-source): Fix typos
- introduced in my Aug 28 change, where I got confused by the
- two meanings of (error ...).
+ Don't insert nil faces in shr
-2016-01-08 Alan Mackenzie <acm@muc.de>
+ * shr.el (shr-insert-table): Don't add nil faces, because that
+ will show up in *Messages* as "Invalid face reference: nil [32
+ times]".
- Correctly analyze brace arguments in templated C++ function declarations.
+2016-02-01 Glenn Morris <rgm@gnu.org>
- * lisp/progmodes/cc-defs.el (c-go-list-forward, c-go-list-backward): add
- POS and LIMIT parameters, like the other c-go-list-* functions have.
+ Make find-change-log prefer a VCS root, if no ChangeLog exists.
- * lisp/progmodes/cc-engine.el (c-restore-<>-properties): Check backwards
- for a ?\( rather than a ?<. (c-looking-at-inexpr-block): Handle names
- followed by template specifiers.
+ * lisp/vc/add-log.el (change-log-directory-files): New option.
+ (find-change-log): Respect change-log-directory-files.
+ * doc/emacs/maintaining.texi (Change Log Commands):
+ Mention change-log-directory-files.
-2016-01-08 Glenn Morris <rgm@gnu.org>
+2016-02-01 Glenn Morris <rgm@gnu.org>
- * lisp/cedet/mode-local.el (describe-function-orig-buffer): Declare.
+ Improve the custom type of some user options.
- * lisp/ffap.el (ffap-latex-mode): Avoid free variable.
+ * lisp/autoinsert.el (auto-insert-alist):
+ * lisp/replace.el (query-replace-from-to-separator):
+ * lisp/gnus/gnus-art.el (gnus-hidden-properties):
+ * lisp/gnus/gnus-gravatar.el (gnus-gravatar-properties):
+ * lisp/gnus/gnus-picon.el (gnus-picon-properties):
+ * lisp/progmodes/prolog.el (prolog-keywords, prolog-types)
+ (prolog-mode-specificators, prolog-determinism-specificators)
+ (prolog-directives, prolog-program-name, prolog-program-switches)
+ (prolog-consult-string, prolog-compile-string, prolog-eof-string)
+ (prolog-prompt-regexp): Improve custom type.
-2016-01-08 Mark Oteiza <mvoteiza@udel.edu>
+2016-02-01 Glenn Morris <rgm@gnu.org>
- * lisp/play/dunnet.el (dun-fix-screen): Avoid `end-of-buffer`.
+ Mark some risky calendar variables.
-2016-01-08 Alan Mackenzie <acm@muc.de>
+ * lisp/calendar/cal-china.el (chinese-calendar-time-zone):
+ Remove risky setting for deleted obsolete alias.
+ (calendar-chinese-standard-time-zone-name)
+ (calendar-chinese-daylight-saving-start)
+ (calendar-chinese-daylight-saving-end):
+ * lisp/calendar/calendar.el (calendar-iso-date-display-form)
+ (calendar-european-date-display-form)
+ (calendar-american-date-display-form, calendar-date-display-form):
+ * lisp/calendar/diary-lib.el (diary-remind-message)
+ (diary-header-line-format):
+ * lisp/calendar/solar.el (calendar-time-display-form)
+ (calendar-location-name): Mark as risky.
- Respect fontification region calculated by major mode. Fixes bug #22316.
+2016-02-01 Simen Heggestøyl <simenheg@gmail.com>
- * lisp/font-lock.el (font-lock-extend-jit-lock-region-after-change): when a
- fontification region has been calculated by a function on
- font-lock-extend-after-change-region-function use this region rather than
- changing the end position to somewhere else.
+ Highlight two additional SCSS keywords
-2016-01-08 Eli Zaretskii <eliz@gnu.org>
+ * lisp/textmodes/css-mode.el (css-bang-ids): New defconst holding CSS
+ identifiers on the form !foo.
+ (scss-bang-ids): New defconst holding SCSS identifiers on the form
+ !foo.
+ (css--font-lock-keywords): Highlight the new SCSS bang identifiers in
+ `font-lock-builtin-face'.
- Improve documentation of Delete Selection mode
+ * test/indent/css-mode.css: Add bang rule test case.
- * lisp/delsel.el (delete-selection-mode)
- (delete-selection-helper): Update and expand the doc strings.
- (Bug#22296)
+ * test/indent/scss-mode.css: Add test cases for the introduced bang
+ rules.
- * doc/emacs/mark.texi (Using Region): Document the behavior of
- delete commands in Delete Selection mode. (Bug#22296)
+2016-02-01 Karl Fogel <kfogel@red-bean.com>
- * doc/lispref/markers.texi (The Mark): Document how to add the
- support for Delete Selection mode to Lisp programs. (Bug#22296)
+ Recommend enabling integrity-checking in git
-2016-01-08 Dmitry Gutov <dgutov@yandex.ru>
+ * admin/notes/git-workflow: Recommend setting transfer.fsckObjects.
- Fix two project-find-file issues
+ This is related to the autogen.sh changes made by Paul Eggert in
+ commit d766ca8f (2016-02-01) and commit cedd7cad (2016-02-01), and to
+ my edits today to http://www.emacswiki.org/emacs/GitForEmacsDevs and
+ to emacswiki.org/emacs/GitQuickStartForEmacsDevs. See also the thread
+ "Recommend these .gitconfig settings for git integrity." at
+ https://lists.gnu.org/archive/html/emacs-devel/2016-01/threads.html#01802.
- * lisp/progmodes/project.el (project--value-in-dir):
- Temporarily set enable-local-variables to :all.
- (project-find-file, project-or-external-find-file):
- All autoloads.
- (project--find-file-in): Require xref.
+2016-02-01 Martin Rudalics <rudalics@gmx.at>
-2016-01-08 Eli Zaretskii <eliz@gnu.org>
+ Some corrections in Elisp manual
- Clarify doc string of 'dired-current-directory'
+ * doc/lispref/buffers.texi (Read Only Buffers): Describe optional
+ argument POSITION.
+ * doc/lispref/debugging.texi (Error Debugging): `debug-on-signal'
+ is an option.
+ * doc/lispref/display.texi (Refresh Screen): Describe optional
+ argument FRAME of `redraw-frame'.
+ (Attribute Functions): Describe optional argument CHARACTER of
+ `face-font'.
+ (Defining Images): `image-load-path' is an option.
+ (Beeping): `ring-bell-function' is an option.
+ * doc/lispref/frames.texi (Size and Position): The PIXELWISE
+ argument of `set-frame-size' is optional.
+ (Raising and Lowering): The TERMINAL argument of `tty-top-frame'
+ is optional.
+ * doc/lispref/keymaps.texi (Controlling Active Maps): Fix doc of
+ `set-transient-map'.
+ * doc/lispref/minibuf.texi (Text from Minibuffer):
+ `read-regexp-defaults-function' is an option.
+ (Minibuffer Contents): `delete-minibuffer-contents' is a command.
+ * doc/lispref/modes.texi (Mode Line Variables):
+ `mode-line-position' and `mode-line-modes' are variables, not
+ options.
+ * doc/lispref/strings.texi (Creating Strings): The START argument
+ of `substring' is optional.
+ * doc/lispref/text.texi (Buffer Contents): Describe optional
+ argument NO-PROPERTIES of `thing-at-point'.
+ (User-Level Deletion): Both arguments of
+ `delete-trailing-whitespace' are optional.
+ (Margins): Use @key{RET} instead of @kbd{RET}.
+ * doc/lispref/windows.texi (Display Action Functions): Write
+ non-@code{nil} instead of non-nil.
+ (Choosing Window Options): The WINDOW arg of
+ `split-window-sensibly' is optional.
+ (Choosing Window Options): Write non-@code{nil} instead of
+ non-nil.
+ (Window Start and End): Both args of `window-group-end' are
+ optional.
- * lisp/dired.el (dired-current-directory): Doc fix: clarify that
- the return value might not end in a slash when called with the
- optional argument non-nil. (Bug#6273)
+ * src/buffer.c (Fbarf_if_buffer_read_only): Rename argument POS
+ to POSITION to keep consisteny with doc-string.
-2016-01-08 Eli Zaretskii <eliz@gnu.org>
+2016-02-01 Paul Eggert <eggert@cs.ucla.edu>
- Use the face of preceding text for displaying the ellipsis
+ Double static heap size.
- * src/xdisp.c (setup_for_ellipsis): Use the face of the preceding
- text in it->saved_face_id for displaying the ellipsis, and ignore
- the face, if any, of the invisible text. (Bug#22320)
+ * src/sheap.h (STATIC_HEAP_SIZE): Double it, since it was too
+ small on FreeBSD (Bug#22086).
-2016-01-08 Michael Albinus <michael.albinus@gmx.de>
+2016-02-01 Paul Eggert <eggert@cs.ucla.edu>
- Suppress Chinese file name test for OSX in tramp-tests.el
+ Chatter when autogen.sh changes Git configuration
- * test/automated/tramp-tests.el (tramp--test-utf8):
- Remove instrumentation. Suppress Chinese file name test for OSX.
+ * autogen.sh (git_config): New function. Use it instead of ‘git config’.
-2016-01-08 Glenn Morris <rgm@gnu.org>
+2016-02-01 Kyle Meyer <kyle@kyleam.com>
- * admin/admin.el (set-version): Also handle the NEWS file.
+ * org/org-compat.el (org-font-lock-ensure): Fix bogus test (bug#22399)
-2016-01-08 Dmitry Gutov <dgutov@yandex.ru>
+2016-02-01 Michael Albinus <michael.albinus@gmx.de>
- apropos-library: Skip obvious duplicates; don't error on generics
+ Fix Bug#20821
- * lisp/apropos.el (apropos-library): Skip "was an autoload"
- entries, to avoid obvious duplicates. For each cl-defmethod
- entry, take just its function symbol (bug#21422).
+ * lisp/net/tramp.el (tramp-file-name-handler):
+ * lisp/net/tramp-sh.el (tramp-sh-handle-expand-file-name):
+ Use `tramp-drop-volume-letter'. (Bug#20821)
-2016-01-07 Dmitry Gutov <dgutov@yandex.ru>
+2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
- Add project-find-file and project-or-external-find-file
+ Omit unnecessary history from Lisp intro
- * lisp/minibuffer.el (completion-category-defaults):
- Add `project-file' category.
+ * doc/lispintro/emacs-lisp-intro.texi (Review, Digression into C)
+ (Conclusion): Reword so as not to talk about earlier versions
+ of Emacs in what should be an intro.
- * lisp/progmodes/project.el (project-find-file)
- (project-or-external-find-file): New commands.
- (project--find-file-in): New private function.
+2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/progmodes/xref.el (xref-collect-matches): Use
- `expand-file-name' on DIR, to expand the tildes.
- (xref--find-ignores-arguments): Extract from
- `xref--rgrep-command'.
+ * etc/HISTORY: Add some more history, plus git tags.
-2016-01-07 Leo Liu <sdl.web@gmail.com>
+2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
- Add defvar-local to lisp-imenu-generic-expression
+ Improve elisp “Security Considerations” doc
- * lisp/emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): Add
- defvar-local.
+ * doc/lispref/os.texi (Security Considerations):
+ Mention call-process and rename-file as opposed to shell commands.
+ Add some more cross-references.
-2016-01-07 Leo Liu <sdl.web@gmail.com>
+2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
- Revert commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd
+ autogen.sh now arranges for git to check hashes
- * lisp/emacs-lisp/easy-mmode.el (define-minor-mode):
- Don't declare (indent 1).
+ Suggested by Karl Fogel in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01802.html
+ * autogen.sh: Do "git config transfer.fsckObjects true".
-2016-01-07 Glenn Morris <rgm@gnu.org>
+2016-01-31 Dave Barker <kzar@kzar.co.uk>
- * lisp/emacs-lisp/autoload.el (autoload-find-destination): Doc fix.
+ Add ability to give rcirc servers an alias name
-2016-01-07 Glenn Morris <rgm@gnu.org>
+ * lisp/net/rcirc.el (rcirc-server-alist): Add :server-alias
+ customization option.
+ (rcirc, rcirc-connect): Take server alias into account.
- * lisp/emacs-lisp/autoload.el (autoload-find-destination):
+2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
- Avoid specifying the length of a time object (it has not been "2"
- for some time).
+ Fix (c & 040) typo in emergency escapes
-2016-01-06 Andreas Schwab <schwab@linux-m68k.org>
+ * src/keyboard.c (handle_interrupt): Fix recently-introduced
+ typo (040 should have been ~040) that silently suppressed
+ auto-saves after emergency escapes. Redo comparison to avoid
+ similar problems.
- Properly encode/decode base64Binary data in SOAP
+2016-01-31 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/net/soap-client.el (soap-encode-xs-basic-type): Encode
- base64Binary value as utf-8.
- (soap-decode-xs-basic-type): Decode base64Binary value as utf-8.
+ Port new hybrid malloc to FreeBSD
-2016-01-06 Eli Zaretskii <eliz@gnu.org>
+ Problem reported by Wolfgang Jenkner in: http://bugs.gnu.org/22086#118
+ * src/gmalloc.c (__malloc_initialize_hook, __after_morecore_hook)
+ (__morecore) [HYBRID_MALLOC]: Define in this case too.
- Obey coding-system-for-write when writing stdout/stderr in batch
+2016-01-31 Wolfgang Jenkner <wjenkner@inode.at>
- * src/print.c (printchar_to_stream):
- * src/xdisp.c (message_to_stderr): If coding-system-for-write has
- a non-nil value, use it to encode output in preference to
- locale-coding-system. See the discussions in
- http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00048.html
- for the details.
+ * configure.ac: Stop using mmap for buffers for FreeBSD.
- * doc/lispref/os.texi (Terminal Output): Document how to send
- non-ASCII text via 'send-string-to-terminal'.
- (Batch Mode): Document how text written to standard streams is
- encoded. Fix inaccuracy regarding which output streams are used
- by output functions in batch mode.
+2016-01-31 Eli Zaretskii <eliz@gnu.org>
-2016-01-06 Xue Fuqiao <xfq.free@gmail.com>
+ Fix display of overlay strings with 'display' and 'box' property
- * doc/misc/efaq.texi (Packages that do not come with Emacs):
- Update the URI of MELPA and marmalade-repo. Reported by CHENG Gao
- <chenggao@royau.me> in
- https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00390.html.
+ * src/xdisp.c (get_next_display_element): Take the box face from
+ display stack level that comes from a buffer, not an overlay
+ string. (Bug#22499)
-2016-01-06 Maksim Golubev <maksim.golubev72@gmail.com> (tiny change)
+2016-01-31 Andreas Schwab <schwab@linux-m68k.org>
- * lisp/progmodes/opascal.el (opascal-mode-syntax-table):
+ Fix imap-starttls-open
- Fix backslash. (Bug#22224)
+ * lisp/net/imap.el (imap-starttls-open): Log imap process
+ output. Call imap-parse-greeting. (Bug#22500)
-2016-01-06 Federico Beffa <beffa@ieee.org> (tiny change)
+2016-01-31 Michael Albinus <michael.albinus@gmx.de>
- * lisp/progmodes/xscheme.el (xscheme-prompt-for-expression-exit):
+ Merge changes from Tramp repository
- Make it actually work. (Bug#22265)
+ * doc/misc/Makefile.in (${buildinfodir}/tramp.info tramp.html):
+ No EXTRA_OPTS needed.
-2016-01-05 Alan Mackenzie <acm@muc.de>
+ * doc/misc/tramp.texi: Merge changes from Emacsemacs-25
+ branch, especially for @trampfn{}.
+ (Top): Move @ifnottex down.
+ (History): XEmacs support has been removed.
+ (GVFS based methods, Remote processes): Do not use emacsgvfs flag.
+ (Auto-save and Backup): Use both syntax versions.
+ (File name Syntax): Remark on IPv6 adresses is valid for
+ unified syntax only.
- Remove function wrongly on AWK Mode value of context fontification hook.
+ * doc/misc/trampver.texi: Do not set emacsgvfs flag.
- * lisp/progmodes/cc-langs.el (c-before-context-fontification-functions):
- swap order of entries so that awk's entry isn't superseded by the default.
+2016-01-31 Andreas Schwab <schwab@linux-m68k.org>
- * lisp/progmodes/cc-mode.el (c-before-context-fl-expand-region): Correct
- to handle nil value of c-before-context-fontification-functions.
+ Fix return value of imap-starttls-open
-2016-01-05 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/net/imap.el (imap-starttls-open): Fix return value.
- * src/buffer.c: Stick with ASCII in doc string.
+2016-01-31 John Wiegley <johnw@newartisans.com>
-2016-01-05 Paul Eggert <eggert@cs.ucla.edu>
+ Correct reference to DARWIN_OS preprocessor symbol
- Reword transient-mark-mode doc string
+ * src/alloc.c: Correct a preprocessor reference to DARWIN_OS, which may
+ not be defined.
- * src/buffer.c (syms_of_buffer): Reword doc string to avoid confusion.
- The value 'lambda (literally) can be interpreted as (quote lambda),
- which is not intended here; we want just the lambda symbol.
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-05 Eli Zaretskii <eliz@gnu.org>
+ Spelling fixes
- Update doc string of 'selective-display'
+ Spelling fix
- * src/buffer.c (syms_of_buffer) <selective-display>: Say that
- using it with the value of 't' is obsolete. (Bug#1092)
+ Spelling fixes
-2016-01-05 Alan Mackenzie <acm@muc.de>
+2016-01-30 Glenn Morris <rgm@gnu.org>
- Make C++ buffers writeable when writing their initial text properties.
+ * lisp/vc/add-log.el (find-change-log): Use locate-dominating-file.
- This is a correction to yesterday's CC Mode patch.
+2016-01-30 Matthew Carter <m@ahungry.com>
- * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Put
- c-save-buffer-state around the function rather than a mere `let'.
+ Quote table names for postgres listings (sql-mode)
-2016-01-05 Michael Albinus <michael.albinus@gmx.de>
+ * lisp/progmodes/sql.el (sql-postgres-completion-object): Avoid passing
+ unquoted table names to the completion list.
- Additional changes for "make check-expensive"
+2016-01-30 Glenn Morris <rgm@gnu.org>
- * CONTRIBUTE : Encourage use of ":tags '(:expensive-test)".
- Explain make target `check-expensive'.
+ Change Smerge "Mine" and "Other" for "Upper" and "Lower. (Bug#20878)
+
+ * lisp/vc/smerge-mode.el (smerge-diff-switches)
+ (smerge-context-menu, smerge-match-conflict, smerge-swap): Doc fixes.
+ (smerge-upper, smerge-upper-face, smerge-keep-upper)
+ (smerge-diff-base-upper): Rename from smerge-mine, smerge-mine-face,
+ smerge-keep-mine, smerge-diff-base-mine. Update all uses.
+ (smerge-mine-face, smerge-other-face): Remove obsolete face aliases.
+ (smerge-lower, smerge-lower-face, smerge-lower-re, smerge-keep-lower)
+ (smerge-diff-base-lower): Rename from smerge-other, smerge-other-face,
+ smerge-other-re, smerge-keep-other, smerge-diff-base-lower.
+ Update all uses.
+ (smerge-basic-map): Add "l" and "u" bindings.
+ (smerge-mode-menu): Update menu bindings for renaming.
+ (smerge-font-lock-keywords): Update face names.
+ (smerge-match-names): Update names.
+ (smerge-diff-upper-lower): Rename from smerge-diff-mine-other.
+ (smerge-match-conflict, smerge-ediff): Rename local variables.
+ (smerge-makeup-conflict): Relabel markers.
+ (smerge-parsep-re): Use renamed variables.
- * etc/NEWS: Mention new make target `check-expensive'.
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- * test/automated/Makefile.in (check-doit): New target.
- (check, check-expensive): Use it.
+ Port recent my_edata change to MS-Windows
-2016-01-04 Alan Mackenzie <acm@muc.de>
+ * src/lastfile.c (my_edata): Also define if WINDOWSNT.
- Apply text properties for <, > in new after-change function (C++ Java Modes).
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- These are category/syntax-table properties to give < and > paren syntax.
- Also apply certain `c-type' text properties to the insides of <..> constructs
- to ensure that identifiers contained by them get fontified. This patch fixes
- bug #681.
+ Pacify GCC on C library without glibc API
- * lisp/progmodes/cc-cmds.el (c-electric-lt-gt): Reformulate due to new
- after-change action.
+ Without this change, with --enable-gcc-warnings GCC would complain
+ “error: redundant redeclaration of ‘aligned_alloc’”.
+ * configure.ac: Simplify aligned_alloc testing.
+ * src/alloc.c (aligned_alloc): Don’t use if DARWIN_OS,
+ since the simplified configure.ac no longer checks for that.
+ Don’t declare if HAVE_ALIGNED_ALLOC.
+ Correct misspelling of HAVE_ALIGNED_ALLOC in ifdef.
- * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Expand
- change region to include <s and >s which might not be already marked as
- parens, rather than just when paren text properties are removed.
- (c-restore-<>-properties): New after-change function, which applies text
- properties marking < and > with paren syntax.
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/progmodes/cc-fonts.el (c-font-lock-declarations): Ensure `c-type'
- properties are applied to the interiors of <...> constructs, to ensure
- fontification of identifiers there.
+ Tell Automake the new lib/Makefile.am is OK
- * lisp/progmodes/cc-langs.el (c-before-font-lock-functions): Add
- c-restore-<>-properties to this list for C++ and Java.
+ * lib/Makefile.am (AUTOMAKE_OPTIONS): Add -Wno-portability.
- * lisp/progmodes/cc-mode.el (c-common-init): When invoking
- c-before-font-lock-functions, exclude c-restore-<>-properties from the
- functions invoked.
- (c-before-change): Initialize c-new-BEG/END here (rather than c-after-change)
- to allow modification by before-change functions.
- (c-after-change): Amend c-new-END here, rather than initializing it and
- c-new-BEG.
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-04 Michael Albinus <michael.albinus@gmx.de>
+ Make it easy to override preferred-branch test
- Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+ * Makefile.in (preferred-branch-is-current):
+ Rename from emacs-25-branch-is-current. All uses changed.
+ (PREFERRED_BRANCH): New macro.
-2016-01-04 Michael Albinus <michael.albinus@gmx.de>
+2016-01-30 Glenn Morris <rgm@gnu.org>
- Introduce check-expensive tests.
+ * lisp/net/browse-url.el (browse-url-default-browser):
+ Lower priority of non-free Chrome.
- * Makefile.in (check-expensive):
- * test/automated/Makefile.in (check-expensive): New target.
+2016-01-30 Glenn Morris <rgm@gnu.org>
- * test/automated/auto-revert-tests.el
- (auto-revert-test01-auto-revert-several-files):
- * test/automated/file-notify-tests.el (file-notify--deftest-remote):
- * test/automated/tramp-tests.el (tramp-test26-process-file)
- (tramp-test27-start-file-process, tramp-test28-shell-command)
- (tramp-test29-vc-registered)
- (tramp-test31-special-characters-with-stat)
- (tramp-test31-special-characters-with-perl)
- (tramp-test31-special-characters-with-ls)
- (tramp-test32-utf8-with-stat, tramp-test32-utf8-with-perl)
- (tramp-test32-utf8-with-ls, tramp-test33-asynchronous-requests)
- (tramp-test35-unload): Tag the tests as :expensive-test.
+ Improve the custom type of some user options.
-2016-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * lisp/desktop.el (desktop-minor-mode-table):
+ * lisp/man.el (Man-frame-parameters):
+ * lisp/midnight.el (midnight-delay):
+ * lisp/speedbar.el (speedbar-select-frame-method):
+ * lisp/tooltip.el (tooltip-frame-parameters):
+ * lisp/tree-widget.el (tree-widget-space-width):
+ * lisp/type-break.el (type-break-keystroke-threshold):
+ * lisp/woman.el (woman-imenu-generic-expression):
+ * lisp/cedet/ede.el (ede-debug-program-function):
+ * lisp/cedet/ede/project-am.el (project-am-debug-target-function):
+ * lisp/emulation/viper-keym.el (viper-toggle-key):
+ * lisp/erc/erc-networks.el (erc-server-alist):
+ * lisp/gnus/message.el (message-deletable-headers, message-signature):
+ * lisp/mail/mailalias.el (mail-directory-stream):
+ * lisp/play/tetris.el (tetris-x-colors):
+ * lisp/progmodes/gud.el (gud-tooltip-modes): Improve custom type.
- shr-tag-video bug fix
+2016-01-30 Simen Heggestøyl <simenheg@gmail.com>
- * shr.el (shr-tag-video): Protect against the `poster' being
- empty.
+ Highlight CSS variables with variable name face
-2016-01-04 Michael Albinus <michael.albinus@gmx.de>
+ * lisp/textmodes/css-mode.el (css-nmstart-re): Don't match variables.
+ (css--font-lock-keywords): Highlight variables in
+ `font-lock-variable-name-face'.
- Minor fixes in tramp-tests.el
+2016-01-30 Glenn Morris <rgm@gnu.org>
- * test/automated/tramp-tests.el (tramp-test26-process-file):
- Move point properly.
- (tramp-test29-vc-registered): Work with relative file names.
+ * lisp/gnus/gnus-kill.el (gnus-winconf-kill-file): Not user-serviceable.
-2016-01-04 Eli Zaretskii <eliz@gnu.org>
+2016-01-30 Glenn Morris <rgm@gnu.org>
- Ensure redisplay when 'truncate-lines' is set
+ Mark some user options that can get evalled as risky.
- * lisp/frame.el (redisplay--variables): Add 'truncate-lines'.
- (Bug#22303)
+ * lisp/allout.el (allout-title):
+ * lisp/emacs-lisp/edebug.el (edebug-global-break-condition):
+ * lisp/gnus/message.el (message-mailer-swallows-blank-line):
+ * lisp/progmodes/gud.el (gud-tooltip-display):
+ * lisp/vc/ediff-mult.el (ediff-default-filtering-regexp):
+ Mark as risky.
-2016-01-04 Eli Zaretskii <eliz@gnu.org>
+2016-01-30 Eli Zaretskii <eliz@gnu.org>
- Fix a doc string of 'transient-mark-mode'
+ Disable DebPrint in sys_read on MS-Windows
- * src/buffer.c (syms_of_buffer) <transient-mark-mode>: Prevent
- "lambda" in doc string from becoming a link to lambda expressions.
+ * src/w32.c (sys_read): Disable a debugging print that is normal
+ when non-blocking reads are retried.
-2016-01-04 Eli Zaretskii <eliz@gnu.org>
+2016-01-30 Martin Rudalics <rudalics@gmx.at>
- MS-Windows followup to latest gnulib update
+ ;Fix ChangeLog entry
- * nt/gnulib.mk (EXTRA_DIST): Add ignore-value.h.
+2016-01-30 Eli Zaretskii <eliz@gnu.org>
-2016-01-04 Paul Eggert <eggert@cs.ucla.edu>
+ Fix typos in Introduction to Emacs Lisp manual
- Spelling fix
+ * doc/lispintro/emacs-lisp-intro.texi (Emacs Initialization)
+ (kill-new function, Digression into C)
+ (Complete forward-sentence, Divide and Conquer, Find a File)
+ (lengths-list-many-files, Columns of a graph, defcustom)
+ (recursive-count-words): Fix typos. Reported by Daniel Bastos
+ <dbastos@toledo.com>.
-2016-01-04 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- Do secure signed Bcc handling
+ Shrink static heap a bit
- * lisp/gnus/message.el (message-send): Do secure signed Bcc handling
- (bug#18718).
+ * src/sheap.h: Include lisp.h, for Lisp_Object.
+ (STATIC_HEAP_SIZE): Now an enum constant, not a macro.
+ Make it 2 MiB * sizeof (Lisp_Object), which is a bit more
+ conservative than the old value.
+ (Bug#22086)
-2016-01-04 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- Avoid stdio in SIGINT handler
+ Fix extern symbols defined and not used
- * admin/merge-gnulib (GNULIB_MODULES): Add ignore-value.
- * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
- * lib/ignore-value.h: New file, from gnulib.
- * src/keyboard.c: Include it.
- (write_stdout, read_stdin): New functions.
- (handle_interrupt): Use them instead of printf and getchar,
- and avoid fflush when handling signals.
+ * src/alloc.c: Always include <signal.h>.
+ (malloc_warning) [!SIGDANGER && (SYSTEM_MALLOC || HYBRID_MALLOC)]:
+ Do not define; unused.
+ * src/emacs.c, src/lisp.h (might_dump) [!DOUG_LEA_MALLOC]: Now static.
+ * src/gmalloc.c (gdefault_morecore): Rename from __default_morecore,
+ to avoid collision with glibc. Now static. All uses changed.
+ * src/lastfile.c (my_edata): Define only if
+ ((!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC && !defined
+ WINDOWSNT) \ || defined CYGWIN || defined DARWIN_OS).
+ (Bug#22086)
-2016-01-04 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- * doc/misc/texinfo.tex: Revert unwanted copyright change.
+ Build lib/e-*.o only on platforms that need it
+
+ * configure.ac (hybrid malloc): Simplify configuration.
+ (SHEAP_OBJ): Remove; no longer needed.
+ (HYBRID_MALLOC): New var. Subst it.
+ (HYBRID_MALLOC_LIB): New Automake conditional.
+ * lib/Makefile.am (noinst_LIBRARIES): Add libegnu.a only if
+ HYBRID_MALLOC_LIB.
+ (libegnu_a_CPPFLAGS): Omit AM_CPPFLAGS; not needed.
+ (MOSTLYCLEANFILES): Add libegnu.a.
+ * src/Makefile.in (SHEAP_OBJ): Remove.
+ (HYBRID_MALLOC): New macro.
+ (base_obj): Use it to conditionally add sheap.o.
+ (LIBEGNU_ARCHIVE): New macro.
+ ($(LIBEGNU_ARCHIVE)): New rule, replacing $(lib)/libegnu.a.
+ All uses of the latter replaced by the former.
+ * src/alloc.c (USE_ALIGNED_ALLOC): Simplify configuration.
+ Correct misspelling ALIGNED_ALLOC to HAVE_ALIGNED_ALLOC.
+ * src/gmalloc.c: Update comment.
+ * src/lisp.h (aligned_alloc)
+ [!DOUG_LEA_MALLOC && !HYBRID_MALLOC && !SYSTEM_MALLOC]:
+ New decl.
+ (Bug#22086)
-2016-01-03 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/align.el (align): Simplify a lambda
+ Include <malloc.h> when advisable
+
+ This should help insulate us better from future glibc changes.
+ It is good hygiene to include .h files for APIs that Emacs uses.
+ Fix type clashes between Emacs and GNU <malloc.h> (Bug#22086).
+ * configure.ac: Check for malloc.h.
+ * src/alloc.c: Include <malloc.h> depending on HAVE_MALLOC_H,
+ not on DOUG_LEA_MALLOC.
+ * src/emacs.c, src/gmalloc.c (malloc_enable_thread):
+ Remove decl (now in lisp.h).
+ * src/gmalloc.c: Include stddef.h earlier, for ptrdiff_t.
+ [emacs]: Include lisp.h.
+ [HAVE_MALLOC_H]: Include <malloc.h>.
+ (__MALLOC_HOOK_VOLATILE): New macro, if not already defined.
+ (__after_morecore_hook, __malloc_initialize_hook, __morecore)
+ (__default_morecore):
+ [!HAVE_MALLOC_H]: New decls near non-inclusion of <malloc.h>.
+ (calloc): Make it clear that the macro should not be used.
+ Remove unused decl.
+ (malloc_info): New macro, to avoid clash with glibc <malloc.h>.
+ (__morecore, __default_morecore, __after_morecore_hook)
+ (__malloc_extra_blocks, __malloc_initialize_hook, __free_hook)
+ (__malloc_hook, __realloc_hook, __memalign_hook, memory_warnings):
+ Remove later decls.
+ (gmalloc_hook, gfree_hook, grealloc_hook):
+ Rename from __malloc_hook, __free_hook, __realloc_hook to
+ avoid type collision with glibc <malloc.h>. All uses changed.
+ (gmalloc_hook):
+ (__malloc_extra_blocks) [DOUG_LEA_MALLOC||HYBRID_MALLOC||SYSTEM_MALLOC]:
+ Now static.
+ (gmalloc_hook, __malloc_extra_blocks): Define even if [!HYBRID_MALLOC].
+ (__malloc_initialize_hook, __after_morecore_hook):
+ Declare with types compatible with glibc.
+ (__memalign_hook, hybrid_calloc) [HYBRID_MALLOC]:
+ Remove. All uses removed.
+ * src/lisp.h (__malloc_extra_blocks, malloc_enable_thread): New decls.
+ * src/ralloc.c, src/vm-limit.c:
+ Simplify includes and include <malloc.h> if available.
- * lisp/align.el (align): Fix arg order in call to `align-region'
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-03 Eli Zaretskii <eliz@gnu.org>
+ * src/alloc.c: Include "sheap.h".
- Fix compilation next-error in buffers with selective-display
+ (alloc_unexec_pre, alloc_unexec_post) [HYBRID_MALLOC]:
+ Set and clear bss_sbrk_did_unexec, on all platforms not just Cygwin.
+ * src/lisp.h (alloc_unexec_pre, alloc_unexec_post) [!DOUG_LEA_MALLOC]:
+ Declare unconditionally.
+ * src/unexcw.c, src/unexelf.c (bss_sbrk_did_unexec): Remove decl.
+ (unexec): Don’t set or clear bss_sbrk_did_unexec;
+ the caller now does this.
+ (Bug#22086)
- * lisp/progmodes/compile.el (compilation-beginning-of-line): New
- function.
- (compilation-internal-error-properties)
- (compilation-next-error-function, compilation-set-window): Use
- it. (Bug#1092)
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
-2016-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ Pacify --enable-gcc-warnings when HYBRID_MALLOC
- * lisp/net/nsm.el (nsm-check-protocol): Fix typo in the message.
+ * src/buffer.c (init_buffer):
+ * src/emacs.c (main):
+ * src/xsmfns.c (smc_save_yourself_CB, x_session_initialize):
+ Use emacs_get_current_dir_name, not get_current_dir_name.
+ * src/conf_post.h (aligned_alloc) [HYBRID_MALLOC && emacs]: New macro.
+ (HYBRID_GET_CURRENT_DIR_NAME, get_current_dir_name): Remove.
+ * src/emacs.c: Include "sheap.h".
+ (report_sheap_usage): Remove decl.
+ (Fdump_emacs) [HYBRID_MALLOC]: Report usage directly.
+ Don't assume ptrdiff_t can be printed as int.
+ * src/gmalloc.c [HYBRID_MALLOC]:
+ Include "sheap.h" rather than declaring its contents by hand.
+ (get_current_dir_name, gget_current_dir_name)
+ (hybrid_get_current_dir_name): Remove.
+ (emacs_abort): Remove duplicate decl.
+ (aligned_alloc): Undef, like malloc etc.
+ (ALLOCATED_BEFORE_DUMPING): Now a static function, not a macro.
+ Make it a bit more efficient.
+ (malloc_find_object_address): Remove unused decl.
+ (enum mcheck_status, mcheck, mprobe, mtrace, muntrace, struct mstats)
+ (mstats, memory_warnings): Declare only if GC_MCHECK.
+ * src/lisp.h (emacs_get_current_dir_name):
+ New decl, replacing get_current_dir_name.
+ * src/sheap.c: Include sheap.h first.
+ (STATIC_HEAP_SIZE): Remove; now in sheap.h.
+ (debug_sheap): Now static.
+ (bss_sbrk_buffer_end): Remove; no longer used.
+ (bss_sbrk_ptr): Now static and private.
+ (bss_sbrk_did_unexec): Now bool.
+ (BLOCKSIZE): Remove, to avoid GCC warning about its not being used.
+ (bss_sbrk): Don't treat request_size 0 as special, since the code
+ works without this being a special case.
+ Avoid overflow if request size exceeds INT_MAX.
+ (report_sheap_usage): Remove; now done in emacs.c.
+ * src/sheap.h: New file.
+ * src/sysdep.c (get_current_dir_name): Remove macro.
+ Include "sheap.h".
+ (emacs_get_current_dir_name): Rename function from
+ get_current_dir_name. Handle HYBRID_MALLOC here;
+ this is simpler.
+ (Bug#22086)
-2016-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- Add SHA1 warnings for high network security settings
+ Report static heap usage on non-Cygwin, too
- * lisp/net/nsm.el (nsm-check-protocol): When using high security, warn
- about SHA1 certificates, which are now believed to be open to
- spoofing.
+ * src/emacs.c (Fdump_emacs) [HYBRID_MALLOC]: Report sheap usage here ...
+ * src/unexcw.c (unexec): ... instead of here, since sheap can be used
+ on platforms other than Cygwin (Bug#22086).
-2016-01-03 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- Refactor mml-smime.el, mml1991.el, mml2015.el
+ Pacify GCC on extern decls
- (Maybe this is the last merge from Gnus git to Emacs git)
+ * src/unexelf.c (bss_sbrk_did_unexec): Move decl to top level
+ to pacify recent GCC (Bug#22086).
- Cf. discussion on ding mailing list, messages in
- <http://thread.gmane.org/gmane.emacs.gnus.general/86228>.
- Common code from the three files mml-smime.el, mml1991.el, and
- mml2015.el is moved to mml-sec.el. Auxiliary functions are added
- to gnus-util.el.
+2016-01-30 Wolfgang Jenkner <wjenkner@inode.at>
- The code is supported by test cases with necessary test keys.
+ Add musl patch to support HYBRID_MALLOC on elf systems
- Documentation in message.texi is updated.
+ * src/gmalloc.c: Adjust for HYBRID_MALLOC in the non CYGWIN case.
+ (__default_morecore): Here, in particular.
+ * configure.ac: Define HYBRID_MALLOC when unexelf.o is used.
+ New variable SHEAP_OBJ.
+ * src/Makefile.in: Use it.
+ (Bug#22086)
- * doc/misc/message.texi (Security, Using S/MIME):
- Update for refactoring mml-smime.el, mml1991.el, mml2015.el.
- (Using OpenPGP): Rename from "Using PGP/MIME"; update contents.
- (Passphrase caching, Encrypt-to-self, Bcc Warning): New sections.
+2016-01-30 Rich Felker <dalias@libc.org> (tiny change)
- * lisp/gnus/gnus-util.el (gnus-test-list, gnus-subsetp, gnus-setdiff):
- New functions.
+ unexelf.c hook to support HYBRID_MALLOC on ELF
- * lisp/gnus/mml-sec.el: Require gnus-util and epg.
- (epa--select-keys): Autoload.
- (mml-signencrypt-style-alist, mml-secure-cache-passphrase): Doc fix.
- (mml-secure-openpgp-signers): New user option;
- make mml1991-signers and mml2015-signers obsolete aliases to it.
- (mml-secure-smime-signers): New user option;
- make mml-smime-signers an obsolete alias to it.
- (mml-secure-openpgp-encrypt-to-self): New user option;
- make mml1991-encrypt-to-self and mml2015-encrypt-to-self obsolete
- aliases to it.
- (mml-secure-smime-encrypt-to-self): New user option;
- make mml-smime-encrypt-to-self an obsolete alias to it.
- (mml-secure-openpgp-sign-with-sender): New user option;
- make mml2015-sign-with-sender an obsolete alias to it.
- (mml-secure-smime-sign-with-sender): New user option;
- make mml-smime-sign-with-sender an obsolete alias to it.
- (mml-secure-openpgp-always-trust): New user option;
- make mml2015-always-trust an obsolete alias to it.
- (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
- New user options.
- (mml-secure-cust-usage-lookup, mml-secure-cust-fpr-lookup)
- (mml-secure-cust-record-keys, mml-secure-cust-remove-keys)
- (mml-secure-add-secret-key-id, mml-secure-clear-secret-key-id-list)
- (mml-secure-cache-passphrase-p, mml-secure-cache-expiry-interval)
- (mml-secure-passphrase-callback, mml-secure-check-user-id)
- (mml-secure-secret-key-exists-p, mml-secure-check-sub-key)
- (mml-secure-find-usable-keys, mml-secure-select-preferred-keys)
- (mml-secure-fingerprint, mml-secure-filter-keys)
- (mml-secure-normalize-cust-name, mml-secure-select-keys)
- (mml-secure-select-keys-1, mml-secure-signer-names, mml-secure-signers)
- (mml-secure-self-recipients, mml-secure-recipients)
- (mml-secure-epg-encrypt, mml-secure-epg-sign): New functions.
+ * src/unexelf.c (unexec) [HYBRID_MALLOC]:
+ Define bss_sbrk_did_unexec (Bug#22086).
- * lisp/gnus/mml-smime.el: Require epg;
- refactor declaration and autoloading of epg functions.
- (mml-smime-use): Doc fix.
- (mml-smime-cache-passphrase, mml-smime-passphrase-cache-expiry):
- Obsolete.
- (mml-smime-get-dns-cert, mml-smime-get-ldap-cert):
- Use format instead of gnus-format-message.
- (mml-smime-epg-secret-key-id-list): Remove variable.
- (mml-smime-epg-passphrase-callback, mml-smime-epg-find-usable-key)
- (mml-smime-epg-find-usable-secret-key): Remove functions.
- (mml-smime-epg-sign, mml-smime-epg-encrypt): Refactor.
+2016-01-30 Wolfgang Jenkner <wjenkner@inode.at>
- * lisp/gnus/mml1991.el (mml1991-cache-passphrase)
- (mml1991-passphrase-cache-expiry): Obsolete.
- (mml1991-epg-secret-key-id-list): Remove variable.
- (mml1991-epg-passphrase-callback, mml1991-epg-find-usable-key)
- (mml1991-epg-find-usable-secret-key): Remove functions.
- (mml1991-epg-sign, mml1991-epg-encrypt): Refactor.
+ Link temacs with gnulib compiled with -Demacs
- * lisp/gnus/mml2015.el (mml2015-cache-passphrase)
- (mml2015-passphrase-cache-expiry): Obsolete.
- (mml2015-epg-secret-key-id-list): Remove variable.
- (mml2015-epg-passphrase-callback, mml2015-epg-check-user-id)
- (mml2015-epg-check-sub-key, mml2015-epg-find-usable-key)
- (mml2015-epg-find-usable-secret-key): Remove functions.
- (mml2015-epg-decrypt, mml2015-epg-clear-decrypt, mml2015-epg-sign)
- (mml2015-epg-encrypt): Refactor.
+ This is done to support HYBRID_MALLOC, since some static variables
+ (e.g., last_environ in putenv.c) hold pointers to memory malloced
+ before dumping (Bug#22086).
+ * lib/Makefile.am: Add incantation to install libegnu.a.
+ * src/Makefile.in ($(lib)/libgnu.a): Replace with libegnu.a
+ (temacs$(EXEEXT)): Use it.
-2016-01-02 Glenn Morris <rgm@gnu.org>
+2016-01-30 Wolfgang Jenkner <wjenkner@inode.at>
- * lisp/progmodes/fortran.el (fortran-make-syntax-propertize-function):
+ Internal linkage for gmalloc etc. if HYBRID_MALLOC
- Explicitly ignore case. (Bug#22262)
+ This avoids clashes with symbols if the after-dump malloc is
+ derived from Doug Lea's implementation (Bug#22086).
-2016-01-02 Stefan Monnier <monnier@iro.umontreal.ca>
+ * src/gmalloc.c (emacs_abort, __morecore, __default_morecore):
+ Move declarations up. For HYBRID_MALLOC, turn all `extern'
+ declarations below to `static' ones.
+ (aligned_alloc): Declare for !MSDOS as well.
+ (heapsize, _fraghead): Move resp. copy declaration downwards.
+ For HYBRID_MALLOC, conditionalize out the other definitions,
+ since the previous `static' declarations double as tentative
+ definitions, anyway.
+ (_malloc, _free, _realloc, __free_hook, _aligned_blocks)
+ (__realloc_hook, __memalign_hook): Conditionalize out.
+ (cfree, memalign, valloc): Ditto.
- (semantic-symref-derive-find-filepatterns): Return a list
+2016-01-30 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/cedet/semantic/symref/grep.el
- (semantic-symref-derive-find-filepatterns): Return a list.
- (semantic-symref-perform-search): Quote the result here once and for all.
+ Merge from origin/emacs-25
-2016-01-02 Eli Zaretskii <eliz@gnu.org>
+ 3f481ad Rename xref-query-replace to xref-query-replace-in-results
+ 62f4ed4 Update cl-defgeneric and cl-defmethod docstrings
+ 2111e0e Comment out next-error-function integration in xref
+ 4e11ad3 Correct a use of "which" in intro.texi
+ a1865bc Distinguish the two meanings of Java's keyword "default". Fixes bug #22358.
+ 76045f7 Don't operate on menu bar of nonexistent frame
+ c32f3bc Unbreak the GNUstep build.
- Fix xref-find-references on MS-Windows
+2016-01-30 Andreas Schwab <schwab@linux-m68k.org>
- * lisp/cedet/semantic/symref/grep.el
- (semantic-symref-derive-find-filepatterns): Use
- 'shell-quote-argument' instead of manually quoting in a way that
- only works with Posix shells. (Bug#22289)
+ Re-enable checks in member, memql, delete to complain about non-lists
-2016-01-02 Eli Zaretskii <eliz@gnu.org>
+ * src/fns.c (Fmember, Fmemql, Fdelete): Revert 2007-10-16 change.
- Document new features of tildify-mode
+2016-02-04 Martin Rudalics <rudalics@gmx.at>
- * lisp/textmodes/tildify.el (tildify-foreach-ignore-environments)
- (tildify-mode): Spelling fixes in doc strings.
+ Minor doc(-string) tweaks
- * etc/NEWS: Reformat the tildify-mode entry.
+ * lisp/window.el (window-in-direction): Fix doc-string typo.
+ * doc/lispref/frames.texi (Frame Font): Mention canonical
+ character width/height.
+ * doc/lispref/windows.texi (Windows and Frames): Clarify
+ handling of minibuffer window for `window-in-direction'.
+ (Window Sizes): Minor tweaks in descriptions of
+ `window-max-chars-per-line', `window-min-width' and
+ `window-min-size'.
+ (Deleting Windows): Minor tweak in `delete-window' description.
+ (Selecting Windows): Clarify window use time description.
+ (Cyclic Window Ordering): Minor tweak.
+ (Switching Buffers): Clarify description of
+ `switch-to-buffer-in-dedicated-window'.
-2016-01-02 Eli Zaretskii <eliz@gnu.org>
+2016-02-04 Eli Zaretskii <eliz@gnu.org>
- Document new features of Whitespace mode
+ Remove some useless-use-of eval.
- * doc/emacs/display.texi (Useless Whitespace): Document
- 'whitespace-toggle-options' and the new 'big-indent' style.
- Document 'whitespace-big-indent-regexp'. Document the Global
- Whitespace mode.
+ * lisp/gnus/gnus.el (gnus-load-hook): Don't use eval.
+ * lisp/gnus/nnrss.el (xml): Simply require it.
+ (xml-rpc-method-call): Use declare-function.
-2016-01-02 Eli Zaretskii <eliz@gnu.org>
+2016-01-28 Glenn Morris <rgm@gnu.org>
- Improve documentation of new Hide-IfDef features
+ Don't use eval to quieten prolog.el compilation.
- * etc/NEWS: Expand and reword Hide-IfDef section.
+ * lisp/progmodes/prolog.el (pltrace-on, pltrace-off): Declare.
+ (prolog-enable-sicstus-sd, prolog-disable-sicstus-sd): Don't use eval.
-2016-01-02 Leo Liu <sdl.web@gmail.com>
+2016-01-28 Glenn Morris <rgm@gnu.org>
- Fix regression in font-locking cl-assert and cl-check-type
+ Mark some risky prolog variables.
- * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Fix
- el-errs-re.
+ * lisp/progmodes/prolog.el (prolog-system-version)
+ (prolog-keywords, prolog-types, prolog-mode-specificators)
+ (prolog-determinism-specificators, prolog-directives)
+ (prolog-program-name, prolog-program-switches)
+ (prolog-consult-string, prolog-compile-string)
+ (prolog-eof-string, prolog-prompt-regexp, prolog-help-function):
+ Mark anything processed by prolog-find-value-by-system as risky.
-2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-28 Glenn Morris <rgm@gnu.org>
- Spelling and grammar fixes
+ * lisp/custom.el (defcustom): Doc fix.
-2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+ * doc/lispref/customize.texi (Variable Definitions):
+ Defcustom should always have a type.
- Fix copyright years by hand
+2016-01-28 Glenn Morris <rgm@gnu.org>
- These are dates that admin/update-copyright did not update, or
- updated incorrectly.
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-nogroup-warn):
+ Warn if defcustom has no type. (Bug#16276)
-2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/cedet/semantic/db-file.el (semanticdb-persistent-path):
+ Fix :type.
- Update copyright year to 2016
+ * lisp/emacs-lisp/package.el (package-load-list): Improve :type.
- Run admin/update-copyright.
+2016-01-28 Michael Albinus <michael.albinus@gmx.de>
-2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+ Fix Bug#22452
- Merge from gnulib
+ * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection):
+ * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
+ * lisp/net/tramp-sh.el (tramp-maybe-open-connection):
+ * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection):
+ Mark it as connected.
- This mostly just updates copyright dates of gnulib files.
- It also updates to the latest version of texinfo.tex.
+ * lisp/net/tramp.el (tramp-handle-file-remote-p): Check also, if
+ connection property "connected" is set. (Bug#22452)
-2015-12-31 Mark Oteiza <mvoteiza@udel.edu>
+2016-01-27 Glenn Morris <rgm@gnu.org>
- lisp/emacs-lisp/chart.el (chart-new-buffer): Move to silence byte compiler.
+ * test/lisp/vc/vc-hg.el: Move from test/automated/.
-2015-12-31 Mark Oteiza <mvoteiza@udel.edu>
+ * lisp/xwidget.el (xwidget-query-on-exit-flag): Declare.
- Port chart.el methods to cl-generic.
+ * lisp/xwidget.el (xwidget-webkit-browse-url): Give explicit error
+ if not compiled with xwidgets.
- cl-call-next-method cannot be used inside EIEIO's defmethod.
- * lisp/emacs-lisp/chart.el: Require cl-generic at compile time.
- * lisp/emacs-lisp/chart.el (initialize-instance, chart-draw):
- (chart-draw-title, chart-size-in-dir, chart-draw-axis):
- (chart-axis-draw, chart-translate-xpos, chart-translate-ypos):
- (chart-translate-namezone, chart-draw-data, chart-add-sequence):
- (chart-trim, chart-sort): Use cl-defmethod instead of defmethod.
+2016-01-26 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-31 Brian Burns <bburns.km@gmail.com>
+ C-u C-x = example doc fix
- Add nt/INSTALL.W64 build instructions
+ * doc/emacs/mule.texi (International Chars):
+ Adjust example to match current behavior of C-u C-x =.
- * nt/INSTALL.W64: New file.
- * nt/INSTALL: Point to INSTALL.W64 for 64-bit build instructions.
+2016-01-26 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-31 Joakim Jalap <joakim.jalap@fastmail.com>
+ malloc.h hygiene
- Add new input method 'programmer-dvorak'
+ This attempts to future-proof Emacs a bit against possible glibc
+ changes, by having Emacs use <malloc.h> declarations rather than
+ coding them up by hand. Problem noted by Florian Weimer in:
+ https://sourceware.org/ml/libc-alpha/2016-01/msg00777.html
+ Implement this mainly by moving malloc.h-related functions from
+ emacs.c (which does not include <malloc.h>) to alloc.c (which does).
+ * src/alloc.c (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]:
+ New function.
+ The remaining changes to this file apply only if DOUG_LEA_MALLOC.
+ (alloc_unexec_pre, alloc_unexec_post): New functions.
+ (malloc_initialize_hook): Use my_heap_start and alloc_unexec_post.
+ (__MALLOC_HOOK_VOLATILE): New macro, if not already defined.
+ (__malloc_initialize_hook): Use it.
+ (malloc_state_ptr, malloc_initialize_hook, __malloc_initialize_hook):
+ Move here from ...
+ * src/emacs.c: ... here.
+ (malloc_get_state, malloc_set_state): Remove extern decls.
+ (my_heap_start) [DOUG_LEA_MALLOC || GNU_LINUX]: Remove static var.
+ All uses changed to similarly-named new function.
+ (Fdump_emacs): Use new functions alloc_unexec_pre, alloc_unexec_post.
+ * src/lisp.h (my_heap_start, alloc_unexec_pre, alloc_unexec_post):
+ New decls.
- * lisp/leim/quail/programmer-dvorak.el ("programmer-dvorak"): New
- input method.
+2016-01-26 Eli Zaretskii <eliz@gnu.org>
- * etc/NEWS: Mention it.
+ * doc/emacs/mark.texi (Using Region): Clarify wording. (Bug#22467)
-2015-12-31 Eli Zaretskii <eliz@gnu.org>
+2016-01-26 Paul Eggert <eggert@cs.ucla.edu>
- Allow to invoke original M-TAB binding in 'flyspell-prog-mode'
+ Remove never-set var handle_user_signal_hook
- * lisp/textmodes/flyspell.el (flyspell-prog-mode): Record the
- original M-TAB binding in a buffer-local variable.
- (flyspell-auto-correct-word): Invoke the original binding of M-TAB
- if that is recorded, when point is in a place where flyspell
- should not be active (e.g., because the user turned on
- 'flyspell-prog-mode'). (Bug#18533)
+ * src/keyboard.c, src/keyboard.h (handle_user_signal_hook):
+ Remove never-set var. All uses removed.
-2015-12-31 Eli Zaretskii <eliz@gnu.org>
+2016-01-26 Anders Lindgren <andlind@gmail.com>
- Fix EWW rendering of long RTL lines
+ Fixed NextStep fullscreen issue (bug#22468)
- * lisp/net/shr.el (shr-insert-document): Undo any previous hscroll
- of the selected window before filling its lines. (Bug#22250)
+ When in fullscreen mode, `[screen visibleFrame]' sometimes
+ includes, sometimes excludes the menu bar. This could cause
+ a frame to be placed too low when in fullscreen mode.
-2015-12-31 Vincent Belaïche <vincentb1@users.sourceforge.net>
+ * src/nsterm.m (ns_menu_bar_should_be_hidden): Trace.
+ (constrain_frame_rect): New parameter, isFullscreen, when true don't
+ query the height of the menu bar.
+ (ns_constrain_all_frames): Pass `false' (isFullscreen) to
+ `constrain_frame_rect'.
+ ([EmacsView initFrameFromEmacs:]): Trace.
+ ([EmacsView isFullscreen]): Trace.
+ ([EmacsWindow constrainFrameRect:toScreen:]): Pass fullscreen
+ state to `constrain_frame_rect'.
- fix bug#21054
+2016-01-25 Artur Malabarba <bruce.connor.am@gmail.com>
- * lisp/ses.el (ses-check-curcell): Call `ses-set-curcell' unconditionally
+ * lisp/files.el: Use a fixed file name for the second dir-locals file
-2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ (dir-locals-file): Revert to its original fixed value.
+ (dir-locals-file-2): New const.
+ (dir-locals--all-files): Don't use `file-name-all-completions'.
+ Instead, just check for the 2 dir-locals files and return a list
+ of the ones that exit (if any).
- Clean up cairo printing code
+ * etc/NEWS: Document the change.
- * src/gtkutil.c (xg_get_page_setup): Use listn.
- * src/xfns.c (Fx_export_frames, Fx_print_frames_dialog): Doc fix. Use
- decode_window_system_frame and FRAME_VISIBLE_P.
- (Fx_print_frames_dialog): Use redisplay_preserve_echo_area instead
- of Fdisplay.
- * src/xterm.c (x_cr_export_frames): Use redisplay_preserve_echo_area
- instead of Fdisplay. Temporarily unblock_input around QUIT.
+ * doc/emacs/custom.texi (Directory Variables): Document the change.
-2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * doc/lispref/variables.texi (Directory Local Variables): Update
+ accordingly.
- Move variables to inner loop, preparing for Mac port merge
+2016-01-25 Artur Malabarba <bruce.connor.am@gmail.com>
- * src/keyboard.c (command_loop_1): Move variables `cmd',
- `keybuf', and `i' to inner loop.
+ * lisp/files-x.el (modify-dir-local-variable): Small rewrite
-2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ Change a variable name to be more meaningful, and reorder some of
+ the code with no change in behaviour.
- Add handle_user_signal_hook
+2016-01-25 Artur Malabarba <bruce.connor.am@gmail.com>
- * src/keyboard.h (handle_user_signal_hook): New declaration.
- * src/keyboard.c (handle_user_signal_hook): New variable.
- (handle_user_signal): Call it.
+ * lisp/files.el (dir-locals-find-file): Refactor return values
-2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ Returning a cache remains unchanged, but the case of returning a
+ file (or pattern) is now changed to return the contaning
+ directory.
- Avoid writing to purespace
+ (dir-locals-read-from-file): Rename to `dir-locals-read-from-dir'
+ and make obsolete.
+ (dir-locals-read-from-dir): Simplify accordingly.
+ (hack-dir-local-variables): Simplify accordingly and rename a
+ variable.
- * src/alloc.c (Fmake_string): Don't write to empty string contents.
- (allocate_vector): Don't write to empty vector size.
- * src/character.h (CHECK_CHARACTER_CAR, CHECK_CHARACTER_CDR):
- Don't call unnecessary XSETCAR or XSETCDR.
- * src/lisp.h (STRING_SET_UNIBYTE, STRING_SET_MULTIBYTE): Don't
- write to empty string size_byte.
+2016-01-25 Glenn Morris <rgm@gnu.org>
-2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * lisp/textmodes/flyspell.el (flyspell--prev-meta-tab-binding):
+ Declare.
- Remove unused variable
+ * configure.ac (USE_CAIRO): Rename to more standard HAVE_CAIRO.
- * lisp/international/mule-cmds.el: Remove unused variable
- `mac-system-coding-system'.
+ * configure.ac (--with-cairo): Say it's experimental.
-2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * lisp/xwidget.el (xwidget-webkit-scroll-behavior):
+ Rename using American spelling. Update all uses.
- * configure.ac: Find libxml2 headers in Xcode SDK dir on Darwin.
+2016-01-25 Glenn Morris <rgm@gnu.org>
-2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ Yet more xwidget doc fixes.
- Use posix_openpt instead of openpty on Darwin
+ * lisp/xwidget.el (xwidget-webkit-scroll-behaviour)
+ (xwidget-insert, xwidget-webkit-browse-url)
+ (xwidget-webkit-scroll-up, xwidget-webkit-scroll-down)
+ (xwidget-webkit-scroll-forward, xwidget-webkit-scroll-backward)
+ (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
+ (xwidget-webkit-show-id-element)
+ (xwidget-webkit-show-id-or-named-element)
+ (xwidget-webkit-adjust-size, xwidget-webkit-current-url)
+ (xwidget-webkit-execute-script-rv)
+ (xwidget-webkit-copy-selection-as-kill, xwidget-get)
+ (xwidget-put): Doc fixes.
+ (xwidget-webkit-insert-string, xwidget-webkit-show-named-element)
+ (xwidget-webkit-show-id-element)
+ (xwidget-webkit-show-id-or-named-element): Prompt fixes.
- * configure.ac (PTY_ITERATION, FIRST_PTY_LETTER, PTY_OPEN)
- (PTY_NAME_SPRINTF, PTY_TTY_NAME_SPRINTF): Remove
- Darwin-specific definitions. Use posix_openpt instead.
+2016-01-25 Ted Zlatanov <tzz@lifelogs.com>
-2015-12-30 Shakthi Kannan <shakthimaan@gmail.com>
+ * lisp/gnus/gnus-art.el (gnus-blocked-images):
+ Add explicit nil choice and tags.
- Document support for ':documentation' in Lisp mode
+2016-01-25 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/emacs-lisp/lisp-mode.el (lisp-string-in-doc-position-p)
- (lisp-string-after-doc-keyword-p)
- (lisp-font-lock-syntactic-face-function): Add doc strings.
+ Spelling fixes
-2015-12-30 Shakthi Kannan <shakthimaan@gmail.com>
+2016-01-25 Stefan Monnier <monnier@iro.umontreal.ca>
- Document new features of TeX mode
+ (rng-c-fix-escaped-newlines): Use subst-char-in-string
- * doc/emacs/text.texi (TeX Print): Document
- 'tex-print-file-extension'.
- * doc/emacs/programs.texi (Misc for Programs): Document support
- for Prettify Symbols mode in TeX mode.
+ * lisp/nxml/rng-cmpct.el (rng-c-fix-escaped-newlines):
+ Use subst-char-in-string.
-2015-12-30 Eli Zaretskii <eliz@gnu.org>
+2016-01-25 Stefan Monnier <monnier@iro.umontreal.ca>
- Clarify docs of hscroll in RTL text
+ * lisp/textmodes/sgml-mode.el (sgml-forward-sexp): New function
- * doc/lispref/windows.texi (Horizontal Scrolling): Clarify the
- meaning of a window's horizontal scroll amount for RTL paragraphs.
+ (sgml-cursor-sensor, sgml-pretty-print, sgml-parse-tag-backward)
+ (sgml-calculate-indent): Use it.
-2015-12-30 Eli Zaretskii <eliz@gnu.org>
+2016-01-25 Stefan Monnier <monnier@iro.umontreal.ca>
- Fix rendering of HTML pages that use character composition
+ * lisp/org: Fix some compiler warnings
- * src/indent.c (Fvertical_motion): Fix the case when point starts
- in the middle of a composition, as in shr-vertical-motion.
- (Bug#22250)
+ * lisp/org/ob-core.el (org-babel-check-confirm-evaluate)
+ (org-babel-map-src-blocks): Don't emit warnings if added vars are not used.
+ (*this*): Declare as dyn-bound.
+ (org-babel-expand-src-block, org-babel-load-in-session)
+ (org-babel-switch-to-session-with-code, org-babel-get-rownames):
+ Mark unused args.
+ (org-babel-combine-header-arg-lists): Remove unused var `args'.
+ (org-babel-find-named-block): Remove unused var `msg'.
-2015-12-30 Eli Zaretskii <eliz@gnu.org>
+ * lisp/org/org-src.el (org-inhibit-startup, org-src-fontify-natively):
+ Declare as dyn-bound.
+ (org-edit-src-code): Remove unused var `lfmt'.
+ (org-edit-fixed-width-region): Remove unused var `preserve-indentation'.
- Avoid some compiler warnings in w32.c
+2016-01-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * src/w32.c (codepage_for_filenames, crlf_to_lf)
- (ansi_encode_filename, socket_to_fd, sys_write)
- (check_windows_init_file): Avoid compiler warnings about
- differences in pointer signedness.
+ * lisp/font-lock.el: Use #' to quote function symbols
-2015-12-30 Dmitry Gutov <dgutov@yandex.ru>
+2016-01-25 Stefan Monnier <monnier@iro.umontreal.ca>
- Undo ill-advised change
+ (font-lock-ensure-function): Fix bug#22399
- * lisp/progmodes/xref.el (xref-collect-matches): Undo
- ill-advised change. The hits come in the order that `find'
- produces them in, which isn't alphabetical.
+ * lisp/font-lock.el (font-lock-ensure-function): Fix handling when
+ font-lock-mode is not enabled (bug#22399).
-2015-12-30 Dmitry Gutov <dgutov@yandex.ru>
+2016-01-25 Alan Mackenzie <acm@muc.de>
- Unbreak completion in python-mode buffers
+ Expunge "allow" + infinitive from source and doc, part 2.
- * lisp/progmodes/python.el (python-shell-completion-at-point):
- Unbreak in python-mode buffers.
+ Do the same for "permit", "enable", "prevent", and (where appropriate)
+ "require".
-2015-12-29 Eli Zaretskii <eliz@gnu.org>
+ doc/misc/reftex.texi:
+ doc/misc/url.texi:
+ lib/get-permissions.c:
+ lib/strftime.c:
+ lisp/org/org-element.el:
+ lisp/org/org-mobile.el:
+ lisp/textmodes/reftex-vars.el:
+ src/bidi.c:
+ src/emacs.c:
+ src/xdisp.c:
+ test/etags/c-src/emacs/src/lisp.h:
- Fix typos in CC Mode manual
+ Expunge the likes of "This allows to do something" from the above files.
- * doc/misc/cc-mode.texi (c-offsets-alist, Style Variables): Fix
- typos. (Bug#22267)
+2016-01-25 Artur Malabarba <bruce.connor.am@gmail.com>
-2015-12-29 Eli Zaretskii <eliz@gnu.org>
+ * lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Redundant line
- Avoid assertion violations in compact_font_cache_entry
+ `special-mode' is already read-only.
- * src/alloc.c (compact_font_cache_entry): Don't use VECTORP to
- avoid assertion violation in ASIZE. (Bug#22263)
+2016-01-25 Artur Malabarba <bruce.connor.am@gmail.com>
-2015-12-29 Eli Zaretskii <eliz@gnu.org>
+ * lisp/emacs-lisp/ert.el (ert--results-move): Change error to user-error
- Fix filling text with bidirectional characters in shr.el
+2016-01-24 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/net/shr.el (shr-insert-document): Bind
- bidi-display-reordering to nil while filling lines. This is
- required for when a line includes characters whose bidi
- directionality is opposite to the base paragraph direction,
- because columns are counted in the logical order. (Bug#22250)
+ Port "$@" to OpenIndiana ksh93
-2015-12-29 Martin Rudalics <rudalics@gmx.at>
+ In http://lists.gnu.org/archive/html/bug-autoconf/2015-12/msg00000.html
+ Pavel Raiskup reports that ${1+"$@"} runs afoul of a bug in /bin/sh
+ (derived from ksh 93t+ 2010-03-05). ${1+"$@"} works around an ancient
+ bug in long-dead shells, so remove the workaround.
+ * admin/check-doc-strings, configure.ac, lib-src/rcs2log:
+ Use plain "$@" rather than ${1+"$@"}.
- * src/xfns.c (x_create_tip_frame): Process alpha parameter.
+2016-01-24 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-29 Michael Albinus <michael.albinus@gmx.de>
+ * src/xwidget.c (Fxwidget_set_adjustment): Fix doc string quoting typo.
- Sync with Tramp 2.2.13
+2016-01-24 Paul Eggert <eggert@cs.ucla.edu>
- * doc/misc/trampver.texi: Change version to "2.2.13.25.1".
+ Improve wording for SMB support
- * lisp/net/tramp-compat.el (tramp-compat-delete-dups):
- Use `tramp-compat-funcall'.
+ * doc/misc/tramp.texi (External methods): Improve and modernize
+ wording for discussion of smbclient. There is no longer any
+ need to mention the laundry list of old MS Windows implementations
+ of SMB and CIFS, nor to mention CIFS. Also, give a URL for Samba.
- * lisp/net/tramp-gvfs.el (tramp-gvfs-parse-device-names):
- Make `split-string' call compatible with older Emacsen.
+2016-01-24 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/net/trampver.el: Change version to "2.2.13.25.1".
+ Merge from gnulib
-2015-12-29 Lambda Coder <sjLambda@gmail.com>
+ This incorporates:
+ 2016-01-24 openat_proc_name: fix last '/' overwritten on OS/2 kLIBC
+ 2016-01-24 closedir, dirfd, opendir: port to OpenSolaris 5.10
+ 2016-01-15 detect utimes() correctly on OS/2 kLIBC
+ 2016-01-15 openat_proc_name: port to OS/2 kLIBC
+ 2016-01-14 stdint: check _INTPTR_T_DECLARED for intptr_t etc.
+ 2016-01-14 opendir, closedir, dirfd, fdopendir: port to OS/2 kLIBC
+ 2016-01-14 dup, dup2, fcntl: support a directory fd on OS/2 kLIBC
+ 2016-01-14 binary-io: don't put fd in binary mode if a console on EMX
+ 2016-01-14 sig2str: list all signals on FreeBSD >= 7
+ 2016-01-13 acl-permissions: port to USE_ACL==0 platforms
+ 2016-01-12 mktime: rename macro to avoid glibc clash
+ 2016-01-12 Port "$@" to OpenIndiana ksh93
+ 2016-01-12 Port Universal Time settings to strict POSIX
+ * build-aux/gitlog-to-changelog, build-aux/update-copyright:
+ * doc/misc/texinfo.tex, lib/acl-internal.c, lib/acl-internal.h:
+ * lib/binary-io.h, lib/dirent.in.h, lib/dirfd.c, lib/dup2.c:
+ * lib/fcntl.c, lib/fdopendir.c, lib/mktime.c, lib/openat-proc.c:
+ * lib/sig2str.h, lib/stdint.in.h, m4/dirfd.m4, m4/dup2.m4:
+ * m4/fcntl.m4, m4/utimes.m4:
+ Copy from gnulib.
+ * m4/gnulib-comp.m4: Regenerate.
- * doc/misc/tramp.texi: Editorial revisions to the Tramp manual
+2016-01-24 Alan Mackenzie <acm@muc.de>
-2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+ Expunge "allow" + infinitive without direct object from source and doc.
- Mention that tls.el is secure by default, and will fail
+ Do the same for "permit", "enable", and "prevent".
-2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+ * doc/emacs/mule.texi:
+ * doc/lispref/control.texi:
+ * doc/lispref/display.texi:
+ * doc/lispref/frames.texi:
+ * doc/lispref/functions.texi:
+ * doc/lispref/nonascii.texi:
+ * doc/lispref/streams.texi:
+ * doc/lispref/windows.texi:
+ * doc/misc/dbus.texi:
+ * doc/misc/eww.texi:
+ * doc/misc/flymake.texi:
+ * doc/misc/octave-mode.texi:
+ * doc/misc/org.texi:
+ * doc/misc/reftex.texi:
+ * doc/misc/tramp.texi:
+ * doc/misc/wisent.texi:
+ * etc/NEWS:
+ * lisp/autorevert.el:
+ * lisp/cedet/mode-local.el:
+ * lisp/cedet/semantic/senator.el:
+ * lisp/cedet/semantic/wisent.el:
+ * lisp/dos-fns.el:
+ * lisp/frameset.el:
+ * lisp/gnus/gnus-agent.el:
+ * lisp/gnus/mm-util.el:
+ * lisp/international/characters.el:
+ * lisp/ldefs-boot.el:
+ * lisp/mail/mailclient.el:
+ * lisp/man.el:
+ * lisp/mh-e/mh-search.el:
+ * lisp/net/tramp-cmds.el:
+ * lisp/net/tramp-gvfs.el:
+ * lisp/org/org-crypt.el:
+ * lisp/org/org-element.el:
+ * lisp/org/org-feed.el:
+ * lisp/org/org.el:
+ * lisp/org/ox-ascii.el:
+ * lisp/org/ox-icalendar.el:
+ * lisp/org/ox-publish.el:
+ * lisp/org/ox.el:
+ * lisp/play/gamegrid.el:
+ * lisp/play/gomoku.el:
+ * lisp/progmodes/antlr-mode.el:
+ * lisp/progmodes/python.el:
+ * lisp/progmodes/vhdl-mode.el:
+ * lisp/strokes.el:
+ * lisp/textmodes/ispell.el:
+ * lisp/tree-widget.el:
+ * lisp/vc/pcvs.el:
+ * lisp/window.el:
+ * src/lisp.h:
+ * src/w32.c:
+ * src/w32heap.c:
+ * src/w32term.c:
+ * src/window.c:
+ * src/xfaces.c:
- Make tls.el use trustfiles by default
+ Replace solecisms like "This allow to do something" with a correct
+ alternative, such as "This allow you to do something", "This allows
+ something to be done" or "This allows the doing of something".
- * lisp/net/tls.el (tls-program): Add a certfile by default (bug#21227).
- (open-tls-stream): Insert the trustfile by looking at
- `gnutls-trustfiles'.
+2016-01-24 l3thal <kwhite@gnu.org>
-2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+ Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
- Refactor out gnutls-trustfiles
+2016-01-24 Kelvin White <kwhite@gnu.org>
- * lisp/net/gnutls.el (gnutls-trustfiles): Refactor out for reuse by tls.el.
+ Add NEWS entry for asynchronous reconnect in ERC
-2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+2016-01-24 l3thal <kwhite@gnu.org>
- Remove --insecure from gnutls-cli invocation
+ Add NEWS entry for asynchronous reconnect in ERC
- * tls.el (tls-program): Default to using secure TLS
- connections (bug#19284).
+2016-01-24 Kelvin White <kwhite@gnu.org>
-2015-12-29 Paul Eggert <eggert@cs.ucla.edu>
+ browse-url.el: Add 'google-chrome' to supported browsers.
- Spelling fix
+2016-01-24 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-29 Paul Eggert <eggert@cs.ucla.edu>
+ Port Tramp manual to latest Texinfo
- Port report-emacs-bug to deterministic builds
+ Otherwise, 'make pdf' did not work (Bug#22416).
+ * doc/misc/tramp.texi (xxx, yyy): Remove macros.
+ (trampfn): Specialize to the case where METHOD is nonempty.
+ The 2nd argument is now user@host, not 2nd user and 3rd host args.
+ All uses changed.
+ (trampf): New macro.
- * lisp/mail/emacsbug.el (report-emacs-bug): Future-proof the
- recent "built on" change to deterministic builds where
- emacs-build-system will be nil. See:
- http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01369.html
+2016-01-24 Lars Ingebrigtsen <larsi@gnus.org>
-2015-12-29 Jose A. Ortega Ruiz <jao@gnu.org> (tiny change)
+ * eww.el (eww-render): Protect against empty content-types.
- Fix URL auth error message
+2016-01-24 Nicolas Petton <nicolas@petton.fr>
- * lisp/url/url-http.el (url-http-handle-authentication): Make the error
- message more correct (bug#20069).
+ authors.el updates
-2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+ * admin/authors.el (authors-ignored-files, authors-renamed-files-alist):
+ Additions.
- shr link traversal fixup
+2016-01-23 Dmitry Gutov <dgutov@yandex.ru>
- * shr.el (shr-next-link): Don't bug out on adjacent links.
+ Rename xref-query-replace to xref-query-replace-in-results
- Backport:
+ * lisp/progmodes/xref.el(xref-query-replace):
+ Rename to xref-query-replace-in-results.
+ (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01240.html)
- (cherry picked from commit 1efc5f8b09273c359683ce13be95fb5df7a84311)
+ * lisp/progmodes/xref.el (xref--xref-buffer-mode-map):
+ * lisp/dired-aux.el (dired-do-find-regexp-and-replace):
+ * doc/emacs/dired.texi (Operating on Files):
+ * doc/emacs/maintaining.texi (Xref Commands)
+ (Identifier Search, Identifier Search): Update accordingly.
-2015-12-28 Tom Tromey <tom@tromey.com>
+2016-01-23 Dmitry Gutov <dgutov@yandex.ru>
- set :safe on css-indent-offset
+ Update cl-defgeneric and cl-defmethod docstrings
- * lisp/textmodes/css-mode.el (css-indent-offset): Add :safe 'integerp.
+ * lisp/emacs-lisp/cl-generic.el: Remove outdated TODO item.
+ (cl-defgeneric): Rename BODY to DEFAULT-BODY.
+ (cl-defmethod): Mention that multiple dispatch arguments are
+ allowed. Document supported types. (Bug#22336)
-2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+2016-01-23 Dmitry Gutov <dgutov@yandex.ru>
- * eww.el (eww-mode): Remove superfluous bidi reset.
+ Comment out next-error-function integration in xref
-2015-12-28 James Stout <james.wolf.stout@gmail.com> (tiny change)
+ * lisp/progmodes/xref.el (xref--xref-buffer-mode):
+ Comment out next-error-function integration
+ (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01286.html).
- Make chunked encoding trailer detection more compliant
+2016-01-23 John Wiegley <johnw@newartisans.com>
- * lisp/url/url-http.el
- (url-http-chunked-encoding-after-change-function): Make
- trailer detection more compliant (bug#16345).
+ Correct a use of "which" in intro.texi
-2015-12-28 Martin Rudalics <rudalics@gmx.at>
+2016-01-23 Alan Mackenzie <acm@muc.de>
- Fix Bug#10873 in `report-emacs-bug'
+ Distinguish the two meanings of Java's keyword "default". Fixes bug #22358.
- * lisp/mail/emacsbug.el (report-emacs-bug): If
- `report-emacs-bug-no-explanations' is nil, make sure we can show
- mail and warnings buffer on this frame (Bug#10873).
+ * lisp/progmodes/cc-engine.el (c-guess-basic-syntax CASE 14): Check the
+ context of case labels (including "default") more rigorously.
+ (c-guess-basic-syntax CASE 15): Consequential amendment.
-2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/progmodes/cc-langs.el (c-modifier-kwds): Add "default" to Java's value.
- Always reset the bidi direction
+2016-01-23 Oscar Fuentes <ofv@wanadoo.es>
- * eww.el (eww-display-html): Always reset the bidi direction
- to `left-to-right' (bug#22257).
+ Don't operate on menu bar of nonexistent frame
-2015-12-28 Alan Mackenzie <acm@muc.de>
+ * src/xfns.c (Fx_hide_tip) [USE_LUCID]: Check that the current frame
+ is valid before redisplaying its menu. Fixes bug#22438.
- Allow line comments ending with escaped NL to be continued to the next line.
+2016-01-23 Anders Lindgren <andlind@gmail.com>
- Use this in C, C++, and Objective C Modes. Fixes bug#22246
+ Unbreak the GNUstep build.
- * src/syntax.c (comment-end-can-be-escaped): New buffer local variable.
- (forw-comment, back-comment): On encountering an end of comment character,
- test whether it is escaped when `comment-end-can-be-escaped' is non-nil.
+ * src/nsterm.m ([EmacsBell init]): In GNUstep, don't use the
+ predefined "caution" image. Add trace.
+ (x_set_window_size): Remove unused variables `cols' and `rows'.
+ (ns_draw_fringe_bitmap): Exclude assignment of `fromRect' when
+ GNUstep is used.
+ ([EmacsView updateFrameSize:]): Remove unused variable `win'.
+ ([EmacsWindow zoom:]): Remove unused variable `f'.
- * doc/lispref/syntax.texi (Control Parsing): Describe
- `comment-end-can-be-escaped'.
+2016-01-23 Eli Zaretskii <eliz@gnu.org>
+ John Wiegley <johnw@gnu.org>
+ Michael Heerdegen <michael_heerdegen@web.de>
- * etc/NEWS (Lisp Changes): Describe `comment-end-can-be-escaped'.
+ Improve documentation of 'pcase'
- * lisp/progmodes/cc-langs.el: New c-lang-setvar `comment-end-can-be-escaped'.
+ * doc/lispref/control.texi (Pattern matching case statement):
+ Reorganize, expand, and improve wording.
-2015-12-28 Dmitry Gutov <dgutov@yandex.ru>
+ * etc/NEWS: Mention that 'pcase' changes are documented.
- Rename project-library-roots to project-external-roots
+2016-01-23 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/progmodes/project.el (project-library-roots): Rename to
- project-external-roots.
- (project-library-roots-function): Rename to
- project-vc-external-roots-function. Only use it in the VC
- backend, for now. Update project-external-roots accordingly.
- (project-vc-library-roots): Remove.
- (project-or-libraries-find-regexp):
- Rename to project-or-external-find-regexp.
+ * etc/NEWS: Say that Cairo is experimental.
- * lisp/progmodes/elisp-mode.el (elisp-library-roots):
- Rename to elisp-load-path-roots.
+2016-01-23 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/progmodes/etags.el (etags-library-roots): Remove. Use
- an anonymous function for the default value of
- project-vc-external-roots-function.
+ Report error for PNG under Cairo
-2015-12-27 Deniz Dogan <deniz@dogan.se>
+ * src/image.c (lookup_rgb_color): Signal a file error instead
+ of dumping core when mishandling an image.
- Clear erc user list upon disconnection
+2016-01-23 Arash Esbati <esbati@gmx.de>
- * lisp/erc/erc-backend.el (erc-process-sentinel): Clear channel user
- lists upon disconnection. This prevents invalid channel
- user lists when reconnecting (bug#10947).
+ Delete a spurious backquote (tiny change)
-2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/textmodes/reftex-ref.el (reftex-label): Delete a
+ spurious backquote which raises an error with emacs 25.
- Don't bug out in erc after waking from sleep
+2016-01-23 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/erc/erc-backend.el (erc-server-send-ping): If the server has
- closed connection, this may already have been detected and
- `erc-server-last-received-time' has been set to nil (bug#13608).
+ Pacify --enable-gcc-warnings --with-cairo
-2015-12-27 David Edmondson <dme@dme.org>
+ Problem reported by Alexander Kuleshov in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01289.html
+ * src/gtkutil.c (xg_get_page_setup):
+ Use switch rather than if-then-else.
+ * src/image.c (COLOR_TABLE_SUPPORT):
+ Define directly rather than via #define and optional later #undef.
+ (lookup_rgb_color) [USE_CAIRO && ENABLE_CHECKING]:
+ Crash when the pixel is undefined, as there is a genuine bug
+ here (Bug#22442).
+ * src/image.c (tiff_load, gif_load, svg_load_image)
+ (x_kill_gs_process) [USE_CAIRO]:
+ * src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]:
+ Omit unused locals, or move them to where they’re needed.
+ (x_clear_area1): Now ATTRIBUTE_UNUSED.
- Proxy error in erc with multiple clients
+2016-01-22 Eli Zaretskii <eliz@gnu.org>
- * lisp/erc/erc.el (erc-channel-receive-names): Fix errors
- generated when multiple IRC clients talk to a single IRC proxy
- (bug#19034).
+ Update documentation for Dired search and replace
- Backport:
+ * doc/emacs/dired.texi (Operating on Files): Update descriptions
+ of 'A' and 'Q' now bound to 'dired-do-find-regexp' and
+ 'dired-do-find-regexp-and-replace'.
- (cherry picked from commit 507e98a54d1aa37823c64993d6b59257a82fe8f4)
+ * etc/NEWS: Mention xref-related changes in Dired.
-2015-12-27 Dima Kogan <dima@secretsauce.net>
+2016-01-22 Paul Eggert <eggert@cs.ucla.edu>
- Ensure that we don't have several timers in erc
+ Port recent xdisp.c fix to picky C compilers
- * lisp/erc/erc-backend.el (erc-server-setup-periodical-ping): Checks
- for existing timers in the alist before adding new ones. If a
- timer already exists, it is cancelled and
- overwritten. (bug#19292).
+ * src/xdisp.c (dump_glyph): Redo the call to fprintf to avoid
+ putting #if inside the arguments to a standard function, which
+ the C standard says has undefined behavior.
-2015-12-27 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
+2016-01-22 Alan Mackenzie <acm@muc.de>
- Fix mml-sec build warnings
+ Prevent spurious recognition of K&R argument declarations. Fixes bug #2203
- * lisp/gnus/mml-sec.el: Fix warnings by adding autoloads
- (bug#18718).
+ * cc-engine.el (c-forward-declarator): New function.
+ (c-in-knr-argdecl): Before recognizing a K&R argument declaration, check it is
+ contained in the preceding arg list.
- Backport:
+ * cc-fonts.el (c-font-lock-declarators): Use the new function
+ `c-forward-declarator' in place of inline code.
- (cherry picked from commit 3603097f62f5f4aa5451716e9ac380161f6829e2)
+2016-01-22 Eli Zaretskii <eliz@gnu.org>
-2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+ Fix the build with --enable-checking=glyphs
- Don't insert erc logs at the end
+ * src/xdisp.c (dump_glyph): Don't refer to glyph->u.xwidget in a
+ build without xwidget support.
- * lisp/erc/erc-log.el (erc-log-setup-logging): Insert the previous log
- at the start of the buffer, not at the end (bug#20496).
+2016-01-22 Eli Zaretskii <eliz@gnu.org>
-2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+ Document cl-generic.el
- (eww-setup-buffer): Restore left-to-right defaults
+ * doc/lispref/functions.texi (Generic Functions): New section.
+ (Bug#22336)
+ (Functions): Update the chapter menu.
+ * doc/lispref/elisp.texi: Update the master menu.
- * eww.el (eww-setup-buffer): Restore left-to-right defaults.
+2016-01-22 Paul Eggert <eggert@cs.ucla.edu>
- Backport:
+ xwidgets style cleanup
- (cherry picked from commit 96c874b96b617c124d500a94de761a61f2a08685)
+ Adjust the newly-added Xwidgets code so that it uses a more-typical
+ Emacs style. This should not affect behavior, except that in
+ a few places it adds runtime checks that Lisp arguments are of
+ the proper type, and in one place it uses more-precise arithmetic.
+ * src/buffer.c, src/dispnew.c, src/emacs.c, src/emacsgtkfixed.c:
+ * src/emacs.c, src/print.c, src/window.c, src/xdisp.c, src/xterm.c:
+ Include xwidget.h unconditionally.
+ * src/buffer.c (Fkill_buffer):
+ * src/dispnew.c (update_window):
+ * src/emacs.c (main):
+ * src/print.c (print_object):
+ * src/window.c (Fdelete_window_internal):
+ * src/xdisp.c (handle_single_display_spec, push_it, pop_it)
+ (get_next_element, set_iterator_to_next, next_element_from_xwidget)
+ (dump_glyph, calc_pixel_width_or_height, BUILD_GLYPH_STRINGS_XW)
+ (BUILD_GLYPH_STRINGS, x_produce_glyphs, get_window_cursor_type):
+ * src/xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
+ Call xwidget functions and macros without worrying about
+ HAVE_XWIDGETS when the code is a no-op on non-xwidget
+ platforms.
+ * src/dispextern.h (XWIDGET_GLYPH, struct glyph_string.xwidget)
+ (IT_XWIDGET, GET_FROM_XWIDGET, struct it.u.xwidget)
+ (struct it.xwidget):
+ * src/lisp.h (PVEC_XWIDGET, PVEC_XWIDGET_VIEW):
+ Always define.
+ * src/emacsgtkfixed.h: Omit unnecessary comment.
+ * src/keyboard.c: Fix spacing.
+ * src/xdisp.c (BUILD_XWIDGET_GLYPH_STRING, produce_xwidget_glyph):
+ Define to be a no-op if not HAVE_XWIDGETS.
+ * src/xwidget.c: Include xwidget.h first (after config.h)
+ to make sure that it can stand by itself.
+ (Fmake_xwidget, Fxwidget_webkit_execute_script):
+ Fix typo in doc string.
+ (Fmake_xwidget): Check type of args.
+ (Fmake_xwidget, offscreen_damage_event)
+ (webkit_document_load_finished_cb, webkit_download_cb)
+ (webkit_new_window_policy_decision_requested_cb)
+ (webkit_navigation_policy_decision_requested_cb)
+ (xwidget_osr_draw_cb, xwidget_osr_event_forward)
+ (xwidget_osr_event_set_embedder, xwidget_init_view):
+ Omit unnecessary casts.
+ * src/xwidget.c (Fmake_xwidget, xwidget_hidden)
+ (xwidget_show_view, xwidget_hide_view)
+ (x_draw_xwidget_glyph_string, xwidget_start_redisplay, xwidget_touch)
+ (xwidget_touched):
+ * src/xwidget.h (struct xwidget.kill_without_query)
+ (struct xwidget_view.redisplayed, struct xwidget_view.hidden):
+ Use bool for boolean.
+ * src/xwidget.c (store_xwidget_event_string, Fxwidget_size_request):
+ Simplify by using list functions.
+ (WEBKIT_FN_INIT): Omit unnecessary test for nil.
+ (Fxwidget_resize): Check type of integer args
+ before doing any work. Check that they are nonnegative.
+ (Fxwidget_set_adjustment): Check type of integer arg.
+ Avoid redundant call to gtk_scrolled_window_get_vadjustment.
+ Simplify. Use double, not float.
+ (Fxwidget_info, Fxwidget_view_info): Simplify by using CALLN.
+ (valid_xwidget_spec_p): Simplify.
+ (xwidget_spec_value): Omit unused arg FOUND. All callers changed.
+ * src/xwidget.h: Include lisp.h first, so that includers do
+ not need to worry about doing that before including this file.
+ Make this .h file safe to include even on non-HAVE_XWIDGETS
+ configurations, to simplify the includers.
+ (x_draw_xwidget_glyph_string, syms_of_xwidget, valid_xwidget_spec_p)
+ (xwidget_end_redisplay, lookup_xwidget)
+ (xwidget_view_delete_all_in_window, kill_buffer_xwidgets):
+ Now a no-op if !HAVE_XWIDGETS, to simplify callers.
+ (struct glyph_matrix, struct glyph_string, struct xwidget)
+ (struct xwidget_view, struct window):
+ New forward or incomplete decls, so that includers need not
+ assume the corresponding .h files are already included, or that
+ HAVE_XWIDGETS is defined.
+ (struct xwidget_type, xwidget_from_id): Remove; unused.
-2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+2016-01-22 John Wiegley <johnw@newartisans.com>
- Don't join erc channels doubly
+ Further corrections to the pcase docstring
- * lisp/erc/erc-join.el (erc-autojoin-channels): Don't join channels
- more than once (if you have several nicks) (bug#20695).
+2016-01-22 Eli Zaretskii <eliz@gnu.org>
-2015-12-27 Eli Zaretskii <eliz@gnu.org>
+ * doc/emacs/anti.texi (Antinews): Rewrite for Emacs 25.
- Avoid leaving "ghost" of mouse pointer on MS-Windows
+2016-01-21 Stephen Leake <stephen_leake@stephe-leake.org>
- * src/w32term.c (frame_set_mouse_pixel_position):
- * src/w32fns.c (Fw32_mouse_absolute_pixel_position): Momentarily
- disable "mouse trails" when moving the mouse pointer. (Bug#22247)
- * src/w32term.c (frame_set_mouse_pixel_position): Include
- w32common.h.
+ In xref-collect-references, force backends to respect the 'dir' arg
-2015-12-27 Krzysztof Jurewicz <krzysztof.jurewicz@gmail.com> (tiny change)
+ * lisp/progmodes/xref.el (xref-collect-references): Force symref backends
+ to use `default-directory'.
- Fix auth source lookups from erc with port numbers
+2016-01-21 John Wiegley <johnw@newartisans.com>
- * lisp/erc/erc.el (erc-open): `auth-source' wants strings, not port
- numbers (bug#20541).
+ Minor correction to pcase docstring
-2015-12-27 Fran Litterio <flitterio@gmail.com>
+2016-01-21 John Wiegley <johnw@newartisans.com>
- Run erc-kill-channel-hook always on exit
+ Write a new docstring for the pcase macro
- * lisp/erc/erc.el (erc-kill-buffer-function): Run erc-kill-channel-hook
- when erc-kill-queries-on-quit is set (bug#21187).
+ * lisp/emacs-lisp/pcase.el (pcase): Write a new docstring.
-2015-12-27 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-21 Stephen Berman <stephen.berman@gmx.net>
- Spelling fix
+ Avoid byte-compiler warning in todo-mode (bug#21953)
- * test/automated/url-parse-tests.el:
- (url-generic-parse-url/same-document-reference):
- Rename from url-generic-parse-url/same-decument-reference.
+ * todo-mode.el (todo-convert-legacy-files): Add limit argument
+ to looking-back to comply with advertised-calling-convention.
-2015-12-27 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-21 Stephen Berman <stephen.berman@gmx.net>
- Reword initial *scratch* for brevity, appearance
+ Fix desktop support in todo-mode and doc-view (bug#22377)
- * lisp/startup.el (initial-scratch-message):
- Reword to avoid apostrophes, and to make it shorter.
- See the thread starting in:
- http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01241.html
+ * lisp/calendar/todo-mode.el (todo-restore-desktop-buffer):
+ * lisp/doc-view.el (doc-view-restore-desktop-buffer): Return current buffer.
-2015-12-26 Leo Liu <sdl.web@gmail.com>
+ * lisp/calendar/todo-mode.el (todo-modes-set-2):
+ * lisp/doc-view.el (doc-view-mode): Set desktop-save-buffer unconditionally.
- Add ert-deftest to lisp-mode.el
+2016-01-20 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression,
- lisp-el-font-lock-keywords-1): Add ert-deftest.
+ No need to configure gobject-introspection
-2015-12-26 Lars Ingebrigtsen <larsi@gnus.org>
+ It wasn’t needed for the recently-installed xwidget_mvp code; see:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01154.html
+ * configure.ac (DOES_XWIDGETS_USE_GIR, GIR_REQUIRED, GIR_MODULES):
+ (HAVE_GIR):
+ * src/Makefile.in (GIR_LIBS, GIR_CFLAGS):
+ Remove. All uses removed.
+ * configure.ac (emacs_config_features): Don’t worry about GIR.
- Mark imap changes as not needing doc changes
+2016-01-20 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/net/imap.el (imap-ssl-open): Remove
+ Don’t export C symbols not used elsewhere
-2015-12-26 Lars Ingebrigtsen <larsi@gnus.org>
+ These were recently added, mostly as part of xwidget code.
+ * src/emacsgtkfixed.c (emacs_fixed_get_type): Now static.
+ (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
+ Now static functions here, not macros in emacsgtkfixed.h.
+ * src/emacsgtkfixed.h (EMACS_TYPE_FIXED):
+ Remove. All uses replaced by definiens.
+ (EMACS_FIXED, EMACS_FIXED_GET_CLASS):
+ Remove; these are now static functions in emacsgtkfixed.c.
+ (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS):
+ Remove; unused.
+ (emacs_fixed_get_type): Remove decl; no longer extern.
+ * src/xwidget.c (offscreen_damage_event)
+ (webkit_mime_type_policy_typedecision_requested_cb)
+ (webkit_new_window_policy_decision_requested_cb)
+ (webkit_navigation_policy_decision_requested_cb)
+ (xwidget_spec_value, xwidget_view_lookup)
+ (xwidget_start_redisplay, xwidget_touch):
+ Now static.
+ * src/xwidget.h (xwidget_start_redisplay, xwidget_touch):
+ Remove decls.
- Use built-in encryption in imap.el
+2016-01-20 Dmitry Gutov <dgutov@yandex.ru>
- * lisp/net/imap.el (imap-ssl-program): Remove (bug#21134).
- (imap-starttls-open): Use open-network-stream instead of starttls.el.
- (imap-tls-open): Use open-network-stream instead of tls.el.
+ Support squiggly heredocs in ruby-mode
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ * lisp/progmodes/ruby-mode.el (ruby-here-doc-beg-re):
+ Support squiggly heredocs added in Ruby 2.3.
- Don't try using /bin/sh in artist.el on MS-Windows
+ * test/indent/ruby.rb: Add squiggly example.
- * lisp/textmodes/artist.el (artist-figlet-get-font-list-windows):
- New function.
- (artist-figlet-choose-font): Use it on MS-Windows and MS-DOS.
- (Bug#20167)
+2016-01-20 Glenn Morris <rgm@gnu.org>
-2015-12-26 Wolfgang Jenkner <wjenkner@inode.at>
+ * configure.ac (emacs_config_features): Remove WEBKIT.
- Always define gmalloc etc. in src/gmalloc.c
+2016-01-20 Paul Eggert <eggert@cs.ucla.edu>
- This is a work-around to prevent the compiler from using semantic
- knowledge about malloc for optimization purposes. E.g., gcc 5.2
- with -O2 replaces most of calloc's definition by a call to calloc;
- see Bug#22085.
- * src/gmalloc.c [!HYBRID_MALLOC] (malloc, realloc, calloc)
- (aligned_alloc, free): Do not undef. Instead, define these as
- functions (perhaps renamed to gmalloc etc.) in terms of gmalloc etc.
+ Port to platforms with gtk3 but not webkitgtk3
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ I ran into this problem on my Fedora 23 installation;
+ Emacs configured but did not build when --with-xwidgets was specified.
+ * configure.ac (HAVE_WEBKIT, HAVE_GIR): Omit unnecessary initializations.
+ (DOES_XWIDGETS_USE_GIR): New var.
+ If --with-xwidgets is specified, report an error if not
+ doable, to be consistent with the other --with options.
+ Require webkitgtk3 to use Xwidgets, as the Xwidgets code does
+ not work at all without webkitgtk3. Simplify use of
+ EMACS_CHECK_MODULES. Output message about gobject
+ introspection only if xwidgets are used.
+ * etc/NEWS: Users need webkitgtk3, not merely webkit.
+ * src/xwidget.c (syms_of_xwidget): Don’t worry about HAVE_WEBKIT_OSR,
+ since this file is no longer compiled if webkitgtk3 is not available.
- Fix documentation of browse-url browser-related functions
+2016-01-20 Eli Zaretskii <eliz@gnu.org>
- * lisp/net/browse-url.el (browse-url)
- (browse-url-default-browser, browse-url-default-windows-browser)
- (browse-url-default-macosx-browser, browse-url-chromium)
- (browse-url-kde, browse-url-text-xterm): Clarify the usage of ARGS
- and NEW-WINDOW arguments in these functions. (Bug#19421)
+ Fix doc string of 'isearch-search-fun-function'
-2015-12-26 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/isearch.el (isearch-search-fun-function)
+ (isearch-search-string): Doc fixes. (Bug#22411)
- Propagate Bug#14412 fix to backtrace_eval_unrewind
+2016-01-19 Stefan Monnier <monnier@iro.umontreal.ca>
- * src/eval.c (unbind_to): Redo so that the FALLTHROUGH!! comment
- becomes accurate again. This shouldn’t affect behavior.
- (backtrace_eval_unrewind): Apply the recent unbind_to fix here, too.
+ * lisp/xwidget.el: Nitpicks
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ * lisp/xwidget.el (xwidget-log, xwidget-webkit-callback):
+ Use with-current-buffer rather than save-excursion + set-buffer.
- Don't produce non-ASCII characters in *scratch*
+2016-01-19 Glenn Morris <rgm@gnu.org>
- * lisp/startup.el (initial-scratch-message): Quote apostrophes to
- avoid producing non-ASCII characters in the *scratch* buffer's
- commentary.
+ Don't hard-code 1 as point-min.
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ * lisp/image-mode.el (image-display-size):
+ * lisp/xwidget.el (xwidget-webkit-last-session)
+ (xwidget-webkit-current-session): Don't hard-code 1 as point-min.
- Document changes in 'compare-windows'
+2016-01-19 Glenn Morris <rgm@gnu.org>
- * lisp/vc/compare-w.el (compare-windows-removed)
- (compare-windows-added): Doc fix.
+ * lisp/xwidget.el: Add declarations to silence non-xwidget compilation.
- * doc/emacs/files.texi (Comparing Files): Document the changes in
- window selection by 'compare-windows'.
+2016-01-19 Glenn Morris <rgm@gnu.org>
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ Trivial doc copyedits.
- Document 'vc-annotate-background-mode'
+ * src/xwidget.c (Fmake_xwidget, Fget_buffer_xwidgets)
+ (Fxwidget_webkit_get_title, Fxwidget_resize)
+ (Fxwidget_set_adjustment, Fxwidgetp, Fxwidget_view_p)
+ (Fxwidget_info, Fxwidget_view_lookup)
+ (Fset_xwidget_query_on_exit_flag): Trivial doc copyedits.
- * doc/emacs/maintaining.texi (Old Revisions): Document
- 'vc-annotate-background-mode'.
+2016-01-19 Glenn Morris <rgm@gnu.org>
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ Avoid advising image-display-size for xwidgets.
- Document 'vc-region-history'
+ * lisp/xwidget.el (xwidget-image-display-size): Remove.
+ (image-display-size): Remove advice.
+ * lisp/image-mode.el (xwidget-info, xwidget-at): Declare.
+ (image-display-size): Incorporate xwidget code directly.
- * doc/emacs/maintaining.texi (VC Change Log): Document
- 'vc-region-history'.
+2016-01-19 Glenn Morris <rgm@gnu.org>
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ Avoid breaking non-xwidget Emacs that happen to load xwidget.el.
- Improve documentation of 'vc-push'
+ * lisp/xwidget.el (window-configuration-change-hook)
+ (kill-buffer-query-functions): Only modify these hooks if
+ compiled with xwidget support.
- * doc/emacs/maintaining.texi (Pulling / Pushing): Expand and
- improve the documentation of 'vc-push'.
+2016-01-19 Glenn Morris <rgm@gnu.org>
- * lisp/vc/vc.el (vc-pull, vc-push): Doc fix.
+ * lisp/xwidget.el (xwidget-webkit-scroll-behaviour): Fix custom spec.
-2015-12-26 Alain Schneble <a.s@realize.ch>
+ * configure.ac (WEBKIT, GIR, CAIRO): Use EMACS_CHECK_MODULES, not PKG_.
- Include the tests for the URL parsing fixes
+ * configure.ac (emacs_config_features): Add XWIDGETS, WEBKIT, GIR.
-2015-12-26 Alain Schneble <a.s@realize.ch>
+ * configure.ac (HAVE_WEBKIT_OSR): Remove broken, duplicated gtk3 test.
- Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
+2016-01-19 Katsumi Yamaoka <yamaoka@jpl.org>
- * test/automated/url-parse-tests.el: Add tests covering url-generic-parse-url.
- * test/automated/url-expand-tests.el: Add tests covering url-expand-file-name.
- * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
- information in URL-struct.
- * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
- path and query into nil path and query, respectively.
- * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
- empty path into an absolute ("/") path.
- * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
- fragment-only URIs. Do not just return them unchanged.
- * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
- reference URI should not drop the last segment.
+ * lisp/gnus/nnir.el (nnir-request-update-mark):
+ Default to the original mark.
+ cf. <http://thread.gmane.org/gmane.emacs.gnus.general/86583>
+ and <http://thread.gmane.org/gmane.emacs.gnus.general/86640>
- Backport:
+2016-01-19 Glenn Morris <rgm@gnu.org>
- (cherry picked from commit b792ecea1715e080ad8e232d3d154b8a25d2edfb)
+ * lisp/xwidget.el (report-xwidget-bug): Remove.
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ (top-level): No longer require reporter.
- Document 'url-user-agent'.
+2016-01-19 Joakim Verona <joakim@verona.se>
+ Grégoire Jadi <daimrod@gmail.com>
- * lisp/url/url-http.el (url-user-agent): Move from here...
- * lisp/url/url-vars.el (url-user-agent): ...to here. This is to
- keep all the URL defcustoms in one place, and also have it defined
- whenever the URL library is loaded.
+ Support for the new Xwidget feature.
- * doc/misc/url.texi (Customization): Document 'url-user-agent'.
+ * configure.ac:
+ (HAVE_XWIDGETS, WIDGET_OBJ, EMACS_CONFIG_FEATURES):
+ * xterm.c (x_draw_glyph_string, x_draw_bar_cursor):
+ * xdisp.c:
+ (handle_display_spec, handle_single_display_spec, push_it)
+ (pop_it, set_iterator_to_next, dump_glyph)
+ (calc_pixel_width_or_height, fill_xwidget_glyph_string)
+ (BUILD_XWIDGET_GLYPH_STRING, BUILD_GLYPH_STRINGS)
+ (produce_xwidget_glyph, x_produce_glyphs)
+ (get_window_cursor_type):
+ * window.c (Fdelete_window_internal):
+ * termhooks.h (e):
+ * print.c (print_object):
+ * lisp.h (ptrdiff_t):
+ * keyboard.c (kbd_buffer_get_event, make_lispy_event)
+ (syms_of_keyboard):
+ * emacs.c (main):
+ * dispnew.c (update_window, scrolling_window):
+ * dispextern.h (g, i):
+ * Makefile.in (XWIDGETS_OBJ, WEBKIT_CFLAGS, WEBKIT_LIBS)
+ (GIR_LIBS, ALL_CFLAGS, base_obj, LIBES):
+ * keyboard.c (kbd_buffer_get_event):
+ * emacsgtkfixed.c (emacs_fixed_gtk_widget_size_allocate)
+ (emacs_fixed_class_init): Add case for an xwidget view.
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+ * xwidget.c, xwidget.h, xwidget.el: New files for xwidgets
- Document protocols supported by URL library via Tramp
- * doc/misc/url.texi (Tramp): New node, describes the URL schemes
- supported via Tramp.
- (Supported URL Types, file/ftp, rlogin/telnet/tn3270): Mention
- Tramp.
+ Various improvements to the Xwidget feature.
+ * xwidgets.c:
+ * emacsgtkfixed.c:
+ * xwidget.el:
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+2016-01-19 Eli Zaretskii <eliz@gnu.org>
- Document changes in Shell-script mode
+ Improve documentation of 'alist-get'
- * lisp/progmodes/sh-script.el (sh-mode, sh-set-shell): Document
- the 'sh-shell' file-local variable.
- (top level): Add an auto-load form to avoid byte-compiler warning
- about 'comint-send-string'.
+ * doc/lispref/variables.texi (Setting Generalized Variables): Add
+ 'alist-get' to the list of functions that can appear in PLACE
+ argument of 'setf'.
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
+2016-01-19 Eli Zaretskii <eliz@gnu.org>
- Fix documentation of 'ses-define-local-printer'
+ Minor copyedits of doc/emacs/maintaining.texi
- * doc/misc/ses.texi (Printer functions): Fix whitespace between
- sentences and punctuation. Add an index entry for
- 'ses-define-local-printer'.
+ * doc/emacs/maintaining.texi (List Identifiers): More accurate
+ description of "C-M-i" wrt tags tables.
+ (Tags Tables): Move the definition of "tag" to a footnote.
-2015-12-26 Shakthi Kannan <shakthimaan@gmail.com>
+2016-01-19 Eli Zaretskii <eliz@gnu.org>
- Document 'ert-summarize-tests-batch-and-exit'
+ Unbreak the Cygwin-w32 build
- * doc/misc/ert.texi (Running Tests in Batch Mode): Document
- 'ert-summarize-tests-batch-and-exit'.
-
-2015-12-26 Eli Zaretskii <eliz@gnu.org>
-
- Avoid assertion violation in unbind_to
-
- * src/eval.c (unbind_to) <SPECPDL_LET>: Avoid assertion violation
- if we get here with an object that is not a symbol. (Bug#14412)
-
-2015-12-25 Andreas Schwab <schwab@linux-m68k.org>
-
- Don't treat /foo/bar:mumble as ange-ftp address
-
- * lisp/net/browse-url.el (browse-url-filename-alist): Match colons
- only in the first component. (bug#5362)
-
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
-
- Follow <meta> redirects in eww
-
- Merge conflict, but I think I resolved it.
-
- Follow meta refresh tags in eww
-
- * eww.el (eww-tag-meta): Follow meta refresh tags (bug#22234).
-
- Backport:
+ * src/w32fns.c (globals_of_w32fns): Move the initialization of
+ resetstkoflw into a part that isn't compiled on Cygwin.
+ (Bug#22403)
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+2016-01-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
- Allow http://user:pass@foo/ URLs again
+ * shr.el (shr-table-body): Allow tables to have text children.
- * lisp/url/url-auth.el (url-basic-auth): Allow explicit
- user/passwords in URLs (bug#19046).
+2016-01-19 Phillip Lord <phillip.lord@russet.org.uk>
- Backport:
+ Cope with multiple overlapping faces.
- (cherry picked from commit b563715a2db265517d5a77f165a42afa1e233fdd)
+ * lisp/htmlfontify.el (hfy-face-to-style-i): Treat inheritance right to
+ left.
+ (hfy-face-resolve-face): Handle font specification as well as font
+ name. Documentation update. (Bug#21990)
-2015-12-25 Samer Masterson <samer@samertm.com>
+2016-01-18 Paul Eggert <eggert@cs.ucla.edu>
- Autoload url-insert-buffer-contents
+ Fix spurious escapes in describe-input-method
- * lisp/url/url-handlers.el: Add autoload cookie so that
- `package-list-packages' doesn't bug out (bug#21927) (tiny change)
+ Problem reported by Vincent Belaïche (Bug#22309).
+ * lisp/international/mule-cmds.el (describe-language-environment):
+ * lisp/international/quail.el (quail-help):
+ Apply substitute-command-keys to doc strings before displaying them.
- Backport:
+2016-01-30 Nicolas Petton <nicolas@petton.fr>
- (cherry picked from commit 7a7b5b492ff9929eecd90c4564db6fbf3b192323)
+ Bump version to 25.0.90
-2015-12-25 Eli Zaretskii <eliz@gnu.org>
+ * README:
+ * configure.ac:
+ * msdos/sed2v2.inp: Bump version to 25.0.90.
- Make sure *scratch* etc. use forward slashes in its default-directory
+2016-01-30 Nicolas Petton <nicolas@petton.fr>
- * lisp/startup.el (normal-top-level): On MS-Windows, convert
- backslashes to forward slashes while decoding default-directory
- of the initially-created buffers.
+ * etc/AUTHORS: Update the AUTHORS file
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+2016-01-30 Nicolas Petton <nicolas@petton.fr>
- More eww file name coding fixes
+ authors.el updates
- * eww.el (eww-decode-url-file-name): Use the base coding
- system to check for encodability.
+ * admin/authors.el (authors-renamed-files-alist): Additions.
- Backport:
+2016-01-30 Nicolas Petton <nicolas@petton.fr>
- (cherry picked from commit a8627008abe4ab339df19b417776da28b3ce0fc7)
+ Make it possible to run make change-history on emacs-25
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * Makefile.in: Check if the current branch is emacs-25 instead of
+ master.
- Always save eww history
+2016-01-30 lu4nx <lx@shellcodes.org>
- * eww.el (eww-setup-buffer): Always save history, even when
- called from outside the eww buffer (bug#19638).
+ Support Go language in 'etags'
- Backport:
+ * lib-src/etags.c <Ruby_help>: Fix documentation of Ruby tags.
+ <Go_help>: New help.
+ <Go_suffixes>: New variable.
+ (Go_functions): New function.
+ <lang_names>: Add entry for Go. (Bug#22370)
- (cherry picked from commit 2a0f18d9b6ce0ccce3d9c4a4a3b5743bae71b41e)
+ * doc/emacs/maintaining.texi (Tag Syntax): Document Go support.
+ * doc/man/etags.1: Mention Go support.
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * etc/NEWS: Mention Go support.
- Default web pages to right-to-left
+ * test/etags/go-src/test.go:
+ * test/etags/go-src/test1.go: New test files.
+ * test/etags/Makefile (GOSRC): New variable.
+ (SRCS): Add $(GOSRC).
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to addition of Go tests.
- * eww.el (eww-mode): Most web pages are left-to-right, so make
- that the default (bug#19801).
+2016-01-30 Eli Zaretskii <eliz@gnu.org>
- * shr.el (shr-tag-html): Respect "dir" attributes
- (left-to-right, right-to-left).
+ Improve Ruby support in 'etags'
- Backport:
+ * lib-src/etags.c (Ruby_functions): Tag constants. Don't tag
+ singleton classes. Remove class qualifiers from tags generated
+ for method and constant names. (Bug#22241)
- (cherry picked from commit 9e089ec8a380ec3758fcf1564c5f86dc92c68c2a)
+ * doc/emacs/maintaining.texi (Tag Syntax): Mention that constants
+ are tagged by etags in Ruby.
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * etc/NEWS: Mention that constants are tagged by etags in Ruby.
- Make toggling checkboxes work again
+ * test/etags/ruby-src/test1.ruby: Add more tests.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to the changes in etags and in Ruby
+ tests.
- * eww.el (eww-update-field): Make toggling checkboxes work
- again (bug#21881).
+2016-01-30 Eli Zaretskii <eliz@gnu.org>
- Backport:
+ Adjust etags test results to changes in copyright years
- (cherry picked from commit 5e56f606952e5e81b4d3a93ea70e791b74b33041)
+ * test/etags/CTAGS.good:
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6: Adjust to shift in characters and
+ in line numbers.
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+2016-01-30 Andreas Schwab <schwab@linux-m68k.org>
- Don't store cookies with empty names
+ Revert "Re-enable checks in member, memql, delete to complain about non-lists"
- * lisp/url/url-cookie.el (url-cookie-store): Refuse to store
- cookies with empty names (bug#21936).
+ This reverts commit f524e8b7f12d9b5a8b92084e5385429fe7b085b9.
- Backport:
+2016-01-30 Nicolas Petton <nicolas@petton.fr>
- (cherry picked from commit 9f0fd7cb1aec3eb9e2e0f7b8854c30870286d96c)
+ Make it possible to run make change-history on emacs-25
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * Makefile.in: Check if the current branch is emacs-25 instead of
+ master.
- Stop rendering HTML before specdlr exhaustion
+2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
- Fixes: 22117
+ Don't fiddle with DEFAULT
- * shr.el (shr-descend): Stop rendering before we run out of
- specpdl room (bug#22117).
+ * lisp/progmodes/project.el (project--completing-read-strict):
+ Don't change DEFAULT, whether is has any matches in
+ COLLECTION, or not.
- Backport:
+2016-01-30 Eli Zaretskii <eliz@gnu.org>
- (cherry picked from commit 248da292fe46224b0b5a79b632c89cf4de2c2081)
+ Document xwidget commands and functions
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * doc/lispref/display.texi (Xwidgets): New section, describes some
+ of the xwidget primitives.
+ * doc/lispref/display.texi (Display): Update the chapter menu.
+ * doc/emacs/misc.texi (Embedded WebKit Widgets): New section.
+ * doc/emacs/emacs.texi (Top): Update the master menu to include
+ the xwidget node.
- Use cl-reduce, not reduce.
+2016-01-30 Lars Ingebrigtsen <larsi@gnus.org>
- Backport:
+ Build fix for shr.el
- (cherry picked from commit fe4606f93b91ff3d046aee0cf21ecc277af7a786)
+ * shr.el (seq): Require.
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
- Allow several <tbody> tags in shr
+ Improve project-find-file yet again!
- * shr.el (shr-table-body): New function to find the real body
- of a table.
- (shr-tag-table): Use it to render several <tbody> tags in a
- table (bug#22170).
+ * lisp/progmodes/project.el (project--completing-read-strict):
+ New function.
+ (project-find-file-in): Use it.
+ (project-file-completion-table): Move the default
+ implementation inside the cl-defgeneric form.
+ (http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01720.html)
- Backport:
+2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
- (cherry picked from commit cdaf33029d6620073833876d76056045ecfbc7c4)
+ Don't pass DIR to 'hg status'
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/vc/vc-hg.el (vc-hg-dir-status-files):
+ Don't pass DIR to 'hg status' (bug#22481).
- Make prettier unique file names in eww
+2016-01-30 Stephen Leake <stephen_leake@stephe-leake.org>
- (eww-make-unique-file-name): Make unique file names by making
- files like foo(2).jpg instead of foo(1)(2).jpg.
+ Fix typo in previous commits
- Backport:
+ * lisp/progmodes/project.el (project-find-file-in):
+ * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): Fix typo in previous
+ commit.
- (cherry picked from commit edfdd0a6cbdfa9e5e4bd0553e2b489401ca39266)
+2016-01-30 Stephen Leake <stephen_leake@stephe-leake.org>
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ Improve project-find-file
- Decode hex-encoded URLs before using them as file names
+ * lisp/progmodes/project.el (project-file-completion-table): New.
+ (project-find-file, project-or-external-find-file): Default to filename
+ at point.
+ (project-file-completion-table): New, split out from
+ project--find-file-in.
+ (project-find-file-in): Renamed from project--find-file-in, use
+ project-file-completion-table.
- * eww.el (eww-decode-url-file-name): New function.
- (eww-download-callback): Use it to decode file names before
- saving them.
+ * lisp/progmodes/xref.el (ede-minor-mode): New declaration.
+ (xref--find-ignores-arguments): Add doc string.
- Backport:
+2016-01-30 Stephen Leake <stephen_leake@stephe-leake.org>
- (cherry picked from commit af22a010d87516c2a646572fb27512c03057784f)
+ Implement vc-mtn-find-ignore-file, fix some doc strings
-2015-12-25 Ashish SHUKLA <ashish.is@lostca.se>
+ * lisp/cedet/cedet-global.el (cedet-gnu-global-root): Improve doc string.
- Add FreeBSD cert bundle
+ * lisp/cedet/ede/locate.el (initialize-instance): Improve doc string.
- * doc/misc/emacs-gnutls.texi (Help For Users): Document
- FreeBSD bundle.
+ * lisp/vc/vc-git.el (vc-git-find-ignore-file): Fix doc string.
- * lisp/net/gnutls.el (gnutls-trustfiles): Add FreeBSD cert bundle.
+ * lisp/vc/vc-mtn.el (vc-mtn-find-ignore-file): New function.
- Backport:
+2016-01-23 Michael Albinus <michael.albinus@gmx.de>
- (cherry picked from commit 60c0f1a18ad88d6dc1a8f4ee5d9d18940eaeb6f7)
+ Improve user name completion in Tramp
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/net/tramp.el (tramp-parse-passwd, tramp-parse-etc-group):
+ Call also "getent passwd" or "getent group", if possible.
+ (tramp-parse-putty): Cache the result.
- Ignore invalid SVG images
+2016-01-22 Michael Albinus <michael.albinus@gmx.de>
- * shr.el (shr-tag-svg): Ignore SVG images that have no width
- or height, because these can't be displayed by ImageMagick,
- anyway.
+ * etc/NEWS: Move kqueue entries to Emacs 25.1 sections.
- Backport:
+2016-01-20 Glenn Morris <rgm@gnu.org>
- (cherry picked from commit 821107d53c2e390240d25c036b99ebbf9b4a93b6)
+ Remove handling of non-string time-stamp formats, obsolete for 20 years.
-2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
+ * lisp/time-stamp.el (time-stamp-format): Doc fix.
+ (time-stamp-old-format-warn, time-stamp-fconcat): Remove.
+ (time-stamp-string): Ignore non-string formats.
- shr table rendering fix
+2016-01-20 Eli Zaretskii <eliz@gnu.org>
- * shr.el (shr-tag-table): Allow rendering body-less tables
- that have headers.
+ Anoter fix for problematic merge from emacs-25
- Backport:
+ * src/w32fns.c (globals_of_w32fns): Move initialization of
+ resetstkoflw to a non-Cygwin part.
- (cherry picked from commit b05471e42c17e02c56c87d7599ada0c124a5fe09)
+2016-01-20 Michael Albinus <michael.albinus@gmx.de>
-2015-12-25 Eli Zaretskii <eliz@gnu.org>
+ * test/Makefile.in (mostlyclean): Use ${LOGFILES}.
- Restore info about the build host in bug reports
+2016-01-20 Eli Zaretskii <eliz@gnu.org>
- * lisp/mail/emacsbug.el (report-emacs-bug): Report the system on
- which Emacs was built. This is important information for
- investigating bug reports reported by users who don't build their
- Emacs.
+ Fix MS-Windows build broken by a botched merge from emacs-25
-2015-12-25 Eli Zaretskii <eliz@gnu.org>
+ * src/w32.c (w32_crypto_hprov): New static variable.
+ (globals_of_w32): Initialize w32_crypto_hprov.
+ (w32_init_crypt_random, w32_init_random): New functions.
+ Include wincrypt.h.
+ * src/w32.h (w32_init_random): Add prototype.
- Fix bootstrap broken by changes related to OS X file-name encoding
+2016-01-20 Vincent Belaïche <vincentb1@users.sourceforge.net>
- * lisp/international/ucs-normalize.el (eval-when-compile): Make
- sure char-code-property-alist includes elements that allow access
- to 'decomposition' and 'canonical-combining-class' Unicode
- properties, as compiling ucs-normalize.el requires that.
- * lisp/loadup.el (featurep 'ns): Load ucs-normalize and ns-win
- only of charprop.el was already loaded.
+ Correct a whole bunch of bugs coming with renamed cell relocation.
- * src/Makefile.in ($(lispsource)/international/ucs-normalize.elc):
- New order-only dependency.
+ * lisp/ses.el (ses-localvars): rename variable
+ `ses--renamed-cell-symb-list' into `ses--in-killing-named-cell-list'
+ and adjust the comment about it.
+ (ses-plist-delq): new defun.
+ (ses--ses-buffer-list): new defvar.
+ (ses--unbind-cell-name): new defun.
+ (ses-relocate-symbol): Do not relocate symbol when it is a named cell.
+ (ses-relocate-formula): Undo change of
+ 2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net that was
+ preventing relocation for named cell --- now doing this is delegated
+ to function `ses-relocate-symbol'.
+ (ses-relocate-range): In docstring, undo change of
+ 2016-01-03T07:31:52Z!johnw@newartisans.com, `ses-range' must remain
+ lower case as it is not a variable.
+ (ses-relocate-all): Cell name relocation : 1) check that cell is a
+ renamed cell by testing `ses-cell' property to :ses-named, rather than
+ comparing name to corresponding standard name. Set rowcol of renamed
+ cell into the hashmap --- `ses-cell' property must not be used for
+ that as the same name can be used for different locations in different
+ SES sheets ; 2) use `local-variable-if-set-p' rather than `boundp' and
+ `local-variable-p' to check if cell name is already in use in this
+ sheet or needs initialization.
+ (ses-relocate-all): Cell value relocation : 1) like for name
+ relocation use the `ses-cell' property rather than comparing actual
+ name to corresponding standard name. 2) Correct bug introduced in
+ 2011-12-27T19:30:39Z!vincentb1@users.sourceforge.net, as the test was
+ made the other way round than the intention --- ie value relocation
+ was disabled for standard cell, not for renamed cell as was the
+ intention.
+ (ses-relocate-all): Add loop for unbinding deleted renamed cells
+ names.
+ (ses-killbuffer-hook): new defun.
+ (ses-mode): Add the ses--ses-buffer-list maintenance mechanism ---
+ kill buffer hook, plus pushing current buffer if new in list.
+ (ses-delete-row, ses-delete-column): Collect deleted renamed cells
+ into `ses--in-killing-named-cell-list'.
+ (ses-rename-cell): Remove update of variable
+ `ses--renamed-cell-symb-list', this variable is renamed to
+ `ses--in-killing-named-cell-list', and its setting is done in
+ functions `ses-delete-row' and , `ses-delete-column' now.
+ (ses-rename-cell): Make cell new name a buffer local variable.
+ (ses-rename-cell): Change correction of
+ 2015-12-30T23:10:37Z!vincentb1@users.sourceforge.net concerning
+ computation of the range over which `cursor-intangible' property was
+ to be updated. This correction was ok for non spilling cells, but not
+ for cells spilling over following blank cells. Simply use
+ `next-single-property-change' rather than computing the end column
+ from column widths.
-2015-12-25 Leo Liu <sdl.web@gmail.com>
+2016-01-19 John Wiegley <johnw@newartisans.com>
- * lisp/ido.el (ido-add-virtual-buffers-to-list): Use bookmark-get-filename.
+ Merge from origin/emacs-25
-2015-12-25 Michael Albinus <michael.albinus@gmx.de>
+ 3ae7934 ; * etc/NEWS: Mark entries that don't need further treatment.
+ 6165c36 * lisp/files.el (dir-locals--all-files): Respect absolute file-names
+ 2ffdf15 * lisp/help-fns.el (describe-variable): Fix a left-over parenthesis
+ 71ecd62 * lisp/dired-x.el (dired-omit-here-always): Use add-dir-local-variable
+ f0b82b3 * lisp/files.el (dir-locals--all-files): Use completion instead of wildcards
+ 86e4513 Fix incompatbilities with MS-Windows 2000 and older
+ 4e96521 Mention in PROBLEMS an issue with MS-Windows NT4
+ 15c23aa Ensure 8-byte aligned memory allocation on MS-Windows 9X
+ 39afa42 Fix tests for active region in hideif.el
+ 05df666 Fix interactive specs in some hideif.el commands
- Make tramp-test29-vc-registered more robust
+2016-01-19 John Wiegley <johnw@newartisans.com>
- * test/automated/tramp-tests.el (tramp-test29-vc-registered):
- Move `bzr' case down. Skip test when `vc-create-repo' fails.
- Remove instrumentation.
+ -
-2015-12-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2016-01-19 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/term/x-win.el (x-gtk-stock-map): Fix typo.
+ Avoid stdio in SIGINT handler
-2015-12-24 Katsumi Yamaoka <yamaoka@jpl.org>
+ * admin/merge-gnulib (GNULIB_MODULES): Add ignore-value.
+ * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
+ * lib/ignore-value.h: New file, from gnulib.
+ * src/keyboard.c: Include it.
+ (write_stdout, read_stdin): New functions.
+ (handle_interrupt): Use them instead of printf and getchar,
+ and avoid fflush when handling signals.
- Fix `gnus-union' so as to behave like `cl-union'
+2016-01-19 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
- * lisp/gnus/gnus-group.el (gnus-group-prepare-flat):
- Make gnus-union use `equal' to compare items in lists.
+ Refactor mml-smime.el, mml1991.el, mml2015.el
- * lisp/gnus/gnus-util.el (gnus-union):
- Make it behave like cl-union partially.
+ (Maybe this is the last merge from Gnus git to Emacs git)
-2015-12-23 Paul Eggert <eggert@cs.ucla.edu>
+ Cf. discussion on ding mailing list, messages in
+ <http://thread.gmane.org/gmane.emacs.gnus.general/86228>.
+ Common code from the three files mml-smime.el, mml1991.el, and
+ mml2015.el is moved to mml-sec.el. Auxiliary functions are added
+ to gnus-util.el.
- Fix dired.c typo with ptrdiff_t vs Lisp_Object
+ The code is supported by test cases with necessary test keys.
- * src/dired.c (file_name_completion): Don't assume Lisp_Object is
- an integer type, fixing a problem introduced in the recent fix for
- Bug#22169.
+ Documentation in message.texi is updated.
-2015-12-23 Eli Zaretskii <eliz@gnu.org>
+ * doc/misc/message.texi (Security, Using S/MIME):
+ Update for refactoring mml-smime.el, mml1991.el, mml2015.el.
+ (Using OpenPGP): Rename from "Using PGP/MIME"; update contents.
+ (Passphrase caching, Encrypt-to-self, Bcc Warning): New sections.
- Document default process sentinel more prominently
+ * lisp/gnus/gnus-util.el (gnus-test-list, gnus-subsetp, gnus-setdiff):
+ New functions.
- * doc/lispref/processes.texi (Asynchronous Processes): Mention the
- defaults for process filter and sentinel. Provide cross-references.
- (Process Information): Provide cross-references to where filters
- and sentinels are described.
- (Filter Functions): Add an index entry for "default filter".
- (Sentinels): Add a few status messages not documented previously.
- Resolve the "killed" confusion. Document and describe the default
- sentinel. (Bug#22220)
+ * lisp/gnus/mml-sec.el: Require gnus-util and epg.
+ (epa--select-keys): Autoload.
+ (mml-signencrypt-style-alist, mml-secure-cache-passphrase): Doc fix.
+ (mml-secure-openpgp-signers): New user option;
+ make mml1991-signers and mml2015-signers obsolete aliases to it.
+ (mml-secure-smime-signers): New user option;
+ make mml-smime-signers an obsolete alias to it.
+ (mml-secure-openpgp-encrypt-to-self): New user option;
+ make mml1991-encrypt-to-self and mml2015-encrypt-to-self obsolete
+ aliases to it.
+ (mml-secure-smime-encrypt-to-self): New user option;
+ make mml-smime-encrypt-to-self an obsolete alias to it.
+ (mml-secure-openpgp-sign-with-sender): New user option;
+ make mml2015-sign-with-sender an obsolete alias to it.
+ (mml-secure-smime-sign-with-sender): New user option;
+ make mml-smime-sign-with-sender an obsolete alias to it.
+ (mml-secure-openpgp-always-trust): New user option;
+ make mml2015-always-trust an obsolete alias to it.
+ (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
+ New user options.
+ (mml-secure-cust-usage-lookup, mml-secure-cust-fpr-lookup)
+ (mml-secure-cust-record-keys, mml-secure-cust-remove-keys)
+ (mml-secure-add-secret-key-id, mml-secure-clear-secret-key-id-list)
+ (mml-secure-cache-passphrase-p, mml-secure-cache-expiry-interval)
+ (mml-secure-passphrase-callback, mml-secure-check-user-id)
+ (mml-secure-secret-key-exists-p, mml-secure-check-sub-key)
+ (mml-secure-find-usable-keys, mml-secure-select-preferred-keys)
+ (mml-secure-fingerprint, mml-secure-filter-keys)
+ (mml-secure-normalize-cust-name, mml-secure-select-keys)
+ (mml-secure-select-keys-1, mml-secure-signer-names, mml-secure-signers)
+ (mml-secure-self-recipients, mml-secure-recipients)
+ (mml-secure-epg-encrypt, mml-secure-epg-sign): New functions.
-2015-12-23 Eli Zaretskii <eliz@gnu.org>
+ * lisp/gnus/mml-smime.el: Require epg;
+ refactor declaration and autoloading of epg functions.
+ (mml-smime-use): Doc fix.
+ (mml-smime-cache-passphrase, mml-smime-passphrase-cache-expiry):
+ Obsolete.
+ (mml-smime-get-dns-cert, mml-smime-get-ldap-cert):
+ Use format instead of gnus-format-message.
+ (mml-smime-epg-secret-key-id-list): Remove variable.
+ (mml-smime-epg-passphrase-callback, mml-smime-epg-find-usable-key)
+ (mml-smime-epg-find-usable-secret-key): Remove functions.
+ (mml-smime-epg-sign, mml-smime-epg-encrypt): Refactor.
- Fix file-name completion on OS X
+ * lisp/gnus/mml1991.el (mml1991-cache-passphrase)
+ (mml1991-passphrase-cache-expiry): Obsolete.
+ (mml1991-epg-secret-key-id-list): Remove variable.
+ (mml1991-epg-passphrase-callback, mml1991-epg-find-usable-key)
+ (mml1991-epg-find-usable-secret-key): Remove functions.
+ (mml1991-epg-sign, mml1991-epg-encrypt): Refactor.
- * src/dired.c (file_name_completion): Reject false matches due to
- file-name-coding-systems that decompose characters when encoding
- file names, by comparing decoded file names as well. (Bug#22169)
- (syms_of_dired) <Qdecomposed_characters>: New DEFSYM.
+ * lisp/gnus/mml2015.el (mml2015-cache-passphrase)
+ (mml2015-passphrase-cache-expiry): Obsolete.
+ (mml2015-epg-secret-key-id-list): Remove variable.
+ (mml2015-epg-passphrase-callback, mml2015-epg-check-user-id)
+ (mml2015-epg-check-sub-key, mml2015-epg-find-usable-key)
+ (mml2015-epg-find-usable-secret-key): Remove functions.
+ (mml2015-epg-decrypt, mml2015-epg-clear-decrypt, mml2015-epg-sign)
+ (mml2015-epg-encrypt): Refactor.
- * lisp/international/ucs-normalize.el (utf-8-hfs): Give it a
- non-nil 'decomposed-characters' property.
+2016-01-19 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-23 Anders Lindgren <andlind@gmail.com>
+ Merge from gnulib
- File-name completion of non-ASCII characters on OS X (bug#22169)
+ This mostly just updates copyright dates of gnulib files.
+ It also updates to the latest version of texinfo.tex.
- The coding system `utf-8-nfd', locally defined in ns-win.el,
- didn't provide a :pre-write-conversion method, causing file name
- completion of non-ASCII characters to fail. Solved by using the
- `utf-8-hfs' coding system provided by `ucs-normalize'.
+2016-01-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * lisp/loadup.el: Load international/ucs-normalize (when building
- for ns).
+ Move variables to inner loop, preparing for Mac port merge
- * lisp/term/ns-win.el (utf-8-nfd): Made `utf-8-nfd' as alias for
- `utf-8-hfs' and removed the old implementation. Set `utf-8-hfs'
- as the file name coding system.
+ * src/keyboard.c (command_loop_1): Move variables `cmd',
+ `keybuf', and `i' to inner loop.
- * src/nsfns.m (ns-convert-utf8-nfd-to-nfc): Removed.
+2016-01-19 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-23 Tom Tromey <tom@tromey.com>
+ Minor improvements to (random t) documentation
- Fix bug #18588 by making bug-reference-bug-regexp more lenient
+ * doc/lispref/numbers.texi (Random Numbers):
+ * src/fns.c (Frandom):
+ Omit unnecessary details about randomness fallback.
+ Say that it is a fallback.
- * lisp/progmodes/bug-reference.el (bug-reference-bug-regexp): Accept
- "bug NNNN". (Bug #18588)
+2016-01-19 Dmitry Gutov <dgutov@yandex.ru>
-2015-12-23 Tom Tromey <tom@tromey.com>
+ Rename methods in Ruby etags example file
- add some cl-* aliases to lisp-mode imenu
+ * test/etags/ruby-src/test.rb: Rename the example methods to
+ correspond to the common terminology used in Ruby.
+ * test/etags/CTAGS.good:
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6: Adjust accordingly.
- * (lisp-imenu-generic-expression): Add cl-define-compiler-macro,
- cl-defgeneric, and cl-defmethod.
+2016-01-18 Dmitry Gutov <dgutov@yandex.ru>
-2015-12-22 Tom Tromey <tom@tromey.com>
+ Propertize backtick in 'def `(abc)' as symbol constituent
- Make a variable buffer-local
+ * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
+ Propertize backtick in 'def `(abc)' as symbol constituent.
+ (ruby-syntax-propertize-function):
+ Rename to ruby-syntax-propertize.
- * lisp/generic-x.el (generic-rul-mode-setup-function): Make
- font-lock-syntax-table buffer-local. (Bug #21627)
+2016-01-18 Eli Zaretskii <eliz@gnu.org>
-2015-12-22 Eli Zaretskii <eliz@gnu.org>
+ Fix scrolling under scroll-preserve-screen-position on TTY
- Fix decoding of text in URLs retrieved by EWW
+ * src/window.c (window_scroll_line_based): When setting point to
+ preserve screen coordinates, don't let cursor enter either of the
+ two scroll margins. (Bug#22395)
- * lisp/net/eww.el (eww-render): Pass 'charset' to
- 'eww-display-raw'. Use the value of 'last-coding-system-used', if
- non-nil, to set 'buffer-file-coding-system' of the buffer where we
- show the URL.
- (eww-display-html, eww-display-raw): Decode the text correctly,
- using the charset found in the headers, and defaulting to UTF-8.
- If the user told us to use a specific encoding, override the
- charset from the headers. (Bug#22222)
+2016-01-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
-2015-12-22 Alan Mackenzie <acm@muc.de>
+ Fix shr table rendering of nested tables
- Fix a coding error in c-forward-<>-arglist-recur. Fixes bug#22156
+ * shr.el (shr-table-body): Don't include all tbodies in nested
+ tables in the levels above.
- * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): Remove unused
- variable `tmp'.
- After a failed search for a matching ">", restore point before continuing.
+2016-01-18 Dmitry Gutov <dgutov@yandex.ru>
-2015-12-22 Michael Albinus <michael.albinus@gmx.de>
+ * lisp/progmodes/project.el (project--read-regexp): Quote the identifier.
- Instrument Tramp tests
+2016-01-18 Dmitry Gutov <dgutov@yandex.ru>
- * test/automated/tramp-tests.el (tramp-test29-vc-registered)
- (tramp--test-utf8): Instrument tests.
+ Add xref-based replacements for Dired search commands
-2015-12-22 Martin Rudalics <rudalics@gmx.at>
+ * lisp/dired-aux.el (dired-do-find-regexp)
+ (dired-do-find-regexp-and-replace): New commands.
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00864.html
- Fix `display-buffer' call in `display-message-or-buffer' (Bug#22221)
+ * lisp/dired.el (dired-mode-map): Change bindings for `A' and
+ `Q' to the new commands.
- * lisp/simple.el (display-message-or-buffer): Call
- `display-buffer' with ACTION instead of NOT-THIS-WINDOW
- (Bug#22221).
+ * lisp/progmodes/xref.el (xref-query-replace)
+ (xref-collect-matches): Add progress reporters.
+ (xref--find-ignores-arguments): Return nil for zero ignores.
+ (xref--show-xrefs): Add an optional argument.
+ (xref-collect-matches): Drop the assert. 'find' accepts a
+ regular file in place of directory argument, too.
-2015-12-22 Juri Linkov <juri@linkov.net>
+2016-01-18 Alan Mackenzie <acm@muc.de>
- * lisp/saveplace.el (toggle-save-place, save-place-to-alist)
+ * doc/lispref/frames.texi (Position Parameters): Say they don't exist on TTYs.
- (save-places-to-alist, save-place-dired-hook):
- Check for dired-subdir-alist. (Bug#19851)
+2016-01-18 Eli Zaretskii <eliz@gnu.org>
-2015-12-21 Paul Eggert <eggert@cs.ucla.edu>
+ Improve user documentation of Xref
- Add FIXME comment re stack overflow and modules
+ * doc/emacs/maintaining.texi (Xref, Find Identifiers)
+ (Looking Up Identifiers, Identifier Search, List Identifiers):
+ Adjudicate comments by Dmitry Gutov <dgutov@yandex.ru>. See
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00650.html
+ for the details.
-2015-12-21 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-18 Eli Zaretskii <eliz@gnu.org>
- Revert some recent emacs-module commentary
+ Fix scrolling under scroll-preserve-screen-position and margins
- Most of the recently-added commentary was incorrect, due to the
- possibility of stack overflow.
+ * src/window.c (window_scroll_pixel_based): When setting point to
+ preserve screen coordinates, don't let cursor enter either of the
+ two scroll margins. Fix incorrect usage of
+ WINDOW_WANTS_HEADER_LINE_P and use WINDOW_HEADER_LINE_HEIGHT
+ instead of CURRENT_HEADER_LINE_HEIGHT. (Bug#22395)
-2015-12-21 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-18 Eli Zaretskii <eliz@gnu.org>
- Spelling fix: prefer "cooperate" to "co-operate"
+ Unbreak the MS-Windows build
-2015-12-21 Paul Eggert <eggert@cs.ucla.edu>
+ * src/sysdep.c (emacs_gnutls_global_init, gnutls_rnd): Disable for
+ WINDOWSNT, to avoid link failure. (Bug#22202)
- Port undo fixes to -fno-common
+2016-01-18 Alan Mackenzie <acm@muc.de>
- Port recent fix for Bug#21968 to platforms like 'gcc -fno-common'.
- * src/keyboard.c, src/keyboard.h (point_before_last_command_or_undo)
- (buffer_before_last_command_or_undo):
- Declare in keyboard.h, and define in keyboard.c,
- instead of assuming the traditional Unix relaxed ref-def linkage.
+ Desktop: protect users against inadvertant upgrading of desktop file.
-2015-12-20 Philipp Stephani <phst@google.com>
+ An upgraded (version 208) desktop file cannot be read in Emacs < 25.
- Improve commentary for emacs-module.c
+ * etc/NEWS: Add an entry about upgrading a desktop file.
- * src/lisp.h: Document emacs-module.c assumptions about EQ and NILP.
- * src/emacs-module.c (module_non_local_exit_get): Document that we
- cannot use the current implementation.
- (module_is_not_nil, module_eq): Document assumptions about EQ and
- NILP.
+ * lisp/desktop.el (desktop-file-version): Amend doc string.
+ (desktop-native-file-version, desktop-io-file-version): new variables.
+ (desktop-clear): Set desktop-io-file-version to nil.
+ (desktop-buffer-info): make the presence of the last item on the list
+ conditional on (>= desktop-io-file-version 208).
+ (desktop-save): Add extra parameter VERSION to take user's C-u or C-u C-u.
+ Amend the doc string. Add code to determine the output file version.
+ (desktop-create-buffer): Set desktop-io-file-version to the input file's
+ version.
-2015-12-20 Michael Albinus <michael.albinus@gmx.de>
+2016-01-17 Paul Eggert <eggert@cs.ucla.edu>
- Suppress test on Mac OS X
+ Initialize GnuTLS before calling gnutls_rnd
- * test/automated/tramp-tests.el (tramp--test-darwin-p): New defun.
- (tramp--test-utf8): Use it.
+ * src/gnutls.c (emacs_gnutls_global_init): Now extern.
+ Don’t set gnutls_global_initialized if gnutls_global_init fails.
+ * src/sysdep.c: Include "gnutls.h", and <gnutls/crypto.h>
+ if 2.12 or later, which has gnutls_rnd.
+ (emacs_gnutls_global_init, gnutls_rnd): New fallback
+ placeholder macros if before 2.12.
+ (init_random): Initialize gnutls globals before trying to
+ use gnutls_rnd.
-2015-12-20 Alan Mackenzie <acm@muc.de>
+2016-01-17 Andreas Schwab <schwab@linux-m68k.org>
- Merge branch 'scratch/follow' into emacs-25
+ Don't use GnuTLS before it is initialized
- This allows Isearch, etc., to work well when Follow Mode is active.
+ * src/sysdep.c (init_random): Don't use gnutls_rnd.
-2015-12-19 Michael Albinus <michael.albinus@gmx.de>
+2016-01-17 Bill Wohler <wohler@newt.com>
- * lisp/net/tramp-sh.el (tramp-get-ls-command-with-w-option): Improve check.
+ * mh-e.el (mh-version): Add +git to version.
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+2016-01-17 Paul Eggert <eggert@cs.ucla.edu>
- Fix last commit
+ Port cleanup attribute to OpenBSD
- * doc/emacs/rmail.texi (Rmail Deletion): Document new behavior of 'u'
- with numeric argument.
+ The OpenBSD C compiler issues false alarms about strcpy, strcat, and
+ sprintf, and this messes up 'configure' when it tests for the cleanup
+ attribute. Work around the problem by using __has_attribute directly.
+ Problem reported by Joakim Jalap (Bug#22385).
+ * configure.ac: Don’t use AX_GCC_VAR_ATTRIBUTE.
+ * m4/ax_gcc_var_attribute.m4: Remove.
+ * src/conf_post.h (__has_attribute): Provide a substitute, for
+ non-GCC or older GCC compilers. All uses changed to assume
+ the substitute. Check for the cleanup attribute.
+ * src/emacs-module.c (module_has_cleanup): Just use __has_attribute.
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+2016-01-17 Paul Eggert <eggert@cs.ucla.edu>
- Document new features of Rmail
+ Prefer GnuTLS when acquiring random seed
- * doc/emacs/rmail.texi (Rmail Summary Edit, Rmail Deletion):
- Document new behavior of 'd' and 'C-d' with numeric argument.
- (Rmail Display): Document the rendering of HTML MIME parts.
+ This attempts to improve on the fix for Bug#22202.
+ * configure.ac (HAVE_DEV_URANDOM): Remove.
+ Check /dev/urandom existence at run time, not at build time,
+ since the device could exist in the former but not the latter.
+ * src/sysdep.c [HAVE_GNUTLS]: Include gnutls/gnutls.h.
+ (gnutls_rnd) [GNUTLS_VERSION_NUMBER < 0x020c00]: New fallback macro.
+ (random_seed): New typedef.
+ (set_random_seed): New static function.
+ (seed_random): Use them.
+ (init_random): Use random_seed instead of uintmax_t, so as to
+ not consume more entropy than needed. Prefer gnutls_rnd if it
+ works; this avoids a redundant open of /dev/urandom on
+ GNU/Linux with modern GnuTLS.
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- Improve documentation of new cl-lib functions
+ Improve documentation of dynamic modules
- * doc/misc/cl.texi (Predicates on Numbers, Numerical Functions):
- Fix wording.
+ * doc/lispref/loading.texi (How Programs Do Loading): Update the
+ description of searching for files in 'load' when Emacs was built
+ with support for dynamic modules.
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- Document the new feature of 'minibuffer-with-setup-hook'
+ * INSTALL: Document --with-modules.
- * lisp/files.el (minibuffer-with-setup-hook): Clarify how FUN is
- added to `minibuffer-setup-hook'.
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+ Document 'function-put'
- Document new features of Font Lock
+ * doc/lispref/symbols.texi (Symbol Plists): Document
+ 'function-put'. Update documentation of 'function-get'.
- * doc/lispref/modes.texi (Other Font Lock Variables): Document
- 'font-lock-flush-function' and 'font-lock-ensure-function'.
- (Font Lock Basics): Document the basic fontification functions
- referenced in "Other Font Lock Variables".
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- * lisp/font-lock.el (font-lock-flush, font-lock-ensure): Doc fix.
+ Document 'funcall-interactively'
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+ * doc/lispref/commands.texi (Interactive Call): Document
+ 'funcall-interactively'.
+ * doc/lispref/functions.texi (Calling Functions): Mention
+ 'funcall-interactively' and provide a cross-reference.
- Document new features of Rectangle mode
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- * doc/emacs/killing.texi (Rectangles): Document "C-x C-x" in
- rectangle-mark-mode.
+ * doc/lispref/lists.texi (Association Lists): Document 'alist-get'.
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+ * doc/lispref/strings.texi (Text Comparison): Document 'string-greaterp'.
- Manual followup to last change
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- * doc/lispref/display.texi (Displaying Messages): Sync with the
- doc string. (Bug#22210)
+ Document renaming of selection-related functions
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+ * doc/lispref/frames.texi (Window System Selections): Rename "x-*"
+ functions into the corresponding "gui-*" functions. Make the
+ description slightly less X-centric.
- Clarify doc string of 'display-message-or-buffer'
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- * lisp/simple.el (display-message-or-buffer): Doc fix. Suggested
- by Sebastian Wiesner <swiesner@lunaryorn.com>. (Bug#22210)
+ * doc/lispref/macros.texi (Expansion): Document 'macroexpand-1'.
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- * doc/emacs/emacs.texi (Top): Update top-level menus.
+ Document 'define-inline'
- * doc/lispref/elisp.texi (Top): Update top-level menus.
+ * doc/lispref/functions.texi (Defining Functions): Document
+ 'define-inline' and related macros.
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+ * lisp/emacs-lisp/inline.el (inline-letevals): Doc fix.
- Document how to avoid file-local variables that aren't
+2016-01-16 Artur Malabarba <bruce.connor.am@gmail.com>
- * doc/emacs/custom.texi (Specifying File Variables): Describe how
- to prevent Emacs from interpreting unrelated text as file-local
- variables. (Bug#22166)
+ * lisp/files.el (dir-locals--all-files): Respect absolute file-names
-2015-12-19 Dave Thomas <dave@pragprog.org> (tiny change)
+ * lisp/help-fns.el (describe-variable): Fix a left-over parenthesis
- Fix a typo in eterm-color's termcap entry
+2016-01-16 Artur Malabarba <bruce.connor.am@gmail.com>
- * lisp/term.el (term-termcap-format): Fix a typo in the "ue="
- entry. (Bug#22184)
+ * lisp/dired-x.el (dired-omit-here-always): Use add-dir-local-variable
-2015-12-19 Eli Zaretskii <eliz@gnu.org>
+ instead of manually writing a dir-locals file.
- Allow 'browse-url-emacs' visit non-existent URLs
+2016-01-16 Artur Malabarba <bruce.connor.am@gmail.com>
- * lisp/url/url-handlers.el (url-insert-file-contents): Don't
- signal an error if VISIT is non-nil, to more faithfully emulate
- the behavior of 'insert-file-contents'. (Bug#22160)
+ * lisp/files.el (dir-locals--all-files): Use completion instead of wildcards
-2015-12-19 Paul Eggert <eggert@cs.ucla.edu>
+ (dir-locals-file)
+ * lisp/files-x.el (modify-dir-local-variable)
+ * lisp/dos-fns.el (dosified-file-name)
+ * lisp/help-fns.el (describe-variable): Change accordingly.
- Remove SunOS 4.x cruft
+2016-01-16 Jussi Lahdenniemi <jussi@aprikoodi.fi> (tiny change)
- Support for SunOS 4.x was removed in Emacs 23 but some cruft was left behind.
- * lib-src/pop.c [sun]: Remove no-longer-needed include.
- * lwlib/xlwmenu.c (SUNSO41): Remove.
+ Fix incompatbilities with MS-Windows 2000 and older
-2015-12-19 Paul Eggert <eggert@cs.ucla.edu>
+ * src/w32.c <multiByteToWideCharFlags>: New global variable.
+ (filename_to_utf16, filename_from_ansi, check_windows_init_file):
+ Use it instead of the literal MB_ERR_INVALID_CHARS.
+ (maybe_load_unicows_dll): Initialize multiByteToWideCharFlags as
+ appropriate for the underlying OS version. For details, see
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
+ * src/w32.h: Declare multiByteToWideCharFlags.
+ * src/w32fns.c (Fx_file_dialog, Fw32_shell_execute)
+ (add_tray_notification): Use multiByteToWideCharFlags instead of
+ the literal MB_ERR_INVALID_CHARS.
+ (_resetstkoflw_proc): New typedef.
+ (w32_reset_stack_overflow_guard): Call _resetstkoflw via a
+ pointer, as this function is absent in msvcrt.dll shipped with W2K
+ and older systems.
- Merge from gnulib
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- This mostly commentary fixes.
- * doc/misc/texinfo.tex, lib/intprops.h: Copy from gnulib.
- * lib/gnulib.mk: Regenerate with new gnulib-tool.
+ Mention in PROBLEMS an issue with MS-Windows NT4
-2015-12-18 Michael Albinus <michael.albinus@gmx.de>
+ * etc/PROBLEMS (MS-Windows): Mention the problem with Shell32.dll
+ on Windows NT4. For the details, see
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00835.html.
- Minor fixes in Tramp
+2016-01-16 Jussi Lahdenniemi <jussi@aprikoodi.fi> (tiny change)
- * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-ls):
- Reorder ls arguments.
+ Ensure 8-byte aligned memory allocation on MS-Windows 9X
- * lisp/net/tramp.el (tramp-dissect-file-name): Fix docstring.
+ * src/w32heap.c (init_heap): Redirect malloc, realloc, and free to
+ special functions on Windows 9X. Refuse to dump Emacs on Windows 9X.
+ (malloc_after_dump_9x, realloc_after_dump_9x)
+ (free_after_dump_9x): New functions. (Bug#22379) See also
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00852.html
+ for more details about the original problem.
-2015-12-18 Michael Albinus <michael.albinus@gmx.de>
-
- Make tramp a built-in package
+ * nt/inc/ms-w32.h (malloc_after_dump_9x, realloc_after_dump_9x)
+ (free_after_dump_9x): Add prototypes.
- * lisp/finder.el (finder-compile-keywords): Update
- `package--builtins' also when Version: keyword is available.
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
- * lisp/net/trampver.el: Add Version: keyword.
- (tramp-version): Change it to "2.2.13.25.1", in order to be
- compatible with `version-to-list'.
+ Fix tests for active region in hideif.el
-2015-12-18 Lele Gaifax <lele@metapensiero.it>
+ * lisp/progmodes/hideif.el (hif-evaluate-macro, hide-ifdef-block): Use
+ 'use-region-p' to test whether to operate on region, instead of
+ testing 'mark-active'.
- * etc/tutorials/TUTORIAL.it: Update and fix typos.
+2016-01-16 Eli Zaretskii <eliz@gnu.org>
-2015-12-18 Alan Mackenzie <acm@muc.de>
+ Fix interactive specs in some hideif.el commands
- Rename `recenter-group' to `recenter-window-group'
+ * lisp/progmodes/hideif.el (hif-evaluate-macro)
+ (hide-ifdef-undef, show-ifdef-block): Don't use '(interactive "r")'
+ in commands that should only act on the region if it's active.
- * doc/lispref/windows.texi (Textual Scrolling)
- * lisp/window.el (top level, recenter-group)
- * lisp/follow.el (follow-mode)
- * lisp/isearch.el (isearch-back-into-window): Rename `recenter-group' to
- `recenter-window-group' and `recenter-group-function' to
- `recenter-window-group-function'.
+2016-01-15 Phillip Lord <phillip.lord@russet.org.uk>
-2015-12-18 Eli Zaretskii <eliz@gnu.org>
+ Enable test selector from command line
- Fix vertical-motion in tabulated-list mode
+ * test/automated/Makefile.in: Change variable manipulation to avoid
+ over-writing selector.
- * src/indent.c (Fvertical_motion): When moving from line beginning
- to point under line truncation, assume overshoot by one line only
- if point actually lies beyond the window's right margin.
- (Bug#22194)
+2016-01-15 Alan Mackenzie <acm@muc.de>
-2015-12-18 Martin Rudalics <rudalics@gmx.at>
+ Don't confuse "::" with ":" when trying to parse member initializers.
- Don't have help functions call x-display-pixel-width/-height on ttys
+ * lisp/progmodes/cc-engine.el (c-back-over-member-initializers): Check
+ more robustly for ":" token when searching backwards for it.
- * lisp/help.el (temp-buffer-max-height, temp-buffer-max-width):
- Don't call x-display-pixel-width/-height on ttys.
+ * lisp/progmodes/cc-langs (c-:$-multichar-token-regexp): New language
+ variable.
-2015-12-18 Dmitry Gutov <dgutov@yandex.ru>
+2016-01-15 Eli Zaretskii <eliz@gnu.org>
- Use 'hg id' in vc-hg-previous-revision
+ Ensure positive number of glyphs for margins of positive width
- * lisp/vc/vc-hg.el (vc-hg-previous-revision):
- Use 'hg id' to retrieve it (bug#22032).
+ * src/dispnew.c (margin_glyphs_to_reserve): Always return a
+ positive value when a non-zero width of the marginal area was
+ requested. (Bug#22356)
-2015-12-17 Alan Mackenzie <acm@muc.de>
+2016-01-15 Eli Zaretskii <eliz@gnu.org>
- * lisp/follow.el (follow-sit-for): Remove (it's redundant).
+ Fix crashes when mini-window has non-zero margins
-2015-12-17 Eli Zaretskii <eliz@gnu.org>
+ * src/window.c (resize_frame_windows): Use 'new_size' to set
+ minibuffer window's 'total_cols' value, as 'size' might be in
+ pixels. (Bug#22356)
- Fix a typo in the Emacs manual
+2016-01-15 Alan Mackenzie <acm@muc.de>
- * doc/emacs/trouble.texi (Sending Patches): Fix a typo. Reported
- by Lele Gaifax <lele@metapensiero.it>. (Bug#22193)
+ In comment-dwim with style `extra-line', respect indent-tabs-mode.
-2015-12-17 Eli Zaretskii <eliz@gnu.org>
+ This fixes bug #22369.
- Fix parsing netrc entries with ports
+ * lisp/newcomment.el (comment-make-bol-ws): New function.
+ (comment-make-extra-lines): Use new function instead of a crude `make-string'.
- * lisp/gnus/auth-source.el (auth-source-ensure-strings): Don't
- make a list out of 't'. (Bug#22188)
+2016-01-15 Eli Zaretskii <eliz@gnu.org>
- * test/automated/auth-source-tests.el
- (auth-source-test-netrc-parse-entry): New test.
+ Make 'random' seeds cryptographically secure if possible
-2015-12-17 Paul Eggert <eggert@cs.ucla.edu>
+ * configure.ac: Check for "/dev/urandom".
- Fix typo in Doug Lea malloc configure log
+ * src/sysdep.c (init_random) [HAVE_DEV_URANDOM]: Read the stream
+ for the seed from "/dev/urandom".
+ [WINDOWSNT]: Obtain the stream for the seed from w32 APIs.
+ * src/fns.c (Frandom): Update the doc string to indicate that
+ system entropy is used when available.
+ * src/w32.c: Include wincrypt.h.
+ (w32_init_crypt_random, w32_init_random): New functions, use the
+ CryptGenRandom API.
+ (globals_of_w32): Initialize w32_crypto_hprov handle to zero.
+ * src/w32.h (w32_init_random): Add prototype.
- * configure.ac (emacs_cv_var_doug_lea_malloc):
- Fix typo that confused the log output of 'configure'.
+ * doc/lispref/numbers.texi (Random Numbers): Document more details
+ about 't' as the argument to 'random'.
-2015-12-16 Nicolas Petton <nicolas@petton.fr>
+ * etc/NEWS: Mention that '(random t)' now uses a cryptographically
+ strong seed if possible.
- * etc/NEWS: Mention the new pcase patterns `seq' and `map'.
+ (Bug#22202)
-2015-12-16 Alan Mackenzie <acm@muc.de>
+2016-01-15 Eli Zaretskii <eliz@gnu.org>
- * etc/NEWS: Move entry on pcase to correct section
+ Unhide the --no-line-directive option to 'etags'
- (Accidentally omitted from previous commit)
+ * lib-src/etags.c (print_help): Un-undocument the --no-line-directive
+ option. (Bug#22306)
-2015-12-16 Alan Mackenzie <acm@muc.de>
+ * doc/man/etags.1: Document the --no-line-directive option.
- Add documentation for changes to Show Paren mode.
+2016-01-15 Alan J Third <alan@idiocy.org> (tiny change)
- * lisp/paren.el (show-paren-highlight-openparen): Enhance doc string.
+ Fix picture-mode wrt double-width characters
- * doc/emacs/programs.texi (Matching): Add descriptions of some pertinent user
- options, including the new show-paren-when-point-inside-paren and
- show-paren-when-point-in-periphery.
+ * lisp/textmodes/picture.el (picture-insert): Check the width of
+ the character being replaced, not just that of the replacement.
+ (Bug#1808)
- * etc/NEWS (.. Specialized Modes ...): Add an entry for Show Paren mode.
- Move an entry on pcase to the Lisp Changes section.
+2016-01-15 Eric Abrahamsen <eric@ericabrahamsen.net>
-2015-12-16 Eli Zaretskii <eliz@gnu.org>
+ Honor docstring of gnus-group-get-new-news
- Document Eldoc changes
+ * lisp/gnus/gnus-start.el (gnus-get-unread-articles): If the prefix arg is t,
+ but non-numeric, unconditionally consider all groups to need updating.
- * doc/emacs/programs.texi (Lisp Doc): Document Global Eldoc mode.
+2016-01-14 Simen Heggestøyl <simenheg@gmail.com>
-2015-12-16 Eli Zaretskii <eliz@gnu.org>
+ Disallow parenthesis in non-pseudo CSS selectors
- Fix invocation of Python and Guile interpreters from gdb-mi
+ * lisp/textmodes/css-mode.el (css--font-lock-keywords): Disallow
+ parenthesis in selectors except for in the function notation that
+ might appear right after a pseudo-class.
+ * test/indent/scss-mode.scss: Add a test for it.
- * lisp/progmodes/gdb-mi.el (gdb-control-commands-regexp): Add
- commands for interactive Python and Guile interpreters.
- (gdb-send): Recognize various ways of exiting from Python and
- Guile interpreters and returning to GDB. For details, see
- http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00693.html
- and http://stackoverflow.com/questions/31514741.
+2016-01-14 Katsumi Yamaoka <yamaoka@jpl.org>
-2015-12-16 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/gnus/nntp.el (nntp-request-newgroups): Simplify
- Remove attempt to use C11 threads
+2016-01-14 Michael Albinus <michael.albinus@gmx.de>
- C11 threads are not needed for Emacs now, and their use is causing
- hassles on FreeBSD 10.x. Problem reported by Ashish SHUKLA in:
- http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00648.html
- * configure.ac: Do not check for C11 threads. Remove unnecessary
- fiddling with CPPFLAGS when configuring pthreads.
- * src/emacs-module.c (main_thread, check_main_thread)
- (module_init): Do not worry about C11 threads.
+ check-maybe shall run only default tests
-2015-12-15 Michael Albinus <michael.albinus@gmx.de>
+ * test/automated/Makefile.in (check, check-expensive): Depend on
+ mostlyclean.
+ (check-maybe): Re-run only default tests.
+ (check-doit): Use code of check-maybe.
+ (mostlyclean): Move *.log files away.
- Set utf8 encoding with stty in Tramp
+2016-01-13 Mark Oteiza <mvoteiza@udel.edu>
- * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
- Move up uname check. Handle Mac OS X eol encoding. Set utf8
- encoding with stty.
+ * lisp/thingatpt.el (thing-at-point-uri-schemes): Add "magnet:"
-2015-12-15 Alan Mackenzie <acm@muc.de>
+2016-01-13 Dmitry Gutov <dgutov@yandex.ru>
- Tidy up documentation associated with window groups.
+ Un-obsolete tags-loop-continue
- * doc/lispref/windows.texi (Basic Windows): Add an @anchor for "Window
- Groups". Correct example function to `window-group-start'.
- (Window Start and End, Textual scrolling): Point to the new anchor. State
- that (most of) the args in window group functions have the same meaning as for
- the corresponding window primitives.
+ * lisp/progmodes/etags.el (tags-loop-continue): Un-obsolete.
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00682.html
- * doc/lispref/positions.texi (Screen Lines). Same as above.
+2016-01-13 Eli Zaretskii <eliz@gnu.org>
-2015-12-15 Michael Albinus <michael.albinus@gmx.de>
+ Document obsoletion of 'intangible' and 'point-entered/left'
- Complete last commit
+ * doc/lispref/text.texi (Special Properties): Document the new
+ properties 'cursor-intangible' and 'cursor-sensor-functions'.
+ Document the obsolete status of 'intangible', 'pointer-left',
+ and 'point-entered' properties, and of 'inhibit-point-motion-hooks'.
+ * doc/lispref/display.texi (Overlay Properties): Document that
+ 'intangible' overlay property is obsolete.
- * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
- Move uname check up. Handle Mac OS X eol encoding.
+ * lisp/emacs-lisp/cursor-sensor.el (cursor-sensor-mode): Doc fix.
-2015-12-15 Michael Albinus <michael.albinus@gmx.de>
+2016-01-13 Eli Zaretskii <eliz@gnu.org>
- Handle Mac OS X eol encoding in Tramp
+ Updater documentation of 'looking-back'
- * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
- Handle Mac OS X eol encoding.
+ * doc/lispref/searching.texi (Regexp Search): Update documentation
+ of 'looking-back'. Fix markup.
-2015-12-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2016-01-13 Eli Zaretskii <eliz@gnu.org>
- Fix variable name typo in compute_tip_xy
+ Document 'pre-redisplay-functions'
- * src/w32fns.c (compute_tip_xy):
- * src/xfns.c (compute_tip_xy): Modify *root_x instead of *root_y
- when `right' is integer.
+ * doc/lispref/hooks.texi (Standard Hooks):
+ * doc/lispref/display.texi (Forcing Redisplay): Document
+ 'pre-redisplay-functions'.
-2015-12-14 foudfou <foudil.newbie+git@gmail.com>
+2016-01-13 Eli Zaretskii <eliz@gnu.org>
- * lisp/ibuffer.el: Add ability to (un-)mark or delete buffers in the region.
+ Document the new deafault value of 'load-read-function'
-2015-12-14 Tassilo Horn <tsdh@gnu.org>
+ * doc/lispref/loading.texi (How Programs Do Loading): Document the
+ change in the default value of 'load-read-function'.
- Revert "Fix rx matcher overflow without limiting"
+2016-01-13 Eli Zaretskii <eliz@gnu.org>
- This reverts commit fe27e037663d36be3e5741c2ce86ab4ee8017db1.
+ Document 'bufferpos-to-filepos' and 'filepos-to-bufferpos'
-2015-12-14 Alan Mackenzie <acm@muc.de>
+ * doc/lispref/nonascii.texi (Text Representations): Document
+ 'bufferpos-to-filepos' and 'filepos-to-bufferpos'.
- Ispell: Bind isearch-regexp-function to nil around call to isearch..-new-loop
+2016-01-13 Eli Zaretskii <eliz@gnu.org>
- * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay): bind
- isearch-regexp-function to nil around call to isearch-lazy-highligh-new-loop.
+ Document the new prefix-command hooks
-2015-12-14 Tassilo Horn <tsdh@gnu.org>
+ * doc/lispref/hooks.texi (Standard Hooks): Document
+ `prefix-command-echo-keystrokes-functions' and
+ `prefix-command-preserve-state-hook'.
- Fix rx matcher overflow without limiting
+2016-01-13 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve last
- change to the regexp without imposing a limit on the length of the
- options.
+ Fix one more misuse of time-stamp-time-zone
-2015-12-14 Alan Mackenzie <acm@muc.de>
+ * test/etags/html-src/softwarelibero.html: Use "UTC0" rather
+ than the unportable "GMT" for time zone.
- Enhance ispell-skip-region-alist by generating part of it at runtime.
+2016-01-13 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/textmodes/ispell.el (ispell--\\w-filter, ispell--make-\\w-expression)
- (ispell--make-filename-or-URL-re): New functions which generate a regexp.
- (ispell-skip-region-alist): Remove the bit that matches a filename/URL, etc.
- (ispell-begin-skip-region-regexp, ispell-skip-region-list, ispell-message):
- Include the result of ispell--make-filename-or-URL-re in regexps.
+ Fix NNTP NEWGROUPS off-by-a-few-hours bug
-2015-12-14 Glenn Morris <rgm@gnu.org>
+ * lisp/gnus/nntp.el (nntp-request-newgroups): Format string
+ in Universal Time, since we’re telling the server “GMT”.
- * build-aux/gitlog-to-emacslog: Ignore more pointless merge commits.
+2016-01-12 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-14 Alan Mackenzie <acm@muc.de>
+ Update publicsuffix.txt from upstream
- Replace GROUP argument in six window primitives by new functions.
-
- * doc/lispref/windows.texi (Window Start and End, Textual Scrolling)
- * doc/lispref/positions.texi (Screen Lines): Remove optional GROUP argument
- from description of six window functions. Add in description of new functions
- window-group-start, window-group-end, set-window-group-start,
- pos-visible-in-window-group-p, recenter-group and move-to-window-group-line,
- together with the six variables indirecting to the pertinent group
- functions.
-
- * src/window.c
- * src/keyboard.c: Revert the commit from 2015-11-11 12:02:48, in so far as it
- applies to these two files, which added the GROUP argument to six window
- primitives.
+ * etc/publicsuffix.txt: Update from
+ https://publicsuffix.org/list/effective_tld_names.dat
+ dated 2016-01-12 11:52:01 UTC.
- * lisp/follow.el (follow-mode): Use updated variable names for the indirected
- functions.
+2016-01-12 Glenn Morris <rgm@gnu.org>
- * lisp/isearch.el (isearch-update, isearch-done, isearch-string-out-of-window)
- (isearch-back-into-window, isearch-lazy-highlight-new-loop)
- (isearch-lazy-highlight-search, isearch-lazy-highlight-update): Replace calls
- to window primitives (e.g. window-start) with a GROUP argument by calls to
- new functions (e.g. window-group-start).
+ Fix some declarations.
- * lisp/ispell.el (ispell-command-loop): Replace call to
- pos-visible-in-window-p with pos-visible-in-window-group-p.
+ * lisp/descr-text.el (internal-char-font):
+ * lisp/cedet/mode-local.el (xref-item-location):
+ * lisp/gnus/mml-smime.el (epg-key-sub-key-list)
+ (epg-sub-key-capability, epg-sub-key-validity):
+ * lisp/international/mule-util.el (internal-char-font):
+ Fix declarations.
- * lisp/window.el (window-group-start, window-group-end)
- (set-window-group-start, recenter-group, pos-visible-in-window-group-p)
- (selected-window-group, move-to-window-group-line): New functions.
- (window-group-start-function, window-group-end-function)
- (set-window-group-start-function, recenter-group-function)
- (pos-visible-in-window-group-p-function, selected-window-group-function)
- (move-to-window-group-line-function): New variables.
+2016-01-12 Glenn Morris <rgm@gnu.org>
-2015-12-14 Vitorio Miguel <vdrbandeiras@gmail.com> (tiny change)
+ Fix some custom types.
- * etc/tutorials/TUTORIAL.pt_BR: Fix a typo. (Bug#22165)
+ * lisp/gnus/gnus-fun.el (gnus-x-face-omit-files, gnus-face-omit-files):
+ * lisp/gnus/gnus.el (gnus-valid-select-methods):
+ * lisp/mail/rmail.el (rmail-get-coding-function):
+ * lisp/net/newst-treeview.el (newsticker-groups-filename):
+ * lisp/progmodes/hideif.el (hide-ifdef-exclude-define-regexp):
+ * lisp/textmodes/tildify.el (tildify-space-predicates):
+ * lisp/url/url-tramp.el (url-tramp-protocols):
+ Fix custom types.
-2015-12-13 Eli Zaretskii <eliz@gnu.org>
+2016-01-12 Glenn Morris <rgm@gnu.org>
- Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+ Add some missing version tags.
-2015-12-13 Tassilo Horn <tsdh@gnu.org>
+ * lisp/electric.el (electric-quote-comment)
+ (electric-quote-string, electric-quote-paragraph):
+ * lisp/epg-config.el (epg-gpgconf-program):
+ * lisp/rect.el (rectangle-preview):
+ * lisp/emacs-lisp/check-declare.el (check-declare-ext-errors):
+ * lisp/emacs-lisp/package.el (package-selected-packages)
+ (package-hidden-regexps):
+ * lisp/erc/erc.el (erc-network-hide-list, erc-channel-hide-list):
+ * lisp/eshell/em-term.el (eshell-destroy-buffer-when-process-dies):
+ * lisp/gnus/mml-sec.el (mml1991-signers, mml2015-signers)
+ (mml-smime-signers, mml1991-encrypt-to-self, mml2015-encrypt-to-self)
+ (mml-smime-encrypt-to-self, mml2015-sign-with-sender)
+ (mml-smime-sign-with-sender, mml2015-always-trust)
+ (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
+ * lisp/net/browse-url.el (browse-url-conkeror-new-window-is-buffer)
+ (browse-url-conkeror-arguments):
+ * lisp/net/newst-reader.el (newsticker-download-logos):
+ * lisp/progmodes/gud.el (gud-guiler-command-name):
+ * lisp/progmodes/prog-mode.el (prettify-symbols-unprettify-at-point):
+ * lisp/progmodes/project.el (project-vc):
+ * lisp/progmodes/python.el (python-indent-guess-indent-offset-verbose)
+ (python-shell-remote-exec-path, python-shell-first-prompt-hook)
+ (python-shell-completion-native-disabled-interpreters)
+ (python-shell-completion-native-enable)
+ (python-shell-completion-native-output-timeout)
+ (python-shell-completion-native-try-output-timeout):
+ * lisp/progmodes/xref.el (xref):
+ * lisp/term/screen.el (xterm-screen-extra-capabilities):
+ * lisp/term/xterm.el (xterm-max-cut-length):
+ Add missing version tags.
- Improve regex to not trigger stack overflow
+2016-01-12 Glenn Morris <rgm@gnu.org>
- * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve regex in
- order not to trigger a stack overflow in regex matcher with unbalanced
- brackets (bug#22146).
+ * test/automated/core-elisp-tests.el
+ (core-elisp-tests-1-defvar-in-let): Add a custom type.
-2015-12-13 Eli Zaretskii <eliz@gnu.org>
+2016-01-12 Glenn Morris <rgm@gnu.org>
- Fix visiting files with raw-text
+ * src/buffer.c (syms_of_buffer) <major-mode>: Doc fix.
- * src/fileio.c (Finsert_file_contents): Fix setting buffer unibyte
- when some stuff was actually read. (Bug#22162)
+ Remove comments that do not apply since 2005-08-09. (Bug#22349)
-2015-12-13 Tassilo Horn <tsdh@gnu.org>
+2016-01-12 Paul Eggert <eggert@cs.ucla.edu>
- Fix regex matching keyval labels
+ Merge from gnulib
- * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Fix regexp
- matching keyval labels.
+ This mostly just changes "UTC" to "UTC0" for POSIX conformance.
+ It also updates to the latest version of texinfo.tex.
+ * build-aux/gitlog-to-changelog, build-aux/move-if-change:
+ * build-aux/update-copyright, doc/misc/texinfo.tex:
+ Update from gnulib.
-2015-12-13 Michael Albinus <michael.albinus@gmx.de>
+2016-01-12 Eli Zaretskii <eliz@gnu.org>
- * lisp/ido.el (ido-file-name-all-completions-1): Do not raise an error
+ Update documentation of 'process-running-child-p'
- ... in case of Tramp. (Bug#20821)
+ * doc/lispref/processes.texi (Input to Processes): Document the
+ changes in return value of 'process-running-child-p'.
-2015-12-13 Paul Eggert <eggert@cs.ucla.edu>
+2016-01-12 Eli Zaretskii <eliz@gnu.org>
- Fix performance regression with gcc -O0
+ Update documentation of 'deactivate-mark'.
- This fixes the smaller performance hit that I noted in:
- https://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00357.html
- * src/alloc.c (macro_XPNTR_OR_SYMBOL_OFFSET, macro_XPNTR):
- * src/puresize.h (puresize_h_PURE_P)
- (puresize_h_CHECK_IMPURE):
- New macros, with the old contents of the functions.
- * src/alloc.c (XPNTR_OR_SYMBOL_OFFSET, XPNTR):
- * src/puresize.h (PURE_P, CHECK_IMPURE):
- Use the new macros. Also macros, if DEFINE_KEY_OPS_AS_MACROS.
- * src/conf_post.h (ATTRIBUTE_UNUSED):
- * src/lisp.h (DEFINE_KEY_OPS_AS_MACROS): New macros.
+ * doc/lispref/markers.texi (The Mark): Document that
+ 'deactivate-mark' is now buffer-local when set.
-2015-12-12 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-01-12 Eli Zaretskii <eliz@gnu.org>
- * lisp/emacs-lisp/package.el (package-unpack): Security check
+ Update documentation of 'completion-table-dynamic'
- Check that we received the package we were offered.
+ * doc/lispref/minibuf.texi (Programmed Completion): Document the
+ new optional argument to 'completion-table-dynamic'.
-2015-12-12 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-01-12 Eli Zaretskii <eliz@gnu.org>
- * lisp/emacs-lisp/package.el (package--compile): Don't activate
+ Document changes in 'read-buffer' and 'read-buffer-function'
- `package-unpack' takes care of all activations now (other than
- `package-initialize). `package--compile' now only compiles.
+ * doc/lispref/minibuf.texi (High-Level Completion): Document the
+ 4th argument to 'read-buffer' and 'read-buffer-function'.
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+2016-01-12 Paul Eggert <eggert@cs.ucla.edu>
- Document the new bindings of <UP> and <DOWN> in the minibuffer
+ Fix time-stamp-time-zone bugs introduced in July
- * doc/emacs/mini.texi (Minibuffer History): Describe the new
- bindings of <UP> and <DOWN> in the minibuffer.
+ This fixes a bug introduced when the July changes to
+ format-time-string installed, as the changes were not
+ correctly handled in this module (Bug#22302).
+ Also, document time stamp time zones.
+ * lisp/time-stamp.el (time-stamp-time-zone): Document values better.
+ (time-stamp--format): New private function.
+ (time-stamp-string, time-stamp-string-preprocess)
+ (time-stamp-do-number): Use it.
+ * doc/emacs/files.texi (Time Stamps): Mention time zones.
+ * doc/misc/autotype.texi (Timestamps): Document time-stamp-time-zone.
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+2016-01-12 Eli Zaretskii <eliz@gnu.org>
- Document new features of Ido
+ Make piping to subprocesses more robust on MS-Windows
- * doc/misc/ido.texi (Misc): Document 'C-S-b'.
+ * src/w32.c (sys_write): Don't write to a pipe more stuff than its
+ buffer can hold. Don't return -1 if something has been written to
+ the pipe. Zero out 'errno' before calling '_write', to avoid
+ returning a stale value. (Bug#22344)
+ * src/w32proc.c (syms_of_ntproc) <w32-pipe-buffer-size>: New variable.
+ * src/w32.c (pipe2): Use it to request a user-defined size for the
+ pipe being created.
-2015-12-12 Martin Rudalics <rudalics@gmx.at>
+ * etc/NEWS: Mention 'w32-pipe-buffer-size'.
- Fix frame height calculations with added menu bar on Windows (Bug#22105)
+ * doc/emacs/msdos.texi (Windows Processes): Document
+ 'w32-pipe-buffer-size'.
- * doc/lispref/frames.texi (Parameter Access): Mention pitfalls
- when simultaneously specifying multiple parameters for
- `modify-frame-parameters' that all may change the frame's size.
- * src/w32fns.c (x_set_menu_bar_lines): Don't set
- windows_or_buffers_changed here.
- (my_create_tip_window, Fx_show_tip): Call AdjustWindowRect
- with third argument false.
- * src/w32menu.c (set_frame_menubar): Set
- windows_or_buffers_changed here.
- * src/w32term.c (x_set_window_size): Determine third argument of
- AdjustWindowRect from whether the frame has a menu bar and not
- from whether it wants one.
+2016-01-16 Stefan Monnier <monnier@iro.umontreal.ca>
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+ * lisp/emacs-lisp/syntax.el (syntax-ppss-table): New var
- Document the change in interactive shell mode
+ (syntax-ppss):
+ * lisp/font-lock.el (font-lock-fontify-syntactically-region): Use it.
- * doc/emacs/misc.texi (Interactive Shell): Document that the
- '*shell*' buffer by default displays in a new window.
+2016-01-16 Stefan Monnier <monnier@iro.umontreal.ca>
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+ lisp/nxml: Use syntax-tables for comments
- Document new features of package.el
+ * lisp/nxml/nxml-mode.el (nxml-set-face): Prepend.
+ (nxml-mode): Set syntax-ppss-table.
+ Use sgml-syntax-propertize-function for syntax-propertize-function.
+ Let font-lock highlight strings and comments.
+ (nxml-degrade): Don't touch "nxml-inside" property any more.
+ (nxml-after-change, nxml-after-change1): Remove functions.
+ (comment): Don't set fontify rule any more.
+ (nxml-fontify-attribute): Don't highlight the value any more.
+ (nxml-namespace-attribute-value-delimiter, nxml-namespace-attribute-value)
+ (nxml-comment-delimiter, nxml-comment-content): Remove faces.
- * doc/emacs/package.texi (Package Menu): Document the 'external'
- status and the new menu commands.
- (Package Installation): Document archive priorities.
+ * lisp/nxml/nxml-rap.el (nxml-scan-end): Remove.
+ (nxml-get-inside, nxml-inside-start, nxml-inside-end): Use syntax-ppss.
+ (nxml-clear-inside, nxml-set-inside): Remove.
+ (nxml-scan-after-change): Remove function.
+ (nxml-scan-prolog, nxml-tokenize-forward): Simplify.
+ (nxml-ensure-scan-up-to-date): Use syntax-propertize.
+ (nxml-move-outside-backwards):
+ * lisp/nxml/nxml-outln.el (nxml-section-tag-backward): Adjust to new
+ nxml-inside-start behavior.
- * lisp/emacs-lisp/package.el (package-archive-priorities): Doc fix.
- (package-menu-hide-low-priority): Doc fix.
+ * lisp/nxml/nxml-util.el (nxml-debug-set-inside)
+ (nxml-debug-clear-inside): Remove macros.
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+ * lisp/nxml/xmltok.el (xmltok-forward-special): Remove function.
+ (xmltok-scan-after-comment-open): Simplify.
- Update and document new features of xterm support
+2016-01-16 Stefan Monnier <monnier@iro.umontreal.ca>
- * doc/emacs/frames.texi (Text-Only Mouse): Document that
- track-mouse is supported by newer xterm versions.
+ * elisp-mode.el (elisp--font-lock-flush-elisp-buffers): Fix comment
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+2016-01-16 Stefan Monnier <monnier@iro.umontreal.ca>
- Document new features of Prettify Mode
+ * lisp/nxml: Use standard completion; it also works for company-mode
- * doc/emacs/programs.texi (Misc for Programs): Document
- 'prettify-symbols-compose-predicate' and
- 'prettify-symbols-unprettify-at-point'.
+ * lisp/nxml/nxml-mode.el (nxml-complete): Obsolete.
+ (nxml-completion-at-point-function): Remove.
+ (nxml-mode): Don't set completion-at-point-functions.
+ * lisp/nxml/rng-nxml.el (rng-nxml-mode-init): Set it here instead.
+ (rng-completion-at-point): Rename from rng-complete and mark it
+ non-interactive. It is now to be used as completion-at-point-function.
+ (rng-complete-tag, rng-complete-end-tag, rng-complete-attribute-name)
+ (rng-complete-attribute-value): Don't perform completion, but return
+ completion data instead.
+ (rng-complete-qname-function, rng-generate-qname-list): Add a few
+ arguments, previously passed via dynamic coping.
+ (rng-strings-to-completion-table): Rename from
+ rng-strings-to-completion-alist. Don't return an alist. Don't both
+ sorting and uniquifying.
- * lisp/progmodes/prog-mode.el (prettify-symbols-alist)
- (prettify-symbols-default-compose-p)
- (prettify-symbols-compose-predicate)
- (prettify-symbols--compose-symbol): Doc fixes.
+ * lisp/nxml/rng-util.el (rng-complete-before-point): Delete function.
+ (rng-completion-exact-p, rng-quote-string): Delete functions.
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+ * lisp/nxml/rng-valid.el (rng-recover-start-tag-open)
+ (rng-missing-attributes-message, rng-missing-element-message)
+ (rng-mark-missing-end-tags): Use explicit ".." in formats rather than
+ calling rng-quote-string everywhere.
- Document multi-mode indentation facilities
+2016-01-16 Stefan Monnier <monnier@iro.umontreal.ca>
- * doc/lispref/text.texi (Mode-Specific Indent): Document
- 'prog-indentation-context', 'prog-first-column', and 'prog-widen'.
+ Use sgml-electric-tag-pair-mode also in nxml-mode
- * lisp/progmodes/prog-mode.el (prog-indentation-context)
- (prog-widen): Doc fixes.
+ * lisp/nxml/rng-nxml.el: Require sgml-mode.
+ (rng-nxml-easy-menu): Add entry for sgml-electric-tag-pair-mode.
+ (rng-complete-qname-function): Use complete-with-action.
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+ * lisp/textmodes/sgml-mode.el (sgml-electric-tag-pair-before-change-function):
+ Let-bind forward-sexp-function, since nxml-mode binds it to
+ something incompatible.
- Document 'vc-refresh-state'
+ * lisp/nxml/nxml-mode.el: Use setq-local and defvar-local.
- * doc/emacs/maintaining.texi (Version Control): Document
- 'vc-refresh-state'.
+2016-01-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * lisp/vc/vc-hooks.el (vc-refresh-state): Doc fix.
+ * xmltok.el: Mark the "sole --" rather than the comment opener
-2015-12-12 Eli Zaretskii <eliz@gnu.org>
+ * lisp/nxml/xmltok.el (xmltok-scan-after-comment-open): Put the error
+ marker on the "sole --" rather than on the comment opener.
- Fix echo for "C-u"
+2016-01-15 Sam Steingold <sds@gnu.org>
- * src/keyboard.c (command_loop_1): Undo last change. It caused
- duplicate echo of C-u. (Bug#22107)
+ replace `tramp-compat-split-string' (removed) with `split-string'
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+ (python-shell-tramp-refresh-process-environment)
+ (python-shell-calculate-pythonpath): use `split-string'
+ instead of defunct `tramp-compat-split-string'
- Avoid errors when creating files under SVN in new directory
+2016-01-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * lisp/vc/vc-svn.el (vc-svn-registered): Use
- file-accessible-directory-p, to avoid cd'ing to a non-existing
- directory, which signals an error on some systems. (Bug#21984)
- (vc-svn-checkin): Call log-edit-extract-headers with 2 arguments.
- Use declare-function to avoid byte-compiler warnings.
+ Update nXML to use Emacs's Unicode support, and lexical-binding
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+ * etc/nxml/*.el: Remove obsolete char-name files.
+ * lisp/nxml/xsd-regexp.el (xsdre-range-list-difference): Remove unused
+ var `next'.
+ * lisp/nxml/rng-nxml.el (rng-set-state-after): Don't assume point-min==1.
+ * lisp/nxml/rng-match.el (rng-update-match-state): Simplify.
+ * lisp/nxml/nxml-outln.el (nxml-outline-state-transform-exceptions)
+ (nxml-target-section-pos, nxml-depth-in-target-section)
+ (nxml-outline-state-transform-alist)
+ (nxml-outline-display-section-tag-function): Move decl before first use.
+ * lisp/nxml/nxml-mode.el (nxml-char-name-ignore-case)
+ (nxml-char-name-alist, nxml-char-name-table)
+ (nxml-autoload-char-name-set-list, nxml-named-char-history): Remove vars.
+ (nxml-enable-char-name-set, nxml-disable-char-name-set)
+ (nxml-char-name-set-enabled-p, nxml-autoload-char-name-set)
+ (nxml-define-char-name-set, nxml-get-char-name): Remove functions.
+ (nxml-insert-named-char): Use read-char-by-name instead.
+ (nxml-char-ref-display-extra): Use get-char-code-property.
+ * lisp/nxml/nxml-maint.el (nxml-create-unicode-char-name-sets):
+ Remove function.
+ * lisp/nxml/nxml-glyph.el, lisp/nxml/nxml-uchnm.el: Remove files.
- Improve Lua support in etags
+2016-01-15 Michael Albinus <michael.albinus@gmx.de>
- * lib-src/etags.c (Lua_functions): Skip spaces before looking for
- "function".
+ Add "sg" method to Tramp
- * etc/NEWS: Mention improved Lua support by 'etags'.
+ * doc/misc/tramp.texi (Inline methods): Add "sg" method.
+ (Customizing Completion): Add function `tramp-parse-etc-group'.
- * test/etags/lua-src/test.lua (test): Add tests for indented
- function definitions.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to the modified Lua tests.
+ * lisp/net/tramp-sh.el (tramp-methods) <sg>: Add. (Bug#22329)
+ (tramp-completion-function-alist-sg): New defconst.
+ (top): Completion function for "sg" is
+ `tramp-completion-function-alist-sg'.
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+ * lisp/net/tramp.el (tramp-completion-function-alist): Adapt docstring.
+ (tramp-parse-etc-group, tramp-parse-etc-group-group): New defuns.
- Fix 'this-command-keys' wrt prefix argument
+2016-01-14 Michael Albinus <michael.albinus@gmx.de>
- * src/keyboard.c (command_loop_1): Restore the feature whereby C-u
- was part of this-command-keys, but not of this-single-command-keys.
- (Bug#22107)
+ Remove XEmacs compatibility in Tramp
+
+ * doc/misc/tramp.texi: Replace flags by their hard coded name.
+ Remove unused flags and the enclosed alternative text for XEmacs.
+
+ * doc/misc/trampver.texi: Use "Tramp" CamelCase. Rename "emacs"
+ and "xemacs" flags to "unified" and "separate". Remove flags
+ "emacsgw", "emacsname", "emacsdir", "ftppackagename",
+ "emacsothername", "emacsotherdir" and "emacsotherfilename".
+ (trampver):
+ * lisp/net/trampver.el (tramp-version): Set to "2.3.0-pre".
+
+ * lisp/net/tramp.el (bkup-backup-directory-info)
+ (directory-sep-char, ls-lisp-use-insert-directory-program)
+ (outline-regexp, tramp-backup-directory-alist)
+ (tramp-default-method, tramp-shell-prompt-pattern, tramp-syntax)
+ (tramp-file-name-regexp-unified)
+ (tramp-file-name-regexp-separate)
+ (tramp-completion-file-name-regexp-unified)
+ (tramp-completion-file-name-regexp-separate, tramp-chunksize)
+ (tramp-get-method-parameter, tramp-find-method, tramp-find-user)
+ (tramp-debug-message, tramp-progress-reporter-update)
+ (with-tramp-progress-reporter)
+ (tramp-rfn-eshadow-setup-minibuffer)
+ (rfn-eshadow-setup-minibuffer-hook, tramp-unload-hook)
+ (tramp-rfn-eshadow-update-overlay)
+ (rfn-eshadow-update-overlay-hook, tramp-default-file-modes)
+ (tramp-file-name-for-operation)
+ (tramp-completion-file-name-handler)
+ (tramp-autoload-file-name-handler, tramp-completion-mode-p)
+ (tramp-handle-directory-files)
+ (tramp-handle-directory-files-and-attributes)
+ (tramp-handle-dired-uncache, tramp-handle-find-backup-file-name)
+ (tramp-handle-insert-file-contents, tramp-handle-load)
+ (tramp-handle-shell-command)
+ (tramp-handle-verify-visited-file-modtime)
+ (tramp-handle-file-notify-valid-p, tramp-accept-process-output)
+ (tramp-check-for-regexp, tramp-wait-for-regexp)
+ (tramp-send-string, tramp-mode-string-to-int)
+ (tramp-get-local-gid, tramp-check-cached-permissions)
+ (tramp-get-remote-tmpdir, tramp-make-tramp-temp-file)
+ (auto-save-file-name-transforms)
+ (tramp-handle-make-auto-save-file-name, tramp-read-passwd)
+ (tramp-clear-passwd, tramp-time-diff):
+ * lisp/net/tramp-adb.el (directory-listing-before-filename-regexp)
+ (directory-sep-char, tramp-adb-file-name-handler-alist)
+ (tramp-adb-parse-device-names)
+ (tramp-adb-handle-expand-file-name)
+ (tramp-adb-handle-file-truename, tramp-adb--gnu-switches-to-ash)
+ (tramp-adb-handle-file-local-copy)
+ (tramp-adb-handle-write-region, tramp-adb-handle-set-file-modes)
+ (tramp-adb-handle-rename-file, tramp-adb-handle-process-file)
+ (tramp-adb-handle-shell-command)
+ (tramp-adb-handle-start-file-process, tramp-adb-get-device)
+ (tramp-adb-maybe-open-connection):
+ * lisp/net/tramp-cache.el (tramp-persistency-file-name)
+ (tramp-cache-print):
+ * lisp/net/tramp-cmds.el (tramp-cleanup-all-connections)
+ (tramp-bug, tramp-reporter-dump-variable)
+ (tramp-load-report-modules, tramp-append-tramp-buffers):
+ * lisp/net/tramp-compat.el (tramp-compat-funcall)
+ (tramp-advice-file-expand-wildcards)
+ (tramp-compat-temporary-file-directory)
+ (tramp-compat-make-temp-file, tramp-compat-copy-file)
+ (tramp-compat-delete-directory, )
+ (tramp-compat-process-running-p):
+ * lisp/net/tramp-ftp.el (tramp-methods) <ftp>:
+ (tramp-default-method-alist, tramp-foreign-file-name-handler-alist):
+ * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist)
+ (tramp-gvfs-do-copy-or-rename-file, tramp-gvfs-handle-copy-file)
+ (tramp-gvfs-handle-file-local-copy)
+ (tramp-gvfs-handle-file-name-all-completions)
+ (tramp-gvfs-handle-file-notify-add-watch)
+ (tramp-gvfs-monitor-file-process-filter)
+ (tramp-gvfs-handle-file-readable-p)
+ (tramp-gvfs-handle-rename-file, tramp-gvfs-handle-write-region)
+ (tramp-gvfs-file-name, tramp-gvfs-handler-askquestion)
+ (tramp-gvfs-maybe-open-connection)
+ (tramp-gvfs-parse-device-names):
+ * lisp/net/tramp-gw.el (tramp-gw-aux-proc-sentinel)
+ (tramp-gw-open-connection, tramp-gw-open-network-stream):
+ * lisp/net/tramp-sh.el (directory-sep-char)
+ (tramp-sh-file-name-handler-alist)
+ (tramp-sh-handle-file-truename)
+ (tramp-sh-handle-set-visited-file-modtime)
+ (tramp-sh-handle-verify-visited-file-modtime)
+ (tramp-sh-handle-set-file-modes, tramp-sh-handle-set-file-times)
+ (tramp-sh-handle-file-acl)
+ (tramp-sh-handle-file-name-all-completions)
+ (tramp-sh-handle-copy-file, tramp-sh-handle-rename-file)
+ (tramp-do-copy-or-rename-file-directly)
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (dired-compress-file-suffixes, dired-remove-file)
+ (tramp-sh-handle-dired-compress-file)
+ (tramp-sh-handle-insert-directory)
+ (tramp-sh-handle-expand-file-name)
+ (tramp-sh-handle-start-file-process)
+ (tramp-sh-handle-process-file, tramp-sh-handle-file-local-copy)
+ (tramp-sh-handle-write-region, tramp-sh-handle-vc-registered)
+ (tramp-sh-handle-file-notify-add-watch)
+ (tramp-sh-gvfs-monitor-dir-process-filter)
+ (tramp-sh-inotifywait-process-filter, tramp-maybe-send-script)
+ (tramp-find-executable)
+ (tramp-open-connection-setup-interactive-shell)
+ (tramp-find-inline-encoding, tramp-compute-multi-hops)
+ (tramp-maybe-open-connection, tramp-convert-file-attributes)
+ (tramp-get-remote-path, tramp-get-remote-touch):
+ * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist)
+ (tramp-smb-handle-copy-directory, tramp-smb-handle-copy-file)
+ (tramp-smb-handle-delete-directory)
+ (tramp-smb-handle-directory-files, tramp-smb-handle-file-acl)
+ (tramp-smb-handle-make-directory-internal)
+ (tramp-smb-handle-process-file, tramp-smb-handle-rename-file)
+ (tramp-smb-handle-set-file-acl, tramp-smb-handle-set-file-modes)
+ (tramp-smb-handle-write-region, tramp-smb-get-file-entries)
+ (tramp-smb-get-cifs-capabilities)
+ (tramp-smb-maybe-open-connection):
+ * lisp/net/trampver.el (tramp-repository-get-version):
+ Remove XEmacs compat code.
+
+ * lisp/net/tramp-cmds.el (mml-mode, mml-insert-empty-tag)
+ (reporter-dump-variable): Declare functions.
+
+ * lisp/net/tramp.el (tramp-bkup-backup-directory-info)
+ (tramp-advice-minibuffer-electric-separator)
+ (tramp-advice-minibuffer-electric-tilde)
+ (tramp-handle-unhandled-file-name-directory):
+ * lisp/net/tramp-compat.el (tramp-compat-with-temp-message)
+ (tramp-compat-font-lock-add-keywords)
+ (tramp-compat-load, tramp-compat-number-sequence)
+ (tramp-compat-split-string, tramp-compat-delete-dups):
+ * lisp/net/tramp-sh.el (tramp-sh-handle-insert-file-contents-literally):
+ Remove.
- * lisp/simple.el (internal-echo-keystrokes-prefix): Add
- commentary about the function's return value.
+ * lisp/net/tramp-sh.el (tramp-methods) <psftp>: This does not work
+ recursively.
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+2016-01-14 K. Handa <handa@gnu.org>
- * lisp/files.el (load-library): Doc fix. (Bug#22140)
+ fix previous change of src/ftfont.c (ftfont_shape_by_flt)
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+ * src/ftfont.c (ftfont_shape_by_flt): Fix previous change. Access the
+ second glyph only when there are enough glyphs.
- Improve and document Ruby support in 'etags'
+2016-01-13 Glenn Morris <rgm@gnu.org>
- * lib-src/etags.c (Ruby_suffixes): Add ".ruby".
- (Ruby_functions): Support "module" and overloaded operators.
- (Ruby_help): Mention "module".
+ * src/buffer.c (Fset_buffer_major_mode): Allow default major-mode,
- * test/etags/ruby-src/test.rb:
- * test/etags/ruby-src/test1.ru: New files.
- * test/etags/Makefile (RBSRC): New tests.
- (SRCS): Add ${RBSRC}.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to the new Ruby tests.
+ or its hook, to move point. (Bug#22348)
- * doc/man/etags.1: Mention Ruby support.
- * etc/NEWS: Mention Ruby support.
+2016-01-12 Michael Albinus <michael.albinus@gmx.de>
-2015-12-11 Xi Lu <lx@shellcodes.org>
+ Merge missing commit from emacs-25 branch
- Initial support for Ruby in 'etags'
+ * test/Makefile.in (SELECTOR_DEFAULT, SELECTOR_EXPENSIVE, SELECTOR):
+ New variables.
+ (check-expensive, check-doit): New targets.
- * lib-src/etags.c <Ruby_suffixes>: New variable.
- (lang_names): Add an entry for Ruby.
- (Ruby_functions): New function. (Bug#22116)
+ * Makefile.in (check-expensive): New target.
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+ * test/lisp/autorevert-tests.el
+ (auto-revert-test01-auto-revert-several-files):
+ * test/lisp/filenotify-tests.el (file-notify--deftest-remote)
+ (file-notify-test06-many-events):
+ * test/lisp/net/tramp-tests.el (tramp-test26-process-file)
+ (tramp-test27-start-file-process, tramp-test28-shell-command)
+ (tramp-test29-vc-registered)
+ (tramp-test31-special-characters-with-stat)
+ (tramp-test31-special-characters-with-perl)
+ (tramp-test31-special-characters-with-ls)
+ (tramp-test32-utf8-with-stat, tramp-test32-utf8-with-perl)
+ (tramp-test32-utf8-with-ls, tramp-test33-asynchronous-requests)
+ (tramp-test35-unload): Tag the tests as :expensive-test.
- Clarify documentation of 'modify-frame-parameters'
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ 1f6898d test/automated/vc-hg.el: Support out-of-tree build
+ 3adb56e Minor change in tramp-tests.el
+ 2b535ba ; * etc/NEWS: Update the js.el entry.
+ 76b518c * etc/HELLO: Add Armenian and Mongolian greetings.
+ b51f1ef Java Mode: Fontify identifiers in the presence of annotations.
+ 36b9539 Avoid an infloop when we run out of memory
+ 2006752 Avoid unnecessary failures of auto-saving after fatal error
+ eef6784 Simplify HAVE_MODULES use in mark_maybe_pointer
+ 552694a Revert attempt to use 'noexcept' in typedef
+ 6ad0d39 Update documentation of 'indirect-function'
+ c6a5314 ; * etc/NEWS: Move entry of 'inhibit-point-motion-hooks'.
+ 303141a Update documentation for obsoleting 'syntax-begin-function'
+ 4e6f61c ; * etc/NEWS: Mark documented and not-to-be-documented entries.
+ e667bbb Document new features if Eshell
+ 9c4e4e0 ; * etc/NEWS: Update EUDC entries.
+ 1089dc9 Handle too long commands in Tramp
+ 684eb58 * .gitattributes: *.cur and *.pif are binary files too.
+ d2c7fda * src/alloc.c (mark_maybe_pointer): HAVE_MODULES may be undefined
+ bd3f53d * sh-script.el (sh-smie-sh-rules): Improve indentation inside $(...)
+ 09b2b8a * src/alloc.c (mark_maybe_pointer): Also check wide-int's emacs_value
+ cca0f93 ; Account for spaces before the filename
+ c71e1e8 Use short date for 'hg annotate', and output the author
+ f50027b Spelling fix
+ c7dff67 ; * etc/NEWS: Fix the Xref entries that got separated.
+ cc140bc Document user-level functions in project.el
+ f8208b6 Document the user-level features of the Xref package
+ b131fb8 * loading.texi: Add `define-type' entry for load-history
+ db3c2a8 Improve doc strings and prompts in xref.el
+ f6117ef Allow the use of `font-lock-extend-region-multiline' in CC Mode.
+ 90fd798 Fix coding system for Tramp on OS X.
+ e985a0e ; * etc/NEWS: Mark the 'check-expensive' entry not to be documented.
+ 9dfcbf0 Update 'load-history' docs
+ 207e191 Fix (error ...) error
+ 457738f Correctly analyze brace arguments in templated C++ function declarations.
+ d57724a * lisp/cedet/mode-local.el (describe-function-orig-buffer): Declare.
+ 2a9532d * lisp/ffap.el (ffap-latex-mode): Avoid free variable.
+ 1a6b084 * lisp/play/dunnet.el (dun-fix-screen): Avoid `end-of-buffer`.
+ 8be046f Respect fontification region calculated by major mode. Fixes bug #22316.
+ 4b37cba Improve documentation of Delete Selection mode
+ a034dd3 Fix two project-find-file issues
+ 30abf29 Clarify doc string of 'dired-current-directory'
+ e990bb2 Use the face of preceding text for displaying the ellipsis
+ 5810ac3 Suppress Chinese file name test for OSX in tramp-tests.el
+ eeb710a ; * lisp/startup.el: Sentences end with two spaces.
+ 428b3de * admin/admin.el (set-version): Also handle the NEWS file.
+ 648de81 ; Add NEWS entry for project.el
+ 671862f apropos-library: Skip obvious duplicates; don't error on generics
+ 51668a5 ; Grammar fix
+ ed41d11 Add project-find-file and project-or-external-find-file
+ 056da45 ; Improve commentary in 'setup_for_ellipsis'
+ 269d008 ; Improve docstring for `inhibit-startup-echo-area-message'
+
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ ce4a052 Add defvar-local to lisp-imenu-generic-expression
+ a0121bc Revert commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd
+ 76fe2d5 * lisp/emacs-lisp/autoload.el (autoload-find-destination): Doc fix.
+ 1ae088f * lisp/emacs-lisp/autoload.el (autoload-find-destination):
+ b6b47af Properly encode/decode base64Binary data in SOAP
+ c632466 Obey coding-system-for-write when writing stdout/stderr in batch
+ 2f32cb5 * doc/misc/efaq.texi (Packages that do not come with Emacs):
+ Update the URI of MELPA and marmalade-repo.
+ Reported by CHENG Goa <chenggao@royau.me> in
+ https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00390.html.
+ d2937aa * lisp/progmodes/opascal.el (opascal-mode-syntax-table):
+ 5330c25 * lisp/progmodes/xscheme.el (xscheme-prompt-for-expression-exit):
+ 7380990 Remove function wrongly on AWK Mode value of context
+ fontification hook.
+ d400753 * src/buffer.c: Stick with ASCII in doc string.
+ 221240c Reword transient-mark-mode doc string
+ 977d3ea Update doc string of 'selective-display'
+ 229c3fa Make C++ buffers writeable when writing their initial text
+ properties.
+ f5c762c Additional changes for "make check-expensive"
+ 1729cf3 ; * admin/MAINTAINERS: Remove myself.
+ 33219d3 Apply text properties for <, > in new after-change function
+ (C++ Java Modes).
+
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ 9fb185a shr-tag-video bug fix
+ 6300655 Minor fixes in tramp-tests.el
+ 50575b1 Ensure redisplay when 'truncate-lines' is set
+ 0d9e80d Fix a doc string of 'transient-mark-mode'
+ 0000ae5 MS-Windows followup to latest gnulib update
+ 4bc5e02 Spelling fix
+ f1093f7 Do secure signed Bcc handling
+
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ 861022f * doc/misc/texinfo.tex: Revert unwanted copyright change.
+ 46e47a5 ; * etc/refcards/ru-refcard.tex (cyear): Update via M-x set-copyright.
+ 71ea138 * lisp/align.el (align): Simplify a lambda
+ 5618a50 * lisp/align.el (align): Fix arg order in call to `align-region'
+ 1f680db Fix compilation next-error in buffers with selective-display
+ d20a948 * nsm.el (nsm-check-protocol): Fix typo in the message.
+ 1da116f Add SHA1 warnings for high network security settings
+ e48bacd ; * etc/NEWS: Typo fix.
+
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ 43662a2 ; Clarify that xref is still experimental
+ 0a6e6ca ; * admin/release-process: Remove some obsolete records.
+ c2e9e3d * lisp/progmodes/fortran.el (fortran-make-syntax-propertize-function):
+ 8637f3d (semantic-symref-derive-find-filepatterns): Return a list
+ 0a7ad07 ; Re-arrange xref-related entries in NEWS.
+ fe903ef Fix xref-find-references on MS-Windows
+ 55a28d8 ; Fixed visual bell artifact problem on NextStep.
+ d064034 Document new features of tildify-mode
+ 964bea7 Document new features of Whitespace mode
+ cd68f47 Improve documentation of new Hide-IfDef features
+ 723b8bf Fix regression in font-locking cl-assert and cl-check-type
+
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ ef33bc7 Spelling and grammar fixes
+ 9c3dbab Fix copyright years by hand
+ 0e96320 Update copyright year to 2016
+
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ 9ee6ecb lisp/emacs-lisp/chart.el (chart-new-buffer): Move to silence byte compiler.
+ 526d80c Port chart.el methods to cl-generic.
+ 410bb69 Add nt/INSTALL.W64 build instructions
+ 8f5b524 Add new input method 'programmer-dvorak'
+ 6d11f6e Allow to invoke original M-TAB binding in 'flyspell-prog-mode'
+ bb83bb1 Fix EWW rendering of long RTL lines
+ b1a8509 fix bug#21054
+ ce5ad12 Clean up cairo printing code
+
+2016-01-12 John Wiegley <johnw@newartisans.com>
+
+ Merge from origin/emacs-25
+
+ 6ee327d Add handle_user_signal_hook
+ 47580e0 Avoid writing to purespace
+ 0588be7 Remove unused variable
+ 89e7483 * configure.ac: Find libxml2 headers in Xcode SDK dir on Darwin.
+ 3b95e9c Use posix_openpt instead of openpty on Darwin
+ 86312ff Document support for ':documentation' in Lisp mode
+ c930e75b Document new features of TeX mode
+ 7c83d84 Clarify docs of hscroll in RTL text
+ 4c8f8db Fix rendering of HTML pages that use character composition
+ a8d37ca Avoid some compiler warnings in w32.c
+ ce106f3de Undo ill-advised change
+ be0bba4 Unbreak completion in python-mode buffers
- * doc/lispref/frames.texi (Parameter Access): Clarify what "ignored
- PARMs" mean for 'modify-frame-parameters'.
+2016-01-11 Dmitry Gutov <dgutov@yandex.ru>
- * src/frame.c (Fmodify_frame_parameters): Clarify what "ignored
- PARMs" mean for this function. (Bug#22104)
+ test/automated/vc-hg.el: Support out-of-tree build
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+ * test/automated/vc-hg.el
+ (vc-hg-annotate-extract-revision-at-line-with-filename)
+ (vc-hg-annotate-extract-revision-at-line-with-both):
+ Don't refer to source-directory.
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00755.html
- Fix setting buffer unibyte when reading from a device
+2016-01-11 Michael Albinus <michael.albinus@gmx.de>
- * src/fileio.c (Finsert_file_contents): Call Fset_buffer_multibyte
- to make a (possibly non-empty) buffer unibyte. (Bug#22096)
+ Minor change in tramp-tests.el
-2015-12-11 Eli Zaretskii <eliz@gnu.org>
+ * test/automated/tramp-tests.el (tramp-test29-vc-registered):
+ Use `dired-uncache' instead of a Tramp internal function.
- Clarify documentation of 'values'
+2016-01-11 Peter Feigl <peter.feigl@nexoid.at>
- * doc/lispref/eval.texi (Eval): Clarify that 'values' are not
- updated by any evaluation commands in 'lisp-interaction-mode'.
- (Bug#22056)
+ * etc/HELLO: Add Armenian and Mongolian greetings.
-2015-12-11 Anders Lindgren <andlind@gmail.com>
+ (Bug#22346)
- Fixed subversion vc error when opening file in new directory (bug#21984).
+2016-01-11 Alan Mackenzie <acm@muc.de>
- * lisp/vc/vc-svn.el (vc-svn-registered): Check if directory exists.
+ Java Mode: Fontify identifiers in the presence of annotations.
-2015-12-09 Eli Zaretskii <eliz@gnu.org>
+ * lisp/progmodes/cc-engine.el (c-forward-annotation): Tidy up the coding:
+ Don't move point when the defun fails.
+ (c-forward-decl-or-cast-1): Correct a usage of match data.
- Yet another fix for when point ends up in invisible text
+ * lisp/progmodes/cc-fonts.el (c-font-lock-maybe-decl-faces): Remove.
+ (c-font-lock-declarations): Use the new c-maybe-decl-faces in place of the
+ removed variable.
- * src/xdisp.c (redisplay_window): When someone forced
- window-start, and honoring that failed to show the cursor, try
- moving out of invisible text, before falling back to the middle of
- the window. (Bug#22098)
+ * lisp/progmodes/cc-langs.el (c-maybe-decl-faces): New language variable.
-2015-12-09 Michael Albinus <michael.albinus@gmx.de>
+2016-01-11 Eli Zaretskii <eliz@gnu.org>
- Fix error in Tramp perl script for cygwin
+ Avoid an infloop when we run out of memory
- * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not raise an
- error if file doesn't exist.
+ * src/alloc.c (garbage_collect_1): Don't bother saving and
+ restoring the echo-area message if we are GC'ing after running out
+ of memory. This avoids an infloop due to repeated attempts to
+ allocate memory for the cons cell needed to save the message,
+ which signals the memory-full error, which attempts to save the
+ echo-area message, which signals memory-full again, etc.
-2015-12-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2016-01-11 Eli Zaretskii <eliz@gnu.org>
- Remove font workaround for limited outdated versions
+ Avoid unnecessary failures of auto-saving after fatal error
- * src/macfont.m (mac_font_descriptor_get_adjusted_weight): Remove
- workaround for HiraginoSans-W7 on OS X 10.11 and 10.11.1.
+ * src/w32.c (map_w32_filename): Avoid non-trivial system calls for
+ the benefit of FAT volumes if we are called as part of shutting
+ down due to a fatal error, which probably means we are trying to
+ auto-save the session.
+ * src/lread.c (check_obarray): Don't bother making the obarray
+ valid if we are shutting down due to a fatal error. This avoids
+ interfering with auto-saving the crashed session.
-2015-12-09 Anders Lindgren <andlind@gmail.com>
+2016-01-11 Paul Eggert <eggert@cs.ucla.edu>
- Don't add "." to load path (bug#21104)
+ Simplify HAVE_MODULES use in mark_maybe_pointer
- When configured with --enable-locallisppath=no, which is the
- default for OS X, the load-path incorrectly was populated with ".".
+ * src/alloc.c (HAVE_MODULES): Now a constant 0 if not defined,
+ so that later code can use 'if' rather than '#ifdef'.
+ (mark_maybe_pointer): Simplify based on HAVE_MODULES now
+ always working.
- * src/lread.c (init_lread): Don't call `decode_env_path' when
- PATH_SITELOADSEARCH is empty.
+2016-01-11 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-08 Artur Malabarba <bruce.connor.am@gmail.com>
+ Revert attempt to use 'noexcept' in typedef
- * lisp/emacs-lisp/package.el (package--with-response-buffer):
+ This use of 'noexcept' runs afoul of the C++11 standard.
+ Problem reported by Philipp Stephani in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00706.html
+ * src/emacs-module.c (emacs_finalizer_function):
+ Move this typedef here ...
+ * src/emacs-module.h: ... from here, and use only the C
+ version of the typedef. The typedef is now private since it
+ is never used in the .h file now and anyway it seemed to be
+ causing more confusion than it cured.
+ (make_user_ptr, get_user_finalizer, set_user_finalizer):
+ Open-code the type instead.
- Search for the blank-line in the right buffer.
+2016-01-10 Eli Zaretskii <eliz@gnu.org>
-2015-12-08 Glenn Morris <rgm@gnu.org>
+ Update documentation of 'indirect-function'
- * test/automated/simple-test.el (undo-auto-boundary-timer): Update
- for recent change.
+ * doc/lispref/eval.texi (Function Indirection): Update the
+ documentation of 'indirect-function'.
-2015-12-08 Glenn Morris <rgm@gnu.org>
+2016-01-10 Eli Zaretskii <eliz@gnu.org>
- Fix some display-warning usage.
+ Update documentation for obsoleting 'syntax-begin-function'
- * lisp/files.el (hack-local-variables, hack-dir-local-variables):
- * lisp/calendar/diary-lib.el (diary-include-files, diary-sexp-entry):
- * lisp/calendar/holidays.el (calendar-holiday-list):
- * lisp/mail/rmailout.el (rmail-output-read-file-name):
- Fix display-warning usage.
+ * doc/lispref/syntax.texi (Position Parse): Undocument
+ 'syntax-begin-function' that is now obsolete.
-2015-12-08 Glenn Morris <rgm@gnu.org>
+2016-01-10 Eli Zaretskii <eliz@gnu.org>
- * lisp/calendar/cal-html.el: Require diary-lib.
+ Document new features if Eshell
- (cal-html-list-diary-entries): Handle no diary. (Bug#21994)
+ * doc/misc/eshell.texi (Input/Output): Document the new
+ '#<bufname>' syntax.
+ (Input/Output): Document 'eshell-destroy-buffer-when-process-dies'.
+ Disable "Key Index" generation, as there are no @kindex entries in
+ this manual.
-2015-12-08 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+2016-01-10 Michael Albinus <michael.albinus@gmx.de>
- Add Obsolete-since header to eudcb-ph.el
+ Handle too long commands in Tramp
- * lisp/obsolete/eudcb-ph.el: Add Obsolete-since header.
+ * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link)
+ (tramp-do-file-attributes-with-ls): Send sequence of commands, in
+ order to not exceed shell command line limit.
-2015-12-07 Paul Eggert <eggert@cs.ucla.edu>
+ * test/automated/tramp-tests.el (tramp--test-darwin-p): Remove.
+ (tramp--test-utf8): Include Arabic file name, again.
- Spelling fixes
+2016-01-10 Paul Eggert <eggert@cs.ucla.edu>
- * doc/misc/calc.texi (Predefined Units): Use the bland modern
- scientific style for spelling the units “ampere” and
- “angstrom” rather than the older style “Ampere” and
- “Ångstrom”. The latter spelling was wrong anyway (it should
- have been “Ångström”).
- * lisp/emacs-lisp/ert.el (ert--explain-equal-rec):
- Fix misspelling of ‘atom’ in code.
+ * .gitattributes: *.cur and *.pif are binary files too.
-2015-12-07 Eli Zaretskii <eliz@gnu.org>
+2016-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
- Improve documentation of kill commands
+ * src/alloc.c (mark_maybe_pointer): HAVE_MODULES may be undefined
- * lisp/simple.el (region-extract-function, delete-backward-char)
- (delete-forward-char, kill-region, copy-region-as-kill)
- (kill-ring-save): Better document the optional argument REGION in
- the doc strings. Mention in the doc strings that text put in the
- kill-ring can be filtered by 'filter-buffer-substring'.
+2016-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
- * doc/lispref/text.texi (Kill Functions): Mention that functions
- described in this subsection can filter text they put in the
- kill-ring. Add a cross-reference to "Buffer Contents" and an
- index entry. Document the optional argument 'region' and its
- effect.
- (Bug#21315)
+ * sh-script.el (sh-smie-sh-rules): Improve indentation inside $(...)
-2015-12-07 Alan Mackenzie <acm@muc.de>
+ * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Improve indentation
+ within $(...).
+ * test/indent/shell.sh: Add corresponding test.
- Further progress making Isearch, Ispell, Replace work with Follow Mode.
+2016-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
- * lisp/follow.el: (follow-mode): Remove references to sit*-for-function, which
- no longer exists. Add follow-post-command-hook to three special purpose
- hooks at setup, and remove them at tear down.
+ * src/alloc.c (mark_maybe_pointer): Also check wide-int's emacs_value
- * lisp/isearch.el: (isearch-update): invoke isearch-update-post-hook before
- isearch-lazy-highlight-new-loop.
- (isearch-lazy-highlight-new-loop): Restore this function to what it previously
- was, merging the functionality of isearch-lazy-highlight-maybe-new-loop into
- it.
- (isearch-lazy-highlight-maybe-new-loop): function removed.
+ (mark_memory): Simplify loop. Don't assume a pointer-sized word can be
+ cast to Lisp_Object.
- * lisp/replace.el: (replace-update-post-hook): New hook variable.
- (perform-replace): Add second (nil) argument to looking-back. Invoke
- replace-update-post-hook before calling replace-highlight.
+2016-01-09 Dmitry Gutov <dgutov@yandex.ru>
- * lisp/textmodes/ispell.el: (ispell-update-post-hook): New hook variable.
- (ispell-command-loop): invoke ispell-update-post-hook. Add GROUP argument to
- call of pos-visible-in-window-p.
- (ispell-display-buffer): Place *Choices* window at the top of the last window
- in a window group.
+ Use short date for 'hg annotate', and output the author
-2015-12-07 Alan Mackenzie <acm@muc.de>
+ * lisp/vc/vc-hg.el (vc-hg-annotate-command):
+ Change '-d' to '-dq'. (Bug#21805)
+ (vc-hg-annotate-switches): Default to "-u" "--follow".
+ (vc-hg-annotate-re): Update to recognize the short date format
+ and the optional username.
+ (vc-hg-annotate-time)
+ (vc-hg-annotate-extract-revision-at-line): Update accordingly.
- Amend doc of `mapconcat': it can take sequences, not merely strings.
+ * test/automated/vc-hg.el: New file.
- * doc/lispref/functions.texi (Mapping Functions): Amend the doc of `mapconcat'
- to say that SEPARATOR and the results from FUNCTION may be any character
- sequences, not just strings. Add an @xref to "Sequences Arrays Vectors".
+2016-01-09 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-07 Michael Albinus <michael.albinus@gmx.de>
+ Spelling fix
- Fix an utf8 problem for Tramp on BSD
+2016-01-09 Eli Zaretskii <eliz@gnu.org>
- * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
- Make lax check for utf8.
- (tramp-get-remote-locale): Add "en_US.UTF-8" as candidate.
+ Document user-level functions in project.el
-2015-12-07 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+ * lisp/progmodes/project.el (project-find-file)
+ (project-or-external-find-file): Add doc strings.
- Make eudcb-ph.el obsolete
+2016-01-09 Eli Zaretskii <eliz@gnu.org>
- * doc/misc/eudc.texi: Bump version to 1.40.0.
- Remove PH/QI sections and mentions.
- * lisp/obsolete/eudcb-ph.el: Make obsolete.
- * lisp/net/eudc-vars.el (eudc-known-protocols): Remove ph.
- (eudc-ph-bbdb-conversion-alist): Make obsolete.
- * etc/NEWS: Mention this. (Bug#21191)
+ Document the user-level features of the Xref package
-2015-12-07 Paul Eggert <eggert@cs.ucla.edu>
+ * doc/emacs/maintaining.texi (Maintaining): Add a list of
+ described features.
+ (Xref): New section, made out of thoroughly rewritten "Tags"
+ section.
+ (Find Identifiers, Looking Up Identifiers, Xref Commands)
+ (Identifier Search, List Identifiers): New subsections,
+ incorporating the old tags commands and the new xref commands.
+ (Tags Tables, Tag Syntax, Create Tags Table, Etags Regexps):
+ Section and subsections demoted to a lower level.
+ * doc/emacs/search.texi (Search):
+ * doc/emacs/windows.texi (Pop Up Window):
+ * doc/emacs/frames.texi (Creating Frames):
+ * doc/emacs/programs.texi (Imenu, Symbol Completion):
+ * doc/emacs/building.texi (Grep Searching):
+ * doc/emacs/dired.texi (Operating on Files):
+ * doc/emacs/glossary.texi (Glossary): All references to tags changed.
- Remove overenthusiastic eassert
+2016-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
- * src/lisp.h (XSYMBOL): Remove eassert incorrectly added in
- previous change. It breaks on MS-Windows --with-wide-int.
- Problem reported by Eli Zaretskii in:
- http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00275.html
+ * loading.texi: Add `define-type' entry for load-history
-2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+ * doc/lispref/loading.texi (Where Defined): Remove incorrect
+ cl-defmethod description, and add missing define-type entry.
- Pacify gcc -Wparentheses
+2016-01-09 Eli Zaretskii <eliz@gnu.org>
- * src/xdisp.c (row_containing_pos): Reparenthesize.
+ Improve doc strings and prompts in xref.el
-2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/progmodes/xref.el (xref-backend-functions)
+ (xref-find-definitions): Doc fixes.
+ (xref-query-replace): Doc fix. Improve prompts for arguments.
- Port mod-test to 32-bit Emacs --without-wide-int
+2016-01-09 Alan Mackenzie <acm@muc.de>
- * modules/mod-test/test.el (mod-test-sum-test):
- Bring back the 2**29 tests, but port them to 32-bit Emacs
- --without-wide-int.
+ Allow the use of `font-lock-extend-region-multiline' in CC Mode.
-2015-12-06 Michael Albinus <michael.albinus@gmx.de>
+ * lisp/progmodes/cc-mode.el (c-font-lock-init): Remove
+ `font-lock-extend-regions-wholelines' from
+ `font-lock-extend-region-functions' rather than setting the latter to
+ nil.
- Fix minor Tramp problems found on BSD
+2016-01-09 Michael Albinus <michael.albinus@gmx.de>
- * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not append
- trailing slash. Quote apostrophes.
- (tramp-sh-handle-file-truename): Do not append trailing slash in
- the "ls" case.
- (tramp-get-ls-command-with-w-option): New defun.
- (tramp-do-file-attributes-with-ls)
- (tramp-do-directory-files-and-attributes-with-stat): Use it.
+ Fix coding system for Tramp on OS X.
- * test/automated/tramp-tests.el
- (tramp-test31-special-characters-with-perl)
- (tramp-test31-special-characters-with-ls)
- (tramp-test32-utf8-with-perl, tramp-test32-utf8-with-ls):
- Suppress also readlink.
+ * lisp/net/tramp-compat.el: Require ucs-normalize.
-2015-12-06 Eli Zaretskii <eliz@gnu.org>
+ * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Set coding system to `utf-8-hfs' for Mac OS X.
- Fix cursor display when invisible text is at line beginning
+ * test/automated/tramp-tests.el (tramp-test29-vc-registered):
+ Flush directory properties when needed.
+ (tramp--test-utf8): Include Chinese file name, again.
- * src/xdisp.c (redisplay_window): When scrolling fails to show
- point, prefer using the desired matrix if possible for finding the
- fallback glyph row for displaying the cursor. (Bug#22098)
- (row_containing_pos): Exit the loop as soon as we hit the first
- disabled glyph row. Otherwise we risk accessing garbled data and
- departing to the no-no land.
+2016-01-09 Eli Zaretskii <eliz@gnu.org>
-2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+ Update 'load-history' docs
- Improve module interface when WIDE_EMACS_INT
+ * doc/lispref/loading.texi (Where Defined): Update the list of
+ forms in 'load-history' by adding the forms created for the
+ 'cl-generic' generics. (Bug#21422)
- * src/emacs-module.c (plain_values): New constant.
- (module_nil): Now a constant.
- (Finternal_module_call, value_to_lisp_bits, lisp_to_value_bits)
- (syms_of_module): Use if, not #ifdef, so that both sides are
- checked at compile-time, and so that GCC doesn’t complain
- about an unused var in the typical case. Also, depend on
- plain_values, not on WIDE_EMACS_INT; the code shouldn’t assume
- that WIDE_EMACS_INT implies !USE_LSB_TAG.
- (value_to_lisp_bits, lisp_to_value_bits): New functions.
- Sign-extend integers rather than zero-extending them, as small
- negative integers are more likely.
- (value_to_lisp, lisp_to_value): Rewrite in terms of the new *_bits
- functions.
- (HAVE_STRUCT_ATTRIBUTE_ALIGNED): Define to 0 if not already defined.
- (mark_modules): Remove. All uses removed.
- (lisp_to_value): Don’t assume Fcons returns a pointer aligned
- to GCALIGNMENT.
- (syms_of_module): Check that module_nil converts to Qnil.
- * src/lisp.h (lisp_h_XSYMBOL, XSYMBOL): Use signed conversion, since
- we prefer signed to unsigned when either will do.
- (TAG_PTR): Sign-extend pointers when USE_LSB_TAG, as this is
- a bit better for emacs-module.c.
+2016-01-08 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+ Fix (error ...) error
- Port mod-test to x86-64 GNU/Linux running 32-bit
+ Problem reported by Glenn Morris in:
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00561.html
+ * lisp/vc/add-log.el (change-log-goto-source): Fix typos
+ introduced in my Aug 28 change, where I got confused by the
+ two meanings of (error ...).
- * modules/mod-test/test.el (mod-test-sum-test):
- Don’t attempt to match descriptions to operating systems.
- It didn’t work on Fedora x86-64 running a 32-bit executable,
- and it’s not worth the trouble anyway.
- Port to 32-bit platforms by removing an assumption about
- fixnum widths.
+2016-01-08 Alan Mackenzie <acm@muc.de>
-2015-12-06 Michael Albinus <michael.albinus@gmx.de>
+ Correctly analyze brace arguments in templated C++ function declarations.
- Fix auto-revert-tests.el when filenotify isn't used
+ * lisp/progmodes/cc-defs.el (c-go-list-forward, c-go-list-backward): add
+ POS and LIMIT parameters, like the other c-go-list-* functions have.
- * test/automated/auto-revert-tests.el (auto-revert--wait-for-revert):
- Make it working also when filenotify isn't used.
+ * lisp/progmodes/cc-engine.el (c-restore-<>-properties): Check backwards
+ for a ?\( rather than a ?<. (c-looking-at-inexpr-block): Handle names
+ followed by template specifiers.
-2015-12-06 Juri Linkov <juri@linkov.net>
+2016-01-08 Glenn Morris <rgm@gnu.org>
- * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay):
+ * lisp/cedet/mode-local.el (describe-function-orig-buffer): Declare.
- Let-bind isearch-regexp-function to nil. (Bug#22097)
+ * lisp/ffap.el (ffap-latex-mode): Avoid free variable.
-2015-12-05 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-01-08 Mark Oteiza <mvoteiza@udel.edu>
- * lisp/emacs-lisp/package.el: Don't install bad signatures (bug#22089)
+ * lisp/play/dunnet.el (dun-fix-screen): Avoid `end-of-buffer`.
- (package--with-response-buffer): NOERROR and ERROR-FORM only
- handle connection errors.
- (bad-signature): New error type.
- (package--check-signature-content): Use it.
- (package--check-signature): Properly distinguish connection errors
- from bad-signature errors. Do the check for
- `package-check-signature' `allow-unsigned' here instead of forcing
- the callbacks to do it. Add a new argument, UNWIND.
- (package--download-one-archive, package-install-from-archive):
- Update usage of `package--check-signature'.
+2016-01-08 Alan Mackenzie <acm@muc.de>
-2015-12-05 Ulf Jasper <ulf.jasper@web.de>
+ Respect fontification region calculated by major mode. Fixes bug #22316.
- Fix Bug#22092.
+ * lisp/font-lock.el (font-lock-extend-jit-lock-region-after-change): when a
+ fontification region has been calculated by a function on
+ font-lock-extend-after-change-region-function use this region rather than
+ changing the end position to somewhere else.
- * lisp/calendar/icalendar.el (icalendar--get-unfolded-buffer):
- Clean up inconsistent line endings. (Bug#22092)
- (icalendar--clean-up-line-endings): New.
- * test/automated/icalendar-tests.el (icalendar-real-world): Add test
- for Bug#22092.
+2016-01-08 Eli Zaretskii <eliz@gnu.org>
-2015-12-05 Eli Zaretskii <eliz@gnu.org>
+ Improve documentation of Delete Selection mode
- Document 'bookmark-set-no-overwrite'
+ * lisp/delsel.el (delete-selection-mode)
+ (delete-selection-helper): Update and expand the doc strings.
+ (Bug#22296)
- * doc/emacs/regs.texi (Bookmarks): Document the new command
- 'bookmark-set-no-overwrite' and its keybinding.
+ * doc/emacs/mark.texi (Using Region): Document the behavior of
+ delete commands in Delete Selection mode. (Bug#22296)
-2015-12-05 Eli Zaretskii <eliz@gnu.org>
+ * doc/lispref/markers.texi (The Mark): Document how to add the
+ support for Delete Selection mode to Lisp programs. (Bug#22296)
- Document new binding of 'mouse-buffer-menu'
+2016-01-08 Dmitry Gutov <dgutov@yandex.ru>
- * doc/emacs/buffers.texi (Buffer Menus): 'mouse-buffer-menu' is
- now also on C-F10.
+ Fix two project-find-file issues
-2015-12-05 Eli Zaretskii <eliz@gnu.org>
+ * lisp/progmodes/project.el (project--value-in-dir):
+ Temporarily set enable-local-variables to :all.
+ (project-find-file, project-or-external-find-file):
+ All autoloads.
+ (project--find-file-in): Require xref.
- Initial documentation of dynamic modules
+2016-01-08 Eli Zaretskii <eliz@gnu.org>
- * doc/lispref/loading.texi (Dynamic Modules): New section with
- initial documentation for dynamic modules.
- * doc/lispref/elisp.texi (Top): Add "Dynamic Modules" to the
- detailed menu
+ Clarify doc string of 'dired-current-directory'
- * etc/NEWS: Fix typos in dynamic modules' entry.
+ * lisp/dired.el (dired-current-directory): Doc fix: clarify that
+ the return value might not end in a slash when called with the
+ optional argument non-nil. (Bug#6273)
-2015-12-05 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-01-08 Eli Zaretskii <eliz@gnu.org>
- Remove copyright statements from trivial test files
+ Use the face of preceding text for displaying the ellipsis
-2015-12-05 Eli Zaretskii <eliz@gnu.org>
+ * src/xdisp.c (setup_for_ellipsis): Use the face of the preceding
+ text in it->saved_face_id for displaying the ellipsis, and ignore
+ the face, if any, of the invisible text. (Bug#22320)
- Add "Preliminaries" section to etc/DEBUG
+2016-01-08 Michael Albinus <michael.albinus@gmx.de>
- * etc/DEBUG: Add the "Preliminaries" section for GDB beginners.
- Most of the content was suggested by Phillip Lord
- <phillip.lord@russet.org.uk>. Remove the section about debugging
- with the Visual Studio, as building Emacs with the Microsoft
- compilers is no longer supported. Minor fixes in some other
- sections.
+ Suppress Chinese file name test for OSX in tramp-tests.el
-2015-12-05 Alex Dunn <dunn.alex@gmail.com> (tiny change)
+ * test/automated/tramp-tests.el (tramp--test-utf8):
+ Remove instrumentation. Suppress Chinese file name test for OSX.
- Improve parsing of version strings
+2016-01-07 Glenn Morris <rgm@gnu.org>
- * lisp/subr.el (version-regexp-alist): Allow "." as priority separator
- (version-to-list): More helpful error messages.
- (version-to-list): ".5" is valid (update docstring). Make
- "22.8X3" invalid, as the doc string says.
+ * admin/admin.el (set-version): Also handle the NEWS file.
- * test/automated/subr-tests.el (ert-test-version-parsing): New
- tests for version string processing.
+2016-01-07 Dmitry Gutov <dgutov@yandex.ru>
-2015-12-05 Eli Zaretskii <eliz@gnu.org>
+ apropos-library: Skip obvious duplicates; don't error on generics
- Fix documentation of 'undo' changes
+ * lisp/apropos.el (apropos-library): Skip "was an autoload"
+ entries, to avoid obvious duplicates. For each cl-defmethod
+ entry, take just its function symbol (bug#21422).
- * doc/lispref/text.texi (Undo): Minor wording changes. Use US
+2016-01-07 Dmitry Gutov <dgutov@yandex.ru>
+
+ Add project-find-file and project-or-external-find-file
+
+ * lisp/minibuffer.el (completion-category-defaults):
+ Add `project-file' category.
+
+ * lisp/progmodes/project.el (project-find-file)
+ (project-or-external-find-file): New commands.
+ (project--find-file-in): New private function.
+
+ * lisp/progmodes/xref.el (xref-collect-matches): Use
+ `expand-file-name' on DIR, to expand the tildes.
+ (xref--find-ignores-arguments): Extract from
+ `xref--rgrep-command'.
+
+2016-01-06 Leo Liu <sdl.web@gmail.com>
+
+ Add defvar-local to lisp-imenu-generic-expression
+
+ * lisp/emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): Add
+ defvar-local.
+
+2016-01-06 Leo Liu <sdl.web@gmail.com>
+
+ Revert commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd
+
+ * lisp/emacs-lisp/easy-mmode.el (define-minor-mode):
+ Don't declare (indent 1).
+
+2016-01-06 Glenn Morris <rgm@gnu.org>
+
+ * lisp/emacs-lisp/autoload.el (autoload-find-destination): Doc fix.
+
+2016-01-06 Glenn Morris <rgm@gnu.org>
+
+ * lisp/emacs-lisp/autoload.el (autoload-find-destination):
+
+ Avoid specifying the length of a time object (it has not been "2"
+ for some time).
+
+2016-01-06 Andreas Schwab <schwab@linux-m68k.org>
+
+ Properly encode/decode base64Binary data in SOAP
+
+ * lisp/net/soap-client.el (soap-encode-xs-basic-type): Encode
+ base64Binary value as utf-8.
+ (soap-decode-xs-basic-type): Decode base64Binary value as utf-8.
+
+2016-01-06 Eli Zaretskii <eliz@gnu.org>
+
+ Obey coding-system-for-write when writing stdout/stderr in batch
+
+ * src/print.c (printchar_to_stream):
+ * src/xdisp.c (message_to_stderr): If coding-system-for-write has
+ a non-nil value, use it to encode output in preference to
+ locale-coding-system. See the discussions in
+ http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00048.html
+ for the details.
+
+ * doc/lispref/os.texi (Terminal Output): Document how to send
+ non-ASCII text via 'send-string-to-terminal'.
+ (Batch Mode): Document how text written to standard streams is
+ encoded. Fix inaccuracy regarding which output streams are used
+ by output functions in batch mode.
+
+2016-01-06 Xue Fuqiao <xfq.free@gmail.com>
+
+ * doc/misc/efaq.texi (Packages that do not come with Emacs):
+ Update the URI of MELPA and marmalade-repo. Reported by CHENG Gao
+ <chenggao@royau.me> in
+ https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00390.html.
+
+2016-01-05 Maksim Golubev <maksim.golubev72@gmail.com> (tiny change)
+
+ * lisp/progmodes/opascal.el (opascal-mode-syntax-table):
+
+ Fix backslash. (Bug#22224)
+
+2016-01-05 Federico Beffa <beffa@ieee.org> (tiny change)
+
+ * lisp/progmodes/xscheme.el (xscheme-prompt-for-expression-exit):
+
+ Make it actually work. (Bug#22265)
+
+2016-01-05 Alan Mackenzie <acm@muc.de>
+
+ Remove function wrongly on AWK Mode value of context fontification hook.
+
+ * lisp/progmodes/cc-langs.el (c-before-context-fontification-functions):
+ swap order of entries so that awk's entry isn't superseded by the default.
+
+ * lisp/progmodes/cc-mode.el (c-before-context-fl-expand-region): Correct
+ to handle nil value of c-before-context-fontification-functions.
+
+2016-01-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/buffer.c: Stick with ASCII in doc string.
+
+2016-01-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Reword transient-mark-mode doc string
+
+ * src/buffer.c (syms_of_buffer): Reword doc string to avoid confusion.
+ The value 'lambda (literally) can be interpreted as (quote lambda),
+ which is not intended here; we want just the lambda symbol.
+
+2016-01-05 Eli Zaretskii <eliz@gnu.org>
+
+ Update doc string of 'selective-display'
+
+ * src/buffer.c (syms_of_buffer) <selective-display>: Say that
+ using it with the value of 't' is obsolete. (Bug#1092)
+
+2016-01-05 Alan Mackenzie <acm@muc.de>
+
+ Make C++ buffers writeable when writing their initial text properties.
+
+ This is a correction to yesterday's CC Mode patch.
+
+ * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Put
+ c-save-buffer-state around the function rather than a mere `let'.
+
+2016-01-05 Michael Albinus <michael.albinus@gmx.de>
+
+ Additional changes for "make check-expensive"
+
+ * CONTRIBUTE : Encourage use of ":tags '(:expensive-test)".
+ Explain make target `check-expensive'.
+
+ * etc/NEWS: Mention new make target `check-expensive'.
+
+ * test/automated/Makefile.in (check-doit): New target.
+ (check, check-expensive): Use it.
+
+2016-01-04 Alan Mackenzie <acm@muc.de>
+
+ Apply text properties for <, > in new after-change function (C++ Java Modes).
+
+ These are category/syntax-table properties to give < and > paren syntax.
+ Also apply certain `c-type' text properties to the insides of <..> constructs
+ to ensure that identifiers contained by them get fontified. This patch fixes
+ bug #681.
+
+ * lisp/progmodes/cc-cmds.el (c-electric-lt-gt): Reformulate due to new
+ after-change action.
+
+ * lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Expand
+ change region to include <s and >s which might not be already marked as
+ parens, rather than just when paren text properties are removed.
+ (c-restore-<>-properties): New after-change function, which applies text
+ properties marking < and > with paren syntax.
+
+ * lisp/progmodes/cc-fonts.el (c-font-lock-declarations): Ensure `c-type'
+ properties are applied to the interiors of <...> constructs, to ensure
+ fontification of identifiers there.
+
+ * lisp/progmodes/cc-langs.el (c-before-font-lock-functions): Add
+ c-restore-<>-properties to this list for C++ and Java.
+
+ * lisp/progmodes/cc-mode.el (c-common-init): When invoking
+ c-before-font-lock-functions, exclude c-restore-<>-properties from the
+ functions invoked.
+ (c-before-change): Initialize c-new-BEG/END here (rather than c-after-change)
+ to allow modification by before-change functions.
+ (c-after-change): Amend c-new-END here, rather than initializing it and
+ c-new-BEG.
+
+2016-01-04 Michael Albinus <michael.albinus@gmx.de>
+
+ Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+
+2016-01-04 Michael Albinus <michael.albinus@gmx.de>
+
+ Introduce check-expensive tests.
+
+ * Makefile.in (check-expensive):
+ * test/automated/Makefile.in (check-expensive): New target.
+
+ * test/automated/auto-revert-tests.el
+ (auto-revert-test01-auto-revert-several-files):
+ * test/automated/file-notify-tests.el (file-notify--deftest-remote):
+ * test/automated/tramp-tests.el (tramp-test26-process-file)
+ (tramp-test27-start-file-process, tramp-test28-shell-command)
+ (tramp-test29-vc-registered)
+ (tramp-test31-special-characters-with-stat)
+ (tramp-test31-special-characters-with-perl)
+ (tramp-test31-special-characters-with-ls)
+ (tramp-test32-utf8-with-stat, tramp-test32-utf8-with-perl)
+ (tramp-test32-utf8-with-ls, tramp-test33-asynchronous-requests)
+ (tramp-test35-unload): Tag the tests as :expensive-test.
+
+2016-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ shr-tag-video bug fix
+
+ * shr.el (shr-tag-video): Protect against the `poster' being
+ empty.
+
+2016-01-04 Michael Albinus <michael.albinus@gmx.de>
+
+ Minor fixes in tramp-tests.el
+
+ * test/automated/tramp-tests.el (tramp-test26-process-file):
+ Move point properly.
+ (tramp-test29-vc-registered): Work with relative file names.
+
+2016-01-04 Eli Zaretskii <eliz@gnu.org>
+
+ Ensure redisplay when 'truncate-lines' is set
+
+ * lisp/frame.el (redisplay--variables): Add 'truncate-lines'.
+ (Bug#22303)
+
+2016-01-04 Eli Zaretskii <eliz@gnu.org>
+
+ Fix a doc string of 'transient-mark-mode'
+
+ * src/buffer.c (syms_of_buffer) <transient-mark-mode>: Prevent
+ "lambda" in doc string from becoming a link to lambda expressions.
+
+2016-01-04 Eli Zaretskii <eliz@gnu.org>
+
+ MS-Windows followup to latest gnulib update
+
+ * nt/gnulib.mk (EXTRA_DIST): Add ignore-value.h.
+
+2016-01-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling fix
+
+2016-01-03 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
+
+ Do secure signed Bcc handling
+
+ * lisp/gnus/message.el (message-send): Do secure signed Bcc handling
+ (bug#18718).
+
+2016-01-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ Avoid stdio in SIGINT handler
+
+ * admin/merge-gnulib (GNULIB_MODULES): Add ignore-value.
+ * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
+ * lib/ignore-value.h: New file, from gnulib.
+ * src/keyboard.c: Include it.
+ (write_stdout, read_stdin): New functions.
+ (handle_interrupt): Use them instead of printf and getchar,
+ and avoid fflush when handling signals.
+
+2016-01-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/misc/texinfo.tex: Revert unwanted copyright change.
+
+2016-01-03 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/align.el (align): Simplify a lambda
+
+ * lisp/align.el (align): Fix arg order in call to `align-region'
+
+2016-01-03 Eli Zaretskii <eliz@gnu.org>
+
+ Fix compilation next-error in buffers with selective-display
+
+ * lisp/progmodes/compile.el (compilation-beginning-of-line): New
+ function.
+ (compilation-internal-error-properties)
+ (compilation-next-error-function, compilation-set-window): Use
+ it. (Bug#1092)
+
+2016-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nsm.el (nsm-check-protocol): Fix typo in the message.
+
+2016-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ Add SHA1 warnings for high network security settings
+
+ * nsm.el (nsm-check-protocol): When using high security, warn
+ about SHA1 certificates, which are now believed to be open to
+ spoofing.
+
+2016-01-02 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
+
+ Refactor mml-smime.el, mml1991.el, mml2015.el
+
+ (Maybe this is the last merge from Gnus git to Emacs git)
+
+ Cf. discussion on ding mailing list, messages in
+ <http://thread.gmane.org/gmane.emacs.gnus.general/86228>.
+ Common code from the three files mml-smime.el, mml1991.el, and
+ mml2015.el is moved to mml-sec.el. Auxiliary functions are added
+ to gnus-util.el.
+
+ The code is supported by test cases with necessary test keys.
+
+ Documentation in message.texi is updated.
+
+ * doc/misc/message.texi (Security, Using S/MIME):
+ Update for refactoring mml-smime.el, mml1991.el, mml2015.el.
+ (Using OpenPGP): Rename from "Using PGP/MIME"; update contents.
+ (Passphrase caching, Encrypt-to-self, Bcc Warning): New sections.
+
+ * lisp/gnus/gnus-util.el (gnus-test-list, gnus-subsetp, gnus-setdiff):
+ New functions.
+
+ * lisp/gnus/mml-sec.el: Require gnus-util and epg.
+ (epa--select-keys): Autoload.
+ (mml-signencrypt-style-alist, mml-secure-cache-passphrase): Doc fix.
+ (mml-secure-openpgp-signers): New user option;
+ make mml1991-signers and mml2015-signers obsolete aliases to it.
+ (mml-secure-smime-signers): New user option;
+ make mml-smime-signers an obsolete alias to it.
+ (mml-secure-openpgp-encrypt-to-self): New user option;
+ make mml1991-encrypt-to-self and mml2015-encrypt-to-self obsolete
+ aliases to it.
+ (mml-secure-smime-encrypt-to-self): New user option;
+ make mml-smime-encrypt-to-self an obsolete alias to it.
+ (mml-secure-openpgp-sign-with-sender): New user option;
+ make mml2015-sign-with-sender an obsolete alias to it.
+ (mml-secure-smime-sign-with-sender): New user option;
+ make mml-smime-sign-with-sender an obsolete alias to it.
+ (mml-secure-openpgp-always-trust): New user option;
+ make mml2015-always-trust an obsolete alias to it.
+ (mml-secure-fail-when-key-problem, mml-secure-key-preferences):
+ New user options.
+ (mml-secure-cust-usage-lookup, mml-secure-cust-fpr-lookup)
+ (mml-secure-cust-record-keys, mml-secure-cust-remove-keys)
+ (mml-secure-add-secret-key-id, mml-secure-clear-secret-key-id-list)
+ (mml-secure-cache-passphrase-p, mml-secure-cache-expiry-interval)
+ (mml-secure-passphrase-callback, mml-secure-check-user-id)
+ (mml-secure-secret-key-exists-p, mml-secure-check-sub-key)
+ (mml-secure-find-usable-keys, mml-secure-select-preferred-keys)
+ (mml-secure-fingerprint, mml-secure-filter-keys)
+ (mml-secure-normalize-cust-name, mml-secure-select-keys)
+ (mml-secure-select-keys-1, mml-secure-signer-names, mml-secure-signers)
+ (mml-secure-self-recipients, mml-secure-recipients)
+ (mml-secure-epg-encrypt, mml-secure-epg-sign): New functions.
+
+ * lisp/gnus/mml-smime.el: Require epg;
+ refactor declaration and autoloading of epg functions.
+ (mml-smime-use): Doc fix.
+ (mml-smime-cache-passphrase, mml-smime-passphrase-cache-expiry):
+ Obsolete.
+ (mml-smime-get-dns-cert, mml-smime-get-ldap-cert):
+ Use format instead of gnus-format-message.
+ (mml-smime-epg-secret-key-id-list): Remove variable.
+ (mml-smime-epg-passphrase-callback, mml-smime-epg-find-usable-key)
+ (mml-smime-epg-find-usable-secret-key): Remove functions.
+ (mml-smime-epg-sign, mml-smime-epg-encrypt): Refactor.
+
+ * lisp/gnus/mml1991.el (mml1991-cache-passphrase)
+ (mml1991-passphrase-cache-expiry): Obsolete.
+ (mml1991-epg-secret-key-id-list): Remove variable.
+ (mml1991-epg-passphrase-callback, mml1991-epg-find-usable-key)
+ (mml1991-epg-find-usable-secret-key): Remove functions.
+ (mml1991-epg-sign, mml1991-epg-encrypt): Refactor.
+
+ * lisp/gnus/mml2015.el (mml2015-cache-passphrase)
+ (mml2015-passphrase-cache-expiry): Obsolete.
+ (mml2015-epg-secret-key-id-list): Remove variable.
+ (mml2015-epg-passphrase-callback, mml2015-epg-check-user-id)
+ (mml2015-epg-check-sub-key, mml2015-epg-find-usable-key)
+ (mml2015-epg-find-usable-secret-key): Remove functions.
+ (mml2015-epg-decrypt, mml2015-epg-clear-decrypt, mml2015-epg-sign)
+ (mml2015-epg-encrypt): Refactor.
+
+2016-01-02 Glenn Morris <rgm@gnu.org>
+
+ * lisp/progmodes/fortran.el (fortran-make-syntax-propertize-function):
+
+ Explicitly ignore case. (Bug#22262)
+
+2016-01-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ (semantic-symref-derive-find-filepatterns): Return a list
+
+ * lisp/cedet/semantic/symref/grep.el
+ (semantic-symref-derive-find-filepatterns): Return a list.
+ (semantic-symref-perform-search): Quote the result here once and for all.
+
+2016-01-02 Eli Zaretskii <eliz@gnu.org>
+
+ Fix xref-find-references on MS-Windows
+
+ * lisp/cedet/semantic/symref/grep.el
+ (semantic-symref-derive-find-filepatterns): Use
+ 'shell-quote-argument' instead of manually quoting in a way that
+ only works with Posix shells. (Bug#22289)
+
+2016-01-02 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of tildify-mode
+
+ * lisp/textmodes/tildify.el (tildify-foreach-ignore-environments)
+ (tildify-mode): Spelling fixes in doc strings.
+
+ * etc/NEWS: Reformat the tildify-mode entry.
+
+2016-01-02 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of Whitespace mode
+
+ * doc/emacs/display.texi (Useless Whitespace): Document
+ 'whitespace-toggle-options' and the new 'big-indent' style.
+ Document 'whitespace-big-indent-regexp'. Document the Global
+ Whitespace mode.
+
+2016-01-02 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of new Hide-IfDef features
+
+ * etc/NEWS: Expand and reword Hide-IfDef section.
+
+2016-01-02 Leo Liu <sdl.web@gmail.com>
+
+ Fix regression in font-locking cl-assert and cl-check-type
+
+ * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Fix
+ el-errs-re.
+
+2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling and grammar fixes
+
+2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix copyright years by hand
+
+ These are dates that admin/update-copyright did not update, or
+ updated incorrectly.
+
+2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ Update copyright year to 2016
+
+ Run admin/update-copyright.
+
+2016-01-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge from gnulib
+
+ This mostly just updates copyright dates of gnulib files.
+ It also updates to the latest version of texinfo.tex.
+
+2015-12-31 Mark Oteiza <mvoteiza@udel.edu>
+
+ lisp/emacs-lisp/chart.el (chart-new-buffer): Move to silence byte compiler.
+
+2015-12-31 Mark Oteiza <mvoteiza@udel.edu>
+
+ Port chart.el methods to cl-generic.
+
+ cl-call-next-method cannot be used inside EIEIO's defmethod.
+ * lisp/emacs-lisp/chart.el: Require cl-generic at compile time.
+ * lisp/emacs-lisp/chart.el (initialize-instance, chart-draw):
+ (chart-draw-title, chart-size-in-dir, chart-draw-axis):
+ (chart-axis-draw, chart-translate-xpos, chart-translate-ypos):
+ (chart-translate-namezone, chart-draw-data, chart-add-sequence):
+ (chart-trim, chart-sort): Use cl-defmethod instead of defmethod.
+
+2015-12-31 Brian Burns <bburns.km@gmail.com>
+
+ Add nt/INSTALL.W64 build instructions
+
+ * nt/INSTALL.W64: New file.
+ * nt/INSTALL: Point to INSTALL.W64 for 64-bit build instructions.
+
+2015-12-31 Joakim Jalap <joakim.jalap@fastmail.com>
+
+ Add new input method 'programmer-dvorak'
+
+ * lisp/leim/quail/programmer-dvorak.el ("programmer-dvorak"): New
+ input method.
+
+ * etc/NEWS: Mention it.
+
+2015-12-31 Eli Zaretskii <eliz@gnu.org>
+
+ Allow to invoke original M-TAB binding in 'flyspell-prog-mode'
+
+ * lisp/textmodes/flyspell.el (flyspell-prog-mode): Record the
+ original M-TAB binding in a buffer-local variable.
+ (flyspell-auto-correct-word): Invoke the original binding of M-TAB
+ if that is recorded, when point is in a place where flyspell
+ should not be active (e.g., because the user turned on
+ 'flyspell-prog-mode'). (Bug#18533)
+
+2015-12-31 Eli Zaretskii <eliz@gnu.org>
+
+ Fix EWW rendering of long RTL lines
+
+ * lisp/net/shr.el (shr-insert-document): Undo any previous hscroll
+ of the selected window before filling its lines. (Bug#22250)
+
+2015-12-31 Vincent Belaïche <vincentb1@users.sourceforge.net>
+
+ fix bug#21054
+
+ * ses.el (ses-check-curcell): Call `ses-set-curcell' unconditionally
+
+2015-12-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ Clean up cairo printing code
+
+ * src/gtkutil.c (xg_get_page_setup): Use listn.
+ * src/xfns.c (Fx_export_frames, Fx_print_frames_dialog): Doc fix. Use
+ decode_window_system_frame and FRAME_VISIBLE_P.
+ (Fx_print_frames_dialog): Use redisplay_preserve_echo_area instead
+ of Fdisplay.
+ * src/xterm.c (x_cr_export_frames): Use redisplay_preserve_echo_area
+ instead of Fdisplay. Temporarily unblock_input around QUIT.
+
+2015-12-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ Add handle_user_signal_hook
+
+ * src/keyboard.h (handle_user_signal_hook): New declaration.
+ * src/keyboard.c (handle_user_signal_hook): New variable.
+ (handle_user_signal): Call it.
+
+2015-12-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ Avoid writing to purespace
+
+ * src/alloc.c (Fmake_string): Don't write to empty string contents.
+ (allocate_vector): Don't write to empty vector size.
+ * src/character.h (CHECK_CHARACTER_CAR, CHECK_CHARACTER_CDR):
+ Don't call unnecessary XSETCAR or XSETCDR.
+ * src/lisp.h (STRING_SET_UNIBYTE, STRING_SET_MULTIBYTE): Don't
+ write to empty string size_byte.
+
+2015-12-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ Remove unused variable
+
+ * lisp/international/mule-cmds.el: Remove unused variable
+ `mac-system-coding-system'.
+
+2015-12-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * configure.ac: Find libxml2 headers in Xcode SDK dir on Darwin.
+
+2015-12-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ Use posix_openpt instead of openpty on Darwin
+
+ * configure.ac (PTY_ITERATION, FIRST_PTY_LETTER, PTY_OPEN)
+ (PTY_NAME_SPRINTF, PTY_TTY_NAME_SPRINTF): Remove
+ Darwin-specific definitions. Use posix_openpt instead.
+
+2015-12-30 Shakthi Kannan <shakthimaan@gmail.com>
+
+ Document support for ':documentation' in Lisp mode
+
+ * lisp/emacs-lisp/lisp-mode.el (lisp-string-in-doc-position-p)
+ (lisp-string-after-doc-keyword-p)
+ (lisp-font-lock-syntactic-face-function): Add doc strings.
+
+2015-12-30 Shakthi Kannan <shakthimaan@gmail.com>
+
+ Document new features of TeX mode
+
+ * doc/emacs/text.texi (TeX Print): Document
+ 'tex-print-file-extension'.
+ * doc/emacs/programs.texi (Misc for Programs): Document support
+ for Prettify Symbols mode in TeX mode.
+
+2015-12-30 Eli Zaretskii <eliz@gnu.org>
+
+ Clarify docs of hscroll in RTL text
+
+ * doc/lispref/windows.texi (Horizontal Scrolling): Clarify the
+ meaning of a window's horizontal scroll amount for RTL paragraphs.
+
+2015-12-30 Eli Zaretskii <eliz@gnu.org>
+
+ Fix rendering of HTML pages that use character composition
+
+ * src/indent.c (Fvertical_motion): Fix the case when point starts
+ in the middle of a composition, as in shr-vertical-motion.
+ (Bug#22250)
+
+2015-12-30 Eli Zaretskii <eliz@gnu.org>
+
+ Avoid some compiler warnings in w32.c
+
+ * src/w32.c (codepage_for_filenames, crlf_to_lf)
+ (ansi_encode_filename, socket_to_fd, sys_write)
+ (check_windows_init_file): Avoid compiler warnings about
+ differences in pointer signedness.
+
+2015-12-29 Dmitry Gutov <dgutov@yandex.ru>
+
+ Undo ill-advised change
+
+ * lisp/progmodes/xref.el (xref-collect-matches): Undo
+ ill-advised change. The hits come in the order that `find'
+ produces them in, which isn't alphabetical.
+
+2015-12-29 Dmitry Gutov <dgutov@yandex.ru>
+
+ Unbreak completion in python-mode buffers
+
+ * lisp/progmodes/python.el (python-shell-completion-at-point):
+ Unbreak in python-mode buffers.
+
+2016-01-09 Andrew Hyatt <ahyatt@gmail.com>
+
+ Adding example replies to bug-triage.
+
+ * admin/notes/bug-triage: Added example replies. Also, as requested,
+ making the process notes into more of a checklist.
+
+2016-01-08 Andrew Hyatt <ahyatt@gmail.com>
+
+ Rename the notes/admin/triage file to bug-triage.
+
+ * CONTRIBUTE: Change reference to the triage file name.
+ * admin/notes/triage: Rename file to admin/notes/bug-triage.
+
+2016-01-07 Glenn Morris <rgm@gnu.org>
+
+ Allow creation of loaddefs files without timestamps.
+
+ * lisp/emacs-lisp/autoload.el (autoload-timestamps): New variable.
+ (autoload-generate-file-autoloads, update-directory-autoloads):
+ If autoload-timestamps is nil, write "t" instead of file timestamp.
+ (autoload-find-destination, update-directory-autoloads):
+ If timestamp is "t", use the modtime of the output file instead.
+
+2016-01-06 Glenn Morris <rgm@gnu.org>
+
+ Doc tweaks.
+
+ * lisp/calendar/cal-hebrew.el (diary-hebrew-list-entries):
+ * lisp/calendar/cal-iso.el (calendar-iso-to-absolute)
+ (calendar-iso-from-absolute):
+ * lisp/calendar/cal-tex.el (cal-tex-comment):
+ * lisp/calendar/solar.el (calendar-time-display-form): Doc tweaks.
+
+2016-01-06 Glenn Morris <rgm@gnu.org>
+
+ Build tweaks related to tags files.
+
+ * lib-src/Makefile.in (tagsfiles): New variable.
+ (TAGS): Also depend on the source files. Use our own etags program.
+ * lisp/Makefile.in (ETAGS): Add EXEEXT.
+ (lisptagsfiles1, lisptagsfiles2, lisptagsfiles3, lisptagsfiles4):
+ Remove.
+ (tagsfiles): New, replacing lisptagsfiles1 etc.
+ Remove irrelevant source files here rather than in the TAGS rule.
+ (${ETAGS}): New rule.
+ (TAGS): Also depend on the etags executable.
+ * lwlib/Makefile.in (EXEEXT): New, set by configure.
+ (ETAGS): Add EXEEXT.
+ (${ETAGS}): New rule.
+ (ctagsfiles): Use "wildcard".
+ (TAGS): Also depend on the etags executable.
+ * nt/Makefile.in (ETAGS, tagsfiles): New variables.
+ (${ETAGS}): New rule.
+ (TAGS): Fix dependencies.
+ * oldXMenu/Makefile.in (EXEEXT): New, set by configure.
+ (ETAGS): New variable, replacing $TAGS. Use our own etags program.
+ Remove "-t" argument.
+ (${ETAGS}): New rule.
+ (tagsfiles): New variable.
+ (TAGS): New rule, with proper dependencies.
+ * src/Makefile.in (ETAGS): Add EXEEXT. Add a build rule.
+ (ctagsfiles1, ctagsfiles2): Use "wildcard".
+ (ctagsfiles3): Remove.
+ (TAGS): Depend on etags.
+ (../lisp/TAGS, $(lwlibdir)/TAGS): Let the rules in the relevant
+ directories decide if updates are needed.
+
+2016-01-06 Glenn Morris <rgm@gnu.org>
+
+ * lisp/Makefile.in (CAL_SRC): Skip calendar.el.
+
+2016-01-06 Glenn Morris <rgm@gnu.org>
+
+ * test/lisp/emacs-lisp/package-tests.el
+
+ (package-test-macro-compilation): Fixup branch merge.
+
+2016-01-05 Eli Zaretskii <eliz@gnu.org>
+
+ Fix fallout from merging emacs-25 branch in test/
+
+ * .gitignore: Update for the new place of biditest.txt.
+ * test/automated/: Directory removed. All files moved to their
+ proper places.
+ * test/etags/: Directory removed. All files moved to their proper
+ places.
+ * test/automated/url-parse-tests.el: File removed; it was an exact
+ copy of the same file in test/lisp/url/.
+ * test/automated/url-expand-tests.el: Moved to test/lisp/url/.
+
+2016-01-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling fixes.
+
+2016-01-04 Daniel Colascione <dancol@dancol.org>
+
+ Let users disable unsafe signal handling code
+
+ * src/keyboard.c (syms_of_keyboard): New user variables
+ `attempt-stack-overflow-recovery' and
+ `attempt-orderly-shutdown-on-fatal-signal'.
+ * src/sysdep.c (stack_overflow): Check
+ `attempt-stack-overflow-recovery'.
+ * src/emacs.c (terminate_due_to_signal): Check
+ `attempt-orderly-shutdown-on-fatal-signal'.
+
+2016-01-03 Michael Albinus <michael.albinus@gmx.de>
+
+ * configure.ac: Add error message for gfile on Nextstep.
+
+2016-01-03 John Wiegley <johnw@newartisans.com>
+
+ Merge branch 'emacs-25-merge'
+
+2016-01-02 Vincent Belaïche <vincentb1@users.sourceforge.net>
+
+ Align textually on fix done for emacs-25 branch for bug#21054
+
+ * lisp/ses.el (ses-check-curcell): Suppress ``temporary fix'' comment,
+ and useless `(if t ...)' in order to align textually on fix done for
+ emacs-25 branch for bug#21054.
+
+2016-01-02 K. Handa <handa@gnu.org>
+
+ support rendering of wider range of combinging characters by ftfont backend
+
+ * lisp/language/hebrew.el (hebrew-shape-gstring): If the font backend
+ supports rendering of combining characters, call
+ font-shape-gstring.
+
+ * src/font.c (Ffont_get): Handle `combining-capability' property.
+ (syms_of_font): New symbol ":combining-capability'.
+
+ * src/font.h (struct font_driver): New member combining_capability.
+
+ * src/ftfont.c: Include "category.h".
+ (ftfont_driver): Initialize combining_capability to
+ ftfont_combining_capability.
+ (ftfont_shape_by_flt): If OTF is null, try to find a suitable
+ FLT in advance.
+ (ftfont_combining_capability): New function.
+
+2016-01-01 Andrew Hyatt <ahyatt@gmail.com>
+
+ Add notes on bug triage procedure
+
+ * CONTRIBUTE: In section on the issue tracker, point to new triage file.
+ * admin/notes/triage: New file explaining triage procedure.
+
+2015-12-30 Vincent Belaïche <vincentb1@users.sourceforge.net>
+
+ Correct ses-rename-cell cursor-intangible text prop updating.
+
+ There were two problems:
+
+ - First ses-rename-cell has to work when called non interactively
+ (with non-nil CELL argument), so in this case the start pos of
+ put-text-property cannot be plainly (point), you need a
+ ses-goto-print call before
+
+ - Second, the range itself was computed erronously, only the first
+ char was affected instead of the full cell width. This was not
+ noticeable prior to changes (Deprecate `intangible' and
+ `point-entered' properties) made by Stefan on 2015-04-13T19:51:15Z
+
+ * lisp/ses.el (ses-rename-cell): Correct computation of position range
+ to which the 'cursor-intangible text property has to be set to cell
+ new name.
+
+2015-12-30 Vincent Belaïche <vincentb1@users.sourceforge.net>
+
+ Don't fake empty cells value by "" when printing with a lambda.
+
+ When using a lambda expression printer function the user should be
+ free to format differently a really empty cell, ie. containing nil,
+ from a cell containing an empty string "".
+
+ * ses.el (ses-call-printer): Replace `(or value "")' by just `value'
+ in the case of a lambda expression printer function.
+
+ * ses.texi (Printer functions): Add example and description about
+ lambda expression printer function handling all the possible values,
+ including unexpected ones.
+
+2015-12-30 Vincent Belaïche <vincentb1@users.sourceforge.net>
+
+ Quick temporary hack to fix curcell refreshing.
+
+ The problem was caused by change: 2015-04-13 Deprecate `intangible'
+ and `point-entered' properties. The problem is that this change has
+ removed the (setq ses--curcell t) setting in the ses-command-hook
+ function.
+
+ * ses.el (ses-check-curcell): replace `(eq ses--curcell t)' by just `t' as
+ a condition to call function `ses-set-curcell'. Comment this as a quick
+ temporary hack to make it work, as I don't know yet whether a definite
+ correction would be to make the ses-set-curcell at every ses-check-curcell,
+ or to revert to the previous approach, ie marking ses--curcell as out-of-date
+ at every potentially cursor motion command.
+
+2015-12-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ Restrictive URL checking tweaks
+
+ * lisp/net/eww.el (eww): Check whether the domain is
+ restrictive instead of the string
+ (http://македонија.icom.museum is restrictive even if each
+ part is from a different script).
+
+2015-12-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ New function `puny-highly-restrictive-domain-p'
+
+ * lisp/net/puny.el (puny-highly-restrictive-string-p): Rename.
+ (puny-highly-restrictive-domain-p): New function.
+
+2015-12-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ eww build fix (require puny)
+
+2015-12-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ Transform non-restrictive domains to punycode for display
+
+ * lisp/net/eww.el (eww): Check whether the domain is Highly
+ Restrictive in the Unicode IDNA sense.
+
+2015-12-30 John Wiegley <johnw@newartisans.com>
+
+ Merge emacs-25 into master (using imerge)
+
+2015-12-29 Eli Zaretskii <eliz@gnu.org>
+
+ Fix typos in CC Mode manual
+
+ * doc/misc/cc-mode.texi (c-offsets-alist, Style Variables): Fix
+ typos. (Bug#22267)
+
+2015-12-29 Eli Zaretskii <eliz@gnu.org>
+
+ Avoid assertion violations in compact_font_cache_entry
+
+ * src/alloc.c (compact_font_cache_entry): Don't use VECTORP to
+ avoid assertion violation in ASIZE. (Bug#22263)
+
+2015-12-29 Eli Zaretskii <eliz@gnu.org>
+
+ Fix filling text with bidirectional characters in shr.el
+
+ * lisp/net/shr.el (shr-insert-document): Bind
+ bidi-display-reordering to nil while filling lines. This is
+ required for when a line includes characters whose bidi
+ directionality is opposite to the base paragraph direction,
+ because columns are counted in the logical order. (Bug#22250)
+
+2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Further Unicode restrictive fixups
+
+ * puny.el (puny-highly-restrictive-p): Include the extra
+ identifier characters from table 3.
+
+2015-12-29 Martin Rudalics <rudalics@gmx.at>
+
+ * src/xfns.c (x_create_tip_frame): Process alpha parameter.
+
+2015-12-29 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.2.13
+
+ * doc/misc/trampver.texi: Change version to "2.2.13.25.1".
+
+ * lisp/net/tramp-compat.el (tramp-compat-delete-dups):
+ Use `tramp-compat-funcall'.
+
+ * lisp/net/tramp-gvfs.el (tramp-gvfs-parse-device-names):
+ Make `split-string' call compatible with older Emacsen.
+
+ * lisp/net/trampver.el: Change version to "2.2.13.25.1".
+
+2015-12-29 Lambda Coder <sjLambda@gmail.com>
+
+ * doc/misc/tramp.texi: Editorial revisions to the Tramp manual
+
+2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Mention that tls.el is secure by default, and will fail
+
+2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Make tls.el use trustfiles by default
+
+ * lisp/net/tls.el (tls-program): Add a certfile by default (bug#21227).
+ (open-tls-stream): Insert the trustfile by looking at
+ `gnutls-trustfiles'.
+
+2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Refactor out gnutls-trustfiles
+
+ * lisp/net/gnutls.el (gnutls-trustfiles): Refactor out for reuse by tls.el.
+
+2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Remove --insecure from gnutls-cli invocation
+
+ * tls.el (tls-program): Default to using secure TLS
+ connections (bug#19284).
+
+2015-12-29 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Add a new function to say whether a string is restrictive
+
+ * puny.el (puny-highly-restrictive-p): New function.
+
+2015-12-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling fix
+
+2015-12-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port report-emacs-bug to deterministic builds
+
+ * lisp/mail/emacsbug.el (report-emacs-bug): Future-proof the
+ recent "built on" change to deterministic builds where
+ emacs-build-system will be nil. See:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01369.html
+
+2015-12-28 Jose A. Ortega Ruiz <jao@gnu.org> (tiny change)
+
+ Fix URL auth error message
+
+ * lisp/url/url-http.el (url-http-handle-authentication): Make the error
+ message more correct (bug#20069).
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Mention the new puny.el library
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ IDNA-related fixes for the URL library
+
+ * lisp/url/url-http.el (url-http-create-request): IDNA-encode
+ the Host: header.
+
+ * lisp/url/url-util.el (url-encode-url): Don't hex-encode
+ domain names, but leave them as UTF-8, so that they can be
+ IDNA-encoded later when contacting the host.
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ IDNA-encode all domain names in `open-network-stream'
+
+ * network-stream.el (open-network-stream)
+ (network-stream-open-plain, network-stream-open-starttls):
+ IDNA-encode all domain names, if needed.
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Fix puny-encoding all-non-ASCII domains
+
+ * puny.el (puny-encode-string): Fix the all-non-ASCII encoding case.
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * lisp/net/shr.el (shr-next-link): Don't bug out on adjacent links.
+
+2015-12-28 Tom Tromey <tom@tromey.com>
+
+ set :safe on css-indent-offset
+
+ * lisp/textmodes/css-mode.el (css-indent-offset): Add :safe 'integerp.
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * eww.el (eww-mode): Remove superfluous bidi reset.
+
+2015-12-28 James Stout <james.wolf.stout@gmail.com> (tiny change)
+
+ Make chunked encoding trailer detection more compliant
+
+ * lisp/url/url-http.el
+ (url-http-chunked-encoding-after-change-function): Make
+ trailer detection more compliant (bug#16345).
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Reconnect erc even on server errors
+
+ * lisp/erc/erc-backend.el (erc-server-reconnect-p): Try to
+ reconnect even if a server error has occurred (bug#18527).
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Fix punycode short circuit logic
+
+ * puny.el (puny-encode-domain): Fix short-circuit logic.
+
+2015-12-28 Martin Rudalics <rudalics@gmx.at>
+
+ Fix Bug#10873 in `report-emacs-bug'
+
+ * lisp/mail/emacsbug.el (report-emacs-bug): If
+ `report-emacs-bug-no-explanations' is nil, make sure we can show
+ mail and warnings buffer on this frame (Bug#10873).
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ IDNA speed up
+
+ * puny.el (puny-encode-domain): Make the common non-IDNA case faster
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Add IDNA domain encode/decode functions
+
+ * puny.el (puny-decode-domain): New function.
+ (puny-encode-domain): Ditto.
+ (puny-decode-digit): Fix digit decoding error.
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Rename idna.el to puny.el
+
+ * puny.el: Renamed from idna.el to avoid name collisions with
+ the external idna.el library.
+
+2015-12-28 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Always reset the bidi direction
+
+ * eww.el (eww-display-html): Always reset the bidi direction
+ to `left-to-right' (bug#22257).
+
+2015-12-28 Alan Mackenzie <acm@muc.de>
+
+ Allow line comments ending with escaped NL to be continued to the next line.
+
+ Use this in C, C++, and Objective C Modes. Fixes bug#22246
+
+ * src/syntax.c (comment-end-can-be-escaped): New buffer local variable.
+ (forw-comment, back-comment): On encountering an end of comment character,
+ test whether it is escaped when `comment-end-can-be-escaped' is non-nil.
+
+ * doc/lispref/syntax.texi (Control Parsing): Describe
+ `comment-end-can-be-escaped'.
+
+ * etc/NEWS (Lisp Changes): Describe `comment-end-can-be-escaped'.
+
+ * lisp/progmodes/cc-langs.el: New c-lang-setvar `comment-end-can-be-escaped'.
+
+2015-12-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe): Keep old Emacsen compatibility
+
+ * lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe):
+ Don't use split-string with 4th arg for old Emacsen compatibility.
+
+2015-12-27 Dmitry Gutov <dgutov@yandex.ru>
+
+ Rename project-library-roots to project-external-roots
+
+ * lisp/progmodes/project.el (project-library-roots): Rename to
+ project-external-roots.
+ (project-library-roots-function): Rename to
+ project-vc-external-roots-function. Only use it in the VC
+ backend, for now. Update project-external-roots accordingly.
+ (project-vc-library-roots): Remove.
+ (project-or-libraries-find-regexp):
+ Rename to project-or-external-find-regexp.
+
+ * lisp/progmodes/elisp-mode.el (elisp-library-roots):
+ Rename to elisp-load-path-roots.
+
+ * lisp/progmodes/etags.el (etags-library-roots): Remove. Use
+ an anonymous function for the default value of
+ project-vc-external-roots-function.
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * idna.el (idna-decode-string-internal): Implement decoding.
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Further IDNA tweaks
+
+ (idna-encode-string): Make idna-encode-string safe for
+ non-ASCII use.
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Clean up the code slightly
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Added basic idna encoding support
+
+ * lisp/net/idna.el: New file.
+
+2015-12-27 Vivek Dasmohapatra <vivek@etla.org>
+
+ Disconnection fixes for erc
+
+ * lisp/erc/erc-backend.el (erc-server-reconnect-p): Don't
+ reconnect if the user has disconnected explicitly (bug#4589).
+
+2015-12-27 Thomas Riccardi <riccardi.thomas@gmail.com> (tiny change)
+
+ Further erc asynch fixes
+
+ * lisp/erc/erc-backend.el (erc-process-sentinel-2): Make
+ erc-server-connect to return even if the connection is not
+ ready. Then erc-open and erc-server-reconnect do the
+ same. (bug#5650).
+
+2015-12-27 Vivek Dasmohapatra <vivek@etla.org>
+
+ Make erc connect asynchronously
+
+ * lisp/erc/erc-backend.el (erc-server-reconnect): Use it to
+ reconnect asynchronously.
+
+ * lisp/erc/erc-backend.el (erc-open-network-stream): New function (bug#5650).
+
+2015-12-27 Deniz Dogan <deniz@dogan.se>
+
+ Clear erc user list upon disconnection
+
+ * lisp/erc/erc-backend.el (erc-process-sentinel): Clear channel user
+ lists upon disconnection. This prevents invalid channel
+ user lists when reconnecting (bug#10947).
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Don't bug out in erc after waking from sleep
+
+ * erc-backend.el (erc-server-send-ping): If the server has
+ closed connection, this may already have been detected and
+ `erc-server-last-received-time' has been set to nil (bug#13608).
+
+2015-12-27 David Edmondson <dme@dme.org>
+
+ Proxy error in erc with multiple clients
+
+ * lisp/erc/erc.el (erc-channel-receive-names): Fix errors
+ generated when multiple IRC clients talk to a single IRC proxy
+ (bug#19034).
+
+2015-12-27 Dima Kogan <dima@secretsauce.net>
+
+ Ensure that we don't have several timers in erc
+
+ * lisp/erc/erc-backend.el (erc-server-setup-periodical-ping): Checks
+ for existing timers in the alist before adding new ones. If a
+ timer already exists, it is cancelled and
+ overwritten. (bug#19292).
+
+2015-12-27 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
+
+ * lisp/gnus/mml-sec.el: Fix warnings by adding autoloads
+ (bug#18718).
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * lisp/erc/erc-log.el (erc-log-setup-logging): Insert the previous log
+ at the start of the buffer, not at the end (bug#20496).
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * lisp/net/eww.el (eww-setup-buffer): Restore left-to-right defaults.
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Don't join erc channels doubly
+
+ * erc-join.el (erc-autojoin-channels): Don't join channels
+ more than once (if you have several nicks) (bug#20695).
+
+2015-12-27 Eli Zaretskii <eliz@gnu.org>
+
+ Avoid leaving "ghost" of mouse pointer on MS-Windows
+
+ * src/w32term.c (frame_set_mouse_pixel_position):
+ * src/w32fns.c (Fw32_mouse_absolute_pixel_position): Momentarily
+ disable "mouse trails" when moving the mouse pointer. (Bug#22247)
+ * src/w32term.c (frame_set_mouse_pixel_position): Include
+ w32common.h.
+
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe): Fix typo in last check-in.
+
+2015-12-27 Jens Lechtenboerger <jens.lechtenboerger@fsfe.org>
+
+ Identify unsafe combinations of Bcc and encryption
+
+ * lisp/gnus/gnus-util.el (gnus-subsetp): New function
+ * lisp/gnus/mml-sec.el (mml-secure-safe-bcc-list): New variable
+ * lisp/gnus/mml-sec.el (mml-secure-bcc-is-safe): New function
+
+2015-12-27 Krzysztof Jurewicz <krzysztof.jurewicz@gmail.com> (tiny change)
+
+ Fix auth source lookups from erc with port numbers
+
+ * lisp/erc/erc.el (erc-open): `auth-source' wants strings, not port
+ numbers (bug#20541).
+
+2015-12-27 Fran Litterio <flitterio@gmail.com>
+
+ Run erc-kill-channel-hook always on exit
+
+ * lisp/erc/erc.el (erc-kill-buffer-function): Run erc-kill-channel-hook
+ when erc-kill-queries-on-quit is set (bug#21187).
+
+2015-12-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling fix
+
+ * test/automated/url-parse-tests.el:
+ (url-generic-parse-url/same-document-reference):
+ Rename from url-generic-parse-url/same-decument-reference.
+
+2015-12-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ Reword initial *scratch* for brevity, appearance
+
+ * lisp/startup.el (initial-scratch-message):
+ Reword to avoid apostrophes, and to make it shorter.
+ See the thread starting in:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg01241.html
+
+2015-12-26 Leo Liu <sdl.web@gmail.com>
+
+ Add ert-deftest to lisp-mode.el
+
+ * lisp-mode.el (lisp-imenu-generic-expression,
+ lisp-el-font-lock-keywords-1): Add ert-deftest.
+
+2015-12-26 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Mark imap changes as not needing doc changes
+
+ * imap.el (imap-ssl-open): Remove
+
+2015-12-26 Lars Ingebrigtsen <larsi@gnus.org>
+
+ Use built-in encryption in imap.el
+
+ * lisp/net/imap.el (imap-ssl-program): Remove (bug#21134).
+ (imap-starttls-open): Use open-network-stream instead of starttls.el.
+ (imap-tls-open): Use open-network-stream instead of tls.el.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Don't try using /bin/sh in artist.el on MS-Windows
+
+ * lisp/textmodes/artist.el (artist-figlet-get-font-list-windows):
+ New function.
+ (artist-figlet-choose-font): Use it on MS-Windows and MS-DOS.
+ (Bug#20167)
+
+2015-12-26 Wolfgang Jenkner <wjenkner@inode.at>
+
+ Always define gmalloc etc. in src/gmalloc.c
+
+ This is a work-around to prevent the compiler from using semantic
+ knowledge about malloc for optimization purposes. E.g., gcc 5.2
+ with -O2 replaces most of calloc's definition by a call to calloc;
+ see Bug#22085.
+ * src/gmalloc.c [!HYBRID_MALLOC] (malloc, realloc, calloc)
+ (aligned_alloc, free): Do not undef. Instead, define these as
+ functions (perhaps renamed to gmalloc etc.) in terms of gmalloc etc.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Fix documentation of browse-url browser-related functions
+
+ * lisp/net/browse-url.el (browse-url)
+ (browse-url-default-browser, browse-url-default-windows-browser)
+ (browse-url-default-macosx-browser, browse-url-chromium)
+ (browse-url-kde, browse-url-text-xterm): Clarify the usage of ARGS
+ and NEW-WINDOW arguments in these functions. (Bug#19421)
+
+2015-12-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ Propagate Bug#14412 fix to backtrace_eval_unrewind
+
+ * src/eval.c (unbind_to): Redo so that the FALLTHROUGH!! comment
+ becomes accurate again. This shouldn’t affect behavior.
+ (backtrace_eval_unrewind): Apply the recent unbind_to fix here, too.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Don't produce non-ASCII characters in *scratch*
+
+ * lisp/startup.el (initial-scratch-message): Quote apostrophes to
+ avoid producing non-ASCII characters in the *scratch* buffer's
+ commentary.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Document changes in 'compare-windows'
+
+ * lisp/vc/compare-w.el (compare-windows-removed)
+ (compare-windows-added): Doc fix.
+
+ * doc/emacs/files.texi (Comparing Files): Document the changes in
+ window selection by 'compare-windows'.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'vc-annotate-background-mode'
+
+ * doc/emacs/maintaining.texi (Old Revisions): Document
+ 'vc-annotate-background-mode'.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'vc-region-history'
+
+ * doc/emacs/maintaining.texi (VC Change Log): Document
+ 'vc-region-history'.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of 'vc-push'
+
+ * doc/emacs/maintaining.texi (Pulling / Pushing): Expand and
+ improve the documentation of 'vc-push'.
+
+ * lisp/vc/vc.el (vc-pull, vc-push): Doc fix.
+
+2015-12-26 Alain Schneble <a.s@realize.ch>
+
+ Include the tests for the URL parsing fixes
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'url-user-agent'.
+
+ * lisp/url/url-http.el (url-user-agent): Move from here...
+ * lisp/url/url-vars.el (url-user-agent): ...to here. This is to
+ keep all the URL defcustoms in one place, and also have it defined
+ whenever the URL library is loaded.
+
+ * doc/misc/url.texi (Customization): Document 'url-user-agent'.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Document protocols supported by URL library via Tramp
+
+ * doc/misc/url.texi (Tramp): New node, describes the URL schemes
+ supported via Tramp.
+ (Supported URL Types, file/ftp, rlogin/telnet/tn3270): Mention
+ Tramp.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Document changes in Shell-script mode
+
+ * lisp/progmodes/sh-script.el (sh-mode, sh-set-shell): Document
+ the 'sh-shell' file-local variable.
+ (top level): Add an auto-load form to avoid byte-compiler warning
+ about 'comint-send-string'.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Fix documentation of 'ses-define-local-printer'
+
+ * doc/misc/ses.texi (Printer functions): Fix whitespace between
+ sentences and punctuation. Add an index entry for
+ 'ses-define-local-printer'.
+
+2015-12-26 Shakthi Kannan <shakthimaan@gmail.com>
+
+ Document 'ert-summarize-tests-batch-and-exit'
+
+ * doc/misc/ert.texi (Running Tests in Batch Mode): Document
+ 'ert-summarize-tests-batch-and-exit'.
+
+2015-12-26 Eli Zaretskii <eliz@gnu.org>
+
+ Avoid assertion violation in unbind_to
+
+ * src/eval.c (unbind_to) <SPECPDL_LET>: Avoid assertion violation
+ if we get here with an object that is not a symbol. (Bug#14412)
+
+2015-12-25 Andreas Schwab <schwab@linux-m68k.org>
+
+ Don't treat /foo/bar:mumble as ange-ftp address
+ * lisp/net/browse-url.el (browse-url-filename-alist): Match colons
+ only in the first component. (bug#5362)
+
+2015-12-25 Eli Zaretskii <eliz@gnu.org>
+
+ Make sure *scratch* etc. use forward slashes in its default-directory
+
+ * lisp/startup.el (normal-top-level): On MS-Windows, convert
+ backslashes to forward slashes while decoding default-directory
+ of the initially-created buffers.
+
+2015-12-25 Eli Zaretskii <eliz@gnu.org>
+
+ Restore info about the build host in bug reports
+
+ * lisp/mail/emacsbug.el (report-emacs-bug): Report the system on
+ which Emacs was built. This is important information for
+ investigating bug reports reported by users who don't build their
+ Emacs.
+
+2015-12-25 Eli Zaretskii <eliz@gnu.org>
+
+ Fix bootstrap broken by changes related to OS X file-name encoding
+
+ * lisp/international/ucs-normalize.el (eval-when-compile): Make
+ sure char-code-property-alist includes elements that allow access
+ to 'decomposition' and 'canonical-combining-class' Unicode
+ properties, as compiling ucs-normalize.el requires that.
+ * lisp/loadup.el (featurep 'ns): Load ucs-normalize and ns-win
+ only of charprop.el was already loaded.
+
+ * src/Makefile.in ($(lispsource)/international/ucs-normalize.elc):
+ New order-only dependency.
+
+2015-12-25 Leo Liu <sdl.web@gmail.com>
+
+ * lisp/ido.el (ido-add-virtual-buffers-to-list):
+ Use bookmark-get-filename.
+
+2015-12-25 Michael Albinus <michael.albinus@gmx.de>
+
+ Make tramp-test29-vc-registered more robust
+
+ * test/automated/tramp-tests.el (tramp-test29-vc-registered):
+ Move `bzr' case down. Skip test when `vc-create-repo' fails.
+ Remove instrumentation.
+
+2015-12-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * lisp/term/x-win.el (x-gtk-stock-map): Fix typo.
+
+2015-12-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ Fix `gnus-union' so as to behave like `cl-union'
+
+ * lisp/gnus/gnus-group.el (gnus-group-prepare-flat):
+ Make gnus-union use `equal' to compare items in lists.
+
+ * lisp/gnus/gnus-util.el (gnus-union):
+ Make it behave like cl-union partially.
+
+2015-12-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix dired.c typo with ptrdiff_t vs Lisp_Object
+
+ * src/dired.c (file_name_completion): Don't assume Lisp_Object is
+ an integer type, fixing a problem introduced in the recent fix for
+ Bug#22169.
+
+2015-12-23 Eli Zaretskii <eliz@gnu.org>
+
+ Document default process sentinel more prominently
+
+ * doc/lispref/processes.texi (Asynchronous Processes): Mention the
+ defaults for process filter and sentinel. Provide cross-references.
+ (Process Information): Provide cross-references to where filters
+ and sentinels are described.
+ (Filter Functions): Add an index entry for "default filter".
+ (Sentinels): Add a few status messages not documented previously.
+ Resolve the "killed" confusion. Document and describe the default
+ sentinel. (Bug#22220)
+
+2015-12-23 Eli Zaretskii <eliz@gnu.org>
+
+ Fix file-name completion on OS X
+
+ * src/dired.c (file_name_completion): Reject false matches due to
+ file-name-coding-systems that decompose characters when encoding
+ file names, by comparing decoded file names as well. (Bug#22169)
+ (syms_of_dired) <Qdecomposed_characters>: New DEFSYM.
+
+ * lisp/international/ucs-normalize.el (utf-8-hfs): Give it a
+ non-nil 'decomposed-characters' property.
+
+2015-12-23 Anders Lindgren <andlind@gmail.com>
+
+ File-name completion of non-ASCII characters on OS X (bug#22169)
+
+ The coding system `utf-8-nfd', locally defined in ns-win.el,
+ didn't provide a :pre-write-conversion method, causing file name
+ completion of non-ASCII characters to fail. Solved by using the
+ `utf-8-hfs' coding system provided by `ucs-normalize'.
+
+ * lisp/loadup.el: Load international/ucs-normalize (when building
+ for ns).
+
+ * lisp/term/ns-win.el (utf-8-nfd): Made `utf-8-nfd' as alias for
+ `utf-8-hfs' and removed the old implementation. Set `utf-8-hfs'
+ as the file name coding system.
+
+ * src/nsfns.m (ns-convert-utf8-nfd-to-nfc): Removed.
+
+2015-12-22 Tom Tromey <tom@tromey.com>
+
+ Fix bug #18588 by making bug-reference-bug-regexp more lenient
+
+ * lisp/progmodes/bug-reference.el (bug-reference-bug-regexp): Accept
+ "bug NNNN". (Bug #18588)
+
+2015-12-22 Tom Tromey <tom@tromey.com>
+
+ add some cl-* aliases to lisp-mode imenu
+
+ * (lisp-imenu-generic-expression): Add cl-define-compiler-macro,
+ cl-defgeneric, and cl-defmethod.
+
+2015-12-22 Tom Tromey <tom@tromey.com>
+
+ Make a variable buffer-local
+
+ * lisp/generic-x.el (generic-rul-mode-setup-function): Make
+ font-lock-syntax-table buffer-local. (Bug #21627)
+
+2015-12-22 Eli Zaretskii <eliz@gnu.org>
+
+ Fix decoding of text in URLs retrieved by EWW
+
+ * lisp/net/eww.el (eww-render): Pass 'charset' to
+ 'eww-display-raw'. Use the value of 'last-coding-system-used', if
+ non-nil, to set 'buffer-file-coding-system' of the buffer where we
+ show the URL.
+ (eww-display-html, eww-display-raw): Decode the text correctly,
+ using the charset found in the headers, and defaulting to UTF-8.
+ If the user told us to use a specific encoding, override the
+ charset from the headers. (Bug#22222)
+
+2015-12-22 Alan Mackenzie <acm@muc.de>
+
+ Fix a coding error in c-forward-<>-arglist-recur. Fixes bug#22156
+
+ * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): Remove unused
+ variable `tmp'.
+ After a failed search for a matching ">", restore point before continuing.
+
+2015-12-22 Michael Albinus <michael.albinus@gmx.de>
+
+ Instrument Tramp tests
+
+ * test/automated/tramp-tests.el (tramp-test29-vc-registered)
+ (tramp--test-utf8): Instrument tests.
+
+2015-12-22 Martin Rudalics <rudalics@gmx.at>
+
+ Fix `display-buffer' call in `display-message-or-buffer' (Bug#22221)
+
+ * lisp/simple.el (display-message-or-buffer): Call
+ `display-buffer' with ACTION instead of NOT-THIS-WINDOW
+ (Bug#22221).
+
+2015-12-21 Juri Linkov <juri@linkov.net>
+
+ * lisp/saveplace.el (toggle-save-place, save-place-to-alist)
+
+ (save-places-to-alist, save-place-dired-hook):
+ Check for dired-subdir-alist. (Bug#19851)
+
+2015-12-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ Add FIXME comment re stack overflow and modules
+
+2015-12-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ Revert some recent emacs-module commentary
+
+ Most of the recently-added commentary was incorrect, due to the
+ possibility of stack overflow.
+
+2015-12-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling fix: prefer "cooperate" to "co-operate"
+
+2015-12-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port undo fixes to -fno-common
+
+ Port recent fix for Bug#21968 to platforms like 'gcc -fno-common'.
+ * src/keyboard.c, src/keyboard.h (point_before_last_command_or_undo)
+ (buffer_before_last_command_or_undo):
+ Declare in keyboard.h, and define in keyboard.c,
+ instead of assuming the traditional Unix relaxed ref-def linkage.
+
+2015-12-20 Philipp Stephani <phst@google.com>
+
+ Improve commentary for emacs-module.c
+
+ * src/lisp.h: Document emacs-module.c assumptions about EQ and NILP.
+ * src/emacs-module.c (module_non_local_exit_get): Document that we
+ cannot use the current implementation.
+ (module_is_not_nil, module_eq): Document assumptions about EQ and
+ NILP.
+
+2015-12-20 Michael Albinus <michael.albinus@gmx.de>
+
+ Suppress test on Mac OS X
+
+ * test/automated/tramp-tests.el (tramp--test-darwin-p): New defun.
+ (tramp--test-utf8): Use it.
+
+2015-12-20 Alan Mackenzie <acm@muc.de>
+
+ Merge branch 'scratch/follow' into emacs-25
+
+ This allows Isearch, etc., to work well when Follow Mode is active.
+
+2015-12-19 Michael Albinus <michael.albinus@gmx.de>
+
+ * lisp/net/tramp-sh.el (tramp-get-ls-command-with-w-option):
+ Improve check.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Fix last commit
+
+ * doc/emacs/rmail.texi (Rmail Deletion): Document new behavior of 'u'
+ with numeric argument.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of Rmail
+
+ * doc/emacs/rmail.texi (Rmail Summary Edit, Rmail Deletion):
+ Document new behavior of 'd' and 'C-d' with numeric argument.
+ (Rmail Display): Document the rendering of HTML MIME parts.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of new cl-lib functions
+
+ * doc/misc/cl.texi (Predicates on Numbers, Numerical Functions):
+ Fix wording.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Document the new feature of 'minibuffer-with-setup-hook'
+
+ * lisp/files.el (minibuffer-with-setup-hook): Clarify how FUN is
+ added to `minibuffer-setup-hook'.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of Font Lock
+
+ * doc/lispref/modes.texi (Other Font Lock Variables): Document
+ 'font-lock-flush-function' and 'font-lock-ensure-function'.
+ (Font Lock Basics): Document the basic fontification functions
+ referenced in "Other Font Lock Variables".
+
+ * lisp/font-lock.el (font-lock-flush, font-lock-ensure): Doc fix.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of Rectangle mode
+
+ * doc/emacs/killing.texi (Rectangles): Document "C-x C-x" in
+ rectangle-mark-mode.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Manual followup to last change
+
+ * doc/lispref/display.texi (Displaying Messages): Sync with the
+ doc string. (Bug#22210)
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Clarify doc string of 'display-message-or-buffer'
+
+ * lisp/simple.el (display-message-or-buffer): Doc fix. Suggested
+ by Sebastian Wiesner <swiesner@lunaryorn.com>. (Bug#22210)
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ * doc/emacs/emacs.texi (Top): Update top-level menus.
+
+ * doc/lispref/elisp.texi (Top): Update top-level menus.
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Document how to avoid file-local variables that aren't
+
+ * doc/emacs/custom.texi (Specifying File Variables): Describe how
+ to prevent Emacs from interpreting unrelated text as file-local
+ variables. (Bug#22166)
+
+2015-12-19 Dave Thomas <dave@pragprog.org> (tiny change)
+
+ Fix a typo in eterm-color's termcap entry
+
+ * lisp/term.el (term-termcap-format): Fix a typo in the "ue="
+ entry. (Bug#22184)
+
+2015-12-19 Eli Zaretskii <eliz@gnu.org>
+
+ Allow 'browse-url-emacs' visit non-existent URLs
+
+ * lisp/url/url-handlers.el (url-insert-file-contents): Don't
+ signal an error if VISIT is non-nil, to more faithfully emulate
+ the behavior of 'insert-file-contents'. (Bug#22160)
+
+2015-12-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ Remove SunOS 4.x cruft
+
+ Support for SunOS 4.x was removed in Emacs 23 but some cruft was left behind.
+ * lib-src/pop.c [sun]: Remove no-longer-needed include.
+ * lwlib/xlwmenu.c (SUNSO41): Remove.
+
+2015-12-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge from gnulib
+
+ This mostly commentary fixes.
+ * doc/misc/texinfo.tex, lib/intprops.h: Copy from gnulib.
+ * lib/gnulib.mk: Regenerate with new gnulib-tool.
+
+2015-12-18 Michael Albinus <michael.albinus@gmx.de>
+
+ Minor fixes in Tramp
+
+ * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-ls):
+ Reorder ls arguments.
+
+ * lisp/net/tramp.el (tramp-dissect-file-name): Fix docstring.
+
+2015-12-18 Michael Albinus <michael.albinus@gmx.de>
+
+ Make tramp a built-in package
+
+ * lisp/finder.el (finder-compile-keywords): Update
+ `package--builtins' also when Version: keyword is available.
+
+ * lisp/net/trampver.el: Add Version: keyword.
+ (tramp-version): Change it to "2.2.13.25.1", in order to be
+ compatible with `version-to-list'.
+
+2015-12-18 Lele Gaifax <lele@metapensiero.it>
+
+ * etc/tutorials/TUTORIAL.it: Update and fix typos. (Bug#22187)
+
+2015-12-18 Alan Mackenzie <acm@muc.de>
+
+ Rename `recenter-group' to `recenter-window-group'
+
+ * doc/lispref/windows.texi (Textual Scrolling)
+ * lisp/window.el (top level, recenter-group)
+ * lisp/follow.el (follow-mode)
+ * lisp/isearch.el (isearch-back-into-window): Rename `recenter-group' to
+ `recenter-window-group' and `recenter-group-function' to
+ `recenter-window-group-function'.
+
+2015-12-18 Eli Zaretskii <eliz@gnu.org>
+
+ Fix vertical-motion in tabulated-list mode
+
+ * src/indent.c (Fvertical_motion): When moving from line beginning
+ to point under line truncation, assume overshoot by one line only
+ if point actually lies beyond the window's right margin.
+ (Bug#22194)
+
+2015-12-18 Martin Rudalics <rudalics@gmx.at>
+
+ Don't have help functions call x-display-pixel-width/-height on ttys
+
+ * lisp/help.el (temp-buffer-max-height, temp-buffer-max-width):
+ Don't call x-display-pixel-width/-height on ttys.
+
+2015-12-17 Dmitry Gutov <dgutov@yandex.ru>
+
+ Use 'hg id' in vc-hg-previous-revision
+
+ * lisp/vc/vc-hg.el (vc-hg-previous-revision):
+ Use 'hg id' to retrieve it (bug#22032).
+
+2015-12-17 Alan Mackenzie <acm@muc.de>
+
+ * lisp/follow.el (follow-sit-for): Remove (it's redundant).
+
+2015-12-17 Eli Zaretskii <eliz@gnu.org>
+
+ Fix a typo in the Emacs manual
+
+ * doc/emacs/trouble.texi (Sending Patches): Fix a typo. Reported
+ by Lele Gaifax <lele@metapensiero.it>. (Bug#22193)
+
+2015-12-17 Eli Zaretskii <eliz@gnu.org>
+
+ Fix parsing netrc entries with ports
+
+ * lisp/gnus/auth-source.el (auth-source-ensure-strings): Don't
+ make a list out of 't'. (Bug#22188)
+
+ * test/automated/auth-source-tests.el
+ (auth-source-test-netrc-parse-entry): New test.
+
+2015-12-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix typo in Doug Lea malloc configure log
+
+ * configure.ac (emacs_cv_var_doug_lea_malloc):
+ Fix typo that confused the log output of 'configure'.
+
+2015-12-16 Nicolas Petton <nicolas@petton.fr>
+
+ * etc/NEWS: Mention the new pcase patterns `seq' and `map'.
+
+2015-12-16 Alan Mackenzie <acm@muc.de>
+
+ * etc/NEWS: Move entry on pcase to correct section
+
+ (Accidentally omitted from previous commit)
+
+2015-12-16 Alan Mackenzie <acm@muc.de>
+
+ Add documentation for changes to Show Paren mode.
+
+ * lisp/paren.el (show-paren-highlight-openparen): Enhance doc string.
+
+ * doc/emacs/programs.texi (Matching): Add descriptions of some pertinent user
+ options, including the new show-paren-when-point-inside-paren and
+ show-paren-when-point-in-periphery.
+
+ * etc/NEWS (.. Specialized Modes ...): Add an entry for Show Paren mode.
+ Move an entry on pcase to the Lisp Changes section.
+
+2015-12-16 Eli Zaretskii <eliz@gnu.org>
+
+ Document Eldoc changes
+
+ * doc/emacs/programs.texi (Lisp Doc): Document Global Eldoc mode.
+
+2015-12-16 Eli Zaretskii <eliz@gnu.org>
+
+ Fix invocation of Python and Guile interpreters from gdb-mi
+
+ * lisp/progmodes/gdb-mi.el (gdb-control-commands-regexp): Add
+ commands for interactive Python and Guile interpreters.
+ (gdb-send): Recognize various ways of exiting from Python and
+ Guile interpreters and returning to GDB. For details, see
+ http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00693.html
+ and http://stackoverflow.com/questions/31514741.
+
+2015-12-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ Remove attempt to use C11 threads
+
+ C11 threads are not needed for Emacs now, and their use is causing
+ hassles on FreeBSD 10.x. Problem reported by Ashish SHUKLA in:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00648.html
+ * configure.ac: Do not check for C11 threads. Remove unnecessary
+ fiddling with CPPFLAGS when configuring pthreads.
+ * src/emacs-module.c (main_thread, check_main_thread)
+ (module_init): Do not worry about C11 threads.
+
+2015-12-15 Michael Albinus <michael.albinus@gmx.de>
+
+ Set utf8 encoding with stty in Tramp
+
+ * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Move up uname check. Handle Mac OS X eol encoding. Set utf8
+ encoding with stty.
+
+2015-12-15 Alan Mackenzie <acm@muc.de>
+
+ Tidy up documentation associated with window groups.
+
+ * doc/lispref/windows.texi (Basic Windows): Add an @anchor for "Window
+ Groups". Correct example function to `window-group-start'.
+ (Window Start and End, Textual scrolling): Point to the new anchor. State
+ that (most of) the args in window group functions have the same meaning as for
+ the corresponding window primitives.
+
+ * doc/lispref/positions.texi (Screen Lines). Same as above.
+
+2015-12-15 Michael Albinus <michael.albinus@gmx.de>
+
+ Complete last commit
+
+ * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Move uname check up. Handle Mac OS X eol encoding.
+
+2015-12-15 Michael Albinus <michael.albinus@gmx.de>
+
+ Handle Mac OS X eol encoding in Tramp
+
+ * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Handle Mac OS X eol encoding.
+
+2015-12-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ Fix variable name typo in compute_tip_xy
+
+ * src/w32fns.c (compute_tip_xy):
+ * src/xfns.c (compute_tip_xy): Modify *root_x instead of *root_y
+ when `right' is integer.
+
+2015-12-14 foudfou <foudil.newbie+git@gmail.com> (tiny change)
+
+ * lisp/ibuffer.el: Add ability to (un-)mark or delete buffers in the region.
+
+2015-12-14 Tassilo Horn <tsdh@gnu.org>
+
+ Revert "Fix rx matcher overflow without limiting"
+
+ This reverts commit fe27e037663d36be3e5741c2ce86ab4ee8017db1.
+
+2015-12-14 Alan Mackenzie <acm@muc.de>
+
+ Ispell: Bind isearch-regexp-function to nil around call to isearch..-new-loop
+
+ * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay): bind
+ isearch-regexp-function to nil around call to isearch-lazy-highligh-new-loop.
+
+2015-12-14 Tassilo Horn <tsdh@gnu.org>
+
+ Fix rx matcher overflow without limiting
+
+ * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve last
+ change to the regexp without imposing a limit on the length of the
+ options.
+
+2015-12-14 Alan Mackenzie <acm@muc.de>
+
+ Enhance ispell-skip-region-alist by generating part of it at runtime.
+
+ * lisp/textmodes/ispell.el (ispell--\\w-filter, ispell--make-\\w-expression)
+ (ispell--make-filename-or-URL-re): New functions which generate a regexp.
+ (ispell-skip-region-alist): Remove the bit that matches a filename/URL, etc.
+ (ispell-begin-skip-region-regexp, ispell-skip-region-list, ispell-message):
+ Include the result of ispell--make-filename-or-URL-re in regexps.
+
+2015-12-14 Glenn Morris <rgm@gnu.org>
+
+ * build-aux/gitlog-to-emacslog: Ignore more pointless merge commits.
+
+2015-12-14 Alan Mackenzie <acm@muc.de>
+
+ Replace GROUP argument in six window primitives by new functions.
+
+ * doc/lispref/windows.texi (Window Start and End, Textual Scrolling)
+ * doc/lispref/positions.texi (Screen Lines): Remove optional GROUP argument
+ from description of six window functions. Add in description of new functions
+ window-group-start, window-group-end, set-window-group-start,
+ pos-visible-in-window-group-p, recenter-group and move-to-window-group-line,
+ together with the six variables indirecting to the pertinent group
+ functions.
+
+ * src/window.c
+ * src/keyboard.c: Revert the commit from 2015-11-11 12:02:48, in so far as it
+ applies to these two files, which added the GROUP argument to six window
+ primitives.
+
+ * lisp/follow.el (follow-mode): Use updated variable names for the indirected
+ functions.
+
+ * lisp/isearch.el (isearch-update, isearch-done, isearch-string-out-of-window)
+ (isearch-back-into-window, isearch-lazy-highlight-new-loop)
+ (isearch-lazy-highlight-search, isearch-lazy-highlight-update): Replace calls
+ to window primitives (e.g. window-start) with a GROUP argument by calls to
+ new functions (e.g. window-group-start).
+
+ * lisp/ispell.el (ispell-command-loop): Replace call to
+ pos-visible-in-window-p with pos-visible-in-window-group-p.
+
+ * lisp/window.el (window-group-start, window-group-end)
+ (set-window-group-start, recenter-group, pos-visible-in-window-group-p)
+ (selected-window-group, move-to-window-group-line): New functions.
+ (window-group-start-function, window-group-end-function)
+ (set-window-group-start-function, recenter-group-function)
+ (pos-visible-in-window-group-p-function, selected-window-group-function)
+ (move-to-window-group-line-function): New variables.
+
+2015-12-14 Vitorio Miguel <vdrbandeiras@gmail.com> (tiny change)
+
+ * etc/tutorials/TUTORIAL.pt_BR: Fix a typo. (Bug#22165)
+
+2015-12-13 Eli Zaretskii <eliz@gnu.org>
+
+ Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+
+2015-12-13 Tassilo Horn <tsdh@gnu.org>
+
+ Improve regex to not trigger stack overflow
+
+ * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Improve regex in
+ order not to trigger a stack overflow in regex matcher with unbalanced
+ brackets (bug#22146).
+
+2015-12-13 Eli Zaretskii <eliz@gnu.org>
+
+ Fix visiting files with raw-text
+
+ * src/fileio.c (Finsert_file_contents): Fix setting buffer unibyte
+ when some stuff was actually read. (Bug#22162)
+
+2015-12-13 Tassilo Horn <tsdh@gnu.org>
+
+ Fix regex matching keyval labels
+
+ * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Fix regexp
+ matching keyval labels.
+
+2015-12-13 Michael Albinus <michael.albinus@gmx.de>
+
+ * lisp/ido.el (ido-file-name-all-completions-1): Do not raise an error
+
+ ... in case of Tramp. (Bug#20821)
+
+2015-12-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix performance regression with gcc -O0
+
+ This fixes the smaller performance hit that I noted in:
+ https://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00357.html
+ * src/alloc.c (macro_XPNTR_OR_SYMBOL_OFFSET, macro_XPNTR):
+ * src/puresize.h (puresize_h_PURE_P)
+ (puresize_h_CHECK_IMPURE):
+ New macros, with the old contents of the functions.
+ * src/alloc.c (XPNTR_OR_SYMBOL_OFFSET, XPNTR):
+ * src/puresize.h (PURE_P, CHECK_IMPURE):
+ Use the new macros. Also macros, if DEFINE_KEY_OPS_AS_MACROS.
+ * src/conf_post.h (ATTRIBUTE_UNUSED):
+ * src/lisp.h (DEFINE_KEY_OPS_AS_MACROS): New macros.
+
+2015-12-12 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/emacs-lisp/package.el (package-unpack): Security check
+
+ Check that we received the package we were offered.
+
+2015-12-12 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/emacs-lisp/package.el (package--compile): Don't activate
+
+ `package-unpack' takes care of all activations now (other than
+ `package-initialize). `package--compile' now only compiles.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Document the new bindings of <UP> and <DOWN> in the minibuffer
+
+ * doc/emacs/mini.texi (Minibuffer History): Describe the new
+ bindings of <UP> and <DOWN> in the minibuffer.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of Ido
+
+ * doc/misc/ido.texi (Misc): Document 'C-S-b'.
+
+2015-12-12 Martin Rudalics <rudalics@gmx.at>
+
+ Fix frame height calculations with added menu bar on Windows (Bug#22105)
+
+ * doc/lispref/frames.texi (Parameter Access): Mention pitfalls
+ when simultaneously specifying multiple parameters for
+ `modify-frame-parameters' that all may change the frame's size.
+ * src/w32fns.c (x_set_menu_bar_lines): Don't set
+ windows_or_buffers_changed here.
+ (my_create_tip_window, Fx_show_tip): Call AdjustWindowRect
+ with third argument false.
+ * src/w32menu.c (set_frame_menubar): Set
+ windows_or_buffers_changed here.
+ * src/w32term.c (x_set_window_size): Determine third argument of
+ AdjustWindowRect from whether the frame has a menu bar and not
+ from whether it wants one.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Document the change in interactive shell mode
+
+ * doc/emacs/misc.texi (Interactive Shell): Document that the
+ '*shell*' buffer by default displays in a new window.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of package.el
+
+ * doc/emacs/package.texi (Package Menu): Document the 'external'
+ status and the new menu commands.
+ (Package Installation): Document archive priorities.
+
+ * lisp/emacs-lisp/package.el (package-archive-priorities): Doc fix.
+ (package-menu-hide-low-priority): Doc fix.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Update and document new features of xterm support
+
+ * doc/emacs/frames.texi (Text-Only Mouse): Document that
+ track-mouse is supported by newer xterm versions.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Document new features of Prettify Mode
+
+ * doc/emacs/programs.texi (Misc for Programs): Document
+ 'prettify-symbols-compose-predicate' and
+ 'prettify-symbols-unprettify-at-point'.
+
+ * lisp/progmodes/prog-mode.el (prettify-symbols-alist)
+ (prettify-symbols-default-compose-p)
+ (prettify-symbols-compose-predicate)
+ (prettify-symbols--compose-symbol): Doc fixes.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Document multi-mode indentation facilities
+
+ * doc/lispref/text.texi (Mode-Specific Indent): Document
+ 'prog-indentation-context', 'prog-first-column', and 'prog-widen'.
+
+ * lisp/progmodes/prog-mode.el (prog-indentation-context)
+ (prog-widen): Doc fixes.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'vc-refresh-state'
+
+ * doc/emacs/maintaining.texi (Version Control): Document
+ 'vc-refresh-state'.
+
+ * lisp/vc/vc-hooks.el (vc-refresh-state): Doc fix.
+
+2015-12-12 Eli Zaretskii <eliz@gnu.org>
+
+ Fix echo for "C-u"
+
+ * src/keyboard.c (command_loop_1): Undo last change. It caused
+ duplicate echo of C-u. (Bug#22107)
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ Avoid errors when creating files under SVN in new directory
+
+ * lisp/vc/vc-svn.el (vc-svn-registered): Use
+ file-accessible-directory-p, to avoid cd'ing to a non-existing
+ directory, which signals an error on some systems. (Bug#21984)
+ (vc-svn-checkin): Call log-edit-extract-headers with 2 arguments.
+ Use declare-function to avoid byte-compiler warnings.
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ Improve Lua support in etags
+
+ * lib-src/etags.c (Lua_functions): Skip spaces before looking for
+ "function".
+
+ * etc/NEWS: Mention improved Lua support by 'etags'.
+
+ * test/etags/lua-src/test.lua (test): Add tests for indented
+ function definitions.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to the modified Lua tests.
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ Fix 'this-command-keys' wrt prefix argument
+
+ * src/keyboard.c (command_loop_1): Restore the feature whereby C-u
+ was part of this-command-keys, but not of this-single-command-keys.
+ (Bug#22107)
+
+ * lisp/simple.el (internal-echo-keystrokes-prefix): Add
+ commentary about the function's return value.
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ * lisp/files.el (load-library): Doc fix. (Bug#22140)
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ Improve and document Ruby support in 'etags'
+
+ * lib-src/etags.c (Ruby_suffixes): Add ".ruby".
+ (Ruby_functions): Support "module" and overloaded operators.
+ (Ruby_help): Mention "module".
+
+ * test/etags/ruby-src/test.rb:
+ * test/etags/ruby-src/test1.ruby: New files.
+ * test/etags/Makefile (RBSRC): New tests.
+ (SRCS): Add ${RBSRC}.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to the new Ruby tests.
+
+ * doc/man/etags.1: Mention Ruby support.
+ * etc/NEWS: Mention Ruby support.
+
+2015-12-11 Xi Lu <lx@shellcodes.org>
+
+ Initial support for Ruby in 'etags'
+
+ * lib-src/etags.c <Ruby_suffixes>: New variable.
+ (lang_names): Add an entry for Ruby.
+ (Ruby_functions): New function. (Bug#22116)
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ Clarify documentation of 'modify-frame-parameters'
+
+ * doc/lispref/frames.texi (Parameter Access): Clarify what "ignored
+ PARMs" mean for 'modify-frame-parameters'.
+
+ * src/frame.c (Fmodify_frame_parameters): Clarify what "ignored
+ PARMs" mean for this function. (Bug#22104)
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ Fix setting buffer unibyte when reading from a device
+
+ * src/fileio.c (Finsert_file_contents): Call Fset_buffer_multibyte
+ to make a (possibly non-empty) buffer unibyte. (Bug#22096)
+
+2015-12-11 Eli Zaretskii <eliz@gnu.org>
+
+ Clarify documentation of 'values'
+
+ * doc/lispref/eval.texi (Eval): Clarify that 'values' are not
+ updated by any evaluation commands in 'lisp-interaction-mode'.
+ (Bug#22056)
+
+2015-12-11 Anders Lindgren <andlind@gmail.com>
+
+ Fixed subversion vc error when opening file in new directory (bug#21984).
+
+ * lisp/vc/vc-svn.el (vc-svn-registered): Check if directory exists.
+
+2015-12-09 Eli Zaretskii <eliz@gnu.org>
+
+ Yet another fix for when point ends up in invisible text
+
+ * src/xdisp.c (redisplay_window): When someone forced
+ window-start, and honoring that failed to show the cursor, try
+ moving out of invisible text, before falling back to the middle of
+ the window. (Bug#22098)
+
+2015-12-09 Michael Albinus <michael.albinus@gmx.de>
+
+ Fix error in Tramp perl script for cygwin
+
+ * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not raise an
+ error if file doesn't exist.
+
+2015-12-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ Remove font workaround for limited outdated versions
+
+ * src/macfont.m (mac_font_descriptor_get_adjusted_weight): Remove
+ workaround for HiraginoSans-W7 on OS X 10.11 and 10.11.1.
+
+2015-12-09 Anders Lindgren <andlind@gmail.com>
+
+ Don't add "." to load path (bug#21104)
+
+ When configured with --enable-locallisppath=no, which is the
+ default for OS X, the load-path incorrectly was populated with ".".
+
+ * src/lread.c (init_lread): Don't call `decode_env_path' when
+ PATH_SITELOADSEARCH is empty.
+
+2015-12-08 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/emacs-lisp/package.el (package--with-response-buffer):
+
+ Search for the blank-line in the right buffer.
+
+2015-12-08 Glenn Morris <rgm@gnu.org>
+
+ * test/automated/simple-test.el (undo-auto-boundary-timer): Update
+ for recent change.
+
+2015-12-08 Glenn Morris <rgm@gnu.org>
+
+ Fix some display-warning usage.
+
+ * lisp/files.el (hack-local-variables, hack-dir-local-variables):
+ * lisp/calendar/diary-lib.el (diary-include-files, diary-sexp-entry):
+ * lisp/calendar/holidays.el (calendar-holiday-list):
+ * lisp/mail/rmailout.el (rmail-output-read-file-name):
+ Fix display-warning usage.
+
+2015-12-07 Glenn Morris <rgm@gnu.org>
+
+ * lisp/calendar/cal-html.el: Require diary-lib.
+
+ (cal-html-list-diary-entries): Handle no diary. (Bug#21994)
+
+2015-12-07 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+
+ Add Obsolete-since header to eudcb-ph.el
+
+ * eudcb-ph.el: Add Obsolete-since header.
+
+2015-12-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling fixes
+
+ * doc/misc/calc.texi (Predefined Units): Use the bland modern
+ scientific style for spelling the units “ampere” and
+ “angstrom” rather than the older style “Ampere” and
+ “Ångstrom”. The latter spelling was wrong anyway (it should
+ have been “Ångström”).
+ * lisp/emacs-lisp/ert.el (ert--explain-equal-rec):
+ Fix misspelling of ‘atom’ in code.
+
+2015-12-07 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of kill commands
+
+ * lisp/simple.el (region-extract-function, delete-backward-char)
+ (delete-forward-char, kill-region, copy-region-as-kill)
+ (kill-ring-save): Better document the optional argument REGION in
+ the doc strings. Mention in the doc strings that text put in the
+ kill-ring can be filtered by 'filter-buffer-substring'.
+
+ * doc/lispref/text.texi (Kill Functions): Mention that functions
+ described in this subsection can filter text they put in the
+ kill-ring. Add a cross-reference to "Buffer Contents" and an
+ index entry. Document the optional argument 'region' and its
+ effect.
+ (Bug#21315)
+
+2015-12-07 Alan Mackenzie <acm@muc.de>
+
+ Further progress making Isearch, Ispell, Replace work with Follow Mode.
+
+ * lisp/follow.el: (follow-mode): Remove references to sit*-for-function, which
+ no longer exists. Add follow-post-command-hook to three special purpose
+ hooks at setup, and remove them at tear down.
+
+ * lisp/isearch.el: (isearch-update): invoke isearch-update-post-hook before
+ isearch-lazy-highlight-new-loop.
+ (isearch-lazy-highlight-new-loop): Restore this function to what it previously
+ was, merging the functionality of isearch-lazy-highlight-maybe-new-loop into
+ it.
+ (isearch-lazy-highlight-maybe-new-loop): function removed.
+
+ * lisp/replace.el: (replace-update-post-hook): New hook variable.
+ (perform-replace): Add second (nil) argument to looking-back. Invoke
+ replace-update-post-hook before calling replace-highlight.
+
+ * lisp/textmodes/ispell.el: (ispell-update-post-hook): New hook variable.
+ (ispell-command-loop): invoke ispell-update-post-hook. Add GROUP argument to
+ call of pos-visible-in-window-p.
+ (ispell-display-buffer): Place *Choices* window at the top of the last window
+ in a window group.
+
+2015-12-07 Alan Mackenzie <acm@muc.de>
+
+ Amend doc of `mapconcat': it can take sequences, not merely strings.
+
+ * doc/lispref/functions.texi (Mapping Functions): Amend the doc of `mapconcat'
+ to say that SEPARATOR and the results from FUNCTION may be any character
+ sequences, not just strings. Add an @xref to "Sequences Arrays Vectors".
+
+2015-12-07 Michael Albinus <michael.albinus@gmx.de>
+
+ Fix an utf8 problem for Tramp on BSD
+
+ * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Make lax check for utf8.
+ (tramp-get-remote-locale): Add "en_US.UTF-8" as candidate.
+
+2015-12-06 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+
+ Make eudcb-ph.el obsolete
+
+ * doc/misc/eudc.texi: Bump version to 1.40.0.
+ Remove PH/QI sections and mentions.
+ * lisp/obsolete/eudcb-ph.el: Make obsolete.
+ * lisp/net/eudc-vars.el (eudc-known-protocols): Remove ph.
+ (eudc-ph-bbdb-conversion-alist): Make obsolete.
+ * etc/NEWS: Mention this. (Bug#21191)
+
+2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Remove overenthusiastic eassert
+
+ * src/lisp.h (XSYMBOL): Remove eassert incorrectly added in
+ previous change. It breaks on MS-Windows --with-wide-int.
+ Problem reported by Eli Zaretskii in:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00275.html
+
+2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Pacify gcc -Wparentheses
+
+ * src/xdisp.c (row_containing_pos): Reparenthesize.
+
+2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port mod-test to 32-bit Emacs --without-wide-int
+
+ * modules/mod-test/test.el (mod-test-sum-test):
+ Bring back the 2**29 tests, but port them to 32-bit Emacs
+ --without-wide-int.
+
+2015-12-06 Michael Albinus <michael.albinus@gmx.de>
+
+ Fix minor Tramp problems found on BSD
+
+ * lisp/net/tramp-sh.el (tramp-perl-file-truename): Do not append
+ trailing slash. Quote apostrophes.
+ (tramp-sh-handle-file-truename): Do not append trailing slash in
+ the "ls" case.
+ (tramp-get-ls-command-with-w-option): New defun.
+ (tramp-do-file-attributes-with-ls)
+ (tramp-do-directory-files-and-attributes-with-stat): Use it.
+
+ * test/automated/tramp-tests.el
+ (tramp-test31-special-characters-with-perl)
+ (tramp-test31-special-characters-with-ls)
+ (tramp-test32-utf8-with-perl, tramp-test32-utf8-with-ls):
+ Suppress also readlink.
+
+2015-12-06 Eli Zaretskii <eliz@gnu.org>
+
+ Fix cursor display when invisible text is at line beginning
+
+ * src/xdisp.c (redisplay_window): When scrolling fails to show
+ point, prefer using the desired matrix if possible for finding the
+ fallback glyph row for displaying the cursor. (Bug#22098)
+ (row_containing_pos): Exit the loop as soon as we hit the first
+ disabled glyph row. Otherwise we risk accessing garbled data and
+ departing to the no-no land.
+
+2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Improve module interface when WIDE_EMACS_INT
+
+ * src/emacs-module.c (plain_values): New constant.
+ (module_nil): Now a constant.
+ (Finternal_module_call, value_to_lisp_bits, lisp_to_value_bits)
+ (syms_of_module): Use if, not #ifdef, so that both sides are
+ checked at compile-time, and so that GCC doesn’t complain
+ about an unused var in the typical case. Also, depend on
+ plain_values, not on WIDE_EMACS_INT; the code shouldn’t assume
+ that WIDE_EMACS_INT implies !USE_LSB_TAG.
+ (value_to_lisp_bits, lisp_to_value_bits): New functions.
+ Sign-extend integers rather than zero-extending them, as small
+ negative integers are more likely.
+ (value_to_lisp, lisp_to_value): Rewrite in terms of the new *_bits
+ functions.
+ (HAVE_STRUCT_ATTRIBUTE_ALIGNED): Define to 0 if not already defined.
+ (mark_modules): Remove. All uses removed.
+ (lisp_to_value): Don’t assume Fcons returns a pointer aligned
+ to GCALIGNMENT.
+ (syms_of_module): Check that module_nil converts to Qnil.
+ * src/lisp.h (lisp_h_XSYMBOL, XSYMBOL): Use signed conversion, since
+ we prefer signed to unsigned when either will do.
+ (TAG_PTR): Sign-extend pointers when USE_LSB_TAG, as this is
+ a bit better for emacs-module.c.
+
+2015-12-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port mod-test to x86-64 GNU/Linux running 32-bit
+
+ * modules/mod-test/test.el (mod-test-sum-test):
+ Don’t attempt to match descriptions to operating systems.
+ It didn’t work on Fedora x86-64 running a 32-bit executable,
+ and it’s not worth the trouble anyway.
+ Port to 32-bit platforms by removing an assumption about
+ fixnum widths.
+
+2015-12-06 Michael Albinus <michael.albinus@gmx.de>
+
+ Fix auto-revert-tests.el when filenotify isn't used
+
+ * test/automated/auto-revert-tests.el (auto-revert--wait-for-revert):
+ Make it working also when filenotify isn't used.
+
+2015-12-05 Juri Linkov <juri@linkov.net>
+
+ * lisp/textmodes/ispell.el (ispell-highlight-spelling-error-overlay):
+
+ Let-bind isearch-regexp-function to nil. (Bug#22097)
+
+2015-12-05 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/emacs-lisp/package.el: Don't install bad signatures (bug#22089)
+
+ (package--with-response-buffer): NOERROR and ERROR-FORM only
+ handle connection errors.
+ (bad-signature): New error type.
+ (package--check-signature-content): Use it.
+ (package--check-signature): Properly distinguish connection errors
+ from bad-signature errors. Do the check for
+ `package-check-signature' `allow-unsigned' here instead of forcing
+ the callbacks to do it. Add a new argument, UNWIND.
+ (package--download-one-archive, package-install-from-archive):
+ Update usage of `package--check-signature'.
+
+2015-12-05 Ulf Jasper <ulf.jasper@web.de>
+
+ Fix Bug#22092.
+
+ * lisp/calendar/icalendar.el (icalendar--get-unfolded-buffer):
+ Clean up inconsistent line endings. (Bug#22092)
+ (icalendar--clean-up-line-endings): New.
+ * test/automated/icalendar-tests.el (icalendar-real-world): Add test
+ for Bug#22092.
+
+2015-12-05 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'bookmark-set-no-overwrite'
+
+ * doc/emacs/regs.texi (Bookmarks): Document the new command
+ 'bookmark-set-no-overwrite' and its keybinding.
+
+2015-12-05 Eli Zaretskii <eliz@gnu.org>
+
+ Document new binding of 'mouse-buffer-menu'
+
+ * doc/emacs/buffers.texi (Buffer Menus): 'mouse-buffer-menu' is
+ now also on C-F10.
+
+2015-12-05 Eli Zaretskii <eliz@gnu.org>
+
+ Initial documentation of dynamic modules
+
+ * doc/lispref/loading.texi (Dynamic Modules): New section with
+ initial documentation for dynamic modules.
+ * doc/lispref/elisp.texi (Top): Add "Dynamic Modules" to the
+ detailed menu
+
+ * etc/NEWS: Fix typos in dynamic modules' entry.
+
+2015-12-05 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ Remove copyright statements from trivial test files
+
+2015-12-05 Eli Zaretskii <eliz@gnu.org>
+
+ Add "Preliminaries" section to etc/DEBUG
+
+ * etc/DEBUG: Add the "Preliminaries" section for GDB beginners.
+ Most of the content was suggested by Phillip Lord
+ <phillip.lord@russet.org.uk>. Remove the section about debugging
+ with the Visual Studio, as building Emacs with the Microsoft
+ compilers is no longer supported. Minor fixes in some other
+ sections.
+
+2015-12-05 Alex Dunn <dunn.alex@gmail.com> (tiny change)
+
+ Improve parsing of version strings
+
+ * lisp/subr.el (version-regexp-alist): Allow "." as priority separator
+ (version-to-list): More helpful error messages.
+ (version-to-list): ".5" is valid (update docstring). Make
+ "22.8X3" invalid, as the doc string says.
+
+ * test/automated/subr-tests.el (ert-test-version-parsing): New
+ tests for version string processing.
+
+2015-12-05 Eli Zaretskii <eliz@gnu.org>
+
+ Fix documentation of 'undo' changes
+
+ * doc/lispref/text.texi (Undo): Minor wording changes. Use US
English conventions for spelling and whitespace between sentences.
- * etc/NEWS: Fix wording and spelling of undo-related entries.
- Mark them as documented.
+ * etc/NEWS: Fix wording and spelling of undo-related entries.
+ Mark them as documented.
+
+2015-12-04 Glenn Morris <rgm@gnu.org>
+
+ * lisp/net/net-utils.el: Small improvements.
+
+ (net-utils--executable-find-sbin): New function.
+ (ifconfig-program): Check sbin directories.
+ Fallback to "ip". (Bug#22091)
+ (ifconfig-program-options): Check the actual program in use.
+ (arp-program): Check sbin directories.
+
+2015-12-04 Arash Esbati <esbati@gmx.de> (tiny change)
+
+ Fix wrong-type-argument integer-or-marker-p nil error
+
+ * lisp/textmodes/reftex-auc.el (reftex-what-index-tag):
+ Fix (wrong-type-argument integer-or-marker-p nil) error (bug#22077).
+
+2015-12-04 Alan Mackenzie <acm@muc.de>
+
+ Merge branch 'scratch/follow' of /home/acm/emacs/emacs.git/emacs-25 into scratch/follow
+
+ Merge necessitated by a rebase operation.
+
+2015-12-04 Alan Mackenzie <acm@muc.de>
+
+ lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
+
+2015-12-04 Alan Mackenzie <acm@muc.de>
+
+ First commit to scratch/follow. Make Isearch work with Follow Mode, etc.
+
+ doc/lispref/window.texi (Basic Windows): Add paragraph defining "Group of
+ Windows" and new @defun selected-window-group.
+ (Window Start and End): Describe new &optional parameter GROUP and
+ ...-group-function for window-start, window-end, set-window-start, and
+ pos-visible-in-window-p.
+ (Textual Scrolling) Describe the same for recenter.
+ doc/lispref/positions.texi (Screen Lines): Describe the same for
+ move-to-window-line.
+
+ src/window.c (Fwindow_start, Fwindow_end, Fset_window_start)
+ (Fpos_visible_in_window_p, Frecenter, Fmove_to_window_line): To each, add ar
+ new optional parameter "group". At the beginning of each, check whether the
+ corresponding ...-group-function is set to a function, and if so execute this
+ function in place of the normal processing.
+ (syms_of_window): Define symbols for the six new variables below.
+ (window-start-group-function, window-end-group-function)
+ (set-window-start-group-function, recenter-group-function)
+ (pos-visible-in-window-p-group-function, move-to-window-line-group-function):
+ New permanent local buffer local variables.
+ src/keyboard.c (Fposn_at_point): Add extra parameter in call to
+ Fpos_visible_in_window_p.
+
+ lisp/window.el (selected-window-group-function): New permanent local buffer
+ local variable.
+ (selected-window-group): New function.
+
+ lisp/follow.el (follow-mode): Set the ...-group-function variables at mode
+ enable, kill them at mode disable. Add/remove follow-after-change to/from
+ after-change-functions.
+ (follow-start-end-invalid): New variable.
+ (follow-redisplay): Manipulate follow-start-end-invalid.
+ (follow-after-change, follow-window-start, follow-window-end)
+ (follow-set-window-start, follow-pos-visible-in-window-p)
+ (follow-move-to-window-line, follow-sit-for): New functions.
+
+ lisp/isearch.el (isearch-call-message): New macro.
+ (isearch-update, with-isearch-suspended, isearch-del-char)
+ (isearch-search-and-update, isearch-ring-adjust): Invoke above new macro.
+ (with-isearch-suspended): Rearrange code such that isearch-call-message is
+ invoked before point is moved.
+ (isearch-message): Add comment about where point must be at function call.
+ (isearch-search): Remove call to isearch-message.
+ (isearch-lazy-highlight-window-group): New variable.
+ (isearch-lazy-highlight-new-loop): Unconditionally start idle timer. Move
+ the battery of tests to ...
+ (isearch-lazy-highlight-maybe-new-loop): New function, started by idle timer.
+ Note: (sit-for 0) is still called.
+ (isearch-lazy-highlight-update): Check membership of
+ isearch-lazy-highlight-window-group. Don't set the `window' overlay
+ property.
+ (isearch-update, isearch-done, isearch-string-out-of-window)
+ (isearch-back-into-window, isearch-lazy-highlight-maybe-new-loop)
+ (isearch-lazy-highlight-search, isearch-lazy-highlight-update)
+ (isearch-lazy-highlight-update): Call the six amended primitives (see
+ src/window.c above) with the new `group' argument set to t, to cooperate
+ with Follow Mode.
+
+2015-12-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp/emacs-lisp/ert.el: Prefer pcase over cl-typecase
+
+ * lisp/emacs-lisp/ert.el (ert--should-error-handle-error)
+ (ert--explain-format-atom, ert--explain-equal-rec)
+ (ert--print-backtrace, ert-test-result-type-p, ert-select-tests)
+ (ert--insert-human-readable-selector): Prefer pcase over cl-typecase.
+
+2015-12-04 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: Remove special case-folding support
+
+ (character-fold-to-regexp): Remove special code for
+ case-folding. Char-fold search still respects the
+ `case-fold-search' variable (i.e., f matches F). This only
+ removes the code that was added to ensure that f also matched
+ all chars that F matched. For instance, after this commit, f
+ no longer matches 𝔽.
+
+ This was necessary because the logic created a regexp with
+ 2^(length of the string) redundant paths. So, when a very
+ long string "almost" matched, Emacs took a very long time to
+ figure out that it didn't. This became particularly relevant
+ because isearch's lazy-highlight does a search bounded by (1-
+ match-end) (which, in most circumstances, is a search that
+ almost matches). A recipe for this can be found in bug#22090.
+
+2015-12-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp/emacs-lisp/cl-macs.el (character): Can't be negative
+ Fixes (bug#21701)
+
+2015-12-04 Daiki Ueno <ueno@gnu.org>
+
+ lisp/gnus/qp.el: Don't replace "from " at bol
+
+ * lisp/gnus/qp.el (quoted-printable-encode-region): Bind `case-fold-search'
+ to nil when looking for "^From ". Problem reported by Simon Josefsson.
+
+2015-12-03 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Externalize some symbols in undo-auto
+
+ * doc/lispref/text.texi: Update symbols.
+ * lisp/simple.el (undo-auto--amalgamate,
+ undo-auto--current-boundary-timer): Make symbols public.
+ * src/cmds.c (Fself_insert_command,Fdelete_char): Call
+ updated symbol.
+
+2015-12-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp/emacs-lisp/smie.el (smie-next-sexp): Fix BOB "token"
+
+2015-12-03 Michael Albinus <michael.albinus@gmx.de>
+
+ Some error message improvements in tramp-sh.el
+
+ * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Suppress error messages for "mesg" and "biff" calls.
+ (tramp-get-remote-path): Ignore errors when expanding
+ `tramp-own-remote-path'. Raise a warning instead.
+
+2015-12-03 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'nacl' value for 'system-type'
+
+ * doc/lispref/os.texi (System Environment): Document the 'nacl'
+ value of 'system-type'.
+
+2015-12-03 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'window-max-chars-per-line'
+
+ * doc/lispref/windows.texi (Window Sizes): Document
+ 'window-max-chars-per-line'.
+
+2015-12-03 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ Fix some file headers for the purpose of `package--builtins'
+
+ * lisp/emacs-lisp/cl-preloaded.el
+ * lisp/emacs-lisp/eieio-compat.el
+ * lisp/net/sasl-scram-rfc.el: Add a "Package:" header
+
+ * lisp/ielm.el: Fix summary line.
+
+2015-12-03 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/emacs-lisp/package.el (package-unpack): Load before compiling
+
+ Reload any previously loaded package files before compiling
+ the package (also reload the same files after compiling).
+ This ensures that we have the most recent definitions during
+ compilation, and avoids generating bad elc files when a macro
+ changes and it is used in a different file from the one it's
+ defined in.
+
+2015-12-03 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/emacs-lisp/package.el: Refactor package activation code
+
+ (package-activate): Move code that activates dependencies into
+ package-activate-1.
+ (package--load-files-for-activation): New function.
+ (package-activate-1): Add code for (optionally) activating
+ dependencies, and move file-loading code into
+ `package--load-files-for-activation'.
+
+2015-12-03 Eli Zaretskii <eliz@gnu.org>
+
+ Document new font-related functionality
+
+ * doc/lispref/display.texi (Low-Level Font): Document
+ 'default-font-width', 'default-font-height', 'window-font-width',
+ and 'window-font-height'.
+
+ * etc/NEWS: Move entries for 'default-font-width',
+ 'default-font-height', 'window-font-width', and 'window-font-height'
+ to their place and mark them documented.
+
+2015-12-03 Eli Zaretskii <eliz@gnu.org>
+
+ Fix documentation and implementation of 'directory-name-p'
+
+ * lisp/files.el (directory-name-p): Modify to recognize
+ backslashes on MS-Windows and MS-DOS. Adjust the doc string
+ accordingly. Use '=', not char-equal, for comparison, as
+ letter-case cannot possibly be an issue here.
+
+ * doc/lispref/files.texi (Directory Names): Move the documentation
+ of directory-name-p here from "Relative File Names". Update the
+ description per the changes in implementation.
+
+ * etc/NEWS: Move the entry for 'directory-name-p' to its proper
+ place and mark it documented.
+
+2015-12-02 Eli Zaretskii <eliz@gnu.org>
+
+ Minor copyedit in Emacs manual
+
+ * doc/emacs/search.texi (Lax Search): Make wording about character
+ folding by default less definitive. (Bug#22043)
+
+2015-12-02 Eli Zaretskii <eliz@gnu.org>
+
+ More emacs-module.c fixes for wide ints
+
+ * src/emacs-module.c (value_to_lisp) [WIDE_EMACS_INT]: Use
+ unsigned data types to manipulate pointers, to avoid sign
+ extension coming after us with a vengeance.
+
+ * modules/mod-test/test.el (mod-test-sum-test): Add tests for
+ Emacs with wide ints that verify integer values near the critical
+ value that requires us to switch to a cons cell.
+
+2015-12-02 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ Fix bug#22069 in cl-generic.el
+
+ * lisp/emacs-lisp/cl-generic.el (cl-no-method): Remove %S; this string is
+ not run thru `format'.
+
+2015-12-01 Dmitry Gutov <dgutov@yandex.ru>
+
+ APPEND etags--xref-backend to xref-backend-functions
+
+ * lisp/progmodes/xref.el (xref-backend-functions):
+ Use APPEND when adding the default element
+ (http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00061.html).
+
+2015-12-01 Eli Zaretskii <eliz@gnu.org>
+
+ More accurate documentation of lax whitespace matching
+
+ * lisp/isearch.el (isearch-forward-word, isearch-forward-symbol)
+ (word-search-backward, word-search-forward)
+ (word-search-backward-lax, word-search-forward-lax): Mention in
+ doc strings that toggling lax whitespace matching has no effect on
+ these commands.
+
+ * doc/emacs/search.texi (Word Search, Symbol Search): Clarify that
+ lax whitespace matching has no effect on these commands.
+
+2015-12-01 Eli Zaretskii <eliz@gnu.org>
+
+ Fix emacs-module.c for wide ints
+
+ * src/emacs-module.c (lisp_to_value): Compare the produced value
+ with the original Lisp object, not with the one potentially
+ converted into a Lisp_Cons. Fixes assertion violations when
+ working with integers larger than fit into a 32-bit value.
+
+ * modules/mod-test/test.el (mod-test-sum-test): Add tests for
+ large integers, to test --with-wide-int.
+
+2015-12-01 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'directory-files-recursively'
+
+ * lisp/files.el (directory-files-recursively): Doc fix. Rename
+ the argument MATCH to REGEXP, to be more explicit about its form.
+
+ * doc/lispref/files.texi (Contents of Directories): Improve the
+ documentation of 'directory-files-recursively'. Add
+ cross-references.
+
+ * etc/NEWS: Move the entry for 'directory-files-recursively' to
+ its place and mark it documented.
+
+2015-12-01 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'inhibit-read-only' property
+
+ * doc/lispref/text.texi (Special Properties): Describe the new
+ 'inhibit-read-only' text property. Add cross-reference to where
+ read-only buffers are described.
+ * doc/lispref/buffers.texi (Read Only Buffers): Mention that
+ 'inhibit-read-only' property exempts text from being read-only.
+ Add cross-reference to "Special Properties".
+
+ * etc/NEWS: Move the entry about 'inhibit-read-only' property to
+ its place and mark it documented.
+
+2015-12-01 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/emacs-lisp/package.el: Update header comments
+
+2015-12-01 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: Add back multi-char matching
+
+ (character-fold-to-regexp): Uncomment recently commented code
+ and make the algorithm "dummer" by not checking every possible
+ combination. This will miss some possible matches, but it
+ greatly reduces regexp size.
+
+ * test/automated/character-fold-tests.el
+ (character-fold--test-fold-to-regexp): Comment out test of
+ functionality no longer supported.
+
+2015-12-01 Xue Fuqiao <xfq.free@gmail.com>
+
+ * doc/emacs/ack.texi (Acknowledgments): Update.
+
+2015-12-01 Michael Albinus <michael.albinus@gmx.de>
+
+ Check `file-remote-p' over absolute files names in files.el
+
+ * lisp/files.el (directory-files-recursively)
+ (get-free-disk-space): Check `file-remote-p' over absolute files names.
+
+2015-12-01 Andreas Schwab <schwab@linux-m68k.org>
+
+ * src/lread.c (syms_of_lread): Doc fix.
+
+2015-11-30 Dmitry Gutov <dgutov@yandex.ru>
+
+ Don't mistake certain JS method calls for keywords
+
+ * lisp/progmodes/js.el (js--ctrl-statement-indentation):
+ Braceless keyword can't come after a period (bug#22063).
+
+2015-11-30 David Reitter <david.reitter@gmail.com>
+
+ Read frame_title_format from buffer-local variable for NS port
+
+ * src/nsfns.m (x_implicitly_set_name): Read frame-title-format and
+ icon-title-format variables from buffer in appropriate window.
+ (Bug#22048)
+
+2015-11-30 Juri Linkov <juri@linkov.net>
+
+ * lisp/replace.el (occur-engine): Count matches in empty lines.
+
+ (Bug#22062)
+
+2015-11-30 Aurélien Aptel <aurelien.aptel@gmail.com>
+
+ * src/emacs-module.h: Fix finalizer typedef for C++11
+
+ C++11 standard doesn't allow exception-specification in typedef.
+ The workaround is to declare a dummy function prototype and use
+ decltype on it.
+
+2015-11-30 Eli Zaretskii <eliz@gnu.org>
+
+ Fix last change
+
+ * src/emacs-module.c (lisp_to_value, value_to_lisp)
+ [WIDE_EMACS_INT]: Avoid compiler warnings.
+
+2015-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Rely on conservative stack scanning to find "emacs_value"s
+
+ * src/emacs-module.c (struct emacs_value_tag)
+ (struct emacs_value_frame, struct emacs_value_storage): Remove.
+ (value_frame_size): Remove constant.
+ (struct emacs_env_private): Use Lisp_Object for non_local_exit info.
+ (lisp_to_value): Remove first arg.
+ (module_nil): New constant.
+ Use it instead of NULL when returning an emacs_value.
+ (module_make_function): Adjust to new calling convention of
+ Qinternal_module_call.
+ (DEFUN): Receive args in an array rather than a list.
+ Use SAFE_ALLOCA rather than xnmalloc. Skip the lisp_to_value loop when
+ we don't have WIDE_EMACS_INT. Adjust to new type of non_local_exit info.
+ (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
+ Adjust to new type of non_local_exit info.
+ (ltv_mark) [WIDE_EMACS_INT]: New constant.
+ (value_to_lisp, lisp_to_value): Rewrite.
+ (initialize_frame, initialize_storage, finalize_storage): Remove functions.
+ (allocate_emacs_value): Remove function.
+ (mark_modules): Gut it.
+ (initialize_environment): Don't initialize storage any more.
+ Keep the actual env object on Vmodule_environments.
+ (finalize_environment): Don't finalize storage any more.
+ (syms_of_module): Initialize ltv_mark and module_nil.
+
+ * src/emacs-module.h (emacs_value): Make it more clear that this type
+ is really opaque, including the fact that NULL may not be valid.
+
+ * modules/mod-test/mod-test.c (Fmod_test_signal, Fmod_test_throw):
+ Don't assume that NULL is a valid emacs_value.
+
+2015-11-30 Eli Zaretskii <eliz@gnu.org>
+
+ Yet another doc improvement for search commands
+
+ * doc/emacs/search.texi (Word Search, Symbol Search)
+ (Regexp Search): Document commands that don't support lax
+ whitespace matching or character folding.
+ (Nonincremental Search): Mention the search commands that can be
+ invoked from the menu bar.
+
+ * lisp/isearch.el (isearch-define-mode-toggle-word)
+ (isearch-define-mode-toggle-symbol)
+ (isearch-define-mode-toggle-character-fold): Note in the doc
+ string that turning these on exits the regexp mode.
+ (isearch-forward-regexp, isearch-forward-word)
+ (isearch-forward-symbol, isearch-backward-regexp)
+ (word-search-backward, word-search-forward)
+ (word-search-backward-lax, word-search-forward-lax): State in the
+ doc string which commands don't support character folding and/or
+ lax-whitespace matching.
+
+2015-11-30 Martin Rudalics <rudalics@gmx.at>
+
+ Run `window-size-change-functions' also when reading from minibuffer
+
+ * src/xdisp.c (redisplay_internal): Run `window-size-change-functions'
+ also when reading from minibuffer.
+
+2015-11-30 Ulf Jasper <ulf.jasper@web.de>
+
+ Fix scrambling of html-rendered item buffers
+
+ * lisp/net/newst-treeview.el (newsticker--treeview-render-text): Fix
+ scrambling of contents by wrapping call to html-renderer in
+ save-selected-window.
+
+2015-11-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix font typo in previous doc fix.
+
+2015-11-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ A bit more security doc, esp. file local vars
+
+ * doc/emacs/emacs.texi (Top):
+ * doc/emacs/misc.texi (Miscellaneous Commands):
+ Refer to new Host Security section.
+ (Host Security): New section.
+ * doc/lispref/os.texi (Security Considerations):
+ Mention file local variables.
+
+2015-11-30 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: Comment out branching code
+
+ (character-fold-to-regexp): Comment out code that uses multi-char
+ table. The branching caused by this induces absurdly long regexps,
+ up to 10k chars for as little as 25 input characters.
+
+2015-11-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling and grammar fixes
+
+2015-11-29 Dmitry Gutov <dgutov@yandex.ru>
+
+ Make lisp-completion-at-point a wrapper instead of an alias
+
+ * lisp/progmodes/elisp-mode.el (lisp-completion-at-point):
+ Turn into an obsolete wrapper around elisp-completion-at-point
+ (bug#20455).
+
+2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/isearch.el (isearch-search-fun-default): Nicer error
+
+ message when the search fails.
+
+2015-11-29 Dmitry Gutov <dgutov@yandex.ru>
+
+ Update menu-bar-goto-uses-etags-p for the current xref API
+
+ * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Consult
+ xref-backend-functions, instead of now-nonexistent
+ xref-find-function.
+
+2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/isearch.el (isearch-define-mode-toggle): Advertise binding
+
+2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/menu-bar.el: Use folding in searches
+
+ (nonincremental-search-forward): Use `isearch-search-fun-default'
+ to determine the search function.
+ (nonincremental-search-backward)
+ (nonincremental-repeat-search-forward)
+ (nonincremental-repeat-search-backward): Use it.
+
+2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Fix a warning
+
+2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el (character-fold-to-regexp): Be careful
+
+ not to return huge regexps.
+
+2015-11-29 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of string-collate-* functions
+
+ * doc/lispref/strings.texi (Text Comparison): Improve wording and
+ indexing of 'string-collate-equalp' and 'string-collate-lessp'.
+
+ * etc/NEWS: Move the entry of 'string-collate-equalp' and
+ 'string-collate-lessp' to "Lisp Changes" section and mark it as
+ documented.
+
+2015-11-29 Eli Zaretskii <eliz@gnu.org>
+
+ Document truncate-string-ellipsis
+
+ * doc/lispref/display.texi (Size of Displayed Text): Document
+ 'truncate-string-ellipsis'.
+
+ * lisp/international/mule-util.el (truncate-string-ellipsis): Doc fix.
+ (truncate-string-to-width): Mention in the doc string that the
+ default for ELLIPSIS comes from 'truncate-string-ellipsis'.
+
+ * etc/NEWS: Move the 'truncate-string-ellipsis' entry to the "Lisp
+ Changes" section.
+
+2015-11-29 Eli Zaretskii <eliz@gnu.org>
+
+ Fix confusion wrt character folding in the Emacs manual
+
+ * doc/emacs/search.texi (Nonincremental Search, Regexp Search):
+ Document that invoking search-forward/backward and
+ re-search-forward/backward supports only case folding, but not the
+ rest of the lax-search features. Reported by Mike Kupfer
+ <m.kupfer@acm.org>.
+
+2015-11-29 Ken Brown <kbrown@cornell.edu>
+
+ Update mod-test-sum-test
+
+ * modules/mod-test/test.el (mod-test-sum-test): Update to
+ accommodate the lack of dladdr on Cygwin.
+
+2015-11-29 Alan Mackenzie <acm@muc.de>
+
+ Byte compiler: Catch missing argument to `funcall'. Fixes bug#22051.
+
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-funcall): When there's no argument
+ to `funcall', (i) Output an error message; (ii) Generate code to signal a
+ `wrong-number-of-arguments' error.
+
+2015-11-29 Martin Rudalics <rudalics@gmx.at>
+
+ * lisp/window.el (split-window): Don't sanitize sizes when SIZE is non-nil.
+
+2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el (character-fold-to-regexp)
+
+ Warn about using long strings.
+
+ * test/automated/character-fold-tests.el
+ (character-fold--test-lax-whitespace)
+ (character-fold--test-consistency): Reduce string size for tests.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Document renaming of x-select-enable-* variables
+
+ * doc/emacs/killing.texi (Clipboard): Rename
+ x-select-enable-clipboard to select-enable-clipboard and
+ x-select-enable-primary to select-enable-primary. Update index
+ entries.
+
+ * etc/NEWS: Mark entry as documented.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Document the shorthand hints displayed by M-x
+
+ * doc/emacs/m-x.texi (M-x): Document the numeric meaning of
+ suggest-key-bindings. Document the shorthand hints for commands
+ that have no key bindings. Document that M-x completion ignores
+ obsolete commands.
+
+ * etc/NEWS: Move the M-x entry to "Editing Changes" and mark it as
+ documented.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Update docs of character folding
+
+ * doc/emacs/search.texi (Lax Search): Update the description of
+ character folding for the latest changes.
+
+2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: Also play nice with case-folding
+
+ (character-fold-to-regexp): Take `case-fold-search' into account.
+
+2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: Add support for multi-char matches
+
+ (character-fold-table): Now has an extra-slot. This is a second
+ char-table that holds multi-character matches. See docstring for
+ details.
+ (character-fold-to-regexp): Can build branching regexps when a
+ character's entry the extra slot of `character-fold-table' matches the
+ characters that succeed it.
+
+2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: Code simplifications
+
+ (character-fold-table): Reduce the scope of a variable.
+ (character-fold-to-regexp): Change logic to work directly on the
+ input string. It's a little easier to understand, probably
+ faster, and sets us up for implementing multi-char matches.
+
+ * test/automated/character-fold-tests.el
+ (character-fold--test-fold-to-regexp): New test.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Document changes in "C-h l"
+
+ * doc/emacs/help.texi (Misc Help): Document the changes in "C-h l".
+
+ * etc/NEWS: mark "C-h l" changes as documented.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Finalize documentation of 'custom-prompt-customize-unsaved-options'
+
+ * doc/emacs/custom.texi (Saving Customizations): Index the new
+ function 'custom-prompt-customize-unsaved-options'.
+
+ * etc/NEWS: Mention when 'custom-prompt-customize-unsaved-options'
+ is useful.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Document 'comment-line'
+
+ * doc/emacs/programs.texi (Comment Commands): Document
+ 'comment-line'.
+
+ * etc/NEWS: Move the entry for 'comment-line' into "Editing Changes".
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Document new checkdoc features
+
+ * doc/lispref/tips.texi (Tips, Library Headers): Document the
+ keyword-checking features of checkdoc and the commands
+ 'checkdoc-file' and 'checkdoc-current-buffer'.
+
+ * etc/NEWS: Move the checkdoc-related entries to their own
+ section.
+
+2015-11-28 Philipp Stephani <p.stephani2@gmail.com>
+
+ Simplify the prologue of emacs-module.c functions
+
+ * src/emacs-module.c (MODULE_FUNCTION_BEGIN): New macro.
+ (module_make_global_ref)
+ (module_free_global_ref, module_make_function, module_funcall)
+ (module_intern, module_type_of, module_extract_integer)
+ (module_make_integer, module_extract_float, module_make_float)
+ (module_copy_string_contents, module_make_string)
+ (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
+ (module_get_user_finalizer, module_set_user_finalizer)
+ (module_vec_set, module_vec_get, module_vec_size): Use new helper
+ macro MODULE_FUNCTION_BEGIN.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Don't reject module calls with no arguments
+
+ * src/emacs-module.c (Finternal_module_call): Allow ARGLIST be nil.
+
+2015-11-28 Philipp Stephani <p.stephani2@gmail.com>
+
+ Make module-call be visible from Lisp
+
+ * src/emacs-module.c (module_make_function): Use internal--module-call.
+ (Finternal_module_call): Renamed from Fmodule_call. Add safety
+ checks.
+ (syms_of_module): DEFSYM save-value-p and save-pointer-p. Do
+ defsubr internal--module-call.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Add etags tests for the recent Lua-related bugfix
+
+ * test/etags/lua-src/test.lua: New file, tests the issues raised
+ by bug#21934.
+ * test/etags/Makefile (LUASRC): Add test.lua.
+ * test/etags/ETAGS.good_1:
+ * test/etags/ETAGS.good_2:
+ * test/etags/ETAGS.good_3:
+ * test/etags/ETAGS.good_4:
+ * test/etags/ETAGS.good_5:
+ * test/etags/ETAGS.good_6:
+ * test/etags/CTAGS.good: Adapt to the new Lua test. Also, an old
+ regression fix, resolved around 25 May 2015, required changes to
+ the "good" ETAGS files.
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Fix Lua tags when a function name includes '.' or ':'
+
+ * lib-src/etags.c (Lua_functions): Add a tag for the last element
+ of a function name after a dot or a colon. (Bug#21934)
+
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of search and replace commands
+
+ * doc/emacs/search.texi (Replacement and Lax Matches): Document
+ which commands are affected by 'replace-character-fold'.
+ (Lax Search): Add a cross reference to "Replacement and Lax
+ Matches". Improve wording. Fix lost extra whitespace.
+ (Search Customizations): Improve wording. (Bug#22036)
+ See also comments in
+ http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02376.html.
+
+ * lisp/replace.el (query-replace, query-replace-regexp)
+ (query-replace-regexp-eval, replace-string, replace-regexp):
+ Mention 'replace-character-fold' in the doc strings.
+
+2015-11-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix minor problems found by static checking
+
+ * src/undo.c (prepare_record): Add proper prototype for C.
+
+2015-11-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * src/emacs-module.c (struct env_storage): Delete
+
+ (struct emacs_runtime_private): Keep an emacs_env instead.
+ (Fmodule_load, Fmodule_call): Declare emacs_env_private separately.
+ (initialize_environment): Split the arg in two. Adjust all callers.
+ Only store the private part in Vmodule_environments.
+ (finalize_environment): Change the arg to only be the private env.
+ Adjust all callers.
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of 'replace-character-fold'
+
+ * lisp/replace.el (replace-character-fold): Clarify which commands
+ are affected by this variable.
+
+2015-11-27 Dmitry Gutov <dgutov@yandex.ru>
+
+ Autoload etags when using its xref backend
+
+ * lisp/progmodes/xref.el (xref--etags-backend):
+ Rename to etags--xref-backend. Move to etags.el. Autoload.
+ (Bug#22026)
+
+2015-11-27 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: Allow complex chars to match their decomposition
+
+ (character-fold-table): When a character's decomposition does not
+ involve a formatting tag (i.e., if it has an "exact" description via
+ other characters), then this character is allowed to match the
+ decomposition.
+
+2015-11-27 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/character-fold.el: More descriptive variable names
+
+ (character-fold-table): Rename a lot of the lexical variables to
+ make the code easier to read.
+
+2015-11-27 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * lisp/isearch.el: Ensure we still support `isearch-new-word'
+
+ (isearch-new-regexp-function): Define variable.
+ (isearch-new-word): Define as an obsolete alias. (Bug#22018)
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+
+2015-11-27 Lee Bochicchio <lboc.home@gmail.com>
+
+ * test/lisp/abbrev-tests.el: Define more tests
+
+ (abbrev-table-name-test, kill-all-abbrevs-test)
+ (clear-abbrev-table-test): New tests.
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Add module tests for wrong-type-argument
+
+ * modules/mod-test/test.el (mod-test-sum-test): Add tests for
+ wrong-type-argument.
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Improve handling of signals and 'throw' in modules
+
+ * src/emacs-module.c: Add commentary explaining how to write
+ functions in this file.
+ (module_make_global_ref, module_free_global_ref)
+ (module_non_local_exit_signal, module_non_local_exit_throw)
+ (module_make_function, module_funcall, module_intern)
+ (module_type_of, module_is_not_nil, module_eq)
+ (module_extract_integer, module_make_integer)
+ (module_extract_float, module_make_float)
+ (module_copy_string_contents, module_make_string)
+ (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
+ (module_get_user_finalizer, module_set_user_finalizer)
+ (module_vec_set, module_vec_get, module_vec_size)
+ (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
+ Do nothing and return with failure indication immediately, if some
+ previous module call signaled an error or wants to throw. See
+ http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02133.html
+ for the relevant discussions.
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Add ':version' tag to 'checkdoc-package-keywords-flag'
+
+ * lisp/emacs-lisp/checkdoc.el (checkdoc-package-keywords-flag):
+ Add a ':version' tag.
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Improve documentation of 'eval-buffer' and 'eval-region'
+
+ * src/lread.c (Feval_buffer, Feval_region): Doc fixes. (Bug#22023)
+
+ * doc/lispref/eval.texi (Eval): Mention narrowing to clarify
+ "accessible portion of buffer".
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Unbreak the Cygwin w32 build
+
+ * src/emacs.c (main): Call w32_init_main_thread in the Cygwin w32
+ build as well. Reported by Andy Moreton <andrewjmoreton@gmail.com>.
+
+2015-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ Improve commentary in character-fold.el
+
+ * lisp/character-fold.el (character-fold-to-regexp): Move detailed
+ description from commit log message to comments. (Bug#22019)
+
+2015-11-26 Alan Mackenzie <acm@muc.de>
+
+ Byte Compiler: generate code to adjust stack count after call to `signal'.
+
+ Corrects change from earlier today.
+
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): supply the current value of
+ `byte-compile--for-effect' as argument to `byte-compile-form'.
+
+2015-11-26 Eli Zaretskii <eliz@gnu.org>
+
+ Improve commentary of prepare_to_modify_buffer_1
+
+ * src/insdel.c (prepare_to_modify_buffer_1): Mention in commentary
+ that this function runs Lisp. Suggested by Richard Stallman
+ <rms@gnu.org>.
+
+2015-11-26 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+
+2015-11-26 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Fix regression after merge.
+
+ * src/undo.c (prepare_record): Remove call to run_undoable_change.
+
+2015-11-26 Phillip Lord <phillip.lord@russet.org.uk>
+
+ After delete, record point location in undo.
+
+ Addresses Bug #21968.
+
+ * lisp/simple.el (undo-auto--add-boundary): Clean up code to
+ better support intercalating calls.
+ * src/keyboard.c, src/keyboard.h (command_loop_1): Store value of
+ point and current buffer before each command.
+ * src/undo.c (record_point): Now only record the point.
+ * src/undo.c (prepare_record): Functionality removed form
+ record_point.
+ * src/undo.c (record_delete): Check if point needs recording.
+ * src/undo.c (undo-boundary): Record value of point before each
+ boundary.
+ * test/automated/simple-test.el: New tests.
+
+ Conflicts:
+ src/undo.c
+
+2015-11-26 Eli Zaretskii <eliz@gnu.org>
+
+ Fix compiler warnings in w32.c
+
+ * src/w32.c (sys_socket): In case of error, use -1 as return
+ value, not INVALID_SOCKET, which causes compiler warnings.
+ (maybe_load_unicows_dll): Cast the return value of GetProcAddress
+ to the appropriate function signature, to avoid compiler errors.
+ Reported by Andy Moreton <andrewjmoreton@gmail.com>. (Bug#21953)
+
+2015-11-26 Dmitry Gutov <dgutov@yandex.ru>
+
+ Check if the file exists on disk before producing the revert diff
+
+ * lisp/vc/vc-dispatcher.el (vc-buffer-sync): Check if the file
+ exists on disk (bug#20558).
+
+2015-11-26 Alan Mackenzie <acm@muc.de>
+
+ Byte compiler: on setq with an odd number of arguments, generate a `signal'
+
+ * lisp/emacs-lisp/cconv.el (cconv-convert): Don't transform `setq' form when
+ it has an odd number of arguments, to allow bytecomp to handle the error.
+
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): In a `setq' form with an
+ odd number of arguments, generate a `signal' instead of the normal code.
+
+2015-11-25 Dmitry Gutov <dgutov@yandex.ru>
+
+ Use find-tag-default for xref-backend-identifier-at-point
+
+ * lisp/progmodes/etags.el (find-tag-tag)
+ (tags-completion-at-point-function): Extract common code as
+ find-tag--default.
+ (xref-backend-identifier-at-point): Define in terms of the new
+ function.
+
+2015-11-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/undo.c (record_property_change): Remove now-unused local.
+
+2015-11-25 Phillip Lord <phillip.lord@russet.org.uk>
+
+ run_undoable_changes now called from insdel.
+
+ The original calls from inside undo.c are not always at a safe position
+ to call lisp, as they originate in varied positions within insdel.c.
+ Calling them directly from prepare_to_modify_buffer_1 ensures that they
+ are always run at the same point.
+
+ * src/undo.c (run_undoable_changes,syms_of_undo): Remove function
+ and symbol used.
+ * src/insdel.c (run_undoable_changes): Add function and symbol.
+
+2015-11-25 Eli Zaretskii <eliz@gnu.org>
-2015-12-05 Glenn Morris <rgm@gnu.org>
+ Improve and update documentation of search commands
- * lisp/net/net-utils.el: Small improvements.
+ * doc/emacs/search.texi (Lax Search): Renamed from "Search Case";
+ all references changed. Move the description of lax-whitespace
+ here. Add description of the new character folding features and
+ additional customizable options.
+ (Isearch Yank): Move before "Error in Search".
+ (Basic Isearch): Improve wording. Add index entries. Add short
+ description of how to abandon search, making this subsection a
+ complete introduction to search basics.
+ (Repeat Isearch): Add index entries. Describe additional
+ customizable options. Describe mouse clicks.
+ (Isearch Yank): Add index entries. Describe mouse-2 click in echo
+ area. Describe more customizable options.
+ (Error in Isearch): Add index entries.
+ (Special Isearch): Move actual description of some isearch
+ commands to other sections, leaving here just the summary of the
+ commands. Add command that toggles character folding. Describe
+ commands, like "C-h C-h", that were previously omitted for some
+ reason.
+ (Not Exiting Isearch): Describe search-exit-option. Add index
+ entries.
+ (Word Search): Describe eww-search-word and eww-search-prefix.
+ (Symbol Search): Add index entries.
+ (Regexp Search): Describe regexp-search-ring-max.
+ (Replacement and Lax Matches): Renamed from "Replacement and
+ Case"; all references changed. Describe lax-whitespace matching
+ in replace commands and related options. Describe character
+ folding in replace commands and related options.
+ (Query Replace): Describe query-replace-from-to-separator and the
+ new history features. Add index entries for highlighted text.
+ Describe query-replace-skip-read-only. Describe more keys
+ accepted by query-replace.
+ (Other Repeating Search): More index entries for Occur. Describe
+ list-matching-lines-default-context-lines.
+ (Search Customizations): New section, documents customizable
+ options that were not documented until now.
+ * doc/emacs/glossary.texi (Glossary): Add "Case Folding" and
+ "Character Folding".
- (net-utils--executable-find-sbin): New function.
- (ifconfig-program): Check sbin directories.
- Fallback to "ip". (Bug#22091)
- (ifconfig-program-options): Check the actual program in use.
- (arp-program): Check sbin directories.
+ * etc/NEWS: Move search- and replace-related entries to a single
+ parent section.
-2015-12-04 (tiny change) Arash Esbati <esbati@gmx.de> (tiny change)
+ * lisp/replace.el (query-replace-show-replacement): Doc fix.
+ * lisp/isearch.el (search-nonincremental-instead)
+ (isearch-hide-immediately): Doc fixes.
- Fix wrong-type-argument integer-or-marker-p nil error
+2015-11-25 Katsumi Yamaoka <yamaoka@jpl.org>
- * lisp/textmodes/reftex-auc.el (reftex-what-index-tag):
- Fix (wrong-type-argument integer-or-marker-p nil) error (bug#22077).
+ Remove nnml-retrieve-groups that is unnecessary and somewhat problematic
-2015-12-04 Alan Mackenzie <acm@muc.de>
+ * lisp/gnus/nnml.el (nnml-retrieve-groups): Remove. See:
+ <http://thread.gmane.org/gmane.emacs.gnus.general/86308> and
+ <http://thread.gmane.org/gmane.emacs.gnus.general/86321>
- Merge branch 'scratch/follow' of /home/acm/emacs/emacs.git/emacs-25 into scratch/follow
+2015-11-25 Paul Eggert <eggert@cs.ucla.edu>
- Merge necessitated by a rebase operation.
+ Fix module_format_fun_env when dynlib_addr fails
-2015-12-04 Alan Mackenzie <acm@muc.de>
+ * src/emacs-module.c (module_format_fun_env):
+ exprintf doesn’t support %p, so use %x. Reported by Eli Zaretskii in:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02122.html
- lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
+2015-11-25 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-04 Alan Mackenzie <acm@muc.de>
+ Disambiguate variable help a bit better
- First commit to scratch/follow. Make Isearch work with Follow Mode, etc.
+ * lisp/help-fns.el (describe-variable): Quote the
+ variable’s value if it is a symbol other than t or nil.
+ See: T.V Raman in:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02147.html
- doc/lispref/window.texi (Basic Windows): Add paragraph defining "Group of
- Windows" and new @defun selected-window-group.
- (Window Start and End): Describe new &optional parameter GROUP and
- ...-group-function for window-start, window-end, set-window-start, and
- pos-visible-in-window-p.
- (Textual Scrolling) Describe the same for recenter.
- doc/lispref/positions.texi (Screen Lines): Describe the same for
- move-to-window-line.
+2015-11-24 Dmitry Gutov <dgutov@yandex.ru>
- src/window.c (Fwindow_start, Fwindow_end, Fset_window_start)
- (Fpos_visible_in_window_p, Frecenter, Fmove_to_window_line): To each, add ar
- new optional parameter "group". At the beginning of each, check whether the
- corresponding ...-group-function is set to a function, and if so execute this
- function in place of the normal processing.
- (syms_of_window): Define symbols for the six new variables below.
- (window-start-group-function, window-end-group-function)
- (set-window-start-group-function, recenter-group-function)
- (pos-visible-in-window-p-group-function, move-to-window-line-group-function):
- New permanent local buffer local variables.
- src/keyboard.c (Fposn_at_point): Add extra parameter in call to
- Fpos_visible_in_window_p.
+ Pass SVN commit message through log-edit-extract-headers
- lisp/window.el (selected-window-group-function): New permanent local buffer
- local variable.
- (selected-window-group): New function.
+ * lisp/vc/vc-svn.el (vc-svn-checkin): Pass COMMENT through
+ log-edit-extract-headers (bug#18954).
- lisp/follow.el (follow-mode): Set the ...-group-function variables at mode
- enable, kill them at mode disable. Add/remove follow-after-change to/from
- after-change-functions.
- (follow-start-end-invalid): New variable.
- (follow-redisplay): Manipulate follow-start-end-invalid.
- (follow-after-change, follow-window-start, follow-window-end)
- (follow-set-window-start, follow-pos-visible-in-window-p)
- (follow-move-to-window-line, follow-sit-for): New functions.
+2015-11-24 Alan Mackenzie <acm@muc.de>
- lisp/isearch.el (isearch-call-message): New macro.
- (isearch-update, with-isearch-suspended, isearch-del-char)
- (isearch-search-and-update, isearch-ring-adjust): Invoke above new macro.
- (with-isearch-suspended): Rearrange code such that isearch-call-message is
- invoked before point is moved.
- (isearch-message): Add comment about where point must be at function call.
- (isearch-search): Remove call to isearch-message.
- (isearch-lazy-highlight-window-group): New variable.
- (isearch-lazy-highlight-new-loop): Unconditionally start idle timer. Move
- the battery of tests to ...
- (isearch-lazy-highlight-maybe-new-loop): New function, started by idle timer.
- Note: (sit-for 0) is still called.
- (isearch-lazy-highlight-update): Check membership of
- isearch-lazy-highlight-window-group. Don't set the `window' overlay
- property.
- (isearch-update, isearch-done, isearch-string-out-of-window)
- (isearch-back-into-window, isearch-lazy-highlight-maybe-new-loop)
- (isearch-lazy-highlight-search, isearch-lazy-highlight-update)
- (isearch-lazy-highlight-update): Call the six amended primitives (see
- src/window.c above) with the new `group' argument set to t, to cooperate
- with Follow Mode.
+ CC Mode: Eliminate compiler warning messages.
-2015-12-04 Stefan Monnier <monnier@iro.umontreal.ca>
+ * lisp/progmodes/cc-mode.el (top level): remove compile time declaration of
+ `font-lock-syntactic-keywords' (which CC Mode doesn't use).
+ * lisp/progmodes/cc-awk.el (awk-mode-syntax-table)
+ (c-awk-set-syntax-table-properties): Clarify comments about
+ `font-lock-syntactic-keywords'.
- * lisp/emacs-lisp/ert.el: Prefer pcase over cl-typecase
+ * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-load): Create a dummy declaration
+ of this before the real (interpreted) one, to satisfy the byte compiler.
- * lisp/emacs-lisp/ert.el (ert--should-error-handle-error)
- (ert--explain-format-atom, ert--explain-equal-rec)
- (ert--print-backtrace, ert-test-result-type-p, ert-select-tests)
- (ert--insert-human-readable-selector): Prefer pcase over cl-typecase.
+2015-11-24 Simen Heggestøyl <simenheg@gmail.com>
-2015-12-04 Artur Malabarba <bruce.connor.am@gmail.com>
+ Extend the test suite for json.el
- * lisp/character-fold.el: Remove special case-folding support
+ * lisp/json.el (json-plist-p): Clarify docstring.
- (character-fold-to-regexp): Remove special code for
- case-folding. Char-fold search still respects the
- `case-fold-search' variable (i.e., f matches F). This only
- removes the code that was added to ensure that f also matched
- all chars that F matched. For instance, after this commit, f
- no longer matches 𝔽.
+ * test/automated/json-tests.el (json-tests--with-temp-buffer): New
+ macro.
+ (test-json-join, test-json-alist-p)
+ (test-json-plist-p, test-json-advance, test-json-peek)
+ (test-json-pop, test-json-skip-whitespace)
+ (test-json-read-keyword, test-json-encode-keyword)
+ (test-json-read-number, test-json-encode-number)
+ (test-json-read-escaped-char, test-json-read-string)
+ (test-json-encode-string, test-json-encode-key)
+ (test-json-new-object, test-json-add-to-object)
+ (test-json-read-object, test-json-encode-list)
+ (test-json-read-array, test-json-encode-array)
+ (test-json-read, test-json-read-from-string)
+ (test-json-encode): New tests.
+ (json-read-simple-alist): Merged into `test-json-read-object'.
+ (json-encode-string-with-special-chars): Merged into
+ `test-json-encode-string'.
+ (json-read-string-with-special-chars): Split into
+ `test-json-encode-string' and `test-json-read-from-string'.
- This was necessary because the logic created a regexp with
- 2^(length of the string) redundant paths. So, when a very
- long string "almost" matched, Emacs took a very long time to
- figure out that it didn't. This became particularly relevant
- because isearch's lazy-highlight does a search bounded by (1-
- match-end) (which, in most circumstances, is a search that
- almost matches). A recipe for this can be found in bug#22090.
+2015-11-24 Anders Lindgren <andlind@gmail.com>
-2015-12-04 Stefan Monnier <monnier@iro.umontreal.ca>
+ Fixed bug#18283: Enable applescript in NextStep.
- * lisp/emacs-lisp/cl-macs.el (character): Can't be negative
+ * nextstep/templates/Info.plist.in: Set NSAppleScriptEnabled to YES.
- Fixes (bug#21701)
+2015-11-24 Eli Zaretskii <eliz@gnu.org>
-2015-12-04 Daiki Ueno <ueno@gnu.org>
+ Allow completion on dynamic module files in load-library
- lisp/gnus/qp.el: Don't replace "from " at bol
+ * lisp/files.el (load-library): Bind completion-ignored-extensions
+ to nil, to allow completion on dynamic modules typed as file
+ names. Reported by Andy Moreton <andrewjmoreton@gmail.com>.
- * lisp/gnus/qp.el (quoted-printable-encode-region): Bind `case-fold-search'
- to nil when looking for "^From ". Problem reported by Simon Josefsson.
+2015-11-24 Alan Mackenzie <acm@muc.de>
-2015-12-03 Phillip Lord <phillip.lord@russet.org.uk>
+ CC Mode: eliminate almost all byte compilation warnings
- Externalize some symbols in undo-auto
+ * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-noruntime-functions): Remove.
+ (cc-require): Remove the crude hack that saved and restored
+ byte-compile-noruntime-functions.
+ (cc-conditional-require, cc-conditional-require-after-load): New macros.
- * doc/lispref/text.texi: Update symbols.
- * lisp/simple.el (undo-auto--amalgamate,
- undo-auto--current-boundary-timer): Make symbols public.
- * src/cmds.c (Fself_insert_command,Fdelete_char): Call
- updated symbol.
+ * lisp/progmodes/cc-defs.el (top level): Reformulate code which loaded
+ cc-fix.el using the new macros in cc-bytecomp.el.
-2015-12-03 Stefan Monnier <monnier@iro.umontreal.ca>
+ * lisp/progmodes/cc-langs.el (c++-template-syntax-table)
+ (c-no-parens-syntax-table): Add extra "(eval ..)"s around "'(lambda ..)"
+ forms to remove the superflous quotes.
- * lisp/emacs-lisp/smie.el (smie-next-sexp): Fix BOB "token"
+2015-11-24 Eli Zaretskii <eliz@gnu.org>
+
+ Add one more mod-test test
+
+ * modules/mod-test/test.el (mod-test-sum-test): Test the error
+ signaled when the function is invoked with a wrong number of
+ arguments.
+
+2015-11-24 Philipp Stephani <phst@google.com>
+
+ * modules/mod-test/mod-test.c (Fmod_test_sum): Verify there are 2 args.
+
+2015-11-24 Eli Zaretskii <eliz@gnu.org>
+
+ Implement dynlib_addr for MS-Windows
+
+ * src/dynlib.c [WINDOWSNT]: Include w32common.h.
+ <g_b_init_get_module_handle_ex> [WINDOWSNT]: New static variable.
+ (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS)
+ (GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT) [WINDOWSNT]: Define
+ if undefined.
+ (dynlib_reset_last_error): Reset g_b_init_get_module_handle_ex to
+ zero.
+ (dynlib_addr) [WINDOWSNT]: Non-trivial implementation to report
+ the full file name of the module for a given address.
+
+2015-11-24 Alan Mackenzie <acm@muc.de>
+
+ Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+
+2015-11-24 Alan Mackenzie <acm@muc.de>
+
+ Squashed commit of the following:
+
+ commit e1ecf76585bef2eb87995f7a7f92cc12003a6f70
+ Author: Alan Mackenzie <acm@muc.de>
+ Date: Tue Nov 24 16:50:09 2015 +0000
-2015-12-03 Michael Albinus <michael.albinus@gmx.de>
+ Byte compile: minor amendments.
- Some error message improvements in tramp-sh.el
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment):
+ add a comment to explain the binding of variables around a subsidiary
+ compilation.
+ (byte-compile-new-defuns): Amend the doc string.
- * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
- Suppress error messages for "mesg" and "biff" calls.
- (tramp-get-remote-path): Ignore errors when expanding
- `tramp-own-remote-path'. Raise a warning instead.
+ commit c537bfed1dda1593d218956ff00c6105a3ff0316
+ Author: Alan Mackenzie <acm@muc.de>
+ Date: Sat Nov 21 18:43:57 2015 +0000
-2015-12-03 Eli Zaretskii <eliz@gnu.org>
+ Byte compiler: fix spurious warnings "might not be defined at runtime".
- Document 'nacl' value for 'system-type'
+ Also initialize byte-compile-noruntime-functions between runs.
- * doc/lispref/os.texi (System Environment): Document the 'nacl'
- value of 'system-type'.
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-new-defuns): New variable.
+ (byte-compile-initial-macro-environment): For eval-when-compile: bind
+ byte-compile-unresolved-functions and byte-compile-new-defuns around
+ byte-compile-top-level, to prevent spurious entries being made.
+ (byte-compile-warn-about-unresolved-functions): Check whether function is
+ in byte-compile-new-defuns before emitting a warning about it.
+ (byte-compile-from-buffer): Initialize new variable and
+ byte-compile-noruntime-functions to nil.
+ (byte-compile-file-form-require): record all new functions defined by a
+ `require' in byte-compile-new-defuns.
+ (byte-compile-file-form-defmumble): record the new alias in
+ byte-compile-new-defuns.
-2015-12-03 Eli Zaretskii <eliz@gnu.org>
+2015-11-24 Eli Zaretskii <eliz@gnu.org>
- Document 'window-max-chars-per-line'
+ Fix crash at startup related to GC of font entities
- * doc/lispref/windows.texi (Window Sizes): Document
- 'window-max-chars-per-line'.
+ * src/font.h (GC_FONT_SPEC_P, GC_FONT_ENTITY_P)
+ (GC_FONT_OBJECT_P, GC_XFONT_SPEC, GC_XFONT_ENTITY)
+ (GC_XFONT_OBJECT): New macros, for use in garbage collector.
+ * src/alloc.c (compact_font_cache_entry, compact_font_caches):
+ Don't ifdef away font cache compaction on NT_GUI, as the problems
+ which led to that seem to have been solved.
+ (compact_font_cache_entry): Use GC_FONT_SPEC_P, GC_XFONT_SPEC,
+ GC_XFONT_ENTITY, and GC_XFONT_OBJECT, instead of their non-GC_
+ cousins. (Bug#21999)
-2015-12-03 Artur Malabarba <bruce.connor.am@gmail.com>
+2015-11-24 Alan Mackenzie <acm@muc.de>
- Fix some file headers for the purpose of `package--builtins'
+ Byte compile: Output an error, not a warning, for odd number of args to setq
- * lisp/emacs-lisp/cl-preloaded.el
- * lisp/emacs-lisp/eieio-compat.el
- * lisp/net/sasl-scram-rfc.el: Add a "Package:" header
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Amend.
- * lisp/ielm.el: Fix summary line.
+2015-11-24 Ken Raeburn <raeburn@raeburn.org>
-2015-12-03 Artur Malabarba <bruce.connor.am@gmail.com>
+ Fix kbd_buffer iteration loop in readable_events
- * lisp/emacs-lisp/package.el (package-unpack): Load before compiling
+ * src/keyboard.c (readable_events): Wrap the event pointer back to the
+ start of the kbd_buffer array inside the top of the loop instead of
+ right before checking the loop condition, since kbd_fetch_ptr and
+ kbd_store_ptr point past the end of the array to mean that element 0
+ is next. (bug#21935)
- Reload any previously loaded package files before compiling
- the package (also reload the same files after compiling).
- This ensures that we have the most recent definitions during
- compilation, and avoids generating bad elc files when a macro
- changes and it is used in a different file from the one it's
- defined in.
+2015-11-24 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-03 Artur Malabarba <bruce.connor.am@gmail.com>
+ Improve text-quoting-style doc again
- * lisp/emacs-lisp/package.el: Refactor package activation code
+ * doc/lispref/help.texi (Keys in Documentation):
+ Omit overkill discussion of ‘setq’. Mention Emacs versions
+ where ‘grave’ style was standard.
- (package-activate): Move code that activates dependencies into
- package-activate-1.
- (package--load-files-for-activation): New function.
- (package-activate-1): Add code for (optionally) activating
- dependencies, and move file-loading code into
- `package--load-files-for-activation'.
+2015-11-23 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-03 Eli Zaretskii <eliz@gnu.org>
+ Improve text-quoting-style doc
- Document new font-related functionality
+2015-11-23 Paul Eggert <eggert@cs.ucla.edu>
- * doc/lispref/display.texi (Low-Level Font): Document
- 'default-font-width', 'default-font-height', 'window-font-width',
- and 'window-font-height'.
+ Simplify module_make_function
- * etc/NEWS: Move entries for 'default-font-width',
- 'default-font-height', 'window-font-width', and 'window-font-height'
- to their place and mark them documented.
+ * src/emacs-module.c (module_make_function):
+ Simplify by calling build_unibyte_string.
-2015-12-03 Eli Zaretskii <eliz@gnu.org>
+2015-11-23 Paul Eggert <eggert@cs.ucla.edu>
- Fix documentation and implementation of 'directory-name-p'
+ Port better to FreeBSD’s dlfunc vs dlsym
- * lisp/files.el (directory-name-p): Modify to recognize
- backslashes on MS-Windows and MS-DOS. Adjust the doc string
- accordingly. Use '=', not char-equal, for comparison, as
- letter-case cannot possibly be an issue here.
+ This avoids warnings when converting between void * and
+ function pointers, which strict C11 does not allow.
+ * configure.ac (dlfunc): Check for existence.
+ * src/dynlib.c (dlfunc) [!HAVE_DLFUNC]: New macro.
+ (dynlib_func): New function.
+ * src/dynlib.h (dynlib_function_ptr, dynlib_func): New decls.
+ * src/emacs-module.c (Fmodule_load): Use dynlib_func, not
+ dynlib_sym, for function pointers.
- * doc/lispref/files.texi (Directory Names): Move the documentation
- of directory-name-p here from "Relative File Names". Update the
- description per the changes in implementation.
+2015-11-23 Paul Eggert <eggert@cs.ucla.edu>
- * etc/NEWS: Move the entry for 'directory-name-p' to its proper
- place and mark it documented.
+ Simplify use of emacs_finalizer_function type
-2015-12-02 Eli Zaretskii <eliz@gnu.org>
+ * src/emacs-module.h (emacs_finalizer_function):
+ Now EMACS_NOEXCEPT. All users simplified to omit EMACS_NOEXCEPT.
+ (struct emacs_env_25): Use emacs_finalizer_function where applicable.
- Minor copyedit in Emacs manual
+2015-11-23 Paul Eggert <eggert@cs.ucla.edu>
- * doc/emacs/search.texi (Lax Search): Make wording about character
- folding by default less definitive. (Bug#22043)
+ module_format_fun_env fixes
-2015-12-02 Eli Zaretskii <eliz@gnu.org>
+ * src/doprnt.c (exprintf) [HAVE_MODULES]: Also define in this case.
+ * src/emacs-module.c (module_format_fun_env):
+ Convert path and sym to UTF-8.
+ Don’t use VLAs, as the C11 standard says they’re optional,
+ and anyway they can cause core dumps with large allocations.
+ Use exprintf rather than snprintf, as exprintf handles arbitrarily
+ long strings. Simplify the code a bit.
- More emacs-module.c fixes for wide ints
+2015-11-23 Dmitry Gutov <dgutov@yandex.ru>
- * src/emacs-module.c (value_to_lisp) [WIDE_EMACS_INT]: Use
- unsigned data types to manipulate pointers, to avoid sign
- extension coming after us with a vengeance.
+ Don't use package-user-dir in elisp-library-roots if it's not bound
- * modules/mod-test/test.el (mod-test-sum-test): Add tests for
- Emacs with wide ints that verify integer values near the critical
- value that requires us to switch to a cons cell.
+ * lisp/progmodes/elisp-mode.el (elisp-library-roots): Don't
+ use package-user-dir if it's not bound (bug#19759).
-2015-12-02 Stephen Leake <stephen_leake@stephe-leake.org>
+2015-11-23 Anders Lindgren <andlind@gmail.com>
- Fix bug#22069 in cl-generic.el
+ New visible-bell for NextStep (OS X El Capitan compatible).
- * lisp/emacs-lisp/cl-generic.el (cl-no-method): Remove %S; this string is
- not run thru `format'.
+ Instead of inverting a rectangle in the middle of the frame, use
+ the standard NextStep image "caution", represented using an
+ warning sign with an exclamation mark. (Bug#21662)
-2015-12-02 Dmitry Gutov <dgutov@yandex.ru>
+ Implemented based on a suggestion drafted by Mustafa Kocaturk.
- APPEND etags--xref-backend to xref-backend-functions
+ * src/nsterm.m (EmacsBell): New class for managing the caution
+ image. Support multiple active bells, the image is removed once
+ all bells have timed out.
+ (ns_timeout): Removed, no longer used.
+ (ns_ring_bell): Reimplemented to use EmacsBell.
- * lisp/progmodes/xref.el (xref-backend-functions):
- Use APPEND when adding the default element
- (http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00061.html).
+2015-11-23 Johan Bockgård <bojohan@gnu.org>
-2015-12-01 Eli Zaretskii <eliz@gnu.org>
+ * lisp/emacs-lisp/nadvice.el (add-function): Fix debug spec.
- More accurate documentation of lax whitespace matching
+ (remove-function): Ditto. (Bug#20376)
- * lisp/isearch.el (isearch-forward-word, isearch-forward-symbol)
- (word-search-backward, word-search-forward)
- (word-search-backward-lax, word-search-forward-lax): Mention in
- doc strings that toggling lax whitespace matching has no effect on
- these commands.
+2015-11-23 Mark Oteiza <mvoteiza@udel.edu>
- * doc/emacs/search.texi (Word Search, Symbol Search): Clarify that
- lax whitespace matching has no effect on these commands.
+ * lisp/leim/quail/tamil-dvorak.el: Add necessary escapes.
-2015-12-01 Eli Zaretskii <eliz@gnu.org>
+2015-11-23 Eli Zaretskii <eliz@gnu.org>
- Fix emacs-module.c for wide ints
+ Improve how non-ASCII strings are accepted from modules
- * src/emacs-module.c (lisp_to_value): Compare the produced value
- with the original Lisp object, not with the one potentially
- converted into a Lisp_Cons. Fixes assertion violations when
- working with integers larger than fit into a 32-bit value.
+ * src/emacs-module.c (module_make_function, module_make_string):
+ Build a unibyte Lisp string and then decode it by UTF-8, instead
+ of building a multibyte string without decoding. This is more
+ tolerant to deviations from UTF-8.
- * modules/mod-test/test.el (mod-test-sum-test): Add tests for
- large integers, to test --with-wide-int.
+2015-11-23 Paul Eggert <eggert@cs.ucla.edu>
-2015-12-01 Eli Zaretskii <eliz@gnu.org>
+ Port recent module changes to pickier compilers
- Document 'directory-files-recursively'
+ * src/emacs-module.c (module_make_function)
+ (module_make_string): Add casts to fix pointer signedness issues.
- * lisp/files.el (directory-files-recursively): Doc fix. Rename
- the argument MATCH to REGEXP, to be more explicit about its form.
+2015-11-23 Philipp Stephani <phst@google.com>
- * doc/lispref/files.texi (Contents of Directories): Improve the
- documentation of 'directory-files-recursively'. Add
- cross-references.
+ Fix how strings are accepted from modules
- * etc/NEWS: Move the entry for 'directory-files-recursively' to
- its place and mark it documented.
+ * emacs-module.c (module_make_function, module_make_string): Use
+ make_multibyte_string.
+ (module_copy_string_contents): Encode before reading the byte
+ size. Return false if and only if an error occurred.
-2015-12-01 Eli Zaretskii <eliz@gnu.org>
+2015-11-23 Eli Zaretskii <eliz@gnu.org>
- Document 'inhibit-read-only' property
+ Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
- * doc/lispref/text.texi (Special Properties): Describe the new
- 'inhibit-read-only' text property. Add cross-reference to where
- read-only buffers are described.
- * doc/lispref/buffers.texi (Read Only Buffers): Mention that
- 'inhibit-read-only' property exempts text from being read-only.
- Add cross-reference to "Special Properties".
+2015-11-23 Shakthi Kannan <shakthimaan@gmail.com>
- * etc/NEWS: Move the entry about 'inhibit-read-only' property to
- its place and mark it documented.
+ Add the tamil-dvorak input method
-2015-12-01 Artur Malabarba <bruce.connor.am@gmail.com>
+ * lisp/leim/quail/tamil-dvorak.el: New file. (Bug#21768)
- * lisp/emacs-lisp/package.el: Update header comments
+ * etc/NEWS: Mention the new input method.
-2015-12-01 Artur Malabarba <bruce.connor.am@gmail.com>
+2015-11-23 Martin Rudalics <rudalics@gmx.at>
- * lisp/character-fold.el: Add back multi-char matching
+ Move setting FRAME_WINDOW_SIZES_CHANGED to resize_frame_windows.
- (character-fold-to-regexp): Uncomment recently commented code
- and make the algorithm "dummer" by not checking every possible
- combination. This will miss some possible matches, but it
- greatly reduces regexp size.
+ * src/frame.c (adjust_frame_size): Don't set
+ FRAME_WINDOW_SIZES_CHANGED here ...
+ * src/window.c (resize_frame_windows): ... but here, as suggested
+ by Stefan Monnier. Also remove some dead code along the way.
- * test/automated/character-fold-tests.el
- (character-fold--test-fold-to-regexp): Comment out test of
- functionality no longer supported.
+2015-11-23 Alan Mackenzie <acm@muc.de>
-2015-12-01 Xue Fuqiao <xfq.free@gmail.com>
+ * /etc/NEWS (Incompatible Lisp Changes): Also `setf' needs an even # of args.
- * doc/emacs/ack.texi (Acknowledgments): Update.
+2015-11-23 Alan Mackenzie <acm@muc.de>
-2015-12-01 Michael Albinus <michael.albinus@gmx.de>
+ Signal an error when `setf' gets an odd number of arguments.
- Check `file-remote-p' over absolute files names in files.el
+ * lisp/emacs-lisp/gv.el (setf): Amend.
- * lisp/files.el (directory-files-recursively)
- (get-free-disk-space): Check `file-remote-p' over absolute files names.
+2015-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
-2015-12-01 Andreas Schwab <schwab@linux-m68k.org>
+ * lisp/emacs-lisp/smie.el (smie-backward-sexp): Handle BOB better.
- * src/lread.c (syms_of_lread): Doc fix.
+2015-11-23 Alan Mackenzie <acm@muc.de>
-2015-12-01 Dmitry Gutov <dgutov@yandex.ru>
+ * etc/NEWS (Incompatible Lisp Changes): Document new restriction on `setq'.
- Don't mistake certain JS method calls for keywords
+2015-11-23 Alan Mackenzie <acm@muc.de>
- * lisp/progmodes/js.el (js--ctrl-statement-indentation):
- Braceless keyword can't come after a period (bug#22063).
+ Expunge occurrences of `setq' with an odd number of arguments.
-2015-12-01 David Reitter <david.reitter@gmail.com>
+ * lisp/apropos.el (apropos-documentation):
+ * lisp/obsolete/complete.el (PC-include-file-all-completions):
+ * lisp/progmodes/compile.el (compilation-goto-locus):
+ * lisp/vc/vc-cvs.el (vc-cvs-parse-root): (twice)
+ Insert missing nil at end of `setq' forms.
- Read frame_title_format from buffer-local variable for NS port
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-autoload): Remove an
+ erroneous trailing variable name from a setq, thus allowing a compilation
+ properly to track functions not defined at runtime.
- * src/nsfns.m (x_implicitly_set_name): Read frame-title-format and
- icon-title-format variables from buffer in appropriate window.
- (Bug#22048)
+2015-11-23 John Wiegley <johnw@newartisans.com>
-2015-12-01 Juri Linkov <juri@linkov.net>
+ Add a note about a questionable use of bool in xdisp.c
- * lisp/replace.el (occur-engine): Count matches in empty lines.
+2015-11-23 Alan Mackenzie <acm@muc.de>
- (Bug#22062)
+ Issue a warning from the byte compiler on a malformed `setq' form.
-2015-11-30 Aurélien Aptel <aurelien.aptel@gmail.com>
+ Partly fixes bug#20241.
+ * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Issue a warning when a
+ `setq' form with an odd number of arguments is compiled.
- * src/emacs-module.h: Fix finalizer typedef for C++11
+2015-11-23 Alan Mackenzie <acm@muc.de>
- C++11 standard doesn't allow exception-specification in typedef.
- The workaround is to declare a dummy function prototype and use
- decltype on it.
+ Don't let cconv_convert insert a nil argument into a `setq' form.
-2015-11-30 Eli Zaretskii <eliz@gnu.org>
+ Fixes bug#21983.
+ * lisp/emacs-lisp/cconv.el (cconv-convert): Don't silently insert a nil last
+ argument into a `setq' when there're an odd number of args. This enables the
+ byte compiler to issue a message in this case.
- Fix last change
+2015-11-23 Alan Mackenzie <acm@muc.de>
- * src/emacs-module.c (lisp_to_value, value_to_lisp)
- [WIDE_EMACS_INT]: Avoid compiler warnings.
+ Signal an error when `setq' has an odd number of arguments. Fixes bug#20241.
-2015-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
+ * src/eval.c (Fsetq): Signal an error on an odd number of arguments.
+ (syms_of_eval): Add a DEFSYM for Qsetq.
- Rely on conservative stack scanning to find "emacs_value"s
+2015-11-23 Martin Rudalics <rudalics@gmx.at>
- * src/emacs-module.c (struct emacs_value_tag)
- (struct emacs_value_frame, struct emacs_value_storage): Remove.
- (value_frame_size): Remove constant.
- (struct emacs_env_private): Use Lisp_Object for non_local_exit info.
- (lisp_to_value): Remove first arg.
- (module_nil): New constant.
- Use it instead of NULL when returning an emacs_value.
- (module_make_function): Adjust to new calling convention of
- Qinternal_module_call.
- (DEFUN): Receive args in an array rather than a list.
- Use SAFE_ALLOCA rather than xnmalloc. Skip the lisp_to_value loop when
- we don't have WIDE_EMACS_INT. Adjust to new type of non_local_exit info.
- (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
- Adjust to new type of non_local_exit info.
- (ltv_mark) [WIDE_EMACS_INT]: New constant.
- (value_to_lisp, lisp_to_value): Rewrite.
- (initialize_frame, initialize_storage, finalize_storage): Remove functions.
- (allocate_emacs_value): Remove function.
- (mark_modules): Gut it.
- (initialize_environment): Don't initialize storage any more.
- Keep the actual env object on Vmodule_environments.
- (finalize_environment): Don't finalize storage any more.
- (syms_of_module): Initialize ltv_mark and module_nil.
+ * doc/lispref/windows.texi (Window Sizes): Fix indices and references.
- * src/emacs-module.h (emacs_value): Make it more clear that this type
- is really opaque, including the fact that NULL may not be valid.
+ * src/frame.c (adjust_frame_size): Set FRAME_WINDOW_SIZES_CHANGED (Bug#21975).
- * modules/mod-test/mod-test.c (Fmod_test_signal, Fmod_test_throw):
- Don't assume that NULL is a valid emacs_value.
+2015-11-22 Thomas Fitzsimmons <fitzsim@fitzsim.org>
-2015-11-30 Eli Zaretskii <eliz@gnu.org>
+ Add EUDC BBDB 3 entry in NEWS
- Yet another doc improvement for search commands
+ * NEWS: Mention EUDC BBDB backend support for BBDB 3.
- * doc/emacs/search.texi (Word Search, Symbol Search)
- (Regexp Search): Document commands that don't support lax
- whitespace matching or character folding.
- (Nonincremental Search): Mention the search commands that can be
- invoked from the menu bar.
+2015-11-22 Thomas Fitzsimmons <fitzsim@fitzsim.org>
- * lisp/isearch.el (isearch-define-mode-toggle-word)
- (isearch-define-mode-toggle-symbol)
- (isearch-define-mode-toggle-character-fold): Note in the doc
- string that turning these on exits the regexp mode.
- (isearch-forward-regexp, isearch-forward-word)
- (isearch-forward-symbol, isearch-backward-regexp)
- (word-search-backward, word-search-forward)
- (word-search-backward-lax, word-search-forward-lax): State in the
- doc string which commands don't support character folding and/or
- lax-whitespace matching.
+ Improve EUDC to BBDB 3 export
-2015-11-30 Martin Rudalics <rudalics@gmx.at>
+ * eudc-vars.el (eudc-ldap-bbdb-conversion-alist): Change phone
+ entry to single item. Add company conversion.
+ * eudc-export.el (eudc-bbdbify-company): New function.
+ (bbdb-parse-phone): Declare function.
+ (eudc-bbdbify-phone): Add BBDB 3 support.
+ (Bug#21971)
- Run `window-size-change-functions' also when reading from minibuffer
+2015-11-22 Thomas Fitzsimmons <fitzsim@fitzsim.org>
- * src/xdisp.c (redisplay_internal): Run `window-size-change-functions'
- also when reading from minibuffer.
+ Add BBDB 3 support for EUDC export
-2015-11-30 Ulf Jasper <ulf.jasper@web.de>
+ * eudc.el: Add bbdb-version defvar.
+ (eudc--using-bbdb-3-or-newer-p): New function.
+ * eudc-export.el (eudc-create-bbdb-record): Add support for
+ bbdb-create-internal argument list changes introduced in BBDB 3.
+ * eudcb-bbdb.el: Remove bbdb-version defvar.
+ (eudc-bbdb-field): Call eudc--using-bbdb-3-or-newer-p.
+ (Bug#21971)
- Fix scrambling of html-rendered item buffers
+2015-11-22 Eli Zaretskii <eliz@gnu.org>
- * lisp/net/newst-treeview.el (newsticker--treeview-render-text): Fix
- scrambling of contents by wrapping call to html-renderer in
- save-selected-window.
+ Allow loading modules by 'load-file'
-2015-11-30 Paul Eggert <eggert@cs.ucla.edu>
+ * src/lread.c (Fload): Call 'unbind_to' with 'Fmodule_load' as the
+ 2nd arg, to avoid the "binding stack not balanced" error.
+ (syms_of_lread) <module-file-suffix>: New Lisp variable.
- Fix font typo in previous doc fix.
+ * lisp/files.el (module-file-suffix): Declare.
+ (load-file): Remove 'module-file-suffix' from
+ 'completion-ignored-extensions', to allow completion on modules.
-2015-11-30 Paul Eggert <eggert@cs.ucla.edu>
+ * etc/NEWS: Mention 'module-file-suffix'.
- A bit more security doc, esp. file local vars
+2015-11-22 Eli Zaretskii <eliz@gnu.org>
- * doc/emacs/emacs.texi (Top):
- * doc/emacs/misc.texi (Miscellaneous Commands):
- Refer to new Host Security section.
- (Host Security): New section.
- * doc/lispref/os.texi (Security Considerations):
- Mention file local variables.
+ Fix unoptimized builds
-2015-11-30 Artur Malabarba <bruce.connor.am@gmail.com>
+ * src/lisp.h (XTYPE): Move before XSYMBOL, to fix unoptimized
+ builds.
- * lisp/character-fold.el: Comment out branching code
+2015-11-22 Dmitry Gutov <dgutov@yandex.ru>
- (character-fold-to-regexp): Comment out code that uses multi-char
- table. The branching caused by this induces absurdly long regexps,
- up to 10k chars for as little as 25 input characters.
+ Work around the asynchronous-empty-diff problem
-2015-11-30 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/vc/vc-rcs.el (vc-rcs-diff):
+ * lisp/vc/vc-mtn.el (vc-mtn-diff):
+ * lisp/vc/vc-hg.el (vc-hg-diff):
+ * lisp/vc/vc-git.el (vc-git-diff): Ignore the ASYNC argument,
+ do a synchronous process call (bug#21969).
- Spelling and grammar fixes
+2015-11-21 Karl Fogel <kfogel@red-bean.com>
-2015-11-30 Dmitry Gutov <dgutov@yandex.ru>
+ Finish excising electric indent from `open-line'
- Make lisp-completion-at-point a wrapper instead of an alias
+ * lisp/simple.el (open-line): Remove INTERACTIVE argument.
- * lisp/progmodes/elisp-mode.el (lisp-completion-at-point):
- Turn into an obsolete wrapper around elisp-completion-at-point
- (bug#20455).
+ * test/automated/simple-test.el (open-line-indent, open-line-hook):
+ Adjust accordingly.
-2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+ This change finishes what my commit of Thu Nov 19 17:32:37 2015 -0600
+ (git commit c59353896) started. It turns out that having INTERACTIVE
+ cause `post-self-insert-hook' to run (via `newline') meant `open-line'
+ still had the electric indent behavior, as `post-self-insert-hook'
+ normally contains `electric-indent-post-self-insert-function' ever
+ since `electric-indent-mode' has been on by default. Tracing the code
+ change in `open-line' is mildly twisty, because Artur Malabarba's
+ earliest two commits of 24 Oct 2015 first removed the `interactive'
+ form entirely (git commit 6939896e2) and then restored it with the new
+ extra "p" already added (git commit bd4f04f86), such that there is no
+ single-commit diff in which one sees the second "p" appear. Thus this
+ change is effectively a reversion of parts of each of those commits.
- * lisp/isearch.el (isearch-search-fun-default): Nicer error
+ This could close bug#21884, at least until further discussion.
- message when the search fails.
+2015-11-21 Dmitry Gutov <dgutov@yandex.ru>
-2015-11-29 Dmitry Gutov <dgutov@yandex.ru>
+ Adhere closer to the "implicit tag name" definition
- Update menu-bar-goto-uses-etags-p for the current xref API
+ * lisp/progmodes/etags.el (etags-tags-completion-table):
+ Adhere closer to the "implicit tag name" definition. Simplify
+ the regexp. Search for the explicit tag name first, and when
+ not found, search locally for the implicit one. (Bug#21934)
- * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Consult
- xref-backend-functions, instead of now-nonexistent
- xref-find-function.
+2015-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
-2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+ Unrevert most of regexp reentrancy abort patch
- * lisp/isearch.el (isearch-define-mode-toggle): Advertise binding
+ The problem was in:
+ * src/syntax.c (update_syntax_table_forward): Propertize even when truncated
+ which is hence not unreverted.
+ The rest is:
+ * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
+ (UPDATE_SYNTAX_TABLE_FAST): Re-introduce.
+ All callers in regex.c changed back to the _FAST versions.
-2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+ * test/automated/message-mode-tests.el: Tweak the test to rely on auto
+ propertization in backward-sexp.
- * lisp/menu-bar.el: Use folding in searches
+2015-11-21 Paul Eggert <eggert@cs.ucla.edu>
- (nonincremental-search-forward): Use `isearch-search-fun-default'
- to determine the search function.
- (nonincremental-search-backward)
- (nonincremental-repeat-search-forward)
- (nonincremental-repeat-search-backward): Use it.
+ Revert regexp reentrancy abort patch
-2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+ Although the patch does fix Bug#21688 and prevents a core dump,
+ it also makes the message-mode-propertize test fail; see:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01667.html
+ Perhaps someone else can come up with a better fix some day.
+ * src/syntax.c (update_syntax_table_forward):
+ Propertize even when truncated.
+ * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
+ (UPDATE_SYNTAX_TABLE_FAST): Remove.
+ All callers changed back to the non-_FAST versions.
- * lisp/menu-bar.el (menu-bar-goto-uses-etags-p): Fix a warning
+2015-11-21 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-29 Artur Malabarba <bruce.connor.am@gmail.com>
+ Add a few safety checks when ENABLE_CHECKING
- * lisp/character-fold.el (character-fold-to-regexp): Be careful
+ This was motivated by the recent addition of module code,
+ which added some ENABLE_CHECKING-enabled checks that are
+ useful elsewhere too.
+ * src/alloc.c (compact_font_cache_entry):
+ * src/fns.c (sweep_weak_table):
+ * src/lread.c (oblookup):
+ Use gc_asize rather than doing it by hand.
+ * src/emacs-module.c (module_make_global_ref)
+ (module_free_global_ref, module_vec_size):
+ Omit assertions that lisp.h now checks.
+ * src/lisp.h (XFASTINT, ASIZE): In functional implementations,
+ check that the result is nonnegative. Use eassume, as this
+ info can help a bit when optimizing production code.
+ (XSYMBOL) [!USE_LSB_TAG]: Assert that argument is a symbol,
+ to be consistent with the USE_LSB_TAG case.
+ (gc_asize): New function, when ASIZE is needed in the gc.
+ (gc_aset): Use it.
+ (HASH_TABLE_P): Move definition up, so that it can be used ...
+ (XHASH_TABLE): ... here, to assert that the arg is a hash table.
- not to return huge regexps.
+2015-11-21 Eli Zaretskii <eliz@gnu.org>
-2015-11-29 Eli Zaretskii <eliz@gnu.org>
+ Simplify recording of main thread's ID on MS-Windows
- Improve documentation of string-collate-* functions
+ * src/w32term.c (w32_initialize):
+ * src/w32console.c (initialize_w32_display):
+ * src/w32fns.c (globals_of_w32fns): Don't record the main thread
+ ID independently for each type of session (GUI, TTY, batch).
+ * src/w32term.c (w32_init_main_thread): New function, records the
+ main thread's thread ID.
+ * src/w32term.h: Add prototype for w32_init_main_thread.
+ * src/emacs.c (main) [WINDOWSNT]: Call w32_init_main_thread.
- * doc/lispref/strings.texi (Text Comparison): Improve wording and
- indexing of 'string-collate-equalp' and 'string-collate-lessp'.
+ * src/emacs-module.c [WINDOWSNT]: Rename main_thread_id to
+ main_thread, for consistency with other threading libraries. All
+ users changed. Include w32term.h.
+ (check_main_thread) [WINDOWSNT]: Simplify the test: no need to
+ make sure the main thread is alive, as we hold a handle on it
+ opened by w32_init_main_thread.
+ (module_init) [WINDOWSNT]: Reuse the thread ID recorded by
+ w32_init_main_thread, instead of calling the requisite APIs once
+ more.
- * etc/NEWS: Move the entry of 'string-collate-equalp' and
- 'string-collate-lessp' to "Lisp Changes" section and mark it as
- documented.
+2015-11-21 Eli Zaretskii <eliz@gnu.org>
-2015-11-29 Eli Zaretskii <eliz@gnu.org>
+ Call 'window-size-change-functions' for mini-windows
- Document truncate-string-ellipsis
+ * src/window.c (grow_mini_window, shrink_mini_window): Set the
+ frame's 'window_sizes_changed' flag.
+ * src/xdisp.c (redisplay_internal): Call the hooks on
+ 'window-size-change-functions' if the call to 'echo_area_display'
+ sets the frame's 'window_sizes_changed' flag.
+ (syms_of_xdisp) <window-size-change-functions>:
+ Update doc string to indicate the mini-window resizes trigger a
+ call to the hooks, and don't promise that will happen "before
+ redisplay". (Bug#19576, Bug#21333)
- * doc/lispref/display.texi (Size of Displayed Text): Document
- 'truncate-string-ellipsis'.
+ * doc/lispref/windows.texi (Window Hooks): Update the description
+ of 'window-size-change-functions'.
- * lisp/international/mule-util.el (truncate-string-ellipsis): Doc fix.
- (truncate-string-to-width): Mention in the doc string that the
- default for ELLIPSIS comes from 'truncate-string-ellipsis'.
+2015-11-21 Eli Zaretskii <eliz@gnu.org>
- * etc/NEWS: Move the 'truncate-string-ellipsis' entry to the "Lisp
- Changes" section.
+ Improve documentation of dynamic modules
-2015-11-29 Eli Zaretskii <eliz@gnu.org>
+ * src/fns.c (Frequire): Doc fix to include the dynamic module
+ support.
+ * src/lread.c (Fload, Vload_suffixes): Doc fixes to include the
+ dynamic module support.
+ (Fload): Treat the module suffix the same as '*.el' and '*.elc'
+ wrt the MUST-SUFFIX argument.
- Fix confusion wrt character folding in the Emacs manual
+ * etc/NEWS: Expand documentation of dynamically loaded modules.
- * doc/emacs/search.texi (Nonincremental Search, Regexp Search):
- Document that invoking search-forward/backward and
- re-search-forward/backward supports only case folding, but not the
- rest of the lax-search features. Reported by Mike Kupfer
- <m.kupfer@acm.org>.
+2015-11-21 Philipp Stephani <phst@google.com> (tiny change)
-2015-11-29 Ken Brown <kbrown@cornell.edu>
+ Initial documentation for dynamic modules
- Update mod-test-sum-test
+ * etc/NEWS: Mention the new support for dynamically loaded modules.
- * modules/mod-test/test.el (mod-test-sum-test): Update to
- accommodate the lack of dladdr on Cygwin.
+2015-11-20 Dmitry Gutov <dgutov@yandex.ru>
-2015-11-29 Alan Mackenzie <acm@muc.de>
+ Add xref--etags-backend to xref-backing-functions using add-hook
- Byte compiler: Catch missing argument to `funcall'. Fixes bug#22051.
+ * lisp/progmodes/xref.el (xref-backend-functions): Move the
+ default value into a separate `add-hook' call (bug#21964).
- * lisp/emacs-lisp/bytecomp.el (byte-compile-funcall): When there's no argument
- to `funcall', (i) Output an error message; (ii) Generate code to signal a
- `wrong-number-of-arguments' error.
+ * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
+ Don't declare the xref-backend-functions variable.
+ It doesn't make any difference.
-2015-11-29 Martin Rudalics <rudalics@gmx.at>
+2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/window.el (split-window): Don't sanitize sizes when SIZE is non-nil.
+ Fix double-decrement bug when freeing global refs
-2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+ * src/emacs-module.c (module_free_global_ref): Add a FIXME
+ comment about error reporting. Fix a recently-introduced typo
+ that double-decremented the refcount.
- * lisp/character-fold.el (character-fold-to-regexp)
+2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
- Warn about using long strings.
+ Declare emacs_module_init in the module API
- * test/automated/character-fold-tests.el
- (character-fold--test-lax-whitespace)
- (character-fold--test-consistency): Reduce string size for tests.
+ * src/emacs-module.h (emacs_module_init): New decl.
+ Without it, GCC might complain about a module that defines
+ emacs_module_init without using it. This also checks the
+ API better.
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
- Document renaming of x-select-enable-* variables
+ Fix module test to use ptrdiff_t nargs too
- * doc/emacs/killing.texi (Clipboard): Rename
- x-select-enable-clipboard to select-enable-clipboard and
- x-select-enable-primary to select-enable-primary. Update index
- entries.
+ * modules/mod-test/mod-test.c (Fmod_test_return_t)
+ (Fmod_test_sum, Fmod_test_signal, Fmod_test_throw)
+ (Fmod_test_non_local_exit_funcall, Fmod_test_globref_make)
+ (Fmod_test_string_a_to_b, Fmod_test_userptr_make)
+ (Fmod_test_userptr_get, Fmod_test_vector_fill)
+ (Fmod_test_vector_eq): Arg counts are ptrdiff_t, not int.
+ (finalizer): Remove; no longer used.
- * etc/NEWS: Mark entry as documented.
+2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+ Fix reindent-introduced typo in module code
- Document the shorthand hints displayed by M-x
+ * src/emacs-module.c (MODULE_SETJMP_1): Fix typo that I
+ introduced while reindenting the code earlier, and add a
+ comment explaining the unusual use of do-while here.
- * doc/emacs/m-x.texi (M-x): Document the numeric meaning of
- suggest-key-bindings. Document the shorthand hints for commands
- that have no key bindings. Document that M-x completion ignores
- obsolete commands.
+2015-11-20 Anders Lindgren <andlind@gmail.com>
- * etc/NEWS: Move the M-x entry to "Editing Changes" and mark it as
- documented.
+ Fixed bug#19576: `write-file' saves wrong buffer.
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+ If a function on the hook `window-size-change-functions' doesn't
+ restore the current buffer, functions that save and restore the
+ current window configuration (like `y-or-no-p') could silently
+ change the current buffer. When `write-file' asked the user
+ confirmation to overwrite a file, `y-or-no-p' changed the current
+ buffer, and the wrong buffer was saved to the file.
- Update docs of character folding
+ * lisp/follow.el (follow-windows-start-end): Call `select-frame'
+ using the `norecord' parameter.
+ (follow-window-size-change): Restore current buffer. Call
+ `select-frame' using the `norecord' parameter. Cleanup.
- * doc/emacs/search.texi (Lax Search): Update the description of
- character folding for the latest changes.
+2015-11-20 John Wiegley <johnw@newartisans.com>
-2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+ Correct a documentation error in frames.texi
- * lisp/character-fold.el: Also play nice with case-folding
+2015-11-20 Stephen Leake <stephen_leake@stephe-leake.org>
- (character-fold-to-regexp): Take `case-fold-search' into account.
+ * lisp/cedet/mode-local.el: Delete obsolete comment
-2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/character-fold.el: Add support for multi-char matches
+ Module function arg counts are ptrdiff_t, not int
- (character-fold-table): Now has an extra-slot. This is a second
- char-table that holds multi-character matches. See docstring for
- details.
- (character-fold-to-regexp): Can build branching regexps when a
- character's entry the extra slot of `character-fold-table' matches the
- characters that succeed it.
+ * src/emacs-module.c (struct module_fun_env)
+ (module_make_function, module_funcall, Fmodule_call):
+ * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
+ Use ptrdiff_t, not int, for arg counts.
+ * src/emacs-module.c (module_make_function): Don’t bother
+ checking arity against MOST_POSITIVE_FIXNUM, as that’s
+ unnecessary here. Make the checking clearer by negating it.
+ (module_make_function, Fmodule_call): No need to use xzalloc
+ since the storage doesn’t need to be cleared.
+ (module_funcall): Don’t use VLA, since C11 doesn’t guarantee support
+ for it, and many implementations are buggy with large VLAs anyway.
+ Use SAFE_ALLOCA_LISP instead.
+ (module_vec_set): Don’t crash if i < 0.
+ (module_vec_get): Don’t crash if i < MOST_NEGATIVE_FIXNUM.
+ (module_vec_set, module_vec_get): Do fixnum checks only when
+ i is out of array bounds, for efficiency in the usual case.
+ (Fmodule_load): Simplify fixnum range check.
+ (Fmodule_call): Simplify arity check. Use xnmalloc to detect
+ integer overflow in array allocation size.
-2015-11-28 Artur Malabarba <bruce.connor.am@gmail.com>
+2015-11-20 Eli Zaretskii <eliz@gnu.org>
- * lisp/character-fold.el: Code simplifications
+ Minor improvements in module test
- (character-fold-table): Reduce the scope of a variable.
- (character-fold-to-regexp): Change logic to work directly on the
- input string. It's a little easier to understand, probably
- faster, and sets us up for implementing multi-char matches.
+ * modules/mod-test/mod-test.c: Include stdlib.h, to avoid warnings
+ about missing prototype of malloc.
+ * modules/mod-test/Makefile (CFLAGS): Add -std=gnu99, to avoid
+ compiler warnings.
- * test/automated/character-fold-tests.el
- (character-fold--test-fold-to-regexp): New test.
+2015-11-20 Eli Zaretskii <eliz@gnu.org>
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+ Improve MS-Windows implementation in dynlib.c
- Document changes in "C-h l"
+ * src/dynlib.c [WINDOWSNT]: Include errno.h, lisp.h, and w32.h.
+ No need to include windows.h, as w32.h already does that.
+ <dynlib_last_err>: New static variable.
+ (dynlib_reset_last_error): New function.
+ (dynlib_open): Convert forward slashes to backslashes. Convert
+ file names from UTF-8 to either UTF-16 or the current ANSI
+ codepage, and call either LoadLibraryW or LoadLibraryA. If the
+ argument is NULL, return a handle to the main module, like
+ 'dlopen' does. Record the error, if any, for use by dynlib_error.
+ (dynlib_sym): Check the handle for validity. Record the error, if
+ any, for use by dynlib_error.
+ (dynlib_error): Call w32_strerror to produce the error string, and
+ zero out the last error code, like dlerror does.
+ (dynlib_close): Check the handle for validity. Record the error,
+ if any, for use by dynlib_error. Don't call FreeLibrary with a
+ handle for the main module.
+ * src/w32.c (globals_of_w32): Call dynlib_reset_last_error.
- * doc/emacs/help.texi (Misc Help): Document the changes in "C-h l".
+2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
- * etc/NEWS: mark "C-h l" changes as documented.
+ Include-file tweaks for modules
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+ * src/dynlib.c, src/emacs-module.c: Include <config.h> first.
+ * src/dynlib.h: Do not include config.h.
+ It’s every .c file’s responsibility to include config.h first.
+ * src/emacs-module.c: Include emacs-module.h immediately after
+ config.h, to test that emacs-module.h doesn’t depend on
+ include files other than config.h.
- Finalize documentation of 'custom-prompt-customize-unsaved-options'
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
- * doc/emacs/custom.texi (Saving Customizations): Index the new
- function 'custom-prompt-customize-unsaved-options'.
+ Simplify push_handler and profile its malloc
- * etc/NEWS: Mention when 'custom-prompt-customize-unsaved-options'
- is useful.
+ * src/lisp.h (PUSH_HANDLER): Remove.
+ All callers changed to use push_handler directly.
+ * src/eval.c (internal_condition_case)
+ (internal_condition_case_1, internal_condition_case_2)
+ (internal_condition_case_n):
+ Use same pattern as for other invokers of push_handler.
+ (push_handler, push_handler_nosignal): Use call-by-value
+ instead of call-by-reference. All uses changed.
+ (push_handler): Simplify by rewriting in terms of
+ push_handler_nosignal.
+ (push_handler_nosignal): Profile any newly allocated memory.
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
- Document 'comment-line'
+ * src/emacs-module.h: Include stddef.h, not stdlib.h.
- * doc/emacs/programs.texi (Comment Commands): Document
- 'comment-line'.
+2015-11-19 Juanma Barranquero <lekktu@gmail.com>
- * etc/NEWS: Move the entry for 'comment-line' into "Editing Changes".
+ Discover repository version in linked worktrees (bug#21930)
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+ * lisp/version.el (emacs-repository--version-git-1): Do not assume
+ HEAD is at .git/HEAD, it can also be at .git/worktrees/<branch>/HEAD.
+ (emacs-repository-get-version): Grok linked worktrees when EXTERNAL
+ is nil too.
- Document new checkdoc features
+2015-11-19 Juri Linkov <juri@linkov.net>
- * doc/lispref/tips.texi (Tips, Library Headers): Document the
- keyword-checking features of checkdoc and the commands
- 'checkdoc-file' and 'checkdoc-current-buffer'.
+ * lisp/replace.el (occur-regexp-descr): New function.
+ (occur-1, occur-engine): Use it.
- * etc/NEWS: Move the checkdoc-related entries to their own
- section.
+ * lisp/isearch.el (isearch-occur): Propertize regexp with
+ isearch-string and isearch-regexp-function-descr for
+ occur-regexp-descr to display the correct description
+ message in the header (bug#21176, bug#21180).
-2015-11-28 Philipp Stephani <p.stephani2@gmail.com>
+2015-11-19 Karl Fogel <kfogel@red-bean.com>
- Simplify the prologue of emacs-module.c functions
+ Revert `open-line' electric-indent sensitivity
- * src/emacs-module.c (MODULE_FUNCTION_BEGIN): New macro.
- (module_make_global_ref)
- (module_free_global_ref, module_make_function, module_funcall)
- (module_intern, module_type_of, module_extract_integer)
- (module_make_integer, module_extract_float, module_make_float)
- (module_copy_string_contents, module_make_string)
- (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
- (module_get_user_finalizer, module_set_user_finalizer)
- (module_vec_set, module_vec_get, module_vec_size): Use new helper
- macro MODULE_FUNCTION_BEGIN.
+ * lisp/simple.el (open-line): Remove electric indent code.
+ (electric-indent-just-newline): Don't declare.
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+ * test/automated/simple-test.el (open-line-indent): Adjust test.
- Don't reject module calls with no arguments
+ This partly reverts Artur Malabarba's change that added electric
+ indent sensitivity to `open-line' (Oct 24 22:26:27 2015 +0100, git
+ commit bd4f04f86), and adjusts a new test he added right afterwards
+ (Sat Oct 24 23:43:06 2015 +0100, git commit 207f235e3) accordingly.
+ However, the new INTERACTIVE argument to `open-line', which he also
+ added in the first commit, is not reverted here.
- * src/emacs-module.c (Finternal_module_call): Allow ARGLIST be nil.
+ See the thread "Questioning the new behavior of `open-line'." on the
+ Emacs Devel mailing list, and in particular this message:
-2015-11-28 Philipp Stephani <p.stephani2@gmail.com>
+ From: Artur Malabarba
+ Subject: Re: Questioning the new behavior of `open-line'.
+ To: Karl Fogel
+ Cc: David Kastrup, Pierpaolo Bernardi, emacs-devel
+ Date: Wed, 18 Nov 2015 21:03:58 +0000
+ Message-ID: \
+ <CAAdUY-KN06pvCMy5bt3+Buk3yeKjf6n9iB2FaSTTOPpCqPwyhA@mail.gmail.com>
- Make module-call be visible from Lisp
+ https://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01707.html
- * src/emacs-module.c (module_make_function): Use internal--module-call.
- (Finternal_module_call): Renamed from Fmodule_call. Add safety
- checks.
- (syms_of_module): DEFSYM save-value-p and save-pointer-p. Do
- defsubr internal--module-call.
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+ Omit unnecessary clear in Fmodule_load
- Add etags tests for the recent Lua-related bugfix
+ * src/emacs-module.c (Fmodule_load):
+ Simplify and avoid unnecessary initialization of priv member to 0.
- * test/etags/lua-src/test.lua: New file, tests the issues raised
- by bug#21934.
- * test/etags/Makefile (LUASRC): Add test.lua.
- * test/etags/ETAGS.good_1:
- * test/etags/ETAGS.good_2:
- * test/etags/ETAGS.good_3:
- * test/etags/ETAGS.good_4:
- * test/etags/ETAGS.good_5:
- * test/etags/ETAGS.good_6:
- * test/etags/CTAGS.good: Adapt to the new Lua test. Also, an old
- regression fix, resolved around 25 May 2015, required changes to
- the "good" ETAGS files.
+ * src/emacs-module.c: (module_vec_set, module_vec_get, module_vec_size)
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
- Fix Lua tags when a function name includes '.' or ':'
+ Prefer signed integer types in module code
- * lib-src/etags.c (Lua_functions): Add a tag for the last element
- of a function name after a dot or a colon. (Bug#21934)
+ Generally speaking, at the C level the Emacs source code prefers
+ signed types like ‘ptrdiff_t’ to unsigned types like ‘size_t’,
+ partly to avoid the usual signedness confusion when comparing values.
+ Change the module API to follow this convention.
+ Use ‘int’ for small values that can’t exceed INT_MAX.
+ * modules/mod-test/mod-test.c (Fmod_test_globref_make)
+ (Fmod_test_string_a_to_b, Fmod_test_vector_fill)
+ (Fmod_test_vector_eq):
+ * src/emacs-module.c (struct emacs_value_frame)
+ (module_make_global_ref, module_free_global_ref)
+ (module_copy_string_contents, module_make_string)
+ (module_vec_set, module_vec_get, module_vec_size):
+ * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
+ * src/lread.c (suffix_p):
+ Prefer signed to unsigned integer types.
-2015-11-28 Eli Zaretskii <eliz@gnu.org>
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
- Improve documentation of search and replace commands
+ Omit ‘const’ on locals
- * doc/emacs/search.texi (Replacement and Lax Matches): Document
- which commands are affected by 'replace-character-fold'.
- (Lax Search): Add a cross reference to "Replacement and Lax
- Matches". Improve wording. Fix lost extra whitespace.
- (Search Customizations): Improve wording. (Bug#22036)
- See also comments in
- http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02376.html.
+ Remove ‘const’ qualifier from locals that were newly added.
+ We don’t normally bother declaring locals with ‘const’ even
+ though they are not modified, for the same reason we don’t
+ bother declaring them with ‘register’ even though their
+ addresses are not taken; the advantage in compile-time
+ checking isn’t worth the loss of readability.
+ * modules/mod-test/mod-test.c (Fmod_test_non_local_exit_funcall)
+ (Fmod_test_vector_fill, Fmod_test_vector_eq):
+ * src/emacs-module.c (MODULE_SETJMP_1)
+ (module_make_global_ref, module_free_global_ref)
+ (module_non_local_exit_get, module_make_function)
+ (module_extract_integer, module_extract_float)
+ (module_get_user_ptr, module_set_user_ptr)
+ (module_get_user_finalizer, module_set_user_finalizer)
+ (module_vec_get, Fmodule_call)
+ (module_non_local_exit_signal_1)
+ (module_non_local_exit_throw_1, lisp_to_value)
+ (finalize_storage, allocate_emacs_value, mark_modules)
+ (module_handle_signal, module_handle_throw)
+ (module_format_fun_env):
+ * src/eval.c (push_handler, push_handler_nosignal)
+ (init_handler):
+ * src/lread.c (suffix_p):
+ Omit unnecessary ‘const’.
- * lisp/replace.el (query-replace, query-replace-regexp)
- (query-replace-regexp-eval, replace-string, replace-regexp):
- Mention 'replace-character-fold' in the doc strings.
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-28 Paul Eggert <eggert@cs.ucla.edu>
+ Prefer intmax_t to int64_t in module code
- Fix minor problems found by static checking
+ * modules/mod-test/mod-test.c (sum, Fmod_test_sum):
+ * src/emacs-module.c (module_extract_integer)
+ (module_make_integer):
+ * src/emacs-module.h (struct emacs_env_25):
+ Prefer intmax_t to int64_t. This doesn’t change the generated
+ code on any of the machines Emacs currently ports to, but it’s
+ at least in theory more future-proof as C99 doesn’t guarantee
+ that int64_t exists.
- * src/undo.c (prepare_record): Add proper prototype for C.
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-27 Stefan Monnier <monnier@iro.umontreal.ca>
+ Rename module.c to emacs-module.c, etc.
- * src/emacs-module.c (struct env_storage): Delete
+ * src/emacs-module.c: Rename from src/module.c.
+ * src/emacs-module.h: Rename from src/module.h.
+ All uses changed.
- (struct emacs_runtime_private): Keep an emacs_env instead.
- (Fmodule_load, Fmodule_call): Declare emacs_env_private separately.
- (initialize_environment): Split the arg in two. Adjust all callers.
- Only store the private part in Vmodule_environments.
- (finalize_environment): Change the arg to only be the private env.
- Adjust all callers.
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+ Fix minor module problems found by static checking
- Improve documentation of 'replace-character-fold'
+ * src/dynlib.c (dynlib_close): #ifdef out for now, as it’s not used.
+ * src/eval.c, src/lisp.h (lisp_eval_depth): Now static.
+ * src/module.c (Fmodule_load): Fix pointer signedness bug.
+ (Fmodule_call): Tell GCC that the default case is unreachable.
- * lisp/replace.el (replace-character-fold): Clarify which commands
- are affected by this variable.
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-27 Mark Oteiza <mvoteiza@udel.edu>
+ Style fixes for indenting etc. in module code
- Backport: Add interactive seek command.
+ This is mostly indenting and spacing changes. Also, remove
+ some unnecessary static decls instead of bothering to reindent them.
+ * src/module.h (EMACS_EXTERN_C_BEGIN): Remove, and do this inline,
+ as most other Emacs files do for this sort of thing.
- * lisp/mpc.el (mpc-cmd-seekcur): New function.
- (mpc-seek-current): New command.
- (mpc-mode-menu): Add entry for mpc-seek-current
- (mpc-mode-map): Bind mpc-seek-current to "g"
+2015-11-19 Eli Zaretskii <eliz@gnu.org>
-2015-11-27 Dmitry Gutov <dgutov@yandex.ru>
+ Minor improvements in modules testing Makefile
- Autoload etags when using its xref backend
+ * modules/mod-test/Makefile (EMACS, SO): New variables.
+ (CFLAGS): When SO = dll, don't use -fPIC.
+ (check): New target, runs the test.
- * lisp/progmodes/xref.el (xref--etags-backend):
- Rename to etags--xref-backend. Move to etags.el. Autoload.
- (Bug#22026)
+2015-11-19 Eli Zaretskii <eliz@gnu.org>
-2015-11-27 Artur Malabarba <bruce.connor.am@gmail.com>
+ * .gitignore: Add "*.dll".
- * lisp/character-fold.el: Allow complex chars to match their decomposition
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
- (character-fold-table): When a character's decomposition does not
- involve a formatting tag (i.e., if it has an "exact" description via
- other characters), then this character is allowed to match the
- decomposition.
+ Migrate modules/.gitignore into .gitignore
-2015-11-27 Artur Malabarba <bruce.connor.am@gmail.com>
+ * .gitignore: Add former contents of modules/.gitignore.
+ * modules/.gitignore: Remove.
- * lisp/character-fold.el: More descriptive variable names
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
- (character-fold-table): Rename a lot of the lexical variables to
- make the code easier to read.
+ Add copyright notices to module code
-2015-11-27 Artur Malabarba <bruce.connor.am@gmail.com>
+ Put them in the usual format for GNU Emacs copyright notices.
- * lisp/isearch.el: Ensure we still support `isearch-new-word'
+2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
- (isearch-new-regexp-function): Define variable.
- (isearch-new-word): Define as an obsolete alias. (Bug#22018)
+ Rename emacs_module.h to module.h
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+ * src/module.h: Rename from src/emacs_module.h.
+ All uses changed.
- Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+2015-11-19 Juanma Barranquero <lekktu@gmail.com>
-2015-11-27 Lee Bochicchio <lboc.home@gmail.com>
+ * src/module.c (Fmodule_load): Remove unused vars `doc_name', `args'
- * test/automated/abbrev-tests.el: Define more tests
+ * src/lread.c (Fload): Remove unused variable `size'
- (abbrev-table-name-test, kill-all-abbrevs-test)
- (clear-abbrev-table-test): New tests.
+2015-11-19 Alan Mackenzie <acm@muc.de>
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+ src/keyboard.c (pre-command-hook): Fix typo in doc string: "pre" -> "post".
- Add module tests for wrong-type-argument
+2015-11-18 Dmitry Gutov <dgutov@yandex.ru>
- * modules/mod-test/test.el (mod-test-sum-test): Add tests for
- wrong-type-argument.
+ Prioritize looking inside vc-parent-buffer over log-view-mode fallback
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+ * lisp/vc/vc.el (vc-deduce-fileset): Prioritize looking inside
+ vc-parent-buffer over log-view-mode fallback (bug#21955).
- Improve handling of signals and 'throw' in modules
+2015-11-18 Alan Mackenzie <acm@muc.de>
- * src/emacs-module.c: Add commentary explaining how to write
- functions in this file.
- (module_make_global_ref, module_free_global_ref)
- (module_non_local_exit_signal, module_non_local_exit_throw)
- (module_make_function, module_funcall, module_intern)
- (module_type_of, module_is_not_nil, module_eq)
- (module_extract_integer, module_make_integer)
- (module_extract_float, module_make_float)
- (module_copy_string_contents, module_make_string)
- (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
- (module_get_user_finalizer, module_set_user_finalizer)
- (module_vec_set, module_vec_get, module_vec_size)
- (module_non_local_exit_signal_1, module_non_local_exit_throw_1):
- Do nothing and return with failure indication immediately, if some
- previous module call signaled an error or wants to throw. See
- http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02133.html
- for the relevant discussions.
+ lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+2015-11-18 Ken Brown <kbrown@cornell.edu>
- Add ':version' tag to 'checkdoc-package-keywords-flag'
+ * configure.ac (LIBMODULES): Don’t define on Cygwin
- * lisp/emacs-lisp/checkdoc.el (checkdoc-package-keywords-flag):
- Add a ':version' tag.
+2015-11-18 Eli Zaretskii <eliz@gnu.org>
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+ Fix MS-Windows build --with-modules
- Improve documentation of 'eval-buffer' and 'eval-region'
+ * src/module.c: Reformat copyright commentary.
+ (module_vec_get): Use explicit cast to size_t to avoid compiler
+ warning in 32-bit builds.
+ (check_main_thread) [WINDOWSNT]: Fix letter-case in Windows APIs.
+ Compare thread IDs directly, as GetThreadId is not available
+ before Windows Vista.
+ (check_main_thread) [WINDOWSNT]: Duplicate the thread handle
+ without using APIs and constants not available on XP and older
+ systems. Obtain and store the thread ID as well.
- * src/lread.c (Feval_buffer, Feval_region): Doc fixes. (Bug#22023)
+2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
+ Philipp Stephani <phst@google.com>
- * doc/lispref/eval.texi (Eval): Mention narrowing to clarify
- "accessible portion of buffer".
+ Add dynamic module test and helper script
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+ Add 'modhelp.py' script (python2) to automate module testing and
+ module generation.
- Unbreak the Cygwin w32 build
+ To build and test all modules in the modules/ dir
+ $ ./modhelp.py test
- * src/emacs.c (main): Call w32_init_main_thread in the Cygwin w32
- build as well. Reported by Andy Moreton <andrewjmoreton@gmail.com>.
+ To generate a module from template code (good starting point)
+ $ ./modhelp init mynewtestmodule
-2015-11-27 Eli Zaretskii <eliz@gnu.org>
+ See the script -h option for more documentation.
- Improve commentary in character-fold.el
+ * modules/modhelp.py: New module helper script.
+ * modules/mod-test/Makefile: New file. Makefile for the test module.
+ * modules/mod-test/mod-test.c: New file. Test module source file.
+ * modules/mod-test/test.el: New file. ert test suite for the test module.
+ * modules/.gitignore: New file. Local .gitignore file.
- * lisp/character-fold.el (character-fold-to-regexp): Move detailed
- description from commit log message to comments. (Bug#22019)
+2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
-2015-11-26 Alan Mackenzie <acm@muc.de>
+ Make 'Fload' look for modules
- Byte Compiler: generate code to adjust stack count after call to `signal'.
+ 'Fload' can now load dynamic modules. This also makes 'require' work.
- Corrects change from earlier today.
+ * src/lread.c:
+ (suffix_p): New function.
+ (Fload): Use 'suffix_p'. Call 'Fmodule_load' when we try to load a file
+ with a module suffix.
+ (syms_of_lread): Append module suffix to 'Vload_suffixes'.
- * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): supply the current value of
- `byte-compile--for-effect' as argument to `byte-compile-form'.
+2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
+ Philipp Stephani <phst@google.com>
-2015-11-26 Eli Zaretskii <eliz@gnu.org>
+ Add dynamic module module support
- Improve commentary of prepare_to_modify_buffer_1
+ * configure.ac: Add '--with-modules' option. Conditionally add
+ dynlib.o and module.o to the list of objects. Add any system
+ specific flags to the linker flags to support dynamic libraries.
+ * m4/ax_gcc_var_attribute.m4: Add autoconf extension to test gcc
+ attributes.
+ * src/Makefile.in: Conditionally add module objects and linker flags.
+ * src/alloc.c (garbage_collect_1): protect module local values from
+ GC.
+ * src/lisp.h: Add 'module_init' and 'syms_of_module' prototypes.
+ * src/emacs_module.h: New header file included by modules. Public
+ module API.
+ * src/module.c: New module implementation file.
- * src/insdel.c (prepare_to_modify_buffer_1): Mention in commentary
- that this function runs Lisp. Suggested by Richard Stallman
- <rms@gnu.org>.
+2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
-2015-11-26 Phillip Lord <phillip.lord@russet.org.uk>
+ Add new User Pointer (User_Ptr) type
- Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+ * src/lisp.h: Add new Lisp_Misc_User_Ptr type.
+ (XUSER_PTR): New User_Ptr accessor.
+ * src/alloc.c (make_user_ptr): New function.
+ (mark_object, sweep_misc): Handle Lisp_Misc_User_Ptr.
+ * src/data.c (Ftype_of): Return 'user-ptr' for user pointer.
+ (Fuser-ptrp): New user pointer type predicate function.
+ (syms_of_data): New 'user-ptrp', 'user-ptr' symbol. New 'user-ptrp'
+ subr.
+ * src/print.c (print_object): Add printer for User_Ptr type.
-2015-11-26 Phillip Lord <phillip.lord@russet.org.uk>
+2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
+ Philipp Stephani <phst@google.com>
- Fix regression after merge.
+ Add portable layer for dynamic loading
- * src/undo.c (prepare_record): Remove call to run_undoable_change.
+ * src/dynlib.h: New file.
+ * src/dynlib.c: New file.
-2015-11-26 Phillip Lord <phillip.lord@russet.org.uk>
+2015-11-18 Philipp Stephani <phst@google.com>
- After delete, record point location in undo.
+ Add catch-all & no-signal version of PUSH_HANDLER
- Addresses Bug #21968.
+ Ground work for modules. Add a non-signaling version of PUSH_HANDLER and
+ a new "catch-all" handler type.
- * lisp/simple.el (undo-auto--add-boundary): Clean up code to
- better support intercalating calls.
- * src/keyboard.c, src/keyboard.h (command_loop_1): Store value of
- point and current buffer before each command.
- * src/undo.c (record_point): Now only record the point.
- * src/undo.c (prepare_record): Functionality removed form
- record_point.
- * src/undo.c (record_delete): Check if point needs recording.
- * src/undo.c (undo-boundary): Record value of point before each
- boundary.
- * test/automated/simple-test.el: New tests.
+ * src/eval.c (init_handler, push_handler, push_handler_nosignal): New
+ functions.
+ * src/fns.c (hash_remove_from_table): Expose function public.
+ * src/lisp.h: New handler type, define macro to push_handler call.
- Conflicts:
- src/undo.c
+2015-11-18 Ken Brown <kbrown@cornell.edu>
-2015-11-26 Eli Zaretskii <eliz@gnu.org>
+ Silence byte-compiler warning
- Fix compiler warnings in w32.c
+ * lisp/server.el (server-process-filter): Silence byte-compiler
+ warning.
- * src/w32.c (sys_socket): In case of error, use -1 as return
- value, not INVALID_SOCKET, which causes compiler warnings.
- (maybe_load_unicows_dll): Cast the return value of GetProcAddress
- to the appropriate function signature, to avoid compiler errors.
- Reported by Andy Moreton <andrewjmoreton@gmail.com>. (Bug#21953)
+2015-11-18 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-26 Dmitry Gutov <dgutov@yandex.ru>
+ Quote symbols in docstrings using `'
- Check if the file exists on disk before producing the revert diff
+ Be more systematic about quoting symbols `like-this' rather than
+ `like-this or 'like-this' in docstrings. This follows up Artur
+ Malabarba's email in:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01647.html
- * lisp/vc/vc-dispatcher.el (vc-buffer-sync): Check if the file
- exists on disk (bug#20558).
+2015-11-18 Peder O. Klingenberg <peder@klingenberg.no>
-2015-11-26 Alan Mackenzie <acm@muc.de>
+ Fix savegames in dunnet
- Byte compiler: on setq with an odd number of arguments, generate a `signal'
+ * lisp/play/dunnet.el (dun-rot13): Use the standard rot13-region instead
+ of separate implementation.
- * lisp/emacs-lisp/cconv.el (cconv-convert): Don't transform `setq' form when
- it has an odd number of arguments, to allow bytecomp to handle the error.
+2015-11-18 Artur Malabarba <bruce.connor.am@gmail.com>
- * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): In a `setq' form with an
- odd number of arguments, generate a `signal' instead of the normal code.
+ * lisp/emacs-lisp/package.el (package--with-response-buffer):
-2015-11-26 Dmitry Gutov <dgutov@yandex.ru>
+ Ensure we're at the start of the buffer before searching for
+ the end of headers.
- Use find-tag-default for xref-backend-identifier-at-point
+2015-11-17 Xue Fuqiao <xfq.free@gmail.com>
- * lisp/progmodes/etags.el (find-tag-tag)
- (tags-completion-at-point-function): Extract common code as
- find-tag--default.
- (xref-backend-identifier-at-point): Define in terms of the new
- function.
+ * admin/release-process: Improve wording.
-2015-11-26 Paul Eggert <eggert@cs.ucla.edu>
+2015-11-17 Paul Eggert <eggert@cs.ucla.edu>
- * src/undo.c (record_property_change): Remove now-unused local.
+ Fix docstring quoting problems with ‘ '’
-2015-11-25 Phillip Lord <phillip.lord@russet.org.uk>
+ Problem reported by Artur Malabarba in:
+ http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01513.html
+ Most of these fixes are to documentation; many involve fixing
+ longstanding quoting glitches that are independent of the
+ recent substitute-command-keys changes. The changes to code are:
+ * lisp/cedet/mode-local.el (mode-local-augment-function-help)
+ (describe-mode-local-overload):
+ Substitute docstrings before displaying them.
+ * lisp/emacs-lisp/cl-macs.el (cl--transform-lambda):
+ Quote the generated docstring for later substitution.
- run_undoable_changes now called from insdel.
+2015-11-17 Eli Zaretskii <eliz@gnu.org>
- The original calls from inside undo.c are not always at a safe position
- to call lisp, as they originate in varied positions within insdel.c.
- Calling them directly from prepare_to_modify_buffer_1 ensures that they
- are always run at the same point.
+ Improve configure --help text for wide ints
- * src/undo.c (run_undoable_changes,syms_of_undo): Remove function
- and symbol used.
- * src/insdel.c (run_undoable_changes): Add function and symbol.
+ * configure.ac (wide-int): Clarify user-level advantages and
+ disadvantages.
-2015-11-25 Eli Zaretskii <eliz@gnu.org>
+2015-11-17 Stephen Leake <stephen_leake@stephe-leake.org>
- Improve and update documentation of search commands
+ Improve doc string
- * doc/emacs/search.texi (Lax Search): Renamed from "Search Case";
- all references changed. Move the description of lax-whitespace
- here. Add description of the new character folding features and
- additional customizable options.
- (Isearch Yank): Move before "Error in Search".
- (Basic Isearch): Improve wording. Add index entries. Add short
- description of how to abandon search, making this subsection a
- complete introduction to search basics.
- (Repeat Isearch): Add index entries. Describe additional
- customizable options. Describe mouse clicks.
- (Isearch Yank): Add index entries. Describe mouse-2 click in echo
- area. Describe more customizable options.
- (Error in Isearch): Add index entries.
- (Special Isearch): Move actual description of some isearch
- commands to other sections, leaving here just the summary of the
- commands. Add command that toggles character folding. Describe
- commands, like "C-h C-h", that were previously omitted for some
- reason.
- (Not Exiting Isearch): Describe search-exit-option. Add index
- entries.
- (Word Search): Describe eww-search-word and eww-search-prefix.
- (Symbol Search): Add index entries.
- (Regexp Search): Describe regexp-search-ring-max.
- (Replacement and Lax Matches): Renamed from "Replacement and
- Case"; all references changed. Describe lax-whitespace matching
- in replace commands and related options. Describe character
- folding in replace commands and related options.
- (Query Replace): Describe query-replace-from-to-separator and the
- new history features. Add index entries for highlighted text.
- Describe query-replace-skip-read-only. Describe more keys
- accepted by query-replace.
- (Other Repeating Search): More index entries for Occur. Describe
- list-matching-lines-default-context-lines.
- (Search Customizations): New section, documents customizable
- options that were not documented until now.
- * doc/emacs/glossary.texi (Glossary): Add "Case Folding" and
- "Character Folding".
+ * lisp/progmodes/xref.el (xref-backend-references): Improve doc string.
- * etc/NEWS: Move search- and replace-related entries to a single
- parent section.
+2015-11-17 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/replace.el (query-replace-show-replacement): Doc fix.
- * lisp/isearch.el (search-nonincremental-instead)
- (isearch-hide-immediately): Doc fixes.
+ eval_sub followed dangling pointer when debugging
-2015-11-25 Katsumi Yamaoka <yamaoka@jpl.org>
+ Problem reported by Pip Cet (Bug#21245).
+ This bug could occur in eval_sub if the C compiler reused
+ storage associated with the ‘argvals’ local after ‘argvals’
+ went out of scope, and if the Elisp debugger stopped on Elisp
+ function exit and accessed ‘argvals’. It could also occur if
+ a variadic function was called with so many arguments (over
+ 2048 args on x86-64) that SAFE_ALLOCA_LISP called malloc, then
+ SAFE_FREE freed the arguments, then the memory manager used
+ the storage for other purposes, then the debugger accessed the
+ arguments.
+ * src/eval.c (eval_sub): Declare ‘argvals’ at top level of
+ function body. Simplify local decls.
+ When allocating args via SAFE_ALLOCA, call
+ debugger before invoking SAFE_FREE, as the debugger needs
+ access to the args.
+ (eval_sub, apply_lambda): Rework to avoid need for
+ set_backtrace_debug_on_exit hack. This is cleaner,
+ and should work better with buggy custom debuggers.
- Remove nnml-retrieve-groups that is unnecessary and somewhat problematic
+2015-11-16 Daiki Ueno <ueno@gnu.org>
- * lisp/gnus/nnml.el (nnml-retrieve-groups): Remove. See:
- <http://thread.gmane.org/gmane.emacs.gnus.general/86308> and
- <http://thread.gmane.org/gmane.emacs.gnus.general/86321>
+ * lisp/image-mode.el: Support encrypted file
-2015-11-25 Paul Eggert <eggert@cs.ucla.edu>
+ (image-toggle-display-image): Read content from the buffer instead
+ of the file, if the buffer holds a decrypted data. (Bug#21870)
- Fix module_format_fun_env when dynlib_addr fails
+2015-11-16 Paul Eggert <eggert@cs.ucla.edu>
- * src/emacs-module.c (module_format_fun_env):
- exprintf doesn’t support %p, so use %x. Reported by Eli Zaretskii in:
- http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02122.html
+ ELF unexec: align section header
-2015-11-25 Paul Eggert <eggert@cs.ucla.edu>
+ This ports the recent unexelf.c changes to Fedora x86-64
+ when configured with GCC’s -fsanitize=undefined option.
+ * src/unexelf.c (unexec): Align new_data2_size to a multiple
+ of ElfW (Shdr)’s alignment, so that NEW_SECTION_H returns a
+ pointer aligned appropriately for its type.
- Disambiguate variable help a bit better
+2015-11-16 Andreas Schwab <schwab@linux-m68k.org>
- * lisp/help-fns.el (describe-variable): Quote the
- variable’s value if it is a symbol other than t or nil.
- See: T.V Raman in:
- http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg02147.html
+ Do more checks on bytecode objects (Bug#21929)
-2015-11-25 Dmitry Gutov <dgutov@yandex.ru>
+ * src/eval.c (funcall_lambda): Check size of compiled function
+ object.
+ (Ffetch_bytecode): Likewise.
- Pass SVN commit message through log-edit-extract-headers
+2015-11-16 Johan Bockgård <bojohan@gnu.org>
- * lisp/vc/vc-svn.el (vc-svn-checkin): Pass COMMENT through
- log-edit-extract-headers (bug#18954).
+ pcase.el: Fix edebugging of backquoted cons patterns
-2015-11-24 Alan Mackenzie <acm@muc.de>
+ * lisp/emacs-lisp/pcase.el (pcase-QPAT): Fix edebugging of backquoted
+ cons patterns. (Bug#21920)
- CC Mode: Eliminate compiler warning messages.
+2015-11-16 Paul Eggert <eggert@cs.ucla.edu>
- * lisp/progmodes/cc-mode.el (top level): remove compile time declaration of
- `font-lock-syntactic-keywords' (which CC Mode doesn't use).
- * lisp/progmodes/cc-awk.el (awk-mode-syntax-table)
- (c-awk-set-syntax-table-properties): Clarify comments about
- `font-lock-syntactic-keywords'.
+ Improve fix for regex reentrancy abort
- * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-load): Create a dummy declaration
- of this before the real (interpreted) one, to satisfy the byte compiler.
+ Suggested by Stefan Monnier (Bug#21688).
+ * src/syntax.c (update_syntax_table_forward):
+ Remove recently-added PROPERTIZE arg, and assume it is true.
+ All callers changed.
+ * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
+ Invoke update_syntax_table directly.
-2015-11-24 Simen Heggestøyl <simenheg@gmail.com>
+2015-11-16 Artur Malabarba <bruce.connor.am@gmail.com>
- Extend the test suite for json.el
+ * lisp/faces.el (faces--attribute-at-point): Use `face-list-p'
- * lisp/json.el (json-plist-p): Clarify docstring.
+ * lisp/emacs-lisp/package.el (package--with-response-buffer): Missing require
- * test/automated/json-tests.el (json-tests--with-temp-buffer): New
- macro.
- (test-json-join, test-json-alist-p)
- (test-json-plist-p, test-json-advance, test-json-peek)
- (test-json-pop, test-json-skip-whitespace)
- (test-json-read-keyword, test-json-encode-keyword)
- (test-json-read-number, test-json-encode-number)
- (test-json-read-escaped-char, test-json-read-string)
- (test-json-encode-string, test-json-encode-key)
- (test-json-new-object, test-json-add-to-object)
- (test-json-read-object, test-json-encode-list)
- (test-json-read-array, test-json-encode-array)
- (test-json-read, test-json-read-from-string)
- (test-json-encode): New tests.
- (json-read-simple-alist): Merged into `test-json-read-object'.
- (json-encode-string-with-special-chars): Merged into
- `test-json-encode-string'.
- (json-read-string-with-special-chars): Split into
- `test-json-encode-string' and `test-json-read-from-string'.
+ * lisp/emacs-lisp/nadvice.el (add-function): Escape quote
-2015-11-24 Anders Lindgren <andlind@gmail.com>
+2015-11-15 Vasily Korytov <vasily.korytov@yahoo.com>
- Fixed bug#18283: Enable applescript in NextStep.
+ Recognize .rbw and .pyw files (bug#18753)
- * nextstep/templates/Info.plist.in: Set NSAppleScriptEnabled to YES.
+ * lisp/progmodes/python.el (auto-mode-alist):
+ Recognize .pyw files.
-2015-11-24 Eli Zaretskii <eliz@gnu.org>
+ * lisp/progmodes/ruby-mode.el (auto-mode-alist):
+ Recognize .rbw files.
- Allow completion on dynamic module files in load-library
+2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
- * lisp/files.el (load-library): Bind completion-ignored-extensions
- to nil, to allow completion on dynamic modules typed as file
- names. Reported by Andy Moreton <andrewjmoreton@gmail.com>.
+ Fix ruby-mode auto-mode-alist entry
-2015-11-24 Alan Mackenzie <acm@muc.de>
+ * lisp/progmodes/ruby-mode.el (auto-mode-alist): Add grouping
+ around the extensions (bug#21257).
- CC Mode: eliminate almost all byte compilation warnings
+2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
- * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-noruntime-functions): Remove.
- (cc-require): Remove the crude hack that saved and restored
- byte-compile-noruntime-functions.
- (cc-conditional-require, cc-conditional-require-after-load): New macros.
+ Fix etags completion near eob
- * lisp/progmodes/cc-defs.el (top level): Reformulate code which loaded
- cc-fix.el using the new macros in cc-bytecomp.el.
+ * lisp/progmodes/etags.el (tags-completion-at-point-function):
+ Use `goto-char', to avoid the end-of-buffer error (bug#20061).
- * lisp/progmodes/cc-langs.el (c++-template-syntax-table)
- (c-no-parens-syntax-table): Add extra "(eval ..)"s around "'(lambda ..)"
- forms to remove the superflous quotes.
+2015-11-15 Alan Mackenzie <acm@muc.de>
-2015-11-24 Eli Zaretskii <eliz@gnu.org>
+ De-pessimize detection of C++ member initialization lists.
- Add one more mod-test test
+ list/progmodes/cc-engine.el (c-back-over-list-of-member-inits): New macro.
+ (c-back-over-member-initializers): Reformulate such that c-at-toplevel-p
+ is only called when a construct "looks right" rather than continually.
+ (c-guess-basic-syntax, CASE 5R): Add a check for the mode being C++ Mode.
- * modules/mod-test/test.el (mod-test-sum-test): Test the error
- signaled when the function is invoked with a wrong number of
- arguments.
+2015-11-15 Stephen Leake <stephen_leake@stephe-leake.org>
-2015-11-24 Philipp Stephani <phst@google.com>
+ Improve a few doc strings, comments
- * modules/mod-test/mod-test.c (Fmod_test_sum): Verify there are 2 args.
+ * lisp/cedet/cedet-global.el (cedet-gnu-global-expand-filename):
+ * lisp/cedet/ede/locate.el (ede-locate-base):
+ * lisp/cedet/semantic/symref.el (semantic-symref-calculate-rootdir):
+ * src/fns.c (Fdelq): Improve doc string.
-2015-11-24 Eli Zaretskii <eliz@gnu.org>
+ * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions): Add FIXME.
- Implement dynlib_addr for MS-Windows
+2015-11-15 Anders Lindgren <andlind@gmail.com>
- * src/dynlib.c [WINDOWSNT]: Include w32common.h.
- <g_b_init_get_module_handle_ex> [WINDOWSNT]: New static variable.
- (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS)
- (GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT) [WINDOWSNT]: Define
- if undefined.
- (dynlib_reset_last_error): Reset g_b_init_get_module_handle_ex to
- zero.
- (dynlib_addr) [WINDOWSNT]: Non-trivial implementation to report
- the full file name of the module for a given address.
+ Enhance NSTRACE (trace output for NextStep).
-2015-11-24 Alan Mackenzie <acm@muc.de>
+ Trace can be disabled for groups of functions. By default, event
+ functions and functions that generate lots of output are disabled.
- Merge branch 'emacs-25' of git.sv.gnu.org:/srv/git/emacs into emacs-25
+ Trace output of Objective-C functions now use the "[ClassName
+ parameter:]" form.
-2015-11-24 Alan Mackenzie <acm@muc.de>
+ * src/nsterm.h (NSTRACE_ALL_GROUPS, NSTRACE_GROUP_EVENTS)
+ (NSTRACE_GROUP_UPDATES, NSTRACE_GROUP_FRINGE, NSTRACE_GROUP_COLOR)
+ (NSTRACE_GROUP_GLYPHS, NSTRACE_GROUP_FOCUS): New macros,
+ controlling in which function groups trace should be active.
+ (NSTRACE_WHEN): Support for silencing a function, this also
+ silencing all called functions.
+ (NSTRACE_UNSILENCE): New macro, used to re-enable trace.
+ (NSTRACE_FMT_FSTYPE, NSTRACE_ARG_FSTYPE): New macros, used to
+ print the full screen state in NSTRACE functions.
- Squashed commit of the following:
+ * src/nsterm.m (nstrace_depth, nstrace_num): Made volatile as they
+ can be accessed from multiple threads.
+ (nstrace_enabled_global): New variable, when FALSE, trace is
+ silenced.
+ (nstrace_restore_global_trace_state): New function, used to
+ restore `nstrace_enabled_global' at end of block.
+ ([EmacsView setFrame:], [EmacsWindow setFrame:display:])
+ ([EmacsWindow setFrame:display:animation:])
+ ([EmacsWindow setFrameTopLeftPoint:]): New functions, print trace
+ and call corresponding super function.
+ (Many functions): Add or enhance trace output.
- commit e1ecf76585bef2eb87995f7a7f92cc12003a6f70
- Author: Alan Mackenzie <acm@muc.de>
- Date: Tue Nov 24 16:50:09 2015 +0000
+ * src/nsimage.m (ns_image_from_file): Enhanced trace output.
- Byte compile: minor amendments.
+ * src/nsfns.m (x_set_tool_bar_lines): Add trace output.
- * lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment):
- add a comment to explain the binding of variables around a subsidiary
- compilation.
- (byte-compile-new-defuns): Amend the doc string.
+ * src/nsmenu.m ([EmacsToolbar setVisible:]): New function, print trace
+ and call corresponding super function.
- commit c537bfed1dda1593d218956ff00c6105a3ff0316
- Author: Alan Mackenzie <acm@muc.de>
- Date: Sat Nov 21 18:43:57 2015 +0000
+2015-11-15 Anders Lindgren <andlind@gmail.com>
- Byte compiler: fix spurious warnings "might not be defined at runtime".
+ Fixed a toolbar related issue on OS X.
- Also initialize byte-compile-noruntime-functions between runs.
+ Earlier, when toggling the tool-bar in a maximized frame, the
+ frame size didn't match the number of text lines, leaving an
+ unused area at the bottom of the frame.
- * lisp/emacs-lisp/bytecomp.el (byte-compile-new-defuns): New variable.
- (byte-compile-initial-macro-environment): For eval-when-compile: bind
- byte-compile-unresolved-functions and byte-compile-new-defuns around
- byte-compile-top-level, to prevent spurious entries being made.
- (byte-compile-warn-about-unresolved-functions): Check whether function is
- in byte-compile-new-defuns before emitting a warning about it.
- (byte-compile-from-buffer): Initialize new variable and
- byte-compile-noruntime-functions to nil.
- (byte-compile-file-form-require): record all new functions defined by a
- `require' in byte-compile-new-defuns.
- (byte-compile-file-form-defmumble): record the new alias in
- byte-compile-new-defuns.
+ * nsfns.m (x_set_tool_bar_lines): Exit maximized and full height
+ fullscreen modes when tool bar is disabled.
-2015-11-24 Eli Zaretskii <eliz@gnu.org>
+2015-11-15 Anders Lindgren <andlind@gmail.com>
- Fix crash at startup related to GC of font entities
+ Fixed OS X 10.6.8 build issue (bug#21862).
- * src/font.h (GC_FONT_SPEC_P, GC_FONT_ENTITY_P)
- (GC_FONT_OBJECT_P, GC_XFONT_SPEC, GC_XFONT_ENTITY)
- (GC_XFONT_OBJECT): New macros, for use in garbage collector.
- * src/alloc.c (compact_font_cache_entry, compact_font_caches):
- Don't ifdef away font cache compaction on NT_GUI, as the problems
- which led to that seem to have been solved.
- (compact_font_cache_entry): Use GC_FONT_SPEC_P, GC_XFONT_SPEC,
- GC_XFONT_ENTITY, and GC_XFONT_OBJECT, instead of their non-GC_
- cousins. (Bug#21999)
+ * src/nsterm.h (EmacsView): Add missing declarations.
+ * src/nsterm.m ([EmacsView windowDidBecomeKey]): New method, like
+ the standard method but without the notification parameter.
+ Intended to be used for direct calls.
+ ([EmacsView windowDidEnterFullScreen]): Call the non-notification
+ version of `windowDidBecomeKey'. Made the notification method call
+ the non-notification method instead of the vice versa.
+ (NSWindowDidEnterFullScreenNotification): Deleted, no longer
+ needed.
-2015-11-24 Alan Mackenzie <acm@muc.de>
+2015-11-15 Artur Malabarba <bruce.connor.am@gmail.com>
- Byte compile: Output an error, not a warning, for odd number of args to setq
+ * lisp/faces.el (faces--attribute-at-point): Fix an issue
- * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Amend.
+ Previous code would signal an error when the face at point was
+ a manually built list of attributes such as '(:foregroud "white").
-2015-11-24 Ken Raeburn <raeburn@raeburn.org>
+ * test/automated/faces-tests.el (faces--test-color-at-point): Add a test
- Fix kbd_buffer iteration loop in readable_events
+2015-11-15 Paul Eggert <eggert@cs.ucla.edu>
- * src/keyboard.c (readable_events): Wrap the event pointer back to the
- start of the kbd_buffer array inside the top of the loop instead of
- right before checking the loop condition, since kbd_fetch_ptr and
- kbd_store_ptr point past the end of the array to mean that element 0
- is next. (bug#21935)
+ Fix regex abort when it tries to reenter itself
-2015-11-24 Paul Eggert <eggert@cs.ucla.edu>
+ Problem reported by Ken Raeburn.
+ Solution suggested by Stefan Monnier (Bug#21688).
+ * src/regex.c (re_match_2_internal):
+ Use new _FAST functions to avoid regex code reentering itself.
+ * src/syntax.c (update_syntax_table_forward): New arg PROPERTIZE.
+ All callers changed.
+ * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST)
+ (UPDATE_SYNTAX_TABLE_FAST): New inline functions.
- Improve text-quoting-style doc again
+2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
- * doc/lispref/help.texi (Keys in Documentation):
- Omit overkill discussion of ‘setq’. Mention Emacs versions
- where ‘grave’ style was standard.
+ Improve Ruby 1.9-style keyword keys highlighting
-2015-11-24 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/progmodes/ruby-mode.el (ruby-font-lock-keywords):
+ Handle required keyword arguments (bug#21367).
+ And highlight the colon together with the name.
- Improve text-quoting-style doc
+2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
-2015-11-24 Paul Eggert <eggert@cs.ucla.edu>
+ Unify the absolutely equal xref-backend-references implementations
- Simplify module_make_function
+ * lisp/progmodes/elisp-mode.el (xref-backend-references):
+ Remove.
- * src/emacs-module.c (module_make_function):
- Simplify by calling build_unibyte_string.
+ * lisp/progmodes/etags.el (xref-backend-references):
+ Remove.
-2015-11-24 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/progmodes/xref.el (xref-backend-references):
+ Define the default implementation.
- Port better to FreeBSD’s dlfunc vs dlsym
+2015-11-14 Dmitry Gutov <dgutov@yandex.ru>
- This avoids warnings when converting between void * and
- function pointers, which strict C11 does not allow.
- * configure.ac (dlfunc): Check for existence.
- * src/dynlib.c (dlfunc) [!HAVE_DLFUNC]: New macro.
- (dynlib_func): New function.
- * src/dynlib.h (dynlib_function_ptr, dynlib_func): New decls.
- * src/emacs-module.c (Fmodule_load): Use dynlib_func, not
- dynlib_sym, for function pointers.
+ Update project-find-regexp for the new xref API
-2015-11-24 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/progmodes/project.el (project--read-regexp):
+ Update to use the new xref API methods.
- Simplify use of emacs_finalizer_function type
+ * lisp/progmodes/xref.el (xref-find-backend): Autoload.
- * src/emacs-module.h (emacs_finalizer_function):
- Now EMACS_NOEXCEPT. All users simplified to omit EMACS_NOEXCEPT.
- (struct emacs_env_25): Use emacs_finalizer_function where applicable.
+2015-11-14 Dmitry Gutov <dgutov@yandex.ru>
-2015-11-24 Paul Eggert <eggert@cs.ucla.edu>
+ Fix replacing a match with a shorter string
- module_format_fun_env fixes
+ In effect, partially reverting fe973fc.
- * src/doprnt.c (exprintf) [HAVE_MODULES]: Also define in this case.
- * src/emacs-module.c (module_format_fun_env):
- Convert path and sym to UTF-8.
- Don’t use VLAs, as the C11 standard says they’re optional,
- and anyway they can cause core dumps with large allocations.
- Use exprintf rather than snprintf, as exprintf handles arbitrarily
- long strings. Simplify the code a bit.
+ * lisp/progmodes/xref.el (xref-query-replace): Store the end
+ of each match as a marker again, instead of length.
+ (xref--query-replace-1): Update accordingly.
-2015-11-23 Dmitry Gutov <dgutov@yandex.ru>
+2015-11-14 Artur Malabarba <bruce.connor.am@gmail.com>
- Don't use package-user-dir in elisp-library-roots if it's not bound
+ * lisp/progmodes/xref.el (xref-pop-marker-stack): Downgrade errors
- * lisp/progmodes/elisp-mode.el (elisp-library-roots): Don't
- use package-user-dir if it's not bound (bug#19759).
+ Signal user-errors instead.
-2015-11-23 Anders Lindgren <andlind@gmail.com>
+2015-11-14 Eli Zaretskii <eliz@gnu.org>
- New visible-bell for NextStep (OS X El Capitan compatible).
+ Document 'describe-symbol'
- Instead of inverting a rectangle in the middle of the frame, use
- the standard NextStep image "caution", represented using an
- warning sign with an exclamation mark. (Bug#21662)
+ * doc/emacs/help.texi (Help Summary): Mention "C-h o".
+ (Name Help): Document "C-h o" and describe-symbol.
- Implemented based on a suggestion drafted by Mustafa Kocaturk.
+ * lisp/help-fns.el (describe-symbol): Doc fix.
- * src/nsterm.m (EmacsBell): New class for managing the caution
- image. Support multiple active bells, the image is removed once
- all bells have timed out.
- (ns_timeout): Removed, no longer used.
- (ns_ring_bell): Reimplemented to use EmacsBell.
+2015-11-14 Paul Eggert <eggert@cs.ucla.edu>
-2015-11-23 Johan Bockgård <bojohan@gnu.org>
+ Change test name to avoid spellcheck issue.
- * lisp/emacs-lisp/nadvice.el (add-function): Fix debug spec.
+2015-11-14 Eli Zaretskii <eliz@gnu.org>
- (remove-function): Ditto. (Bug#20376)
+ Avoid signaling an error in 'describe-symbol'
-2015-11-23 Mark Oteiza <mvoteiza@udel.edu>
+ * lisp/help-fns.el (describe-symbol): Avoid errors when the symbol
+ exists as a function/variable/face/etc., but is undocumented.
- * lisp/leim/quail/tamil-dvorak.el: Add necessary escapes.
+ * test/automated/help-fns.el (help-fns-test-describe-symbol): New
+ test.
-2015-11-23 Eli Zaretskii <eliz@gnu.org>
+2015-11-14 Eli Zaretskii <eliz@gnu.org>
- Improve how non-ASCII strings are accepted from modules
+ * INSTALL (--with-cairo): Document this new configure option.
- * src/emacs-module.c (module_make_function, module_make_string):
- Build a unibyte Lisp string and then decode it by UTF-8, instead
- of building a multibyte string without decoding. This is more
- tolerant to deviations from UTF-8.
+2015-11-14 Eli Zaretskii <eliz@gnu.org>
-2015-11-23 Paul Eggert <eggert@cs.ucla.edu>
+ Document that GNU Make >= 3.81 is required to build Emacs
- Port recent module changes to pickier compilers
+ * doc/lispref/internals.texi (Building Emacs): Document that GNU
+ Make 3.81 or later is now required.
- * src/emacs-module.c (module_make_function)
- (module_make_string): Add casts to fix pointer signedness issues.
+2015-11-14 Eli Zaretskii <eliz@gnu.org>
-2015-11-23 Philipp Stephani <phst@google.com>
+ * CONTRIBUTE (Branches): Improve wording for back-ported commits.
- Fix how strings are accepted from modules
+2015-11-13 l3thal <kwhite@gnu.org>
- * src/emacs-module.c (module_make_function, module_make_string): Use
- make_multibyte_string.
- (module_copy_string_contents): Encode before reading the byte
- size. Return false if and only if an error occurred.
+ Merge branch 'erc-async-reconnect' into emacs-25
-2015-11-23 Eli Zaretskii <eliz@gnu.org>
+ Reconnect asynchronously.
- Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
+2015-11-11 Alan Mackenzie <acm@muc.de>
-2015-11-23 Shakthi Kannan <shakthimaan@gmail.com>
+ First commit to scratch/follow. Make Isearch work with Follow Mode, etc.
- Add the tamil-dvorak input method
+ doc/lispref/window.texi (Basic Windows): Add paragraph defining "Group of
+ Windows" and new @defun selected-window-group.
+ (Window Start and End): Describe new &optional parameter GROUP and
+ ...-group-function for window-start, window-end, set-window-start, and
+ pos-visible-in-window-p.
+ (Textual Scrolling) Describe the same for recenter.
+ doc/lispref/positions.texi (Screen Lines): Describe the same for
+ move-to-window-line.
- * lisp/leim/quail/tamil-dvorak.el: New file. (Bug#21768)
+ src/window.c (Fwindow_start, Fwindow_end, Fset_window_start)
+ (Fpos_visible_in_window_p, Frecenter, Fmove_to_window_line): To each, add ar
+ new optional parameter "group". At the beginning of each, check whether the
+ corresponding ...-group-function is set to a function, and if so execute this
+ function in place of the normal processing.
+ (syms_of_window): Define symbols for the six new variables below.
+ (window-start-group-function, window-end-group-function)
+ (set-window-start-group-function, recenter-group-function)
+ (pos-visible-in-window-p-group-function, move-to-window-line-group-function):
+ New permanent local buffer local variables.
+ src/keyboard.c (Fposn_at_point): Add extra parameter in call to
+ Fpos_visible_in_window_p.
- * etc/NEWS: Mention the new input method.
+ lisp/window.el (selected-window-group-function): New permanent local buffer
+ local variable.
+ (selected-window-group): New function.
-2015-11-23 Martin Rudalics <rudalics@gmx.at>
+ lisp/follow.el (follow-mode): Set the ...-group-function variables at mode
+ enable, kill them at mode disable. Add/remove follow-after-change to/from
+ after-change-functions.
+ (follow-start-end-invalid): New variable.
+ (follow-redisplay): Manipulate follow-start-end-invalid.
+ (follow-after-change, follow-window-start, follow-window-end)
+ (follow-set-window-start, follow-pos-visible-in-window-p)
+ (follow-move-to-window-line, follow-sit-for): New functions.
- Move setting FRAME_WINDOW_SIZES_CHANGED to resize_frame_windows.
+ lisp/isearch.el (isearch-call-message): New macro.
+ (isearch-update, with-isearch-suspended, isearch-del-char)
+ (isearch-search-and-update, isearch-ring-adjust): Invoke above new macro.
+ (with-isearch-suspended): Rearrange code such that isearch-call-message is
+ invoked before point is moved.
+ (isearch-message): Add comment about where point must be at function call.
+ (isearch-search): Remove call to isearch-message.
+ (isearch-lazy-highlight-window-group): New variable.
+ (isearch-lazy-highlight-new-loop): Unconditionally start idle timer. Move
+ the battery of tests to ...
+ (isearch-lazy-highlight-maybe-new-loop): New function, started by idle timer.
+ Note: (sit-for 0) is still called.
+ (isearch-lazy-highlight-update): Check membership of
+ isearch-lazy-highlight-window-group. Don't set the `window' overlay
+ property.
+ (isearch-update, isearch-done, isearch-string-out-of-window)
+ (isearch-back-into-window, isearch-lazy-highlight-maybe-new-loop)
+ (isearch-lazy-highlight-search, isearch-lazy-highlight-update)
+ (isearch-lazy-highlight-update): Call the six amended primitives (see
+ src/window.c above) with the new `group' argument set to t, to cooperate
+ with Follow Mode.
- * src/frame.c (adjust_frame_size): Don't set
- FRAME_WINDOW_SIZES_CHANGED here ...
- * src/window.c (resize_frame_windows): ... but here, as suggested
- by Stefan Monnier. Also remove some dead code along the way.
+2015-12-27 Lars Ingebrigtsen <larsi@gnus.org>
-2015-11-23 Alan Mackenzie <acm@muc.de>
+ * shr.el (shr-descend): Allow using lambdas in external functions.
- * etc/NEWS (Incompatible Lisp Changes): Also `setf' needs an even # of args.
+2015-12-25 Stefan Monnier <monnier@iro.umontreal.ca>
-2015-11-23 Alan Mackenzie <acm@muc.de>
+ * admin/gitmerge.el: Tweaks that seemed necessary
- Signal an error when `setf' gets an odd number of arguments.
+ * admin/gitmerge.el (gitmerge-skip-regexp): Remove "sync".
+ (gitmerge-maybe-resume): Provide explicit empty commit message.
- * lisp/emacs-lisp/gv.el (setf): Amend.
+2015-12-25 Łukasz Stelmach <stlman@poczta.fm> (tiny change)
-2015-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
+ Use a different port for TLS erc
- * lisp/emacs-lisp/smie.el (smie-backward-sexp): Handle BOB better.
+ * lisp/erc/erc.el (erc-default-port-tls): New variable
+ (bug#19497).
+ * lisp/erc/erc.el (erc-tls): Use it.
-2015-11-23 Alan Mackenzie <acm@muc.de>
+2015-12-25 Alain Schneble <a.s@realize.ch>
- * etc/NEWS (Incompatible Lisp Changes): Document new restriction on `setq'.
+ Make relative URL parsing and resolution consistent with RFC 3986 (bug#22044)
-2015-11-23 Alan Mackenzie <acm@muc.de>
+ * test/lisp/url/url-parse-tests.el: Add tests covering url-generic-parse-url.
+ * test/lisp/url/url-expand-tests.el: Add tests covering url-expand-file-name.
+ * lisp/url/url-parse.el (url-generic-parse-url): Keep empty fragment
+ information in URL-struct.
+ * lisp/url/url-parse.el (url-path-and-query): Do not artificially turn empty
+ path and query into nil path and query, respectively.
+ * lisp/url/url-expand.el (url-expander-remove-relative-links): Do not turn
+ empty path into an absolute ("/") path.
+ * lisp/url/url-expand.el (url-expand-file-name): Properly resolve
+ fragment-only URIs. Do not just return them unchanged.
+ * lisp/url/url-expand.el (url-default-expander): An empty path in the relative
+ reference URI should not drop the last segment.
- Expunge occurrences of `setq' with an odd number of arguments.
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/apropos.el (apropos-documentation):
- * lisp/obsolete/complete.el (PC-include-file-all-completions):
- * lisp/progmodes/compile.el (compilation-goto-locus):
- * lisp/vc/vc-cvs.el (vc-cvs-parse-root): (twice)
- Insert missing nil at end of `setq' forms.
+ Let url use default file modes when copying files
- * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-autoload): Remove an
- erroneous trailing variable name from a setq, thus allowing a compilation
- properly to track functions not defined at runtime.
+ * lisp/url/url-handlers.el (url-copy-file): Use default file
+ modes when copying files (bug#11400).
-2015-11-23 John Wiegley <johnw@newartisans.com>
+2015-12-25 Devon Sean McCullough <Emacs-Hacker2012@jovi.net>
- Add a note about a questionable use of bool in xdisp.c
+ Doc fix for url-http
-2015-11-23 Alan Mackenzie <acm@muc.de>
+ * lisp/url/url-http.el (url-http): Document better return values
+ (bug#13187) (tiny change)
- Issue a warning from the byte compiler on a malformed `setq' form.
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- Partly fixes bug#20241.
- * lisp/emacs-lisp/bytecomp.el (byte-compile-setq): Issue a warning when a
- `setq' form with an odd number of arguments is compiled.
+ * eww.el (eww-display-html): Support <button> tags (bug#20485).
-2015-11-23 Alan Mackenzie <acm@muc.de>
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- Don't let cconv_convert insert a nil argument into a `setq' form.
+ Made ffap-url-p a defun instead of a defsubst
- Fixes bug#21983.
- * lisp/emacs-lisp/cconv.el (cconv-convert): Don't silently insert a nil last
- argument into a `setq' when there're an odd number of args. This enables the
- byte compiler to issue a message in this case.
+ * lisp/ffap.el (ffap-url-p): Change from defsusbt to defun,
+ since there doesn't seem to be much of a reason for it to be a
+ defsubst (bug#18203).
-2015-11-23 Alan Mackenzie <acm@muc.de>
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- Signal an error when `setq' has an odd number of arguments. Fixes bug#20241.
+ Add a command to view files in the browser to dired
- * src/eval.c (Fsetq): Signal an error on an odd number of arguments.
- (syms_of_eval): Add a DEFSYM for Qsetq.
+ * lisp/dired.el (dired-mode-map): Add the `W' command
+ (bug#18810).
-2015-11-23 Martin Rudalics <rudalics@gmx.at>
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- * doc/lispref/windows.texi (Window Sizes): Fix indices and references.
+ Allow http://user:pass@foo/ URLs again
- * src/frame.c (adjust_frame_size): Set FRAME_WINDOW_SIZES_CHANGED (Bug#21975).
+ * lisp/url/url-auth.el (url-basic-auth): Allow explicit
+ user/passwords in URLs (bug#19046).
-2015-11-23 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- Add EUDC BBDB 3 entry in NEWS
+ * eww.el (eww-mode-map): Fix command name of eww-toggle-colors.
- * NEWS: Mention EUDC BBDB backend support for BBDB 3.
+2015-12-25 Samer Masterson <samer@samertm.com>
-2015-11-23 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+ Autoload url-insert-buffer-contents
- Improve EUDC to BBDB 3 export
+ * lisp/url/url-handlers.el: Add autoload cookie so that
+ `package-list-packages' doesn't bug out (bug#21927) (tiny change)
- * lisp/net/eudc-vars.el (eudc-ldap-bbdb-conversion-alist): Change phone
- entry to single item. Add company conversion.
- * lisp/net/eudc-export.el (eudc-bbdbify-company): New function.
- (bbdb-parse-phone): Declare function.
- (eudc-bbdbify-phone): Add BBDB 3 support.
- (Bug#21971)
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
-2015-11-23 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+ Allow toggling colors in eww
- Add BBDB 3 support for EUDC export
+ * doc/misc/eww.texi (Basics): Mention "C".
- * lisp/net/eudc.el: Add bbdb-version defvar.
- (eudc--using-bbdb-3-or-newer-p): New function.
- * lisp/net/eudc-export.el (eudc-create-bbdb-record): Add support for
- bbdb-create-internal argument list changes introduced in BBDB 3.
- * lisp/net/eudcb-bbdb.el: Remove bbdb-version defvar.
- (eudc-bbdb-field): Call eudc--using-bbdb-3-or-newer-p.
- (Bug#21971)
+ * lisp/net/eww.el (eww-toggle-colors): New command and keystroke.
-2015-11-22 Eli Zaretskii <eliz@gnu.org>
+ * lisp/net/shr.el (shr-use-colors): New variable.
+ (shr-colorize-region): Use it.
- Allow loading modules by 'load-file'
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- * src/lread.c (Fload): Call 'unbind_to' with 'Fmodule_load' as the
- 2nd arg, to avoid the "binding stack not balanced" error.
- (syms_of_lread) <module-file-suffix>: New Lisp variable.
+ Follow meta refresh tags in eww
- * lisp/files.el (module-file-suffix): Declare.
- (load-file): Remove 'module-file-suffix' from
- 'completion-ignored-extensions', to allow completion on modules.
+ * eww.el (eww-tag-meta): Follow meta refresh tags (bug#22234).
- * etc/NEWS: Mention 'module-file-suffix'.
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
-2015-11-22 Eli Zaretskii <eliz@gnu.org>
+ More eww file name coding fixes
- Fix unoptimized builds
+ * eww.el (eww-decode-url-file-name): Use the base coding
+ system to check for encodability.
- * src/lisp.h (XTYPE): Move before XSYMBOL, to fix unoptimized
- builds.
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
-2015-11-22 Dmitry Gutov <dgutov@yandex.ru>
+ Always save eww history
- Work around the asynchronous-empty-diff problem
+ * eww.el (eww-setup-buffer): Always save history, even when
+ called from outside the eww buffer (bug#19638).
- * lisp/vc/vc-rcs.el (vc-rcs-diff):
- * lisp/vc/vc-mtn.el (vc-mtn-diff):
- * lisp/vc/vc-hg.el (vc-hg-diff):
- * lisp/vc/vc-git.el (vc-git-diff): Ignore the ASYNC argument,
- do a synchronous process call (bug#21969).
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
-2015-11-22 Karl Fogel <kfogel@red-bean.com>
+ Default web pages to right-to-left
- Finish excising electric indent from `open-line'
+ * eww.el (eww-mode): Most web pages are left-to-right, so make
+ that the default (bug#19801).
- * lisp/simple.el (open-line): Remove INTERACTIVE argument.
+ * shr.el (shr-tag-html): Respect "dir" attributes
+ (left-to-right, right-to-left).
- * test/automated/simple-test.el (open-line-indent, open-line-hook):
- Adjust accordingly.
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- This change finishes what my commit of Thu Nov 19 17:32:37 2015 -0600
- (git commit c59353896) started. It turns out that having INTERACTIVE
- cause `post-self-insert-hook' to run (via `newline') meant `open-line'
- still had the electric indent behavior, as `post-self-insert-hook'
- normally contains `electric-indent-post-self-insert-function' ever
- since `electric-indent-mode' has been on by default. Tracing the code
- change in `open-line' is mildly twisty, because Artur Malabarba's
- earliest two commits of 24 Oct 2015 first removed the `interactive'
- form entirely (git commit 6939896e2) and then restored it with the new
- extra "p" already added (git commit bd4f04f86), such that there is no
- single-commit diff in which one sees the second "p" appear. Thus this
- change is effectively a reversion of parts of each of those commits.
+ Make toggling checkboxes work again
- This could close bug#21884, at least until further discussion.
+ * eww.el (eww-update-field): Make toggling checkboxes work
+ again (bug#21881).
-2015-11-22 Dmitry Gutov <dgutov@yandex.ru>
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- Adhere closer to the "implicit tag name" definition
+ Don't store cookies with empty names
- * lisp/progmodes/etags.el (etags-tags-completion-table):
- Adhere closer to the "implicit tag name" definition. Simplify
- the regexp. Search for the explicit tag name first, and when
- not found, search locally for the implicit one. (Bug#21934)
+ * lisp/url/url-cookie.el (url-cookie-store): Refuse to store
+ cookies with empty names (bug#21936).
-2015-11-22 Stefan Monnier <monnier@iro.umontreal.ca>
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- Unrevert most of regexp reentrancy abort patch
+ * shr.el (shr-descend): Stop rendering before we run out of
+ specpdl room (bug#22117).
- The problem was in:
- * src/syntax.c (update_syntax_table_forward): Propertize even when truncated
- which is hence not unreverted.
- The rest is:
- * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
- (UPDATE_SYNTAX_TABLE_FAST): Re-introduce.
- All callers in regex.c changed back to the _FAST versions.
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- * test/automated/message-mode-tests.el: Tweak the test to rely on auto
- propertization in backward-sexp.
+ Use cl-reduce, not reduce.
-2015-11-21 Paul Eggert <eggert@cs.ucla.edu>
+2015-12-25 Lars Ingebrigtsen <larsi@gnus.org>
- Revert regexp reentrancy abort patch
+ Allow several <tbody> tags in shr
- Although the patch does fix Bug#21688 and prevents a core dump,
- it also makes the message-mode-propertize test fail; see:
- http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01667.html
- Perhaps someone else can come up with a better fix some day.
- * src/syntax.c (update_syntax_table_forward):
- Propertize even when truncated.
- * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
- (UPDATE_SYNTAX_TABLE_FAST): Remove.
- All callers changed back to the non-_FAST versions.
+ * shr.el (shr-table-body): New function to find the real body
+ of a table.
+ (shr-tag-table): Use it to render several <tbody> tags in a
+ table (bug#22170).
-2015-11-21 Paul Eggert <eggert@cs.ucla.edu>
+2015-12-24 Lars Ingebrigtsen <larsi@gnus.org>
- Add a few safety checks when ENABLE_CHECKING
+ Make prettier unique file names in eww
- This was motivated by the recent addition of module code,
- which added some ENABLE_CHECKING-enabled checks that are
- useful elsewhere too.
- * src/alloc.c (compact_font_cache_entry):
- * src/fns.c (sweep_weak_table):
- * src/lread.c (oblookup):
- Use gc_asize rather than doing it by hand.
- * src/emacs-module.c (module_make_global_ref)
- (module_free_global_ref, module_vec_size):
- Omit assertions that lisp.h now checks.
- * src/lisp.h (XFASTINT, ASIZE): In functional implementations,
- check that the result is nonnegative. Use eassume, as this
- info can help a bit when optimizing production code.
- (XSYMBOL) [!USE_LSB_TAG]: Assert that argument is a symbol,
- to be consistent with the USE_LSB_TAG case.
- (gc_asize): New function, when ASIZE is needed in the gc.
- (gc_aset): Use it.
- (HASH_TABLE_P): Move definition up, so that it can be used ...
- (XHASH_TABLE): ... here, to assert that the arg is a hash table.
+ (eww-make-unique-file-name): Make unique file names by making
+ files like foo(2).jpg instead of foo(1)(2).jpg.
-2015-11-21 Eli Zaretskii <eliz@gnu.org>
+2015-12-24 Lars Ingebrigtsen <larsi@gnus.org>
- Simplify recording of main thread's ID on MS-Windows
+ Decode hex-encoded URLs before using them as file names
- * src/w32term.c (w32_initialize):
- * src/w32console.c (initialize_w32_display):
- * src/w32fns.c (globals_of_w32fns): Don't record the main thread
- ID independently for each type of session (GUI, TTY, batch).
- * src/w32term.c (w32_init_main_thread): New function, records the
- main thread's thread ID.
- * src/w32term.h: Add prototype for w32_init_main_thread.
- * src/emacs.c (main) [WINDOWSNT]: Call w32_init_main_thread.
+ * eww.el (eww-decode-url-file-name): New function.
+ (eww-download-callback): Use it to decode file names before
+ saving them.
- * src/emacs-module.c [WINDOWSNT]: Rename main_thread_id to
- main_thread, for consistency with other threading libraries. All
- users changed. Include w32term.h.
- (check_main_thread) [WINDOWSNT]: Simplify the test: no need to
- make sure the main thread is alive, as we hold a handle on it
- opened by w32_init_main_thread.
- (module_init) [WINDOWSNT]: Reuse the thread ID recorded by
- w32_init_main_thread, instead of calling the requisite APIs once
- more.
+2015-12-24 Ashish SHUKLA <ashish.is@lostca.se> (tiny change)
-2015-11-21 Mark Oteiza <mvoteiza@udel.edu>
+ * doc/misc/emacs-gnutls.texi (Help For Users): Document FreeBSD bundle.
+ * lisp/net/gnutls.el (gnutls-trustfiles): Add FreeBSD cert bundle.
- Backport: Fix issue where a new tempfile was created every refresh
+2015-12-24 Lars Ingebrigtsen <larsi@gnus.org>
- * lisp/mpc.el (mpc-format): Leave dir as relative path
+ Allow overriding shr functions from eww
-2015-11-21 Eli Zaretskii <eliz@gnu.org>
+ * eww.el (eww-display-html): Allow overriding elements in
+ `shr-external-rendering-functions'.
- Call 'window-size-change-functions' for mini-windows
+2015-12-24 Lars Ingebrigtsen <larsi@gnus.org>
- * src/window.c (grow_mini_window, shrink_mini_window): Set the
- frame's 'window_sizes_changed' flag.
- * src/xdisp.c (redisplay_internal): Call the hooks on
- 'window-size-change-functions' if the call to 'echo_area_display'
- sets the frame's 'window_sizes_changed' flag.
- (syms_of_xdisp) <window-size-change-functions>:
- Update doc string to indicate the mini-window resizes trigger a
- call to the hooks, and don't promise that will happen "before
- redisplay". (Bug#19576, Bug#21333)
+ Ignore invalid SVG images
- * doc/lispref/windows.texi (Window Hooks): Update the description
- of 'window-size-change-functions'.
+ * shr.el (shr-tag-svg): Ignore SVG images that have no width
+ or height, because these can't be displayed by ImageMagick,
+ anyway.
-2015-11-21 Eli Zaretskii <eliz@gnu.org>
+2015-12-24 Lars Ingebrigtsen <larsi@gnus.org>
- Improve documentation of dynamic modules
+ shr table rendering fix
- * src/fns.c (Frequire): Doc fix to include the dynamic module
- support.
- * src/lread.c (Fload, Vload_suffixes): Doc fixes to include the
- dynamic module support.
- (Fload): Treat the module suffix the same as '*.el' and '*.elc'
- wrt the MUST-SUFFIX argument.
+ * shr.el (shr-tag-table): Allow rendering body-less tables
+ that have headers.
- * etc/NEWS: Expand documentation of dynamically loaded modules.
+2015-12-22 Sam Steingold <sds@gnu.org>
-2015-11-21 Philipp Stephani <phst@google.com> (tiny change)
+ clipboard should still work even if interprogram-* is disabled
- Initial documentation for dynamic modules
+ (clipboard-yank): When `interprogram-cut-function' is nil,
+ bind it to `gui-selection-value' - the default value.
+ (clipboard-kill-region, clipboard-kill-ring-save): When
+ `interprogram-paste-function' is nil, bind it to `gui-select-text' -
+ the default value.
- * etc/NEWS: Mention the new support for dynamically loaded modules.
+2015-12-18 Phillip Lord <phillip.lord@russet.org.uk>
-2015-11-21 Dmitry Gutov <dgutov@yandex.ru>
+ Fix bootstrap issue with dired-loaddefs
- Add xref--etags-backend to xref-backing-functions using add-hook
+ * lisp/dired.el: Autoloads for secondary files loaded optionally.
- * lisp/progmodes/xref.el (xref-backend-functions): Move the
- default value into a separate `add-hook' call (bug#21964).
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
- * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
- Don't declare the xref-backend-functions variable.
- It doesn't make any difference.
+ dired generate autoloads to non-versioned file.
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/dired.el: Remove autoloads.
+ * lisp/Makefile.in: Add dired to autogenel.
+ * lisp/dired-aux.el,lisp/dired-x.el: Update file local.
+ * test/lisp/dired-tests.el: Add new test.
- Fix double-decrement bug when freeing global refs
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
- * src/emacs-module.c (module_free_global_ref): Add a FIXME
- comment about error reporting. Fix a recently-introduced typo
- that double-decremented the refcount.
+ eieio generate autoloads to non-versioned file.
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/Makefile.in: eieio-loaddefs add to autogenel.
+ * lisp/emacs-lisp/eieio.el,lisp/emacs-lisp/eieio-core.el:
+ Remove autoloads.
+ * lisp/emacs-lisp/eieio-compat.el,lisp/emacs-lisp/eieio-custom.el,
+ lisp/emacs-lisp/eieio-opt.el: Update file local.
+ * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: New test.
- Declare emacs_module_init in the module API
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
- * src/emacs-module.h (emacs_module_init): New decl.
- Without it, GCC might complain about a module that defines
- emacs_module_init without using it. This also checks the
- API better.
+ htmlfontify generate autoload to non-versioned file.
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/Makefile.in: Add htmlfontity-loaddefs to autogenel.
+ * lisp/hfy-cmap.el: Update file local.
+ * lisp/htmlfontify.el: Remove autoloads, add require.
+ * test/lisp/htmlfontify-tests.el: Test autoload functionality.
- Fix module test to use ptrdiff_t nargs too
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
- * modules/mod-test/mod-test.c (Fmod_test_return_t)
- (Fmod_test_sum, Fmod_test_signal, Fmod_test_throw)
- (Fmod_test_non_local_exit_funcall, Fmod_test_globref_make)
- (Fmod_test_string_a_to_b, Fmod_test_userptr_make)
- (Fmod_test_userptr_get, Fmod_test_vector_fill)
- (Fmod_test_vector_eq): Arg counts are ptrdiff_t, not int.
- (finalizer): Remove; no longer used.
+ ibuffer generate autoloads to non-versioned file.
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/Makefile.in: Add ibuffer-loaddefs to autogenel.
+ * lisp/ibuf-ext.el: Update file local.
+ * lisp/ibuffer.el: Remove autoloads and add a require.
+ * test/lisp/ibuffer-tests.el: Test that autoload is working.
- Fix reindent-introduced typo in module code
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
- * src/emacs-module.c (MODULE_SETJMP_1): Fix typo that I
- introduced while reindenting the code earlier, and add a
- comment explaining the unusual use of do-while here.
+ rmail generate autoloads to non-versioned file.
-2015-11-20 Anders Lindgren <andlind@gmail.com>
+ * lisp/Makefile.in: Add rmail-loaddefs.el to autogenel.
+ * lisp/mail/rmail.el: Remove autoloads, add require.
+ * lisp/mail/rmailedit.el,lisp/mail/rmailkwd.el,
+ lisp/mail/rmailmm.el,lisp/mail/rmailmsc.el,
+ lisp/mail/rmailsort.el,lisp/mail/rmailsum.el,
+ lisp/mail/undigest.el: Update file-local.
+ * test/lisp/mail/rmail-tests.el:
- Fixed bug#19576: `write-file' saves wrong buffer.
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
- If a function on the hook `window-size-change-functions' doesn't
- restore the current buffer, functions that save and restore the
- current window configuration (like `y-or-no-p') could silently
- change the current buffer. When `write-file' asked the user
- confirmation to overwrite a file, `y-or-no-p' changed the current
- buffer, and the wrong buffer was saved to the file.
+ Add autoload-force target.
- * lisp/follow.el (follow-windows-start-end): Call `select-frame'
- using the `norecord' parameter.
- (follow-window-size-change): Restore current buffer. Call
- `select-frame' using the `norecord' parameter. Cleanup.
+ * lisp/Makefile.in (autoload-force): New target.
-2015-11-20 John Wiegley <johnw@newartisans.com>
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
- Correct a documentation error in frames.texi
+ ps-print generate autoloads to non versioned file.
-2015-11-20 Stephen Leake <stephen_leake@stephe-leake.org>
+ * lisp/Makefile.in: Add ps-print-loaddefs.el to autogen list.
+ * lisp/ps-print.el: Remove autoloads.
+ * lisp/ps-mule.el: Update file-local.
+ * test/lisp/ps-print-tests.el: Test autoload functionality.
- * lisp/cedet/mode-local.el: Delete obsolete comment
+2015-12-17 Phillip Lord <phillip.lord@russet.org.uk>
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ reftex generate autoloads to non versioned file.
- Module function arg counts are ptrdiff_t, not int
+ * lisp/Makefile.in: Add reftex-loaddefs to autogen files
+ * lisp/textmodes/reftex.el: Remove autoloads.
+ * lisp/textmodes/reftex-auc.el,lisp/textmodes/reftex-cite.el,
+ lisp/textmodes/reftex-dcr.el,lisp/textmodes/reftex-global.el,
+ lisp/textmodes/reftex-index.el,lisp/textmodes/reftex-parse.el,
+ lisp/textmodes/reftex-ref.el,lisp/textmodes/reftex-sel.el,
+ lisp/textmodes/reftex-toc.el: Update autoload file-local.
+ * test/lisp/textmodes/reftex-tests.el: Add test of an autoloaded
+ function.
- * src/emacs-module.c (struct module_fun_env)
- (module_make_function, module_funcall, Fmodule_call):
- * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
- Use ptrdiff_t, not int, for arg counts.
- * src/emacs-module.c (module_make_function): Don’t bother
- checking arity against MOST_POSITIVE_FIXNUM, as that’s
- unnecessary here. Make the checking clearer by negating it.
- (module_make_function, Fmodule_call): No need to use xzalloc
- since the storage doesn’t need to be cleared.
- (module_funcall): Don’t use VLA, since C11 doesn’t guarantee support
- for it, and many implementations are buggy with large VLAs anyway.
- Use SAFE_ALLOCA_LISP instead.
- (module_vec_set): Don’t crash if i < 0.
- (module_vec_get): Don’t crash if i < MOST_NEGATIVE_FIXNUM.
- (module_vec_set, module_vec_get): Do fixnum checks only when
- i is out of array bounds, for efficiency in the usual case.
- (Fmodule_load): Simplify fixnum range check.
- (Fmodule_call): Simplify arity check. Use xnmalloc to detect
- integer overflow in array allocation size.
+2015-12-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp/calculator.el (calculator-define-key): Undo last change
+
+ Make map argument mandatory instead (bug#22106).
+ (calculator-add-operators): Pass the argument that's not optional any more.
-2015-11-20 Eli Zaretskii <eliz@gnu.org>
+2015-12-03 Glenn Morris <rgm@gnu.org>
- Minor improvements in module test
+ * Makefile.in: Avoid duplication.
- * modules/mod-test/mod-test.c: Include stdlib.h, to avoid warnings
- about missing prototype of malloc.
- * modules/mod-test/Makefile (CFLAGS): Add -std=gnu99, to avoid
- compiler warnings.
+ (have-tests): New rule.
+ (check, check-maybe): Use it.
-2015-11-20 Eli Zaretskii <eliz@gnu.org>
+2015-12-02 Phillip Lord <phillip.lord@russet.org.uk>
- Improve MS-Windows implementation in dynlib.c
+ make check unconditional, check-maybe top-level.
- * src/dynlib.c [WINDOWSNT]: Include errno.h, lisp.h, and w32.h.
- No need to include windows.h, as w32.h already does that.
- <dynlib_last_err>: New static variable.
- (dynlib_reset_last_error): New function.
- (dynlib_open): Convert forward slashes to backslashes. Convert
- file names from UTF-8 to either UTF-16 or the current ANSI
- codepage, and call either LoadLibraryW or LoadLibraryA. If the
- argument is NULL, return a handle to the main module, like
- 'dlopen' does. Record the error, if any, for use by dynlib_error.
- (dynlib_sym): Check the handle for validity. Record the error, if
- any, for use by dynlib_error.
- (dynlib_error): Call w32_strerror to produce the error string, and
- zero out the last error code, like dlerror does.
- (dynlib_close): Check the handle for validity. Record the error,
- if any, for use by dynlib_error. Don't call FreeLibrary with a
- handle for the main module.
- * src/w32.c (globals_of_w32): Call dynlib_reset_last_error.
+ * Makefile.in: Add check-maybe target.
+ * test/Makefile.in: Restore unconditional behaviour to make check.
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+2015-12-01 Phillip Lord <phillip.lord@russet.org.uk>
- Include-file tweaks for modules
+ Tests now support out-of-source-build.
- * src/dynlib.c, src/emacs-module.c: Include <config.h> first.
- * src/dynlib.h: Do not include config.h.
- It’s every .c file’s responsibility to include config.h first.
- * src/emacs-module.c: Include emacs-module.h immediately after
- config.h, to test that emacs-module.h doesn’t depend on
- include files other than config.h.
+ * tests/Makefile.in,test/make-test-deps.emacs-lisp: Remove assumptions
+ about current working directory.
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+2015-12-01 Artur Malabarba <bruce.connor.am@gmail.com>
- Simplify push_handler and profile its malloc
+ * lisp/emacs-lisp/let-alist.el: Now an Elpa :core package
- * src/lisp.h (PUSH_HANDLER): Remove.
- All callers changed to use push_handler directly.
- * src/eval.c (internal_condition_case)
- (internal_condition_case_1, internal_condition_case_2)
- (internal_condition_case_n):
- Use same pattern as for other invokers of push_handler.
- (push_handler, push_handler_nosignal): Use call-by-value
- instead of call-by-reference. All uses changed.
- (push_handler): Simplify by rewriting in terms of
- push_handler_nosignal.
- (push_handler_nosignal): Profile any newly allocated memory.
+2015-11-30 Phillip Lord <phillip.lord@russet.org.uk>
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ Improve documentation and clean up.
- * src/emacs-module.h: Include stddef.h, not stdlib.h.
+ * test/Makefile.in: Improve documentation, use EMACS variable
+ correctly, and clean up makefile rules.
-2015-11-20 Juanma Barranquero <lekktu@gmail.com>
+2015-11-30 Phillip Lord <phillip.lord@russet.org.uk>
- Discover repository version in linked worktrees (bug#21930)
+ Update file headers for name change.
- * lisp/version.el (emacs-repository--version-git-1): Do not assume
- HEAD is at .git/HEAD, it can also be at .git/worktrees/<branch>/HEAD.
- (emacs-repository-get-version): Grok linked worktrees when EXTERNAL
- is nil too.
+ * (test/src/decompress-tests.el, test/src/alloc-tests.el): Update headers.
-2015-11-20 Juri Linkov <juri@linkov.net>
+2015-11-30 Phillip Lord <phillip.lord@russet.org.uk>
- * lisp/replace.el (occur-regexp-descr): New function.
- (occur-1, occur-engine): Use it.
+ Test files renamed to new scheme.
- * lisp/isearch.el (isearch-occur): Propertize regexp with
- isearch-string and isearch-regexp-function-descr for
- occur-regexp-descr to display the correct description
- message in the header (bug#21176, bug#21180).
+ * (finalizer-tests.el): Now renamed alloc-tests.el
+ * (zlib-tests.el): Now renamed decompress-tests.el.
-2015-11-20 Karl Fogel <kfogel@red-bean.com>
+2015-11-30 Phillip Lord <phillip.lord@russet.org.uk>
- Revert `open-line' electric-indent sensitivity
+ Tests now depend on source files
- * lisp/simple.el (open-line): Remove electric indent code.
- (electric-indent-just-newline): Don't declare.
+ * test/Makefile.in: Include dependences from tests to source files.
+ * test/make-test-deps.emacs-lisp: New file
+ * .gitignore: Ignore generated make include file
- * test/automated/simple-test.el (open-line-indent): Adjust test.
+2015-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
- This partly reverts Artur Malabarba's change that added electric
- indent sensitivity to `open-line' (Oct 24 22:26:27 2015 +0100, git
- commit bd4f04f86), and adjusts a new test he added right afterwards
- (Sat Oct 24 23:43:06 2015 +0100, git commit 207f235e3) accordingly.
- However, the new INTERACTIVE argument to `open-line', which he also
- added in the first commit, is not reverted here.
+ * lisp/progmodes/which-func.el: Improve disabling the mode
- See the thread "Questioning the new behavior of `open-line'." on the
- Emacs Devel mailing list, and in particular this message:
+ Use lexical-binding.
+ (which-func-modes, which-func-non-auto-modes, which-func-maxout)
+ (which-func, which-func-format): Remove redundant :group arg.
+ (which-func-try-to-enable): New function.
+ (which-func-ff-hook, which-function-mode): Use it.
+ (mode-line-misc-info): Add ourselves here instead of in bindings.el.
+ * lisp/bindings.el (mode-line-misc-info): Remove which-func-mode entry.
- From: Artur Malabarba
- Subject: Re: Questioning the new behavior of `open-line'.
- To: Karl Fogel
- Cc: David Kastrup, Pierpaolo Bernardi, emacs-devel
- Date: Wed, 18 Nov 2015 21:03:58 +0000
- Message-ID: \
- <CAAdUY-KN06pvCMy5bt3+Buk3yeKjf6n9iB2FaSTTOPpCqPwyhA@mail.gmail.com>
+2015-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
- https://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01707.html
+ * lisp/calculator.el (calculator-define-key): Silence warning
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ ...about unknown calculator-mode-map.
- Omit unnecessary clear in Fmodule_load
+2015-11-29 Eli Barzilay <eli@barzilay.org>
- * src/emacs-module.c (Fmodule_load):
- Simplify and avoid unnecessary initialization of priv member to 0.
+ * lisp/calculator.el: more improvements and bugfixes.
- * src/emacs-module.c: (module_vec_set, module_vec_get, module_vec_size)
+ - Mark `calculator-paste-decimals' as obsolete. (It wasn't having an
+ effect anyway.)
-2015-11-20 Paul Eggert <eggert@cs.ucla.edu>
+ - Simplify `calculator-number-to-string' by throwing most of the work
+ onto `number-to-string', leaving just some tweaks for decimal inputs.
+ This leads to some minor changes, for example, pasting "1x1" in hex
+ mode would warn that "x" is ignored and result in "11" (and it wasn't
+ done in decimal mode), whereas now it just ignores everything from the
+ "x" and on and result in a "1" just like in decimal input mode. Also,
+ overflows are left for `number-to-string' to deal with.
- Prefer signed integer types in module code
+ - `calculator-paste' is very simple as a result.
- Generally speaking, at the C level the Emacs source code prefers
- signed types like ‘ptrdiff_t’ to unsigned types like ‘size_t’,
- partly to avoid the usual signedness confusion when comparing values.
- Change the module API to follow this convention.
- Use ‘int’ for small values that can’t exceed INT_MAX.
- * modules/mod-test/mod-test.c (Fmod_test_globref_make)
- (Fmod_test_string_a_to_b, Fmod_test_vector_fill)
- (Fmod_test_vector_eq):
- * src/emacs-module.c (struct emacs_value_frame)
- (module_make_global_ref, module_free_global_ref)
- (module_copy_string_contents, module_make_string)
- (module_vec_set, module_vec_get, module_vec_size):
- * src/emacs-module.h (struct emacs_runtime, struct emacs_env_25):
- * src/lread.c (suffix_p):
- Prefer signed to unsigned integer types.
+ - Extend the simplified `calculator-paste': with a prefix argument it
+ pastes a string as if the characters were entered. This can be used
+ to reduce expressions, but note that it's a simple literal operation,
+ so precedence can be messed, a number can be paster while entering a
+ number, spaces and newlines matter, etc.
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+ - Fix a minor bug where "e+" in hex mode wouldn't use "+" as an
+ operator.
- Omit ‘const’ on locals
+ - Fix a bug in `calculator-put-value': avoid grouping in the display
+ that is used to construct `calculator-curnum'. This would trigger
+ when pasting or getting a value from a register in some radix mode
+ with a large enough value. Another fix: make the output radix equal
+ the input one, otherwise numbers could be converted twice.
- Remove ‘const’ qualifier from locals that were newly added.
- We don’t normally bother declaring locals with ‘const’ even
- though they are not modified, for the same reason we don’t
- bother declaring them with ‘register’ even though their
- addresses are not taken; the advantage in compile-time
- checking isn’t worth the loss of readability.
- * modules/mod-test/mod-test.c (Fmod_test_non_local_exit_funcall)
- (Fmod_test_vector_fill, Fmod_test_vector_eq):
- * src/emacs-module.c (MODULE_SETJMP_1)
- (module_make_global_ref, module_free_global_ref)
- (module_non_local_exit_get, module_make_function)
- (module_extract_integer, module_extract_float)
- (module_get_user_ptr, module_set_user_ptr)
- (module_get_user_finalizer, module_set_user_finalizer)
- (module_vec_get, Fmodule_call)
- (module_non_local_exit_signal_1)
- (module_non_local_exit_throw_1, lisp_to_value)
- (finalize_storage, allocate_emacs_value, mark_modules)
- (module_handle_signal, module_handle_throw)
- (module_format_fun_env):
- * src/eval.c (push_handler, push_handler_nosignal)
- (init_handler):
- * src/lread.c (suffix_p):
- Omit unnecessary ‘const’.
+2015-11-29 Eli Barzilay <eli@barzilay.org>
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/calculator.el: Re-do key bindings.
- Prefer intmax_t to int64_t in module code
+ Use a helper function that arranges a parent keymap that binds alternate
+ case keys so if some letter key is unbound and it's un/shifted version
+ is, it will get used. This makes the global-map trickery unnecessary.
- * modules/mod-test/mod-test.c (sum, Fmod_test_sum):
- * src/emacs-module.c (module_extract_integer)
- (module_make_integer):
- * src/emacs-module.h (struct emacs_env_25):
- Prefer intmax_t to int64_t. This doesn’t change the generated
- code on any of the machines Emacs currently ports to, but it’s
- at least in theory more future-proof as C99 doesn’t guarantee
- that int64_t exists.
+ Also switch to passing strings that name keys through `kbd'.
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+2015-11-29 Eli Barzilay <eli@barzilay.org>
- Rename module.c to emacs-module.c, etc.
+ * lisp/calculator.el: improve radix modes
- * src/emacs-module.c: Rename from src/module.c.
- * src/emacs-module.h: Rename from src/module.h.
- All uses changed.
+ Fix prompt for some input radix with decimal output (eg, "BD" instead of
+ the incorrect "B="); also, some minor docstring tweaks for these.
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+2015-11-29 Eli Barzilay <eli@barzilay.org>
- Fix minor module problems found by static checking
+ * lisp/calculator.el: better reading of register names
- * src/dynlib.c (dynlib_close): #ifdef out for now, as it’s not used.
- * src/eval.c, src/lisp.h (lisp_eval_depth): Now static.
- * src/emacs-module.c (Fmodule_load): Fix pointer signedness bug.
- (Fmodule_call): Tell GCC that the default case is unreachable.
+ Use `register-read-with-preview' with a dynamically bound
+ `register-alist' and a proper preview function to read register names.
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+2015-11-29 Eli Barzilay <eli@barzilay.org>
- Style fixes for indenting etc. in module code
+ * lisp/calculator.el: General improvements
- This is mostly indenting and spacing changes. Also, remove
- some unnecessary static decls instead of bothering to reindent them.
- * src/emacs-module.h (EMACS_EXTERN_C_BEGIN): Remove, and do this inline,
- as most other Emacs files do for this sort of thing.
+ Use things like `when', `unless', and `push'.
-2015-11-19 Eli Zaretskii <eliz@gnu.org>
+ Improve `calculator-last-input' so it doesn't barf when hitting `F1' in
+ non-electric mode.
- Minor improvements in modules testing Makefile
+2015-11-28 Michael Albinus <michael.albinus@gmx.de>
- * modules/mod-test/Makefile (EMACS, SO): New variables.
- (CFLAGS): When SO = dll, don't use -fPIC.
- (check): New target, runs the test.
+ Fix a problem with gfilenotify in filenotify-tests.el
-2015-11-19 Eli Zaretskii <eliz@gnu.org>
+ * test/lisp/filenotify-tests.el
+ (file-notify--test-expected-events): Remove.
+ (file-notify--test-cleanup): Do not set that variable.
+ (file-notify--test-with-events): EVENTS can also be a list of lists.
+ (file-notify-test02-events, file-notify-test04-file-validity):
+ Adapt expected result.
- * .gitignore: Add "*.dll".
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+ * .gitignore: Adjust to changes in 'test' directory structure.
- Migrate modules/.gitignore into .gitignore
+2015-11-28 Eli Zaretskii <eliz@gnu.org>
- * .gitignore: Add former contents of modules/.gitignore.
- * modules/.gitignore: Remove.
+ Fix test/manual/etags/Makefile
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+ * test/manual/etags/Makefile (ETAGS_PROG, CTAGS_PROG): Adjust to
+ changes in 'test' directory structure.
- Add copyright notices to module code
+2015-11-27 Phillip Lord <phillip.lord@russet.org.uk>
- Put them in the usual format for GNU Emacs copyright notices.
+ Exclude resource dirs from search for tests.
-2015-11-19 Paul Eggert <eggert@cs.ucla.edu>
+ * test/Makefile.in: Test file locations are now found with find
+ rather than using finds native functions.
- Rename emacs_module.h to module.h
+2015-11-27 Phillip Lord <phillip.lord@russet.org.uk>
- * src/module.h: Rename from src/emacs_module.h.
- All uses changed.
+ Add test targets without directory names.
-2015-11-19 Juanma Barranquero <lekktu@gmail.com>
+ * (test/Makefile.in): Extend test_template to add two targets for each
+ file.
- * src/module.c (Fmodule_load): Remove unused vars `doc_name', `args'
+2015-11-27 Artur Malabarba <bruce.connor.am@gmail.com>
- * src/lread.c (Fload): Remove unused variable `size'
+ * lisp/emacs-lisp/package.el: Require url-handlers
-2015-11-19 Alan Mackenzie <acm@muc.de>
+2015-11-27 Phillip Lord <phillip.lord@russet.org.uk>
- src/keyboard.c (pre-command-hook): Fix typo in doc string: "pre" -> "post".
+ Move elisp-mode-tests to new function names.
-2015-11-19 Dmitry Gutov <dgutov@yandex.ru>
+ * test/lisp/progmodes/elisp-mode-tests.el (find-defsdefun-c-defvar-c,
+ find-defs-defun-el-defvar-c): Call `elisp--xref-find-definitions'.
- Prioritize looking inside vc-parent-buffer over log-view-mode fallback
+2015-11-27 Juanma Barranquero <lekktu@gmail.com>
- * lisp/vc/vc.el (vc-deduce-fileset): Prioritize looking inside
- vc-parent-buffer over log-view-mode fallback (bug#21955).
+ * lisp/emacs-lisp/package.el: Declare `url-insert-buffer-contents'
-2015-11-18 Alan Mackenzie <acm@muc.de>
+2015-11-26 Phillip Lord <phillip.lord@russet.org.uk>
- lisp/isearch.el: Eliminate macro isearch-call-message, replacing with funcall.
+ Merge branch 'feature/standard-test-location'
-2015-11-18 Ken Brown <kbrown@cornell.edu>
+2015-11-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * configure.ac (LIBMODULES): Don’t define on Cygwin
+ * lisp/emacs-lisp/eieio.el: Add some default implementations
-2015-11-18 Eli Zaretskii <eliz@gnu.org>
+ (standard-class): Mark it obsolete.
+ (slot-missing): Give it a default implementation.
+ (destructor): Simplify and mark it obsolete.
+ (object-print): Give it a default implementation.
+ (eieio-change-class): Rename from change-class.
+ (change-class): Redefine as obsolete alias.
- Fix MS-Windows build --with-modules
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- * src/module.c: Reformat copyright commentary.
- (module_vec_get): Use explicit cast to size_t to avoid compiler
- warning in 32-bit builds.
- (check_main_thread) [WINDOWSNT]: Fix letter-case in Windows APIs.
- Compare thread IDs directly, as GetThreadId is not available
- before Windows Vista.
- (check_main_thread) [WINDOWSNT]: Duplicate the thread handle
- without using APIs and constants not available on XP and older
- systems. Obtain and store the thread ID as well.
+ Some final fixes in file notification before merging with master
-2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
- Philipp Stephani <phst@google.com>
+ * lisp/filenotify.el (file-notify--rm-descriptor): Remove WHAT arg.
+ (file-notify-callback): Improve check for `stopped' event. Call
+ `file-notify-rm-watch' rather than `file-notify--rm-descriptor'.
+ (file-notify-add-watch): In case FILE is not a directory, call the
+ file monitor for the kqueue backend. Otherwise, call the
+ directory monitor for the upper directory.
- Add dynamic module test and helper script
+ * src/inotify.c (inotifyevent_to_event): Extract file name from
+ watch_object if the event doesn't provide it.
+ (Finotify_add_watch): Add file name to watch_object.
- Add 'modhelp.py' script (python2) to automate module testing and
- module generation.
+ * test/automated/file-notify-tests.el (file-notify--test-timeout):
+ Use different timeouts for different libraries.
+ (file-notify--test-with-events): Suppress lock files. Flush
+ outstanding events before running the body.
+ (file-notify-test02-events, file-notify-test04-file-validity): Do
+ not skip cygwin tests. Add additional test for file creation.
+ Adapt expected result for different backends.
+ (file-notify-test03-autorevert): Some of the tests don't work for
+ w32notify.
+ (file-notify-test06-many-events): Rename into both directions.
- To build and test all modules in the modules/ dir
- $ ./modhelp.py test
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- To generate a module from template code (good starting point)
- $ ./modhelp init mynewtestmodule
+ Rework file notifications, kqueue has problems with directory monitors
- See the script -h option for more documentation.
+ * lisp/filenotify.el (file-notify-add-watch): Call the native
+ add-watch function on the file, not on the dir.
- * modules/modhelp.py: New module helper script.
- * modules/mod-test/Makefile: New file. Makefile for the test module.
- * modules/mod-test/mod-test.c: New file. Test module source file.
- * modules/mod-test/test.el: New file. ert test suite for the test module.
- * modules/.gitignore: New file. Local .gitignore file.
+ * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
+ about already deleted entries.
-2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
+ * test/automated/auto-revert-tests.el
+ (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
+ since this deletes the target file first.
- Make 'Fload' look for modules
+ * test/automated/file-notify-tests.el (file-notify--test-event-test):
+ Make stronger checks.
+ (file-notify-test01-add-watch, file-notify-test02-events)
+ (file-notify-test04-file-validity, file-notify-test05-dir-validity):
+ Rewrite in order to call file monitors but directory monitors.
+ (file-notify-test06-many-events): Ler rename work in both directions.
- 'Fload' can now load dynamic modules. This also makes 'require' work.
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- * src/lread.c:
- (suffix_p): New function.
- (Fload): Use 'suffix_p'. Call 'Fmodule_load' when we try to load a file
- with a module suffix.
- (syms_of_lread): Append module suffix to 'Vload_suffixes'.
+ Continue with pending events
-2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
- Philipp Stephani <phst@google.com>
+ * src/kqueue.c (pending_events): Remove global variable.
+ (kqueue_compare_dir_list): Create `write' event for not used
+ pending events.
+ (globals_of_kqueue): Remove initialization of pending_events.
+
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
+
+ Improve loops in file-notify-test06-many-events
+
+ * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+ Use `read-event' pauses for the `write-file' loops; otherwise
+ events are lost in inotify and gfilenotify cases.
+
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
+
+ Handle more complex rename operation in kqueue
+
+ * src/kqueue.c (pending_events): New variable.
+ (kqueue_compare_dir_list): Handle more complex rename operation.
+ (globals_of_kqueue): Initialize pending_events.
+
+ * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+ Adapt expected events in the `rename-file' case.
+ (file-notify-test06-many-events-remote): Declare.
+
+2015-11-25 Wolfgang Jenkner <wjenkner@inode.at>
+
+ New test with a larger number of events
+
+ * test/automated/file-notify-tests.el (file-notify--test-with-events):
+ Make timeout heuristically depend on the number of events.
+
+ (file-notify-test06-many-events): Use it for new test.
- Add dynamic module module support
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- * configure.ac: Add '--with-modules' option. Conditionally add
- dynlib.o and module.o to the list of objects. Add any system
- specific flags to the linker flags to support dynamic libraries.
- * m4/ax_gcc_var_attribute.m4: Add autoconf extension to test gcc
- attributes.
- * src/Makefile.in: Conditionally add module objects and linker flags.
- * src/alloc.c (garbage_collect_1): protect module local values from
- GC.
- * src/lisp.h: Add 'module_init' and 'syms_of_module' prototypes.
- * src/emacs-module.h: New header file included by modules. Public
- module API.
- * src/emacs-module.c: New module implementation file.
+ Further fixes for kqueue
-2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
+ * lisp/filenotify.el (file-notify-callback): Raise also event if
+ directory name matches.
+ (file-notify-add-watch): Add `create' to the flags for `kqueue'.
- Add new User Pointer (User_Ptr) type
+ * src/kqueue.c (kqueue_generate_event): Use watch_object as
+ argument instead of ident. Remove callback argument. Adapt
+ callees. Check actions whether they are monitored flags.
- * src/lisp.h: Add new Lisp_Misc_User_Ptr type.
- (XUSER_PTR): New User_Ptr accessor.
- * src/alloc.c (make_user_ptr): New function.
- (mark_object, sweep_misc): Handle Lisp_Misc_User_Ptr.
- * src/data.c (Ftype_of): Return 'user-ptr' for user pointer.
- (Fuser-ptrp): New user pointer type predicate function.
- (syms_of_data): New 'user-ptrp', 'user-ptr' symbol. New 'user-ptrp'
- subr.
- * src/print.c (print_object): Add printer for User_Ptr type.
+ * test/automated/file-notify-tests.el (file-notify--test-library):
+ New defun.
+ (file-notify-test00-availability, file-notify-test02-events)
+ (file-notify-test04-file-validity)
+ (file-notify-test05-dir-validity): Use it.
+ (file-notify-test02-events, file-notify-test04-file-validity): Add
+ `read-event' calls between different file actions, in order to
+ give the backends a chance to rais an event. Needed especially
+ for kqueue. In case of deleting a directory, there are two
+ `deleted' events.
-2015-11-18 Aurélien Aptel <aurelien.aptel@gmail.com>
- Philipp Stephani <phst@google.com>
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- Add portable layer for dynamic loading
+ Code cleanup of kqueue.c
- * src/dynlib.h: New file.
- * src/dynlib.c: New file.
+ * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
+ (kqueue_compare_dir_list): Do not loop when calling
+ directory_files_internal. Remove checks for "." and "..", this is
+ done in kqueue_directory_listing now.
+ (Fkqueue_add_watch): Check for proper emacs_open flags.
-2015-11-18 Philipp Stephani <phst@google.com>
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- Add catch-all & no-signal version of PUSH_HANDLER
+ Doc changes for kqueue
- Ground work for modules. Add a non-signaling version of PUSH_HANDLER and
- a new "catch-all" handler type.
+ * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
+ Fix some glitches in the example.
- * src/eval.c (init_handler, push_handler, push_handler_nosignal): New
- functions.
- * src/fns.c (hash_remove_from_table): Expose function public.
- * src/lisp.h: New handler type, define macro to push_handler call.
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
-2015-11-18 Ken Brown <kbrown@cornell.edu>
+ Finish implementation in kqueue.c
- Silence byte-compiler warning
+ * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
+ Simplify access to list.
+ (kqueue_compare_dir_list): Simplify access to list. Raise
+ `delete' event if directory does not exist any longer. Otherwise,
+ wait until directory contents has changed. Fix error in check.
- * lisp/server.el (server-process-filter): Silence byte-compiler
- warning.
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
-2015-11-18 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
- Quote symbols in docstrings using `'
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- Be more systematic about quoting symbols `like-this' rather than
- `like-this or 'like-this' in docstrings. This follows up Artur
- Malabarba's email in:
- http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01647.html
+ More work on kqueue
-2015-11-18 Peder O. Klingenberg <peder@klingenberg.no>
+ * lisp/filenotify.el (file-notify-callback): Handle also the
+ `rename' event from kqueue.
+ (file-notify-add-watch): Do not register an entry twice.
- Fix savegames in dunnet
+ * src/kqueue.c (kqueue_directory_listing): New function.
+ (kqueue_generate_event): New argument FILE1. Adapt callees.
+ (kqueue_compare_dir_list): Rewrite in order to make it more robust.
- * lisp/play/dunnet.el (dun-rot13): Use the standard rot13-region instead
- of separate implementation.
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
-2015-11-18 Artur Malabarba <bruce.connor.am@gmail.com>
+ Implement directory events
- * lisp/emacs-lisp/package.el (package--with-response-buffer):
+ * lisp/filenotify.el (file-notify-handle-event)
+ (file-notify-callback): Remove traces.
- Ensure we're at the start of the buffer before searching for
- the end of headers.
+ * src/kqueue.c: Include <sys/time.h>.
+ (kqueue_generate_event, kqueue_compare_dir_list): New functions.
+ (kqueue_callback): Use them. Call kevent() with a zero timeout.
+ (Fkqueue_add_watch): Adapt docstring. Support directory events.
+ Compute initial directory listing. Close file descriptor in case
+ of errors.
+ (syms_of_kqueue): Declare Qcreate.
-2015-11-18 Xue Fuqiao <xfq.free@gmail.com>
+2015-11-25 Wolfgang Jenkner <wjenkner@inode.at>
- * admin/release-process: Improve wording.
+ Build fixes for kqueue support
-2015-11-18 Xue Fuqiao <xfq.free@gmail.com>
+ * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
+ flag.
- Backport: * CONTRIBUTE: Remove information about feature freeze.
+ * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
+ kqueue on *BSD.
- (cherry picked from commit ae0653b5ab9ee223751ec389b87011963e1cbbef)
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
-2015-11-18 Xue Fuqiao <xfq.free@gmail.com>
+ Continue kqueue implementation
- Backport: Document the release process
+ * lisp/filenotify.el (file-notify-handle-event)
+ (file-notify-callback): Enable trace messages.
- * admin/notes/versioning: Add information about RC releases.
- * admin/release-process: Document the release process.
- * admin/authors.el (authors-ignored-files):
- * admin/README: Change FOR-RELEASE to release-process.
- * CONTRIBUTE:
- * admin/notes/bugtracker: Don't mention FOR-RELEASE.
+ * src/kqueue.c: Include also <sys/types.h>.
+ (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
+ (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
+ (syms_of_kqueue): Add them.
- (cherry picked from commit 9a4aa0f5945a03611ae29c516025dbd353bd26ab)
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
-2015-11-18 Xue Fuqiao <xfq.free@gmail.com>
+ Work on kqueue
- Backport: * admin/release-process: Rename from admin/FOR-RELEASE.
+ * lisp/filenotify.el (file-notify--library)
+ (file-notify-descriptors, file-notify-callback)
+ (file-notify-add-watch, file-notify-rm-watch)
+ (file-notify-valid-p): Add kqueue support.
- (cherry picked from commit f8cc14b59700e51a4e31139c0a65c8154995e055)
+ * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
-2015-11-18 Xue Fuqiao <xfq.free@gmail.com>
+2015-11-25 Michael Albinus <michael.albinus@gmx.de>
- Backport: Mention CONTRIBUTE in README
+ Add kqueue support
- Mention CONTRIBUTE in README, since it was moved from etc/ to root.
- * etc/TODO: Remove the reference to `etc/CONTRIBUTE'.
- * README: Mention CONTRIBUTE.
+ * configure.ac (--with-file-notification): Add kqueue.
+ (top): Remove special test for "${HAVE_NS}" and
+ ${with_file_notification}, this is handled inside gfilenotify
+ tests. Add kqueue tests. Use NOTIFY_CFLAGS and NOTIFY_LIBS
+ instead of library specific variables.
- (cherry picked from commit ed2e7e20ae0945288c98091f308f5460c3453873)
+ * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
-2015-11-18 Paul Eggert <eggert@cs.ucla.edu>
+ * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
- Fix docstring quoting problems with ‘ '’
+ * src/kqueue.c: New file.
- Problem reported by Artur Malabarba in:
- http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01513.html
- Most of these fixes are to documentation; many involve fixing
- longstanding quoting glitches that are independent of the
- recent substitute-command-keys changes. The changes to code are:
- * lisp/cedet/mode-local.el (mode-local-augment-function-help)
- (describe-mode-local-overload):
- Substitute docstrings before displaying them.
- * lisp/emacs-lisp/cl-macs.el (cl--transform-lambda):
- Quote the generated docstring for later substitution.
+ * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
-2015-11-17 Eli Zaretskii <eliz@gnu.org>
+2015-11-24 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Update elisp-mode-tests for changed file location.
+
+ * test/lisp/progmodes/elisp-mode-tests.el:
+
+2015-11-24 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Exclude manual tests from Makefile
+
+ * test/Makefile.in:
+
+2015-11-24 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Move package test files to new directory.
+
+ * test/lisp/emacs-lisp/package-tests.el: Update resoruce file location.
+ * test/data/package: Moved to test/lisp/emacs-lisp/package-resources
+
+2015-11-24 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Restore delete Makefiles and fix .gitignore.
+
+ * .gitignore: Update Makefiles to changed locations
+ * test/lisp/progmodes/flymake-resources/Makefile,
+ test/manual/etags/Makefile,
+ test/manual/etags/make-src/Makefile,
+ test/manual/indent/Makefile: Restored and moved to new location.
+
+2015-11-24 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Test infrastructure: updates after directory move
+
+ * (test/Makefile.in): Support directories several levels deep.
+ * (test/data/flymake): Rename to test/lisp/progmodes/flymake-resources.
+ * (test/lisp/progmodes/flymake-tests.el): Support renamed resource directory.
+
+2015-11-24 Phillip Lord <phillip.lord@russet.org.uk>
+
+ Rename all test files to reflect source layout.
+
+ * CONTRIBUTE,Makefile.in,configure.ac: Update to reflect
+ test directory moves.
+ * test/file-organisation.org: New file.
+ * test/automated/Makefile.in
+ test/automated/data/decompress/foo.gz
+ test/automated/data/epg/pubkey.asc
+ test/automated/data/epg/seckey.asc
+ test/automated/data/files-bug18141.el.gz
+ test/automated/data/flymake/test.c
+ test/automated/data/flymake/test.pl
+ test/automated/data/package/archive-contents
+ test/automated/data/package/key.pub
+ test/automated/data/package/key.sec
+ test/automated/data/package/multi-file-0.2.3.tar
+ test/automated/data/package/multi-file-readme.txt
+ test/automated/data/package/newer-versions/archive-contents
+ test/automated/data/package/newer-versions/new-pkg-1.0.el
+ test/automated/data/package/newer-versions/simple-single-1.4.el
+ test/automated/data/package/package-test-server.py
+ test/automated/data/package/signed/archive-contents
+ test/automated/data/package/signed/archive-contents.sig
+ test/automated/data/package/signed/signed-bad-1.0.el
+ test/automated/data/package/signed/signed-bad-1.0.el.sig
+ test/automated/data/package/signed/signed-good-1.0.el
+ test/automated/data/package/signed/signed-good-1.0.el.sig
+ test/automated/data/package/simple-depend-1.0.el
+ test/automated/data/package/simple-single-1.3.el
+ test/automated/data/package/simple-single-readme.txt
+ test/automated/data/package/simple-two-depend-1.1.el
+ test/automated/abbrev-tests.el
+ test/automated/auto-revert-tests.el
+ test/automated/calc-tests.el
+ test/automated/icalendar-tests.el
+ test/automated/character-fold-tests.el
+ test/automated/comint-testsuite.el
+ test/automated/descr-text-test.el
+ test/automated/electric-tests.el
+ test/automated/cl-generic-tests.el
+ test/automated/cl-lib-tests.el
+ test/automated/eieio-test-methodinvoke.el
+ test/automated/eieio-test-persist.el
+ test/automated/eieio-tests.el
+ test/automated/ert-tests.el
+ test/automated/ert-x-tests.el
+ test/automated/generator-tests.el
+ test/automated/let-alist.el
+ test/automated/map-tests.el
+ test/automated/advice-tests.el
+ test/automated/package-test.el
+ test/automated/pcase-tests.el
+ test/automated/regexp-tests.el
+ test/automated/seq-tests.el
+ test/automated/subr-x-tests.el
+ test/automated/tabulated-list-test.el
+ test/automated/thunk-tests.el
+ test/automated/timer-tests.el
+ test/automated/epg-tests.el
+ test/automated/eshell.el
+ test/automated/faces-tests.el
+ test/automated/file-notify-tests.el
+ test/automated/auth-source-tests.el
+ test/automated/gnus-tests.el
+ test/automated/message-mode-tests.el
+ test/automated/help-fns.el
+ test/automated/imenu-test.el
+ test/automated/info-xref.el
+ test/automated/mule-util.el
+ test/automated/isearch-tests.el
+ test/automated/json-tests.el
+ test/automated/bytecomp-tests.el
+ test/automated/coding-tests.el
+ test/automated/core-elisp-tests.el
+ test/automated/decoder-tests.el
+ test/automated/files.el
+ test/automated/font-parse-tests.el
+ test/automated/lexbind-tests.el
+ test/automated/occur-tests.el
+ test/automated/process-tests.el
+ test/automated/syntax-tests.el
+ test/automated/textprop-tests.el
+ test/automated/undo-tests.el
+ test/automated/man-tests.el
+ test/automated/completion-tests.el
+ test/automated/dbus-tests.el
+ test/automated/newsticker-tests.el
+ test/automated/sasl-scram-rfc-tests.el
+ test/automated/tramp-tests.el
+ test/automated/obarray-tests.el
+ test/automated/compile-tests.el
+ test/automated/elisp-mode-tests.el
+ test/automated/f90.el
+ test/automated/flymake-tests.el
+ test/automated/python-tests.el
+ test/automated/ruby-mode-tests.el
+ test/automated/subword-tests.el
+ test/automated/replace-tests.el
+ test/automated/simple-test.el
+ test/automated/sort-tests.el
+ test/automated/subr-tests.el
+ test/automated/reftex-tests.el
+ test/automated/sgml-mode-tests.el
+ test/automated/tildify-tests.el
+ test/automated/thingatpt.el
+ test/automated/url-future-tests.el
+ test/automated/url-util-tests.el
+ test/automated/add-log-tests.el
+ test/automated/vc-bzr.el
+ test/automated/vc-tests.el
+ test/automated/xml-parse-tests.el
+ test/BidiCharacterTest.txt
+ test/biditest.el
+ test/cedet/cedet-utests.el
+ test/cedet/ede-tests.el
+ test/cedet/semantic-ia-utest.el
+ test/cedet/semantic-tests.el
+ test/cedet/semantic-utest-c.el
+ test/cedet/semantic-utest.el
+ test/cedet/srecode-tests.el
+ test/cedet/tests/test.c
+ test/cedet/tests/test.el
+ test/cedet/tests/test.make
+ test/cedet/tests/testdoublens.cpp
+ test/cedet/tests/testdoublens.hpp
+ test/cedet/tests/testfriends.cpp
+ test/cedet/tests/testjavacomp.java
+ test/cedet/tests/testnsp.cpp
+ test/cedet/tests/testpolymorph.cpp
+ test/cedet/tests/testspp.c
+ test/cedet/tests/testsppcomplete.c
+ test/cedet/tests/testsppreplace.c
+ test/cedet/tests/testsppreplaced.c
+ test/cedet/tests/testsubclass.cpp
+ test/cedet/tests/testsubclass.hh
+ test/cedet/tests/testtypedefs.cpp
+ test/cedet/tests/testvarnames.c
+ test/etags/CTAGS.good
+ test/etags/ETAGS.good_1
+ test/etags/ETAGS.good_2
+ test/etags/ETAGS.good_3
+ test/etags/ETAGS.good_4
+ test/etags/ETAGS.good_5
+ test/etags/ETAGS.good_6
+ test/etags/a-src/empty.zz
+ test/etags/a-src/empty.zz.gz
+ test/etags/ada-src/2ataspri.adb
+ test/etags/ada-src/2ataspri.ads
+ test/etags/ada-src/etags-test-for.ada
+ test/etags/ada-src/waroquiers.ada
+ test/etags/c-src/a/b/b.c
+ test/etags/c-src/abbrev.c
+ test/etags/c-src/c.c
+ test/etags/c-src/dostorture.c
+ test/etags/c-src/emacs/src/gmalloc.c
+ test/etags/c-src/emacs/src/keyboard.c
+ test/etags/c-src/emacs/src/lisp.h
+ test/etags/c-src/emacs/src/regex.h
+ test/etags/c-src/etags.c
+ test/etags/c-src/exit.c
+ test/etags/c-src/exit.strange_suffix
+ test/etags/c-src/fail.c
+ test/etags/c-src/getopt.h
+ test/etags/c-src/h.h
+ test/etags/c-src/machsyscalls.c
+ test/etags/c-src/machsyscalls.h
+ test/etags/c-src/sysdep.h
+ test/etags/c-src/tab.c
+ test/etags/c-src/torture.c
+ test/etags/cp-src/MDiagArray2.h
+ test/etags/cp-src/Range.h
+ test/etags/cp-src/burton.cpp
+ test/etags/cp-src/c.C
+ test/etags/cp-src/clheir.cpp.gz
+ test/etags/cp-src/clheir.hpp
+ test/etags/cp-src/conway.cpp
+ test/etags/cp-src/conway.hpp
+ test/etags/cp-src/fail.C
+ test/etags/cp-src/functions.cpp
+ test/etags/cp-src/screen.cpp
+ test/etags/cp-src/screen.hpp
+ test/etags/cp-src/x.cc
+ test/etags/el-src/TAGTEST.EL
+ test/etags/el-src/emacs/lisp/progmodes/etags.el
+ test/etags/erl-src/gs_dialog.erl
+ test/etags/f-src/entry.for
+ test/etags/f-src/entry.strange.gz
+ test/etags/f-src/entry.strange_suffix
+ test/etags/forth-src/test-forth.fth
+ test/etags/html-src/algrthms.html
+ test/etags/html-src/index.shtml
+ test/etags/html-src/software.html
+ test/etags/html-src/softwarelibero.html
+ test/etags/lua-src/allegro.lua
+ test/etags/objc-src/PackInsp.h
+ test/etags/objc-src/PackInsp.m
+ test/etags/objc-src/Subprocess.h
+ test/etags/objc-src/Subprocess.m
+ test/etags/objcpp-src/SimpleCalc.H
+ test/etags/objcpp-src/SimpleCalc.M
+ test/etags/pas-src/common.pas
+ test/etags/perl-src/htlmify-cystic
+ test/etags/perl-src/kai-test.pl
+ test/etags/perl-src/yagrip.pl
+ test/etags/php-src/lce_functions.php
+ test/etags/php-src/ptest.php
+ test/etags/php-src/sendmail.php
+ test/etags/prol-src/natded.prolog
+ test/etags/prol-src/ordsets.prolog
+ test/etags/ps-src/rfc1245.ps
+ test/etags/pyt-src/server.py
+ test/etags/tex-src/gzip.texi
+ test/etags/tex-src/nonewline.tex
+ test/etags/tex-src/testenv.tex
+ test/etags/tex-src/texinfo.tex
+ test/etags/y-src/atest.y
+ test/etags/y-src/cccp.c
+ test/etags/y-src/cccp.y
+ test/etags/y-src/parse.c
+ test/etags/y-src/parse.y
+ test/indent/css-mode.css
+ test/indent/js-indent-init-dynamic.js
+ test/indent/js-indent-init-t.js
+ test/indent/js-jsx.js
+ test/indent/js.js
+ test/indent/latex-mode.tex
+ test/indent/modula2.mod
+ test/indent/nxml.xml
+ test/indent/octave.m
+ test/indent/pascal.pas
+ test/indent/perl.perl
+ test/indent/prolog.prolog
+ test/indent/ps-mode.ps
+ test/indent/ruby.rb
+ test/indent/scheme.scm
+ test/indent/scss-mode.scss
+ test/indent/sgml-mode-attribute.html
+ test/indent/shell.rc
+ test/indent/shell.sh
+ test/redisplay-testsuite.el
+ test/rmailmm.el
+ test/automated/buffer-tests.el
+ test/automated/cmds-tests.el
+ test/automated/data-tests.el
+ test/automated/finalizer-tests.el
+ test/automated/fns-tests.el
+ test/automated/inotify-test.el
+ test/automated/keymap-tests.el
+ test/automated/print-tests.el
+ test/automated/libxml-tests.el
+ test/automated/zlib-tests.el: Files Moved.
+
+2015-11-20 Michael Albinus <michael.albinus@gmx.de>
+
+ Rework file notifications, kqueue has problems with directory monitors
+
+ * lisp/filenotify.el (file-notify-add-watch): Call the native
+ add-watch function on the file, not on the dir.
+
+ * src/kqueue.c (kqueue_compare_dir_list): Make also bookkeeping
+ about already deleted entries.
- Improve configure --help text for wide ints
+ * test/automated/auto-revert-tests.el
+ (auto-revert-test01-auto-revert-several-files): Do not call "cp -f"
+ since this deletes the target file first.
- * configure.ac (wide-int): Clarify user-level advantages and
- disadvantages.
+ * test/automated/file-notify-tests.el (file-notify--test-event-test):
+ Make stronger checks.
+ (file-notify-test01-add-watch, file-notify-test02-events)
+ (file-notify-test04-file-validity, file-notify-test05-dir-validity):
+ Rewrite in order to call file monitors but directory monitors.
+ (file-notify-test06-many-events): Ler rename work in both directions.
-2015-11-17 Stephen Leake <stephen_leake@stephe-leake.org>
+2015-11-19 Michael Albinus <michael.albinus@gmx.de>
- Improve doc string
+ Continie with pending events
- * lisp/progmodes/xref.el (xref-backend-references): Improve doc string.
+ * src/kqueue.c (pending_events): Remove global variable.
+ (kqueue_compare_dir_list): Create `write' event for not used
+ pending events.
+ (globals_of_kqueue): Remove initialization of pending_events.
-2015-11-17 Paul Eggert <eggert@cs.ucla.edu>
+2015-11-19 Michael Albinus <michael.albinus@gmx.de>
- eval_sub followed dangling pointer when debugging
+ Improve loops in file-notify-test06-many-events
- Problem reported by Pip Cet (Bug#21245).
- This bug could occur in eval_sub if the C compiler reused
- storage associated with the ‘argvals’ local after ‘argvals’
- went out of scope, and if the Elisp debugger stopped on Elisp
- function exit and accessed ‘argvals’. It could also occur if
- a variadic function was called with so many arguments (over
- 2048 args on x86-64) that SAFE_ALLOCA_LISP called malloc, then
- SAFE_FREE freed the arguments, then the memory manager used
- the storage for other purposes, then the debugger accessed the
- arguments.
- * src/eval.c (eval_sub): Declare ‘argvals’ at top level of
- function body. Simplify local decls.
- When allocating args via SAFE_ALLOCA, call
- debugger before invoking SAFE_FREE, as the debugger needs
- access to the args.
- (eval_sub, apply_lambda): Rework to avoid need for
- set_backtrace_debug_on_exit hack. This is cleaner,
- and should work better with buggy custom debuggers.
+ * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+ Use `read-event' pauses for the `write-file' loops; otherwise
+ events are lost in inotify and gfilenotify cases.
-2015-11-17 Daiki Ueno <ueno@gnu.org>
+2015-11-19 Michael Albinus <michael.albinus@gmx.de>
- * lisp/image-mode.el: Support encrypted file
+ Handle more complex rename operation in kqueue
- (image-toggle-display-image): Read content from the buffer instead
- of the file, if the buffer holds a decrypted data. (Bug#21870)
+ * src/kqueue.c (pending_events): New variable.
+ (kqueue_compare_dir_list): Handle more complex rename operation.
+ (globals_of_kqueue): Initialize pending_events.
-2015-11-17 Paul Eggert <eggert@cs.ucla.edu>
+ * test/automated/file-notify-tests.el (file-notify-test06-many-events):
+ Adapt expected events in the `rename-file' case.
+ (file-notify-test06-many-events-remote): Declare.
- ELF unexec: align section header
+2015-11-18 Wolfgang Jenkner <wjenkner@inode.at>
- This ports the recent unexelf.c changes to Fedora x86-64
- when configured with GCC’s -fsanitize=undefined option.
- * src/unexelf.c (unexec): Align new_data2_size to a multiple
- of ElfW (Shdr)’s alignment, so that NEW_SECTION_H returns a
- pointer aligned appropriately for its type.
+ New test with a larger number of events.
-2015-11-17 Andreas Schwab <schwab@linux-m68k.org>
+ * test/automated/file-notify-tests.el (file-notify--test-with-events):
+ Make timeout heuristically depend on the number of events.
- Do more checks on bytecode objects (Bug#21929)
+ (file-notify-test06-many-events): Use it for new test.
- * src/eval.c (funcall_lambda): Check size of compiled function
- object.
- (Ffetch_bytecode): Likewise.
+2015-11-18 Michael Albinus <michael.albinus@gmx.de>
-2015-11-16 Johan Bockgård <bojohan@gnu.org>
+ Further fixes for kqueue.
- pcase.el: Fix edebugging of backquoted cons patterns
+ * lisp/filenotify.el (file-notify-callback): Raise also event if
+ directory name matches.
+ (file-notify-add-watch): Add `create' to the flags for `kqueue'.
- * lisp/emacs-lisp/pcase.el (pcase-QPAT): Fix edebugging of backquoted
- cons patterns. (Bug#21920)
+ * src/kqueue.c (kqueue_generate_event): Use watch_object as
+ argument instead of ident. Remove callback argument. Adapt
+ callees. Check actions whether they are monitored flags.
-2015-11-16 Paul Eggert <eggert@cs.ucla.edu>
+ * test/automated/file-notify-tests.el (file-notify--test-library):
+ New defun.
+ (file-notify-test00-availability, file-notify-test02-events)
+ (file-notify-test04-file-validity)
+ (file-notify-test05-dir-validity): Use it.
+ (file-notify-test02-events, file-notify-test04-file-validity): Add
+ `read-event' calls between different file actions, in order to
+ give the backends a chance to rais an event. Needed especially
+ for kqueue. In case of deleting a directory, there are two
+ `deleted' events.
- Improve fix for regex reentrancy abort
+2015-11-17 Michael Albinus <michael.albinus@gmx.de>
- Suggested by Stefan Monnier (Bug#21688).
- * src/syntax.c (update_syntax_table_forward):
- Remove recently-added PROPERTIZE arg, and assume it is true.
- All callers changed.
- * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
- Invoke update_syntax_table directly.
+ Code cleanup of kqueue.c
-2015-11-16 Artur Malabarba <bruce.connor.am@gmail.com>
+ * src/kqueue.c (kqueue_directory_listing): Skip "." and "..".
+ (kqueue_compare_dir_list): Do not loop when calling
+ directory_files_internal. Remove checks for "." and "..", this is
+ done in kqueue_directory_listing now.
+ (Fkqueue_add_watch): Check for proper emacs_open flags.
- * lisp/faces.el (faces--attribute-at-point): Use `face-list-p'
+2015-11-16 Michael Albinus <michael.albinus@gmx.de>
- * lisp/emacs-lisp/package.el (package--with-response-buffer): Missing require
+ Doc changes for kqueue
- * lisp/emacs-lisp/nadvice.el (add-function): Escape quote
+ * doc/lispref/os.texi (File Notifications): Add kqueue as backend.
+ Fix some glitches in the example.
-2015-11-16 Vasily Korytov <vasily.korytov@yahoo.com>
+2015-11-16 Michael Albinus <michael.albinus@gmx.de>
- Recognize .rbw and .pyw files (bug#18753)
+ Finish implementation in kqueue.c
- * lisp/progmodes/python.el (auto-mode-alist):
- Recognize .pyw files.
+ * src/kqueue.c (kqueue_directory_listing, kqueue_callback):
+ Simplify access to list.
+ (kqueue_compare_dir_list): Simplify access to list. Raise
+ `delete' event if directory does not exist any longer. Otherwise,
+ wait until directory contents has changed. Fix error in check.
- * lisp/progmodes/ruby-mode.el (auto-mode-alist):
- Recognize .rbw files.
+2015-11-16 Michael Albinus <michael.albinus@gmx.de>
-2015-11-16 Dmitry Gutov <dgutov@yandex.ru>
+ * lisp/filenotify.el (file-notify-add-watch): Fix thinko.
- Fix ruby-mode auto-mode-alist entry
+2015-11-15 Michael Albinus <michael.albinus@gmx.de>
- * lisp/progmodes/ruby-mode.el (auto-mode-alist): Add grouping
- around the extensions (bug#21257).
+ More work on kqueue
-2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
+ * lisp/filenotify.el (file-notify-callback): Handle also the
+ `rename' event from kqueue.
+ (file-notify-add-watch): Do not register an entry twice.
- Fix etags completion near eob
+ * src/kqueue.c (kqueue_directory_listing): New function.
+ (kqueue_generate_event): New argument FILE1. Adapt callees.
+ (kqueue_compare_dir_list): Rewrite in order to make it more robust.
- * lisp/progmodes/etags.el (tags-completion-at-point-function):
- Use `goto-char', to avoid the end-of-buffer error (bug#20061).
+2015-11-14 Michael Albinus <michael.albinus@gmx.de>
-2015-11-15 Alan Mackenzie <acm@muc.de>
+ Implement directory events
- De-pessimize detection of C++ member initialization lists.
+ * lisp/filenotify.el (file-notify-handle-event)
+ (file-notify-callback): Remove traces.
- list/progmodes/cc-engine.el (c-back-over-list-of-member-inits): New macro.
- (c-back-over-member-initializers): Reformulate such that c-at-toplevel-p
- is only called when a construct "looks right" rather than continually.
- (c-guess-basic-syntax, CASE 5R): Add a check for the mode being C++ Mode.
+ * src/kqueue.c: Include <sys/time.h>.
+ (kqueue_generate_event, kqueue_compare_dir_list): New functions.
+ (kqueue_callback): Use them. Call kevent() with a zero timeout.
+ (Fkqueue_add_watch): Adapt docstring. Support directory events.
+ Compute initial directory listing. Close file descriptor in case
+ of errors.
+ (syms_of_kqueue): Declare Qcreate.
-2015-11-15 Artur Malabarba <bruce.connor.am@gmail.com>
+2015-11-11 Wolfgang Jenkner <wjenkner@inode.at>
- Backport: * lisp/emacs-lisp/package.el: Fix a decoding issue.
+ Build fixes for kqueue support.
- * lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
- `url-insert-buffer-contents'.
- (url-insert-buffer-contents): New function
+ * src/kqueue.c (Fkqueue_add_watch): O_BINARY is not a POSIX open(3)
+ flag.
- (package--with-response-buffer): Use `url-insert-buffer-contents'.
- The previous code had some issues with decoding. Refactoring that
- function allows us to use the decoding from url-handlers while still
- treating both sync and async requests the same.
+ * configure.ac (HAVE_KQUEUE): There is no pkg-config module for native
+ kqueue on *BSD.
-2015-11-15 Stephen Leake <stephen_leake@stephe-leake.org>
+2015-11-11 Michael Albinus <michael.albinus@gmx.de>
- Improve a few doc strings, comments
+ Continue kqueue implementation
- * lisp/cedet/cedet-global.el (cedet-gnu-global-expand-filename):
- * lisp/cedet/ede/locate.el (ede-locate-base):
- * lisp/cedet/semantic/symref.el (semantic-symref-calculate-rootdir):
- * src/fns.c (Fdelq): Improve doc string.
+ * lisp/filenotify.el (file-notify-handle-event)
+ (file-notify-callback): Enable trace messages.
- * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions): Add FIXME.
+ * src/kqueue.c: Include also <sys/types.h>.
+ (kqueue_callback): Remove watch in case of NOTE_DELETE or NOTE_RENAME.
+ (Fkqueue_rm_watch, Fkqueue_valid_p): New functions.
+ (syms_of_kqueue): Add them.
-2015-11-15 Anders Lindgren <andlind@gmail.com>
+2015-11-11 Michael Albinus <michael.albinus@gmx.de>
- Enhance NSTRACE (trace output for NextStep).
+ Work on kqueue
- Trace can be disabled for groups of functions. By default, event
- functions and functions that generate lots of output are disabled.
+ * lisp/filenotify.el (file-notify--library)
+ (file-notify-descriptors, file-notify-callback)
+ (file-notify-add-watch, file-notify-rm-watch)
+ (file-notify-valid-p): Add kqueue support.
- Trace output of Objective-C functions now use the "[ClassName
- parameter:]" form.
+ * src/keyboard.c (make_lispy_event): Check also for HAVE_KQUEUE.
- * src/nsterm.h (NSTRACE_ALL_GROUPS, NSTRACE_GROUP_EVENTS)
- (NSTRACE_GROUP_UPDATES, NSTRACE_GROUP_FRINGE, NSTRACE_GROUP_COLOR)
- (NSTRACE_GROUP_GLYPHS, NSTRACE_GROUP_FOCUS): New macros,
- controlling in which function groups trace should be active.
- (NSTRACE_WHEN): Support for silencing a function, this also
- silencing all called functions.
- (NSTRACE_UNSILENCE): New macro, used to re-enable trace.
- (NSTRACE_FMT_FSTYPE, NSTRACE_ARG_FSTYPE): New macros, used to
- print the full screen state in NSTRACE functions.
+2015-11-11 Michael Albinus <michael.albinus@gmx.de>
- * src/nsterm.m (nstrace_depth, nstrace_num): Made volatile as they
- can be accessed from multiple threads.
- (nstrace_enabled_global): New variable, when FALSE, trace is
- silenced.
- (nstrace_restore_global_trace_state): New function, used to
- restore `nstrace_enabled_global' at end of block.
- ([EmacsView setFrame:], [EmacsWindow setFrame:display:])
- ([EmacsWindow setFrame:display:animation:])
- ([EmacsWindow setFrameTopLeftPoint:]): New functions, print trace
- and call corresponding super function.
- (Many functions): Add or enhance trace output.
+ Add kqueue support
- * src/nsimage.m (ns_image_from_file): Enhanced trace output.
+ * configure.ac (--with-file-notification): Add kqueue.
+ (top): Remove special test for "${HAVE_NS}" and
+ ${with_file_notification}, this is handled inside gfilenotify
+ tests. Add kqueue tests. Use NOTIFY_CFLAGS and NOTIFY_LIBS
+ instead of library specific variables.
- * src/nsfns.m (x_set_tool_bar_lines): Add trace output.
+ * src/Makefile.in: Use NOTIFY_CFLAGS and NOTIFY_LIBS.
- * src/nsmenu.m ([EmacsToolbar setVisible:]): New function, print trace
- and call corresponding super function.
+ * src/emacs.c (main): Call globals_of_kqueue and syms_of_kqueue.
-2015-11-15 Anders Lindgren <andlind@gmail.com>
+ * src/kqueue.c: New file.
- Fixed a toolbar related issue on OS X.
+ * src/lisp.h: Declare extern globals_of_kqueue and syms_of_kqueue.
- Earlier, when toggling the tool-bar in a maximized frame, the
- frame size didn't match the number of text lines, leaving an
- unused area at the bottom of the frame.
+2015-11-21 Wilson Snyder <wsnyder@wsnyder.org>
- * src/nsfns.m (x_set_tool_bar_lines): Exit maximized and full height
- fullscreen modes when tool bar is disabled.
+ verilog-mode.el: Commentary and fix pre-Emacs 21 behavior.
-2015-11-15 Anders Lindgren <andlind@gmail.com>
+ * verilog-mode.el (verilog-save-font-no-change-functions):
+ Commentary and fix pre-Emacs 21 behavior.
- Fixed OS X 10.6.8 build issue (bug#21862).
+2015-11-19 Przemysław Wojnowski <esperanto@cumego.com>
- * src/nsterm.h (EmacsView): Add missing declarations.
- * src/nsterm.m ([EmacsView windowDidBecomeKey]): New method, like
- the standard method but without the notification parameter.
- Intended to be used for direct calls.
- ([EmacsView windowDidEnterFullScreen]): Call the non-notification
- version of `windowDidBecomeKey'. Made the notification method call
- the non-notification method instead of the vice versa.
- (NSWindowDidEnterFullScreenNotification): Deleted, no longer
- needed.
+ Use obarray functions from obarray.
+
+ * lisp/abbrev.el (copy-abbrev-table, abbrev-table-p, make-abbrev-table,
+ abbrev-table-get, abbrev-table-put, abbrev-table-empty-p,
+ clear-abbrev-table, define-abbrev, abbrev--symbol, abbrev-table-menu):
+ delegate to obarray.el functions.
+ * lisp/loadup.el: load obarray before abbrev
+ * test/automated/abbrev-tests.el: new tests
-2015-11-15 Artur Malabarba <bruce.connor.am@gmail.com>
+2015-11-18 Christian Schwarzgruber <c.schwarzgruber.cs@gmail.com> (tiny change)
- * lisp/faces.el (faces--attribute-at-point): Fix an issue
+ epa.el: Add option to replace original text
- Previous code would signal an error when the face at point was
- a manually built list of attributes such as '(:foregroud "white").
+ * lisp/epa.el (epa-replace-original-text): New user option.
+ (Bug#21947)
- * test/automated/faces-tests.el (faces--test-color-at-point): Add a test
+2015-11-18 Mark Oteiza <mvoteiza@udel.edu>
-2015-11-15 Paul Eggert <eggert@cs.ucla.edu>
+ Add interactive seek command.
- Fix regex abort when it tries to reenter itself
+ * lisp/mpc.el (mpc-cmd-seekcur): New function.
+ (mpc-seek-current): New command.
+ (mpc-mode-menu): Add entry for mpc-seek-current
+ (mpc-mode-map): Bind mpc-seek-current to "g"
- Problem reported by Ken Raeburn.
- Solution suggested by Stefan Monnier (Bug#21688).
- * src/regex.c (re_match_2_internal):
- Use new _FAST functions to avoid regex code reentering itself.
- * src/syntax.c (update_syntax_table_forward): New arg PROPERTIZE.
- All callers changed.
- * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST)
- (UPDATE_SYNTAX_TABLE_FAST): New inline functions.
+2015-11-18 Mark Oteiza <mvoteiza@udel.edu>
-2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
+ Fix issue where a new tempfile was created every refresh
- Improve Ruby 1.9-style keyword keys highlighting
+ * lisp/mpc.el (mpc-format): Leave dir as relative path
- * lisp/progmodes/ruby-mode.el (ruby-font-lock-keywords):
- Handle required keyword arguments (bug#21367).
- And highlight the colon together with the name.
+2015-11-18 Stefan Monnier <monnier@iro.umontreal.ca>
-2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
+ * lisp/progmodes/cc-defs.el: Use with-silent-modifications
- Unify the absolutely equal xref-backend-references implementations
+ (c-save-buffer-state): Use with-silent-modifications when available.
+ (c--macroexpand-all): Check macroexpand-all directly rather than
+ c--mapcan-status.
- * lisp/progmodes/elisp-mode.el (xref-backend-references):
- Remove.
+2015-11-18 Stefan Monnier <monnier@iro.umontreal.ca>
- * lisp/progmodes/etags.el (xref-backend-references):
- Remove.
+ * lisp/loadup.el: Set max-lisp-eval-depth here
- * lisp/progmodes/xref.el (xref-backend-references):
- Define the default implementation.
+ * lisp/Makefile.in (BIG_STACK_DEPTH, BIG_STACK_OPTS): Remove.
+ (BYTE_COMPILE_FLAGS): Adjust accordingly.
-2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
+2015-11-17 João Távora <joaotavora@gmail.com>
- Update project-find-regexp for the new xref API
+ Minor fix to comment indentation and typo in last commit
- * lisp/progmodes/project.el (project--read-regexp):
- Update to use the new xref API methods.
+ * linum.el (linum-update-window): Fix comment indentation and a
+ typo.
- * lisp/progmodes/xref.el (xref-find-backend): Autoload.
+2015-11-17 João Távora <joaotavora@gmail.com>
-2015-11-15 Dmitry Gutov <dgutov@yandex.ru>
+ linum-mode plays more nicely with other margin-setting extensions
- Fix replacing a match with a shorter string
+ linum.el will only modify the left margin if it needs to, and will
+ only reset the it back to 0 if it guesses that no-one has touched that
+ margin in the meantime.
- In effect, partially reverting fe973fc.
+ As such, this is a more of a workaround than an actual fix, but fixes
+ the problems described in bug#20674 regarding the interaction with
+ modes such as darkroom-mode and olivetti-mode.
- * lisp/progmodes/xref.el (xref-query-replace): Store the end
- of each match as a marker again, instead of length.
- (xref--query-replace-1): Update accordingly.
+ A similar fix was commited to nlinum.el in ELPA.git's
+ e7f5f549fbfb740b911fb7f33b42381ecece56d8
-2015-11-14 Artur Malabarba <bruce.connor.am@gmail.com>
+ * linum.el (linum-delete-overlays): Restore margins more
+ criteriously.
+ (linum-update-window): Set margins more criteriously.
- * lisp/progmodes/xref.el (xref-pop-marker-stack): Downgrade errors
+2015-11-16 Daiki Ueno <ueno@gnu.org>
- Signal user-errors instead.
+ * lisp/image-mode.el: Support encrypted file
-2015-11-14 Eli Zaretskii <eliz@gnu.org>
+ (image-toggle-display-image): Read content from the buffer instead
+ of the file, if the buffer holds a decrypted data. (Bug#21870)
- Document 'describe-symbol'
+2015-11-15 Juanma Barranquero <lekktu@gmail.com>
- * doc/emacs/help.texi (Help Summary): Mention "C-h o".
- (Name Help): Document "C-h o" and describe-symbol.
+ * lisp/progmodes/verilog-mode.el (verilog-save-buffer-state): Add backquote
- * lisp/help-fns.el (describe-symbol): Doc fix.
+2015-11-15 Artur Malabarba <bruce.connor.am@gmail.com>
-2015-11-14 Paul Eggert <eggert@cs.ucla.edu>
+ * lisp/emacs-lisp/package.el: Fix a decoding issue
- Change test name to avoid spellcheck issue.
+ (package--with-response-buffer): Use `url-insert-buffer-contents'.
+ The previous code had some issues with decoding. Refactoring that
+ function allows us to use the decoding from url-handlers while still
+ treating both sync and async requests the same.
-2015-11-14 Eli Zaretskii <eliz@gnu.org>
+ * lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
+ `url-insert-buffer-contents'.
+ (url-insert-buffer-contents): New function
- Avoid signaling an error in 'describe-symbol'
+2015-11-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * lisp/help-fns.el (describe-symbol): Avoid errors when the symbol
- exists as a function/variable/face/etc., but is undocumented.
+ * lisp/progmodes/verilog-mode.el: Use with-silent-modifications
- * test/automated/help-fns.el (help-fns-test-describe-symbol): New
- test.
+ (verilog-save-buffer-state): Use with-silent-modifications when available.
+ (verilog-save-font-no-change-functions): Don't bind
+ before/after-change-functions if it's not needed.
-2015-11-14 Eli Zaretskii <eliz@gnu.org>
+2015-11-14 Xue Fuqiao <xfq.free@gmail.com>
- * INSTALL (--with-cairo): Document this new configure option.
+ * CONTRIBUTE: Remove information about feature freeze.
-2015-11-14 Eli Zaretskii <eliz@gnu.org>
+ Merge branch 'release-process-lowercase'
- Document that GNU Make >= 3.81 is required to build Emacs
+2015-11-14 Xue Fuqiao <xfq.free@gmail.com>
- * doc/lispref/internals.texi (Building Emacs): Document that GNU
- Make 3.81 or later is now required.
+ Document the release process
-2015-11-14 Artur Malabarba <bruce.connor.am@gmail.com>
+ * admin/notes/versioning: Add information about RC releases.
+ * admin/release-process: Document the release process.
+ * admin/authors.el (authors-ignored-files):
+ * admin/README: Change FOR-RELEASE to release-process.
+ * CONTRIBUTE:
+ * admin/notes/bugtracker: Don't mention FOR-RELEASE.
+
+2015-11-14 Xue Fuqiao <xfq.free@gmail.com>
+
+ * admin/release-process: Rename from admin/FOR-RELEASE.
+
+2015-11-14 David Engster <deng@randomsample.de>
- Backport: * lisp/emacs-lisp/package.el: Refactor -with-work-buffer-async.
+ gitmerge: Fix git log command
- (package--with-work-buffer-async): Reimplement as
- `package--with-response-buffer'.
- (package--with-work-buffer): Mark obsolete.
- (package--with-response-buffer): New macro. This is a more self
- contained and less contrived version of
- `package--with-work-buffer-async'. It uses keyword arguments,
- doesn't have async on the name, doesn't fallback on
- `package--with-work-buffer', and has _much_ simpler error
- handling. On master, this macro will soon be part of another
- library (either standalone or inside url.el), which is why this
- commit is not to be merged back.
+ * admin/gitmerge.el (gitmerge-missing): Use '--left-only' since we
+ only want commits from the branch that is to be merged.
+ (gitmerge-setup-log-buffer): Use the same symmetric range as in
+ `gitmerge-missing'.
- (package--check-signature, package--download-one-archive)
- (package-install-from-archive, describe-package-1): Use it.
+2015-11-14 David Engster <deng@randomsample.de>
- (package--download-and-read-archives): Let
- `package--download-one-archive' take care of calling
- `package--update-downloads-in-progress'.
+ gitmerge: Try to detect cherry-picks
+
+ * admin/gitmerge.el (gitmerge-default-branch): Change to
+ origin/emacs-25.
+ (gitmerge-missing): Use symmetric difference ('...') between
+ branch and master so that cherry-picks can be detected.
2015-11-14 Eli Zaretskii <eliz@gnu.org>
- * CONTRIBUTE (Branches): Improve wording for back-ported commits.
+ Increment Emacs version on master branch
-2015-11-14 Dmitry Gutov <dgutov@yandex.ru>
+ * lisp/cus-edit.el (customize-changed-options-previous-release):
+ Increase previous version to 24.5.
+
+ * configure.ac:
+ * msdos/sed2v2.inp: Bump version to 25.1.50.
- Merge branch 'master' into emacs-25
+2015-11-14 Xue Fuqiao <xfq.free@gmail.com>
-2015-11-14 Dmitry Gutov <dgutov@yandex.ru>
+ Mention CONTRIBUTE in README, since it was moved from etc/ to root.
+ * etc/TODO: Remove the reference to `etc/CONTRIBUTE'.
+ * README: Mention CONTRIBUTE.
+
+2015-11-13 Wilson Snyder <wsnyder@wsnyder.org>
+
+ Update verilog-mode.el to 2015-11-09-b121d60-vpo
+
+ * verilog-mode.el (verilog-auto, verilog-delete-auto)
+ (verilog-modi-cache-results, verilog-save-buffer-state)
+ (verilog-save-font-no-change-functions): When internally suppressing
+ change functions, use `inhibit-modification-hooks' and call
+ `after-change-funtions' to more nicely work with user hooks.
+ Reported by Stefan Monnier.
+ (verilog-auto, verilog-delete-auto, verilog-delete-auto-buffer):
+ Create `verilog-delete-auto-buffer' to avoid double-calling
+ fontification hooks.
+ (verilog-restore-buffer-modified-p, verilog-auto)
+ (verilog-save-buffer-state): Prefer restore-buffer-modified-p over
+ set-buffer-modified-p. Reported by Stefan Monnier.
+ (verilog-diff-auto, verilog-diff-buffers-p)
+ (verilog-diff-ignore-regexp): Add `verilog-diff-ignore-regexp'.
+ (verilog-auto-inst-port, verilog-read-sub-decls-expr): Fix
+ AUTOINST with unpacked dimensional parameters, bug981. Reported by
+ by Amol Nagapurkar.
+ (verilog-read-decls, verilog-read-sub-decls-line): Avoid unneeded
+ properties inside internal structures. No functional change
+ intended.
+
+2015-11-13 Dmitry Gutov <dgutov@yandex.ru>
Use generic dispatch for xref backends
(xref-backend-references, xref-backend-definitions)
(xref-backend-apropos): New generic methods.
-2015-11-14 Juri Linkov <juri@linkov.net>
+2015-11-13 Juri Linkov <juri@linkov.net>
Support rectangular regions for more commands
* src/casefiddle.c (Fdowncase_region): Add arg ‘region-noncontiguous-p’.
If non-nil, operate on multiple chunks. (Bug#19829)
-2015-11-14 Dmitry Gutov <dgutov@yandex.ru>
+2015-11-13 Dmitry Gutov <dgutov@yandex.ru>
Handle multiple matches on the same line; add highlighting
Search for all matches in the hit line. Add `highlight' face to
the matched region in the summary. Update both callers.
-2015-11-14 Dmitry Gutov <dgutov@yandex.ru>
+2015-11-13 Dmitry Gutov <dgutov@yandex.ru>
Replace xref-match-bounds with xref-match-length
(xref-query-replace): Ditto. And check that the search results
are up-to-date.
-2015-11-13 John Wiegley <johnw@newartisans.com>
-
- Merge remote-tracking branch 'origin/master' into emacs-25
-
-2015-11-13 l3thal <kwhite@gnu.org>
-
- Merge branch 'erc-async-reconnect' into emacs-25
-
- Reconnect asynchronously.
-
2015-11-13 Paul Eggert <eggert@cs.ucla.edu>
Merge from gnulib
mflt_run to leave the output areas unchanged on failure, as
this isn’t part of its interface spec.
-2015-11-13 Eli Zaretskii <eliz@gnu.org>
-
- Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25
-
-2015-11-13 Paul Eggert <eggert@cs.ucla.edu>
-
- Port recent XCB changes to 64-bit ‘long int’
-
- For historical reasons, libX11 represents 32-bit values like Atoms as
- ‘long int’ even on platforms where ‘long int’ is 64 bits. XCB doesn’t
- do that, so adapt the recent XCB code to behave properly on 64-bit
- platforms. Also, fix what appears to be a bug in the interpretation
- of xcb_get_property_value_length, at least on my Fedora platform
- which is running libxcb-1.11-5.fc21.
- * src/xfns.c (x_real_pos_and_offsets):
- * src/xterm.c (get_current_wm_state):
- xcb_get_property_value_length returns a byte count, not a word count.
- For 32-bit quantities, xcb_get_property_value returns a vector
- of 32-bit words, not of (possibly 64-bit) long int.
-
- Backport.
-
-2015-11-13 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/undo.c (run_undoable_change): Now static.
-
- Backport.
-
-2015-11-13 Eli Zaretskii <eliz@gnu.org>
-
- Remove support for ':timeout' from w32 tray notifications
-
- * src/w32fns.c (Fw32_notification_notify): Delete the code that
- supports ':timeout'.
- (syms_of_w32fns): Don't DEFSYM ':timeout'. This avoids clashes
- with dbusbind.c when D-Bus is compiled in.
-
- * doc/lispref/os.texi (Desktop Notifications): Don't mention
- ':timeout'.
-
- Backport.
-
-2015-11-13 Juanma Barranquero <lekktu@gmail.com>
-
- * test/automated/simple-test.el: Add test for bug#20698 (bug#21885)
-
- (simple-test--transpositions): New macro.
- (simple-transpose-subr): New test.
-
- Backport.
-
-2015-11-13 Juanma Barranquero <lekktu@gmail.com>
-
- * lisp/progmodes/elisp-mode.el: Declare function `project-roots'
-
- Backport.
-
-2015-11-13 Juanma Barranquero <lekktu@gmail.com>
-
- * src/undo.c: Small fixes for previous change
-
- (run_undoable_change): Mark void argument list.
- (record_property_change): Remove unused variable `boundary'.
-
- Backport.
-
-2015-11-13 Eli Zaretskii <eliz@gnu.org>
-
- Add a few more variables to redisplay--variables
-
- * lisp/frame.el (redisplay--variables): Add bidi-paragraph-direction
- and bidi-display-reordering to the list.
-
- Backport.
-
-2015-11-13 Eli Zaretskii <eliz@gnu.org>
-
- * lisp/loadup.el: Enlarge the size of the hash table to 80000.
-
- Backport.
-
-2015-11-13 Eli Barzilay <eli@barzilay.org>
-
- Fix point positioning after transposing with negative arg
-
- * lisp/simple.el (transpose-subr): When invoked with a negative
- argument, move point to after the transposed text, like we do
- when invoked with a positive argument. (Bug#21885)
-
- Backport.
-
-2015-11-13 Eli Zaretskii <eliz@gnu.org>
-
- Fix last change in shr.el
-
- * lisp/net/shr.el (shr--have-one-fringe-p): Rename from
- have-fringes-p. All callers changed. Doc fix. (Bug#21895)
-
- Backport.
-
-2015-11-13 Eli Zaretskii <eliz@gnu.org>
-
- Fix last change
-
- * src/w32fns.c (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]:
- Don't DEFSYM tray notification symbols if D-Bus is being used.
-
- Backport.
-
-2015-11-13 Eli Zaretskii <eliz@gnu.org>
-
- Another fix for MinGW64 and Cygwin builds due to notifications
-
- * src/w32fns.c: Ifdef away tray notification code if D-Bus is
- being compiled into Emacs.
- (syms_of_w32fns) [WINDOWSNT && !HAVE_DBUS]: Don't defsubr
- Sw32_notification_notify and Sw32_notification_close if the code
- is not compiled. Reported by Andy Moreton <andrewjmoreton@gmail.com>.
-
- Backport.
-
-2015-11-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- Remove intern calls and XXX comments from Fx_export_frames
-
- * src/xfns.c (Fx_export_frames): Use Qpdf, Qpng, Qpostscript, and
- Qsvg instead of intern calls. Use "postscript" instead of "ps"
- for consistency with image types. Remove XXX comments.
- (syms_of_xfns) <Qpdf>: DEFSYM it.
-
- Backport.
-
2015-11-13 Paul Eggert <eggert@cs.ucla.edu>
Port recent XCB changes to 64-bit ‘long int’
* src/undo.c (run_undoable_change): Now static.
-2015-11-13 Michael Albinus <michael.albinus@gmx.de>
+2016-01-30 Michael Albinus <michael.albinus@gmx.de>
Adapt Tramp version, do not merge with master
Sw32_notification_notify and Sw32_notification_close if the code
is not compiled. Reported by Andy Moreton <andrewjmoreton@gmail.com>.
-2015-11-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2016-01-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2015-11-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Remove intern calls and XXX comments from Fx_export_frames
for consistency with image types. Remove XXX comments.
(syms_of_xfns) <Qpdf>: DEFSYM it.
-2015-11-13 Eric Hanchrow <eric.hanchrow@gmail.com>
+2016-01-30 Eric Hanchrow <eric.hanchrow@gmail.com>
+2015-11-12 Eric Hanchrow <eric.hanchrow@gmail.com>
shr: don't invoke unbound function (Bug#21895)
entry to its initial value to make the test repeatable in interactive
sessions (assuming it doesn't fail and crashes Emacs, of course).
-2015-11-13 Artur Malabarba <bruce.connor.am@gmail.com>
+2016-01-30 Artur Malabarba <bruce.connor.am@gmail.com>
* test/automated/cl-lib-tests.el (cl-lib-struct-constructors): Small fix
-2015-11-12 Phillip Lord <phillip.lord@russet.org.uk>
+2016-01-30 Phillip Lord <phillip.lord@russet.org.uk>
: Tests for undo-auto functionality.
+2015-11-12 Artur Malabarba <bruce.connor.am@gmail.com>
+
+ * test/automated/cl-lib-tests.el (cl-lib-struct-constructors):
+ Small fix.
2015-11-12 Phillip Lord <phillip.lord@newcastle.ac.uk>
better with a "^" in the `interactive' declaration so selection works
as expected.
-2015-11-12 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+2016-01-30 Thomas Fitzsimmons <fitzsim@fitzsim.org>
Sync with soap-client repository, version 3.0.2
* lisp/net/soap-inspect.el: Remove version header.
* lisp/net/soap-client.el, lisp/net/soap-inspect.el: Fix first line header
+2015-11-11 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+
+ Sync with soap-client repository, version 3.0.2
+
+ * soap-client.el: Bump version to 3.0.2.
+
+ * soap-client.el (soap-warning): Use format, not format-message.
+
+ * soap-client.el: Add cl-lib to Package-Requires. Require cl-lib.
+ (soap-validate-xs-simple-type): Use cl-labels instead of cl-flet.
+
+ * soap-client.el: Support Emacs versions that do not have
+ define-error.
+
+ * soap-inspect.el: Remove version header.
+
+ * soap-client.el, soap-inspect.el, jira2.el: Fix first line header
format.
2015-11-11 Alan Mackenzie <acm@muc.de>
* doc/lispref/os.texi (Desktop Notifications): Describe the native
w32 tray notifications.
-2015-11-11 Alan Mackenzie <acm@muc.de>
+2016-01-30 Alan Mackenzie <acm@muc.de>
First commit to scratch/follow. Make Isearch work with Follow Mode, etc.
* test/automated/map-tests.el (test-map-merge-with): New test.
-2015-11-10 Karl Fogel <kfogel@red-bean.com>
+2015-11-09 Karl Fogel <kfogel@red-bean.com>
Fix some recently-perturbed bookmark autoloads
introduced by my recent commit adding/changing the above functions
(Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).
+2016-01-30 Noah Friedman <friedman@splode.com>
+
+ (ydump-buffer): Handle case where gap is at the start of buffer.
+ I don't recall if older versions of gdb were less strict but you
+ cannot dump a 0-length range in gdb 7.9.1.
+
+2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
2015-11-09 Noah Friedman <friedman@splode.com>
* etc/emacs-buffer.gdb (ydump-buffer): Handle case where gap is at
the start of buffer. I don't recall if older versions of gdb were
less strict but you cannot dump a 0-length range in gdb 7.9.1.
-2015-11-10 Dmitry Gutov <dgutov@yandex.ru>
+2015-11-09 Dmitry Gutov <dgutov@yandex.ru>
* lisp/progmodes/project.el: Update Commentary.
Merge branch 'project-next'
-2015-11-10 Dmitry Gutov <dgutov@yandex.ru>
+2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
Fold `project-ask-user' into `project-current'
* lisp/progmodes/project.el (project-find-functions): Remove
`project-ask-user'.
+2015-11-09 Dmitry Gutov <dgutov@yandex.ru>
+
+ Fold `project-ask-user' into `project-current'
+
+ * lisp/progmodes/project.el (project-find-functions):
+ Remove `project-ask-user'.
(project-ask-user): Remove function and the corresponding
`project-roots' implementation.
(project-current): Add a new argument, MAYBE-PROMPT. Prompt the
any Emacs integer.
* src/lisp.h (lisp_word_count): Remove; no longer used.
-2015-11-09 Dmitry Gutov <dgutov@yandex.ru>
+2016-01-30 Dmitry Gutov <dgutov@yandex.ru>
+2015-11-08 Dmitry Gutov <dgutov@yandex.ru>
Make sure that the ignore file exists
* lisp/vc/vc.el (vc-default-ignore-completion-table):
Make sure that the ignore file exists.
-2015-11-09 Michael Sperber <mike@xemacs.org>
+2016-01-30 Michael Sperber <mike@xemacs.org>
* lisp/gnus-sum.el (gnus-summary-backend-map): Bind B-backspace to
+2015-11-08 Michael Sperber <mike@xemacs.org>
+
+ * gnus-sum.el (gnus-summary-backend-map): Bind B-backspace to
`gnus-summary-delete-article` in a way that also works on XEmacs.
2015-11-08 Simen Heggestøyl <simenheg@gmail.com>
Remove directories inside the project roots from the result.
(http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg00536.html)
-2015-11-08 Dmitry Gutov <dgutov@yandex.ru>
+2015-11-07 Dmitry Gutov <dgutov@yandex.ru>
Move and rename xref-find-regexp to the project package
This file records repository revisions from
commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-commit 06da00c6cfb5f3cafbad92bd4584a0f50343a568 (inclusive).
+2016-03-04a00c6cfb5f3cafbad92bd4584a0f50343a568 (inclusive).
+2016-02-15decb15e0496cec0c48d980c88a5a9d7cc00da (inclusive).
+2016-02-04b6d89ff9288a49099f041752908b5eb9613e (inclusive).
+commit ba1422e12f80ae1eb2aa9d0ce80c14e3ee4b3950 (inclusive).
See ChangeLog.1 for earlier changes.
;; Local Variables:
# Execute in sequence, so that multiple user goals don't conflict.
.NOTPARALLEL:
+# 'all' if a .git subdirectory is present, empty otherwise.
+ALL_IF_GIT = $(subst .git,all,$(wildcard .git))
+
configure:
@echo >&2 'There seems to be no "configure" file in this directory.'
- @echo >&2 'Running ./autogen.sh ...'
- ./autogen.sh
+ @echo >&2 Running ./autogen.sh $(ALL_IF_GIT) ...
+ ./autogen.sh $(ALL_IF_GIT)
@echo >&2 '"configure" file built.'
Makefile: configure
about possibly-questionable C code. This is intended for developers
and is useful with GNU-compatible compilers. On a recent GNU system
there should be no warnings; on older and on non-GNU systems the
-generated warnings may still be useful, though you may prefer building
-with 'make WERROR_CFLAGS=' so that the warnings are not treated as
-errors.
+generated warnings may still be useful, though you may prefer
+configuring with --enable-gcc-warnings=warn-only so they are not
+treated as errors. The default is --enable-gcc-warnings=warn-only if
+it appears to be a developer build, and is --disable-gcc-warnings
+otherwise.
Use --disable-silent-rules to cause 'make' to give more details about
the commands it executes. This can be helpful when debugging a build
you can build the manuals.
To use the autotools, run the following shell command to generate the
-'configure' script and some related files:
+'configure' script and some related files, and to set up your git
+configuration:
- $ ./autogen.sh
+ $ ./autogen.sh all
You can then configure your build as follows:
TAGS tags: lib lib-src src
$(MAKE) -C src tags
-check check-expensive: all
- @if test ! -d test/automated; then \
+.PHONY: have-tests
+have-tests:
+ @if test ! -d test; then \
echo "You do not seem to have the test/ directory."; \
echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
- else \
- $(MAKE) -C test/automated $@; \
+ exit 1; \
fi
+check check-maybe check-expensive: have-tests all
+ $(MAKE) -C test $@
+
dist:
cd ${srcdir}; ./make-dist
$(MAKE) -C doc/$(subst -, ,$@)
.PHONY: $(DOCS) docs pdf ps
-.PHONY: info dvi dist check check-expensive html info-real info-dir check-info
+.PHONY: info dvi dist check check-maybe check-expensive html info-real info-dir check-info
## TODO add etc/refcards.
docs: $(DOCS)
$(MAKE) all
.PHONY: ChangeLog change-history change-history-commit change-history-nocommit
-.PHONY: emacs-25-branch-is-current unchanged-history-files
+.PHONY: preferred-branch-is-current unchanged-history-files
CHANGELOG = ChangeLog
emacslog = build-aux/gitlog-to-emacslog
./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
# Check that we are in a good state for changing history.
-emacs-25-branch-is-current:
- git branch | grep -q '^\* emacs-25$$'
+PREFERRED_BRANCH = master
+preferred-branch-is-current:
+ git branch | grep -q '^\* $(PREFERRED_BRANCH)$$'
unchanged-history-files:
x=$$(git diff-files --name-only $(CHANGELOG_N) $(emacslog)) && \
test -z "$$x"
# Copy newer commit messages to the start of the ChangeLog history file,
# and consider them to be older.
-change-history-nocommit: emacs-25-branch-is-current unchanged-history-files
+change-history-nocommit: preferred-branch-is-current unchanged-history-files
-rm -f ChangeLog.tmp
$(MAKE) ChangeLog CHANGELOG=ChangeLog.tmp
sed '/^This file records repository revisions/,$$d' \
See the end of the file for license conditions.
-This directory tree holds version 25.0.93 of GNU Emacs, the extensible,
+This directory tree holds version 25.1.50 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU
__CYGWIN__ Ditto
GNU_LINUX
HPUX
-IRIX6_5
MSDOS Compiling the MS-DOS port.
__MSDOS__ Ditto.
__DJGPP_MINOR__ Minor version number of the DJGPP library; used only in msdos.c and dosfns.c.
HAVE_FUTIMESAT
HAVE_GAI_STRERROR
HAVE_GCONF
-HAVE_GETADDRINFO
HAVE_GETDELIM
HAVE_GETGRENT
HAVE_GETHOSTNAME
HAVE_GTK_WIDGET_SET_HAS_WINDOW
HAVE_GTK_WINDOW_SET_HAS_RESIZE_GRIP
HAVE_G_TYPE_INIT
-HAVE_H_ERRNO
HAVE_IFADDRS_H
HAVE_IMAGEMAGICK
HAVE_INET_SOCKETS
HAVE_READLINK
HAVE_READLINKAT
HAVE_RECVFROM
-HAVE_RES_INIT
HAVE_RINT
HAVE_RSVG
HAVE_SELECT
NSIG_MINIMUM
NULL_DEVICE
PAGESIZE
-PREFER_VSUSP
PTY_ITERATION
PTY_NAME_SPRINTF
PTY_OPEN
lisp/net/tramp*.el
lisp/url/url-tramp.el
doc/misc/tramp*.texi
- test/automated/tramp-tests.el
+ test/lisp/net/tramp-tests.el
D-Bus
src/dbusbind.c
lisp/net/secrets.el
lisp/net/zeroconf.el
doc/misc/dbus.texi
- test/automated/dbus-tests.el
+ test/lisp/net/dbus-tests.el
File Notifications
src/gfilenotify.c
src/kqueue.c
lisp/filenotify.el
- test/automated/file-notify-tests.el
+ test/lisp/filenotify-tests.el
Simen Heggestøyl
lisp/textmodes/css-mode.el
lisp/autorevert.el
lisp/eshell/em-tramp.el
lisp/notifications.el
- test/automated/auto-revert-tests.el
- test/automated/inotify-test.el
- test/automated/vc-tests.el
+ test/lisp/autorevert-tests.el
+ test/src/inotify-test.el
Nicolas Petton
lisp/emacs-lisp/subr-x.el
(require 'smerge-mode)
(defvar gitmerge-skip-regexp
- "back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk\\|\
-Auto-commit"
+ ;; We used to include "sync" in there, but in my experience it only
+ ;; caused false positives. --Stef
+ "back[- ]?port\\|cherry picked from commit\\|\\(do not\\|no need to\\) merge\\|\
+re-?generate\\|bump version\\|from trunk\\|Auto-commit"
"Regexp matching logs of revisions that might be skipped.
`gitmerge-missing' will ask you if it should skip any matches.")
'((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*"
(defun gitmerge-highlight-skip-regexp ()
"Highlight strings that match `gitmerge-skip-regexp'."
(save-excursion
- (while (re-search-forward gitmerge-skip-regexp nil t)
- (put-text-property (match-beginning 0) (match-end 0)
- 'face 'font-lock-warning-face))))
+ (let ((case-fold-search t))
+ (while (re-search-forward gitmerge-skip-regexp nil t)
+ (put-text-property (match-beginning 0) (match-end 0)
+ 'face 'font-lock-warning-face)))))
(defun gitmerge-missing (from)
"Return the list of revisions that need to be merged from FROM.
;; 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))
"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)))
(if end (list (concat beg "~.." end))
`("-1" ,beg)))
(insert "\n")
+ ;; Truncate to 72 chars so that the resulting ChangeLog line fits in 80.
+ (goto-char (point-min))
+ (while (re-search-forward "^\\(.\\{69\\}\\).\\{4,\\}" nil t)
+ (replace-match "\\1..."))
(buffer-string)))
(defun gitmerge-apply (missing from)
careadlinkat close-stream count-one-bits count-trailing-zeros
crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512
dtoastr dtotimespec dup2 environ execinfo faccessat
- fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync
+ fcntl fcntl-h fdatasync fdopendir filemode filevercmp fstatat fsync
getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog
ignore-value intprops largefile lstat
manywarnings memrchr mkostemp mktime
pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat
- sig2str socklen stat-time stdalign stddef stdio
+ sig2str socklen stat-time std-gnu11 stdalign stddef stdio
stpcpy strftime strtoimax strtoumax symlink sys_stat
sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub
unsetenv update-copyright utimens
--- /dev/null
+HOW TO TRIAGE EMACS BUGS -*- outline -*-
+
+This document just describes the procedure of triaging bugs, for information on
+how to work with the bug tracker, see the bugtracker file in this same directory
+for the basics. You can also install the debbugs ELPA package for access to M-x
+debbugs-gnu, an emacs interface to debbugs, and M-x debbugs-org, an emacs
+interface via org-mode.
+
+* Bug backlog triage procedure
+
+The goal of this triage is to prune down the list of old bugs, closing
+the ones that are not reproducible on the current release.
+
+ 1. To start, enter debbugs mode (either debbugs-gnu, debbugs-org, or via the
+ web browser), and accept the default list option of bugs that have severity
+ serious, important, or normal.
+ 2. This will also show closed bugs that have yet to be archived. You can
+ filter these out in debbugs-gnu with "x" (debbugs-gnu-toggle-suppress).
+ 3. For each bug, we want to primarily make sure it is still
+ reproducible. A bug can and should stay open as long as it is
+ still a bug and no one has fixed it. The following is a
+ suggested checklist to follow for handling these bugs, along with
+ example replies. Closing, tagging, etc., are done
+ with debbugs control messages, which in debbugs-gnu is initiated
+ with a "C".
+ [ ] Read the mail thread for the bug. Find out if anyone has
+ been able to reproduce this on the current release. If
+ someone has been able to, then your work is finished for this
+ bug.
+ [ ] Make sure there's enough information to reproduce the bug.
+ It should be very clear how to reproduce. If not, please ask
+ for specific steps to reproduce. If you don't get them, and
+ you can't reproduce without them, you can close as
+ "doneunreproducible". Sometimes there is specific hardware
+ involved, such as particular models of keyboards, or it may
+ simply involve a platform you don't have access to. It's
+ fine to ignore those, and let a future triager that is better
+ equipped to reproduce it handle it.
+
+ An example reply asking for clear reproduction steps would be
+ something like: "Hi! In the interest of seeing whether this
+ is reproducible, and to aid anyone who will look at this bug
+ in the future, can you please give instructions on how to
+ reproduce this bug starting from an emacs without
+ configuration ("emacs -Q")?
+ [ ] If there is enough detail to reproduce, but no one has
+ mentioned being able to reproduce on the current release,
+ read the bug description and attempt to reproduce on an emacs
+ started with "emacs -Q" (the goal is to not let our personal
+ configs interfere with bug testing).
+
+ If you can reproduce, then reply on the thread (either on the
+ original message, or anywhere you find appropriate) that you
+ can reproduce this on the current release. If your
+ reproduction gives additional info (such as a backtrace),
+ then add that as well, since it will help whoever attempts to
+ fix it.
+
+ Example reply: "I'd just like to add that I can reproduce
+ this on the latest version of Emacs, Emacs 25."
+
+ If you can't reproduce, state that you can't reproduce it on
+ the current release, ask if they can try again against the
+ current release. Tag the bug as "unreproducable". Wait a
+ few weeks for their reply - if they can reproduce it, then
+ that's great, otherwise close as "doneunreproducible".
+
+ Example reply: "I've attempted to reproduce this on the
+ latest version of emacs, Emacs 25, but haven't been able to.
+ Can you try to reproduce this on this version, and let us
+ know if you are able to? If I don't hear back in a few
+ weeks, I'll just close this bug as unreproducible."
+ [ ] Check that the priority is reasonable. Most bugs should be
+ marked as normal, but crashers and security issues can be
+ marked as serious.
+ 4. Your changes will take some time to take effect. After a period of minutes
+ to hours, you will get a mail telling you the control message has been
+ processed. At this point, if there were no errors detected, you and
+ everyone else can see your changes. If there are errors, read the error
+ text - if you need help, consulting the bugtracker documentation in this
+ same directory.
+
+* New bug triage process
+
+The goal of the new bug triage process is similar to the backlog triage process,
+except that the focus is on prioritizing the bug, and making sure it is has
+necessary information for others to act on.
+
+For each new bug, ask the following questions:
+
+ 1. Is the bug report written in a way to be easy to reproduce (starts from
+ emacs -Q, etc.)? If not, ask the reporter to try and reproduce it on an
+ emacs without customization.
+ 2. Is the bug report written against the latest emacs? If not, try to
+ reproduce on the latest version, and if it can't be reproduced, ask the
+ reporter to try again with the latest version.
+ 3. Is the bug the same as another bug? If so, merge the bugs.
+ 4. What is the priority of the bug? Add a priority: serious, important,
+ normal, minor, or wishlist.
+ 5. Who should be the owner? This depends on what component the bug is part
+ of. You can look at the admin/MAINTAINERS file (then you can just search
+ emacs-devel to match the name with an email address).
+
+In the debbugs-gnu buffer, bugs are marked in the "State" column
+according to the communication flow. Red bugs mean that nobody has
+answered, these bugs need primary attention. Green bugs flag that
+there is a recent communication about, and orange bugs flag that the
+bug hasn't been touched for at least two weeks.
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
if [ -d .bzr ]; then
vcs=bzr
-elif [ -d .git ]; then
+elif [ -e .git ]; then
vcs=git
else
die "Cannot determine vcs"
return 2
}
+do_autoconf=false
+test $# -eq 0 && do_autoconf=true
+do_git=false
+
+for arg; do
+ case $arg in
+ --help)
+ exec echo "$0: usage: $0 [all|autoconf|git]";;
+ all)
+ do_autoconf=true
+ test -e .git && do_git=true;;
+ autoconf)
+ do_autoconf=true;;
+ git)
+ do_git=true;;
+ *)
+ echo >&2 "$0: $arg: unknown argument"; exit 1;;
+ esac
+done
+
+
+# Generate Autoconf and Automake related files, if requested.
-cat <<EOF
-Checking whether you have the necessary tools...
-(Read INSTALL.REPO for more details on building Emacs)
+if $do_autoconf; then
-EOF
+ echo 'Checking whether you have the necessary tools...
+(Read INSTALL.REPO for more details on building Emacs)'
-missing=
+ missing=
-for prog in $progs; do
+ for prog in $progs; do
sprog=`echo "$prog" | sed 's/-/_/g'`
eval ${sprog}_why=\""$stat"\"
fi
-done
-
+ done
-if [ x"$missing" != x ]; then
- cat <<EOF
+ if [ x"$missing" != x ]; then
-Building Emacs from the repository requires the following specialized programs:
-EOF
+ echo '
+Building Emacs from the repository requires the following specialized programs:'
for prog in $progs; do
sprog=`echo "$prog" | sed 's/-/_/g'`
done
- cat <<EOF
-
-Your system seems to be missing the following tool(s):
-EOF
+ echo '
+Your system seems to be missing the following tool(s):'
for prog in $missing; do
sprog=`echo "$prog" | sed 's/-/_/g'`
echo "$prog ($why)"
done
- cat <<EOF
-
+ echo '
If you think you have the required tools, please add them to your PATH
and re-run this script.
instead of this script.
-Please report any problems with this script to bug-gnu-emacs@gnu.org .
-EOF
+Please report any problems with this script to bug-gnu-emacs@gnu.org .'
exit 1
+ fi
+
+ echo 'Your system has the required tools.'
+ echo "Running 'autoreconf -fi -I m4' ..."
+
+
+ ## Let autoreconf figure out what, if anything, needs doing.
+ ## Use autoreconf's -f option in case autoreconf itself has changed.
+ autoreconf -fi -I m4 || exit $?
+
+ ## Create a timestamp, so that './autogen.sh; make' doesn't
+ ## cause 'make' to needlessly run 'autoheader'.
+ echo timestamp > src/stamp-h.in || exit
+fi
+
+
+# True if the Git setup was OK before autogen.sh was run.
+
+git_was_ok=true
+
+if $do_git; then
+ case `cp --help 2>/dev/null` in
+ *--backup*--verbose*)
+ cp_options='--backup=numbered --verbose';;
+ *)
+ cp_options='-f';;
+ esac
fi
-echo 'Your system has the required tools.'
-echo "Running 'autoreconf -fi -I m4' ..."
+# Like 'git config NAME VALUE' but verbose on change and exiting on failure.
+# Also, do not configure unless requested.
+
+git_config ()
+{
+ name=$1
+ value=$2
+
+ ovalue=`git config --get "$name"` && test "$ovalue" = "$value" || {
+ if $do_git; then
+ if $git_was_ok; then
+ echo 'Configuring local git repository...'
+ case $cp_options in
+ --backup=*)
+ config=$git_common_dir/config
+ cp $cp_options --force -- "$config" "$config" || exit;;
+ esac
+ fi
+ echo "git config $name '$value'"
+ git config "$name" "$value" || exit
+ fi
+ git_was_ok=false
+ }
+}
+
+## Configure Git, if requested.
-## Let autoreconf figure out what, if anything, needs doing.
-## Use autoreconf's -f option in case autoreconf itself has changed.
-autoreconf -fi -I m4 || exit $?
+# Get location of Git's common configuration directory. For older Git
+# versions this is just '.git'. Newer Git versions support worktrees.
-## Create a timestamp, so that './autogen.sh; make' doesn't
-## cause 'make' to needlessly run 'autoheader'.
-echo timestamp > src/stamp-h.in || exit
+test -e .git && git_common_dir=`git rev-parse --git-common-dir 2>/dev/null` ||
+ git_common_dir=.git
+hooks=$git_common_dir/hooks
+# Check hashes when transferring objects among repositories.
-## Configure Git, if using Git.
-if test -d .git && (git status -s) >/dev/null 2>&1; then
+git_config transfer.fsckObjects true
- # Configure 'git diff' hunk header format.
- git config 'diff.elisp.xfuncname' \
- '^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)' || exit
- git config 'diff.texinfo.xfuncname' \
- '^@node[[:space:]]+([^,[:space:]][^,]+)' || exit
+# Configure 'git diff' hunk header format.
+git_config diff.elisp.xfuncname \
+ '^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)'
+git_config 'diff.m4.xfuncname' '^((m4_)?define|A._DEFUN(_ONCE)?)\([^),]*'
+git_config 'diff.make.xfuncname' \
+ '^([$.[:alnum:]_].*:|[[:alnum:]_]+[[:space:]]*([*:+]?[:?]?|!?)=|define .*)'
+git_config 'diff.shell.xfuncname' \
+ '^([[:space:]]*[[:alpha:]_][[:alnum:]_]*[[:space:]]*\(\)|[[:alpha:]_][[:alnum:]_]*=)'
+git_config diff.texinfo.xfuncname \
+ '^@node[[:space:]]+([^,[:space:]][^,]+)'
- # Install Git hooks.
- tailored_hooks=
- sample_hooks=
+# Install Git hooks.
- for hook in commit-msg pre-commit; do
- cmp build-aux/git-hooks/$hook .git/hooks/$hook >/dev/null 2>&1 ||
+tailored_hooks=
+sample_hooks=
+
+for hook in commit-msg pre-commit; do
+ cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
tailored_hooks="$tailored_hooks $hook"
- done
- for hook in applypatch-msg pre-applypatch; do
- test ! -r .git/hooks/$hook.sample ||
- cmp .git/hooks/$hook.sample .git/hooks/$hook >/dev/null 2>&1 ||
+done
+for hook in applypatch-msg pre-applypatch; do
+ cmp -- "$hooks/$hook.sample" "$hooks/$hook" >/dev/null 2>&1 ||
sample_hooks="$sample_hooks $hook"
- done
+done
- if test -n "$tailored_hooks$sample_hooks"; then
+if test -n "$tailored_hooks$sample_hooks"; then
+ if $do_git; then
echo "Installing git hooks..."
- case `cp --help 2>/dev/null` in
- *--backup*--verbose*)
- cp_options='--backup=numbered --verbose';;
- *)
- cp_options='-f';;
- esac
-
if test -n "$tailored_hooks"; then
for hook in $tailored_hooks; do
- cp $cp_options build-aux/git-hooks/$hook .git/hooks || exit
- chmod a-w .git/hooks/$hook || exit
+ dst=$hooks/$hook
+ cp $cp_options -- build-aux/git-hooks/$hook "$dst" || exit
+ chmod -- a-w "$dst" || exit
done
fi
if test -n "$sample_hooks"; then
for hook in $sample_hooks; do
- cp $cp_options .git/hooks/$hook.sample .git/hooks/$hook || exit
- chmod a-w .git/hooks/$hook || exit
+ dst=$hooks/$hook
+ cp $cp_options -- "$dst.sample" "$dst" || exit
+ chmod -- a-w "$dst" || exit
done
fi
+ else
+ git_was_ok=false
fi
fi
-echo "You can now run './configure'."
+if test ! -f configure; then
+ echo "You can now run '$0 autoconf'."
+elif test -e .git && test $git_was_ok = false && test $do_git = false; then
+ echo "You can now run '$0 git'."
+elif test ! -f config.status ||
+ test -n "`find src/stamp-h.in -newer config.status`"; then
+ echo "You can now run './configure'."
+fi
exit 0
fi
# If this is not a Git repository, just generate an empty ChangeLog.
-test -d .git || {
+test -e .git || {
>"$output"
exit
}
AC_PREREQ(2.65)
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
-AC_INIT(GNU Emacs, 25.0.93, bug-gnu-emacs@gnu.org)
+AC_INIT(GNU Emacs, 25.1.50, bug-gnu-emacs@gnu.org)
dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
dnl and then quoted again for a C string. Separate options with spaces.
OPTION_DEFAULT_ON([gif],[don't compile with GIF image support])
OPTION_DEFAULT_ON([png],[don't compile with PNG image support])
OPTION_DEFAULT_ON([rsvg],[don't compile with SVG image support])
+OPTION_DEFAULT_ON([libsystemd],[don't compile with libsystemd support])
OPTION_DEFAULT_OFF([cairo],[compile with Cairo drawing (experimental)])
OPTION_DEFAULT_ON([xml2],[don't compile with XML parsing support])
OPTION_DEFAULT_ON([imagemagick],[don't compile with ImageMagick image support])
[Show Gtk+/Gdk deprecation warnings for Gtk+ >= 3.0])],
[ac_enable_gtk_deprecation_warnings="${enableval}"],[])
+BUILD_DETAILS=
+AC_ARG_ENABLE([build-details],
+ [AS_HELP_STRING([--disable-build-details],
+ [Make the build more deterministic by omitting host
+ names, time stamps, etc. from the output.])],
+ [test "$enableval" = no && BUILD_DETAILS=--no-build-details])
+AC_SUBST([BUILD_DETAILS])
+
dnl This used to use changequote, but, apart from 'changequote is evil'
dnl per the autoconf manual, we can speed up autoconf somewhat by quoting
dnl the great gob of text. Thus it's not processed for possible expansion.
* ) unported=yes ;;
esac
opsys=darwin
- ## Use fink packages if available.
- ## FIXME find a better way to do this: http://debbugs.gnu.org/11507
-## if test -d /sw/include && test -d /sw/lib; then
-## GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib"
-## NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS}
-## fi
+ ## FIXME: Find a way to use Fink if available (Bug#11507).
;;
## Chromium Native Client
opsys=aix4-2
;;
- ## Silicon Graphics machines
- ## Iris 4D
- mips-sgi-irix6.5 )
- opsys=irix6-5
- # Without defining _LANGUAGE_C, things get masked out in the headers
- # so that, for instance, grepping for 'free' in stdlib.h fails and
- # AC_HEADER_STD_C fails. (MIPSPro 7.2.1.2m compilers, Irix 6.5.3m).
- NON_GCC_TEST_OPTIONS="-D_LANGUAGE_C"
- ;;
-
## Suns
*-sun-solaris* \
| i[3456]86-*-solaris2* | i[3456]86-*-sunos5* \
if test x$GCC = xyes; then
test "x$GCC_TEST_OPTIONS" != x && CC="$CC $GCC_TEST_OPTIONS"
-else
- test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS"
fi
dnl This is used in lib/Makefile.am to use nt/gnulib.mk, the
esac
fi
+# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found])
+# ---------------------------------------------------------------------------
+# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND.
+# Otherwise, run RUN-IF-NOT-FOUND.
+AC_DEFUN([gl_GCC_VERSION_IFELSE],
+ [AC_PREPROC_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__)
+/* ok */
+#else
+# error "your version of gcc is older than $1.$2"
+#endif
+ ]]),
+ ], [$3], [$4])
+ ]
+)
+
AC_ARG_ENABLE([gcc-warnings],
- [AS_HELP_STRING([--enable-gcc-warnings],
- [turn on lots of GCC warnings/errors. This is intended for
- developers, and may generate false alarms when used
- with older or non-GNU development tools.])],
+ [AS_HELP_STRING([--enable-gcc-warnings@<:@=TYPE@:>@],
+ [control generation of GCC warnings. The TYPE 'yes'
+ means to fail if any warnings are issued; 'warn-only'
+ means issue warnings without failing (default for
+ developer builds); 'no' means disable warnings
+ (default for non-developer builds).])],
[case $enableval in
- yes|no) ;;
+ yes|no|warn-only) ;;
*) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
esac
gl_gcc_warnings=$enableval],
- [gl_gcc_warnings=no]
+ [# By default, use 'warn-only' if it looks like the invoker of 'configure'
+ # is a developer as opposed to a builder. This is most likely true
+ # if GCC is recent enough and there is a .git directory or file;
+ # however, if there is also a .tarball-version file it is probably
+ # just a release imported into Git for patch management.
+ gl_gcc_warnings=no
+ if test -e "$srcdir"/.git && test ! -f "$srcdir"/.tarball-version; then
+ gl_GCC_VERSION_IFELSE([5], [3], [gl_gcc_warnings=warn-only])]
+ fi
)
# clang is unduly picky about some things.
# When compiling with GCC, prefer -isystem to -I when including system
# include files, to avoid generating useless diagnostics for the files.
-AS_IF([test "$gl_gcc_warnings" != yes],
+AS_IF([test $gl_gcc_warnings = no],
[
isystem='-I'
AS_IF([test "$emacs_cv_clang" = yes],
nw="$nw -Wwrite-strings"
;;
esac
- AS_IF([test -z "$nw"],
+ AS_IF([test $gl_gcc_warnings = yes],
[gl_WARN_ADD([-Werror], [WERROR_CFLAGS])])
AC_SUBST([WERROR_CFLAGS])
nw="$nw -Wvla" # Emacs uses <vla.h>.
nw="$nw -Wswitch-default" # Too many warnings for now
nw="$nw -Winline" # OK to ignore 'inline'
- nw="$nw -Wjump-misses-init" # We sometimes safely jump over init.
nw="$nw -Wstrict-overflow" # OK to optimize assuming that
# signed overflow has undefined behavior
nw="$nw -Wsync-nand" # irrelevant here, and provokes ObjC warning
dnl We need -znocombreloc if we're using a relatively recent GNU ld.
dnl If we can link with the flag, it shouldn't do any harm anyhow.
-dnl (Don't use '-z nocombreloc' as -z takes no arg on Irix.)
dnl Treat GCC specially since it just gives a non-fatal 'unrecognized option'
dnl if not built to support GNU ld.
dnl Current possibilities handled by sed (aix4-2 -> aix,
dnl gnu-linux -> gnu/linux, etc.):
-dnl gnu, gnu/linux, gnu/kfreebsd, aix, cygwin, darwin, hpux, irix.
+dnl gnu, gnu/linux, gnu/kfreebsd, aix, cygwin, darwin, hpux.
dnl And special cases: berkeley-unix, usg-unix-v, ms-dos, windows-nt.
SYSTEM_TYPE=`echo $opsys | sed -e 's/[[0-9]].*//' -e 's|-|/|'`
dnl checks for header files
AC_CHECK_HEADERS_ONCE(
+ malloc.h
sys/systeminfo.h
sys/sysinfo.h
coff.h pty.h
## $window_system is now set to the window system we will
## ultimately use.
-if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then
- # Too many warnings for now.
- nw=
- nw="$nw -Wsuggest-attribute=noreturn"
- gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
-
- gl_WARN_ADD([-Wno-unused-variable])
- gl_WARN_ADD([-Wno-unused-but-set-variable])
- gl_WARN_ADD([-Wno-unused-but-set-parameter])
-fi
-
term_header=
HAVE_X_WINDOWS=no
HAVE_X11=no
cygwin) hybrid_malloc=yes;;
esac
+if test "${system_malloc}" != yes && test "${doug_lea_malloc}" != yes \
+ && test "${UNEXEC_OBJ}" = unexelf.o; then
+ hybrid_malloc=yes
+fi
+
GMALLOC_OBJ=
+HYBRID_MALLOC=
if test "${system_malloc}" = "yes"; then
AC_DEFINE([SYSTEM_MALLOC], 1,
[Define to 1 to use the system memory allocator, even if it is not
elif test "$hybrid_malloc" = yes; then
AC_DEFINE(HYBRID_MALLOC, 1,
[Define to use gmalloc before dumping and the system malloc after.])
+ HYBRID_MALLOC=1
GNU_MALLOC=
GNU_MALLOC_reason="only before dumping"
GMALLOC_OBJ=gmalloc.o
of the main data segment.])
fi
fi
+AC_SUBST([HYBRID_MALLOC])
+AM_CONDITIONAL([HYBRID_MALLOC_LIB], [test -n "$HYBRID_MALLOC"])
AC_SUBST(GMALLOC_OBJ)
AC_SUBST(VMLIMIT_OBJ)
-if test "$doug_lea_malloc" = "yes" ; then
+if test "$doug_lea_malloc" = "yes" && test "$hybrid_malloc" != yes; then
if test "$GNU_MALLOC" = yes ; then
GNU_MALLOC_reason="
(Using Doug Lea's new malloc from the GNU C Library.)"
use_mmap_for_buffers=no
case "$opsys" in
- cygwin|mingw32|freebsd|irix6-5) use_mmap_for_buffers=yes ;;
+ cygwin|mingw32) use_mmap_for_buffers=yes ;;
esac
AC_FUNC_MMAP
OLD_LIBS=$LIBS
CFLAGS="$CFLAGS $IMAGEMAGICK_CFLAGS"
LIBS="$IMAGEMAGICK_LIBS $LIBS"
- AC_CHECK_FUNCS(MagickExportImagePixels MagickMergeImageLayers)
+ AC_CHECK_FUNCS(MagickExportImagePixels MagickMergeImageLayers MagickAutoOrientImage)
CFLAGS=$OLD_CFLAGS
LIBS=$OLD_LIBS
fi
fi
fi
+AC_CHECK_LIB(anl, getaddrinfo_a, HAVE_GETADDRINFO_A=yes)
+if test "${HAVE_GETADDRINFO_A}" = "yes"; then
+ AC_DEFINE(HAVE_GETADDRINFO_A, 1,
+[Define to 1 if you have getaddrinfo_a for asynchronous DNS resolution.])
+ GETADDRINFO_A_LIBS="-lanl"
+ AC_SUBST(GETADDRINFO_A_LIBS)
+fi
HAVE_GTK=no
GTK_OBJ=
AC_SUBST(LIBGNUTLS_LIBS)
AC_SUBST(LIBGNUTLS_CFLAGS)
+HAVE_LIBSYSTEMD=no
+if test "${with_libsystemd}" = "yes" ; then
+ dnl This code has been tested with libsystemd 222 and later.
+ dnl FIXME: Find the earliest version number for which Emacs should work,
+ dnl and change '222' to that number.
+ EMACS_CHECK_MODULES([LIBSYSTEMD], [libsystemd >= 222],
+ [HAVE_LIBSYSTEMD=yes], [HAVE_LIBSYSTEMD=no])
+ if test "${HAVE_LIBSYSTEMD}" = "yes"; then
+ AC_DEFINE(HAVE_LIBSYSTEMD, 1, [Define if using libsystemd.])
+ fi
+fi
+
+AC_SUBST(LIBSYSTEMD_LIBS)
+AC_SUBST(LIBSYSTEMD_CFLAGS)
+
NOTIFY_OBJ=
NOTIFY_SUMMARY=no
AC_SUBST(LIBXML2_LIBS)
AC_SUBST(LIBXML2_CFLAGS)
-# If netdb.h doesn't declare h_errno, we must declare it by hand.
-# On MinGW, that is provided by nt/inc/sys/socket.h and w32.c.
-if test "${opsys}" = "mingw32"; then
- emacs_cv_netdb_declares_h_errno=yes
-fi
-AC_CACHE_CHECK(whether netdb declares h_errno,
- emacs_cv_netdb_declares_h_errno,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
- [[return h_errno;]])],
- emacs_cv_netdb_declares_h_errno=yes, emacs_cv_netdb_declares_h_errno=no)])
-if test $emacs_cv_netdb_declares_h_errno = yes; then
- AC_DEFINE(HAVE_H_ERRNO, 1, [Define to 1 if netdb.h declares h_errno.])
-fi
-
# Check for mail-locking functions in a "mail" library. Probably this should
# have the same check as for liblockfile below.
AC_CHECK_LIB(mail, maillock, have_mail=yes, have_mail=no)
case "$opsys" in
aix4-2) mail_lock="lockf" ;;
- gnu|freebsd|dragonfly|netbsd|openbsd|darwin|irix6-5) mail_lock="flock" ;;
+ gnu|freebsd|dragonfly|netbsd|openbsd|darwin) mail_lock="flock" ;;
## On GNU/Linux systems, both methods are used by various mail programs.
## I assume most people are using newer mailers that have heard of flock.
getrusage get_current_dir_name \
lrand48 random rint \
select getpagesize setlocale newlocale \
-getrlimit setrlimit shutdown getaddrinfo \
+getrlimit setrlimit shutdown \
pthread_sigmask strsignal setitimer \
sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
gai_strerror sync \
dnl No need to check for posix_memalign if aligned_alloc works.
AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break])
+AC_CHECK_DECLS([aligned_alloc], [], [], [[#include <stdlib.h>]])
dnl Cannot use AC_CHECK_FUNCS
AC_CACHE_CHECK([for __builtin_unwind_init],
[emacs_cv_alternate_stack=yes],
[emacs_cv_alternate_stack=no])])
-# Do we have res_init, for detecting changes in /etc/resolv.conf?
-# On Darwin, res_init appears not to be useful: see bug#562 and
-# http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01467.html
-resolv=no
-
-if test $opsys != darwin; then
-
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>]],
- [[return res_init();]])],
- have_res_init=yes, have_res_init=no)
- if test "$have_res_init" = no; then
- OLIBS="$LIBS"
- LIBS="$LIBS -lresolv"
- AC_MSG_CHECKING(for res_init with -lresolv)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>]],
- [[return res_init();]])],
- have_res_init=yes, have_res_init=no)
- AC_MSG_RESULT($have_res_init)
- if test "$have_res_init" = yes ; then
- resolv=yes
- fi
- LIBS="$OLIBS"
- fi
-
- if test "$have_res_init" = yes; then
- AC_DEFINE(HAVE_RES_INIT, 1, [Define to 1 if res_init is available.])
- fi
-fi dnl !darwin
-
# Do we need the Hesiod library to provide the support routines?
dnl FIXME? Should we be skipping this on Darwin too?
LIBHESIOD=
+LIBRESOLV=
if test "$with_hesiod" != no ; then
# Don't set $LIBS here -- see comments above. FIXME which comments?
+ resolv=no
AC_CHECK_FUNC(res_send, , [AC_CHECK_FUNC(__res_send, ,
[AC_CHECK_LIB(resolv, res_send, resolv=yes,
[AC_CHECK_LIB(resolv, __res_send, resolv=yes)])])])
else
RESOLVLIB=
fi
+ hesiod=no
AC_CHECK_FUNC(hes_getmailhost, , [AC_CHECK_LIB(hesiod, hes_getmailhost,
hesiod=yes, :, $RESOLVLIB)])
if test x"$hesiod" = xyes; then
LIBHESIOD=-lhesiod
+ LIBRESOLV=$RESOLVLIB
fi
fi
AC_SUBST(LIBHESIOD)
-
-# Do we need libresolv (due to res_init or Hesiod)?
-if test "$resolv" = yes && test $opsys != darwin; then
- LIBRESOLV=-lresolv
-else
- LIBRESOLV=
-fi
AC_SUBST(LIBRESOLV)
# These tell us which Kerberos-related libraries to use.
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
case $opsys in
- irix6-5 | sol2* | unixware )
+ sol2* | unixware )
dnl Some SVr4s don't define NSIG in sys/signal.h for ANSI environments;
dnl instead, there's a system variable _sys_nsig. Unfortunately, we
dnl need the constant to dimension an array. So wire in the appropriate
case $opsys in
dnl SIGIO exists, but the feature doesn't work in the way Emacs needs.
dnl See eg <http://article.gmane.org/gmane.os.openbsd.ports/46831>.
- hpux* | irix6-5 | nacl | openbsd | sol2* | unixware )
+ hpux* | nacl | openbsd | sol2* | unixware )
emacs_broken_SIGIO=yes
;;
dnl NARROWPROTO, we will see the wrong function prototypes for X functions
dnl taking float or double parameters.
case $opsys in
- cygwin|gnu|gnu-linux|gnu-kfreebsd|irix6-5|freebsd|netbsd|openbsd)
+ cygwin|gnu|gnu-linux|gnu-kfreebsd|freebsd|netbsd|openbsd)
AC_DEFINE(NARROWPROTO, 1, [Define if system's imake configuration
file defines 'NeedWidePrototypes' as 'NO'.])
;;
dnl Used in process.c, this must be a loop, even if it only runs once.
-dnl (Except on SGI; see below. Take that, clarity and consistency!)
AH_TEMPLATE(PTY_ITERATION, [How to iterate over PTYs.])
dnl Only used if !PTY_ITERATION. Iterate from FIRST_PTY_LETTER to z,
dnl trying suffixes 0-16.
AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/pty/tty%c%x", c, i);])
;;
- irix6-5 )
- dnl It looks like this cannot be right, because it is not a loop.
- dnl However, process.c actually does this:
- dnl # ifndef __sgi
- dnl continue;
- dnl # else
- dnl return -1;
- dnl # endif
- dnl which presumably makes it OK, since irix == sgi (?).
- dnl FIXME it seems like this special treatment is unnecessary?
- dnl Why can't irix use a single-trip loop like eg cygwin?
- AC_DEFINE(PTY_ITERATION, [])
- dnl Not used, because PTY_ITERATION is defined.
- AC_DEFINE(FIRST_PTY_LETTER, ['q'])
- AC_DEFINE(PTY_OPEN, [ { struct sigaction ocstat, cstat; struct stat stb; char * name; sigemptyset(&cstat.sa_mask); cstat.sa_handler = SIG_DFL; cstat.sa_flags = 0; sigaction(SIGCHLD, &cstat, &ocstat); name = _getpty (&fd, O_RDWR | O_NDELAY, 0600, 0); sigaction(SIGCHLD, &ocstat, (struct sigaction *)0); if (name == 0) return -1; if (fd < 0) return -1; if (fstat (fd, &stb) < 0) return -1; strcpy (pty_name, name); }])
- dnl No need to get the pty name at all.
- AC_DEFINE(PTY_NAME_SPRINTF, [])
- dnl No need to use sprintf to get the tty name--we get that from _getpty.
- AC_DEFINE(PTY_TTY_NAME_SPRINTF, [])
- ;;
-
sol2* )
dnl On SysVr4, grantpt(3) forks a subprocess, so do not use
dnl O_CLOEXEC when opening the pty, and keep the SIGCHLD handler
case $opsys in
dnl Perry Smith <pedz@ddivt1.austin.ibm.com> says this is correct for AIX.
- dnl thomas@mathematik.uni-bremen.de says this is needed for IRIX.
- aix4-2 | cygwin | gnu | irix6-5 | dragonfly | freebsd | netbsd | openbsd | darwin )
+ aix4-2 | cygwin | gnu | dragonfly | freebsd | netbsd | openbsd | darwin )
AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1)
;;
AC_DEFINE(GC_SETJMP_WORKS, 1)
else
case $opsys in
- dnl irix: Tested on Irix 6.5. SCM worked on earlier versions.
- aix* | dragonfly | freebsd | netbsd | openbsd | irix6-5 | sol2* )
+ aix* | dragonfly | freebsd | netbsd | openbsd | sol2* )
AC_DEFINE(GC_SETJMP_WORKS, 1)
;;
esac
AC_DEFINE(HPUX, [], [Define if the system is HPUX.])
;;
- irix6-5)
- AC_DEFINE(USG, [])
- AC_DEFINE(USG5_4, [])
- AC_DEFINE(IRIX6_5, [], [Define if the system is IRIX.])
- ;;
-
mingw32)
AC_DEFINE(DOS_NT, [])
AC_DEFINE(WINDOWSNT, 1, [Define if compiling for native MS Windows.])
reopen it in the child.])
;;
- irix6-5)
- AC_DEFINE(PREFER_VSUSP, 1, [Define if process_send_signal should
- use VSUSP instead of VSWTCH.])
- ;;
-
sol2-10)
AC_DEFINE(_STRUCTURED_PROC, 1, [Needed for system_process_attributes
on Solaris.])
AC_SUBST(RALLOC_OBJ)
if test "$opsys" = "cygwin"; then
- CYGWIN_OBJ="sheap.o cygw32.o"
+ CYGWIN_OBJ="cygw32.o"
## Cygwin differs because of its unexec().
PRE_ALLOC_OBJ=
POST_ALLOC_OBJ=lastfile.o
for opt in XAW3D XPM JPEG TIFF GIF PNG RSVG CAIRO IMAGEMAGICK SOUND GPM DBUS \
GCONF GSETTINGS NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT \
LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS X_TOOLKIT X11 NS MODULES \
- XWIDGETS; do
+ XWIDGETS LIBSYSTEMD; do
case $opt in
NOTIFY|ACL) eval val=\${${opt}_SUMMARY} ;;
Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}
Does Emacs use -lotf? ${HAVE_LIBOTF}
Does Emacs use -lxft? ${HAVE_XFT}
+ Does Emacs use -lsystemd? ${HAVE_LIBSYSTEMD}
Does Emacs directly use zlib? ${HAVE_ZLIB}
Does Emacs have dynamic modules support? ${HAVE_MODULES}
Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}
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
@code{t}. When displaying a match in the source buffer, the exact
match will be highlighted, instead of the entire source line.
+ The @command{grep} commands will offer to save buffers before
+running. This is controlled by the @code{grep-save-buffers} variable.
+The possible values are either @code{nil} (don't save), @code{ask}
+(ask before saving), a function which will be used as a predicate (and
+is called with the file name as the parameter and should return
+non-nil if the buffer is to be saved), and any other non-@code{nil}
+value means that all buffers should be saved without asking.
+
@findex grep-find
@findex find-grep
The command @kbd{M-x grep-find} (also available as @kbd{M-x
the script file as @var{file}. Emacs Lisp then treats the @samp{#!}
on this first line as a comment delimiter.
+@item --no-build-details
+@opindex --no-build-details
+@cindex build details
+@cindex deterministic build
+Omit details like system name and build time from the Emacs executable,
+so that builds are more deterministic.
+
@item -q
@opindex -q
@itemx --no-init-file
@cindex file local variables
A file can specify local variable values to use when editing the
-file with Emacs. Visiting the file checks for local variable
-specifications; it automatically makes these variables local to the
-buffer, and sets them to the values specified in the file.
+file with Emacs. Visiting the file or setting a major mode checks for
+local variable specifications; it automatically makes these variables
+local to the buffer, and sets them to the values specified in the
+file.
@menu
* Specifying File Variables:: Specifying file local variables.
named @file{.dir-locals.el}@footnote{ On MS-DOS, the name of this file
should be @file{_dir-locals.el}, due to limitations of the DOS
filesystems. If the filesystem is limited to 8+3 file names, the name
-of the file will be truncated by the OS to @file{_dir-loc.el}. } in a
+of the file will be truncated by the OS to @file{_dir-loc.el}.
+}@footnote{ You can also use @file{.dir-locals-2.el}, which
+is loaded in addition. This is useful when @file{.dir-locals.el} is
+under version control in a shared repository and can't be used for
+personal customizations. } in a
directory. Whenever Emacs visits any file in that directory or any of
its subdirectories, it will apply the directory-local variables
specified in @file{.dir-locals.el}, as though they had been defined as
Finally, it specifies a different @file{ChangeLog} file name for any
file in the @file{src/imported} subdirectory.
+You can specify the variables @code{mode}, @code{eval}, and
+@code{unibyte} in your @file{.dir-locals.el}, and they have the same
+meanings as they would have in file local variables. @code{coding}
+cannot be specified as a directory local variable. @xref{File
+Variables}.
+
@findex add-dir-local-variable
@findex delete-dir-local-variable
@findex copy-file-locals-to-dir-locals
* Minibuffer Maps:: The minibuffer uses its own local keymaps.
* Rebinding:: How to redefine one key's meaning conveniently.
* Init Rebinding:: Rebinding keys with your initialization file.
-* Modifier Keys:: Using modifier keys in key bindings.
+* Modifier Keys:: Using modifier keys.
* Function Keys:: Rebinding terminal function keys.
* Named ASCII Chars:: Distinguishing @key{TAB} from @kbd{C-i}, and so on.
* Mouse Buttons:: Rebinding mouse buttons in Emacs.
To change the target of a symbolic link, edit the link target name
which appears next to the link name.
+ If you edit the file names to create a new subdirectory, Wdired will
+automatically create these new directories. To inhibit this behavior,
+set @code{wdired-create-parent-directories} to @code{nil}.
+
The rest of the text in the buffer, such as the file sizes and
modification dates, is marked read-only, so you can't edit it.
However, if you set @code{wdired-allow-to-change-permissions} to
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
@item nobreak-space
The face for displaying no-break space characters (@pxref{Text
Display}).
+@item nobreak-hyphen
+The face for displaying no-break hyphen characters (@pxref{Text
+Display}).
@end table
The following faces control the appearance of parts of the Emacs
specially: it displays @code{U+00A0} (no-break space) with the
@code{nobreak-space} face, and it displays @code{U+00AD} (soft
hyphen), @code{U+2010} (hyphen), and @code{U+2011} (non-breaking
-hyphen) with the @code{escape-glyph} face. To disable this, change
+hyphen) with the @code{nobreak-hyphen} face. To disable this, change
the variable @code{nobreak-char-display} to @code{nil}. If you give
this variable a non-@code{nil} and non-@code{t} value, Emacs instead
displays such characters as a highlighted backslash followed by a
major mode, you can type @kbd{C-c C-c} (@code{image-toggle-display})
to toggle between displaying the file as an image in the Emacs buffer,
and displaying its underlying text (or raw byte) representation.
+Additionally you can type @kbd{C-c C-x} (@code{image-toggle-hex-display})
+to toggle between displaying the file as an image in the Emacs buffer,
+and displaying it in hex representation.
Displaying the file as an image works only if Emacs is compiled with
support for displaying such images. If the displayed image is wider
or taller than the frame, the usual point motion keys (@kbd{C-f},
seconds before removing it from display. The default behavior is to
display the binding for 2 seconds.
+@vindex extended-command-suggest-shorter
Commands that don't have key bindings, can still be invoked after
typing less than their full name at the @samp{M-x} prompt. Emacs
mentions such shorthands in the echo area if they are significantly
-shorter than the full command name. The setting of
-@code{suggest-key-bindings} affects these hints as well.
+shorter than the full command name, and
+@code{extended-command-suggest-shorter} is non-@code{nil}. The
+setting of @code{suggest-key-bindings} affects these hints as well.
In this manual, when we speak of running a command by name, we often
omit the @key{RET} that terminates the name. Thus we might say
can even guess the name of the function or other object that was
changed.
+@c Not worth it.
+@c @vindex change-log-directory-files
+To find the change log file, Emacs searches up the directory tree from
+the file you are editing. By default, it stops if it finds a
+directory that seems to be the root of a version-control repository.
+To change this, customize @code{change-log-directory-files}.
+
@vindex add-log-keep-changes-together
When the variable @code{add-log-keep-changes-together} is
non-@code{nil}, @kbd{C-x 4 a} adds to any existing item for the file
calls @code{server-start} after initialization, and returns control to
the calling terminal instead of opening an initial frame; it then
waits in the background, listening for edit requests.
+
+@cindex socket activation, systemd, Emacs
+@item
+An external process can invoke the Emacs server when a connection
+event occurs upon a specified socket and pass the socket to the new
+Emacs server process. An instance of this is @command{systemd}'s
+socket functionality: the @command{systemd} service creates a socket and
+listens for connections on it; when @command{emacsclient} connects to
+it for the first time, @command{systemd} can launch the Emacs server
+and hand over the socket to it for servicing @command{emacsclient}
+connections. A setup to use this functionality could be:
+
+@file{~/.config/systemd/user/emacs.service}:
+@example
+[Unit]
+Description=Emacs
+
+[Service]
+Type=forking
+ExecStart=/path/to/emacs --daemon
+ExecStop=/path/to/emacsclient --eval "(kill-emacs)"
+Restart=always
+
+[Install]
+WantedBy=default.target
+@end example
+
+@file{~/.config/systemd/user/emacs.socket}:
+@example
+[Socket]
+ListenStream=/path/to/.emacs.socket
+
+[Install]
+WantedBy=sockets.target
+@end example
+
+The @code{ListenStream} path will be the path that Emacs listens for
+connections from @command{emacsclient}; this is a file of your choice.
@end itemize
@cindex @env{TEXEDIT} environment variable
@findex w32-register-hot-key
@findex w32-unregister-hot-key
MS-Windows reserves certain key combinations, such as
-@kbd{@key{Alt}-@key{TAB}}, for its own use. These key combinations are
-intercepted by the system before Emacs can see them. You can use the
-@code{w32-register-hot-key} function to allow a key sequence to be
-seen by Emacs instead of being grabbed by Windows. This function
-registers a key sequence as a @dfn{hot key}, overriding the special
-meaning of that key sequence for Windows. (MS-Windows is told that
-the key sequence is a hot key only when one of the Emacs windows has
-focus, so that the special keys still have their usual meaning for
-other Windows applications.)
-
- The argument to @code{w32-register-hot-key} must be a single key,
-with or without modifiers, in vector form that would be acceptable to
-@code{define-key}. The meta modifier is interpreted as the @key{Alt}
-key if @code{w32-alt-is-meta} is @code{t} (the default), and the hyper
-modifier is always interpreted as the Windows key (usually labeled
-with @key{start} and the Windows logo). If the function succeeds in
-registering the key sequence, it returns the hotkey ID, a number;
-otherwise it returns @code{nil}.
+@kbd{@key{Alt}-@key{TAB}} and a number of Windows key combinations,
+for its own use. These key combinations are intercepted by the system
+before Emacs can see them. Also, on Windows 10, all Windows key
+combinations are reserved by the system in such a way that they are
+never propagated to applications, even if the system does not
+currently define a hotkey on the specific combination. You can use
+the @code{w32-register-hot-key} function to allow a key sequence to be
+seen by Emacs instead of being grabbed by Windows. When registered as
+a hot key, the key combination is pulled out of the system's input
+queue before it is handled by Windows, effectively overriding the
+special meaning of that key sequence for Windows. The override is
+only effective when Emacs is active; with other applications on the
+foreground the keys behave normally.
+
+ The argument to @code{w32-register-hot-key} must be a single key with a
+single modifier, in vector form that would be acceptable to
+@code{define-key}. The control and shift modifiers have no effect on the
+argument. The meta modifier is interpreted as the @key{Alt} key if
+@code{w32-alt-is-meta} is @code{t} (the default), and the super and hyper
+modifiers are interpreted according to the bindings of
+@code{w32-lwindow-modifier} and @code{w32-rwindow-modifier}. Additionally, a
+modifier with the trailing dash but with no key indicates that all
+Windows defined hotkeys for that modifier are to be overridden in the
+favor of Emacs.
@kindex M-TAB@r{, (MS-Windows)}
@cindex @kbd{M-@key{TAB}} vs @kbd{@key{Alt}-@key{TAB}} (MS-Windows)
@cindex @kbd{@key{Alt}-@key{TAB}} vs @kbd{M-@key{TAB}} (MS-Windows)
For example, @code{(w32-register-hot-key [M-tab])} lets you use
-@kbd{M-@key{TAB}} normally in Emacs; for instance, to complete the word or
-symbol at point at top level, or to complete the current search string
-against previously sought strings during incremental search.
+@kbd{M-@key{TAB}} normally in Emacs; for instance, to complete the
+word or symbol at point at top level, or to complete the current
+search string against previously sought strings during incremental
+search. @code{(w32-register-hot-key [s-])} with
+@code{w32-lwindow-modifier} bound to @code{super} disables all the
+Windows' own Windows key based shortcuts.@footnote{There is one known
+exception: The combination @kbd{@key{Windows}-@key{L}} that locks the
+workstation is handled by the system on a lower level. For this
+reason, @code{w32-register-hot-key} cannot override this key
+combination - it always locks the computer.}
+
+ Note that @code{w32-register-hot-key} checks the
+@code{w32-[lr]window-modifier} values at the time of the function
+call. Thus, you can set @code{w32-lwindow-modifier} as @code{super},
+then call @code{(w32-register-hot-key [s-r])}, and finally set
+@code{w32-rwindow-modifier} as @code{super} as well. The result is
+that the left Windows key together with @key{R} invokes whichever
+function you have bound for the combination in Emacs, and the right
+Windows key and @key{R} opens the Windows @code{Run} dialog.
+
+ The hotkey registrations always also include all the shift and
+control modifier combinations for the given hotkey; that is,
+registering @kbd{s-@key{a}} as a hotkey gives you @kbd{S-s-@key{a}},
+@kbd{C-s-@key{a}} and @kbd{C-S-s-@key{a}} as well.
+
+ On Windows 98 and ME, the hotkey registration is more restricted.
+The desired hotkey must always be fully specified, and
+@code{w32-phantom-key-code} can be customized to achieve desired
+results.
The function @code{w32-unregister-hot-key} reverses the effect of
@code{w32-register-hot-key} for its argument key sequence.
otherwise it is passed to Windows. The default is @code{t} for both
of these variables. Passing each of these keys to Windows produces
its normal effect: for example, @kbd{@key{Lwindow}} opens the
-@code{Start} menu, etc.@footnote{
-Some combinations of the ``Windows'' keys with other keys are caught
-by Windows at a low level in a way that Emacs currently cannot prevent.
-For example, @kbd{@key{Lwindow} r} always pops up the Windows
-@samp{Run} dialog. Customizing the value of
-@code{w32-phantom-key-code} might help in some cases, though.}
+@code{Start} menu, etc.
@vindex w32-recognize-altgr
@kindex AltGr @r{(MS-Windows)}
shell.
When you resume Emacs after a suspension caused by emergency escape,
-it asks two questions before going back to what it had been doing:
+it reports the resumption and asks a question or two before going back
+to what it had been doing:
@example
+Emacs is resuming after an emergency escape.
Auto-save? (y or n)
Abort (and dump core)? (y or n)
@end example
@noindent
-Answer each one with @kbd{y} or @kbd{n} followed by @key{RET}.
+Answer each question with @kbd{y} or @kbd{n} followed by @key{RET}.
Saying @kbd{y} to @samp{Auto-save?} causes immediate auto-saving of
all modified buffers in which auto-saving is enabled. Saying @kbd{n}
-skips this.
+skips this. This question is omitted if Emacs is in a state where
+auto-saving cannot be done safely.
Saying @kbd{y} to @samp{Abort (and dump core)?} causes Emacs to
crash, dumping core. This is to enable a wizard to figure out why
then continues to wait for a valid input character, or keyboard-quit.
@end defun
+@defun read-multiple-choice prompt choices
+Ask user a multiple choice question. @var{prompt} should be a string
+that will be displayed as the prompt.
+
+@var{choices} is an alist where the first element in each entry is a
+character to be entered, the second element is a short name for the
+entry to be displayed while prompting (if there's room, it might be
+shortened), and the third, optional entry is a longer explanation that
+will be displayed in a help buffer if the user requests more help.
+
+The return value is the matching value from @var{choices}.
+
+@lisp
+(read-multiple-choice
+ "Continue connecting?"
+ '((?a "always" "Accept this certificate this session and for all future sessions.")
+ (?s "session only" "Accept this certificate this session only.")
+ (?n "no" "Refuse to use this certificate, and close the connection.")))
+@end lisp
+
+The @code{read-multiple-choice-face} face is used to highlight the
+matching characters in the name string on graphical terminals.
+
+@end defun
+
@node Event Mod
@subsection Modifying and Translating Input Events
@cindex modifiers of events
* XPM Images:: Special features for XPM format.
* PostScript Images:: Special features for PostScript format.
* ImageMagick Images:: Special features available through ImageMagick.
+* SVG Images:: Creating and manipulating SVG images.
* Other Image Types:: Various other formats are supported.
* Defining Images:: Convenient ways to define an image for later use.
* Showing Images:: Convenient ways to display an image once it is defined.
@cindex ImageMagick images
@cindex images, support for more formats
- If you build Emacs with ImageMagick support, you can use the
+ If your Emacs build has ImageMagick support, you can use the
ImageMagick library to load many image formats (@pxref{File
Conveniences,,, emacs, The GNU Emacs Manual}). The image type symbol
for images loaded via ImageMagick is @code{imagemagick}, regardless of
the actual underlying image format.
+To check for ImageMagick support, use the following:
+
+@lisp
+(image-type-available-p 'imagemagick)
+@end lisp
+
@defun imagemagick-types
This function returns a list of image file extensions supported by the
current ImageMagick installation. Each list element is a symbol
wish. @code{:max-width} and @code{:max-height} will always preserve
the aspect ratio.
+@item :scale @var{scale}
+This should be a number, where values higher than 1 means to increase
+the size, and lower means to decrease the size. For instance, a value
+of 0.25 will make the image a quarter size of what it originally was.
+If the scaling makes the image larger than specified by
+@code{:max-width} or @code{:max-height}, the resulting size will not
+exceed those two values. If both @code{:scale} and
+@code{:height}/@code{:width} are specified, the height/width will be
+adjusted by the specified scaling factor.
+
@item :format @var{type}
The value, @var{type}, should be a symbol specifying the type of the
image data, as found in @code{image-format-suffixes}. This is used
@xref{Multi-Frame Images}.
@end table
+@node SVG Images
+@subsection SVG Images
+@cindex SVG images
+
+SVG (Scalable Vector Graphics) is an XML format for specifying images.
+If your Emacs build has with SVG support, you can create and manipulate
+these images with the following commands.
+
+@defun svg-create width height &rest args
+Create a new, empty SVG image with the specified dimensions.
+@var{args} is an argument plist with you can specify following:
+
+@table @code
+@item :stroke-width
+The default width (in pixels) of any lines created.
+
+@item :stroke
+The default stroke color on any lines created.
+@end table
+
+This function returns an SVG structure, and all the following commands
+work on that structure.
+@end defun
+
+@defun svg-gradient svg id type stops
+Create a gradient in @var{svg} with identifier @var{id}. @var{type}
+specifies the gradient type, and can be either @code{linear} or
+@code{radial}. @var{stops} is a list of percentage/color pairs.
+
+The following will create a linear gradient that goes from red at the
+start, to green 25% of the way, to blue at the end:
+
+@lisp
+(svg-gradient svg "gradient1" 'linear
+ '((0 . "red") (25 . "green") (100 . "blue")))
+@end lisp
+
+The gradient created (and inserted into the SVG object) can later be
+used by all functions that create shapes.
+@end defun
+
+All the following functions take an optional list of keyword
+parameters that alter the various attributes from their default
+values. Valid attributes include:
+
+@table @code
+@item :stroke-width
+The width (in pixels) of lines drawn, and outlines around solid
+shapes.
+
+@item :stroke-color
+The color of lines drawn, and outlines around solid shapes.
+
+@item :fill-color
+The color used for solid shapes.
+
+@item :id
+The identified of the shape.
+
+@item :gradient
+If given, this should be the identifier of a previously defined
+gradient object.
+@end table
+
+@defun svg-rectangle svg x y width height &rest args
+Add a rectangle to @var{svg} where the upper left corner is at
+position @var{x}/@var{y} and is of size @var{width}/@var{height}.
+
+@lisp
+(svg-rectangle svg 100 100 500 500 :gradient "gradient1")
+@end lisp
+@end defun
+
+@defun svg-circle svg x y radius &rest args
+Add a circle to @var{svg} where the center is at @var{x}/@var{y}
+and the radius is @var{radius}.
+@end defun
+
+@defun svg-ellipse svg x y x-radius y-radius &rest args
+Add a circle to @var{svg} where the center is at @var{x}/@var{y} and
+the horizontal radius is @var{x-radius} and the vertical radius is
+@var{y-radius}.
+@end defun
+
+@defun svg-line svg x1 y1 x2 y2 &rest args
+Add a line to @var{svg} that starts at @var{x1}/@var{y1} and extends
+to @var{x2}/@var{y2}.
+@end defun
+
+@defun svg-polyline svg points &rest args
+Add a multiple segment line to @var{svg} that goes through
+@var{points}, which is a list of X/Y position pairs.
+
+@lisp
+(svg-polyline svg '((200 . 100) (500 . 450) (80 . 100))
+ :stroke-color "green")
+@end lisp
+@end defun
+
+@defun svg-polygon svg points &rest args
+Add a polygon to @var{svg} where @var{points} is a list of X/Y pairs
+that describe the outer circumference of the polygon.
+
+@lisp
+(svg-polygon svg '((100 . 100) (200 . 150) (150 . 90))
+ :stroke-color "blue" :fill-color "red"")
+@end lisp
+@end defun
+
+Finally, the @code{svg-image} takes an SVG object as its parameter and
+returns an image object suitable for use in functions like
+@code{insert-image}. Here's a complete example that creates and
+inserts an image with a circle:
+
+@lisp
+(let ((svg (svg-create 400 400 :stroke-width 10)))
+ (svg-gradient svg "gradient1" 'linear '((0 . "red") (100 . "blue")))
+ (svg-circle svg 200 200 100 :gradient "gradient1" :stroke-color "green")
+ (insert-image (svg-image svg)))
+@end lisp
+
+
@node Other Image Types
@subsection Other Image Types
@cindex PBM
@item PNG
Image type @code{png}.
-@item SVG
-Image type @code{svg}.
-
@item TIFF
Image type @code{tiff}.
Supports the @code{:index} property. @xref{Multi-Frame Images}.
as @code{nil}.
@end defmac
+@defun image-property image property
+Return the value of @var{property} in @var{image}. Properties can be
+set by using @code{setf}. Setting a property to @code{nil} will
+remove the property from the image.
+@end defun
+
@defun find-image specs
This function provides a convenient way to find an image satisfying one
of a list of image specifications @var{specs}.
@end example
@end defun
+@vindex image-scaling-factor
+Images are automatically scaled when created based on the
+@code{image-scaling-factor} variable. The value is either a floating
+point number (where numbers higher than 1 means to increase the size
+and lower means to shrink the size), or the symbol @code{auto}, which
+will compute a scaling factor based on the font pixel size.
+
@node Showing Images
@subsection Showing Images
@cindex show image
@code{max-image-size} is subsequently changed (@pxref{Image Cache}).
@end defvar
+Images inserted with the insertion functions above also get a local
+keymap installed in the text properties (or overlays) that span the
+displayed image. This keymap defines the following commands:
+
+@table @kbd
+@item +
+Increase the image size (@code{image-increase-size}). A prefix value
+of @samp{4} means to increase the size by 40%. The default is 20%.
+
+@item -
+Decrease the image size (@code{image-increase-size}). A prefix value
+of @samp{4} means to decrease the size by 40%. The default is 20%.
+
+@item r
+Rotate the image by 90 degrees (@code{image-rotate}).
+
+@item o
+Save the image to a file (@code{image-save}).
+@end table
+
@node Multi-Frame Images
@subsection Multi-Frame Images
@cindex multi-frame images
non-@code{nil} value for @var{id-format} if you use the returned
@acronym{UID} or @acronym{GID}.
+Accessor functions are provided to access the elements in this list.
+The accessors are mentioned along with the descriptions of the
+elements below.
+
The elements of the list, in order, are:
@enumerate 0
@item
@code{t} for a directory, a string for a symbolic link (the name
-linked to), or @code{nil} for a text file.
+linked to), or @code{nil} for a text file
+(@code{file-attribute-type}).
@c Wordy so as to prevent an overfull hbox. --rjc 15mar92
@item
-The number of names the file has. Alternate names, also known as hard
-links, can be created by using the @code{add-name-to-file} function
-(@pxref{Changing Files}).
+The number of names the file has (@code{file-attribute-link-number}).
+Alternate names, also known as hard links, can be created by using the
+@code{add-name-to-file} function (@pxref{Changing Files}).
@item
-The file's @acronym{UID}, normally as a string. However, if it does
-not correspond to a named user, the value is a number.
+The file's @acronym{UID}, normally as a string
+(@code{file-attribute-user-id}). However, if it does not correspond
+to a named user, the value is a number.
@item
-The file's @acronym{GID}, likewise.
+The file's @acronym{GID}, likewise (@code{file-attribute-group-id}).
@item
-The time of last access, as a list of four integers @code{(@var{sec-high}
-@var{sec-low} @var{microsec} @var{picosec})}. (This is similar to the
-value of @code{current-time}; see @ref{Time of Day}.) Note that on
-some FAT-based filesystems, only the date of last access is recorded,
-so this time will always hold the midnight of the day of last access.
+The time of last access, as a list of four integers
+@code{(@var{sec-high} @var{sec-low} @var{microsec} @var{picosec})}
+(@code{file-attribute-access-time}). (This is similar to the value of
+@code{current-time}; see @ref{Time of Day}.) Note that on some
+FAT-based filesystems, only the date of last access is recorded, so
+this time will always hold the midnight of the day of last access.
@cindex modification time of file
@item
-The time of last modification as a list of four integers (as above).
-This is the last time when the file's contents were modified.
+The time of last modification as a list of four integers (as above)
+(@code{file-attribute-modification-time}). This is the last time when
+the file's contents were modified.
@item
-The time of last status change as a list of four integers (as above).
-This is the time of the last change to the file's access mode bits,
-its owner and group, and other information recorded in the filesystem
-for the file, beyond the file's contents.
+The time of last status change as a list of four integers (as above)
+(@code{file-attribute-status-change-time}). This is the time of the
+last change to the file's access mode bits, its owner and group, and
+other information recorded in the filesystem for the file, beyond the
+file's contents.
@item
-The size of the file in bytes. This is floating point if the size is
-too large to fit in a Lisp integer.
+The size of the file in bytes (@code{file-attribute-size}). This is
+floating point if the size is too large to fit in a Lisp integer.
@item
-The file's modes, as a string of ten letters or dashes,
-as in @samp{ls -l}.
+The file's modes, as a string of ten letters or dashes, as in
+@samp{ls -l} (@code{file-attribute-modes}).
@item
An unspecified value, present for backward compatibility.
@item
-The file's inode number. If possible, this is an integer. If the
-inode number is too large to be represented as an integer in Emacs
-Lisp but dividing it by @math{2^{16}} yields a representable integer,
-then the value has the
+The file's inode number (@code{file-attribute-inode-number}). If
+possible, this is an integer. If the inode number is too large to be
+represented as an integer in Emacs Lisp but dividing it by
+@math{2^{16}} yields a representable integer, then the value has the
form @code{(@var{high} . @var{low})}, where @var{low} holds the low 16
-bits. If the inode number is too wide for even that, the value is of the form
-@code{(@var{high} @var{middle} . @var{low})}, where @code{high} holds
-the high bits, @var{middle} the middle 24 bits, and @var{low} the low
-16 bits.
+bits. If the inode number is too wide for even that, the value is of
+the form @code{(@var{high} @var{middle} . @var{low})}, where
+@code{high} holds the high bits, @var{middle} the middle 24 bits, and
+@var{low} the low 16 bits.
@item
-The filesystem number of the device that the file is on. Depending on
-the magnitude of the value, this can be either an integer or a cons
-cell, in the same manner as the inode number. This element and the
-file's inode number together give enough information to distinguish
-any two files on the system---no two files can have the same values
-for both of these numbers.
+The filesystem number of the device that the file is on
+@code{file-attribute-device-number}). Depending on the magnitude of
+the value, this can be either an integer or a cons cell, in the same
+manner as the inode number. This element and the file's inode number
+together give enough information to distinguish any two files on the
+system---no two files can have the same values for both of these
+numbers.
@end enumerate
For example, here are the file attributes for @file{files.texi}:
function, i.e., can be passed to @code{funcall}. Note that
@code{functionp} returns @code{t} for symbols that are function names,
and returns @code{nil} for special forms.
+@end defun
+
+ It is also possible to find out how many arguments an arbitrary
+function expects:
+
+@defun func-arity function
+This function provides information about the argument list of the
+specified @var{function}. The returned value is a cons cell of the
+form @w{@code{(@var{min} . @var{max})}}, where @var{min} is the
+minimum number of arguments, and @var{max} is either the maximum
+number of arguments, or the symbol @code{many} for functions with
+@code{&rest} arguments, or the symbol @code{unevalled} if
+@var{function} is a special form.
+
+Note that this function might return inaccurate results in some
+situations, such as the following:
+
+@itemize @minus
+@item
+Functions defined using @code{apply-partially} (@pxref{Calling
+Functions, apply-partially}).
+
+@item
+Functions that are advised using @code{advice-add} (@pxref{Advising
+Named Functions}).
+
+@item
+Functions that determine the argument list dynamically, as part of
+their code.
+@end itemize
+
@end defun
@noindent
@end defun
@defun subr-arity subr
-This function provides information about the argument list of a
-primitive, @var{subr}. The returned value is a pair
-@code{(@var{min} . @var{max})}. @var{min} is the minimum number of
-args. @var{max} is the maximum number or the symbol @code{many}, for a
-function with @code{&rest} arguments, or the symbol @code{unevalled} if
-@var{subr} is a special form.
+This works like @code{func-arity}, but only for built-in functions and
+without symbol indirection. It signals an error for non-built-in
+functions. We recommend to use @code{func-arity} instead.
@end defun
@node Lambda Expressions
@code{(@var{test-fn} @var{hash-fn})}.
@end defun
-@defun sxhash obj
+@defun sxhash-equal obj
This function returns a hash code for Lisp object @var{obj}.
This is an integer which reflects the contents of @var{obj}
and the other Lisp objects it points to.
-If two objects @var{obj1} and @var{obj2} are equal, then @code{(sxhash
-@var{obj1})} and @code{(sxhash @var{obj2})} are the same integer.
+If two objects @var{obj1} and @var{obj2} are @code{equal}, then
+@code{(sxhash-equal @var{obj1})} and @code{(sxhash-equal @var{obj2})}
+are the same integer.
-If the two objects are not equal, the values returned by @code{sxhash}
-are usually different, but not always; once in a rare while, by luck,
-you will encounter two distinct-looking objects that give the same
-result from @code{sxhash}.
+If the two objects are not @code{equal}, the values returned by
+@code{sxhash-equal} are usually different, but not always; once in a
+rare while, by luck, you will encounter two distinct-looking objects
+that give the same result from @code{sxhash-equal}.
+
+@b{Common Lisp note:} In Common Lisp a similar function is called
+@code{sxhash}. Emacs provides this name as a compatibility alias for
+@code{sxhash-equal}.
+@end defun
+
+@defun sxhash-eq obj
+This function returns a hash code for Lisp object @var{obj}. Its
+result reflects identity of @var{obj}, but not its contents.
+
+If two objects @var{obj1} and @var{obj2} are @code{eq}, then
+@code{(xhash @var{obj1})} and @code{(xhash @var{obj2})} are the same
+integer.
+@end defun
+
+@defun sxhash-eql obj
+This function returns a hash code for Lisp object @var{obj} suitable
+for @code{eql} comparison. I.e. it reflects identity of @var{obj}
+except for the case where the object is a float number, in which case
+hash code is generated for the value.
+
+If two objects @var{obj1} and @var{obj2} are @code{eql}, then
+@code{(xhash @var{obj1})} and @code{(xhash @var{obj2})} are the same
+integer.
@end defun
This example creates a hash table whose keys are strings that are
(defun case-fold-string= (a b)
(eq t (compare-strings a nil nil b nil nil t)))
(defun case-fold-string-hash (a)
- (sxhash (upcase a)))
+ (sxhash-equal (upcase a)))
(define-hash-table-test 'case-fold
'case-fold-string= 'case-fold-string-hash)
and equal-looking objects are considered the same key.
@example
-(define-hash-table-test 'contents-hash 'equal 'sxhash)
+(define-hash-table-test 'contents-hash 'equal 'sxhash-equal)
(make-hash-table :test 'contents-hash)
@end example
and are not able to implement dumping, then Emacs must load
@file{loadup.el} each time it starts.
+@cindex build details
+@cindex deterministic build
+@cindex @option{--disable-build-details} option to @command{configure}
+ By default the dumped @file{emacs} executable records details such
+as the build time and host name. Use the
+@option{--disable-build-details} option of @command{configure} to
+suppress these details, so that building and installing Emacs twice
+from the same sources is more likely to result in identical copies of
+Emacs.
+
@cindex @file{site-load.el}
You can specify additional files to preload by writing a library named
@file{site-load.el} that loads them. You may need to rebuild Emacs
@defvar emacs-build-time
The value of this variable indicates the time at which Emacs was
built. It is a list of four integers, like the value of
-@code{current-time} (@pxref{Time of Day}).
+@code{current-time} (@pxref{Time of Day}), or is @code{nil}
+if the information is not available.
@example
@group
properties were present in the minibuffer. Otherwise all the text
properties are stripped when the value is returned.
+@vindex minibuffer-prompt-properties
+The text properties in @code{minibuffer-prompt-properties} are applied
+to the prompt. By default, this property list defines a face to use
+for the prompt. This face, if present, is applied to the end of the
+face list and merged before display.
+
+If the user wants to completely control the look of the prompt, the
+most convenient way to do that is to specify the @code{default} face
+at the end of all face lists. For instance:
+
+@lisp
+(read-from-minibuffer
+ (concat
+ (propertize "Bold" 'face '(bold default))
+ (propertize " and normal: " 'face '(default))))
+@end lisp
+
If the argument @var{inherit-input-method} is non-@code{nil}, then the
minibuffer inherits the current input method (@pxref{Input Methods}) and
the setting of @code{enable-multibyte-characters} (@pxref{Text
Each major mode should have a normal @dfn{mode hook} named
@code{@var{modename}-mode-hook}. The very last thing the major mode command
should do is to call @code{run-mode-hooks}. This runs the normal
-hook @code{change-major-mode-after-body-hook}, the mode hook,
+hook @code{change-major-mode-after-body-hook}, the mode hook, the
+function @code{hack-local-variables} (when the buffer is visiting a file),
and then the normal hook @code{after-change-major-mode-hook}.
@xref{Mode Hooks}.
It also processes local variables specified in the file text.
@deffn Command normal-mode &optional find-file
-This function establishes the proper major mode and buffer-local variable
-bindings for the current buffer. First it calls @code{set-auto-mode}
-(see below), then it runs @code{hack-local-variables} to parse, and
-bind or evaluate as appropriate, the file's local variables
-(@pxref{File Local Variables}).
+This function establishes the proper major mode and buffer-local
+variable bindings for the current buffer. It calls
+@code{set-auto-mode} (see below). As from Emacs 25.2, it no longer
+runs @code{hack-local-variables}, this now being done in
+@code{run-mode-hooks} at the initialization of major modes
+(@pxref{Mode Hooks}).
If the @var{find-file} argument to @code{normal-mode} is non-@code{nil},
@code{normal-mode} assumes that the @code{find-file} function is calling
@var{find-file} is normally @code{nil}. In this case,
@code{normal-mode} unconditionally processes any file local variables.
-The function calls @code{set-auto-mode} to choose a major mode. If this
-does not specify a mode, the buffer stays in the major mode determined
-by the default value of @code{major-mode} (see below).
+The function calls @code{set-auto-mode} to choose and set a major
+mode. If this does not specify a mode, the buffer stays in the major
+mode determined by the default value of @code{major-mode} (see below).
@cindex file mode specification error
@code{normal-mode} uses @code{condition-case} around the call to the
@defun set-auto-mode &optional keep-mode-if-same
@cindex visited file mode
- This function selects the major mode that is appropriate for the
-current buffer. It bases its decision (in order of precedence) on the
-@w{@samp{-*-}} line, on any @samp{mode:} local variable near the end of
-a file, on the @w{@samp{#!}} line (using @code{interpreter-mode-alist}),
-on the text at the beginning of the buffer (using
-@code{magic-mode-alist}), and finally on the visited file name (using
-@code{auto-mode-alist}). @xref{Choosing Modes, , How Major Modes are
-Chosen, emacs, The GNU Emacs Manual}. If @code{enable-local-variables}
-is @code{nil}, @code{set-auto-mode} does not check the @w{@samp{-*-}}
-line, or near the end of the file, for any mode tag.
+ This function selects and sets the major mode that is appropriate
+for the current buffer. It bases its decision (in order of
+precedence) on the @w{@samp{-*-}} line, on any @samp{mode:} local
+variable near the end of a file, on the @w{@samp{#!}} line (using
+@code{interpreter-mode-alist}), on the text at the beginning of the
+buffer (using @code{magic-mode-alist}), and finally on the visited
+file name (using @code{auto-mode-alist}). @xref{Choosing Modes, , How
+Major Modes are Chosen, emacs, The GNU Emacs Manual}. If
+@code{enable-local-variables} is @code{nil}, @code{set-auto-mode} does
+not check the @w{@samp{-*-}} line, or near the end of the file, for
+any mode tag.
@vindex inhibit-local-variables-regexps
There are some file types where it is not appropriate to scan the file
@defun run-mode-hooks &rest hookvars
Major modes should run their mode hook using this function. It is
similar to @code{run-hooks} (@pxref{Hooks}), but it also runs
-@code{change-major-mode-after-body-hook} and
-@code{after-change-major-mode-hook}.
+@code{change-major-mode-after-body-hook}, @code{hack-local-variables}
+(when the buffer is visiting a file) (@pxref{File Local Variables}),
+and @code{after-change-major-mode-hook}.
When this function is called during the execution of a
-@code{delay-mode-hooks} form, it does not run the hooks immediately.
-Instead, it arranges for the next call to @code{run-mode-hooks} to run
-them.
+@code{delay-mode-hooks} form, it does not run the hooks or
+@code{hack-local-variables} immediately. Instead, it arranges for the
+next call to @code{run-mode-hooks} to run them.
@end defun
@defmac delay-mode-hooks body@dots{}
@end example
@end defun
+@defun char-from-name string &optional ignore-case
+This function returns the character whose Unicode name is @var{string}.
+If @var{ignore-case} is non-@code{nil}, case is ignored in @var{string}.
+This function returns @code{nil} if @var{string} does not name a character.
+
+@example
+;; U+03A3
+(= (char-from-name "GREEK CAPITAL LETTER SIGMA") #x03A3)
+ @result{} t
+@end example
+@end defun
+
@defun get-byte &optional pos string
This function returns the byte at character position @var{pos} in the
current buffer. If the current buffer is unibyte, this is literally
@result{} Nd
@end group
@group
-;; U+2084 SUBSCRIPT FOUR
-(get-char-code-property ?\u2084 'digit-value)
+;; U+2084
+(get-char-code-property ?\N@{SUBSCRIPT FOUR@}
+ 'digit-value)
@result{} 4
@end group
@group
-;; U+2155 VULGAR FRACTION ONE FIFTH
-(get-char-code-property ?\u2155 'numeric-value)
+;; U+2155
+(get-char-code-property ?\N@{VULGAR FRACTION ONE FIFTH@}
+ 'numeric-value)
@result{} 0.2
@end group
@group
-;; U+2163 ROMAN NUMERAL FOUR
-(get-char-code-property ?\u2163 'numeric-value)
+;; U+2163
+(get-char-code-property ?\N@{ROMAN NUMERAL FOUR@}
+ 'numeric-value)
@result{} 4
@end group
@group
control characters, Emacs provides several types of escape syntax that
you can use to specify non-@acronym{ASCII} text characters.
+@enumerate
+@item
@cindex @samp{\} in character constant
@cindex backslash in character constants
@cindex unicode character escape
- Firstly, you can specify characters by their Unicode values.
-@code{?\u@var{nnnn}} represents a character with Unicode code point
-@samp{U+@var{nnnn}}, where @var{nnnn} is (by convention) a hexadecimal
-number with exactly four digits. The backslash indicates that the
-subsequent characters form an escape sequence, and the @samp{u}
-specifies a Unicode escape sequence.
-
- There is a slightly different syntax for specifying Unicode
-characters with code points higher than @code{U+@var{ffff}}:
-@code{?\U00@var{nnnnnn}} represents the character with code point
-@samp{U+@var{nnnnnn}}, where @var{nnnnnn} is a six-digit hexadecimal
-number. The Unicode Standard only defines code points up to
-@samp{U+@var{10ffff}}, so if you specify a code point higher than
-that, Emacs signals an error.
-
- Secondly, you can specify characters by their hexadecimal character
+You can specify characters by their Unicode names, if any.
+@code{?\N@{@var{NAME}@}} represents the Unicode character named
+@var{NAME}. Thus, @samp{?\N@{LATIN SMALL LETTER A WITH GRAVE@}} is
+equivalent to @code{?à} and denotes the Unicode character U+00E0. To
+simplify entering multi-line strings, you can replace spaces in the
+names by non-empty sequences of whitespace (e.g., newlines).
+
+@item
+You can specify characters by their Unicode values.
+@code{?\N@{U+@var{X}@}} represents a character with Unicode code point
+@var{X}, where @var{X} is a hexadecimal number. Also,
+@code{?\u@var{xxxx}} and @code{?\U@var{xxxxxxxx}} represent code
+points @var{xxxx} and @var{xxxxxxxx}, respectively, where each @var{x}
+is a single hexadecimal digit. For example, @code{?\N@{U+E0@}},
+@code{?\u00e0} and @code{?\U000000E0} are all equivalent to @code{?à}
+and to @samp{?\N@{LATIN SMALL LETTER A WITH GRAVE@}}. The Unicode
+Standard defines code points only up to @samp{U+@var{10ffff}}, so if
+you specify a code point higher than that, Emacs signals an error.
+
+@item
+You can specify characters by their hexadecimal character
codes. A hexadecimal escape sequence consists of a backslash,
@samp{x}, and the hexadecimal character code. Thus, @samp{?\x41} is
the character @kbd{A}, @samp{?\x1} is the character @kbd{C-a}, and
You can use any number of hex digits, so you can represent any
character code in this way.
+@item
@cindex octal character code
- Thirdly, you can specify characters by their character code in
+You can specify characters by their character code in
octal. An octal escape sequence consists of a backslash followed by
up to three octal digits; thus, @samp{?\101} for the character
@kbd{A}, @samp{?\001} for the character @kbd{C-a}, and @code{?\002}
for the character @kbd{C-b}. Only characters up to octal code 777 can
be specified this way.
+@end enumerate
+
These escape sequences may also be used in strings. @xref{Non-ASCII
in Strings}.
@item hpux
Hewlett-Packard HPUX operating system.
-@item irix
-Silicon Graphics Irix system.
-
@item nacl
Google Native Client (@acronym{NaCl}) sandboxing system.
If it is @code{t}, the conversion uses Universal Time. If it is
@code{wall}, the conversion uses the system wall clock time. If it is
a string, the conversion uses the time zone rule equivalent to setting
-@env{TZ} to that string.
+@env{TZ} to that string. If it is an integer @var{offset}, the
+conversion uses a fixed time zone with the given offset and a numeric
+abbreviation. If it is a list (@var{offset} @var{abbr}), where
+@var{offset} is an integer number of seconds east of Universal Time
+and @var{abbr} is a string, the conversion uses a fixed time zone with
+the given offset and abbreviation.
@defun current-time-zone &optional time zone
@cindex time zone, current
The optional argument @var{zone} defaults to the current time zone rule.
@xref{Time Zone Rules}.
-In addition to the usual time zone rule values, it can also be a list
-(as you would get from @code{current-time-zone}) or an integer (as
-from @code{decode-time}), applied without any further alteration for
-daylight saving time.
If you pass more than seven arguments to @code{encode-time}, the first
six are used as @var{seconds} through @var{year}, the last argument is
cause anything special to happen.
@end defun
+@findex timer-list
+The @code{timer-list} command lists all the currently active timers.
+There's only one command available in the buffer displayed: @kbd{c}
+(@code{timer-list-cancel}) that will cancel the timer on the line
+under point.
+
@node Idle Timers
@section Idle Timers
@cindex idle timers
The arguments @var{host} and @var{service} specify where to connect to;
@var{host} is the host name (a string), and @var{service} is the name of
-a defined network service (a string) or a port number (an integer).
+a defined network service (a string) or a port number (an integer like
+@code{80} or an integer string like @code{"80"}).
The remaining arguments @var{parameters} are keyword/argument pairs
that are mainly relevant to encrypted connections:
@item :service @var{service}
@var{service} specifies a port number to connect to; or, for a server,
-the port number to listen on. It should be a service name that
-translates to a port number, or an integer specifying the port number
+the port number to listen on. It should be a service name like
+@samp{"http"} that translates to a port number, or an integer like @samp{80}
+or an integer string like @samp{"80"} that specifies the port number
directly. For a server, it can also be @code{t}, which means to let
the system select an unused port number.
ignored. @code{ipv4} and @code{ipv6} specify to use IPv4 and IPv6,
respectively.
+@item :use-external-socket @var{use-external-socket}
+If @var{use-external-socket} is non-@code{nil} use any sockets passed
+to Emacs on invocation instead of allocating one. This is used by the
+Emacs server code to allow on-demand socket activation. If Emacs
+wasn't passed a socket, this option is silently ignored.
+
@item :local @var{local-address}
For a server process, @var{local-address} is the address to listen on.
It overrides @var{family}, @var{host} and @var{service}, so you
succeeds or fails, Emacs will call the sentinel function, with a
second argument matching @code{"open"} (if successful) or
@code{"failed"}. The default is to block, so that
-@code{make-network-process} does not return until the connection
-has succeeded or failed.
+@code{make-network-process} does not return until the connection has
+succeeded or failed.
+
+If you're setting up an asynchronous TLS connection, you have to also
+provide the @code{:tls-parameters} parameter (see below).
+
+Depending on the capabilities of Emacs, how asynchronous
+@code{:nowait} is may vary. The three elements that may (or may not)
+be done asynchronously are domain name resolution, socket setup, and
+(for TLS connections) TLS negotiation.
+
+Many functions that interact with process objects, (for instance,
+@code{process-datagram-address}) rely on them at least having a socket
+before they can return a useful value. These functions will block
+until the socket has achieved the desired status. The recommended way
+of interacting with asynchronous sockets is to place a sentinel on the
+process, and not try to interact with it before it has changed status
+to @samp{"run"}. That way, none of these functions will block.
+
+@item :tls-parameters
+When opening a TLS connection, this should be where the first element
+is the TLS type (which should either be @code{gnutls-x509pki} or
+@code{gnutls-anon}, and the remaining elements should form a keyword
+list acceptable for @code{gnutls-boot}. (This keyword list can be
+obtained from the @code{gnutls-boot-parameters} function.) The TLS
+connection will then be negotiated after completing the connection to
+the host.
@item :stop @var{stopped}
If @var{stopped} is non-@code{nil}, start the network connection or
@item backup
Move back to the previous place that a question was asked about.
+@item undo
+Undo last replacement and move back to the place where that
+replacement was performed.
+
+@item undo-all
+Undo all replacements and move back to the place where the first
+replacement was performed.
+
@item edit
Enter a recursive edit to deal with this question---instead of any
other action that would normally be taken.
@end example
@end defun
+@defun seq-map-indexed function sequence
+ This function returns the result of applying @var{function} to each
+element of @var{sequence} and its index within @var{seq}. The
+returned value is a list.
+
+@example
+@group
+(seq-map-indexed (lambda (elt idx)
+ (list idx elt))
+ '(a b c))
+@result{} ((0 a) (b 1) (c 2))
+@end group
+@end example
+@end defun
+
@defun seq-mapn function &rest sequences
This function returns the result of applying @var{function} to each
element of @var{sequences}. The arity (@pxref{What Is a Function,
non-@code{nil} if the first argument should sort before the second.
@end defun
+@defun seq-sort-by function predicate sequence
+ This function is similar to @code{seq-sort}, but the elements of
+@var{sequence} are transformed by applying @var{function} on them
+before being sorted. @var{function} is a function of one argument.
+
+@example
+(seq-sort-by #'seq-length #'> ["a" "ab" "abc"])
+@result{} ["abc" "ab" "a"]
+@end example
+@end defun
+
+
@defun seq-contains sequence elt &optional function
This function returns the first element in @var{sequence} that is equal to
@var{elt}. If the optional argument @var{function} is non-@code{nil},
behaves like @code{string-lessp}.
@end defun
+@defun string-version-lessp string1 string2
+This function compares strings lexicographically, except it treats
+sequences of numerical characters as if they comprised a base-ten
+number, and then compares the numbers. So @samp{foo2.png} is
+``smaller'' than @samp{foo12.png} according to this predicate, even if
+@samp{12} is lexicographically ``smaller'' than @samp{2}.
+@end defun
+
@defun string-prefix-p string1 string2 &optional ignore-case
This function returns non-@code{nil} if @var{string1} is a prefix of
@var{string2}; i.e., if @var{string2} starts with @var{string1}. If
delimiter, @samp{c} on either character makes it of style ``c''.
@item
-@samp{n} on a comment delimiter character specifies
-that this kind of comment can be nested. For a two-character
-comment delimiter, @samp{n} on either character makes it
-nestable.
+@samp{n} on a comment delimiter character specifies that this kind of
+comment can be nested. Inside such a comment, only comments of the
+same style will be recognized. For a two-character comment delimiter,
+@samp{n} on either character makes it nestable.
@cindex comment style
Emacs supports several comment styles simultaneously in any one syntax
@subsection Parser State
@cindex parser state
- A @dfn{parser state} is a list of ten elements describing the state
-of the syntactic parser, after it parses the text between a specified
-starting point and a specified end point in the buffer. Parsing
-functions such as @code{syntax-ppss}
+ A @dfn{parser state} is a list of (currently) eleven elements
+describing the state of the syntactic parser, after it parses the text
+between a specified starting point and a specified end point in the
+buffer. Parsing functions such as @code{syntax-ppss}
@ifnottex
(@pxref{Position Parse})
@end ifnottex
this element is @code{nil}.
@item
-Internal data for continuing the parsing. The meaning of this
-data is subject to change; it is used if you pass this list
-as the @var{state} argument to another call.
+The list of the positions of the currently open parentheses, starting
+with the outermost.
+
+@item
+When the last buffer position scanned was the (potential) first
+character of a two character construct (comment delimiter or
+escaped/char-quoted character pair), the @var{syntax-code}
+(@pxref{Syntax Table Internals}) of that position. Otherwise
+@code{nil}.
@end enumerate
Elements 1, 2, and 6 are ignored in a state which you pass as an
-argument to continue parsing, and elements 8 and 9 are used only in
-trivial cases. Those elements are mainly used internally by the
-parser code.
+argument to continue parsing. Elements 9 and 10 are mainly used
+internally by the parser code.
One additional piece of useful information is available from a
parser state using this function:
If the fourth argument @var{stop-before} is non-@code{nil}, parsing
stops when it comes to any character that starts a sexp. If
-@var{stop-comment} is non-@code{nil}, parsing stops when it comes to the
-start of a comment. If @var{stop-comment} is the symbol
-@code{syntax-table}, parsing stops after the start of a comment or a
-string, or the end of a comment or a string, whichever comes first.
+@var{stop-comment} is non-@code{nil}, parsing stops after the start of
+an unnested comment. If @var{stop-comment} is the symbol
+@code{syntax-table}, parsing stops after the start of an unnested
+comment or a string, or after the end of an unnested comment or a
+string, whichever comes first.
If @var{state} is @code{nil}, @var{start} is assumed to be at the top
level of parenthesis structure, such as the beginning of a function
text at point (@pxref{Completion in Buffers}).
@end defopt
+@cindex literate programming
+@cindex multi-mode indentation
+ Some major modes need to support embedded regions of text whose
+syntax belongs to a different major mode. Examples include
+@dfn{literate programming} source files that combine documentation and
+snippets of source code, Yacc/Bison programs that include snippets of
+plain C code, etc. To correctly indent the embedded chunks, the major
+mode needs to delegate the indentation to another mode's indentation
+engine (e.g., call @code{c-indent-defun} for C code or
+@code{python-indent-line} for Python), while providing it with some
+context to guide the indentation. The following facilities support
+such multi-mode indentation.
+
+@defvar prog-indentation-context
+This variable, when non-@code{nil}, holds the indentation context for
+the sub-mode's indentation engine provided by the superior major mode.
+The value should be a list of the form @code{(@var{first-column}
+@w{(@var{start} . @var{end})} @code{prev-chunk})}. The members of the
+list have the following meaning:
+
+@table @var
+@item first-column
+The column to be used for top-level constructs. This replaces the
+default value of the top-level column used by the sub-mode, usually
+zero.
+@item start
+@itemx end
+The region of the code chunk to be indented by the sub-mode. The
+value of @var{end} can be @code{nil}, which stands for the value of
+@code{point-max}.
+@item prev-chunk
+If this is non-@code{nil}, it should provide the sub-mode's
+indentation engine with a virtual context of the code chunk. Valid
+values include:
+
+@itemize @minus
+@item
+A string whose contents is the text the sub-mode's indentation engine
+should consider to precede the code chunk. The sub-mode's indentation
+engine can add text properties to that string, to be reused in
+repeated calls with the same string, thus using it as a cache. An
+example where this is useful is code chunks that need to be indented
+as function bodies, but lack the function's preamble---the string
+could then include that missing preamble.
+@item
+A function. It is expected to be called with the start position of
+the current chunk, and should return a cons cell
+@w{@code{(@var{prev-start} . @var{prev-end})}} that specifies the
+region of the previous code chunk, or @code{nil} if there is no previous
+chunk. This is useful in literate-programming sources, where code is
+split into chunks, and correct indentation needs to access previous
+chunks.
+@end itemize
+@end table
+@end defvar
+
+The following convenience functions should be used by major mode's
+indentation engine in support of invocations as sub-modes of another
+major mode.
+
+@defun prog-first-column
+Call this function instead of using a literal value (usually, zero) of
+the column number for indenting top-level program constructs. The
+function's value is the column number to use for top-level constructs.
+When no superior mode is in effect, this function returns zero.
+@end defun
+
+@defun prog-widen
+Call this function instead of @code{widen} to remove any restrictions
+imposed by the mode's indentation engine and restore the restrictions
+recorded in @code{prog-indentation-context}. This prevents the
+indentation engine of a sub-mode from inadvertently operating on text
+outside of the chunk it was supposed to indent, and preserves the
+restriction imposed by the superior mode. When no superior mode is in
+effect, this function just calls @code{widen}.
+@end defun
+
@node Region Indent
@subsection Indenting an Entire Region
coding instead.
@end defun
+@defun buffer-hash &optional buffer-or-name
+Return a hash of @var{buffer-or-name}. If @code{nil}, this defaults
+to the current buffer. As opposed to @code{secure-hash}, this
+function computes the hash based on the internal representation of the
+buffer, disregarding any coding systems. It's therefore only useful
+when comparing two buffers running in the same Emacs, and is not
+guaranteed to return the same hash between different Emacs versions.
+It should be somewhat more efficient on larger buffers than
+@code{secure-hash} is, and should not allocate more memory.
+@c Note that we do not document what hashing function we're using, or
+@c even whether it's a cryptographic hash, since that may change
+@c according to what we find useful.
+@end defun
+
@node Parsing HTML/XML
@section Parsing HTML and XML
@cindex parsing html
to use this, @pxref{Auto Major Mode}.
@end defvar
-@defun hack-local-variables &optional mode-only
+@defun hack-local-variables &optional handle-mode
This function parses, and binds or evaluates as appropriate, any local
variables specified by the contents of the current buffer. The variable
@code{enable-local-variables} has its effect here. However, this
function ignores a @samp{mode} element if it specifies the same major
mode as the buffer already has.
-If the optional argument @var{mode-only} is non-@code{nil}, then all
-this function does is return a symbol specifying the major mode,
-if the @w{@samp{-*-}} line or the local variables list specifies one,
-and @code{nil} otherwise. It does not set the mode nor any other
-file-local variable.
+If the optional argument @var{handle-mode} is @code{t}, then all this
+function does is return a symbol specifying the major mode, if the
+@w{@samp{-*-}} line or the local variables list specifies one, and
+@code{nil} otherwise. It does not set the mode or any other
+file-local variable. If @var{handle-mode} has any value other than
+@code{nil} or @code{t}, any settings of @samp{mode} in the
+@w{@samp{-*-}} line or the local variables list are ignored, and the
+other settings are applied. If @var{handle-mode} is @code{nil}, all
+the file local variables are set.
@end defun
@defvar file-local-variables-alist
children.
@end defun
+@defun window-pixel-height-before-size-change &optional Lisp_Object &optional window
+This function returns the height of window @var{window} in pixels at the
+time @code{window-size-change-functions} was run for the last time on
+@var{window}'s frame (@pxref{Window Hooks}).
+@end defun
+
@cindex window pixel width
@cindex pixel width of a window
@cindex total pixel width of a window
the screen areas spanned by its children.
@end defun
+@defun window-pixel-width-before-size-change &optional Lisp_Object &optional window
+This function returns the width of window @var{window} in pixels at the
+time @code{window-size-change-functions} was run for the last time on
+@var{window}'s frame (@pxref{Window Hooks}).
+@end defun
+
@cindex full-width window
@cindex full-height window
The following functions can be used to determine whether a given
entry (@pxref{Choosing Window Options}), raises that frame if necessary.
@end defun
+@defun display-buffer-reuse-mode-window buffer alist
+This function tries to display @var{buffer} by finding a window
+that is displaying a buffer in a given mode.
+
+If @var{alist} contains a @code{mode} entry, its value is a major mode
+(a symbol) or a list of major modes. If @var{alist} contains no
+@code{mode} entry, the current major mode of @var{buffer} is used. A
+window is a candidate if it displays a buffer that derives from one of
+the given modes.
+
+The behaviour is also controlled by entries for
+@code{inhibit-same-window}, @code{reusable-frames} and
+@code{inhibit-switch-frame} as is done in the function
+@code{display-buffer-reuse-window}.
+
+@end defun
+
@defun display-buffer-pop-up-frame buffer alist
This function creates a new frame, and displays the buffer in that
frame's window. It actually performs the frame creation by calling
The argument @var{configuration} must be a value that was previously
returned by @code{current-window-configuration}. The configuration is
restored in the frame from which @var{configuration} was made, whether
-that frame is selected or not. This always counts as a window size
-change and triggers execution of the @code{window-size-change-functions}
-(@pxref{Window Hooks}), because @code{set-window-configuration} doesn't
-know how to tell whether the new configuration actually differs from the
-old one.
+that frame is selected or not. In some rare cases this may trigger
+execution of the @code{window-size-change-functions} (@pxref{Window
+Hooks}) even if the size of windows did not change at all. The
+@code{window-configuration-change-hook} functions will be called if and
+only if at least one window was added to or deleted from the frame.
If the frame from which @var{configuration} was saved is dead, all this
function does is restore the three variables @code{window-min-height},
@end defvar
@defvar window-size-change-functions
-This variable holds a list of functions to be called if the size of
-any window changes for any reason. The functions are called at the
-beginning of a redisplay cycle, and just once for each frame on which
-size changes have occurred.
-
-Each function receives the frame as its sole argument. There is no
-direct way to find out which windows on that frame have changed size, or
-precisely how. However, if a size-change function records, at each
-call, the existing windows and their sizes, it can also compare the
-present sizes and the previous sizes.
-
-Creating or deleting windows counts as a size change, and therefore
-causes these functions to be called. Changing the frame size also
-counts, because it changes the sizes of the existing windows.
+This variable holds a list of functions to be called if the size of any
+window changes for any reason. The functions are called once per
+redisplay, and once for each frame on which size changes have occurred.
+
+Each function receives the frame as its sole argument. To find out
+whether a specific window has changed size, compare the return values of
+@code{window-pixel-width-before-size-change} and
+@code{window-pixel-width} respectively
+@code{window-pixel-height-before-size-change} and
+@code{window-pixel-height} for that window (@pxref{Window Sizes}).
+
+These function are usually only called when at least one window was
+added or has changed size since the last time this hook was run for the
+associated frame. In some rare cases this hook also runs when a window
+that was added intermittently has been deleted afterwards. In these
+cases none of the windows on the frame will appear to have changed its
+size.
You may use @code{save-selected-window} in these functions
(@pxref{Selecting Windows}). However, do not use
@code{save-window-excursion} (@pxref{Window Configurations}); exiting
-that macro counts as a size change, which would cause these functions
-to be called over and over.
+that macro counts as a size change, which would cause these functions to
+be called again.
@end defvar
@defvar window-configuration-change-hook
-A normal hook that is run every time you change the window configuration
-of an existing frame. This includes splitting or deleting windows,
-changing the sizes of windows, or displaying a different buffer in a
-window.
+A normal hook that is run every time the window configuration of a frame
+changes. Window configuration changes include splitting and deleting
+windows and the display of a different buffer in a window. Resizing the
+frame or individual windows do not count as configuration changes. Use
+@code{window-size-change-functions}, see above, when you want to track
+size changes that are not caused by the deletion or creation of windows.
The buffer-local part of this hook is run once for each window on the
affected frame, with the relevant window selected and its buffer
cp gnustmppdf.pdf $@
rm gnustmppdf.*
-${buildinfodir}/tramp.info tramp.html: EXTRA_OPTS = -D emacs
${buildinfodir}/tramp.info tramp.html: ${srcdir}/trampver.texi
* Comment Line-Up::
* Misc Line-Up::
+
Customizing Macros
* Macro Backslashes::
* Macros with ;::
+* Noise Macros::
@end detailmenu
@end menu
-
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@node Introduction, Overview, Top, Top
@comment node-name, next, previous, up
invoked @ccmode{} can only indent and fontify code heuristically.
Sometimes it gets it wrong. Usually you should try to design your
macros so that they ''look like ordinary code'' when you invoke them.
-However, one situation is so common that @ccmode{} handles it
+However, two situations are so common that @ccmode{} handles them
specially: that is when certain macros needn't (or mustn't) be
-followed by a @samp{;}. You need to configure @ccmode{} to handle
-these macros properly, see @ref{Macros with ;}.
+followed by a @samp{;}, and when certain macros (or compiler
+directives) expand to nothing. You need to configure @ccmode{} to
+handle these macros properly, see @ref{Macros with ;} and @ref{Noise
+Macros}.
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@menu
* Macro Backslashes::
* Macros with ;::
+* Noise Macros::
@end menu
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@end defopt
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@node Macros with ;, , Macro Backslashes, Custom Macros
+@node Macros with ;, Noise Macros, Macro Backslashes, Custom Macros
@comment node-name, next, previous, up
@section Macros with semicolons
@cindex macros with semicolons
initialization code.
@end defun
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+@node Noise Macros, , Macros with ;, Custom Macros
+@comment node-name, next, previous, up
+@section Noise Macros
+@cindex noise macros
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+In @ccmode{}, @dfn{noise macros} are macros which expand to nothing,
+or compiler directives (such as GCC's @code{__attribute__}) which play
+no part in the syntax of the C (etc.) language. Some noise macros are
+followed by arguments in parentheses (possibly optionally), others
+are not.
+
+Noise macros can easily confuse @ccmode{}'s analysis of function
+headers, causing them to be mis-fontified, or even mis-indented. You
+can prevent this confusion by specifying the identifiers which
+constitute noise macros.
+
+@defopt c-noise-macro-names
+@vindex noise-macro-names (c-)
+This variable is a list of names of noise macros which never have
+parenthesized arguments. Each element is a string, and must be a
+valid identifier. An element in @code{c-noise-macro-names} must not
+also be in @code{c-noise-macro-with-parens-names}. Such an element is
+treated as whitespace by @ccmode{}.
+@end defopt
+
+@defopt c-noise-macro-with-parens-names
+@vindex noise-macro-with-parens-names (c-)
+This variable is a list of names of noise macros which optionally have
+arguments in parentheses. Each element of the list is a string, and
+must be a valid identifier. An element in
+@code{c-noise-macro-with-parens-names} must not also be in
+@code{c-noise-macro-names}. For performance reasons, such an element,
+together with the optional parenthesized arguments, is specially
+handled, but it is only handled when used in declaration
+contexts@footnote{If this restriction causes your project
+difficulties, please get in touch with @email{bug-cc-mode@@gnu.org}.}.
+
+The two compiler directives @code{__attribute__} and @code{__declspec}
+have traditionally been handled specially in @ccmode{}; for example
+they are fontified with font-lock-keyword-face. You don't need to
+include these directives in @code{c-noise-macro-with-parens-names},
+but doing so is OK.
+@end defopt
+
+@defun c-make-noise-macro-regexps
+@findex make-noise-macro-regexps (c-)
+Call this (non-interactive) function, which sets internal variables,
+after changing the value of @code{c-noise-macro-names} or
+@code{c-noise-macro-with-parens-names} (e.g. in a hook (@pxref{CC
+Hooks})). This function is called by @ccmode{}'s initialization code.
+@end defun
+
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@node Odds and Ends, Sample Init File, Custom Macros, Top
@comment node-name, next, previous, up
You should not have to use the @file{gnutls.el} functions directly.
But you can test them with @code{open-gnutls-stream}.
-@defun open-gnutls-stream name buffer host service
+@defun open-gnutls-stream name buffer host service &optional nowait
This function creates a buffer connected to a specific @var{host} and
@var{service} (port number or service name). The parameters and their
syntax are the same as those given to @code{open-network-stream}
Manual}). The connection process is called @var{name} (made unique if
necessary). This function returns the connection process.
+The @var{nowait} parameter means that the socket should be
+asynchronous, and the connection process will be returned to the
+caller before TLS negotiation has happened.
+
@lisp
;; open a HTTPS connection
(open-gnutls-stream "tls" "tls-buffer" "yourserver.com" "https")
@end defun
+@findex gnutls-asynchronous-parameters
+If called with @var{nowait}, the process is returned immediately
+(before connecting to the server). In that case, the process object
+is told what parameters to use when negotiating the connection
+by using the @code{gnutls-asynchronous-parameters} function.
+
The function @code{gnutls-negotiate} is not generally useful and it
may change as needed, so please see @file{gnutls.el} for the details.
@vindex mailcap-mime-data
This variable is an alist of alists containing backup viewing rules.
+@item mailcap-user-mime-data
+@vindex mailcap-user-mime-data
+A customizable list of viewers that take preference over
+@code{mailcap-mime-data}.
+
@end table
Interface functions:
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
(@code{eww-list-bookmarks}). This will open the bookmark buffer
@file{*eww bookmarks*}.
+@findex eww-switch-to-buffer
@findex eww-list-buffers
+@kindex s
@kindex S
@cindex Multiple Buffers
To get summary of currently opened EWW buffers, press @kbd{S}
(@code{eww-list-buffers}). The @file{*eww buffers*} buffer allows you
-to quickly kill, flip through and switch to specific EWW buffer.
+to quickly kill, flip through and switch to specific EWW buffer. To
+switch EWW buffers through a minibuffer prompt, press @kbd{s}
+(@code{eww-switch-to-buffer}).
@findex eww-browse-with-external-browser
@vindex shr-external-browser
@item
@vindex gnus-ignored-from-addresses
-The @code{gnus-ignored-from-addresses} variable says when the @samp{%f}
-summary line spec returns the @code{To}, @code{Newsreader} or
-@code{From} header. If this regexp matches the contents of the
-@code{From} header, the value of the @code{To} or @code{Newsreader}
-headers are used instead.
+The @code{gnus-ignored-from-addresses} variable says when the
+@samp{%f} summary line spec returns the @code{To}, @code{Newsreader}
+or @code{From} header. The variable may be a regexp or a predicate
+function. If this matches the contents of the @code{From}
+header, the value of the @code{To} or @code{Newsreader} headers are
+used instead.
To distinguish regular articles from those where the @code{From} field
has been swapped, a string is prefixed to the @code{To} or
@vindex message-dont-reply-to-names
Addresses that match the @code{message-dont-reply-to-names} regular
-expression (or list of regular expressions) will be removed from the
-@code{Cc} header. A value of @code{nil} means exclude your name only.
+expression (or list of regular expressions or a predicate function)
+will be removed from the @code{Cc} header. A value of @code{nil} means
+exclude your name only.
@vindex message-prune-recipient-rules
@code{message-prune-recipient-rules} is used to prune the addresses
@item message-alternative-emails
@vindex message-alternative-emails
-Regexp matching alternative email addresses. The first address in the
-To, Cc or From headers of the original article matching this variable is
-used as the From field of outgoing messages, replacing the default From
-value.
+Regexp or predicate function matching alternative email addresses.
+The first address in the To, Cc or From headers of the original
+article matching this variable is used as the From field of outgoing
+messages, replacing the default From value.
For example, if you have two secondary email addresses john@@home.net
and john.doe@@work.com and want to use them in the From field when
@code{"%.3f"}, all the cells using printer @samp{foo} will be
reprinted accordingly.
+When you define a printer function with a lambda expression taking one
+argument, please take care that the returned value is a string, or a
+list containing a string, even when the input argument has an
+unexpected value. Here is an example:
+
+@example
+(lambda (val)
+ (cond
+ ((null val) "")
+ ((and (numberp val) (>= val 0)) (format "%.1f" val))
+ (t (ses-center-span (format "%S" val) ?#))))
+@end example
+
+This example will:
+@itemize
+@item
+When the cell is empty (ie.@: when @code{val} is @code{nil}), print an
+empty string @code{""}
+@item
+When the cell value is a non negative number, format the the value in
+fixed-point notation with one decimal after point
+@item
+Otherwise, handle the value as erroneous by printing it as an
+s-expression (using @code{prin1}), centered and surrounded by @code{#}
+filling.
+@end itemize
+
+
+
+
@node Clearing cells
@section Clearing cells
@cindex clearing commands
@include trampver.texi
-@c Macro for formatting a file name according to the respective syntax.
-@c Macro arguments should not have any leading or
-@c trailing whitespace. Not very elegant, but I don't know it better.
+@c Macro for formatting a file name according to the respective
+@c syntax. Macro arguments should not have any leading or trailing
+@c whitespace. Not very elegant, but I don't know it better.
@macro trampfn {method, userhost, localname}
@value{prefix}@c
@end copying
@c Entries for @command{install-info} to use
-@dircategory @value{emacsname} network features
+@dircategory Emacs network features
@direntry
* TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
- @value{emacsname} remote file access via ssh and scp.
+ Emacs remote file access via ssh and scp.
@end direntry
@titlepage
@contents
-@ifnottex
@node Top, Overview, (dir), (dir)
@top @value{tramp} version @value{trampver} User Manual
+@ifnottex
This file documents @value{tramp} version @value{trampver}, a remote file
-editing package for @value{emacsname}.
+editing package for Emacs.
@value{tramp} stands for ``Transparent Remote (file) Access, Multiple
Protocol''. This package provides remote file editing, similar to
-@value{ftppackagename}.
+Ange FTP.
-The difference is that @value{ftppackagename} uses FTP to transfer
-files between the local and the remote host, whereas @value{tramp} uses a
-combination of @command{rsh} and @command{rcp} or other work-alike
-programs, such as @command{ssh}/@command{scp}.
+The difference is that Ange FTP uses FTP to transfer files between the
+local and the remote host, whereas @value{tramp} uses a combination of
+@command{rsh} and @command{rcp} or other work-alike programs, such as
+@command{ssh}/@command{scp}.
You can find the latest version of this document on the web at
@uref{http://www.gnu.org/software/tramp/}.
-@c Pointer to the other Emacs flavor is necessary only in case of
-@c standalone installation.
-@ifset installchapter
-The manual has been generated for @value{emacsname}.
-@ifinfo
-If you want to read the info pages for @value{emacsothername}, you
-should read in @ref{Installation} how to create them.
-@end ifinfo
-@ifhtml
-If you're using the other Emacs flavor, you should read the
-@uref{@value{emacsotherfilename}, @value{emacsothername}} pages.
-@end ifhtml
-@end ifset
-
@ifhtml
The latest release of @value{tramp} is available for
@uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
@end ifhtml
@insertcopying
-
@end ifnottex
@menu
* Obtaining Tramp:: How to obtain @value{tramp}.
* History:: History of @value{tramp}.
@ifset installchapter
-* Installation:: Installing @value{tramp} with your @value{emacsname}.
+* Installation:: Installing @value{tramp} with your Emacs.
@end ifset
* Configuration:: Configuring @value{tramp} for use.
* Usage:: An overview of the operation of @value{tramp}.
How file names, directories and localnames
are mangled and managed.
* Traces and Profiles:: How to Customize Traces.
-* Issues:: Debatable Issues and What Was Decided.
* GNU Free Documentation License:: The license for this documentation.
* Function Index:: @value{tramp} functions.
--- The Detailed Node Listing ---
@c
@ifset installchapter
-Installing @value{tramp} with your @value{emacsname}
+Installing @value{tramp} with your Emacs
* Installation parameters:: Parameters in order to control installation.
* Load paths:: How to plug-in @value{tramp} into your environment.
* Connection types:: Types of connections to remote hosts.
* Inline methods:: Inline methods.
* External methods:: External methods.
-@ifset emacsgvfs
* GVFS based methods:: GVFS based external methods.
-@end ifset
-@ifset emacsgw
* Gateway methods:: Gateway methods.
-@end ifset
* Default Method:: Selecting a default method.
* Default User:: Selecting a default user.
* Default Host:: Selecting a default host.
* File name Syntax:: @value{tramp} file name conventions.
* File name completion:: File name completion.
* Ad-hoc multi-hops:: Declaring multiple hops in the file name.
-* Remote processes:: Integration with other @value{emacsname} packages.
+* Remote processes:: Integration with other Emacs packages.
* Cleanup remote connections:: Cleanup remote connections.
How file names, directories and localnames are mangled and managed
* Localname deconstruction:: Breaking a localname into its components.
-@ifset emacs
* External packages:: Integration with external Lisp packages.
-@end ifset
@end detailmenu
@end menu
@cindex overview
@value{tramp} is for transparently accessing remote files from within
-@value{emacsname}. @value{tramp} enables an easy, convenient, and
-consistent interface to remote files as if they are local files.
-@value{tramp}'s transparency extends to editing, version control, and
-@code{dired}.
+Emacs. @value{tramp} enables an easy, convenient, and consistent
+interface to remote files as if they are local files. @value{tramp}'s
+transparency extends to editing, version control, and @code{dired}.
@value{tramp} can access remote hosts using any number of access
methods, such as @command{rsh}, @command{rlogin}, @command{telnet},
@value{tramp} temporarily transfers a remote file's contents to the
local host editing and related operations. @value{tramp} can also
transfer files between hosts using standard Emacs interfaces, a
-benefit of direct integration of @value{tramp} in @value{emacsname}.
+benefit of direct integration of @value{tramp} in Emacs.
@value{tramp} can transfer files using any number of available host
programs for remote files, such as @command{rcp}, @command{scp},
@value{tramp} invokes @samp{telnet @var{host}} or @samp{rsh @var{host}
-l @var{user}} and establishes an external process to connect to the
remote host. @value{tramp} communicates with the process through an
-@value{emacsname} buffer, which also shows output from the remote
-host.
+Emacs buffer, which also shows output from the remote host.
@item
The remote host may prompt for a login name (for @command{telnet}, for
@c For the end user
@node Obtaining Tramp
-@chapter Obtaining Tramp.
+@chapter Obtaining @value{tramp}
@cindex obtaining Tramp
@value{tramp} is included as part of Emacs (since Emacs version 22.1).
Another way is to follow the terminal session below:
@example
-] @strong{cd ~/@value{emacsdir}}
+] @strong{cd ~/emacs}
] @strong{git clone git://git.savannah.gnu.org/tramp.git}
@end example
@end example
@noindent
-After one of the above commands, @file{~/@value{emacsdir}/tramp} will
+After one of the above commands, @file{~/emacs/tramp} will
containing the latest version of @value{tramp}.
@noindent
To fetch updates from the repository, use git pull:
@example
-] @strong{cd ~/@value{emacsdir}/tramp}
+] @strong{cd ~/emacs/tramp}
] @strong{git pull}
@end example
@file{configure} script:
@example
-] @strong{cd ~/@value{emacsdir}/tramp}
+] @strong{cd ~/emacs/tramp}
] @strong{autoconf}
@end example
April 2000 was the first time when multi-hop methods were added. In
July 2002, @value{tramp} unified file names with Ange-FTP@. In July
2004, proxy hosts replaced multi-hop methods. Running commands on
-remote hosts was introduced in December 2005.
-@ifset emacsgw
-Support for gateways since April 2007.
-@end ifset
-@ifset emacsgvfs
-GVFS integration started in February 2009.
-@end ifset
-@ifset emacs
-Remote commands on Windows hosts since September 2011.
-@end ifset
-Ad-hoc multi-hop methods (with a changed syntax) re-enabled in November
-2011.
-
-In November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
-
-In December 2001, XEmacs package repository adds @value{tramp}.
+remote hosts was introduced in December 2005. Support for gateways
+since April 2007. GVFS integration started in February 2009. Remote
+commands on Windows hosts since September 2011. Ad-hoc multi-hop
+methods (with a changed syntax) re-enabled in November 2011. In
+November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
+XEmacs support has been stopped in January 2016.
@c Installation chapter is necessary only in case of standalone
@c installation. Text taken from trampinst.texi.
@value{tramp} is initially configured to use the @command{scp} program
to connect to the remote host. Just type @kbd{C-x C-f} and then enter
-file name @file{@trampf{user@@host,/path/to.file}}. For details,
-see @xref{Default Method}.
+file name @file{@trampf{user@@host,/path/to.file}}. For details, see
+@xref{Default Method}.
For problems related to the behavior of remote shell, see @ref{Remote
shell setup} for details.
types}).
@strong{Note} that some user options and variables described in these
-examples are not auto loaded by @value{emacsname}. All examples
-require @value{tramp} is installed and loaded:
+examples are not auto loaded by Emacs. All examples require
+@value{tramp} is installed and loaded:
@lisp
(require 'tramp)
* Connection types:: Types of connections to remote hosts.
* Inline methods:: Inline methods.
* External methods:: External methods.
-@ifset emacsgvfs
* GVFS based methods:: GVFS based external methods.
-@end ifset
-@ifset emacsgw
* Gateway methods:: Gateway methods.
-@end ifset
* Default Method:: Selecting a default method.
Here we also try to help those who
don't have the foggiest which method
contents. Inline methods are quick and easy for small files. They
depend on the availability of suitable encoding and decoding programs
on the remote host. For local source and destination, @value{tramp}
-may use built-in equivalents of such programs in @value{emacsname}.
+may use built-in equivalents of such programs in Emacs.
Inline methods can work in situations where an external transfer
program is unavailable. Inline methods also work when transferring
@command{rsh} is an option for connecting to hosts within local
networks since @command{rsh} is not as secure as other methods.
-
@item @option{ssh}
@cindex method ssh
@cindex ssh method
Connecting to a remote host with @command{telnet} is as insecure
as the @option{rsh} method.
-
@item @option{su}
@cindex method su
@cindex su method
Similar to @option{su} method, @option{sudo} uses @command{sudo}.
@command{sudo} must have sufficient rights to start a shell.
+@item @option{doas}
+@cindex method doas
+@cindex doas method
+
+This method is used on OpenBSD like the @command{sudo} command.
+
+@item @option{sg}
+@cindex method sg
+@cindex sg method
+
+The @command{sg} program allows editing as different group. The host
+can be either @samp{localhost} or the host returned by the function
+@command{(system-name)}. The user name must be specified, but it
+denotes a group name. See @ref{Multi-hops} for an exception to this
+behavior.
+
@item @option{sshx}
@cindex method sshx
@cindex sshx method
This is another method from the Kerberos suite. It behaves like @option{su}.
-
@item @option{plink}
@cindex method plink
@cindex plink method
@option{plink} method supports the @samp{-P} argument.
-
@item @option{plinkx}
@cindex method plinkx
@cindex plinkx method
This method supports the @samp{-p} argument.
-
@item @option{scpx}---@command{ssh} and @command{scp}
@cindex method scpx
@cindex scpx method
This method supports the @samp{-p} argument.
-
@item @option{pscp}---@command{plink} and @command{pscp}
@item @option{psftp}---@command{plink} and @command{psftp}
@cindex method pscp
These methods support the @samp{-P} argument.
-
@item @option{fcp}---@command{fsh} and @command{fcp}
@cindex method fcp
@cindex fcp method
@cindex ftp method
When @value{tramp} uses @option{ftp}, it forwards requests to whatever
-ftp program is specified by @value{ftppackagename}. This external
-program must be capable of servicing requests from @value{tramp}.
-
-@ifset xemacs
-This method works only for unified file names, see @ref{Issues}.
-@end ifset
-
+ftp program is specified by Ange FTP. This external program must be
+capable of servicing requests from @value{tramp}.
@item @option{smb}---@command{smbclient}
@cindex method smb
behavior is unlike other @value{tramp} methods, where local user name
is substituted.
-The @option{smb} method is unavailable if @value{emacsname} is run under a
-local user authentication context in MS Windows. However such users
-can still access remote files using UNC file names instead of @value{tramp}:
+The @option{smb} method is unavailable if Emacs is run under a local
+user authentication context in MS Windows. However such users can
+still access remote files using UNC file names instead of @value{tramp}:
@example
//melancholia/daniel$$/.emacs
@value{tramp} connects to Android devices with @option{adb} only when
the custom option @option{tramp-adb-connect-if-not-connected} is not
@code{nil}. Otherwise, the connection must be established outside
-@value{emacsname}.
+Emacs.
@value{tramp} does not require a host name part of the remote file
name when a single Android device is connected to @command{adb}.
-@value{tramp} instead uses @file{@trampfn{adb,,}} as the default
-name. @command{adb devices} shows available host names.
+@value{tramp} instead uses @file{@trampfn{adb,,}} as the default name.
+@command{adb devices} shows available host names.
@option{adb} method normally does not need user name to authenticate
on the Android device because it runs under the @command{adbd}
@end table
-@ifset emacsgvfs
@node GVFS based methods
@section GVFS based external methods
@cindex methods, gvfs
mounted locally through FUSE and @value{tramp} uses this locally
mounted directory internally.
-@value{emacsname} uses the D-Bus mechanism to communicate with GVFS@.
-@value{emacsname} must have the message bus system, D-Bus integration
-active, @pxref{Top, , D-Bus, dbus}.
+Emacs uses the D-Bus mechanism to communicate with GVFS@. Emacs must
+have the message bus system, D-Bus integration active, @pxref{Top, ,
+D-Bus, dbus}.
@table @asis
@item @option{afp}
OBEX is an FTP-like access protocol for cell phones and similar simple
devices. @value{tramp} supports OBEX over Bluetooth.
-
@item @option{sftp}
@cindex method sftp
@cindex sftp method
@option{obex}, @option{sftp} and @option{synce}. Other methods to
include are: @option{ftp} and @option{smb}.
@end defopt
-@end ifset
-@ifset emacsgw
@node Gateway methods
@section Gateway methods
@cindex methods, gateway
Authentication} (see RFC 2617). When no port number is specified, this
protocol defaults to @option{8080}.
-
@item @option{socks}
@cindex method socks
@cindex socks method
specified otherwise.
@end table
-@end ifset
@node Default Method
for more details.
A Caution: @value{tramp} will override any default user specified in
-the configuration files outside @value{emacsname}, such as
-@file{~/.ssh/config}. To stop @value{tramp} from applying the default
-value, set the corresponding alist entry to nil:
+the configuration files outside Emacs, such as @file{~/.ssh/config}.
+To stop @value{tramp} from applying the default value, set the
+corresponding alist entry to nil:
@lisp
(add-to-list 'tramp-default-user-alist
@vindex tramp-default-host-alist
When host name is omitted, @value{tramp} substitutes the value from
-the @code{tramp-default-host} variable. It is initially populated with
-the local hostname where @value{emacsname} is running. Both the
-default user and default host can be overridden as follows:
+the @code{tramp-default-host} variable. It is initially populated
+with the local hostname where Emacs is running. Both the default user
+and default host can be overridden as follows:
@lisp
(setq tramp-default-user "john"
With both defaults set, @samp{@trampfn{ssh,,}} will connect
@value{tramp} to John's home directory on target.
-@ifset emacs
@strong{Note} @samp{/::} won't work, because @samp{/:} is the prefix
for quoted file names.
-@end ifset
Instead of a single default host, @code{tramp-default-host-alist}
allows multiple default host values based on access method or user
@var{proxy} is a literal @value{tramp} file name whose local name part
is ignored, and the method and user name parts are optional.
-@ifset emacsgw
The method must be an inline or gateway method (@pxref{Inline
methods}, @pxref{Gateway methods}).
-@end ifset
-@ifclear emacsgw
-The method must be an inline method (@pxref{Inline methods}).
-@end ifclear
If @var{proxy} is @code{nil}, no additional hop is required reaching
@var{user}@@@var{host}.
'("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh,%h,}"))
@end lisp
-Opening @file{@trampfn{sudo,randomhost.your.domain,}} first
-connects to @samp{randomhost.your.domain} via @code{ssh} under your
-account name, and then perform @code{sudo -u root} on that host.
+Opening @file{@trampfn{sudo,randomhost.your.domain,}} first connects
+to @samp{randomhost.your.domain} via @code{ssh} under your account
+name, and then perform @code{sudo -u root} on that host.
It is key for the sudo method in the above example to be applied on
the host after reaching it and not on the local host.
The above configuration allows @value{tramp} connection as @samp{root}
to remote Ubuntu hosts.
-@ifset emacsgw
@code{tramp-default-proxies-alist} is also used for passing through
firewalls or proxy servers.
@end lisp
Gateway methods in a multiple hop chain can be declared only as the first hop.
-@end ifset
@end defopt
Passing through hops involves dealing with restricted shells, such as
A function which parses @file{/etc/passwd} files for user names.
+@item @code{tramp-parse-etc-group}
+@findex tramp-parse-etc-group
+
+A function which parses @file{/etc/group} files for group names.
+
@item @code{tramp-parse-netrc}
@findex tramp-parse-netrc
@code{password-cache-expiry} sets the duration (in seconds) the
passwords are remembered. Passwords are never saved permanently nor
-can they extend beyond the lifetime of the current @value{emacsname}
-session. Set @code{password-cache-expiry} to @code{nil} to disable
-expiration.
+can they extend beyond the lifetime of the current Emacs session. Set
+@code{password-cache-expiry} to @code{nil} to disable expiration.
@vindex password-cache
@strong{Implementation Note}: password caching depends on
@file{password-cache.el} package. @value{tramp} activates password
-caching only if @value{tramp} can discover, while @value{emacsname} is
-loading, the package through @code{load-path}.
+caching only if @value{tramp} can discover, while Emacs is loading,
+the package through @code{load-path}.
@ifset installchapter
@file{password.el} is available from No Gnus or from the @value{tramp}
connection properties in a file specified by the variable
@code{tramp-persistency-file-name}.
-The default file name for @code{tramp-persistency-file-name} is:
-@ifset emacs
+The default file name for @code{tramp-persistency-file-name} is
@file{~/.emacs.d/tramp}.
-@end ifset
-@ifset xemacs
-@file{~/.xemacs/tramp}.
-@end ifset
-@value{tramp} reads this file during @value{emacsname} startup, and
-writes to it when exiting @value{emacsname}. Delete this file for
-@value{tramp} to recreate a new one on next @value{emacsname} startup.
+@value{tramp} reads this file during Emacs startup, and writes to it
+when exiting Emacs. Delete this file for @value{tramp} to recreate a
+new one on next Emacs startup.
Set @code{tramp-persistency-file-name} to @code{nil} to disable
storing connections persistently.
When remote search paths are changed, local @value{tramp} caches must
be recomputed. To force @value{tramp} to recompute afresh, exit
-@value{emacsname}, remove the persistent file (@pxref{Connection
-caching}), and restart @value{emacsname}.
+Emacs, remove the persistent file (@pxref{Connection caching}), and
+restart Emacs.
@node Remote shell setup
@end example
@ifinfo
-@ifset emacs
-@xref{Interactive Shell, , , @value{emacsdir}}.
-@end ifset
+@xref{Interactive Shell, , , emacs}.
@end ifinfo
@item @command{busybox} / @command{nc}
@noindent
Open a remote connection with the command @kbd{C-x C-f
-@trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening on port
-@samp{2222}.
+@trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening
+on port @samp{2222}.
To add a corresponding entry to the @file{~/.ssh/config} file
(recommended), use this:
@section Auto-save and Backup configuration
@cindex auto-save
@cindex backup
-@ifset emacs
@vindex backup-directory-alist
-@end ifset
-@ifset xemacs
-@vindex bkup-backup-directory-info
-@end ifset
-To avoid @value{tramp} from saving backup files owned by root to
-locations accessible to others, default backup settings in
-@ifset emacs
-@code{backup-directory-alist}
-@end ifset
-@ifset xemacs
-@code{bkup-backup-directory-info}
-@end ifset
-have to be altered.
+To avoid @value{tramp} from saving backup files owned by @samp{root}
+to locations accessible to others, default backup settings in
+@code{backup-directory-alist} have to be altered.
-Here's a scenario where files could be inadvertently
-exposed. @value{emacsname} by default writes backup files to the same
-directory as the original files unless changed to another location,
-such as @file{~/.emacs.d/backups/}. Such a directory will also be used
-by default by @value{tramp} when using, say, a restricted file
+Here's a scenario where files could be inadvertently exposed. Emacs
+by default writes backup files to the same directory as the original
+files unless changed to another location, such as
+@file{~/.emacs.d/backups/}. Such a directory will also be used by
+default by @value{tramp} when using, say, a restricted file
@file{@trampfn{su,root@@localhost,/etc/secretfile}}. The backup file
-of the secretfile is now owned by the user logged in from tramp and
-not root.
+of the secretfile is now owned by the user logged in from
+@value{tramp} and not @samp{root}.
-When
-@ifset emacs
-@code{backup-directory-alist}
-@end ifset
-@ifset xemacs
-@code{bkup-backup-directory-info}
-@end ifset
-is @code{nil} (the default), such problems do not occur.
+When @code{backup-directory-alist} is @code{nil} (the default), such
+problems do not occur.
To ``turn off'' the backup feature for @value{tramp} files and stop
@value{tramp} from saving to the backup directory, use this:
-@ifset emacs
@lisp
(add-to-list 'backup-directory-alist
(cons tramp-file-name-regexp nil))
@end lisp
-@end ifset
-@ifset xemacs
-@lisp
-(require 'backup-dir)
-(add-to-list 'bkup-backup-directory-info
- (list tramp-file-name-regexp ""))
-@end lisp
-@end ifset
-@ifset emacs
@noindent
Disabling backups can be targeted to just the @option{su} and
@option{sudo} methods:
(when (stringp method)
(member method '("su" "sudo"))))))))
@end lisp
-@end ifset
Another option is to create better backup file naming with user and
host names prefixed to the file name. For example, transforming
@file{/etc/secretfile} to
@file{~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile}, set the
-@value{tramp} variable
-@ifset emacs
-@code{tramp-backup-directory-alist}
-@end ifset
-@ifset xemacs
-@code{tramp-bkup-backup-directory-info}
-@end ifset
-from the existing variable
-@ifset emacs
-@code{backup-directory-alist}.
-@end ifset
-@ifset xemacs
-@code{bkup-backup-directory-info}.
-@end ifset
+@value{tramp} variable @code{tramp-backup-directory-alist} from the
+existing variable @code{backup-directory-alist}.
Then @value{tramp} backs up to a file name that is transformed with a
prefix consisting of the DIRECTORY name. This file name prefixing
@noindent
Example:
-@ifset emacs
@lisp
(add-to-list 'backup-directory-alist
(cons "." "~/.emacs.d/backups/"))
(setq tramp-backup-directory-alist backup-directory-alist)
@end lisp
-@end ifset
-@ifset xemacs
-@lisp
-(require 'backup-dir)
-(add-to-list 'bkup-backup-directory-info
- (list "." "~/.emacs.d/backups/" 'full-path))
-(setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
-@end lisp
-@end ifset
@noindent
The backup file name of
@file{@trampfn{su,root@@localhost,/etc/secretfile}} would be
-@ifset emacs
+@ifset unified
@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
@end ifset
-@ifset xemacs
+@ifset separate
@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
@end ifset
Just as for backup files, similar issues of file naming affect
-auto-saving @value{tramp} files.
-@ifset emacs
-Auto-saved files are saved in the directory specified by the variable
+auto-saving @value{tramp} files. Auto-saved files are saved in the
+directory specified by the variable
@code{auto-save-file-name-transforms}. By default this is set to the
local temporary directory. But in some versions of Debian GNU/Linux,
-this points to the source directory where the @value{emacsname} was
-compiled. Reset such values to a valid directory.
+this points to the source directory where the Emacs was compiled.
+Reset such values to a valid directory.
Set @code{auto-save-file-name-transforms} to @code{nil} to save
auto-saved files to the same directory as the original file.
Alternatively, set the variable @code{tramp-auto-save-directory} to
direct all auto saves to that location.
-@end ifset
-@ifset xemacs
-@code{auto-save-directory} can also be used here instead of other
-locations specified above.
-@end ifset
@node Windows setup hints
@section Issues with Cygwin ssh
@cindex method sshx with Cygwin
@cindex sshx method with Cygwin
-Cygwin's @command{ssh} works only with a Cygwin version of
-@value{emacsname}. To check for compatibility: type @kbd{M-x eshell}, and
-start @kbd{ssh test.host}. Incompatibilities trigger this message:
+Cygwin's @command{ssh} works only with a Cygwin version of Emacs. To
+check for compatibility: type @kbd{M-x eshell}, and start @kbd{ssh
+test.host}. Incompatibilities trigger this message:
@example
Pseudo-terminal will not be allocated because stdin is not a terminal.
@cindex method scpx with Cygwin
@cindex scpx method with Cygwin
-When using the @option{scpx} access method, @value{emacsname} may call
+When using the @option{scpx} access method, Emacs may call
@command{scp} with Windows file naming, such as @code{c:/foo}. But
the version of @command{scp} that is installed with Cygwin does not
know about Windows file naming, which causes it to incorrectly look
Windows file names to Cygwin file names.
@cindex Cygwin and ssh-agent
-@cindex SSH_AUTH_SOCK and @value{emacsname} on Windows
+@cindex SSH_AUTH_SOCK and Emacs on Windows
When using the @command{ssh-agent} on Windows for password-less
interaction, @option{ssh} methods depend on the environment variable
-@env{SSH_AUTH_SOCK}. But this variable is not set when
-@value{emacsname} is started from a Desktop shortcut and
-authentication fails.
+@env{SSH_AUTH_SOCK}. But this variable is not set when Emacs is
+started from a Desktop shortcut and authentication fails.
One workaround is to use a Windows based SSH Agent, such as
Pageant. It is part of the Putty Suite of tools.
-The fallback is to start @value{emacsname} from a shell.
+The fallback is to start Emacs from a shell.
@node Usage
they are local. However, @value{tramp} employs a formalized remote
file naming syntax to perform its functions transparently. This
syntax consists of many parts specifying access methods,
-authentication, host names, and file names.
-@ifset emacs
-@value{ftppackagename} uses a similar syntax.
-@end ifset
+authentication, host names, and file names. Ange FTP uses a similar
+syntax.
@cindex type-ahead
-Unlike opening local files in @value{emacsname}, which are
-instantaneous, opening remote files in @value{tramp} is slower at
-first. Sometimes there is a noticeable delay before the prompts for
-passwords or authentication appear in the minibuffer. Hitting
-@kbd{@key{RET}} or other keys during this gap will be processed by
-@value{emacsname}. This type-ahead facility is a feature of
-@value{emacsname} that may cause missed prompts when using
+Unlike opening local files in Emacs, which are instantaneous, opening
+remote files in @value{tramp} is slower at first. Sometimes there is
+a noticeable delay before the prompts for passwords or authentication
+appear in the minibuffer. Hitting @kbd{@key{RET}} or other keys
+during this gap will be processed by Emacs. This type-ahead facility
+is a feature of Emacs that may cause missed prompts when using
@value{tramp}.
@menu
* File name Syntax:: @value{tramp} file name conventions.
* File name completion:: File name completion.
* Ad-hoc multi-hops:: Declaring multiple hops in the file name.
-* Remote processes:: Integration with other @value{emacsname} packages.
+* Remote processes:: Integration with other Emacs packages.
* Cleanup remote connections:: Cleanup remote connections.
@end menu
@cindex file name syntax
@cindex file name examples
-@file{@trampf{host,localfilename}}
-opens file @var{localfilename} on the remote host @var{host}, using
-the default method. @xref{Default Method}.
+@file{@trampf{host,localfilename}} opens file @var{localfilename} on
+the remote host @var{host}, using the default method. @xref{Default
+Method}.
@table @file
@item @value{prefix}melancholia@value{postfix}.emacs
@var{host} can take IPv4 or IPv6 address, as in
@file{@trampf{127.0.0.1,.emacs}} or
@file{@trampf{@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}.
-@ifset emacs
+@ifset unified
For syntactical reasons, IPv6 addresses must be embedded in square
brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
@end ifset
@trampf{user@@host,path/to.file}
@end example
-@file{@trampf{daniel@@melancholia,.emacs}} is for file
-@file{.emacs} in @code{daniel}'s home directory on the host,
-@code{melancholia}.
+@file{@trampf{daniel@@melancholia,.emacs}} is for file @file{.emacs}
+in @code{daniel}'s home directory on the host, @code{melancholia}.
Specify other file access methods (@pxref{Inline methods},
@pxref{External methods}) as part of the file name.
-@ifset emacs
Method name comes before user name, as in
@file{@value{prefix}@var{method}@value{postfixhop}} (Note the trailing
-colon).
-@end ifset
-@ifset xemacs
-This is done by replacing the initial @file{@value{prefix}} with
-@file{@value{prefix}@var{method}@value{postfixhop}} (Note the trailing
-slash!).
-@end ifset
-The syntax specifications for user, host, and file do not change.
+colon). The syntax specifications for user, host, and file do not
+change.
To connect to the host @code{melancholia} as @code{daniel}, using
@option{ssh} method for @file{.emacs} in @code{daniel}'s home
@value{tramp} can complete the following @value{tramp} file name
components: method names, user names, host names, and file names
-located on remote hosts.
-@ifset emacs
-Enable this by activating partial completion in @file{.emacs}.
+located on remote hosts. Enable this by activating partial completion
+in @file{.emacs}.
@ifinfo
-@xref{Completion Options, , , @value{emacsdir}}.
+@xref{Completion Options, , , emacs}.
@end ifinfo
-@end ifset
For example, type @kbd{C-x C-f @value{prefix}t @key{TAB}},
@value{tramp} completion choices show up as
@example
@c @multitable {@trampfn{telnet,melancholia.danann.net,}} {@trampfn{telnet,192.168.0.1,}}
@multitable @columnfractions .5 .5
-@ifset emacs
@item @value{prefixhop}telnet@value{postfixhop} @tab tmp/
@item @value{prefixhop}toto@value{postfix} @tab
-@end ifset
-@ifset xemacs
-@item @value{prefixhop}telnet@value{postfixhop} @tab @value{prefixhop}toto@value{postfix}
-@end ifset
@end multitable
@end example
-@samp{@value{prefixhop}telnet@value{postfixhop}}
-is a possible completion for the respective method,
-@ifset emacs
-@samp{tmp/} stands for the directory @file{/tmp} on your local host,
-@end ifset
-and @samp{@value{prefixhop}toto@value{postfix}}
-might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts}
-file (when using @option{ssh} as default method).
+@samp{@value{prefixhop}telnet@value{postfixhop}} is a possible
+completion for the respective method, @samp{tmp/} stands for the
+directory @file{/tmp} on your local host, and
+@samp{@value{prefixhop}toto@value{postfix}} might be a host
+@value{tramp} has detected in your @file{~/.ssh/known_hosts} file
+(when using @option{ssh} as default method).
Type @kbd{e @key{TAB}} for the minibuffer completion to
@samp{@value{prefix}telnet@value{postfixhop}}. Typing @kbd{@key{TAB}}
completion lists.
After remote host name completion comes completion of file names on
-the remote host. It works the same as with local host file completion,
+the remote host. It works the same as with local host file completion
except that killing with double-slash @file{//} kills only the file
-name part of the @value{tramp} file name syntax.
-@ifset emacs
-A triple-slash stands for the default behavior.
-@end ifset
+name part of the @value{tramp} file name syntax. A triple-slash
+stands for the default behavior.
@ifinfo
-@xref{Minibuffer File, , , @value{emacsdir}}.
+@xref{Minibuffer File, , , emacs}.
@end ifinfo
@noindent
Example:
@example
-@ifset emacs
@kbd{C-x C-f @trampfn{telnet,melancholia,/usr/local/bin//etc} @key{TAB}}
@print{} @trampfn{telnet,melancholia,/etc}
@kbd{C-x C-f @trampfn{telnet,melancholia,/usr/local/bin///etc} @key{TAB}}
@print{} /etc
-@end ifset
-
-@ifset xemacs
-@kbd{C-x C-f @trampfn{telnet,melancholia,/usr/local/bin//}}
- @print{} @trampfn{telnet,melancholia,/}
-
-@kbd{C-x C-f @trampfn{telnet,melancholia,//}}
- @print{} /
-@end ifset
@end example
During file name completion, remote directory contents are re-read
regularly to account for any changes in the filesystem that may affect
the completion candidates. Such re-reads can account for changes to
-the file system by applications outside @value{emacsname}
-(@pxref{Connection caching}).
+the file system by applications outside Emacs (@pxref{Connection
+caching}).
@defopt tramp-completion-reread-directory-timeout
@vindex tramp-completion-reread-directory-timeout
@value{tramp} adds the ad-hoc definitions on the fly to
@code{tramp-default-proxies-alist} and is available for re-use during
-that @value{emacsname} session. Subsequent @value{tramp} connections
-to the same remote host can then use the shortcut form:
+that Emacs session. Subsequent @value{tramp} connections to the same
+remote host can then use the shortcut form:
@samp{@trampfn{ssh,you@@remotehost,/path}}.
@defopt tramp-save-ad-hoc-proxies
@vindex tramp-save-ad-hoc-proxies
For ad-hoc definitions to be saved automatically in
-@option{tramp-default-proxies-alist} for future @value{emacsname}
-sessions, set @option{tramp-save-ad-hoc-proxies}.
+@option{tramp-default-proxies-alist} for future Emacs sessions, set
+@option{tramp-save-ad-hoc-proxies}.
@lisp
(setq tramp-save-ad-hoc-proxies t)
@node Remote processes
-@section Integration with other @value{emacsname} packages
+@section Integration with other Emacs packages
@cindex compile
@cindex recompile
@value{tramp} supports starting new running processes on the remote
-host for discovering remote file names. @value{emacsname} packages on
-the remote host need no specific modifications for @value{tramp}'s
-use.
+host for discovering remote file names. Emacs packages on the remote
+host need no specific modifications for @value{tramp}'s use.
This type of integration does not work with the @option{ftp} method,
and does not support the pty association as specified in
"/bin/sh" "-c" "grep -e tramp *"))
@end lisp
-
-@ifset emacsgvfs
Remote processes do not apply to GVFS (see @ref{GVFS based methods})
because the remote file system is mounted on the local host and
@value{tramp} just accesses by changing the @code{default-directory}.
-@end ifset
@value{tramp} starts a remote process when a command is executed in a
remote file or directory buffer. As of now, these packages have been
This works only for environment variables not already set in the
@code{process-environment}.
-For integrating other @value{emacsname} packages so @value{tramp} can
-execute remotely, please file a bug report. @xref{Bug Reports}.
+For integrating other Emacs packages so @value{tramp} can execute
+remotely, please file a bug report. @xref{Bug Reports}.
@subsection Running remote programs that create local X11 windows
systems, such as @samp{windows-nt} and @samp{gnu/linux}. This option
ensures the correct name of the remote shell program.
-@ifset emacs
Starting with Emacs 24, when @option{explicit-shell-file-name} is
equal to @code{nil}, calling @code{shell} interactively will prompt
for a shell name.
-@end ifset
@subsection Running @code{shell-command} on a remote host
@command{tail} command outputs continuously to the local buffer,
@file{*Async Shell Command*}
-@ifset emacs
@kbd{M-x auto-revert-tail-mode} runs similarly showing continuous output.
-@end ifset
@subsection Running @code{eshell} on a remote host
@b{@trampfn{sudo,root@@host,/etc} $}
@end example
-@ifset emacs
-@code{eshell} in @value{emacsname} 23.2 added custom @code{su} and
-@code{sudo} commands that set the default directory correctly for the
+@code{eshell} in Emacs 23.2 added custom @code{su} and @code{sudo}
+commands that set the default directory correctly for the
@file{*eshell*} buffer. @value{tramp} silently updates
@code{tramp-default-proxies-alist} with an entry for this directory
(@pxref{Multi-hops}):
uid=0(root) gid=0(root) groups=0(root)
@b{@trampfn{su,root@@remotehost,/root} $}
@end example
-@end ifset
@anchor{Running a debugger on a remote host}
@cindex perldb
@file{gud.el} provides a unified interface to symbolic debuggers
-@ifset emacs
@ifinfo
-(@ref{Debuggers, , , @value{emacsdir}}).
+(@ref{Debuggers, , , emacs}).
@end ifinfo
-@end ifset
@value{tramp} can run debug on remote hosts by calling @code{gdb}
with a remote file name:
@end example
Relative file names are based on the remote default directory. When
-@file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}},
-valid calls include:
+@file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}}, valid
+calls include:
@example
@kbd{M-x perldb @key{RET}}
interactively, this command lists active remote connections in the
minibuffer. Each connection is of the format
@file{@trampfn{method,user@@host,}}. Flushing remote connections also
-cleans the password
-cache (@pxref{Password handling}), file cache, connection cache
-(@pxref{Connection caching}), and connection buffers.
+cleans the password cache (@pxref{Password handling}), file cache,
+connection cache (@pxref{Connection caching}), and connection buffers.
@end deffn
@deffn Command tramp-cleanup-this-connection
@uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/, the
@value{tramp} Mail Subscription Page}.
-@ifset emacs
@ifset installchapter
Before sending a bug report, run the test suite first @ref{Testing}.
@end ifset
-@end ifset
@findex tramp-bug
Check if the bug or problem is already addressed in @xref{Frequently
@item
Which systems does it work on?
-The package works successfully on Emacs 22, Emacs 23, Emacs 24, Emacs
-25, XEmacs 21 (starting with 21.4), and SXEmacs 22.
+The package works successfully on Emacs 23, Emacs 24, and Emacs 25.
While Unix and Unix-like systems are the primary remote targets,
@value{tramp} has equal success connecting to other platforms, such as
@value{tramp} overwrites @code{ControlPath} settings when initiating
@command{ssh} sessions. @value{tramp} does this to fend off a stall
-if a master session opened outside the @value{emacsname} session is no
-longer open. That is why @value{tramp} prompts for the password again
-even if there is an @command{ssh} already open.
+if a master session opened outside the Emacs session is no longer
+open. That is why @value{tramp} prompts for the password again even
+if there is an @command{ssh} already open.
Some @command{ssh} versions support a @code{ControlPersist} option,
which allows you to set the @code{ControlPath} provided the variable
@item
How to get notified after @value{tramp} completes file transfers?
-Make @value{emacsname} beep after reading from or writing to the
-remote host with the following code in @file{~/.emacs} file.
+Make Emacs beep after reading from or writing to the remote host with
+the following code in @file{~/.emacs} file.
@lisp
(defadvice tramp-handle-write-region
@end lisp
-@ifset emacs
@item
-How to get a Visual Warning when working with @samp{root} privileges
-
-Get a modeline indication when working with @samp{root} privileges
-with the following code (tested with @value{emacsname} 22.1) in
-@file{~/.emacs} file:
+How to get a Visual Warning when working with @samp{root} privileges?
+Host indication in the mode line?
-@lisp
-(defun my-mode-line-function ()
- (when (string-match "^/su\\(do\\)?:" default-directory)
- (setq mode-line-format
- (format-mode-line mode-line-format 'font-lock-warning-face))))
-
-(add-hook 'find-file-hook 'my-mode-line-function)
-(add-hook 'dired-mode-hook 'my-mode-line-function)
-@end lisp
-@end ifset
+Install @file{tramp-theme} from GNU ELPA via Emacs' Package Manager.
+Enable it via @kbd{M-x load-theme @key{RET} tramp}. Further
+customization is explained in variable
+@code{tramp-theme-face-remapping-alist}.
-@ifset emacs
-@item
-How to get host indication in the mode line?
-
-The following code (tested with @value{emacsname} 22.1) in
-@file{~/.emacs} file shows it:
-
-@lisp
-(defconst my-mode-line-buffer-identification
- (list
- '(:eval
- (let ((host-name
- (if (file-remote-p default-directory)
- (tramp-file-name-host
- (tramp-dissect-file-name default-directory))
- (system-name))))
- (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
- (substring host-name 0 (match-beginning 1))
- host-name)))
- ": %12b"))
-
-(setq-default
- mode-line-buffer-identification
- my-mode-line-buffer-identification)
-
-(add-hook
- 'dired-mode-hook
- (lambda ()
- (setq
- mode-line-buffer-identification
- my-mode-line-buffer-identification)))
-@end lisp
-
-The mode line in @value{emacsname} 23.1 and later versions now
-contains an indication if @code{default-directory} for the current
-buffer is on a remote host. Moreover, the corresponding tool-tip
-shows the remote host name. The above @code{:eval} clause can also be
-simplified to show the host name in the mode line:
-
-@lisp
- '(:eval
- (let ((host-name
- (or (file-remote-p default-directory 'host)
- (system-name))))
- (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
- (substring host-name 0 (match-beginning 1))
- host-name)))
-@end lisp
-@end ifset
-
-
-@ifset emacs
@item
Remote host does not understand default options for directory listing
-@value{emacsname} computes the @command{dired} options based on the
-local host but if the remote host cannot understand the same
-@command{ls} command, then set them with a hook as follows:
+Emacs computes the @command{dired} options based on the local host but
+if the remote host cannot understand the same @command{ls} command,
+then set them with a hook as follows:
@lisp
(add-hook
(when (file-remote-p default-directory)
(setq dired-actual-switches "-al"))))
@end lisp
-@end ifset
@item
Use environment variables to expand long strings
For long file names, set up environment variables that are expanded in
-the minibuffer. Environment variables are set either outside
-@value{emacsname} or inside @value{emacsname} with Lisp:
+the minibuffer. Environment variables are set either outside Emacs or
+inside Emacs with Lisp:
@lisp
(setenv "xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")
@item Define own keys:
-Redefine another key sequence in @value{emacsname} for @kbd{C-x C-f}:
+Redefine another key sequence in Emacs for @kbd{C-x C-f}:
@lisp
(global-set-key
Use bookmarks to save Tramp file names.
@ifinfo
-@pxref{Bookmarks, , , @value{emacsdir}}.
+@pxref{Bookmarks, , , emacs}.
@end ifinfo
Upon visiting a location with @value{tramp}, save it as a bookmark with
-@ifset emacs
@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
-@end ifset
-@ifset xemacs
-@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{set}}.
-@end ifset
To revisit that bookmark:
-@ifset emacs
@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
-@end ifset
-@ifset xemacs
-@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{jump}}.
-@end ifset
@item Use recent files:
-@ifset emacs
-@file{recentf}
-@end ifset
-@ifset xemacs
-@file{recent-files}
-@end ifset
-remembers visited places.
+@file{recentf} remembers visited places.
@ifinfo
-@ifset emacs
-@pxref{File Conveniences, , , @value{emacsdir}}.
-@end ifset
-@ifset xemacs
-@pxref{recent-files, , , edit-utils}.
-@end ifset
+@pxref{File Conveniences, , , emacs}.
@end ifinfo
Keep remote file names in the recent list without have to check for
their accessibility through remote access:
@lisp
-@ifset emacs
(recentf-mode 1)
-@end ifset
-@ifset xemacs
-(recent-files-initialize)
-(add-hook
- 'find-file-hook
- (lambda ()
- (when (file-remote-p (buffer-file-name))
- (recent-files-make-permanent)))
- 'append)
-@end ifset
@end lisp
-Reaching recently opened files:
-@ifset emacs
-@kbd{@key{menu-bar} @key{file} @key{Open Recent}}.
-@end ifset
-@ifset xemacs
-@kbd{@key{menu-bar} @key{Recent Files}}.
-@end ifset
+Reaching recently opened files: @kbd{@key{menu-bar} @key{file}
+@key{Open Recent}}.
-@ifset emacs
@item Use filecache:
Since @file{filecache} remembers visited places, add the remote
Then use directory completion in the minibuffer with @kbd{C-x C-f
C-@key{TAB}}.
-@end ifset
-@ifset emacs
@item Use bbdb:
-@file{bbdb} has a built-in feature for @value{ftppackagename} files,
-which also works for @value{tramp} file names.
+@file{bbdb} has a built-in feature for Ange FTP files, which also
+works for @value{tramp} file names.
@ifinfo
@pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}.
@end ifinfo
-Load @file{bbdb} in @value{emacs}:
+Load @file{bbdb} in Emacs:
@lisp
(require 'bbdb)
@end example
In BBDB buffer, access an entry by pressing the key @key{F}.
-@end ifset
@end enumerate
Thanks to @value{tramp} users for contributing to these recipes.
@item
-Why saved multi-hop file names do not work in a new @value{emacsname}
-session?
+Why saved multi-hop file names do not work in a new Emacs session?
When saving ad-hoc multi-hop @value{tramp} file names (@pxref{Ad-hoc
-multi-hops}) via bookmarks, recent files,
-@ifset emacs
-filecache, bbdb,
-@end ifset
-or another package, use the full ad-hoc file name including all hops,
-like
+multi-hops}) via bookmarks, recent files, filecache, bbdb, or another
+package, use the full ad-hoc file name including all hops, like
@file{@trampfn{ssh,bird@@bastion|ssh@value{postfixhop}news.my.domain,/opt/news/etc}}.
Alternatively, when saving abbreviated multi-hop file names
value.
-@ifset emacs
@item
-How to connect to a remote @value{emacsname} session using @value{tramp}?
+How to connect to a remote Emacs session using @value{tramp}?
Configure Emacs Client
@ifinfo
-(@pxref{Emacs Server, , , @value{emacsdir}}).
+(@pxref{Emacs Server, , , emacs}).
@end ifinfo
Then on the remote host, start the Emacs Server:
@example
export EDITOR=/path/to/emacsclient.sh
@end example
-@end ifset
@item
How to disable @value{tramp}?
@itemize @minus
-@ifset emacs
@item
-To keep @value{ftppackagename} as default the remote files access
-package, set this in @file{.emacs}:
+To keep Ange FTP as default the remote files access package, set this
+in @file{.emacs}:
@lisp
(setq tramp-default-method "ftp")
@end lisp
-@end ifset
@item
-To disable both
-@ifset emacs
-@value{tramp} (and @value{ftppackagename}),
-@end ifset
-@ifset xemacs
-@value{tramp},
-@end ifset
-set @code{tramp-mode} to @code{nil} in @file{.emacs}.
+To disable both @value{tramp} (and Ange FTP), set @code{tramp-mode} to
+@code{nil} in @file{.emacs}.
@lisp
(setq tramp-mode nil)
@end lisp
@item
-To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp}.
-@ifset emacs
-Unloading @value{tramp} resets @value{ftppackagename} plugins also.
-@end ifset
+To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp}. Unloading
+@value{tramp} resets Ange FTP plugins also.
@end itemize
@end itemize
@menu
* Localname deconstruction:: Splitting a localname into its component parts.
-@ifset emacs
* External packages:: Integrating with external Lisp packages.
-@end ifset
@end menu
handlers.
-@ifset emacs
@node External packages
@section Integrating with external Lisp packages
@subsection File name completion.
Since @value{tramp} traverses subdirectories starting with the
root-directory, it is most likely sufficient to make the
@code{default-directory} of the process buffer as the root directory.
-@end ifset
@node Traces and Profiles
The debug buffer is in
@ifinfo
-@ref{Outline Mode, , , @value{emacsdir}}.
+@ref{Outline Mode, , , emacs}.
@end ifinfo
@ifnotinfo
Outline Mode.
messages up to verbosity level 5, enter @kbd{C-u 6 C-c C-q}.
@ifinfo
Other navigation keys are described in
-@ref{Outline Visibility, , , @value{emacsdir}}.
+@ref{Outline Visibility, , , emacs}.
@end ifinfo
@value{tramp} handles errors internally. But to get a Lisp backtrace,
being written to @file{*trace-output*}.
-@node Issues
-@chapter Debatable Issues and What Was Decided
-
-@itemize @bullet
-@item The uuencode method does not always work.
-
-@command{uudecode} on some systems cannot write to stdout, but
-@value{tramp} depends on encoding and decoding programs to be able to
-read from stdin and write to stdout.
-
-We can find ways to circumvent @command{uudecode}'s ability to write
-to stdout, such as writing to a temporary file and then piping that to
-stdout.
-
-But I have decided not to implement workarounds as they are too
-fragile to work reliably. Some on systems, @value{tramp} will not have
-uuencode method.
-
-@item The @value{tramp} file name syntax differs between Emacs and XEmacs.
-
-The Emacs maintainers wish to use a unified file name syntax for
-Ange-FTP and @value{tramp} so that users don't have to learn yet
-another syntax though it is okay to learn new extensions.
-
-For the XEmacs maintainers, the disruption from a unified file name
-syntax are not worth the gains. Firstly, the XEmacs package system
-relies on EFS for downloading new packages and therefore is already
-installed. On the other hand, @value{tramp} is not installed by
-default in XEmacs. Unifying will require @value{tramp} installed from
-the start.
-
-@ifset xemacs
-@strong{Note:} To make the syntax similar to @value{ftppackagename},
-make this change to the init file:
-
-@lisp
-(setq tramp-unified-filenames t)
-(require 'tramp)
-@end lisp
-
-To disable auto loading @value{emacsname} @value{tramp} package, set
-file permissions of
-@file{@dots{}/xemacs-packages/lisp/tramp/auto-autoloads.el*} to
-@code{000}.
-
-When using unified file names, @value{emacsname} download sites are
-added to @code{tramp-default-method-alist} with default method of
-@option{ftp} @xref{Default Method} for proper working of the
-@value{emacsname} package system.
-
-The syntax for unified file names is described in the @value{tramp} manual
-for @value{emacsothername}.
-@end ifset
-@end itemize
-
-
@node GNU Free Documentation License
@appendix GNU Free Documentation License
@include doclicense.texi
@c In the Tramp GIT, the version number is auto-frobbed from
@c configure.ac, so you should edit that file and run
@c "autoconf && ./configure" to change the version number.
-@set trampver 2.2.13.25.1
+@set trampver 2.3.0-pre
@c Other flags from configuration
@set instprefix /usr/local
@set infodir /usr/local/share/info
@c Formatting of the tramp program name consistent.
-@set tramp @sc{tramp}
+@set tramp @sc{Tramp}
-@c Whether or not describe GVFS integration.
-@ifclear noemacsgvfs
-@set emacsgvfs
-@end ifclear
-
-@c Whether or not describe gateway methods.
-@ifclear noemacsgw
-@set emacsgw
-@end ifclear
-
-@c Some flags which make the text independent on the (X)Emacs flavor.
-@c "emacs" resp "xemacs" are set in the Makefile. Default is "emacs".
-@ifclear emacs
-@ifclear xemacs
-@set emacs
+@c Some flags which define the remote file name syntax.
+@ifclear unified
+@ifclear separate
+@set unified
@end ifclear
@end ifclear
-@c Emacs values.
-@ifset emacs
-@set emacsname Emacs
-@set emacsdir emacs
-@set ftppackagename Ange-FTP
+@ifset unified
@set prefix /
@set prefixhop
@set postfix :
@set postfixhop :
@set ipv6prefix [
@set ipv6postfix ]
-@set emacsothername XEmacs
-@set emacsotherdir xemacs
-@set emacsotherfilename tramp-xemacs.html
@end ifset
-@c XEmacs counterparts.
-@ifset xemacs
-@set emacsname XEmacs
-@set emacsdir xemacs
-@set ftppackagename EFS
+@ifset separate
@set prefix /[
@set prefixhop [
@set postfix ]
@set postfixhop /
@set ipv6prefix
@set ipv6postfix
-@set emacsothername Emacs
-@set emacsotherdir emacs
-@set emacsotherfilename tramp-emacs.html
@end ifset
passed through @code{url-encode-url} before using it, to ensure that
it is properly URI-encoded (@pxref{URI Encoding}).
-@defun url-retrieve-synchronously url silent no-cookies
+@defun url-retrieve-synchronously url &optional silent no-cookies timeout
This function synchronously retrieves the data specified by @var{url},
and returns a buffer containing the data. The return value is
@code{nil} if there is no data associated with the URL (as is the case
If the optional argument @var{silent} is non-@code{nil}, progress
messages are suppressed. If the optional argument @var{no-cookies} is
-non-@code{nil}, cookies are not stored or sent.
+non-@code{nil}, cookies are not stored or sent. If the optional
+argument @var{timeout} is non-@code{nil}, it should be a number that
+says (in seconds) how long to wait for a response before giving up.
@end defun
@defun url-retrieve url callback &optional cbargs silent no-cookies
@kbd{C-k} (@code{url-cookie-delete}) command.
@end defun
+@defun url-cookie-delete-cookies &optional regexp
+This function takes a regular expression as its parameters and deletes
+all cookies from that domain. If @var{regexp} is @code{nil}, delete
+all cookies.
+@end defun
+
@defopt url-cookie-file
The file in which cookies are stored, defaulting to @file{cookies} in
the directory specified by @code{url-configuration-directory}.
@end defopt
@defopt url-user-agent
-The User Agent string used for sending HTTP/HTTPS requests. The value
-should be a string or a function of no arguments that returns a
-string. The default value is @w{@samp{User-Agent: @var{package-name}
-URL/Emacs}}, where @var{package-name} is the value of
+The User Agent string used for sending @acronym{HTTP}/@acronym{HTTPS}
+requests. The value should be @code{nil}, which means that no
+@samp{User-Agent} header is generated, @code{default}, which means
+that a string is generated based on the setting of
+@code{url-privacy-leve}, a string or a function of no arguments that
+returns a string.
+
+The default is @code{default}, which means that the
+@w{@samp{User-Agent: @var{package-name} URL/Emacs}} string will be
+generated, where @var{package-name} is the value of
@code{url-package-name} and its version, if they are non-@code{nil}.
@end defopt
"--enable-check-lisp-object-type" option at configure time) that are
hard to interpret, especially if they represent long lists. You can
use the 'pp' command to display them in their Lisp form. That command
-displays its output on the standard error stream (on GNU/Linux, you
-can redirect that to a file using "M-x redirect-debugging-output").
+displays its output on the standard error stream, which you
+can redirect to a file using "M-x redirect-debugging-output".
This means that if you attach GDB to a running Emacs that was invoked
from a desktop icon, chances are you will not see the output at all,
or it will wind up in an obscure place (check the documentation of
These commands send their output to stderr; if that is closed or
redirected to some file you don't know, you won't see their output.
This is particularly so for Emacs invoked on MS-Windows from the
-desktop shortcut. On GNU/Linux, you can use the command
-'redirect-debugging-output' to redirect stderr to a file.
+desktop shortcut. You can use the command 'redirect-debugging-output'
+to redirect stderr to a file.
Note: It is not a good idea to try 'pr', 'pp', or 'pv' if you know that Emacs
is in deep trouble: its stack smashed (e.g., if it encountered SIGSEGV
Emacs versions later than 24.4 will not compile on Irix by default.
(Note that SGI stopped supporting Irix in December 2013.)
- You should be able to work around the problem either by porting the
- Emacs undumping code to GCC under Irix, or by configuring --with-wide-int.
Older versions of Emacs 24 (and 23?) also had problems on Irix.
It *may* be possible to build Emacs <= 24.4 on Irix 6.5 with an old
version (3.1) of gcc. Newer versions of gcc may not work.
- See <http://debbugs.gnu.org/9684>.
+ See <http://bugs.gnu.org/9684>.
\f
* Obsolete platforms
When you add a new item, use the appropriate mark if you are sure it applies,
otherwise leave it unmarked.
+\f
+* Installation Changes in Emacs 25.2
+
+** The new option 'configure --enable-gcc-warnings=warn-only' causes
+GCC to issue warnings without stopping the build. This behavior is
+now the default in developer builds. As before, use
+'--disable-gcc-warnings' to suppress GCC's warnings, and
+'--enable-gcc-warnings' to stop the build if GCC issues warnings.
+
++++
+** The Emacs server now has socket-launching support. This allows
+socket based activation, where an external process like systemd can
+invoke the Emacs server process upon a socket connection event and
+hand the socket over to Emacs. Emacs uses this socket to service
+emacsclient commands. This new functionality can be disabled with the
+configure option '--disable-libsystemd'.
+
+** New configure option '--disable-build-details' attempts to build an
+Emacs that is more likely to be reproducible; that is, if you build
+and install Emacs twice, the second Emacs is a copy of the first.
+Deterministic builds omit the build date from the output of the
+emacs-version and erc-cmd-SV functions, and the leave the following
+variables nil: emacs-build-system, emacs-build-time,
+erc-emacs-build-time.
+
+** Emacs no longer works on IRIX. We expect that Emacs users are not
+affected by this, as SGI stopped supporting IRIX in December 2013.
+
+\f
+* Startup Changes in Emacs 25.2
+
+\f
+* Changes in Emacs 25.2
+
+---
+** 'find-library-name' will now fall back on looking at 'load-history'
+to try to locate libraries that have been loaded with an explicit path
+outside 'load-path'.
+
++++
+** Faces in 'minibuffer-prompt-properties' no longer overwrite properties
+in the text in functions like 'read-from-minibuffer', but instead are
+added to the end of the face list. This allows users to say things
+like '(read-from-minibuffer (propertize "Enter something: " 'face 'bold))'.
+
++++
+** The new variable 'extended-command-suggest-shorter' has been added
+to control whether to suggest shorter 'M-x' commands or not.
+
+---
+** icomplete now respects 'completion-ignored-extensions'.
+
++++
+** Non-breaking hyphens are now displayed with the 'nobreak-hyphen'
+face instead of the 'escape-glyph' face.
+
+---
+** 'C-x h' ('mark-whole-buffer') will now avoid marking the prompt
+part of minibuffers.
+
+---
+** 'find-library' now takes a prefix argument to pop to a different
+window.
+
+** 'find-library', 'help-function-def' and 'help-variable-def' now run
+'find-function-after-hook'.
+
+---
+** 'process-attributes' on Darwin systems now returns more information.
+
++++
+** Several accessors for the value returned by 'file-attributes'
+have been added. They are: 'file-attribute-type',
+'file-attribute-link-number', 'file-attribute-user-id',
+'file-attribute-group-id', 'file-attribute-access-time',
+'file-attribute-modification-time',
+'file-attribute-status-change-time', 'file-attribute-size',
+'file-attribute-modes', 'file-attribute-inode-number', and
+'file-attribute-device-number'.
+
++++
+** The new function 'buffer-hash' computes compute a fast, non-consing
+hash of a buffer's contents.
+
+---
+** 'fill-paragraph' no longer marks the buffer as changed unless it
+actually changed something.
+
+---
+** The locale language name 'ca' is now mapped to the language
+environment 'Catalan', which has been added.
+
+---
+** 'align-regexp' has a separate history for its interactive argument.
+'align-regexp' no longer shares its history with all other
+history-less functions that use 'read-string'.
+
++++
+** The networking code has been reworked so that it's more
+asynchronous than it was (when specifying :nowait t in
+'make-network-process'). How asynchronous it is varies based on the
+capabilities of the system, but on a typical GNU/Linux system the DNS
+resolution, the connection, and (for TLS streams) the TLS negotiation
+are all done without blocking the main Emacs thread. To get
+asynchronous TLS, the TLS boot parameters have to be passed in (see
+the manual for details).
+
+Certain process oriented functions (like 'process-datagram-address')
+will block until socket setup has been performed. The recommended way
+to deal with asynchronous sockets is to avoid interacting with them
+until they have changed status to "run". This is most easily done
+from a process sentinel.
+
+** 'make-network-process' and 'open-network-stream' sometimes allowed
+:service to be an integer string (e.g., :service "993") and sometimes
+required an integer (e.g., :service 993). This difference has been
+eliminated, and integer strings work everywhere.
+
+** It is possible to disable attempted recovery on fatal signals.
+
+Two new variables support disabling attempts to recover from stack
+overflow and to avoid automatic auto-save when Emacs is delivered a
+fatal signal. 'attempt-stack-overflow-recovery', if set to 'nil',
+will disable attempts to recover from C stack overflows; Emacs will
+then crash as with any other fatal signal.
+'attempt-orderly-shutdown-on-fatal-signal', if set to 'nil', will
+disable attempts to auto-save the session and shut down in an orderly
+fashion when Emacs receives a fatal signal; instead, Emacs will
+terminate immediately. Both variables are non-'nil' by default.
+These variables are for users who would like to avoid the small
+probability of data corruption due to techniques Emacs uses to recover
+in these situations.
+
++++
+** A second dir-local file (.dir-locals-2.el) is now accepted.
+See the variable 'dir-locals-file-2' for more information.
+
+---
+** International domain names (IDNA) are now encoded via the new
+puny.el library, so that one can visit web sites with non-ASCII URLs.
+
++++
+** The new 'timer-list' command lists all active timers in a buffer,
+where you can cancel them with the 'c' command.
+
++++
+** The new function 'read-multiple-choice' prompts for multiple-choice
+questions, with a handy way to display help texts.
+
+\f
+* Editing Changes in Emacs 25.2
+
++++
+** New bindings for 'query-replace-map'.
+'undo', undo the last replacement; bound to 'u'.
+'undo-all', undo all replacements; bound to 'U'.
+
+\f
+* Changes in Specialized Modes and Packages in Emacs 25.2
+
+** Compilation mode
+
+---
+*** Messages from CMake are now recognized.
+
+** Dired
+
++++
+*** In wdired, when editing files to contain slash characters,
+the resulting directories are automatically created. Whether to do
+this is controlled by the 'wdired-create-parent-directories' variable.
+
++++
+*** 'W' is now bound to 'browse-url-of-dired-file', and is useful for
+viewing HTML files and the like.
+
+** eww
+
++++
+*** A new 's' command for switching to another eww buffer via the minibuffer.
+
+---
+*** The 'o' command ('shr-save-contents') has moved to 'O' to avoid collision
+with the 'o' command from 'image-map'.
+
++++
+*** A new command 'C' ('eww-toggle-colors') can be used to toggle
+whether to use the HTML-specified colors or not. The user can also
+customize the 'shr-use-colors' variable.
+
+---
+*** Images that are being loaded are now marked with gray
+"placeholder" images of the size specified by the HTML. They are then
+replaced by the real images asynchronously, which will also now
+respect width/height HTML specs (unless they specify widths/heights
+bigger than the current window).
+
+** Images
+
++++
+*** Images are automatically scaled before displaying based on the
+'image-scaling-factor' variable (if Emacs supports scaling the images
+in question).
+
++++
+*** Images inserted with 'insert-image' and related functions get a
+keymap put into the text properties (or overlays) that span the
+image. This keymap binds keystrokes for manipulating size and
+rotation, as well as saving the image to a file. These commands are
+also available in 'image-mode'.
+
++++
+*** A new library for creating and manipulating SVG images has been
+added. See the "SVG Images" section in the lispref manual for
+details.
+
++++
+*** New setf-able function to access and set image parameters is
+provided: 'image-property'.
+
++++
+** The commands that add ChangeLog entries now prefer a VCS root directory
+for the ChangeLog file, if none already exists. Customize
+'change-log-directory-files' to nil for the old behavior.
+
+---
+** Support for non-string values of 'time-stamp-format' has been removed.
+
+** Message
+
+---
+*** 'message-use-idna' now defaults to t (because Emacs comes with
+built-in IDNA support now).
+
+---
+*** The 'message-valid-fqdn-regexp' variable has been removed, since
+there are now top-level domains added all the time. Message will no
+longer warn about sending emails to top-level domains it hasn't heard
+about.
+
+*** 'message-beginning-of-line' (bound to C-a) understands folded headers.
+In 'visual-line-mode' it will look for the true beginning of a header
+while in non-'visual-line-mode' it will move the point to the indented
+header's value.
+
+** Tramp
+
++++
+*** New connection method "sg", which supports editing files under a
+different group ID.
+
++++
+*** New connection method "doas" for OpenBSD hosts.
+
+---
+** 'auto-revert-use-notify' is set back to t in 'global-auto-revert-mode'.
+
+** CSS mode
+
+---
+*** Support for completing attribute values, at-rules, bang-rules, and
+HTML tags using the 'completion-at-point' command.
+
++++
+** Emacs now supports character name escape sequences in character and
+string literals. The syntax variants \N{character name} and
+\N{U+code} are supported.
+
++++
+** Prog mode has some support for multi-mode indentation.
+This allows better indentation support in modes that support multiple
+programming languages in the same buffer, like literate programming
+environments or ANTLR programs with embedded Python code.
+
+A major mode can provide indentation context for a sub-mode through
+the 'prog-indentation-context' variable. To support this, modes that
+provide indentation should use 'prog-widen' instead of 'widen' and
+'prog-first-column' instead of a literal zero. See the node
+"Mode-Specific Indent" in the ELisp manual for more details.
+
+** ERC
+
+*** New variable 'erc-default-port-tls' used to connect to TLS IRC
+servers.
+
+** URL
+
++++
+*** The new function 'url-cookie-delete-cookie' can be used to
+programmatically delete all cookies, or cookies from a specific
+domain.
+
++++
+*** 'url-retrieve-synchronously' now takes an optional timeout parameter.
+
+---
+*** The URL package now support HTTPS over proxies supporting CONNECT.
+
++++
+*** 'url-user-agent' now defaults to 'default', and the User-Agent
+string is computed dynamically based on 'url-privacy-level'.
+
+** VC and related modes
+
+---
+*** The VC state indicator in the mode line now defaults to more
+colorful faces to make it more obvious to the user what the state is.
+See the 'vc-faces' customization group.
+
+\f
+* New Modes and Packages in Emacs 25.2
+
+\f
+* Incompatible Lisp Changes in Emacs 25.2
+
++++
+** Resizing a frame no longer runs 'window-configuration-change-hook'.
+Put your function on 'window-size-change-functions' instead.
+
+** 'C-up', 'C-down', 'C-left' and 'C-right' are now defined in term
+mode to send the same escape sequences that xterm does. This makes
+things like forward-word in readline work.
+
+---
+** hideshow mode got four key bindings that are analogous to outline
+mode bindings: 'C-c @ C-a', 'C-c @ C-t', 'C-c @ C-d', and 'C-c @ C-e.'
+
+** The grep/rgrep/lgrep functions will now ask about saving files
+before running. This is controlled by the 'grep-save-buffers'
+variable.
+
+\f
+* Lisp Changes in Emacs 25.2
+
+** New var syntax-ppss-table to control the syntax-table used in syntax-ppss.
+
+** Autoload files can be generated without timestamps,
+by setting 'autoload-timestamps' to nil.
+FIXME As an experiment, nil is the current default.
+If no insurmountable problems before next release, it can stay that way.
+
+** 'ert-with-function-mocked' of 'ert-x package allows mocking of functions
+in unit tests.
+
+---
+** 'gnutls-boot' now takes a parameter :complete-negotiation that says
+that negotiation should complete even on non-blocking sockets.
+
++++
+** New functions 'window-pixel-width-before-size-change' and
+'window-pixel-height-before-size-change' support detecting which
+window changed size when 'window-size-change-functions' are run.
+
++++
+** New function 'display-buffer-reuse-mode-window' is an action function
+suitable for use in 'display-buffer-alist'. For example, to avoid creating
+a new window when opening man pages when there's already one, use
+(add-to-list 'display-buffer-alist
+ '("\\`\\*Man .*\\*\\'" .
+ (display-buffer-reuse-mode-window
+ (inhibit-same-window . nil)
+ (mode . Man-mode))))
+
+---
+** There is now a new variable 'flyspell-sort-corrections-function'
+that allows changing the way corrections are sorted.
+
+---
+** The new command 'fortune-message' has been added, which displays
+fortunes in the echo area.
+
++++
+** New function 'func-arity' returns information about the argument list
+of an arbitrary function. This generalizes 'subr-arity' for functions
+that are not built-in primitives. We recommend using this new
+function instead of 'subr-arity'.
+
++++
+** 'parse-partial-sexp' state has a new element. Element 10 is
+non-nil when the last character scanned might be the first character
+of a two character construct, i.e., a comment delimiter or escaped
+character. Its value is the syntax of that last character.
+
++++
+** 'parse-partial-sexp''s state, element 9, has now been confirmed as
+permanent and documented, and may be used by Lisp programs. Its value
+is a list of currently open parenthesis positions, starting with the
+outermost parenthesis.
+
+---
+** 'read-color' will now display the color names using the color itself
+as the background color.
+
+** The function 'redirect-debugging-output' now works on platforms
+other than GNU/Linux.
+
++++
+** The new function 'string-version-lessp' compares strings by
+interpreting consecutive runs of numerical characters as numbers, and
+compares their numerical values. According to this predicate,
+"foo2.png" is smaller than "foo12.png".
+
++++
+** The new function 'char-from-name' converts a Unicode name string
+to the corresponding character code.
+
++++
+** New functions 'sxhash-eq' and 'sxhash-eql' return hash codes of a
+Lisp object suitable for use with 'eq' and 'eql' correspondingly. If
+two objects are 'eq' ('eql'), then the result of 'sxhash-eq'
+('sxhash-eql') on them will be the same.
+
++++
+** Function 'sxhash' has been renamed to 'sxhash-equal' for
+consistency with the new functions. For compatibility, 'sxhash'
+remains as an alias to 'sxhash-equal'.
+
++++
+** Time conversion functions that accept a time zone rule argument now
+allow it to be OFFSET or a list (OFFSET ABBR), where the integer
+OFFSET is a count of seconds east of Universal Time, and the string
+ABBR is a time zone abbreviation. The affected functions are
+'current-time-string', 'current-time-zone', 'decode-time',
+'format-time-string', and 'set-time-zone-rule'.
+
+\f
+* Changes in Emacs 25.2 on Non-Free Operating Systems
+
+** Intercepting hotkeys on Windows 7 and later now works better.
+The new keyboard hooking code properly grabs system hotkeys such as
+Win-* and Alt-TAB, in a way that Emacs can get at them before the
+system. This makes the 'w32-register-hot-key' functionality work
+again on all versions of MS-Windows starting with Windows 7. On
+Windows NT and later you can now register any hotkey combination. (On
+Windows 9X, the previous limitations, spelled out in the Emacs manual,
+still apply.)
+
+** 'convert-standard-filename' no longer mirrors slashes on MS-Windows.
+Previously, on MS-Windows this function converted slash characters in
+file names into backslashes. It no longer does that.
+
\f
* Installation Changes in Emacs 25.1
Emacs is linked. With LD_RUN_PATH set, the linker will include a
specified run-time search path in the executable.
-On some systems, Emacs can crash due to problems with dynamic
-linking. Specifically, on SGI Irix 6.5, crashes were reported with
-backtraces like this:
-
- (dbx) where
- 0 strcmp(0xf49239d, 0x4031184, 0x40302b4, 0x12, 0xf0000000, 0xf4923aa, 0x0, 0x492ddb2) ["/xlv22/ficus-jan23/work/irix/lib/libc/libc_n32_M3_ns/strings/strcmp.s":35, 0xfb7e480]
- 1 general_find_symbol(0xf49239d, 0x0, 0x0, 0x0, 0xf0000000, 0xf4923aa, 0x0, 0x492ddb2)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld.c":2140, 0xfb65a98]
- 2 resolve_symbol(0xf49239d, 0x4031184, 0x0, 0xfbdd438, 0x0, 0xf4923aa, 0x0, 0x492ddb2)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld.c":1947, 0xfb657e4]
- 3 lazy_text_resolve(0xd18, 0x1a3, 0x40302b4, 0x12, 0xf0000000, 0xf4923aa, 0x0, 0x492ddb2)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld.c":997, 0xfb64d44]
- 4 _rld_text_resolve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
- ["/comp2/mtibuild/v73/workarea/v7.3/rld/rld_bridge.s":175, 0xfb6032c]
-
-('rld' is the dynamic linker.) We don't know why this
-happens, but setting the environment variable LD_BIND_NOW to 1 (which
-forces the dynamic linker to bind all shared objects early on) seems
-to work around the problem.
-
Please refer to the documentation of your dynamic linker for details.
*** When you run Ispell from Emacs, it reports a "misalignment" error.
can cause this error. Remove that file, execute 'ispell-kill-ispell'
in Emacs, and then try spell-checking again.
-*** Emacs eats all file descriptors when using kqueue file notifications.
-See <http://debbugs.gnu.org/22814>.
-
-When you have a large number of buffers running auto-revert-mode, and
-Emacs is configured to use the kqueue file notification library, it
-uses an own file descriptor for every watched file. On systems with a
-small limit of file descriptors allowed per process, like OS X, you
-could run out of file descriptors. You won't be able to open new files.
-
-auto-revert-use-notify is set to nil in global-auto-revert-mode, therefore.
-
* Runtime problems related to font handling
** Characters are displayed as empty boxes or with wrong font under X.
and -g -O2) and GCC 4.2.3 (-g -O and -g -O2). You can fix this by
compiling with GCC 4.2.3 or CC 5.7, with no optimizations.
-** Irix
-
-*** Irix: Trouble using ptys, or running out of ptys.
-
-The program mkpts (which may be in '/usr/adm' or '/usr/sbin') needs to
-be set-UID to root, or non-root programs like Emacs will not be able
-to allocate ptys reliably.
-
* Runtime problems specific to MS-Windows
** Emacs on Windows 9X requires UNICOWS.DLL
File "/tmp/foo.py", line 10
+* CMake
+
+symbols: cmake cmake-info
+
+CMake Error at CMakeLists.txt:19 (hurz):
+ Unknown CMake command "hurz".
+CMake Warning at cmake/modules/UseUG.cmake:73 (find_package):
+ Could not find a package configuration file provided by "UG" (requested
+ version 3.11.0) with any of the following names:
+
+ UGConfig.cmake
+ ug-config.cmake
+
+ Add the installation prefix of "UG" to CMAKE_PREFIX_PATH or set "UG_DIR" to
+ a directory containing one of the above files. If "UG" provides a separate
+ development package or SDK, be sure it has been installed.
+Call Stack (most recent call first):
+ cmake/modules/DuneGridMacros.cmake:19 (include)
+ /home/joe/Project/EXA-DUNE/patches/dune-common/cmake/modules/DuneMacros.cmake:556 (include)
+ /home/joe/Project/EXA-DUNE/patches/dune-common/cmake/modules/DuneMacros.cmake:694 (dune_process_dependency_macros)
+ CMakeLists.txt:22 (dune_project)
+
+
+-- Could NOT find UG (missing: UG_DIR HAVE_UG)
+
+
* Apollo cc, 4.3BSD fc & IBM RS6000/AIX xlc compiler & Microtec mcc68k & GNAT (July 94)
symbol: comma
+++ /dev/null
-(nxml-define-char-name-set 'basic-latin
- '(("SPACE" #x0020)
- ("EXCLAMATION MARK" #x0021)
- ("QUOTATION MARK" #x0022)
- ("NUMBER SIGN" #x0023)
- ("DOLLAR SIGN" #x0024)
- ("PERCENT SIGN" #x0025)
- ("AMPERSAND" #x0026)
- ("APOSTROPHE" #x0027)
- ("LEFT PARENTHESIS" #x0028)
- ("RIGHT PARENTHESIS" #x0029)
- ("ASTERISK" #x002A)
- ("PLUS SIGN" #x002B)
- ("COMMA" #x002C)
- ("HYPHEN-MINUS" #x002D)
- ("FULL STOP" #x002E)
- ("SOLIDUS" #x002F)
- ("DIGIT ZERO" #x0030)
- ("DIGIT ONE" #x0031)
- ("DIGIT TWO" #x0032)
- ("DIGIT THREE" #x0033)
- ("DIGIT FOUR" #x0034)
- ("DIGIT FIVE" #x0035)
- ("DIGIT SIX" #x0036)
- ("DIGIT SEVEN" #x0037)
- ("DIGIT EIGHT" #x0038)
- ("DIGIT NINE" #x0039)
- ("COLON" #x003A)
- ("SEMICOLON" #x003B)
- ("LESS-THAN SIGN" #x003C)
- ("EQUALS SIGN" #x003D)
- ("GREATER-THAN SIGN" #x003E)
- ("QUESTION MARK" #x003F)
- ("COMMERCIAL AT" #x0040)
- ("LATIN CAPITAL LETTER A" #x0041)
- ("LATIN CAPITAL LETTER B" #x0042)
- ("LATIN CAPITAL LETTER C" #x0043)
- ("LATIN CAPITAL LETTER D" #x0044)
- ("LATIN CAPITAL LETTER E" #x0045)
- ("LATIN CAPITAL LETTER F" #x0046)
- ("LATIN CAPITAL LETTER G" #x0047)
- ("LATIN CAPITAL LETTER H" #x0048)
- ("LATIN CAPITAL LETTER I" #x0049)
- ("LATIN CAPITAL LETTER J" #x004A)
- ("LATIN CAPITAL LETTER K" #x004B)
- ("LATIN CAPITAL LETTER L" #x004C)
- ("LATIN CAPITAL LETTER M" #x004D)
- ("LATIN CAPITAL LETTER N" #x004E)
- ("LATIN CAPITAL LETTER O" #x004F)
- ("LATIN CAPITAL LETTER P" #x0050)
- ("LATIN CAPITAL LETTER Q" #x0051)
- ("LATIN CAPITAL LETTER R" #x0052)
- ("LATIN CAPITAL LETTER S" #x0053)
- ("LATIN CAPITAL LETTER T" #x0054)
- ("LATIN CAPITAL LETTER U" #x0055)
- ("LATIN CAPITAL LETTER V" #x0056)
- ("LATIN CAPITAL LETTER W" #x0057)
- ("LATIN CAPITAL LETTER X" #x0058)
- ("LATIN CAPITAL LETTER Y" #x0059)
- ("LATIN CAPITAL LETTER Z" #x005A)
- ("LEFT SQUARE BRACKET" #x005B)
- ("REVERSE SOLIDUS" #x005C)
- ("RIGHT SQUARE BRACKET" #x005D)
- ("CIRCUMFLEX ACCENT" #x005E)
- ("LOW LINE" #x005F)
- ("GRAVE ACCENT" #x0060)
- ("LATIN SMALL LETTER A" #x0061)
- ("LATIN SMALL LETTER B" #x0062)
- ("LATIN SMALL LETTER C" #x0063)
- ("LATIN SMALL LETTER D" #x0064)
- ("LATIN SMALL LETTER E" #x0065)
- ("LATIN SMALL LETTER F" #x0066)
- ("LATIN SMALL LETTER G" #x0067)
- ("LATIN SMALL LETTER H" #x0068)
- ("LATIN SMALL LETTER I" #x0069)
- ("LATIN SMALL LETTER J" #x006A)
- ("LATIN SMALL LETTER K" #x006B)
- ("LATIN SMALL LETTER L" #x006C)
- ("LATIN SMALL LETTER M" #x006D)
- ("LATIN SMALL LETTER N" #x006E)
- ("LATIN SMALL LETTER O" #x006F)
- ("LATIN SMALL LETTER P" #x0070)
- ("LATIN SMALL LETTER Q" #x0071)
- ("LATIN SMALL LETTER R" #x0072)
- ("LATIN SMALL LETTER S" #x0073)
- ("LATIN SMALL LETTER T" #x0074)
- ("LATIN SMALL LETTER U" #x0075)
- ("LATIN SMALL LETTER V" #x0076)
- ("LATIN SMALL LETTER W" #x0077)
- ("LATIN SMALL LETTER X" #x0078)
- ("LATIN SMALL LETTER Y" #x0079)
- ("LATIN SMALL LETTER Z" #x007A)
- ("LEFT CURLY BRACKET" #x007B)
- ("VERTICAL LINE" #x007C)
- ("RIGHT CURLY BRACKET" #x007D)
- ("TILDE" #x007E)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'latin-1-supplement
- '(("NO-BREAK SPACE" #x00A0)
- ("INVERTED EXCLAMATION MARK" #x00A1)
- ("CENT SIGN" #x00A2)
- ("POUND SIGN" #x00A3)
- ("CURRENCY SIGN" #x00A4)
- ("YEN SIGN" #x00A5)
- ("BROKEN BAR" #x00A6)
- ("SECTION SIGN" #x00A7)
- ("DIAERESIS" #x00A8)
- ("COPYRIGHT SIGN" #x00A9)
- ("FEMININE ORDINAL INDICATOR" #x00AA)
- ("LEFT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00AB)
- ("NOT SIGN" #x00AC)
- ("SOFT HYPHEN" #x00AD)
- ("REGISTERED SIGN" #x00AE)
- ("MACRON" #x00AF)
- ("DEGREE SIGN" #x00B0)
- ("PLUS-MINUS SIGN" #x00B1)
- ("SUPERSCRIPT TWO" #x00B2)
- ("SUPERSCRIPT THREE" #x00B3)
- ("ACUTE ACCENT" #x00B4)
- ("MICRO SIGN" #x00B5)
- ("PILCROW SIGN" #x00B6)
- ("MIDDLE DOT" #x00B7)
- ("CEDILLA" #x00B8)
- ("SUPERSCRIPT ONE" #x00B9)
- ("MASCULINE ORDINAL INDICATOR" #x00BA)
- ("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00BB)
- ("VULGAR FRACTION ONE QUARTER" #x00BC)
- ("VULGAR FRACTION ONE HALF" #x00BD)
- ("VULGAR FRACTION THREE QUARTERS" #x00BE)
- ("INVERTED QUESTION MARK" #x00BF)
- ("LATIN CAPITAL LETTER A WITH GRAVE" #x00C0)
- ("LATIN CAPITAL LETTER A WITH ACUTE" #x00C1)
- ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX" #x00C2)
- ("LATIN CAPITAL LETTER A WITH TILDE" #x00C3)
- ("LATIN CAPITAL LETTER A WITH DIAERESIS" #x00C4)
- ("LATIN CAPITAL LETTER A WITH RING ABOVE" #x00C5)
- ("LATIN CAPITAL LETTER AE" #x00C6)
- ("LATIN CAPITAL LETTER C WITH CEDILLA" #x00C7)
- ("LATIN CAPITAL LETTER E WITH GRAVE" #x00C8)
- ("LATIN CAPITAL LETTER E WITH ACUTE" #x00C9)
- ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX" #x00CA)
- ("LATIN CAPITAL LETTER E WITH DIAERESIS" #x00CB)
- ("LATIN CAPITAL LETTER I WITH GRAVE" #x00CC)
- ("LATIN CAPITAL LETTER I WITH ACUTE" #x00CD)
- ("LATIN CAPITAL LETTER I WITH CIRCUMFLEX" #x00CE)
- ("LATIN CAPITAL LETTER I WITH DIAERESIS" #x00CF)
- ("LATIN CAPITAL LETTER ETH" #x00D0)
- ("LATIN CAPITAL LETTER N WITH TILDE" #x00D1)
- ("LATIN CAPITAL LETTER O WITH GRAVE" #x00D2)
- ("LATIN CAPITAL LETTER O WITH ACUTE" #x00D3)
- ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX" #x00D4)
- ("LATIN CAPITAL LETTER O WITH TILDE" #x00D5)
- ("LATIN CAPITAL LETTER O WITH DIAERESIS" #x00D6)
- ("MULTIPLICATION SIGN" #x00D7)
- ("LATIN CAPITAL LETTER O WITH STROKE" #x00D8)
- ("LATIN CAPITAL LETTER U WITH GRAVE" #x00D9)
- ("LATIN CAPITAL LETTER U WITH ACUTE" #x00DA)
- ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX" #x00DB)
- ("LATIN CAPITAL LETTER U WITH DIAERESIS" #x00DC)
- ("LATIN CAPITAL LETTER Y WITH ACUTE" #x00DD)
- ("LATIN CAPITAL LETTER THORN" #x00DE)
- ("LATIN SMALL LETTER SHARP S" #x00DF)
- ("LATIN SMALL LETTER A WITH GRAVE" #x00E0)
- ("LATIN SMALL LETTER A WITH ACUTE" #x00E1)
- ("LATIN SMALL LETTER A WITH CIRCUMFLEX" #x00E2)
- ("LATIN SMALL LETTER A WITH TILDE" #x00E3)
- ("LATIN SMALL LETTER A WITH DIAERESIS" #x00E4)
- ("LATIN SMALL LETTER A WITH RING ABOVE" #x00E5)
- ("LATIN SMALL LETTER AE" #x00E6)
- ("LATIN SMALL LETTER C WITH CEDILLA" #x00E7)
- ("LATIN SMALL LETTER E WITH GRAVE" #x00E8)
- ("LATIN SMALL LETTER E WITH ACUTE" #x00E9)
- ("LATIN SMALL LETTER E WITH CIRCUMFLEX" #x00EA)
- ("LATIN SMALL LETTER E WITH DIAERESIS" #x00EB)
- ("LATIN SMALL LETTER I WITH GRAVE" #x00EC)
- ("LATIN SMALL LETTER I WITH ACUTE" #x00ED)
- ("LATIN SMALL LETTER I WITH CIRCUMFLEX" #x00EE)
- ("LATIN SMALL LETTER I WITH DIAERESIS" #x00EF)
- ("LATIN SMALL LETTER ETH" #x00F0)
- ("LATIN SMALL LETTER N WITH TILDE" #x00F1)
- ("LATIN SMALL LETTER O WITH GRAVE" #x00F2)
- ("LATIN SMALL LETTER O WITH ACUTE" #x00F3)
- ("LATIN SMALL LETTER O WITH CIRCUMFLEX" #x00F4)
- ("LATIN SMALL LETTER O WITH TILDE" #x00F5)
- ("LATIN SMALL LETTER O WITH DIAERESIS" #x00F6)
- ("DIVISION SIGN" #x00F7)
- ("LATIN SMALL LETTER O WITH STROKE" #x00F8)
- ("LATIN SMALL LETTER U WITH GRAVE" #x00F9)
- ("LATIN SMALL LETTER U WITH ACUTE" #x00FA)
- ("LATIN SMALL LETTER U WITH CIRCUMFLEX" #x00FB)
- ("LATIN SMALL LETTER U WITH DIAERESIS" #x00FC)
- ("LATIN SMALL LETTER Y WITH ACUTE" #x00FD)
- ("LATIN SMALL LETTER THORN" #x00FE)
- ("LATIN SMALL LETTER Y WITH DIAERESIS" #x00FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'latin-extended-a
- '(("LATIN CAPITAL LETTER A WITH MACRON" #x0100)
- ("LATIN SMALL LETTER A WITH MACRON" #x0101)
- ("LATIN CAPITAL LETTER A WITH BREVE" #x0102)
- ("LATIN SMALL LETTER A WITH BREVE" #x0103)
- ("LATIN CAPITAL LETTER A WITH OGONEK" #x0104)
- ("LATIN SMALL LETTER A WITH OGONEK" #x0105)
- ("LATIN CAPITAL LETTER C WITH ACUTE" #x0106)
- ("LATIN SMALL LETTER C WITH ACUTE" #x0107)
- ("LATIN CAPITAL LETTER C WITH CIRCUMFLEX" #x0108)
- ("LATIN SMALL LETTER C WITH CIRCUMFLEX" #x0109)
- ("LATIN CAPITAL LETTER C WITH DOT ABOVE" #x010A)
- ("LATIN SMALL LETTER C WITH DOT ABOVE" #x010B)
- ("LATIN CAPITAL LETTER C WITH CARON" #x010C)
- ("LATIN SMALL LETTER C WITH CARON" #x010D)
- ("LATIN CAPITAL LETTER D WITH CARON" #x010E)
- ("LATIN SMALL LETTER D WITH CARON" #x010F)
- ("LATIN CAPITAL LETTER D WITH STROKE" #x0110)
- ("LATIN SMALL LETTER D WITH STROKE" #x0111)
- ("LATIN CAPITAL LETTER E WITH MACRON" #x0112)
- ("LATIN SMALL LETTER E WITH MACRON" #x0113)
- ("LATIN CAPITAL LETTER E WITH BREVE" #x0114)
- ("LATIN SMALL LETTER E WITH BREVE" #x0115)
- ("LATIN CAPITAL LETTER E WITH DOT ABOVE" #x0116)
- ("LATIN SMALL LETTER E WITH DOT ABOVE" #x0117)
- ("LATIN CAPITAL LETTER E WITH OGONEK" #x0118)
- ("LATIN SMALL LETTER E WITH OGONEK" #x0119)
- ("LATIN CAPITAL LETTER E WITH CARON" #x011A)
- ("LATIN SMALL LETTER E WITH CARON" #x011B)
- ("LATIN CAPITAL LETTER G WITH CIRCUMFLEX" #x011C)
- ("LATIN SMALL LETTER G WITH CIRCUMFLEX" #x011D)
- ("LATIN CAPITAL LETTER G WITH BREVE" #x011E)
- ("LATIN SMALL LETTER G WITH BREVE" #x011F)
- ("LATIN CAPITAL LETTER G WITH DOT ABOVE" #x0120)
- ("LATIN SMALL LETTER G WITH DOT ABOVE" #x0121)
- ("LATIN CAPITAL LETTER G WITH CEDILLA" #x0122)
- ("LATIN SMALL LETTER G WITH CEDILLA" #x0123)
- ("LATIN CAPITAL LETTER H WITH CIRCUMFLEX" #x0124)
- ("LATIN SMALL LETTER H WITH CIRCUMFLEX" #x0125)
- ("LATIN CAPITAL LETTER H WITH STROKE" #x0126)
- ("LATIN SMALL LETTER H WITH STROKE" #x0127)
- ("LATIN CAPITAL LETTER I WITH TILDE" #x0128)
- ("LATIN SMALL LETTER I WITH TILDE" #x0129)
- ("LATIN CAPITAL LETTER I WITH MACRON" #x012A)
- ("LATIN SMALL LETTER I WITH MACRON" #x012B)
- ("LATIN CAPITAL LETTER I WITH BREVE" #x012C)
- ("LATIN SMALL LETTER I WITH BREVE" #x012D)
- ("LATIN CAPITAL LETTER I WITH OGONEK" #x012E)
- ("LATIN SMALL LETTER I WITH OGONEK" #x012F)
- ("LATIN CAPITAL LETTER I WITH DOT ABOVE" #x0130)
- ("LATIN SMALL LETTER DOTLESS I" #x0131)
- ("LATIN CAPITAL LIGATURE IJ" #x0132)
- ("LATIN SMALL LIGATURE IJ" #x0133)
- ("LATIN CAPITAL LETTER J WITH CIRCUMFLEX" #x0134)
- ("LATIN SMALL LETTER J WITH CIRCUMFLEX" #x0135)
- ("LATIN CAPITAL LETTER K WITH CEDILLA" #x0136)
- ("LATIN SMALL LETTER K WITH CEDILLA" #x0137)
- ("LATIN SMALL LETTER KRA" #x0138)
- ("LATIN CAPITAL LETTER L WITH ACUTE" #x0139)
- ("LATIN SMALL LETTER L WITH ACUTE" #x013A)
- ("LATIN CAPITAL LETTER L WITH CEDILLA" #x013B)
- ("LATIN SMALL LETTER L WITH CEDILLA" #x013C)
- ("LATIN CAPITAL LETTER L WITH CARON" #x013D)
- ("LATIN SMALL LETTER L WITH CARON" #x013E)
- ("LATIN CAPITAL LETTER L WITH MIDDLE DOT" #x013F)
- ("LATIN SMALL LETTER L WITH MIDDLE DOT" #x0140)
- ("LATIN CAPITAL LETTER L WITH STROKE" #x0141)
- ("LATIN SMALL LETTER L WITH STROKE" #x0142)
- ("LATIN CAPITAL LETTER N WITH ACUTE" #x0143)
- ("LATIN SMALL LETTER N WITH ACUTE" #x0144)
- ("LATIN CAPITAL LETTER N WITH CEDILLA" #x0145)
- ("LATIN SMALL LETTER N WITH CEDILLA" #x0146)
- ("LATIN CAPITAL LETTER N WITH CARON" #x0147)
- ("LATIN SMALL LETTER N WITH CARON" #x0148)
- ("LATIN SMALL LETTER N PRECEDED BY APOSTROPHE" #x0149)
- ("LATIN CAPITAL LETTER ENG" #x014A)
- ("LATIN SMALL LETTER ENG" #x014B)
- ("LATIN CAPITAL LETTER O WITH MACRON" #x014C)
- ("LATIN SMALL LETTER O WITH MACRON" #x014D)
- ("LATIN CAPITAL LETTER O WITH BREVE" #x014E)
- ("LATIN SMALL LETTER O WITH BREVE" #x014F)
- ("LATIN CAPITAL LETTER O WITH DOUBLE ACUTE" #x0150)
- ("LATIN SMALL LETTER O WITH DOUBLE ACUTE" #x0151)
- ("LATIN CAPITAL LIGATURE OE" #x0152)
- ("LATIN SMALL LIGATURE OE" #x0153)
- ("LATIN CAPITAL LETTER R WITH ACUTE" #x0154)
- ("LATIN SMALL LETTER R WITH ACUTE" #x0155)
- ("LATIN CAPITAL LETTER R WITH CEDILLA" #x0156)
- ("LATIN SMALL LETTER R WITH CEDILLA" #x0157)
- ("LATIN CAPITAL LETTER R WITH CARON" #x0158)
- ("LATIN SMALL LETTER R WITH CARON" #x0159)
- ("LATIN CAPITAL LETTER S WITH ACUTE" #x015A)
- ("LATIN SMALL LETTER S WITH ACUTE" #x015B)
- ("LATIN CAPITAL LETTER S WITH CIRCUMFLEX" #x015C)
- ("LATIN SMALL LETTER S WITH CIRCUMFLEX" #x015D)
- ("LATIN CAPITAL LETTER S WITH CEDILLA" #x015E)
- ("LATIN SMALL LETTER S WITH CEDILLA" #x015F)
- ("LATIN CAPITAL LETTER S WITH CARON" #x0160)
- ("LATIN SMALL LETTER S WITH CARON" #x0161)
- ("LATIN CAPITAL LETTER T WITH CEDILLA" #x0162)
- ("LATIN SMALL LETTER T WITH CEDILLA" #x0163)
- ("LATIN CAPITAL LETTER T WITH CARON" #x0164)
- ("LATIN SMALL LETTER T WITH CARON" #x0165)
- ("LATIN CAPITAL LETTER T WITH STROKE" #x0166)
- ("LATIN SMALL LETTER T WITH STROKE" #x0167)
- ("LATIN CAPITAL LETTER U WITH TILDE" #x0168)
- ("LATIN SMALL LETTER U WITH TILDE" #x0169)
- ("LATIN CAPITAL LETTER U WITH MACRON" #x016A)
- ("LATIN SMALL LETTER U WITH MACRON" #x016B)
- ("LATIN CAPITAL LETTER U WITH BREVE" #x016C)
- ("LATIN SMALL LETTER U WITH BREVE" #x016D)
- ("LATIN CAPITAL LETTER U WITH RING ABOVE" #x016E)
- ("LATIN SMALL LETTER U WITH RING ABOVE" #x016F)
- ("LATIN CAPITAL LETTER U WITH DOUBLE ACUTE" #x0170)
- ("LATIN SMALL LETTER U WITH DOUBLE ACUTE" #x0171)
- ("LATIN CAPITAL LETTER U WITH OGONEK" #x0172)
- ("LATIN SMALL LETTER U WITH OGONEK" #x0173)
- ("LATIN CAPITAL LETTER W WITH CIRCUMFLEX" #x0174)
- ("LATIN SMALL LETTER W WITH CIRCUMFLEX" #x0175)
- ("LATIN CAPITAL LETTER Y WITH CIRCUMFLEX" #x0176)
- ("LATIN SMALL LETTER Y WITH CIRCUMFLEX" #x0177)
- ("LATIN CAPITAL LETTER Y WITH DIAERESIS" #x0178)
- ("LATIN CAPITAL LETTER Z WITH ACUTE" #x0179)
- ("LATIN SMALL LETTER Z WITH ACUTE" #x017A)
- ("LATIN CAPITAL LETTER Z WITH DOT ABOVE" #x017B)
- ("LATIN SMALL LETTER Z WITH DOT ABOVE" #x017C)
- ("LATIN CAPITAL LETTER Z WITH CARON" #x017D)
- ("LATIN SMALL LETTER Z WITH CARON" #x017E)
- ("LATIN SMALL LETTER LONG S" #x017F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'latin-extended-b
- '(("LATIN SMALL LETTER B WITH STROKE" #x0180)
- ("LATIN CAPITAL LETTER B WITH HOOK" #x0181)
- ("LATIN CAPITAL LETTER B WITH TOPBAR" #x0182)
- ("LATIN SMALL LETTER B WITH TOPBAR" #x0183)
- ("LATIN CAPITAL LETTER TONE SIX" #x0184)
- ("LATIN SMALL LETTER TONE SIX" #x0185)
- ("LATIN CAPITAL LETTER OPEN O" #x0186)
- ("LATIN CAPITAL LETTER C WITH HOOK" #x0187)
- ("LATIN SMALL LETTER C WITH HOOK" #x0188)
- ("LATIN CAPITAL LETTER AFRICAN D" #x0189)
- ("LATIN CAPITAL LETTER D WITH HOOK" #x018A)
- ("LATIN CAPITAL LETTER D WITH TOPBAR" #x018B)
- ("LATIN SMALL LETTER D WITH TOPBAR" #x018C)
- ("LATIN SMALL LETTER TURNED DELTA" #x018D)
- ("LATIN CAPITAL LETTER REVERSED E" #x018E)
- ("LATIN CAPITAL LETTER SCHWA" #x018F)
- ("LATIN CAPITAL LETTER OPEN E" #x0190)
- ("LATIN CAPITAL LETTER F WITH HOOK" #x0191)
- ("LATIN SMALL LETTER F WITH HOOK" #x0192)
- ("LATIN CAPITAL LETTER G WITH HOOK" #x0193)
- ("LATIN CAPITAL LETTER GAMMA" #x0194)
- ("LATIN SMALL LETTER HV" #x0195)
- ("LATIN CAPITAL LETTER IOTA" #x0196)
- ("LATIN CAPITAL LETTER I WITH STROKE" #x0197)
- ("LATIN CAPITAL LETTER K WITH HOOK" #x0198)
- ("LATIN SMALL LETTER K WITH HOOK" #x0199)
- ("LATIN SMALL LETTER L WITH BAR" #x019A)
- ("LATIN SMALL LETTER LAMBDA WITH STROKE" #x019B)
- ("LATIN CAPITAL LETTER TURNED M" #x019C)
- ("LATIN CAPITAL LETTER N WITH LEFT HOOK" #x019D)
- ("LATIN SMALL LETTER N WITH LONG RIGHT LEG" #x019E)
- ("LATIN CAPITAL LETTER O WITH MIDDLE TILDE" #x019F)
- ("LATIN CAPITAL LETTER O WITH HORN" #x01A0)
- ("LATIN SMALL LETTER O WITH HORN" #x01A1)
- ("LATIN CAPITAL LETTER OI" #x01A2)
- ("LATIN SMALL LETTER OI" #x01A3)
- ("LATIN CAPITAL LETTER P WITH HOOK" #x01A4)
- ("LATIN SMALL LETTER P WITH HOOK" #x01A5)
- ("LATIN LETTER YR" #x01A6)
- ("LATIN CAPITAL LETTER TONE TWO" #x01A7)
- ("LATIN SMALL LETTER TONE TWO" #x01A8)
- ("LATIN CAPITAL LETTER ESH" #x01A9)
- ("LATIN LETTER REVERSED ESH LOOP" #x01AA)
- ("LATIN SMALL LETTER T WITH PALATAL HOOK" #x01AB)
- ("LATIN CAPITAL LETTER T WITH HOOK" #x01AC)
- ("LATIN SMALL LETTER T WITH HOOK" #x01AD)
- ("LATIN CAPITAL LETTER T WITH RETROFLEX HOOK" #x01AE)
- ("LATIN CAPITAL LETTER U WITH HORN" #x01AF)
- ("LATIN SMALL LETTER U WITH HORN" #x01B0)
- ("LATIN CAPITAL LETTER UPSILON" #x01B1)
- ("LATIN CAPITAL LETTER V WITH HOOK" #x01B2)
- ("LATIN CAPITAL LETTER Y WITH HOOK" #x01B3)
- ("LATIN SMALL LETTER Y WITH HOOK" #x01B4)
- ("LATIN CAPITAL LETTER Z WITH STROKE" #x01B5)
- ("LATIN SMALL LETTER Z WITH STROKE" #x01B6)
- ("LATIN CAPITAL LETTER EZH" #x01B7)
- ("LATIN CAPITAL LETTER EZH REVERSED" #x01B8)
- ("LATIN SMALL LETTER EZH REVERSED" #x01B9)
- ("LATIN SMALL LETTER EZH WITH TAIL" #x01BA)
- ("LATIN LETTER TWO WITH STROKE" #x01BB)
- ("LATIN CAPITAL LETTER TONE FIVE" #x01BC)
- ("LATIN SMALL LETTER TONE FIVE" #x01BD)
- ("LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE" #x01BE)
- ("LATIN LETTER WYNN" #x01BF)
- ("LATIN LETTER DENTAL CLICK" #x01C0)
- ("LATIN LETTER LATERAL CLICK" #x01C1)
- ("LATIN LETTER ALVEOLAR CLICK" #x01C2)
- ("LATIN LETTER RETROFLEX CLICK" #x01C3)
- ("LATIN CAPITAL LETTER DZ WITH CARON" #x01C4)
- ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON" #x01C5)
- ("LATIN SMALL LETTER DZ WITH CARON" #x01C6)
- ("LATIN CAPITAL LETTER LJ" #x01C7)
- ("LATIN CAPITAL LETTER L WITH SMALL LETTER J" #x01C8)
- ("LATIN SMALL LETTER LJ" #x01C9)
- ("LATIN CAPITAL LETTER NJ" #x01CA)
- ("LATIN CAPITAL LETTER N WITH SMALL LETTER J" #x01CB)
- ("LATIN SMALL LETTER NJ" #x01CC)
- ("LATIN CAPITAL LETTER A WITH CARON" #x01CD)
- ("LATIN SMALL LETTER A WITH CARON" #x01CE)
- ("LATIN CAPITAL LETTER I WITH CARON" #x01CF)
- ("LATIN SMALL LETTER I WITH CARON" #x01D0)
- ("LATIN CAPITAL LETTER O WITH CARON" #x01D1)
- ("LATIN SMALL LETTER O WITH CARON" #x01D2)
- ("LATIN CAPITAL LETTER U WITH CARON" #x01D3)
- ("LATIN SMALL LETTER U WITH CARON" #x01D4)
- ("LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON" #x01D5)
- ("LATIN SMALL LETTER U WITH DIAERESIS AND MACRON" #x01D6)
- ("LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE" #x01D7)
- ("LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE" #x01D8)
- ("LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON" #x01D9)
- ("LATIN SMALL LETTER U WITH DIAERESIS AND CARON" #x01DA)
- ("LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE" #x01DB)
- ("LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE" #x01DC)
- ("LATIN SMALL LETTER TURNED E" #x01DD)
- ("LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON" #x01DE)
- ("LATIN SMALL LETTER A WITH DIAERESIS AND MACRON" #x01DF)
- ("LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON" #x01E0)
- ("LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON" #x01E1)
- ("LATIN CAPITAL LETTER AE WITH MACRON" #x01E2)
- ("LATIN SMALL LETTER AE WITH MACRON" #x01E3)
- ("LATIN CAPITAL LETTER G WITH STROKE" #x01E4)
- ("LATIN SMALL LETTER G WITH STROKE" #x01E5)
- ("LATIN CAPITAL LETTER G WITH CARON" #x01E6)
- ("LATIN SMALL LETTER G WITH CARON" #x01E7)
- ("LATIN CAPITAL LETTER K WITH CARON" #x01E8)
- ("LATIN SMALL LETTER K WITH CARON" #x01E9)
- ("LATIN CAPITAL LETTER O WITH OGONEK" #x01EA)
- ("LATIN SMALL LETTER O WITH OGONEK" #x01EB)
- ("LATIN CAPITAL LETTER O WITH OGONEK AND MACRON" #x01EC)
- ("LATIN SMALL LETTER O WITH OGONEK AND MACRON" #x01ED)
- ("LATIN CAPITAL LETTER EZH WITH CARON" #x01EE)
- ("LATIN SMALL LETTER EZH WITH CARON" #x01EF)
- ("LATIN SMALL LETTER J WITH CARON" #x01F0)
- ("LATIN CAPITAL LETTER DZ" #x01F1)
- ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z" #x01F2)
- ("LATIN SMALL LETTER DZ" #x01F3)
- ("LATIN CAPITAL LETTER G WITH ACUTE" #x01F4)
- ("LATIN SMALL LETTER G WITH ACUTE" #x01F5)
- ("LATIN CAPITAL LETTER HWAIR" #x01F6)
- ("LATIN CAPITAL LETTER WYNN" #x01F7)
- ("LATIN CAPITAL LETTER N WITH GRAVE" #x01F8)
- ("LATIN SMALL LETTER N WITH GRAVE" #x01F9)
- ("LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE" #x01FA)
- ("LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE" #x01FB)
- ("LATIN CAPITAL LETTER AE WITH ACUTE" #x01FC)
- ("LATIN SMALL LETTER AE WITH ACUTE" #x01FD)
- ("LATIN CAPITAL LETTER O WITH STROKE AND ACUTE" #x01FE)
- ("LATIN SMALL LETTER O WITH STROKE AND ACUTE" #x01FF)
- ("LATIN CAPITAL LETTER A WITH DOUBLE GRAVE" #x0200)
- ("LATIN SMALL LETTER A WITH DOUBLE GRAVE" #x0201)
- ("LATIN CAPITAL LETTER A WITH INVERTED BREVE" #x0202)
- ("LATIN SMALL LETTER A WITH INVERTED BREVE" #x0203)
- ("LATIN CAPITAL LETTER E WITH DOUBLE GRAVE" #x0204)
- ("LATIN SMALL LETTER E WITH DOUBLE GRAVE" #x0205)
- ("LATIN CAPITAL LETTER E WITH INVERTED BREVE" #x0206)
- ("LATIN SMALL LETTER E WITH INVERTED BREVE" #x0207)
- ("LATIN CAPITAL LETTER I WITH DOUBLE GRAVE" #x0208)
- ("LATIN SMALL LETTER I WITH DOUBLE GRAVE" #x0209)
- ("LATIN CAPITAL LETTER I WITH INVERTED BREVE" #x020A)
- ("LATIN SMALL LETTER I WITH INVERTED BREVE" #x020B)
- ("LATIN CAPITAL LETTER O WITH DOUBLE GRAVE" #x020C)
- ("LATIN SMALL LETTER O WITH DOUBLE GRAVE" #x020D)
- ("LATIN CAPITAL LETTER O WITH INVERTED BREVE" #x020E)
- ("LATIN SMALL LETTER O WITH INVERTED BREVE" #x020F)
- ("LATIN CAPITAL LETTER R WITH DOUBLE GRAVE" #x0210)
- ("LATIN SMALL LETTER R WITH DOUBLE GRAVE" #x0211)
- ("LATIN CAPITAL LETTER R WITH INVERTED BREVE" #x0212)
- ("LATIN SMALL LETTER R WITH INVERTED BREVE" #x0213)
- ("LATIN CAPITAL LETTER U WITH DOUBLE GRAVE" #x0214)
- ("LATIN SMALL LETTER U WITH DOUBLE GRAVE" #x0215)
- ("LATIN CAPITAL LETTER U WITH INVERTED BREVE" #x0216)
- ("LATIN SMALL LETTER U WITH INVERTED BREVE" #x0217)
- ("LATIN CAPITAL LETTER S WITH COMMA BELOW" #x0218)
- ("LATIN SMALL LETTER S WITH COMMA BELOW" #x0219)
- ("LATIN CAPITAL LETTER T WITH COMMA BELOW" #x021A)
- ("LATIN SMALL LETTER T WITH COMMA BELOW" #x021B)
- ("LATIN CAPITAL LETTER YOGH" #x021C)
- ("LATIN SMALL LETTER YOGH" #x021D)
- ("LATIN CAPITAL LETTER H WITH CARON" #x021E)
- ("LATIN SMALL LETTER H WITH CARON" #x021F)
- ("LATIN CAPITAL LETTER N WITH LONG RIGHT LEG" #x0220)
- ("LATIN CAPITAL LETTER OU" #x0222)
- ("LATIN SMALL LETTER OU" #x0223)
- ("LATIN CAPITAL LETTER Z WITH HOOK" #x0224)
- ("LATIN SMALL LETTER Z WITH HOOK" #x0225)
- ("LATIN CAPITAL LETTER A WITH DOT ABOVE" #x0226)
- ("LATIN SMALL LETTER A WITH DOT ABOVE" #x0227)
- ("LATIN CAPITAL LETTER E WITH CEDILLA" #x0228)
- ("LATIN SMALL LETTER E WITH CEDILLA" #x0229)
- ("LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON" #x022A)
- ("LATIN SMALL LETTER O WITH DIAERESIS AND MACRON" #x022B)
- ("LATIN CAPITAL LETTER O WITH TILDE AND MACRON" #x022C)
- ("LATIN SMALL LETTER O WITH TILDE AND MACRON" #x022D)
- ("LATIN CAPITAL LETTER O WITH DOT ABOVE" #x022E)
- ("LATIN SMALL LETTER O WITH DOT ABOVE" #x022F)
- ("LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON" #x0230)
- ("LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON" #x0231)
- ("LATIN CAPITAL LETTER Y WITH MACRON" #x0232)
- ("LATIN SMALL LETTER Y WITH MACRON" #x0233)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'ipa-extensions
- '(("LATIN SMALL LETTER TURNED A" #x0250)
- ("LATIN SMALL LETTER ALPHA" #x0251)
- ("LATIN SMALL LETTER TURNED ALPHA" #x0252)
- ("LATIN SMALL LETTER B WITH HOOK" #x0253)
- ("LATIN SMALL LETTER OPEN O" #x0254)
- ("LATIN SMALL LETTER C WITH CURL" #x0255)
- ("LATIN SMALL LETTER D WITH TAIL" #x0256)
- ("LATIN SMALL LETTER D WITH HOOK" #x0257)
- ("LATIN SMALL LETTER REVERSED E" #x0258)
- ("LATIN SMALL LETTER SCHWA" #x0259)
- ("LATIN SMALL LETTER SCHWA WITH HOOK" #x025A)
- ("LATIN SMALL LETTER OPEN E" #x025B)
- ("LATIN SMALL LETTER REVERSED OPEN E" #x025C)
- ("LATIN SMALL LETTER REVERSED OPEN E WITH HOOK" #x025D)
- ("LATIN SMALL LETTER CLOSED REVERSED OPEN E" #x025E)
- ("LATIN SMALL LETTER DOTLESS J WITH STROKE" #x025F)
- ("LATIN SMALL LETTER G WITH HOOK" #x0260)
- ("LATIN SMALL LETTER SCRIPT G" #x0261)
- ("LATIN LETTER SMALL CAPITAL G" #x0262)
- ("LATIN SMALL LETTER GAMMA" #x0263)
- ("LATIN SMALL LETTER RAMS HORN" #x0264)
- ("LATIN SMALL LETTER TURNED H" #x0265)
- ("LATIN SMALL LETTER H WITH HOOK" #x0266)
- ("LATIN SMALL LETTER HENG WITH HOOK" #x0267)
- ("LATIN SMALL LETTER I WITH STROKE" #x0268)
- ("LATIN SMALL LETTER IOTA" #x0269)
- ("LATIN LETTER SMALL CAPITAL I" #x026A)
- ("LATIN SMALL LETTER L WITH MIDDLE TILDE" #x026B)
- ("LATIN SMALL LETTER L WITH BELT" #x026C)
- ("LATIN SMALL LETTER L WITH RETROFLEX HOOK" #x026D)
- ("LATIN SMALL LETTER LEZH" #x026E)
- ("LATIN SMALL LETTER TURNED M" #x026F)
- ("LATIN SMALL LETTER TURNED M WITH LONG LEG" #x0270)
- ("LATIN SMALL LETTER M WITH HOOK" #x0271)
- ("LATIN SMALL LETTER N WITH LEFT HOOK" #x0272)
- ("LATIN SMALL LETTER N WITH RETROFLEX HOOK" #x0273)
- ("LATIN LETTER SMALL CAPITAL N" #x0274)
- ("LATIN SMALL LETTER BARRED O" #x0275)
- ("LATIN LETTER SMALL CAPITAL OE" #x0276)
- ("LATIN SMALL LETTER CLOSED OMEGA" #x0277)
- ("LATIN SMALL LETTER PHI" #x0278)
- ("LATIN SMALL LETTER TURNED R" #x0279)
- ("LATIN SMALL LETTER TURNED R WITH LONG LEG" #x027A)
- ("LATIN SMALL LETTER TURNED R WITH HOOK" #x027B)
- ("LATIN SMALL LETTER R WITH LONG LEG" #x027C)
- ("LATIN SMALL LETTER R WITH TAIL" #x027D)
- ("LATIN SMALL LETTER R WITH FISHHOOK" #x027E)
- ("LATIN SMALL LETTER REVERSED R WITH FISHHOOK" #x027F)
- ("LATIN LETTER SMALL CAPITAL R" #x0280)
- ("LATIN LETTER SMALL CAPITAL INVERTED R" #x0281)
- ("LATIN SMALL LETTER S WITH HOOK" #x0282)
- ("LATIN SMALL LETTER ESH" #x0283)
- ("LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK" #x0284)
- ("LATIN SMALL LETTER SQUAT REVERSED ESH" #x0285)
- ("LATIN SMALL LETTER ESH WITH CURL" #x0286)
- ("LATIN SMALL LETTER TURNED T" #x0287)
- ("LATIN SMALL LETTER T WITH RETROFLEX HOOK" #x0288)
- ("LATIN SMALL LETTER U BAR" #x0289)
- ("LATIN SMALL LETTER UPSILON" #x028A)
- ("LATIN SMALL LETTER V WITH HOOK" #x028B)
- ("LATIN SMALL LETTER TURNED V" #x028C)
- ("LATIN SMALL LETTER TURNED W" #x028D)
- ("LATIN SMALL LETTER TURNED Y" #x028E)
- ("LATIN LETTER SMALL CAPITAL Y" #x028F)
- ("LATIN SMALL LETTER Z WITH RETROFLEX HOOK" #x0290)
- ("LATIN SMALL LETTER Z WITH CURL" #x0291)
- ("LATIN SMALL LETTER EZH" #x0292)
- ("LATIN SMALL LETTER EZH WITH CURL" #x0293)
- ("LATIN LETTER GLOTTAL STOP" #x0294)
- ("LATIN LETTER PHARYNGEAL VOICED FRICATIVE" #x0295)
- ("LATIN LETTER INVERTED GLOTTAL STOP" #x0296)
- ("LATIN LETTER STRETCHED C" #x0297)
- ("LATIN LETTER BILABIAL CLICK" #x0298)
- ("LATIN LETTER SMALL CAPITAL B" #x0299)
- ("LATIN SMALL LETTER CLOSED OPEN E" #x029A)
- ("LATIN LETTER SMALL CAPITAL G WITH HOOK" #x029B)
- ("LATIN LETTER SMALL CAPITAL H" #x029C)
- ("LATIN SMALL LETTER J WITH CROSSED-TAIL" #x029D)
- ("LATIN SMALL LETTER TURNED K" #x029E)
- ("LATIN LETTER SMALL CAPITAL L" #x029F)
- ("LATIN SMALL LETTER Q WITH HOOK" #x02A0)
- ("LATIN LETTER GLOTTAL STOP WITH STROKE" #x02A1)
- ("LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE" #x02A2)
- ("LATIN SMALL LETTER DZ DIGRAPH" #x02A3)
- ("LATIN SMALL LETTER DEZH DIGRAPH" #x02A4)
- ("LATIN SMALL LETTER DZ DIGRAPH WITH CURL" #x02A5)
- ("LATIN SMALL LETTER TS DIGRAPH" #x02A6)
- ("LATIN SMALL LETTER TESH DIGRAPH" #x02A7)
- ("LATIN SMALL LETTER TC DIGRAPH WITH CURL" #x02A8)
- ("LATIN SMALL LETTER FENG DIGRAPH" #x02A9)
- ("LATIN SMALL LETTER LS DIGRAPH" #x02AA)
- ("LATIN SMALL LETTER LZ DIGRAPH" #x02AB)
- ("LATIN LETTER BILABIAL PERCUSSIVE" #x02AC)
- ("LATIN LETTER BIDENTAL PERCUSSIVE" #x02AD)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'spacing-modifier-letters
- '(("MODIFIER LETTER SMALL H" #x02B0)
- ("MODIFIER LETTER SMALL H WITH HOOK" #x02B1)
- ("MODIFIER LETTER SMALL J" #x02B2)
- ("MODIFIER LETTER SMALL R" #x02B3)
- ("MODIFIER LETTER SMALL TURNED R" #x02B4)
- ("MODIFIER LETTER SMALL TURNED R WITH HOOK" #x02B5)
- ("MODIFIER LETTER SMALL CAPITAL INVERTED R" #x02B6)
- ("MODIFIER LETTER SMALL W" #x02B7)
- ("MODIFIER LETTER SMALL Y" #x02B8)
- ("MODIFIER LETTER PRIME" #x02B9)
- ("MODIFIER LETTER DOUBLE PRIME" #x02BA)
- ("MODIFIER LETTER TURNED COMMA" #x02BB)
- ("MODIFIER LETTER APOSTROPHE" #x02BC)
- ("MODIFIER LETTER REVERSED COMMA" #x02BD)
- ("MODIFIER LETTER RIGHT HALF RING" #x02BE)
- ("MODIFIER LETTER LEFT HALF RING" #x02BF)
- ("MODIFIER LETTER GLOTTAL STOP" #x02C0)
- ("MODIFIER LETTER REVERSED GLOTTAL STOP" #x02C1)
- ("MODIFIER LETTER LEFT ARROWHEAD" #x02C2)
- ("MODIFIER LETTER RIGHT ARROWHEAD" #x02C3)
- ("MODIFIER LETTER UP ARROWHEAD" #x02C4)
- ("MODIFIER LETTER DOWN ARROWHEAD" #x02C5)
- ("MODIFIER LETTER CIRCUMFLEX ACCENT" #x02C6)
- ("CARON" #x02C7)
- ("MODIFIER LETTER VERTICAL LINE" #x02C8)
- ("MODIFIER LETTER MACRON" #x02C9)
- ("MODIFIER LETTER ACUTE ACCENT" #x02CA)
- ("MODIFIER LETTER GRAVE ACCENT" #x02CB)
- ("MODIFIER LETTER LOW VERTICAL LINE" #x02CC)
- ("MODIFIER LETTER LOW MACRON" #x02CD)
- ("MODIFIER LETTER LOW GRAVE ACCENT" #x02CE)
- ("MODIFIER LETTER LOW ACUTE ACCENT" #x02CF)
- ("MODIFIER LETTER TRIANGULAR COLON" #x02D0)
- ("MODIFIER LETTER HALF TRIANGULAR COLON" #x02D1)
- ("MODIFIER LETTER CENTRED RIGHT HALF RING" #x02D2)
- ("MODIFIER LETTER CENTRED LEFT HALF RING" #x02D3)
- ("MODIFIER LETTER UP TACK" #x02D4)
- ("MODIFIER LETTER DOWN TACK" #x02D5)
- ("MODIFIER LETTER PLUS SIGN" #x02D6)
- ("MODIFIER LETTER MINUS SIGN" #x02D7)
- ("BREVE" #x02D8)
- ("DOT ABOVE" #x02D9)
- ("RING ABOVE" #x02DA)
- ("OGONEK" #x02DB)
- ("SMALL TILDE" #x02DC)
- ("DOUBLE ACUTE ACCENT" #x02DD)
- ("MODIFIER LETTER RHOTIC HOOK" #x02DE)
- ("MODIFIER LETTER CROSS ACCENT" #x02DF)
- ("MODIFIER LETTER SMALL GAMMA" #x02E0)
- ("MODIFIER LETTER SMALL L" #x02E1)
- ("MODIFIER LETTER SMALL S" #x02E2)
- ("MODIFIER LETTER SMALL X" #x02E3)
- ("MODIFIER LETTER SMALL REVERSED GLOTTAL STOP" #x02E4)
- ("MODIFIER LETTER EXTRA-HIGH TONE BAR" #x02E5)
- ("MODIFIER LETTER HIGH TONE BAR" #x02E6)
- ("MODIFIER LETTER MID TONE BAR" #x02E7)
- ("MODIFIER LETTER LOW TONE BAR" #x02E8)
- ("MODIFIER LETTER EXTRA-LOW TONE BAR" #x02E9)
- ("MODIFIER LETTER YIN DEPARTING TONE MARK" #x02EA)
- ("MODIFIER LETTER YANG DEPARTING TONE MARK" #x02EB)
- ("MODIFIER LETTER VOICING" #x02EC)
- ("MODIFIER LETTER UNASPIRATED" #x02ED)
- ("MODIFIER LETTER DOUBLE APOSTROPHE" #x02EE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'combining-diacritical-marks
- '(("COMBINING GRAVE ACCENT" #x0300)
- ("COMBINING ACUTE ACCENT" #x0301)
- ("COMBINING CIRCUMFLEX ACCENT" #x0302)
- ("COMBINING TILDE" #x0303)
- ("COMBINING MACRON" #x0304)
- ("COMBINING OVERLINE" #x0305)
- ("COMBINING BREVE" #x0306)
- ("COMBINING DOT ABOVE" #x0307)
- ("COMBINING DIAERESIS" #x0308)
- ("COMBINING HOOK ABOVE" #x0309)
- ("COMBINING RING ABOVE" #x030A)
- ("COMBINING DOUBLE ACUTE ACCENT" #x030B)
- ("COMBINING CARON" #x030C)
- ("COMBINING VERTICAL LINE ABOVE" #x030D)
- ("COMBINING DOUBLE VERTICAL LINE ABOVE" #x030E)
- ("COMBINING DOUBLE GRAVE ACCENT" #x030F)
- ("COMBINING CANDRABINDU" #x0310)
- ("COMBINING INVERTED BREVE" #x0311)
- ("COMBINING TURNED COMMA ABOVE" #x0312)
- ("COMBINING COMMA ABOVE" #x0313)
- ("COMBINING REVERSED COMMA ABOVE" #x0314)
- ("COMBINING COMMA ABOVE RIGHT" #x0315)
- ("COMBINING GRAVE ACCENT BELOW" #x0316)
- ("COMBINING ACUTE ACCENT BELOW" #x0317)
- ("COMBINING LEFT TACK BELOW" #x0318)
- ("COMBINING RIGHT TACK BELOW" #x0319)
- ("COMBINING LEFT ANGLE ABOVE" #x031A)
- ("COMBINING HORN" #x031B)
- ("COMBINING LEFT HALF RING BELOW" #x031C)
- ("COMBINING UP TACK BELOW" #x031D)
- ("COMBINING DOWN TACK BELOW" #x031E)
- ("COMBINING PLUS SIGN BELOW" #x031F)
- ("COMBINING MINUS SIGN BELOW" #x0320)
- ("COMBINING PALATALIZED HOOK BELOW" #x0321)
- ("COMBINING RETROFLEX HOOK BELOW" #x0322)
- ("COMBINING DOT BELOW" #x0323)
- ("COMBINING DIAERESIS BELOW" #x0324)
- ("COMBINING RING BELOW" #x0325)
- ("COMBINING COMMA BELOW" #x0326)
- ("COMBINING CEDILLA" #x0327)
- ("COMBINING OGONEK" #x0328)
- ("COMBINING VERTICAL LINE BELOW" #x0329)
- ("COMBINING BRIDGE BELOW" #x032A)
- ("COMBINING INVERTED DOUBLE ARCH BELOW" #x032B)
- ("COMBINING CARON BELOW" #x032C)
- ("COMBINING CIRCUMFLEX ACCENT BELOW" #x032D)
- ("COMBINING BREVE BELOW" #x032E)
- ("COMBINING INVERTED BREVE BELOW" #x032F)
- ("COMBINING TILDE BELOW" #x0330)
- ("COMBINING MACRON BELOW" #x0331)
- ("COMBINING LOW LINE" #x0332)
- ("COMBINING DOUBLE LOW LINE" #x0333)
- ("COMBINING TILDE OVERLAY" #x0334)
- ("COMBINING SHORT STROKE OVERLAY" #x0335)
- ("COMBINING LONG STROKE OVERLAY" #x0336)
- ("COMBINING SHORT SOLIDUS OVERLAY" #x0337)
- ("COMBINING LONG SOLIDUS OVERLAY" #x0338)
- ("COMBINING RIGHT HALF RING BELOW" #x0339)
- ("COMBINING INVERTED BRIDGE BELOW" #x033A)
- ("COMBINING SQUARE BELOW" #x033B)
- ("COMBINING SEAGULL BELOW" #x033C)
- ("COMBINING X ABOVE" #x033D)
- ("COMBINING VERTICAL TILDE" #x033E)
- ("COMBINING DOUBLE OVERLINE" #x033F)
- ("COMBINING GRAVE TONE MARK" #x0340)
- ("COMBINING ACUTE TONE MARK" #x0341)
- ("COMBINING GREEK PERISPOMENI" #x0342)
- ("COMBINING GREEK KORONIS" #x0343)
- ("COMBINING GREEK DIALYTIKA TONOS" #x0344)
- ("COMBINING GREEK YPOGEGRAMMENI" #x0345)
- ("COMBINING BRIDGE ABOVE" #x0346)
- ("COMBINING EQUALS SIGN BELOW" #x0347)
- ("COMBINING DOUBLE VERTICAL LINE BELOW" #x0348)
- ("COMBINING LEFT ANGLE BELOW" #x0349)
- ("COMBINING NOT TILDE ABOVE" #x034A)
- ("COMBINING HOMOTHETIC ABOVE" #x034B)
- ("COMBINING ALMOST EQUAL TO ABOVE" #x034C)
- ("COMBINING LEFT RIGHT ARROW BELOW" #x034D)
- ("COMBINING UPWARDS ARROW BELOW" #x034E)
- ("COMBINING GRAPHEME JOINER" #x034F)
- ("COMBINING DOUBLE TILDE" #x0360)
- ("COMBINING DOUBLE INVERTED BREVE" #x0361)
- ("COMBINING DOUBLE RIGHTWARDS ARROW BELOW" #x0362)
- ("COMBINING LATIN SMALL LETTER A" #x0363)
- ("COMBINING LATIN SMALL LETTER E" #x0364)
- ("COMBINING LATIN SMALL LETTER I" #x0365)
- ("COMBINING LATIN SMALL LETTER O" #x0366)
- ("COMBINING LATIN SMALL LETTER U" #x0367)
- ("COMBINING LATIN SMALL LETTER C" #x0368)
- ("COMBINING LATIN SMALL LETTER D" #x0369)
- ("COMBINING LATIN SMALL LETTER H" #x036A)
- ("COMBINING LATIN SMALL LETTER M" #x036B)
- ("COMBINING LATIN SMALL LETTER R" #x036C)
- ("COMBINING LATIN SMALL LETTER T" #x036D)
- ("COMBINING LATIN SMALL LETTER V" #x036E)
- ("COMBINING LATIN SMALL LETTER X" #x036F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'greek-and-coptic
- '(("GREEK NUMERAL SIGN" #x0374)
- ("GREEK LOWER NUMERAL SIGN" #x0375)
- ("GREEK YPOGEGRAMMENI" #x037A)
- ("GREEK QUESTION MARK" #x037E)
- ("GREEK TONOS" #x0384)
- ("GREEK DIALYTIKA TONOS" #x0385)
- ("GREEK CAPITAL LETTER ALPHA WITH TONOS" #x0386)
- ("GREEK ANO TELEIA" #x0387)
- ("GREEK CAPITAL LETTER EPSILON WITH TONOS" #x0388)
- ("GREEK CAPITAL LETTER ETA WITH TONOS" #x0389)
- ("GREEK CAPITAL LETTER IOTA WITH TONOS" #x038A)
- ("GREEK CAPITAL LETTER OMICRON WITH TONOS" #x038C)
- ("GREEK CAPITAL LETTER UPSILON WITH TONOS" #x038E)
- ("GREEK CAPITAL LETTER OMEGA WITH TONOS" #x038F)
- ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS" #x0390)
- ("GREEK CAPITAL LETTER ALPHA" #x0391)
- ("GREEK CAPITAL LETTER BETA" #x0392)
- ("GREEK CAPITAL LETTER GAMMA" #x0393)
- ("GREEK CAPITAL LETTER DELTA" #x0394)
- ("GREEK CAPITAL LETTER EPSILON" #x0395)
- ("GREEK CAPITAL LETTER ZETA" #x0396)
- ("GREEK CAPITAL LETTER ETA" #x0397)
- ("GREEK CAPITAL LETTER THETA" #x0398)
- ("GREEK CAPITAL LETTER IOTA" #x0399)
- ("GREEK CAPITAL LETTER KAPPA" #x039A)
- ("GREEK CAPITAL LETTER LAMDA" #x039B)
- ("GREEK CAPITAL LETTER MU" #x039C)
- ("GREEK CAPITAL LETTER NU" #x039D)
- ("GREEK CAPITAL LETTER XI" #x039E)
- ("GREEK CAPITAL LETTER OMICRON" #x039F)
- ("GREEK CAPITAL LETTER PI" #x03A0)
- ("GREEK CAPITAL LETTER RHO" #x03A1)
- ("GREEK CAPITAL LETTER SIGMA" #x03A3)
- ("GREEK CAPITAL LETTER TAU" #x03A4)
- ("GREEK CAPITAL LETTER UPSILON" #x03A5)
- ("GREEK CAPITAL LETTER PHI" #x03A6)
- ("GREEK CAPITAL LETTER CHI" #x03A7)
- ("GREEK CAPITAL LETTER PSI" #x03A8)
- ("GREEK CAPITAL LETTER OMEGA" #x03A9)
- ("GREEK CAPITAL LETTER IOTA WITH DIALYTIKA" #x03AA)
- ("GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA" #x03AB)
- ("GREEK SMALL LETTER ALPHA WITH TONOS" #x03AC)
- ("GREEK SMALL LETTER EPSILON WITH TONOS" #x03AD)
- ("GREEK SMALL LETTER ETA WITH TONOS" #x03AE)
- ("GREEK SMALL LETTER IOTA WITH TONOS" #x03AF)
- ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS" #x03B0)
- ("GREEK SMALL LETTER ALPHA" #x03B1)
- ("GREEK SMALL LETTER BETA" #x03B2)
- ("GREEK SMALL LETTER GAMMA" #x03B3)
- ("GREEK SMALL LETTER DELTA" #x03B4)
- ("GREEK SMALL LETTER EPSILON" #x03B5)
- ("GREEK SMALL LETTER ZETA" #x03B6)
- ("GREEK SMALL LETTER ETA" #x03B7)
- ("GREEK SMALL LETTER THETA" #x03B8)
- ("GREEK SMALL LETTER IOTA" #x03B9)
- ("GREEK SMALL LETTER KAPPA" #x03BA)
- ("GREEK SMALL LETTER LAMDA" #x03BB)
- ("GREEK SMALL LETTER MU" #x03BC)
- ("GREEK SMALL LETTER NU" #x03BD)
- ("GREEK SMALL LETTER XI" #x03BE)
- ("GREEK SMALL LETTER OMICRON" #x03BF)
- ("GREEK SMALL LETTER PI" #x03C0)
- ("GREEK SMALL LETTER RHO" #x03C1)
- ("GREEK SMALL LETTER FINAL SIGMA" #x03C2)
- ("GREEK SMALL LETTER SIGMA" #x03C3)
- ("GREEK SMALL LETTER TAU" #x03C4)
- ("GREEK SMALL LETTER UPSILON" #x03C5)
- ("GREEK SMALL LETTER PHI" #x03C6)
- ("GREEK SMALL LETTER CHI" #x03C7)
- ("GREEK SMALL LETTER PSI" #x03C8)
- ("GREEK SMALL LETTER OMEGA" #x03C9)
- ("GREEK SMALL LETTER IOTA WITH DIALYTIKA" #x03CA)
- ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA" #x03CB)
- ("GREEK SMALL LETTER OMICRON WITH TONOS" #x03CC)
- ("GREEK SMALL LETTER UPSILON WITH TONOS" #x03CD)
- ("GREEK SMALL LETTER OMEGA WITH TONOS" #x03CE)
- ("GREEK BETA SYMBOL" #x03D0)
- ("GREEK THETA SYMBOL" #x03D1)
- ("GREEK UPSILON WITH HOOK SYMBOL" #x03D2)
- ("GREEK UPSILON WITH ACUTE AND HOOK SYMBOL" #x03D3)
- ("GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL" #x03D4)
- ("GREEK PHI SYMBOL" #x03D5)
- ("GREEK PI SYMBOL" #x03D6)
- ("GREEK KAI SYMBOL" #x03D7)
- ("GREEK LETTER ARCHAIC KOPPA" #x03D8)
- ("GREEK SMALL LETTER ARCHAIC KOPPA" #x03D9)
- ("GREEK LETTER STIGMA" #x03DA)
- ("GREEK SMALL LETTER STIGMA" #x03DB)
- ("GREEK LETTER DIGAMMA" #x03DC)
- ("GREEK SMALL LETTER DIGAMMA" #x03DD)
- ("GREEK LETTER KOPPA" #x03DE)
- ("GREEK SMALL LETTER KOPPA" #x03DF)
- ("GREEK LETTER SAMPI" #x03E0)
- ("GREEK SMALL LETTER SAMPI" #x03E1)
- ("COPTIC CAPITAL LETTER SHEI" #x03E2)
- ("COPTIC SMALL LETTER SHEI" #x03E3)
- ("COPTIC CAPITAL LETTER FEI" #x03E4)
- ("COPTIC SMALL LETTER FEI" #x03E5)
- ("COPTIC CAPITAL LETTER KHEI" #x03E6)
- ("COPTIC SMALL LETTER KHEI" #x03E7)
- ("COPTIC CAPITAL LETTER HORI" #x03E8)
- ("COPTIC SMALL LETTER HORI" #x03E9)
- ("COPTIC CAPITAL LETTER GANGIA" #x03EA)
- ("COPTIC SMALL LETTER GANGIA" #x03EB)
- ("COPTIC CAPITAL LETTER SHIMA" #x03EC)
- ("COPTIC SMALL LETTER SHIMA" #x03ED)
- ("COPTIC CAPITAL LETTER DEI" #x03EE)
- ("COPTIC SMALL LETTER DEI" #x03EF)
- ("GREEK KAPPA SYMBOL" #x03F0)
- ("GREEK RHO SYMBOL" #x03F1)
- ("GREEK LUNATE SIGMA SYMBOL" #x03F2)
- ("GREEK LETTER YOT" #x03F3)
- ("GREEK CAPITAL THETA SYMBOL" #x03F4)
- ("GREEK LUNATE EPSILON SYMBOL" #x03F5)
- ("GREEK REVERSED LUNATE EPSILON SYMBOL" #x03F6)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cyrillic
- '(("CYRILLIC CAPITAL LETTER IE WITH GRAVE" #x0400)
- ("CYRILLIC CAPITAL LETTER IO" #x0401)
- ("CYRILLIC CAPITAL LETTER DJE" #x0402)
- ("CYRILLIC CAPITAL LETTER GJE" #x0403)
- ("CYRILLIC CAPITAL LETTER UKRAINIAN IE" #x0404)
- ("CYRILLIC CAPITAL LETTER DZE" #x0405)
- ("CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I" #x0406)
- ("CYRILLIC CAPITAL LETTER YI" #x0407)
- ("CYRILLIC CAPITAL LETTER JE" #x0408)
- ("CYRILLIC CAPITAL LETTER LJE" #x0409)
- ("CYRILLIC CAPITAL LETTER NJE" #x040A)
- ("CYRILLIC CAPITAL LETTER TSHE" #x040B)
- ("CYRILLIC CAPITAL LETTER KJE" #x040C)
- ("CYRILLIC CAPITAL LETTER I WITH GRAVE" #x040D)
- ("CYRILLIC CAPITAL LETTER SHORT U" #x040E)
- ("CYRILLIC CAPITAL LETTER DZHE" #x040F)
- ("CYRILLIC CAPITAL LETTER A" #x0410)
- ("CYRILLIC CAPITAL LETTER BE" #x0411)
- ("CYRILLIC CAPITAL LETTER VE" #x0412)
- ("CYRILLIC CAPITAL LETTER GHE" #x0413)
- ("CYRILLIC CAPITAL LETTER DE" #x0414)
- ("CYRILLIC CAPITAL LETTER IE" #x0415)
- ("CYRILLIC CAPITAL LETTER ZHE" #x0416)
- ("CYRILLIC CAPITAL LETTER ZE" #x0417)
- ("CYRILLIC CAPITAL LETTER I" #x0418)
- ("CYRILLIC CAPITAL LETTER SHORT I" #x0419)
- ("CYRILLIC CAPITAL LETTER KA" #x041A)
- ("CYRILLIC CAPITAL LETTER EL" #x041B)
- ("CYRILLIC CAPITAL LETTER EM" #x041C)
- ("CYRILLIC CAPITAL LETTER EN" #x041D)
- ("CYRILLIC CAPITAL LETTER O" #x041E)
- ("CYRILLIC CAPITAL LETTER PE" #x041F)
- ("CYRILLIC CAPITAL LETTER ER" #x0420)
- ("CYRILLIC CAPITAL LETTER ES" #x0421)
- ("CYRILLIC CAPITAL LETTER TE" #x0422)
- ("CYRILLIC CAPITAL LETTER U" #x0423)
- ("CYRILLIC CAPITAL LETTER EF" #x0424)
- ("CYRILLIC CAPITAL LETTER HA" #x0425)
- ("CYRILLIC CAPITAL LETTER TSE" #x0426)
- ("CYRILLIC CAPITAL LETTER CHE" #x0427)
- ("CYRILLIC CAPITAL LETTER SHA" #x0428)
- ("CYRILLIC CAPITAL LETTER SHCHA" #x0429)
- ("CYRILLIC CAPITAL LETTER HARD SIGN" #x042A)
- ("CYRILLIC CAPITAL LETTER YERU" #x042B)
- ("CYRILLIC CAPITAL LETTER SOFT SIGN" #x042C)
- ("CYRILLIC CAPITAL LETTER E" #x042D)
- ("CYRILLIC CAPITAL LETTER YU" #x042E)
- ("CYRILLIC CAPITAL LETTER YA" #x042F)
- ("CYRILLIC SMALL LETTER A" #x0430)
- ("CYRILLIC SMALL LETTER BE" #x0431)
- ("CYRILLIC SMALL LETTER VE" #x0432)
- ("CYRILLIC SMALL LETTER GHE" #x0433)
- ("CYRILLIC SMALL LETTER DE" #x0434)
- ("CYRILLIC SMALL LETTER IE" #x0435)
- ("CYRILLIC SMALL LETTER ZHE" #x0436)
- ("CYRILLIC SMALL LETTER ZE" #x0437)
- ("CYRILLIC SMALL LETTER I" #x0438)
- ("CYRILLIC SMALL LETTER SHORT I" #x0439)
- ("CYRILLIC SMALL LETTER KA" #x043A)
- ("CYRILLIC SMALL LETTER EL" #x043B)
- ("CYRILLIC SMALL LETTER EM" #x043C)
- ("CYRILLIC SMALL LETTER EN" #x043D)
- ("CYRILLIC SMALL LETTER O" #x043E)
- ("CYRILLIC SMALL LETTER PE" #x043F)
- ("CYRILLIC SMALL LETTER ER" #x0440)
- ("CYRILLIC SMALL LETTER ES" #x0441)
- ("CYRILLIC SMALL LETTER TE" #x0442)
- ("CYRILLIC SMALL LETTER U" #x0443)
- ("CYRILLIC SMALL LETTER EF" #x0444)
- ("CYRILLIC SMALL LETTER HA" #x0445)
- ("CYRILLIC SMALL LETTER TSE" #x0446)
- ("CYRILLIC SMALL LETTER CHE" #x0447)
- ("CYRILLIC SMALL LETTER SHA" #x0448)
- ("CYRILLIC SMALL LETTER SHCHA" #x0449)
- ("CYRILLIC SMALL LETTER HARD SIGN" #x044A)
- ("CYRILLIC SMALL LETTER YERU" #x044B)
- ("CYRILLIC SMALL LETTER SOFT SIGN" #x044C)
- ("CYRILLIC SMALL LETTER E" #x044D)
- ("CYRILLIC SMALL LETTER YU" #x044E)
- ("CYRILLIC SMALL LETTER YA" #x044F)
- ("CYRILLIC SMALL LETTER IE WITH GRAVE" #x0450)
- ("CYRILLIC SMALL LETTER IO" #x0451)
- ("CYRILLIC SMALL LETTER DJE" #x0452)
- ("CYRILLIC SMALL LETTER GJE" #x0453)
- ("CYRILLIC SMALL LETTER UKRAINIAN IE" #x0454)
- ("CYRILLIC SMALL LETTER DZE" #x0455)
- ("CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I" #x0456)
- ("CYRILLIC SMALL LETTER YI" #x0457)
- ("CYRILLIC SMALL LETTER JE" #x0458)
- ("CYRILLIC SMALL LETTER LJE" #x0459)
- ("CYRILLIC SMALL LETTER NJE" #x045A)
- ("CYRILLIC SMALL LETTER TSHE" #x045B)
- ("CYRILLIC SMALL LETTER KJE" #x045C)
- ("CYRILLIC SMALL LETTER I WITH GRAVE" #x045D)
- ("CYRILLIC SMALL LETTER SHORT U" #x045E)
- ("CYRILLIC SMALL LETTER DZHE" #x045F)
- ("CYRILLIC CAPITAL LETTER OMEGA" #x0460)
- ("CYRILLIC SMALL LETTER OMEGA" #x0461)
- ("CYRILLIC CAPITAL LETTER YAT" #x0462)
- ("CYRILLIC SMALL LETTER YAT" #x0463)
- ("CYRILLIC CAPITAL LETTER IOTIFIED E" #x0464)
- ("CYRILLIC SMALL LETTER IOTIFIED E" #x0465)
- ("CYRILLIC CAPITAL LETTER LITTLE YUS" #x0466)
- ("CYRILLIC SMALL LETTER LITTLE YUS" #x0467)
- ("CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS" #x0468)
- ("CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS" #x0469)
- ("CYRILLIC CAPITAL LETTER BIG YUS" #x046A)
- ("CYRILLIC SMALL LETTER BIG YUS" #x046B)
- ("CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS" #x046C)
- ("CYRILLIC SMALL LETTER IOTIFIED BIG YUS" #x046D)
- ("CYRILLIC CAPITAL LETTER KSI" #x046E)
- ("CYRILLIC SMALL LETTER KSI" #x046F)
- ("CYRILLIC CAPITAL LETTER PSI" #x0470)
- ("CYRILLIC SMALL LETTER PSI" #x0471)
- ("CYRILLIC CAPITAL LETTER FITA" #x0472)
- ("CYRILLIC SMALL LETTER FITA" #x0473)
- ("CYRILLIC CAPITAL LETTER IZHITSA" #x0474)
- ("CYRILLIC SMALL LETTER IZHITSA" #x0475)
- ("CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0476)
- ("CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0477)
- ("CYRILLIC CAPITAL LETTER UK" #x0478)
- ("CYRILLIC SMALL LETTER UK" #x0479)
- ("CYRILLIC CAPITAL LETTER ROUND OMEGA" #x047A)
- ("CYRILLIC SMALL LETTER ROUND OMEGA" #x047B)
- ("CYRILLIC CAPITAL LETTER OMEGA WITH TITLO" #x047C)
- ("CYRILLIC SMALL LETTER OMEGA WITH TITLO" #x047D)
- ("CYRILLIC CAPITAL LETTER OT" #x047E)
- ("CYRILLIC SMALL LETTER OT" #x047F)
- ("CYRILLIC CAPITAL LETTER KOPPA" #x0480)
- ("CYRILLIC SMALL LETTER KOPPA" #x0481)
- ("CYRILLIC THOUSANDS SIGN" #x0482)
- ("COMBINING CYRILLIC TITLO" #x0483)
- ("COMBINING CYRILLIC PALATALIZATION" #x0484)
- ("COMBINING CYRILLIC DASIA PNEUMATA" #x0485)
- ("COMBINING CYRILLIC PSILI PNEUMATA" #x0486)
- ("COMBINING CYRILLIC HUNDRED THOUSANDS SIGN" #x0488)
- ("COMBINING CYRILLIC MILLIONS SIGN" #x0489)
- ("CYRILLIC CAPITAL LETTER SHORT I WITH TAIL" #x048A)
- ("CYRILLIC SMALL LETTER SHORT I WITH TAIL" #x048B)
- ("CYRILLIC CAPITAL LETTER SEMISOFT SIGN" #x048C)
- ("CYRILLIC SMALL LETTER SEMISOFT SIGN" #x048D)
- ("CYRILLIC CAPITAL LETTER ER WITH TICK" #x048E)
- ("CYRILLIC SMALL LETTER ER WITH TICK" #x048F)
- ("CYRILLIC CAPITAL LETTER GHE WITH UPTURN" #x0490)
- ("CYRILLIC SMALL LETTER GHE WITH UPTURN" #x0491)
- ("CYRILLIC CAPITAL LETTER GHE WITH STROKE" #x0492)
- ("CYRILLIC SMALL LETTER GHE WITH STROKE" #x0493)
- ("CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK" #x0494)
- ("CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK" #x0495)
- ("CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER" #x0496)
- ("CYRILLIC SMALL LETTER ZHE WITH DESCENDER" #x0497)
- ("CYRILLIC CAPITAL LETTER ZE WITH DESCENDER" #x0498)
- ("CYRILLIC SMALL LETTER ZE WITH DESCENDER" #x0499)
- ("CYRILLIC CAPITAL LETTER KA WITH DESCENDER" #x049A)
- ("CYRILLIC SMALL LETTER KA WITH DESCENDER" #x049B)
- ("CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE" #x049C)
- ("CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE" #x049D)
- ("CYRILLIC CAPITAL LETTER KA WITH STROKE" #x049E)
- ("CYRILLIC SMALL LETTER KA WITH STROKE" #x049F)
- ("CYRILLIC CAPITAL LETTER BASHKIR KA" #x04A0)
- ("CYRILLIC SMALL LETTER BASHKIR KA" #x04A1)
- ("CYRILLIC CAPITAL LETTER EN WITH DESCENDER" #x04A2)
- ("CYRILLIC SMALL LETTER EN WITH DESCENDER" #x04A3)
- ("CYRILLIC CAPITAL LIGATURE EN GHE" #x04A4)
- ("CYRILLIC SMALL LIGATURE EN GHE" #x04A5)
- ("CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK" #x04A6)
- ("CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK" #x04A7)
- ("CYRILLIC CAPITAL LETTER ABKHASIAN HA" #x04A8)
- ("CYRILLIC SMALL LETTER ABKHASIAN HA" #x04A9)
- ("CYRILLIC CAPITAL LETTER ES WITH DESCENDER" #x04AA)
- ("CYRILLIC SMALL LETTER ES WITH DESCENDER" #x04AB)
- ("CYRILLIC CAPITAL LETTER TE WITH DESCENDER" #x04AC)
- ("CYRILLIC SMALL LETTER TE WITH DESCENDER" #x04AD)
- ("CYRILLIC CAPITAL LETTER STRAIGHT U" #x04AE)
- ("CYRILLIC SMALL LETTER STRAIGHT U" #x04AF)
- ("CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE" #x04B0)
- ("CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE" #x04B1)
- ("CYRILLIC CAPITAL LETTER HA WITH DESCENDER" #x04B2)
- ("CYRILLIC SMALL LETTER HA WITH DESCENDER" #x04B3)
- ("CYRILLIC CAPITAL LIGATURE TE TSE" #x04B4)
- ("CYRILLIC SMALL LIGATURE TE TSE" #x04B5)
- ("CYRILLIC CAPITAL LETTER CHE WITH DESCENDER" #x04B6)
- ("CYRILLIC SMALL LETTER CHE WITH DESCENDER" #x04B7)
- ("CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE" #x04B8)
- ("CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE" #x04B9)
- ("CYRILLIC CAPITAL LETTER SHHA" #x04BA)
- ("CYRILLIC SMALL LETTER SHHA" #x04BB)
- ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE" #x04BC)
- ("CYRILLIC SMALL LETTER ABKHASIAN CHE" #x04BD)
- ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BE)
- ("CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BF)
- ("CYRILLIC LETTER PALOCHKA" #x04C0)
- ("CYRILLIC CAPITAL LETTER ZHE WITH BREVE" #x04C1)
- ("CYRILLIC SMALL LETTER ZHE WITH BREVE" #x04C2)
- ("CYRILLIC CAPITAL LETTER KA WITH HOOK" #x04C3)
- ("CYRILLIC SMALL LETTER KA WITH HOOK" #x04C4)
- ("CYRILLIC CAPITAL LETTER EL WITH TAIL" #x04C5)
- ("CYRILLIC SMALL LETTER EL WITH TAIL" #x04C6)
- ("CYRILLIC CAPITAL LETTER EN WITH HOOK" #x04C7)
- ("CYRILLIC SMALL LETTER EN WITH HOOK" #x04C8)
- ("CYRILLIC CAPITAL LETTER EN WITH TAIL" #x04C9)
- ("CYRILLIC SMALL LETTER EN WITH TAIL" #x04CA)
- ("CYRILLIC CAPITAL LETTER KHAKASSIAN CHE" #x04CB)
- ("CYRILLIC SMALL LETTER KHAKASSIAN CHE" #x04CC)
- ("CYRILLIC CAPITAL LETTER EM WITH TAIL" #x04CD)
- ("CYRILLIC SMALL LETTER EM WITH TAIL" #x04CE)
- ("CYRILLIC CAPITAL LETTER A WITH BREVE" #x04D0)
- ("CYRILLIC SMALL LETTER A WITH BREVE" #x04D1)
- ("CYRILLIC CAPITAL LETTER A WITH DIAERESIS" #x04D2)
- ("CYRILLIC SMALL LETTER A WITH DIAERESIS" #x04D3)
- ("CYRILLIC CAPITAL LIGATURE A IE" #x04D4)
- ("CYRILLIC SMALL LIGATURE A IE" #x04D5)
- ("CYRILLIC CAPITAL LETTER IE WITH BREVE" #x04D6)
- ("CYRILLIC SMALL LETTER IE WITH BREVE" #x04D7)
- ("CYRILLIC CAPITAL LETTER SCHWA" #x04D8)
- ("CYRILLIC SMALL LETTER SCHWA" #x04D9)
- ("CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS" #x04DA)
- ("CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS" #x04DB)
- ("CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS" #x04DC)
- ("CYRILLIC SMALL LETTER ZHE WITH DIAERESIS" #x04DD)
- ("CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS" #x04DE)
- ("CYRILLIC SMALL LETTER ZE WITH DIAERESIS" #x04DF)
- ("CYRILLIC CAPITAL LETTER ABKHASIAN DZE" #x04E0)
- ("CYRILLIC SMALL LETTER ABKHASIAN DZE" #x04E1)
- ("CYRILLIC CAPITAL LETTER I WITH MACRON" #x04E2)
- ("CYRILLIC SMALL LETTER I WITH MACRON" #x04E3)
- ("CYRILLIC CAPITAL LETTER I WITH DIAERESIS" #x04E4)
- ("CYRILLIC SMALL LETTER I WITH DIAERESIS" #x04E5)
- ("CYRILLIC CAPITAL LETTER O WITH DIAERESIS" #x04E6)
- ("CYRILLIC SMALL LETTER O WITH DIAERESIS" #x04E7)
- ("CYRILLIC CAPITAL LETTER BARRED O" #x04E8)
- ("CYRILLIC SMALL LETTER BARRED O" #x04E9)
- ("CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS" #x04EA)
- ("CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS" #x04EB)
- ("CYRILLIC CAPITAL LETTER E WITH DIAERESIS" #x04EC)
- ("CYRILLIC SMALL LETTER E WITH DIAERESIS" #x04ED)
- ("CYRILLIC CAPITAL LETTER U WITH MACRON" #x04EE)
- ("CYRILLIC SMALL LETTER U WITH MACRON" #x04EF)
- ("CYRILLIC CAPITAL LETTER U WITH DIAERESIS" #x04F0)
- ("CYRILLIC SMALL LETTER U WITH DIAERESIS" #x04F1)
- ("CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE" #x04F2)
- ("CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE" #x04F3)
- ("CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS" #x04F4)
- ("CYRILLIC SMALL LETTER CHE WITH DIAERESIS" #x04F5)
- ("CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS" #x04F8)
- ("CYRILLIC SMALL LETTER YERU WITH DIAERESIS" #x04F9)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cyrillic-supplementary
- '(("CYRILLIC CAPITAL LETTER KOMI DE" #x0500)
- ("CYRILLIC SMALL LETTER KOMI DE" #x0501)
- ("CYRILLIC CAPITAL LETTER KOMI DJE" #x0502)
- ("CYRILLIC SMALL LETTER KOMI DJE" #x0503)
- ("CYRILLIC CAPITAL LETTER KOMI ZJE" #x0504)
- ("CYRILLIC SMALL LETTER KOMI ZJE" #x0505)
- ("CYRILLIC CAPITAL LETTER KOMI DZJE" #x0506)
- ("CYRILLIC SMALL LETTER KOMI DZJE" #x0507)
- ("CYRILLIC CAPITAL LETTER KOMI LJE" #x0508)
- ("CYRILLIC SMALL LETTER KOMI LJE" #x0509)
- ("CYRILLIC CAPITAL LETTER KOMI NJE" #x050A)
- ("CYRILLIC SMALL LETTER KOMI NJE" #x050B)
- ("CYRILLIC CAPITAL LETTER KOMI SJE" #x050C)
- ("CYRILLIC SMALL LETTER KOMI SJE" #x050D)
- ("CYRILLIC CAPITAL LETTER KOMI TJE" #x050E)
- ("CYRILLIC SMALL LETTER KOMI TJE" #x050F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'armenian
- '(("ARMENIAN CAPITAL LETTER AYB" #x0531)
- ("ARMENIAN CAPITAL LETTER BEN" #x0532)
- ("ARMENIAN CAPITAL LETTER GIM" #x0533)
- ("ARMENIAN CAPITAL LETTER DA" #x0534)
- ("ARMENIAN CAPITAL LETTER ECH" #x0535)
- ("ARMENIAN CAPITAL LETTER ZA" #x0536)
- ("ARMENIAN CAPITAL LETTER EH" #x0537)
- ("ARMENIAN CAPITAL LETTER ET" #x0538)
- ("ARMENIAN CAPITAL LETTER TO" #x0539)
- ("ARMENIAN CAPITAL LETTER ZHE" #x053A)
- ("ARMENIAN CAPITAL LETTER INI" #x053B)
- ("ARMENIAN CAPITAL LETTER LIWN" #x053C)
- ("ARMENIAN CAPITAL LETTER XEH" #x053D)
- ("ARMENIAN CAPITAL LETTER CA" #x053E)
- ("ARMENIAN CAPITAL LETTER KEN" #x053F)
- ("ARMENIAN CAPITAL LETTER HO" #x0540)
- ("ARMENIAN CAPITAL LETTER JA" #x0541)
- ("ARMENIAN CAPITAL LETTER GHAD" #x0542)
- ("ARMENIAN CAPITAL LETTER CHEH" #x0543)
- ("ARMENIAN CAPITAL LETTER MEN" #x0544)
- ("ARMENIAN CAPITAL LETTER YI" #x0545)
- ("ARMENIAN CAPITAL LETTER NOW" #x0546)
- ("ARMENIAN CAPITAL LETTER SHA" #x0547)
- ("ARMENIAN CAPITAL LETTER VO" #x0548)
- ("ARMENIAN CAPITAL LETTER CHA" #x0549)
- ("ARMENIAN CAPITAL LETTER PEH" #x054A)
- ("ARMENIAN CAPITAL LETTER JHEH" #x054B)
- ("ARMENIAN CAPITAL LETTER RA" #x054C)
- ("ARMENIAN CAPITAL LETTER SEH" #x054D)
- ("ARMENIAN CAPITAL LETTER VEW" #x054E)
- ("ARMENIAN CAPITAL LETTER TIWN" #x054F)
- ("ARMENIAN CAPITAL LETTER REH" #x0550)
- ("ARMENIAN CAPITAL LETTER CO" #x0551)
- ("ARMENIAN CAPITAL LETTER YIWN" #x0552)
- ("ARMENIAN CAPITAL LETTER PIWR" #x0553)
- ("ARMENIAN CAPITAL LETTER KEH" #x0554)
- ("ARMENIAN CAPITAL LETTER OH" #x0555)
- ("ARMENIAN CAPITAL LETTER FEH" #x0556)
- ("ARMENIAN MODIFIER LETTER LEFT HALF RING" #x0559)
- ("ARMENIAN APOSTROPHE" #x055A)
- ("ARMENIAN EMPHASIS MARK" #x055B)
- ("ARMENIAN EXCLAMATION MARK" #x055C)
- ("ARMENIAN COMMA" #x055D)
- ("ARMENIAN QUESTION MARK" #x055E)
- ("ARMENIAN ABBREVIATION MARK" #x055F)
- ("ARMENIAN SMALL LETTER AYB" #x0561)
- ("ARMENIAN SMALL LETTER BEN" #x0562)
- ("ARMENIAN SMALL LETTER GIM" #x0563)
- ("ARMENIAN SMALL LETTER DA" #x0564)
- ("ARMENIAN SMALL LETTER ECH" #x0565)
- ("ARMENIAN SMALL LETTER ZA" #x0566)
- ("ARMENIAN SMALL LETTER EH" #x0567)
- ("ARMENIAN SMALL LETTER ET" #x0568)
- ("ARMENIAN SMALL LETTER TO" #x0569)
- ("ARMENIAN SMALL LETTER ZHE" #x056A)
- ("ARMENIAN SMALL LETTER INI" #x056B)
- ("ARMENIAN SMALL LETTER LIWN" #x056C)
- ("ARMENIAN SMALL LETTER XEH" #x056D)
- ("ARMENIAN SMALL LETTER CA" #x056E)
- ("ARMENIAN SMALL LETTER KEN" #x056F)
- ("ARMENIAN SMALL LETTER HO" #x0570)
- ("ARMENIAN SMALL LETTER JA" #x0571)
- ("ARMENIAN SMALL LETTER GHAD" #x0572)
- ("ARMENIAN SMALL LETTER CHEH" #x0573)
- ("ARMENIAN SMALL LETTER MEN" #x0574)
- ("ARMENIAN SMALL LETTER YI" #x0575)
- ("ARMENIAN SMALL LETTER NOW" #x0576)
- ("ARMENIAN SMALL LETTER SHA" #x0577)
- ("ARMENIAN SMALL LETTER VO" #x0578)
- ("ARMENIAN SMALL LETTER CHA" #x0579)
- ("ARMENIAN SMALL LETTER PEH" #x057A)
- ("ARMENIAN SMALL LETTER JHEH" #x057B)
- ("ARMENIAN SMALL LETTER RA" #x057C)
- ("ARMENIAN SMALL LETTER SEH" #x057D)
- ("ARMENIAN SMALL LETTER VEW" #x057E)
- ("ARMENIAN SMALL LETTER TIWN" #x057F)
- ("ARMENIAN SMALL LETTER REH" #x0580)
- ("ARMENIAN SMALL LETTER CO" #x0581)
- ("ARMENIAN SMALL LETTER YIWN" #x0582)
- ("ARMENIAN SMALL LETTER PIWR" #x0583)
- ("ARMENIAN SMALL LETTER KEH" #x0584)
- ("ARMENIAN SMALL LETTER OH" #x0585)
- ("ARMENIAN SMALL LETTER FEH" #x0586)
- ("ARMENIAN SMALL LIGATURE ECH YIWN" #x0587)
- ("ARMENIAN FULL STOP" #x0589)
- ("ARMENIAN HYPHEN" #x058A)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'hebrew
- '(("HEBREW ACCENT ETNAHTA" #x0591)
- ("HEBREW ACCENT SEGOL" #x0592)
- ("HEBREW ACCENT SHALSHELET" #x0593)
- ("HEBREW ACCENT ZAQEF QATAN" #x0594)
- ("HEBREW ACCENT ZAQEF GADOL" #x0595)
- ("HEBREW ACCENT TIPEHA" #x0596)
- ("HEBREW ACCENT REVIA" #x0597)
- ("HEBREW ACCENT ZARQA" #x0598)
- ("HEBREW ACCENT PASHTA" #x0599)
- ("HEBREW ACCENT YETIV" #x059A)
- ("HEBREW ACCENT TEVIR" #x059B)
- ("HEBREW ACCENT GERESH" #x059C)
- ("HEBREW ACCENT GERESH MUQDAM" #x059D)
- ("HEBREW ACCENT GERSHAYIM" #x059E)
- ("HEBREW ACCENT QARNEY PARA" #x059F)
- ("HEBREW ACCENT TELISHA GEDOLA" #x05A0)
- ("HEBREW ACCENT PAZER" #x05A1)
- ("HEBREW ACCENT MUNAH" #x05A3)
- ("HEBREW ACCENT MAHAPAKH" #x05A4)
- ("HEBREW ACCENT MERKHA" #x05A5)
- ("HEBREW ACCENT MERKHA KEFULA" #x05A6)
- ("HEBREW ACCENT DARGA" #x05A7)
- ("HEBREW ACCENT QADMA" #x05A8)
- ("HEBREW ACCENT TELISHA QETANA" #x05A9)
- ("HEBREW ACCENT YERAH BEN YOMO" #x05AA)
- ("HEBREW ACCENT OLE" #x05AB)
- ("HEBREW ACCENT ILUY" #x05AC)
- ("HEBREW ACCENT DEHI" #x05AD)
- ("HEBREW ACCENT ZINOR" #x05AE)
- ("HEBREW MARK MASORA CIRCLE" #x05AF)
- ("HEBREW POINT SHEVA" #x05B0)
- ("HEBREW POINT HATAF SEGOL" #x05B1)
- ("HEBREW POINT HATAF PATAH" #x05B2)
- ("HEBREW POINT HATAF QAMATS" #x05B3)
- ("HEBREW POINT HIRIQ" #x05B4)
- ("HEBREW POINT TSERE" #x05B5)
- ("HEBREW POINT SEGOL" #x05B6)
- ("HEBREW POINT PATAH" #x05B7)
- ("HEBREW POINT QAMATS" #x05B8)
- ("HEBREW POINT HOLAM" #x05B9)
- ("HEBREW POINT QUBUTS" #x05BB)
- ("HEBREW POINT DAGESH OR MAPIQ" #x05BC)
- ("HEBREW POINT METEG" #x05BD)
- ("HEBREW PUNCTUATION MAQAF" #x05BE)
- ("HEBREW POINT RAFE" #x05BF)
- ("HEBREW PUNCTUATION PASEQ" #x05C0)
- ("HEBREW POINT SHIN DOT" #x05C1)
- ("HEBREW POINT SIN DOT" #x05C2)
- ("HEBREW PUNCTUATION SOF PASUQ" #x05C3)
- ("HEBREW MARK UPPER DOT" #x05C4)
- ("HEBREW LETTER ALEF" #x05D0)
- ("HEBREW LETTER BET" #x05D1)
- ("HEBREW LETTER GIMEL" #x05D2)
- ("HEBREW LETTER DALET" #x05D3)
- ("HEBREW LETTER HE" #x05D4)
- ("HEBREW LETTER VAV" #x05D5)
- ("HEBREW LETTER ZAYIN" #x05D6)
- ("HEBREW LETTER HET" #x05D7)
- ("HEBREW LETTER TET" #x05D8)
- ("HEBREW LETTER YOD" #x05D9)
- ("HEBREW LETTER FINAL KAF" #x05DA)
- ("HEBREW LETTER KAF" #x05DB)
- ("HEBREW LETTER LAMED" #x05DC)
- ("HEBREW LETTER FINAL MEM" #x05DD)
- ("HEBREW LETTER MEM" #x05DE)
- ("HEBREW LETTER FINAL NUN" #x05DF)
- ("HEBREW LETTER NUN" #x05E0)
- ("HEBREW LETTER SAMEKH" #x05E1)
- ("HEBREW LETTER AYIN" #x05E2)
- ("HEBREW LETTER FINAL PE" #x05E3)
- ("HEBREW LETTER PE" #x05E4)
- ("HEBREW LETTER FINAL TSADI" #x05E5)
- ("HEBREW LETTER TSADI" #x05E6)
- ("HEBREW LETTER QOF" #x05E7)
- ("HEBREW LETTER RESH" #x05E8)
- ("HEBREW LETTER SHIN" #x05E9)
- ("HEBREW LETTER TAV" #x05EA)
- ("HEBREW LIGATURE YIDDISH DOUBLE VAV" #x05F0)
- ("HEBREW LIGATURE YIDDISH VAV YOD" #x05F1)
- ("HEBREW LIGATURE YIDDISH DOUBLE YOD" #x05F2)
- ("HEBREW PUNCTUATION GERESH" #x05F3)
- ("HEBREW PUNCTUATION GERSHAYIM" #x05F4)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'arabic
- '(("ARABIC COMMA" #x060C)
- ("ARABIC SEMICOLON" #x061B)
- ("ARABIC QUESTION MARK" #x061F)
- ("ARABIC LETTER HAMZA" #x0621)
- ("ARABIC LETTER ALEF WITH MADDA ABOVE" #x0622)
- ("ARABIC LETTER ALEF WITH HAMZA ABOVE" #x0623)
- ("ARABIC LETTER WAW WITH HAMZA ABOVE" #x0624)
- ("ARABIC LETTER ALEF WITH HAMZA BELOW" #x0625)
- ("ARABIC LETTER YEH WITH HAMZA ABOVE" #x0626)
- ("ARABIC LETTER ALEF" #x0627)
- ("ARABIC LETTER BEH" #x0628)
- ("ARABIC LETTER TEH MARBUTA" #x0629)
- ("ARABIC LETTER TEH" #x062A)
- ("ARABIC LETTER THEH" #x062B)
- ("ARABIC LETTER JEEM" #x062C)
- ("ARABIC LETTER HAH" #x062D)
- ("ARABIC LETTER KHAH" #x062E)
- ("ARABIC LETTER DAL" #x062F)
- ("ARABIC LETTER THAL" #x0630)
- ("ARABIC LETTER REH" #x0631)
- ("ARABIC LETTER ZAIN" #x0632)
- ("ARABIC LETTER SEEN" #x0633)
- ("ARABIC LETTER SHEEN" #x0634)
- ("ARABIC LETTER SAD" #x0635)
- ("ARABIC LETTER DAD" #x0636)
- ("ARABIC LETTER TAH" #x0637)
- ("ARABIC LETTER ZAH" #x0638)
- ("ARABIC LETTER AIN" #x0639)
- ("ARABIC LETTER GHAIN" #x063A)
- ("ARABIC TATWEEL" #x0640)
- ("ARABIC LETTER FEH" #x0641)
- ("ARABIC LETTER QAF" #x0642)
- ("ARABIC LETTER KAF" #x0643)
- ("ARABIC LETTER LAM" #x0644)
- ("ARABIC LETTER MEEM" #x0645)
- ("ARABIC LETTER NOON" #x0646)
- ("ARABIC LETTER HEH" #x0647)
- ("ARABIC LETTER WAW" #x0648)
- ("ARABIC LETTER ALEF MAKSURA" #x0649)
- ("ARABIC LETTER YEH" #x064A)
- ("ARABIC FATHATAN" #x064B)
- ("ARABIC DAMMATAN" #x064C)
- ("ARABIC KASRATAN" #x064D)
- ("ARABIC FATHA" #x064E)
- ("ARABIC DAMMA" #x064F)
- ("ARABIC KASRA" #x0650)
- ("ARABIC SHADDA" #x0651)
- ("ARABIC SUKUN" #x0652)
- ("ARABIC MADDAH ABOVE" #x0653)
- ("ARABIC HAMZA ABOVE" #x0654)
- ("ARABIC HAMZA BELOW" #x0655)
- ("ARABIC-INDIC DIGIT ZERO" #x0660)
- ("ARABIC-INDIC DIGIT ONE" #x0661)
- ("ARABIC-INDIC DIGIT TWO" #x0662)
- ("ARABIC-INDIC DIGIT THREE" #x0663)
- ("ARABIC-INDIC DIGIT FOUR" #x0664)
- ("ARABIC-INDIC DIGIT FIVE" #x0665)
- ("ARABIC-INDIC DIGIT SIX" #x0666)
- ("ARABIC-INDIC DIGIT SEVEN" #x0667)
- ("ARABIC-INDIC DIGIT EIGHT" #x0668)
- ("ARABIC-INDIC DIGIT NINE" #x0669)
- ("ARABIC PERCENT SIGN" #x066A)
- ("ARABIC DECIMAL SEPARATOR" #x066B)
- ("ARABIC THOUSANDS SEPARATOR" #x066C)
- ("ARABIC FIVE POINTED STAR" #x066D)
- ("ARABIC LETTER DOTLESS BEH" #x066E)
- ("ARABIC LETTER DOTLESS QAF" #x066F)
- ("ARABIC LETTER SUPERSCRIPT ALEF" #x0670)
- ("ARABIC LETTER ALEF WASLA" #x0671)
- ("ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE" #x0672)
- ("ARABIC LETTER ALEF WITH WAVY HAMZA BELOW" #x0673)
- ("ARABIC LETTER HIGH HAMZA" #x0674)
- ("ARABIC LETTER HIGH HAMZA ALEF" #x0675)
- ("ARABIC LETTER HIGH HAMZA WAW" #x0676)
- ("ARABIC LETTER U WITH HAMZA ABOVE" #x0677)
- ("ARABIC LETTER HIGH HAMZA YEH" #x0678)
- ("ARABIC LETTER TTEH" #x0679)
- ("ARABIC LETTER TTEHEH" #x067A)
- ("ARABIC LETTER BEEH" #x067B)
- ("ARABIC LETTER TEH WITH RING" #x067C)
- ("ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS" #x067D)
- ("ARABIC LETTER PEH" #x067E)
- ("ARABIC LETTER TEHEH" #x067F)
- ("ARABIC LETTER BEHEH" #x0680)
- ("ARABIC LETTER HAH WITH HAMZA ABOVE" #x0681)
- ("ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE" #x0682)
- ("ARABIC LETTER NYEH" #x0683)
- ("ARABIC LETTER DYEH" #x0684)
- ("ARABIC LETTER HAH WITH THREE DOTS ABOVE" #x0685)
- ("ARABIC LETTER TCHEH" #x0686)
- ("ARABIC LETTER TCHEHEH" #x0687)
- ("ARABIC LETTER DDAL" #x0688)
- ("ARABIC LETTER DAL WITH RING" #x0689)
- ("ARABIC LETTER DAL WITH DOT BELOW" #x068A)
- ("ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH" #x068B)
- ("ARABIC LETTER DAHAL" #x068C)
- ("ARABIC LETTER DDAHAL" #x068D)
- ("ARABIC LETTER DUL" #x068E)
- ("ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS" #x068F)
- ("ARABIC LETTER DAL WITH FOUR DOTS ABOVE" #x0690)
- ("ARABIC LETTER RREH" #x0691)
- ("ARABIC LETTER REH WITH SMALL V" #x0692)
- ("ARABIC LETTER REH WITH RING" #x0693)
- ("ARABIC LETTER REH WITH DOT BELOW" #x0694)
- ("ARABIC LETTER REH WITH SMALL V BELOW" #x0695)
- ("ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE" #x0696)
- ("ARABIC LETTER REH WITH TWO DOTS ABOVE" #x0697)
- ("ARABIC LETTER JEH" #x0698)
- ("ARABIC LETTER REH WITH FOUR DOTS ABOVE" #x0699)
- ("ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE" #x069A)
- ("ARABIC LETTER SEEN WITH THREE DOTS BELOW" #x069B)
- ("ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE" #x069C)
- ("ARABIC LETTER SAD WITH TWO DOTS BELOW" #x069D)
- ("ARABIC LETTER SAD WITH THREE DOTS ABOVE" #x069E)
- ("ARABIC LETTER TAH WITH THREE DOTS ABOVE" #x069F)
- ("ARABIC LETTER AIN WITH THREE DOTS ABOVE" #x06A0)
- ("ARABIC LETTER DOTLESS FEH" #x06A1)
- ("ARABIC LETTER FEH WITH DOT MOVED BELOW" #x06A2)
- ("ARABIC LETTER FEH WITH DOT BELOW" #x06A3)
- ("ARABIC LETTER VEH" #x06A4)
- ("ARABIC LETTER FEH WITH THREE DOTS BELOW" #x06A5)
- ("ARABIC LETTER PEHEH" #x06A6)
- ("ARABIC LETTER QAF WITH DOT ABOVE" #x06A7)
- ("ARABIC LETTER QAF WITH THREE DOTS ABOVE" #x06A8)
- ("ARABIC LETTER KEHEH" #x06A9)
- ("ARABIC LETTER SWASH KAF" #x06AA)
- ("ARABIC LETTER KAF WITH RING" #x06AB)
- ("ARABIC LETTER KAF WITH DOT ABOVE" #x06AC)
- ("ARABIC LETTER NG" #x06AD)
- ("ARABIC LETTER KAF WITH THREE DOTS BELOW" #x06AE)
- ("ARABIC LETTER GAF" #x06AF)
- ("ARABIC LETTER GAF WITH RING" #x06B0)
- ("ARABIC LETTER NGOEH" #x06B1)
- ("ARABIC LETTER GAF WITH TWO DOTS BELOW" #x06B2)
- ("ARABIC LETTER GUEH" #x06B3)
- ("ARABIC LETTER GAF WITH THREE DOTS ABOVE" #x06B4)
- ("ARABIC LETTER LAM WITH SMALL V" #x06B5)
- ("ARABIC LETTER LAM WITH DOT ABOVE" #x06B6)
- ("ARABIC LETTER LAM WITH THREE DOTS ABOVE" #x06B7)
- ("ARABIC LETTER LAM WITH THREE DOTS BELOW" #x06B8)
- ("ARABIC LETTER NOON WITH DOT BELOW" #x06B9)
- ("ARABIC LETTER NOON GHUNNA" #x06BA)
- ("ARABIC LETTER RNOON" #x06BB)
- ("ARABIC LETTER NOON WITH RING" #x06BC)
- ("ARABIC LETTER NOON WITH THREE DOTS ABOVE" #x06BD)
- ("ARABIC LETTER HEH DOACHASHMEE" #x06BE)
- ("ARABIC LETTER TCHEH WITH DOT ABOVE" #x06BF)
- ("ARABIC LETTER HEH WITH YEH ABOVE" #x06C0)
- ("ARABIC LETTER HEH GOAL" #x06C1)
- ("ARABIC LETTER HEH GOAL WITH HAMZA ABOVE" #x06C2)
- ("ARABIC LETTER TEH MARBUTA GOAL" #x06C3)
- ("ARABIC LETTER WAW WITH RING" #x06C4)
- ("ARABIC LETTER KIRGHIZ OE" #x06C5)
- ("ARABIC LETTER OE" #x06C6)
- ("ARABIC LETTER U" #x06C7)
- ("ARABIC LETTER YU" #x06C8)
- ("ARABIC LETTER KIRGHIZ YU" #x06C9)
- ("ARABIC LETTER WAW WITH TWO DOTS ABOVE" #x06CA)
- ("ARABIC LETTER VE" #x06CB)
- ("ARABIC LETTER FARSI YEH" #x06CC)
- ("ARABIC LETTER YEH WITH TAIL" #x06CD)
- ("ARABIC LETTER YEH WITH SMALL V" #x06CE)
- ("ARABIC LETTER WAW WITH DOT ABOVE" #x06CF)
- ("ARABIC LETTER E" #x06D0)
- ("ARABIC LETTER YEH WITH THREE DOTS BELOW" #x06D1)
- ("ARABIC LETTER YEH BARREE" #x06D2)
- ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE" #x06D3)
- ("ARABIC FULL STOP" #x06D4)
- ("ARABIC LETTER AE" #x06D5)
- ("ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA" #x06D6)
- ("ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA" #x06D7)
- ("ARABIC SMALL HIGH MEEM INITIAL FORM" #x06D8)
- ("ARABIC SMALL HIGH LAM ALEF" #x06D9)
- ("ARABIC SMALL HIGH JEEM" #x06DA)
- ("ARABIC SMALL HIGH THREE DOTS" #x06DB)
- ("ARABIC SMALL HIGH SEEN" #x06DC)
- ("ARABIC END OF AYAH" #x06DD)
- ("ARABIC START OF RUB EL HIZB" #x06DE)
- ("ARABIC SMALL HIGH ROUNDED ZERO" #x06DF)
- ("ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO" #x06E0)
- ("ARABIC SMALL HIGH DOTLESS HEAD OF KHAH" #x06E1)
- ("ARABIC SMALL HIGH MEEM ISOLATED FORM" #x06E2)
- ("ARABIC SMALL LOW SEEN" #x06E3)
- ("ARABIC SMALL HIGH MADDA" #x06E4)
- ("ARABIC SMALL WAW" #x06E5)
- ("ARABIC SMALL YEH" #x06E6)
- ("ARABIC SMALL HIGH YEH" #x06E7)
- ("ARABIC SMALL HIGH NOON" #x06E8)
- ("ARABIC PLACE OF SAJDAH" #x06E9)
- ("ARABIC EMPTY CENTRE LOW STOP" #x06EA)
- ("ARABIC EMPTY CENTRE HIGH STOP" #x06EB)
- ("ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE" #x06EC)
- ("ARABIC SMALL LOW MEEM" #x06ED)
- ("EXTENDED ARABIC-INDIC DIGIT ZERO" #x06F0)
- ("EXTENDED ARABIC-INDIC DIGIT ONE" #x06F1)
- ("EXTENDED ARABIC-INDIC DIGIT TWO" #x06F2)
- ("EXTENDED ARABIC-INDIC DIGIT THREE" #x06F3)
- ("EXTENDED ARABIC-INDIC DIGIT FOUR" #x06F4)
- ("EXTENDED ARABIC-INDIC DIGIT FIVE" #x06F5)
- ("EXTENDED ARABIC-INDIC DIGIT SIX" #x06F6)
- ("EXTENDED ARABIC-INDIC DIGIT SEVEN" #x06F7)
- ("EXTENDED ARABIC-INDIC DIGIT EIGHT" #x06F8)
- ("EXTENDED ARABIC-INDIC DIGIT NINE" #x06F9)
- ("ARABIC LETTER SHEEN WITH DOT BELOW" #x06FA)
- ("ARABIC LETTER DAD WITH DOT BELOW" #x06FB)
- ("ARABIC LETTER GHAIN WITH DOT BELOW" #x06FC)
- ("ARABIC SIGN SINDHI AMPERSAND" #x06FD)
- ("ARABIC SIGN SINDHI POSTPOSITION MEN" #x06FE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'syriac
- '(("SYRIAC END OF PARAGRAPH" #x0700)
- ("SYRIAC SUPRALINEAR FULL STOP" #x0701)
- ("SYRIAC SUBLINEAR FULL STOP" #x0702)
- ("SYRIAC SUPRALINEAR COLON" #x0703)
- ("SYRIAC SUBLINEAR COLON" #x0704)
- ("SYRIAC HORIZONTAL COLON" #x0705)
- ("SYRIAC COLON SKEWED LEFT" #x0706)
- ("SYRIAC COLON SKEWED RIGHT" #x0707)
- ("SYRIAC SUPRALINEAR COLON SKEWED LEFT" #x0708)
- ("SYRIAC SUBLINEAR COLON SKEWED RIGHT" #x0709)
- ("SYRIAC CONTRACTION" #x070A)
- ("SYRIAC HARKLEAN OBELUS" #x070B)
- ("SYRIAC HARKLEAN METOBELUS" #x070C)
- ("SYRIAC HARKLEAN ASTERISCUS" #x070D)
- ("SYRIAC ABBREVIATION MARK" #x070F)
- ("SYRIAC LETTER ALAPH" #x0710)
- ("SYRIAC LETTER SUPERSCRIPT ALAPH" #x0711)
- ("SYRIAC LETTER BETH" #x0712)
- ("SYRIAC LETTER GAMAL" #x0713)
- ("SYRIAC LETTER GAMAL GARSHUNI" #x0714)
- ("SYRIAC LETTER DALATH" #x0715)
- ("SYRIAC LETTER DOTLESS DALATH RISH" #x0716)
- ("SYRIAC LETTER HE" #x0717)
- ("SYRIAC LETTER WAW" #x0718)
- ("SYRIAC LETTER ZAIN" #x0719)
- ("SYRIAC LETTER HETH" #x071A)
- ("SYRIAC LETTER TETH" #x071B)
- ("SYRIAC LETTER TETH GARSHUNI" #x071C)
- ("SYRIAC LETTER YUDH" #x071D)
- ("SYRIAC LETTER YUDH HE" #x071E)
- ("SYRIAC LETTER KAPH" #x071F)
- ("SYRIAC LETTER LAMADH" #x0720)
- ("SYRIAC LETTER MIM" #x0721)
- ("SYRIAC LETTER NUN" #x0722)
- ("SYRIAC LETTER SEMKATH" #x0723)
- ("SYRIAC LETTER FINAL SEMKATH" #x0724)
- ("SYRIAC LETTER E" #x0725)
- ("SYRIAC LETTER PE" #x0726)
- ("SYRIAC LETTER REVERSED PE" #x0727)
- ("SYRIAC LETTER SADHE" #x0728)
- ("SYRIAC LETTER QAPH" #x0729)
- ("SYRIAC LETTER RISH" #x072A)
- ("SYRIAC LETTER SHIN" #x072B)
- ("SYRIAC LETTER TAW" #x072C)
- ("SYRIAC PTHAHA ABOVE" #x0730)
- ("SYRIAC PTHAHA BELOW" #x0731)
- ("SYRIAC PTHAHA DOTTED" #x0732)
- ("SYRIAC ZQAPHA ABOVE" #x0733)
- ("SYRIAC ZQAPHA BELOW" #x0734)
- ("SYRIAC ZQAPHA DOTTED" #x0735)
- ("SYRIAC RBASA ABOVE" #x0736)
- ("SYRIAC RBASA BELOW" #x0737)
- ("SYRIAC DOTTED ZLAMA HORIZONTAL" #x0738)
- ("SYRIAC DOTTED ZLAMA ANGULAR" #x0739)
- ("SYRIAC HBASA ABOVE" #x073A)
- ("SYRIAC HBASA BELOW" #x073B)
- ("SYRIAC HBASA-ESASA DOTTED" #x073C)
- ("SYRIAC ESASA ABOVE" #x073D)
- ("SYRIAC ESASA BELOW" #x073E)
- ("SYRIAC RWAHA" #x073F)
- ("SYRIAC FEMININE DOT" #x0740)
- ("SYRIAC QUSHSHAYA" #x0741)
- ("SYRIAC RUKKAKHA" #x0742)
- ("SYRIAC TWO VERTICAL DOTS ABOVE" #x0743)
- ("SYRIAC TWO VERTICAL DOTS BELOW" #x0744)
- ("SYRIAC THREE DOTS ABOVE" #x0745)
- ("SYRIAC THREE DOTS BELOW" #x0746)
- ("SYRIAC OBLIQUE LINE ABOVE" #x0747)
- ("SYRIAC OBLIQUE LINE BELOW" #x0748)
- ("SYRIAC MUSIC" #x0749)
- ("SYRIAC BARREKH" #x074A)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'thaana
- '(("THAANA LETTER HAA" #x0780)
- ("THAANA LETTER SHAVIYANI" #x0781)
- ("THAANA LETTER NOONU" #x0782)
- ("THAANA LETTER RAA" #x0783)
- ("THAANA LETTER BAA" #x0784)
- ("THAANA LETTER LHAVIYANI" #x0785)
- ("THAANA LETTER KAAFU" #x0786)
- ("THAANA LETTER ALIFU" #x0787)
- ("THAANA LETTER VAAVU" #x0788)
- ("THAANA LETTER MEEMU" #x0789)
- ("THAANA LETTER FAAFU" #x078A)
- ("THAANA LETTER DHAALU" #x078B)
- ("THAANA LETTER THAA" #x078C)
- ("THAANA LETTER LAAMU" #x078D)
- ("THAANA LETTER GAAFU" #x078E)
- ("THAANA LETTER GNAVIYANI" #x078F)
- ("THAANA LETTER SEENU" #x0790)
- ("THAANA LETTER DAVIYANI" #x0791)
- ("THAANA LETTER ZAVIYANI" #x0792)
- ("THAANA LETTER TAVIYANI" #x0793)
- ("THAANA LETTER YAA" #x0794)
- ("THAANA LETTER PAVIYANI" #x0795)
- ("THAANA LETTER JAVIYANI" #x0796)
- ("THAANA LETTER CHAVIYANI" #x0797)
- ("THAANA LETTER TTAA" #x0798)
- ("THAANA LETTER HHAA" #x0799)
- ("THAANA LETTER KHAA" #x079A)
- ("THAANA LETTER THAALU" #x079B)
- ("THAANA LETTER ZAA" #x079C)
- ("THAANA LETTER SHEENU" #x079D)
- ("THAANA LETTER SAADHU" #x079E)
- ("THAANA LETTER DAADHU" #x079F)
- ("THAANA LETTER TO" #x07A0)
- ("THAANA LETTER ZO" #x07A1)
- ("THAANA LETTER AINU" #x07A2)
- ("THAANA LETTER GHAINU" #x07A3)
- ("THAANA LETTER QAAFU" #x07A4)
- ("THAANA LETTER WAAVU" #x07A5)
- ("THAANA ABAFILI" #x07A6)
- ("THAANA AABAAFILI" #x07A7)
- ("THAANA IBIFILI" #x07A8)
- ("THAANA EEBEEFILI" #x07A9)
- ("THAANA UBUFILI" #x07AA)
- ("THAANA OOBOOFILI" #x07AB)
- ("THAANA EBEFILI" #x07AC)
- ("THAANA EYBEYFILI" #x07AD)
- ("THAANA OBOFILI" #x07AE)
- ("THAANA OABOAFILI" #x07AF)
- ("THAANA SUKUN" #x07B0)
- ("THAANA LETTER NAA" #x07B1)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'devanagari
- '(("DEVANAGARI SIGN CANDRABINDU" #x0901)
- ("DEVANAGARI SIGN ANUSVARA" #x0902)
- ("DEVANAGARI SIGN VISARGA" #x0903)
- ("DEVANAGARI LETTER A" #x0905)
- ("DEVANAGARI LETTER AA" #x0906)
- ("DEVANAGARI LETTER I" #x0907)
- ("DEVANAGARI LETTER II" #x0908)
- ("DEVANAGARI LETTER U" #x0909)
- ("DEVANAGARI LETTER UU" #x090A)
- ("DEVANAGARI LETTER VOCALIC R" #x090B)
- ("DEVANAGARI LETTER VOCALIC L" #x090C)
- ("DEVANAGARI LETTER CANDRA E" #x090D)
- ("DEVANAGARI LETTER SHORT E" #x090E)
- ("DEVANAGARI LETTER E" #x090F)
- ("DEVANAGARI LETTER AI" #x0910)
- ("DEVANAGARI LETTER CANDRA O" #x0911)
- ("DEVANAGARI LETTER SHORT O" #x0912)
- ("DEVANAGARI LETTER O" #x0913)
- ("DEVANAGARI LETTER AU" #x0914)
- ("DEVANAGARI LETTER KA" #x0915)
- ("DEVANAGARI LETTER KHA" #x0916)
- ("DEVANAGARI LETTER GA" #x0917)
- ("DEVANAGARI LETTER GHA" #x0918)
- ("DEVANAGARI LETTER NGA" #x0919)
- ("DEVANAGARI LETTER CA" #x091A)
- ("DEVANAGARI LETTER CHA" #x091B)
- ("DEVANAGARI LETTER JA" #x091C)
- ("DEVANAGARI LETTER JHA" #x091D)
- ("DEVANAGARI LETTER NYA" #x091E)
- ("DEVANAGARI LETTER TTA" #x091F)
- ("DEVANAGARI LETTER TTHA" #x0920)
- ("DEVANAGARI LETTER DDA" #x0921)
- ("DEVANAGARI LETTER DDHA" #x0922)
- ("DEVANAGARI LETTER NNA" #x0923)
- ("DEVANAGARI LETTER TA" #x0924)
- ("DEVANAGARI LETTER THA" #x0925)
- ("DEVANAGARI LETTER DA" #x0926)
- ("DEVANAGARI LETTER DHA" #x0927)
- ("DEVANAGARI LETTER NA" #x0928)
- ("DEVANAGARI LETTER NNNA" #x0929)
- ("DEVANAGARI LETTER PA" #x092A)
- ("DEVANAGARI LETTER PHA" #x092B)
- ("DEVANAGARI LETTER BA" #x092C)
- ("DEVANAGARI LETTER BHA" #x092D)
- ("DEVANAGARI LETTER MA" #x092E)
- ("DEVANAGARI LETTER YA" #x092F)
- ("DEVANAGARI LETTER RA" #x0930)
- ("DEVANAGARI LETTER RRA" #x0931)
- ("DEVANAGARI LETTER LA" #x0932)
- ("DEVANAGARI LETTER LLA" #x0933)
- ("DEVANAGARI LETTER LLLA" #x0934)
- ("DEVANAGARI LETTER VA" #x0935)
- ("DEVANAGARI LETTER SHA" #x0936)
- ("DEVANAGARI LETTER SSA" #x0937)
- ("DEVANAGARI LETTER SA" #x0938)
- ("DEVANAGARI LETTER HA" #x0939)
- ("DEVANAGARI SIGN NUKTA" #x093C)
- ("DEVANAGARI SIGN AVAGRAHA" #x093D)
- ("DEVANAGARI VOWEL SIGN AA" #x093E)
- ("DEVANAGARI VOWEL SIGN I" #x093F)
- ("DEVANAGARI VOWEL SIGN II" #x0940)
- ("DEVANAGARI VOWEL SIGN U" #x0941)
- ("DEVANAGARI VOWEL SIGN UU" #x0942)
- ("DEVANAGARI VOWEL SIGN VOCALIC R" #x0943)
- ("DEVANAGARI VOWEL SIGN VOCALIC RR" #x0944)
- ("DEVANAGARI VOWEL SIGN CANDRA E" #x0945)
- ("DEVANAGARI VOWEL SIGN SHORT E" #x0946)
- ("DEVANAGARI VOWEL SIGN E" #x0947)
- ("DEVANAGARI VOWEL SIGN AI" #x0948)
- ("DEVANAGARI VOWEL SIGN CANDRA O" #x0949)
- ("DEVANAGARI VOWEL SIGN SHORT O" #x094A)
- ("DEVANAGARI VOWEL SIGN O" #x094B)
- ("DEVANAGARI VOWEL SIGN AU" #x094C)
- ("DEVANAGARI SIGN VIRAMA" #x094D)
- ("DEVANAGARI OM" #x0950)
- ("DEVANAGARI STRESS SIGN UDATTA" #x0951)
- ("DEVANAGARI STRESS SIGN ANUDATTA" #x0952)
- ("DEVANAGARI GRAVE ACCENT" #x0953)
- ("DEVANAGARI ACUTE ACCENT" #x0954)
- ("DEVANAGARI LETTER QA" #x0958)
- ("DEVANAGARI LETTER KHHA" #x0959)
- ("DEVANAGARI LETTER GHHA" #x095A)
- ("DEVANAGARI LETTER ZA" #x095B)
- ("DEVANAGARI LETTER DDDHA" #x095C)
- ("DEVANAGARI LETTER RHA" #x095D)
- ("DEVANAGARI LETTER FA" #x095E)
- ("DEVANAGARI LETTER YYA" #x095F)
- ("DEVANAGARI LETTER VOCALIC RR" #x0960)
- ("DEVANAGARI LETTER VOCALIC LL" #x0961)
- ("DEVANAGARI VOWEL SIGN VOCALIC L" #x0962)
- ("DEVANAGARI VOWEL SIGN VOCALIC LL" #x0963)
- ("DEVANAGARI DANDA" #x0964)
- ("DEVANAGARI DOUBLE DANDA" #x0965)
- ("DEVANAGARI DIGIT ZERO" #x0966)
- ("DEVANAGARI DIGIT ONE" #x0967)
- ("DEVANAGARI DIGIT TWO" #x0968)
- ("DEVANAGARI DIGIT THREE" #x0969)
- ("DEVANAGARI DIGIT FOUR" #x096A)
- ("DEVANAGARI DIGIT FIVE" #x096B)
- ("DEVANAGARI DIGIT SIX" #x096C)
- ("DEVANAGARI DIGIT SEVEN" #x096D)
- ("DEVANAGARI DIGIT EIGHT" #x096E)
- ("DEVANAGARI DIGIT NINE" #x096F)
- ("DEVANAGARI ABBREVIATION SIGN" #x0970)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'bengali
- '(("BENGALI SIGN CANDRABINDU" #x0981)
- ("BENGALI SIGN ANUSVARA" #x0982)
- ("BENGALI SIGN VISARGA" #x0983)
- ("BENGALI LETTER A" #x0985)
- ("BENGALI LETTER AA" #x0986)
- ("BENGALI LETTER I" #x0987)
- ("BENGALI LETTER II" #x0988)
- ("BENGALI LETTER U" #x0989)
- ("BENGALI LETTER UU" #x098A)
- ("BENGALI LETTER VOCALIC R" #x098B)
- ("BENGALI LETTER VOCALIC L" #x098C)
- ("BENGALI LETTER E" #x098F)
- ("BENGALI LETTER AI" #x0990)
- ("BENGALI LETTER O" #x0993)
- ("BENGALI LETTER AU" #x0994)
- ("BENGALI LETTER KA" #x0995)
- ("BENGALI LETTER KHA" #x0996)
- ("BENGALI LETTER GA" #x0997)
- ("BENGALI LETTER GHA" #x0998)
- ("BENGALI LETTER NGA" #x0999)
- ("BENGALI LETTER CA" #x099A)
- ("BENGALI LETTER CHA" #x099B)
- ("BENGALI LETTER JA" #x099C)
- ("BENGALI LETTER JHA" #x099D)
- ("BENGALI LETTER NYA" #x099E)
- ("BENGALI LETTER TTA" #x099F)
- ("BENGALI LETTER TTHA" #x09A0)
- ("BENGALI LETTER DDA" #x09A1)
- ("BENGALI LETTER DDHA" #x09A2)
- ("BENGALI LETTER NNA" #x09A3)
- ("BENGALI LETTER TA" #x09A4)
- ("BENGALI LETTER THA" #x09A5)
- ("BENGALI LETTER DA" #x09A6)
- ("BENGALI LETTER DHA" #x09A7)
- ("BENGALI LETTER NA" #x09A8)
- ("BENGALI LETTER PA" #x09AA)
- ("BENGALI LETTER PHA" #x09AB)
- ("BENGALI LETTER BA" #x09AC)
- ("BENGALI LETTER BHA" #x09AD)
- ("BENGALI LETTER MA" #x09AE)
- ("BENGALI LETTER YA" #x09AF)
- ("BENGALI LETTER RA" #x09B0)
- ("BENGALI LETTER LA" #x09B2)
- ("BENGALI LETTER SHA" #x09B6)
- ("BENGALI LETTER SSA" #x09B7)
- ("BENGALI LETTER SA" #x09B8)
- ("BENGALI LETTER HA" #x09B9)
- ("BENGALI SIGN NUKTA" #x09BC)
- ("BENGALI VOWEL SIGN AA" #x09BE)
- ("BENGALI VOWEL SIGN I" #x09BF)
- ("BENGALI VOWEL SIGN II" #x09C0)
- ("BENGALI VOWEL SIGN U" #x09C1)
- ("BENGALI VOWEL SIGN UU" #x09C2)
- ("BENGALI VOWEL SIGN VOCALIC R" #x09C3)
- ("BENGALI VOWEL SIGN VOCALIC RR" #x09C4)
- ("BENGALI VOWEL SIGN E" #x09C7)
- ("BENGALI VOWEL SIGN AI" #x09C8)
- ("BENGALI VOWEL SIGN O" #x09CB)
- ("BENGALI VOWEL SIGN AU" #x09CC)
- ("BENGALI SIGN VIRAMA" #x09CD)
- ("BENGALI AU LENGTH MARK" #x09D7)
- ("BENGALI LETTER RRA" #x09DC)
- ("BENGALI LETTER RHA" #x09DD)
- ("BENGALI LETTER YYA" #x09DF)
- ("BENGALI LETTER VOCALIC RR" #x09E0)
- ("BENGALI LETTER VOCALIC LL" #x09E1)
- ("BENGALI VOWEL SIGN VOCALIC L" #x09E2)
- ("BENGALI VOWEL SIGN VOCALIC LL" #x09E3)
- ("BENGALI DIGIT ZERO" #x09E6)
- ("BENGALI DIGIT ONE" #x09E7)
- ("BENGALI DIGIT TWO" #x09E8)
- ("BENGALI DIGIT THREE" #x09E9)
- ("BENGALI DIGIT FOUR" #x09EA)
- ("BENGALI DIGIT FIVE" #x09EB)
- ("BENGALI DIGIT SIX" #x09EC)
- ("BENGALI DIGIT SEVEN" #x09ED)
- ("BENGALI DIGIT EIGHT" #x09EE)
- ("BENGALI DIGIT NINE" #x09EF)
- ("BENGALI LETTER RA WITH MIDDLE DIAGONAL" #x09F0)
- ("BENGALI LETTER RA WITH LOWER DIAGONAL" #x09F1)
- ("BENGALI RUPEE MARK" #x09F2)
- ("BENGALI RUPEE SIGN" #x09F3)
- ("BENGALI CURRENCY NUMERATOR ONE" #x09F4)
- ("BENGALI CURRENCY NUMERATOR TWO" #x09F5)
- ("BENGALI CURRENCY NUMERATOR THREE" #x09F6)
- ("BENGALI CURRENCY NUMERATOR FOUR" #x09F7)
- ("BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR" #x09F8)
- ("BENGALI CURRENCY DENOMINATOR SIXTEEN" #x09F9)
- ("BENGALI ISSHAR" #x09FA)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'gurmukhi
- '(("GURMUKHI SIGN BINDI" #x0A02)
- ("GURMUKHI LETTER A" #x0A05)
- ("GURMUKHI LETTER AA" #x0A06)
- ("GURMUKHI LETTER I" #x0A07)
- ("GURMUKHI LETTER II" #x0A08)
- ("GURMUKHI LETTER U" #x0A09)
- ("GURMUKHI LETTER UU" #x0A0A)
- ("GURMUKHI LETTER EE" #x0A0F)
- ("GURMUKHI LETTER AI" #x0A10)
- ("GURMUKHI LETTER OO" #x0A13)
- ("GURMUKHI LETTER AU" #x0A14)
- ("GURMUKHI LETTER KA" #x0A15)
- ("GURMUKHI LETTER KHA" #x0A16)
- ("GURMUKHI LETTER GA" #x0A17)
- ("GURMUKHI LETTER GHA" #x0A18)
- ("GURMUKHI LETTER NGA" #x0A19)
- ("GURMUKHI LETTER CA" #x0A1A)
- ("GURMUKHI LETTER CHA" #x0A1B)
- ("GURMUKHI LETTER JA" #x0A1C)
- ("GURMUKHI LETTER JHA" #x0A1D)
- ("GURMUKHI LETTER NYA" #x0A1E)
- ("GURMUKHI LETTER TTA" #x0A1F)
- ("GURMUKHI LETTER TTHA" #x0A20)
- ("GURMUKHI LETTER DDA" #x0A21)
- ("GURMUKHI LETTER DDHA" #x0A22)
- ("GURMUKHI LETTER NNA" #x0A23)
- ("GURMUKHI LETTER TA" #x0A24)
- ("GURMUKHI LETTER THA" #x0A25)
- ("GURMUKHI LETTER DA" #x0A26)
- ("GURMUKHI LETTER DHA" #x0A27)
- ("GURMUKHI LETTER NA" #x0A28)
- ("GURMUKHI LETTER PA" #x0A2A)
- ("GURMUKHI LETTER PHA" #x0A2B)
- ("GURMUKHI LETTER BA" #x0A2C)
- ("GURMUKHI LETTER BHA" #x0A2D)
- ("GURMUKHI LETTER MA" #x0A2E)
- ("GURMUKHI LETTER YA" #x0A2F)
- ("GURMUKHI LETTER RA" #x0A30)
- ("GURMUKHI LETTER LA" #x0A32)
- ("GURMUKHI LETTER LLA" #x0A33)
- ("GURMUKHI LETTER VA" #x0A35)
- ("GURMUKHI LETTER SHA" #x0A36)
- ("GURMUKHI LETTER SA" #x0A38)
- ("GURMUKHI LETTER HA" #x0A39)
- ("GURMUKHI SIGN NUKTA" #x0A3C)
- ("GURMUKHI VOWEL SIGN AA" #x0A3E)
- ("GURMUKHI VOWEL SIGN I" #x0A3F)
- ("GURMUKHI VOWEL SIGN II" #x0A40)
- ("GURMUKHI VOWEL SIGN U" #x0A41)
- ("GURMUKHI VOWEL SIGN UU" #x0A42)
- ("GURMUKHI VOWEL SIGN EE" #x0A47)
- ("GURMUKHI VOWEL SIGN AI" #x0A48)
- ("GURMUKHI VOWEL SIGN OO" #x0A4B)
- ("GURMUKHI VOWEL SIGN AU" #x0A4C)
- ("GURMUKHI SIGN VIRAMA" #x0A4D)
- ("GURMUKHI LETTER KHHA" #x0A59)
- ("GURMUKHI LETTER GHHA" #x0A5A)
- ("GURMUKHI LETTER ZA" #x0A5B)
- ("GURMUKHI LETTER RRA" #x0A5C)
- ("GURMUKHI LETTER FA" #x0A5E)
- ("GURMUKHI DIGIT ZERO" #x0A66)
- ("GURMUKHI DIGIT ONE" #x0A67)
- ("GURMUKHI DIGIT TWO" #x0A68)
- ("GURMUKHI DIGIT THREE" #x0A69)
- ("GURMUKHI DIGIT FOUR" #x0A6A)
- ("GURMUKHI DIGIT FIVE" #x0A6B)
- ("GURMUKHI DIGIT SIX" #x0A6C)
- ("GURMUKHI DIGIT SEVEN" #x0A6D)
- ("GURMUKHI DIGIT EIGHT" #x0A6E)
- ("GURMUKHI DIGIT NINE" #x0A6F)
- ("GURMUKHI TIPPI" #x0A70)
- ("GURMUKHI ADDAK" #x0A71)
- ("GURMUKHI IRI" #x0A72)
- ("GURMUKHI URA" #x0A73)
- ("GURMUKHI EK ONKAR" #x0A74)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'gujarati
- '(("GUJARATI SIGN CANDRABINDU" #x0A81)
- ("GUJARATI SIGN ANUSVARA" #x0A82)
- ("GUJARATI SIGN VISARGA" #x0A83)
- ("GUJARATI LETTER A" #x0A85)
- ("GUJARATI LETTER AA" #x0A86)
- ("GUJARATI LETTER I" #x0A87)
- ("GUJARATI LETTER II" #x0A88)
- ("GUJARATI LETTER U" #x0A89)
- ("GUJARATI LETTER UU" #x0A8A)
- ("GUJARATI LETTER VOCALIC R" #x0A8B)
- ("GUJARATI VOWEL CANDRA E" #x0A8D)
- ("GUJARATI LETTER E" #x0A8F)
- ("GUJARATI LETTER AI" #x0A90)
- ("GUJARATI VOWEL CANDRA O" #x0A91)
- ("GUJARATI LETTER O" #x0A93)
- ("GUJARATI LETTER AU" #x0A94)
- ("GUJARATI LETTER KA" #x0A95)
- ("GUJARATI LETTER KHA" #x0A96)
- ("GUJARATI LETTER GA" #x0A97)
- ("GUJARATI LETTER GHA" #x0A98)
- ("GUJARATI LETTER NGA" #x0A99)
- ("GUJARATI LETTER CA" #x0A9A)
- ("GUJARATI LETTER CHA" #x0A9B)
- ("GUJARATI LETTER JA" #x0A9C)
- ("GUJARATI LETTER JHA" #x0A9D)
- ("GUJARATI LETTER NYA" #x0A9E)
- ("GUJARATI LETTER TTA" #x0A9F)
- ("GUJARATI LETTER TTHA" #x0AA0)
- ("GUJARATI LETTER DDA" #x0AA1)
- ("GUJARATI LETTER DDHA" #x0AA2)
- ("GUJARATI LETTER NNA" #x0AA3)
- ("GUJARATI LETTER TA" #x0AA4)
- ("GUJARATI LETTER THA" #x0AA5)
- ("GUJARATI LETTER DA" #x0AA6)
- ("GUJARATI LETTER DHA" #x0AA7)
- ("GUJARATI LETTER NA" #x0AA8)
- ("GUJARATI LETTER PA" #x0AAA)
- ("GUJARATI LETTER PHA" #x0AAB)
- ("GUJARATI LETTER BA" #x0AAC)
- ("GUJARATI LETTER BHA" #x0AAD)
- ("GUJARATI LETTER MA" #x0AAE)
- ("GUJARATI LETTER YA" #x0AAF)
- ("GUJARATI LETTER RA" #x0AB0)
- ("GUJARATI LETTER LA" #x0AB2)
- ("GUJARATI LETTER LLA" #x0AB3)
- ("GUJARATI LETTER VA" #x0AB5)
- ("GUJARATI LETTER SHA" #x0AB6)
- ("GUJARATI LETTER SSA" #x0AB7)
- ("GUJARATI LETTER SA" #x0AB8)
- ("GUJARATI LETTER HA" #x0AB9)
- ("GUJARATI SIGN NUKTA" #x0ABC)
- ("GUJARATI SIGN AVAGRAHA" #x0ABD)
- ("GUJARATI VOWEL SIGN AA" #x0ABE)
- ("GUJARATI VOWEL SIGN I" #x0ABF)
- ("GUJARATI VOWEL SIGN II" #x0AC0)
- ("GUJARATI VOWEL SIGN U" #x0AC1)
- ("GUJARATI VOWEL SIGN UU" #x0AC2)
- ("GUJARATI VOWEL SIGN VOCALIC R" #x0AC3)
- ("GUJARATI VOWEL SIGN VOCALIC RR" #x0AC4)
- ("GUJARATI VOWEL SIGN CANDRA E" #x0AC5)
- ("GUJARATI VOWEL SIGN E" #x0AC7)
- ("GUJARATI VOWEL SIGN AI" #x0AC8)
- ("GUJARATI VOWEL SIGN CANDRA O" #x0AC9)
- ("GUJARATI VOWEL SIGN O" #x0ACB)
- ("GUJARATI VOWEL SIGN AU" #x0ACC)
- ("GUJARATI SIGN VIRAMA" #x0ACD)
- ("GUJARATI OM" #x0AD0)
- ("GUJARATI LETTER VOCALIC RR" #x0AE0)
- ("GUJARATI DIGIT ZERO" #x0AE6)
- ("GUJARATI DIGIT ONE" #x0AE7)
- ("GUJARATI DIGIT TWO" #x0AE8)
- ("GUJARATI DIGIT THREE" #x0AE9)
- ("GUJARATI DIGIT FOUR" #x0AEA)
- ("GUJARATI DIGIT FIVE" #x0AEB)
- ("GUJARATI DIGIT SIX" #x0AEC)
- ("GUJARATI DIGIT SEVEN" #x0AED)
- ("GUJARATI DIGIT EIGHT" #x0AEE)
- ("GUJARATI DIGIT NINE" #x0AEF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'oriya
- '(("ORIYA SIGN CANDRABINDU" #x0B01)
- ("ORIYA SIGN ANUSVARA" #x0B02)
- ("ORIYA SIGN VISARGA" #x0B03)
- ("ORIYA LETTER A" #x0B05)
- ("ORIYA LETTER AA" #x0B06)
- ("ORIYA LETTER I" #x0B07)
- ("ORIYA LETTER II" #x0B08)
- ("ORIYA LETTER U" #x0B09)
- ("ORIYA LETTER UU" #x0B0A)
- ("ORIYA LETTER VOCALIC R" #x0B0B)
- ("ORIYA LETTER VOCALIC L" #x0B0C)
- ("ORIYA LETTER E" #x0B0F)
- ("ORIYA LETTER AI" #x0B10)
- ("ORIYA LETTER O" #x0B13)
- ("ORIYA LETTER AU" #x0B14)
- ("ORIYA LETTER KA" #x0B15)
- ("ORIYA LETTER KHA" #x0B16)
- ("ORIYA LETTER GA" #x0B17)
- ("ORIYA LETTER GHA" #x0B18)
- ("ORIYA LETTER NGA" #x0B19)
- ("ORIYA LETTER CA" #x0B1A)
- ("ORIYA LETTER CHA" #x0B1B)
- ("ORIYA LETTER JA" #x0B1C)
- ("ORIYA LETTER JHA" #x0B1D)
- ("ORIYA LETTER NYA" #x0B1E)
- ("ORIYA LETTER TTA" #x0B1F)
- ("ORIYA LETTER TTHA" #x0B20)
- ("ORIYA LETTER DDA" #x0B21)
- ("ORIYA LETTER DDHA" #x0B22)
- ("ORIYA LETTER NNA" #x0B23)
- ("ORIYA LETTER TA" #x0B24)
- ("ORIYA LETTER THA" #x0B25)
- ("ORIYA LETTER DA" #x0B26)
- ("ORIYA LETTER DHA" #x0B27)
- ("ORIYA LETTER NA" #x0B28)
- ("ORIYA LETTER PA" #x0B2A)
- ("ORIYA LETTER PHA" #x0B2B)
- ("ORIYA LETTER BA" #x0B2C)
- ("ORIYA LETTER BHA" #x0B2D)
- ("ORIYA LETTER MA" #x0B2E)
- ("ORIYA LETTER YA" #x0B2F)
- ("ORIYA LETTER RA" #x0B30)
- ("ORIYA LETTER LA" #x0B32)
- ("ORIYA LETTER LLA" #x0B33)
- ("ORIYA LETTER SHA" #x0B36)
- ("ORIYA LETTER SSA" #x0B37)
- ("ORIYA LETTER SA" #x0B38)
- ("ORIYA LETTER HA" #x0B39)
- ("ORIYA SIGN NUKTA" #x0B3C)
- ("ORIYA SIGN AVAGRAHA" #x0B3D)
- ("ORIYA VOWEL SIGN AA" #x0B3E)
- ("ORIYA VOWEL SIGN I" #x0B3F)
- ("ORIYA VOWEL SIGN II" #x0B40)
- ("ORIYA VOWEL SIGN U" #x0B41)
- ("ORIYA VOWEL SIGN UU" #x0B42)
- ("ORIYA VOWEL SIGN VOCALIC R" #x0B43)
- ("ORIYA VOWEL SIGN E" #x0B47)
- ("ORIYA VOWEL SIGN AI" #x0B48)
- ("ORIYA VOWEL SIGN O" #x0B4B)
- ("ORIYA VOWEL SIGN AU" #x0B4C)
- ("ORIYA SIGN VIRAMA" #x0B4D)
- ("ORIYA AI LENGTH MARK" #x0B56)
- ("ORIYA AU LENGTH MARK" #x0B57)
- ("ORIYA LETTER RRA" #x0B5C)
- ("ORIYA LETTER RHA" #x0B5D)
- ("ORIYA LETTER YYA" #x0B5F)
- ("ORIYA LETTER VOCALIC RR" #x0B60)
- ("ORIYA LETTER VOCALIC LL" #x0B61)
- ("ORIYA DIGIT ZERO" #x0B66)
- ("ORIYA DIGIT ONE" #x0B67)
- ("ORIYA DIGIT TWO" #x0B68)
- ("ORIYA DIGIT THREE" #x0B69)
- ("ORIYA DIGIT FOUR" #x0B6A)
- ("ORIYA DIGIT FIVE" #x0B6B)
- ("ORIYA DIGIT SIX" #x0B6C)
- ("ORIYA DIGIT SEVEN" #x0B6D)
- ("ORIYA DIGIT EIGHT" #x0B6E)
- ("ORIYA DIGIT NINE" #x0B6F)
- ("ORIYA ISSHAR" #x0B70)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'tamil
- '(("TAMIL SIGN ANUSVARA" #x0B82)
- ("TAMIL SIGN VISARGA" #x0B83)
- ("TAMIL LETTER A" #x0B85)
- ("TAMIL LETTER AA" #x0B86)
- ("TAMIL LETTER I" #x0B87)
- ("TAMIL LETTER II" #x0B88)
- ("TAMIL LETTER U" #x0B89)
- ("TAMIL LETTER UU" #x0B8A)
- ("TAMIL LETTER E" #x0B8E)
- ("TAMIL LETTER EE" #x0B8F)
- ("TAMIL LETTER AI" #x0B90)
- ("TAMIL LETTER O" #x0B92)
- ("TAMIL LETTER OO" #x0B93)
- ("TAMIL LETTER AU" #x0B94)
- ("TAMIL LETTER KA" #x0B95)
- ("TAMIL LETTER NGA" #x0B99)
- ("TAMIL LETTER CA" #x0B9A)
- ("TAMIL LETTER JA" #x0B9C)
- ("TAMIL LETTER NYA" #x0B9E)
- ("TAMIL LETTER TTA" #x0B9F)
- ("TAMIL LETTER NNA" #x0BA3)
- ("TAMIL LETTER TA" #x0BA4)
- ("TAMIL LETTER NA" #x0BA8)
- ("TAMIL LETTER NNNA" #x0BA9)
- ("TAMIL LETTER PA" #x0BAA)
- ("TAMIL LETTER MA" #x0BAE)
- ("TAMIL LETTER YA" #x0BAF)
- ("TAMIL LETTER RA" #x0BB0)
- ("TAMIL LETTER RRA" #x0BB1)
- ("TAMIL LETTER LA" #x0BB2)
- ("TAMIL LETTER LLA" #x0BB3)
- ("TAMIL LETTER LLLA" #x0BB4)
- ("TAMIL LETTER VA" #x0BB5)
- ("TAMIL LETTER SSA" #x0BB7)
- ("TAMIL LETTER SA" #x0BB8)
- ("TAMIL LETTER HA" #x0BB9)
- ("TAMIL VOWEL SIGN AA" #x0BBE)
- ("TAMIL VOWEL SIGN I" #x0BBF)
- ("TAMIL VOWEL SIGN II" #x0BC0)
- ("TAMIL VOWEL SIGN U" #x0BC1)
- ("TAMIL VOWEL SIGN UU" #x0BC2)
- ("TAMIL VOWEL SIGN E" #x0BC6)
- ("TAMIL VOWEL SIGN EE" #x0BC7)
- ("TAMIL VOWEL SIGN AI" #x0BC8)
- ("TAMIL VOWEL SIGN O" #x0BCA)
- ("TAMIL VOWEL SIGN OO" #x0BCB)
- ("TAMIL VOWEL SIGN AU" #x0BCC)
- ("TAMIL SIGN VIRAMA" #x0BCD)
- ("TAMIL AU LENGTH MARK" #x0BD7)
- ("TAMIL DIGIT ONE" #x0BE7)
- ("TAMIL DIGIT TWO" #x0BE8)
- ("TAMIL DIGIT THREE" #x0BE9)
- ("TAMIL DIGIT FOUR" #x0BEA)
- ("TAMIL DIGIT FIVE" #x0BEB)
- ("TAMIL DIGIT SIX" #x0BEC)
- ("TAMIL DIGIT SEVEN" #x0BED)
- ("TAMIL DIGIT EIGHT" #x0BEE)
- ("TAMIL DIGIT NINE" #x0BEF)
- ("TAMIL NUMBER TEN" #x0BF0)
- ("TAMIL NUMBER ONE HUNDRED" #x0BF1)
- ("TAMIL NUMBER ONE THOUSAND" #x0BF2)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'telugu
- '(("TELUGU SIGN CANDRABINDU" #x0C01)
- ("TELUGU SIGN ANUSVARA" #x0C02)
- ("TELUGU SIGN VISARGA" #x0C03)
- ("TELUGU LETTER A" #x0C05)
- ("TELUGU LETTER AA" #x0C06)
- ("TELUGU LETTER I" #x0C07)
- ("TELUGU LETTER II" #x0C08)
- ("TELUGU LETTER U" #x0C09)
- ("TELUGU LETTER UU" #x0C0A)
- ("TELUGU LETTER VOCALIC R" #x0C0B)
- ("TELUGU LETTER VOCALIC L" #x0C0C)
- ("TELUGU LETTER E" #x0C0E)
- ("TELUGU LETTER EE" #x0C0F)
- ("TELUGU LETTER AI" #x0C10)
- ("TELUGU LETTER O" #x0C12)
- ("TELUGU LETTER OO" #x0C13)
- ("TELUGU LETTER AU" #x0C14)
- ("TELUGU LETTER KA" #x0C15)
- ("TELUGU LETTER KHA" #x0C16)
- ("TELUGU LETTER GA" #x0C17)
- ("TELUGU LETTER GHA" #x0C18)
- ("TELUGU LETTER NGA" #x0C19)
- ("TELUGU LETTER CA" #x0C1A)
- ("TELUGU LETTER CHA" #x0C1B)
- ("TELUGU LETTER JA" #x0C1C)
- ("TELUGU LETTER JHA" #x0C1D)
- ("TELUGU LETTER NYA" #x0C1E)
- ("TELUGU LETTER TTA" #x0C1F)
- ("TELUGU LETTER TTHA" #x0C20)
- ("TELUGU LETTER DDA" #x0C21)
- ("TELUGU LETTER DDHA" #x0C22)
- ("TELUGU LETTER NNA" #x0C23)
- ("TELUGU LETTER TA" #x0C24)
- ("TELUGU LETTER THA" #x0C25)
- ("TELUGU LETTER DA" #x0C26)
- ("TELUGU LETTER DHA" #x0C27)
- ("TELUGU LETTER NA" #x0C28)
- ("TELUGU LETTER PA" #x0C2A)
- ("TELUGU LETTER PHA" #x0C2B)
- ("TELUGU LETTER BA" #x0C2C)
- ("TELUGU LETTER BHA" #x0C2D)
- ("TELUGU LETTER MA" #x0C2E)
- ("TELUGU LETTER YA" #x0C2F)
- ("TELUGU LETTER RA" #x0C30)
- ("TELUGU LETTER RRA" #x0C31)
- ("TELUGU LETTER LA" #x0C32)
- ("TELUGU LETTER LLA" #x0C33)
- ("TELUGU LETTER VA" #x0C35)
- ("TELUGU LETTER SHA" #x0C36)
- ("TELUGU LETTER SSA" #x0C37)
- ("TELUGU LETTER SA" #x0C38)
- ("TELUGU LETTER HA" #x0C39)
- ("TELUGU VOWEL SIGN AA" #x0C3E)
- ("TELUGU VOWEL SIGN I" #x0C3F)
- ("TELUGU VOWEL SIGN II" #x0C40)
- ("TELUGU VOWEL SIGN U" #x0C41)
- ("TELUGU VOWEL SIGN UU" #x0C42)
- ("TELUGU VOWEL SIGN VOCALIC R" #x0C43)
- ("TELUGU VOWEL SIGN VOCALIC RR" #x0C44)
- ("TELUGU VOWEL SIGN E" #x0C46)
- ("TELUGU VOWEL SIGN EE" #x0C47)
- ("TELUGU VOWEL SIGN AI" #x0C48)
- ("TELUGU VOWEL SIGN O" #x0C4A)
- ("TELUGU VOWEL SIGN OO" #x0C4B)
- ("TELUGU VOWEL SIGN AU" #x0C4C)
- ("TELUGU SIGN VIRAMA" #x0C4D)
- ("TELUGU LENGTH MARK" #x0C55)
- ("TELUGU AI LENGTH MARK" #x0C56)
- ("TELUGU LETTER VOCALIC RR" #x0C60)
- ("TELUGU LETTER VOCALIC LL" #x0C61)
- ("TELUGU DIGIT ZERO" #x0C66)
- ("TELUGU DIGIT ONE" #x0C67)
- ("TELUGU DIGIT TWO" #x0C68)
- ("TELUGU DIGIT THREE" #x0C69)
- ("TELUGU DIGIT FOUR" #x0C6A)
- ("TELUGU DIGIT FIVE" #x0C6B)
- ("TELUGU DIGIT SIX" #x0C6C)
- ("TELUGU DIGIT SEVEN" #x0C6D)
- ("TELUGU DIGIT EIGHT" #x0C6E)
- ("TELUGU DIGIT NINE" #x0C6F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'kannada
- '(("KANNADA SIGN ANUSVARA" #x0C82)
- ("KANNADA SIGN VISARGA" #x0C83)
- ("KANNADA LETTER A" #x0C85)
- ("KANNADA LETTER AA" #x0C86)
- ("KANNADA LETTER I" #x0C87)
- ("KANNADA LETTER II" #x0C88)
- ("KANNADA LETTER U" #x0C89)
- ("KANNADA LETTER UU" #x0C8A)
- ("KANNADA LETTER VOCALIC R" #x0C8B)
- ("KANNADA LETTER VOCALIC L" #x0C8C)
- ("KANNADA LETTER E" #x0C8E)
- ("KANNADA LETTER EE" #x0C8F)
- ("KANNADA LETTER AI" #x0C90)
- ("KANNADA LETTER O" #x0C92)
- ("KANNADA LETTER OO" #x0C93)
- ("KANNADA LETTER AU" #x0C94)
- ("KANNADA LETTER KA" #x0C95)
- ("KANNADA LETTER KHA" #x0C96)
- ("KANNADA LETTER GA" #x0C97)
- ("KANNADA LETTER GHA" #x0C98)
- ("KANNADA LETTER NGA" #x0C99)
- ("KANNADA LETTER CA" #x0C9A)
- ("KANNADA LETTER CHA" #x0C9B)
- ("KANNADA LETTER JA" #x0C9C)
- ("KANNADA LETTER JHA" #x0C9D)
- ("KANNADA LETTER NYA" #x0C9E)
- ("KANNADA LETTER TTA" #x0C9F)
- ("KANNADA LETTER TTHA" #x0CA0)
- ("KANNADA LETTER DDA" #x0CA1)
- ("KANNADA LETTER DDHA" #x0CA2)
- ("KANNADA LETTER NNA" #x0CA3)
- ("KANNADA LETTER TA" #x0CA4)
- ("KANNADA LETTER THA" #x0CA5)
- ("KANNADA LETTER DA" #x0CA6)
- ("KANNADA LETTER DHA" #x0CA7)
- ("KANNADA LETTER NA" #x0CA8)
- ("KANNADA LETTER PA" #x0CAA)
- ("KANNADA LETTER PHA" #x0CAB)
- ("KANNADA LETTER BA" #x0CAC)
- ("KANNADA LETTER BHA" #x0CAD)
- ("KANNADA LETTER MA" #x0CAE)
- ("KANNADA LETTER YA" #x0CAF)
- ("KANNADA LETTER RA" #x0CB0)
- ("KANNADA LETTER RRA" #x0CB1)
- ("KANNADA LETTER LA" #x0CB2)
- ("KANNADA LETTER LLA" #x0CB3)
- ("KANNADA LETTER VA" #x0CB5)
- ("KANNADA LETTER SHA" #x0CB6)
- ("KANNADA LETTER SSA" #x0CB7)
- ("KANNADA LETTER SA" #x0CB8)
- ("KANNADA LETTER HA" #x0CB9)
- ("KANNADA VOWEL SIGN AA" #x0CBE)
- ("KANNADA VOWEL SIGN I" #x0CBF)
- ("KANNADA VOWEL SIGN II" #x0CC0)
- ("KANNADA VOWEL SIGN U" #x0CC1)
- ("KANNADA VOWEL SIGN UU" #x0CC2)
- ("KANNADA VOWEL SIGN VOCALIC R" #x0CC3)
- ("KANNADA VOWEL SIGN VOCALIC RR" #x0CC4)
- ("KANNADA VOWEL SIGN E" #x0CC6)
- ("KANNADA VOWEL SIGN EE" #x0CC7)
- ("KANNADA VOWEL SIGN AI" #x0CC8)
- ("KANNADA VOWEL SIGN O" #x0CCA)
- ("KANNADA VOWEL SIGN OO" #x0CCB)
- ("KANNADA VOWEL SIGN AU" #x0CCC)
- ("KANNADA SIGN VIRAMA" #x0CCD)
- ("KANNADA LENGTH MARK" #x0CD5)
- ("KANNADA AI LENGTH MARK" #x0CD6)
- ("KANNADA LETTER FA" #x0CDE)
- ("KANNADA LETTER VOCALIC RR" #x0CE0)
- ("KANNADA LETTER VOCALIC LL" #x0CE1)
- ("KANNADA DIGIT ZERO" #x0CE6)
- ("KANNADA DIGIT ONE" #x0CE7)
- ("KANNADA DIGIT TWO" #x0CE8)
- ("KANNADA DIGIT THREE" #x0CE9)
- ("KANNADA DIGIT FOUR" #x0CEA)
- ("KANNADA DIGIT FIVE" #x0CEB)
- ("KANNADA DIGIT SIX" #x0CEC)
- ("KANNADA DIGIT SEVEN" #x0CED)
- ("KANNADA DIGIT EIGHT" #x0CEE)
- ("KANNADA DIGIT NINE" #x0CEF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'malayalam
- '(("MALAYALAM SIGN ANUSVARA" #x0D02)
- ("MALAYALAM SIGN VISARGA" #x0D03)
- ("MALAYALAM LETTER A" #x0D05)
- ("MALAYALAM LETTER AA" #x0D06)
- ("MALAYALAM LETTER I" #x0D07)
- ("MALAYALAM LETTER II" #x0D08)
- ("MALAYALAM LETTER U" #x0D09)
- ("MALAYALAM LETTER UU" #x0D0A)
- ("MALAYALAM LETTER VOCALIC R" #x0D0B)
- ("MALAYALAM LETTER VOCALIC L" #x0D0C)
- ("MALAYALAM LETTER E" #x0D0E)
- ("MALAYALAM LETTER EE" #x0D0F)
- ("MALAYALAM LETTER AI" #x0D10)
- ("MALAYALAM LETTER O" #x0D12)
- ("MALAYALAM LETTER OO" #x0D13)
- ("MALAYALAM LETTER AU" #x0D14)
- ("MALAYALAM LETTER KA" #x0D15)
- ("MALAYALAM LETTER KHA" #x0D16)
- ("MALAYALAM LETTER GA" #x0D17)
- ("MALAYALAM LETTER GHA" #x0D18)
- ("MALAYALAM LETTER NGA" #x0D19)
- ("MALAYALAM LETTER CA" #x0D1A)
- ("MALAYALAM LETTER CHA" #x0D1B)
- ("MALAYALAM LETTER JA" #x0D1C)
- ("MALAYALAM LETTER JHA" #x0D1D)
- ("MALAYALAM LETTER NYA" #x0D1E)
- ("MALAYALAM LETTER TTA" #x0D1F)
- ("MALAYALAM LETTER TTHA" #x0D20)
- ("MALAYALAM LETTER DDA" #x0D21)
- ("MALAYALAM LETTER DDHA" #x0D22)
- ("MALAYALAM LETTER NNA" #x0D23)
- ("MALAYALAM LETTER TA" #x0D24)
- ("MALAYALAM LETTER THA" #x0D25)
- ("MALAYALAM LETTER DA" #x0D26)
- ("MALAYALAM LETTER DHA" #x0D27)
- ("MALAYALAM LETTER NA" #x0D28)
- ("MALAYALAM LETTER PA" #x0D2A)
- ("MALAYALAM LETTER PHA" #x0D2B)
- ("MALAYALAM LETTER BA" #x0D2C)
- ("MALAYALAM LETTER BHA" #x0D2D)
- ("MALAYALAM LETTER MA" #x0D2E)
- ("MALAYALAM LETTER YA" #x0D2F)
- ("MALAYALAM LETTER RA" #x0D30)
- ("MALAYALAM LETTER RRA" #x0D31)
- ("MALAYALAM LETTER LA" #x0D32)
- ("MALAYALAM LETTER LLA" #x0D33)
- ("MALAYALAM LETTER LLLA" #x0D34)
- ("MALAYALAM LETTER VA" #x0D35)
- ("MALAYALAM LETTER SHA" #x0D36)
- ("MALAYALAM LETTER SSA" #x0D37)
- ("MALAYALAM LETTER SA" #x0D38)
- ("MALAYALAM LETTER HA" #x0D39)
- ("MALAYALAM VOWEL SIGN AA" #x0D3E)
- ("MALAYALAM VOWEL SIGN I" #x0D3F)
- ("MALAYALAM VOWEL SIGN II" #x0D40)
- ("MALAYALAM VOWEL SIGN U" #x0D41)
- ("MALAYALAM VOWEL SIGN UU" #x0D42)
- ("MALAYALAM VOWEL SIGN VOCALIC R" #x0D43)
- ("MALAYALAM VOWEL SIGN E" #x0D46)
- ("MALAYALAM VOWEL SIGN EE" #x0D47)
- ("MALAYALAM VOWEL SIGN AI" #x0D48)
- ("MALAYALAM VOWEL SIGN O" #x0D4A)
- ("MALAYALAM VOWEL SIGN OO" #x0D4B)
- ("MALAYALAM VOWEL SIGN AU" #x0D4C)
- ("MALAYALAM SIGN VIRAMA" #x0D4D)
- ("MALAYALAM AU LENGTH MARK" #x0D57)
- ("MALAYALAM LETTER VOCALIC RR" #x0D60)
- ("MALAYALAM LETTER VOCALIC LL" #x0D61)
- ("MALAYALAM DIGIT ZERO" #x0D66)
- ("MALAYALAM DIGIT ONE" #x0D67)
- ("MALAYALAM DIGIT TWO" #x0D68)
- ("MALAYALAM DIGIT THREE" #x0D69)
- ("MALAYALAM DIGIT FOUR" #x0D6A)
- ("MALAYALAM DIGIT FIVE" #x0D6B)
- ("MALAYALAM DIGIT SIX" #x0D6C)
- ("MALAYALAM DIGIT SEVEN" #x0D6D)
- ("MALAYALAM DIGIT EIGHT" #x0D6E)
- ("MALAYALAM DIGIT NINE" #x0D6F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'sinhala
- '(("SINHALA SIGN ANUSVARAYA" #x0D82)
- ("SINHALA SIGN VISARGAYA" #x0D83)
- ("SINHALA LETTER AYANNA" #x0D85)
- ("SINHALA LETTER AAYANNA" #x0D86)
- ("SINHALA LETTER AEYANNA" #x0D87)
- ("SINHALA LETTER AEEYANNA" #x0D88)
- ("SINHALA LETTER IYANNA" #x0D89)
- ("SINHALA LETTER IIYANNA" #x0D8A)
- ("SINHALA LETTER UYANNA" #x0D8B)
- ("SINHALA LETTER UUYANNA" #x0D8C)
- ("SINHALA LETTER IRUYANNA" #x0D8D)
- ("SINHALA LETTER IRUUYANNA" #x0D8E)
- ("SINHALA LETTER ILUYANNA" #x0D8F)
- ("SINHALA LETTER ILUUYANNA" #x0D90)
- ("SINHALA LETTER EYANNA" #x0D91)
- ("SINHALA LETTER EEYANNA" #x0D92)
- ("SINHALA LETTER AIYANNA" #x0D93)
- ("SINHALA LETTER OYANNA" #x0D94)
- ("SINHALA LETTER OOYANNA" #x0D95)
- ("SINHALA LETTER AUYANNA" #x0D96)
- ("SINHALA LETTER ALPAPRAANA KAYANNA" #x0D9A)
- ("SINHALA LETTER MAHAAPRAANA KAYANNA" #x0D9B)
- ("SINHALA LETTER ALPAPRAANA GAYANNA" #x0D9C)
- ("SINHALA LETTER MAHAAPRAANA GAYANNA" #x0D9D)
- ("SINHALA LETTER KANTAJA NAASIKYAYA" #x0D9E)
- ("SINHALA LETTER SANYAKA GAYANNA" #x0D9F)
- ("SINHALA LETTER ALPAPRAANA CAYANNA" #x0DA0)
- ("SINHALA LETTER MAHAAPRAANA CAYANNA" #x0DA1)
- ("SINHALA LETTER ALPAPRAANA JAYANNA" #x0DA2)
- ("SINHALA LETTER MAHAAPRAANA JAYANNA" #x0DA3)
- ("SINHALA LETTER TAALUJA NAASIKYAYA" #x0DA4)
- ("SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA" #x0DA5)
- ("SINHALA LETTER SANYAKA JAYANNA" #x0DA6)
- ("SINHALA LETTER ALPAPRAANA TTAYANNA" #x0DA7)
- ("SINHALA LETTER MAHAAPRAANA TTAYANNA" #x0DA8)
- ("SINHALA LETTER ALPAPRAANA DDAYANNA" #x0DA9)
- ("SINHALA LETTER MAHAAPRAANA DDAYANNA" #x0DAA)
- ("SINHALA LETTER MUURDHAJA NAYANNA" #x0DAB)
- ("SINHALA LETTER SANYAKA DDAYANNA" #x0DAC)
- ("SINHALA LETTER ALPAPRAANA TAYANNA" #x0DAD)
- ("SINHALA LETTER MAHAAPRAANA TAYANNA" #x0DAE)
- ("SINHALA LETTER ALPAPRAANA DAYANNA" #x0DAF)
- ("SINHALA LETTER MAHAAPRAANA DAYANNA" #x0DB0)
- ("SINHALA LETTER DANTAJA NAYANNA" #x0DB1)
- ("SINHALA LETTER SANYAKA DAYANNA" #x0DB3)
- ("SINHALA LETTER ALPAPRAANA PAYANNA" #x0DB4)
- ("SINHALA LETTER MAHAAPRAANA PAYANNA" #x0DB5)
- ("SINHALA LETTER ALPAPRAANA BAYANNA" #x0DB6)
- ("SINHALA LETTER MAHAAPRAANA BAYANNA" #x0DB7)
- ("SINHALA LETTER MAYANNA" #x0DB8)
- ("SINHALA LETTER AMBA BAYANNA" #x0DB9)
- ("SINHALA LETTER YAYANNA" #x0DBA)
- ("SINHALA LETTER RAYANNA" #x0DBB)
- ("SINHALA LETTER DANTAJA LAYANNA" #x0DBD)
- ("SINHALA LETTER VAYANNA" #x0DC0)
- ("SINHALA LETTER TAALUJA SAYANNA" #x0DC1)
- ("SINHALA LETTER MUURDHAJA SAYANNA" #x0DC2)
- ("SINHALA LETTER DANTAJA SAYANNA" #x0DC3)
- ("SINHALA LETTER HAYANNA" #x0DC4)
- ("SINHALA LETTER MUURDHAJA LAYANNA" #x0DC5)
- ("SINHALA LETTER FAYANNA" #x0DC6)
- ("SINHALA SIGN AL-LAKUNA" #x0DCA)
- ("SINHALA VOWEL SIGN AELA-PILLA" #x0DCF)
- ("SINHALA VOWEL SIGN KETTI AEDA-PILLA" #x0DD0)
- ("SINHALA VOWEL SIGN DIGA AEDA-PILLA" #x0DD1)
- ("SINHALA VOWEL SIGN KETTI IS-PILLA" #x0DD2)
- ("SINHALA VOWEL SIGN DIGA IS-PILLA" #x0DD3)
- ("SINHALA VOWEL SIGN KETTI PAA-PILLA" #x0DD4)
- ("SINHALA VOWEL SIGN DIGA PAA-PILLA" #x0DD6)
- ("SINHALA VOWEL SIGN GAETTA-PILLA" #x0DD8)
- ("SINHALA VOWEL SIGN KOMBUVA" #x0DD9)
- ("SINHALA VOWEL SIGN DIGA KOMBUVA" #x0DDA)
- ("SINHALA VOWEL SIGN KOMBU DEKA" #x0DDB)
- ("SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA" #x0DDC)
- ("SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA" #x0DDD)
- ("SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA" #x0DDE)
- ("SINHALA VOWEL SIGN GAYANUKITTA" #x0DDF)
- ("SINHALA VOWEL SIGN DIGA GAETTA-PILLA" #x0DF2)
- ("SINHALA VOWEL SIGN DIGA GAYANUKITTA" #x0DF3)
- ("SINHALA PUNCTUATION KUNDDALIYA" #x0DF4)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'thai
- '(("THAI CHARACTER KO KAI" #x0E01)
- ("THAI CHARACTER KHO KHAI" #x0E02)
- ("THAI CHARACTER KHO KHUAT" #x0E03)
- ("THAI CHARACTER KHO KHWAI" #x0E04)
- ("THAI CHARACTER KHO KHON" #x0E05)
- ("THAI CHARACTER KHO RAKHANG" #x0E06)
- ("THAI CHARACTER NGO NGU" #x0E07)
- ("THAI CHARACTER CHO CHAN" #x0E08)
- ("THAI CHARACTER CHO CHING" #x0E09)
- ("THAI CHARACTER CHO CHANG" #x0E0A)
- ("THAI CHARACTER SO SO" #x0E0B)
- ("THAI CHARACTER CHO CHOE" #x0E0C)
- ("THAI CHARACTER YO YING" #x0E0D)
- ("THAI CHARACTER DO CHADA" #x0E0E)
- ("THAI CHARACTER TO PATAK" #x0E0F)
- ("THAI CHARACTER THO THAN" #x0E10)
- ("THAI CHARACTER THO NANGMONTHO" #x0E11)
- ("THAI CHARACTER THO PHUTHAO" #x0E12)
- ("THAI CHARACTER NO NEN" #x0E13)
- ("THAI CHARACTER DO DEK" #x0E14)
- ("THAI CHARACTER TO TAO" #x0E15)
- ("THAI CHARACTER THO THUNG" #x0E16)
- ("THAI CHARACTER THO THAHAN" #x0E17)
- ("THAI CHARACTER THO THONG" #x0E18)
- ("THAI CHARACTER NO NU" #x0E19)
- ("THAI CHARACTER BO BAIMAI" #x0E1A)
- ("THAI CHARACTER PO PLA" #x0E1B)
- ("THAI CHARACTER PHO PHUNG" #x0E1C)
- ("THAI CHARACTER FO FA" #x0E1D)
- ("THAI CHARACTER PHO PHAN" #x0E1E)
- ("THAI CHARACTER FO FAN" #x0E1F)
- ("THAI CHARACTER PHO SAMPHAO" #x0E20)
- ("THAI CHARACTER MO MA" #x0E21)
- ("THAI CHARACTER YO YAK" #x0E22)
- ("THAI CHARACTER RO RUA" #x0E23)
- ("THAI CHARACTER RU" #x0E24)
- ("THAI CHARACTER LO LING" #x0E25)
- ("THAI CHARACTER LU" #x0E26)
- ("THAI CHARACTER WO WAEN" #x0E27)
- ("THAI CHARACTER SO SALA" #x0E28)
- ("THAI CHARACTER SO RUSI" #x0E29)
- ("THAI CHARACTER SO SUA" #x0E2A)
- ("THAI CHARACTER HO HIP" #x0E2B)
- ("THAI CHARACTER LO CHULA" #x0E2C)
- ("THAI CHARACTER O ANG" #x0E2D)
- ("THAI CHARACTER HO NOKHUK" #x0E2E)
- ("THAI CHARACTER PAIYANNOI" #x0E2F)
- ("THAI CHARACTER SARA A" #x0E30)
- ("THAI CHARACTER MAI HAN-AKAT" #x0E31)
- ("THAI CHARACTER SARA AA" #x0E32)
- ("THAI CHARACTER SARA AM" #x0E33)
- ("THAI CHARACTER SARA I" #x0E34)
- ("THAI CHARACTER SARA II" #x0E35)
- ("THAI CHARACTER SARA UE" #x0E36)
- ("THAI CHARACTER SARA UEE" #x0E37)
- ("THAI CHARACTER SARA U" #x0E38)
- ("THAI CHARACTER SARA UU" #x0E39)
- ("THAI CHARACTER PHINTHU" #x0E3A)
- ("THAI CURRENCY SYMBOL BAHT" #x0E3F)
- ("THAI CHARACTER SARA E" #x0E40)
- ("THAI CHARACTER SARA AE" #x0E41)
- ("THAI CHARACTER SARA O" #x0E42)
- ("THAI CHARACTER SARA AI MAIMUAN" #x0E43)
- ("THAI CHARACTER SARA AI MAIMALAI" #x0E44)
- ("THAI CHARACTER LAKKHANGYAO" #x0E45)
- ("THAI CHARACTER MAIYAMOK" #x0E46)
- ("THAI CHARACTER MAITAIKHU" #x0E47)
- ("THAI CHARACTER MAI EK" #x0E48)
- ("THAI CHARACTER MAI THO" #x0E49)
- ("THAI CHARACTER MAI TRI" #x0E4A)
- ("THAI CHARACTER MAI CHATTAWA" #x0E4B)
- ("THAI CHARACTER THANTHAKHAT" #x0E4C)
- ("THAI CHARACTER NIKHAHIT" #x0E4D)
- ("THAI CHARACTER YAMAKKAN" #x0E4E)
- ("THAI CHARACTER FONGMAN" #x0E4F)
- ("THAI DIGIT ZERO" #x0E50)
- ("THAI DIGIT ONE" #x0E51)
- ("THAI DIGIT TWO" #x0E52)
- ("THAI DIGIT THREE" #x0E53)
- ("THAI DIGIT FOUR" #x0E54)
- ("THAI DIGIT FIVE" #x0E55)
- ("THAI DIGIT SIX" #x0E56)
- ("THAI DIGIT SEVEN" #x0E57)
- ("THAI DIGIT EIGHT" #x0E58)
- ("THAI DIGIT NINE" #x0E59)
- ("THAI CHARACTER ANGKHANKHU" #x0E5A)
- ("THAI CHARACTER KHOMUT" #x0E5B)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'lao
- '(("LAO LETTER KO" #x0E81)
- ("LAO LETTER KHO SUNG" #x0E82)
- ("LAO LETTER KHO TAM" #x0E84)
- ("LAO LETTER NGO" #x0E87)
- ("LAO LETTER CO" #x0E88)
- ("LAO LETTER SO TAM" #x0E8A)
- ("LAO LETTER NYO" #x0E8D)
- ("LAO LETTER DO" #x0E94)
- ("LAO LETTER TO" #x0E95)
- ("LAO LETTER THO SUNG" #x0E96)
- ("LAO LETTER THO TAM" #x0E97)
- ("LAO LETTER NO" #x0E99)
- ("LAO LETTER BO" #x0E9A)
- ("LAO LETTER PO" #x0E9B)
- ("LAO LETTER PHO SUNG" #x0E9C)
- ("LAO LETTER FO TAM" #x0E9D)
- ("LAO LETTER PHO TAM" #x0E9E)
- ("LAO LETTER FO SUNG" #x0E9F)
- ("LAO LETTER MO" #x0EA1)
- ("LAO LETTER YO" #x0EA2)
- ("LAO LETTER LO LING" #x0EA3)
- ("LAO LETTER LO LOOT" #x0EA5)
- ("LAO LETTER WO" #x0EA7)
- ("LAO LETTER SO SUNG" #x0EAA)
- ("LAO LETTER HO SUNG" #x0EAB)
- ("LAO LETTER O" #x0EAD)
- ("LAO LETTER HO TAM" #x0EAE)
- ("LAO ELLIPSIS" #x0EAF)
- ("LAO VOWEL SIGN A" #x0EB0)
- ("LAO VOWEL SIGN MAI KAN" #x0EB1)
- ("LAO VOWEL SIGN AA" #x0EB2)
- ("LAO VOWEL SIGN AM" #x0EB3)
- ("LAO VOWEL SIGN I" #x0EB4)
- ("LAO VOWEL SIGN II" #x0EB5)
- ("LAO VOWEL SIGN Y" #x0EB6)
- ("LAO VOWEL SIGN YY" #x0EB7)
- ("LAO VOWEL SIGN U" #x0EB8)
- ("LAO VOWEL SIGN UU" #x0EB9)
- ("LAO VOWEL SIGN MAI KON" #x0EBB)
- ("LAO SEMIVOWEL SIGN LO" #x0EBC)
- ("LAO SEMIVOWEL SIGN NYO" #x0EBD)
- ("LAO VOWEL SIGN E" #x0EC0)
- ("LAO VOWEL SIGN EI" #x0EC1)
- ("LAO VOWEL SIGN O" #x0EC2)
- ("LAO VOWEL SIGN AY" #x0EC3)
- ("LAO VOWEL SIGN AI" #x0EC4)
- ("LAO KO LA" #x0EC6)
- ("LAO TONE MAI EK" #x0EC8)
- ("LAO TONE MAI THO" #x0EC9)
- ("LAO TONE MAI TI" #x0ECA)
- ("LAO TONE MAI CATAWA" #x0ECB)
- ("LAO CANCELLATION MARK" #x0ECC)
- ("LAO NIGGAHITA" #x0ECD)
- ("LAO DIGIT ZERO" #x0ED0)
- ("LAO DIGIT ONE" #x0ED1)
- ("LAO DIGIT TWO" #x0ED2)
- ("LAO DIGIT THREE" #x0ED3)
- ("LAO DIGIT FOUR" #x0ED4)
- ("LAO DIGIT FIVE" #x0ED5)
- ("LAO DIGIT SIX" #x0ED6)
- ("LAO DIGIT SEVEN" #x0ED7)
- ("LAO DIGIT EIGHT" #x0ED8)
- ("LAO DIGIT NINE" #x0ED9)
- ("LAO HO NO" #x0EDC)
- ("LAO HO MO" #x0EDD)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'tibetan
- '(("TIBETAN SYLLABLE OM" #x0F00)
- ("TIBETAN MARK GTER YIG MGO TRUNCATED A" #x0F01)
- ("TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA" #x0F02)
- ("TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA" #x0F03)
- ("TIBETAN MARK INITIAL YIG MGO MDUN MA" #x0F04)
- ("TIBETAN MARK CLOSING YIG MGO SGAB MA" #x0F05)
- ("TIBETAN MARK CARET YIG MGO PHUR SHAD MA" #x0F06)
- ("TIBETAN MARK YIG MGO TSHEG SHAD MA" #x0F07)
- ("TIBETAN MARK SBRUL SHAD" #x0F08)
- ("TIBETAN MARK BSKUR YIG MGO" #x0F09)
- ("TIBETAN MARK BKA- SHOG YIG MGO" #x0F0A)
- ("TIBETAN MARK INTERSYLLABIC TSHEG" #x0F0B)
- ("TIBETAN MARK DELIMITER TSHEG BSTAR" #x0F0C)
- ("TIBETAN MARK SHAD" #x0F0D)
- ("TIBETAN MARK NYIS SHAD" #x0F0E)
- ("TIBETAN MARK TSHEG SHAD" #x0F0F)
- ("TIBETAN MARK NYIS TSHEG SHAD" #x0F10)
- ("TIBETAN MARK RIN CHEN SPUNGS SHAD" #x0F11)
- ("TIBETAN MARK RGYA GRAM SHAD" #x0F12)
- ("TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN" #x0F13)
- ("TIBETAN MARK GTER TSHEG" #x0F14)
- ("TIBETAN LOGOTYPE SIGN CHAD RTAGS" #x0F15)
- ("TIBETAN LOGOTYPE SIGN LHAG RTAGS" #x0F16)
- ("TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS" #x0F17)
- ("TIBETAN ASTROLOGICAL SIGN -KHYUD PA" #x0F18)
- ("TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS" #x0F19)
- ("TIBETAN SIGN RDEL DKAR GCIG" #x0F1A)
- ("TIBETAN SIGN RDEL DKAR GNYIS" #x0F1B)
- ("TIBETAN SIGN RDEL DKAR GSUM" #x0F1C)
- ("TIBETAN SIGN RDEL NAG GCIG" #x0F1D)
- ("TIBETAN SIGN RDEL NAG GNYIS" #x0F1E)
- ("TIBETAN SIGN RDEL DKAR RDEL NAG" #x0F1F)
- ("TIBETAN DIGIT ZERO" #x0F20)
- ("TIBETAN DIGIT ONE" #x0F21)
- ("TIBETAN DIGIT TWO" #x0F22)
- ("TIBETAN DIGIT THREE" #x0F23)
- ("TIBETAN DIGIT FOUR" #x0F24)
- ("TIBETAN DIGIT FIVE" #x0F25)
- ("TIBETAN DIGIT SIX" #x0F26)
- ("TIBETAN DIGIT SEVEN" #x0F27)
- ("TIBETAN DIGIT EIGHT" #x0F28)
- ("TIBETAN DIGIT NINE" #x0F29)
- ("TIBETAN DIGIT HALF ONE" #x0F2A)
- ("TIBETAN DIGIT HALF TWO" #x0F2B)
- ("TIBETAN DIGIT HALF THREE" #x0F2C)
- ("TIBETAN DIGIT HALF FOUR" #x0F2D)
- ("TIBETAN DIGIT HALF FIVE" #x0F2E)
- ("TIBETAN DIGIT HALF SIX" #x0F2F)
- ("TIBETAN DIGIT HALF SEVEN" #x0F30)
- ("TIBETAN DIGIT HALF EIGHT" #x0F31)
- ("TIBETAN DIGIT HALF NINE" #x0F32)
- ("TIBETAN DIGIT HALF ZERO" #x0F33)
- ("TIBETAN MARK BSDUS RTAGS" #x0F34)
- ("TIBETAN MARK NGAS BZUNG NYI ZLA" #x0F35)
- ("TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN" #x0F36)
- ("TIBETAN MARK NGAS BZUNG SGOR RTAGS" #x0F37)
- ("TIBETAN MARK CHE MGO" #x0F38)
- ("TIBETAN MARK TSA -PHRU" #x0F39)
- ("TIBETAN MARK GUG RTAGS GYON" #x0F3A)
- ("TIBETAN MARK GUG RTAGS GYAS" #x0F3B)
- ("TIBETAN MARK ANG KHANG GYON" #x0F3C)
- ("TIBETAN MARK ANG KHANG GYAS" #x0F3D)
- ("TIBETAN SIGN YAR TSHES" #x0F3E)
- ("TIBETAN SIGN MAR TSHES" #x0F3F)
- ("TIBETAN LETTER KA" #x0F40)
- ("TIBETAN LETTER KHA" #x0F41)
- ("TIBETAN LETTER GA" #x0F42)
- ("TIBETAN LETTER GHA" #x0F43)
- ("TIBETAN LETTER NGA" #x0F44)
- ("TIBETAN LETTER CA" #x0F45)
- ("TIBETAN LETTER CHA" #x0F46)
- ("TIBETAN LETTER JA" #x0F47)
- ("TIBETAN LETTER NYA" #x0F49)
- ("TIBETAN LETTER TTA" #x0F4A)
- ("TIBETAN LETTER TTHA" #x0F4B)
- ("TIBETAN LETTER DDA" #x0F4C)
- ("TIBETAN LETTER DDHA" #x0F4D)
- ("TIBETAN LETTER NNA" #x0F4E)
- ("TIBETAN LETTER TA" #x0F4F)
- ("TIBETAN LETTER THA" #x0F50)
- ("TIBETAN LETTER DA" #x0F51)
- ("TIBETAN LETTER DHA" #x0F52)
- ("TIBETAN LETTER NA" #x0F53)
- ("TIBETAN LETTER PA" #x0F54)
- ("TIBETAN LETTER PHA" #x0F55)
- ("TIBETAN LETTER BA" #x0F56)
- ("TIBETAN LETTER BHA" #x0F57)
- ("TIBETAN LETTER MA" #x0F58)
- ("TIBETAN LETTER TSA" #x0F59)
- ("TIBETAN LETTER TSHA" #x0F5A)
- ("TIBETAN LETTER DZA" #x0F5B)
- ("TIBETAN LETTER DZHA" #x0F5C)
- ("TIBETAN LETTER WA" #x0F5D)
- ("TIBETAN LETTER ZHA" #x0F5E)
- ("TIBETAN LETTER ZA" #x0F5F)
- ("TIBETAN LETTER -A" #x0F60)
- ("TIBETAN LETTER YA" #x0F61)
- ("TIBETAN LETTER RA" #x0F62)
- ("TIBETAN LETTER LA" #x0F63)
- ("TIBETAN LETTER SHA" #x0F64)
- ("TIBETAN LETTER SSA" #x0F65)
- ("TIBETAN LETTER SA" #x0F66)
- ("TIBETAN LETTER HA" #x0F67)
- ("TIBETAN LETTER A" #x0F68)
- ("TIBETAN LETTER KSSA" #x0F69)
- ("TIBETAN LETTER FIXED-FORM RA" #x0F6A)
- ("TIBETAN VOWEL SIGN AA" #x0F71)
- ("TIBETAN VOWEL SIGN I" #x0F72)
- ("TIBETAN VOWEL SIGN II" #x0F73)
- ("TIBETAN VOWEL SIGN U" #x0F74)
- ("TIBETAN VOWEL SIGN UU" #x0F75)
- ("TIBETAN VOWEL SIGN VOCALIC R" #x0F76)
- ("TIBETAN VOWEL SIGN VOCALIC RR" #x0F77)
- ("TIBETAN VOWEL SIGN VOCALIC L" #x0F78)
- ("TIBETAN VOWEL SIGN VOCALIC LL" #x0F79)
- ("TIBETAN VOWEL SIGN E" #x0F7A)
- ("TIBETAN VOWEL SIGN EE" #x0F7B)
- ("TIBETAN VOWEL SIGN O" #x0F7C)
- ("TIBETAN VOWEL SIGN OO" #x0F7D)
- ("TIBETAN SIGN RJES SU NGA RO" #x0F7E)
- ("TIBETAN SIGN RNAM BCAD" #x0F7F)
- ("TIBETAN VOWEL SIGN REVERSED I" #x0F80)
- ("TIBETAN VOWEL SIGN REVERSED II" #x0F81)
- ("TIBETAN SIGN NYI ZLA NAA DA" #x0F82)
- ("TIBETAN SIGN SNA LDAN" #x0F83)
- ("TIBETAN MARK HALANTA" #x0F84)
- ("TIBETAN MARK PALUTA" #x0F85)
- ("TIBETAN SIGN LCI RTAGS" #x0F86)
- ("TIBETAN SIGN YANG RTAGS" #x0F87)
- ("TIBETAN SIGN LCE TSA CAN" #x0F88)
- ("TIBETAN SIGN MCHU CAN" #x0F89)
- ("TIBETAN SIGN GRU CAN RGYINGS" #x0F8A)
- ("TIBETAN SIGN GRU MED RGYINGS" #x0F8B)
- ("TIBETAN SUBJOINED LETTER KA" #x0F90)
- ("TIBETAN SUBJOINED LETTER KHA" #x0F91)
- ("TIBETAN SUBJOINED LETTER GA" #x0F92)
- ("TIBETAN SUBJOINED LETTER GHA" #x0F93)
- ("TIBETAN SUBJOINED LETTER NGA" #x0F94)
- ("TIBETAN SUBJOINED LETTER CA" #x0F95)
- ("TIBETAN SUBJOINED LETTER CHA" #x0F96)
- ("TIBETAN SUBJOINED LETTER JA" #x0F97)
- ("TIBETAN SUBJOINED LETTER NYA" #x0F99)
- ("TIBETAN SUBJOINED LETTER TTA" #x0F9A)
- ("TIBETAN SUBJOINED LETTER TTHA" #x0F9B)
- ("TIBETAN SUBJOINED LETTER DDA" #x0F9C)
- ("TIBETAN SUBJOINED LETTER DDHA" #x0F9D)
- ("TIBETAN SUBJOINED LETTER NNA" #x0F9E)
- ("TIBETAN SUBJOINED LETTER TA" #x0F9F)
- ("TIBETAN SUBJOINED LETTER THA" #x0FA0)
- ("TIBETAN SUBJOINED LETTER DA" #x0FA1)
- ("TIBETAN SUBJOINED LETTER DHA" #x0FA2)
- ("TIBETAN SUBJOINED LETTER NA" #x0FA3)
- ("TIBETAN SUBJOINED LETTER PA" #x0FA4)
- ("TIBETAN SUBJOINED LETTER PHA" #x0FA5)
- ("TIBETAN SUBJOINED LETTER BA" #x0FA6)
- ("TIBETAN SUBJOINED LETTER BHA" #x0FA7)
- ("TIBETAN SUBJOINED LETTER MA" #x0FA8)
- ("TIBETAN SUBJOINED LETTER TSA" #x0FA9)
- ("TIBETAN SUBJOINED LETTER TSHA" #x0FAA)
- ("TIBETAN SUBJOINED LETTER DZA" #x0FAB)
- ("TIBETAN SUBJOINED LETTER DZHA" #x0FAC)
- ("TIBETAN SUBJOINED LETTER WA" #x0FAD)
- ("TIBETAN SUBJOINED LETTER ZHA" #x0FAE)
- ("TIBETAN SUBJOINED LETTER ZA" #x0FAF)
- ("TIBETAN SUBJOINED LETTER -A" #x0FB0)
- ("TIBETAN SUBJOINED LETTER YA" #x0FB1)
- ("TIBETAN SUBJOINED LETTER RA" #x0FB2)
- ("TIBETAN SUBJOINED LETTER LA" #x0FB3)
- ("TIBETAN SUBJOINED LETTER SHA" #x0FB4)
- ("TIBETAN SUBJOINED LETTER SSA" #x0FB5)
- ("TIBETAN SUBJOINED LETTER SA" #x0FB6)
- ("TIBETAN SUBJOINED LETTER HA" #x0FB7)
- ("TIBETAN SUBJOINED LETTER A" #x0FB8)
- ("TIBETAN SUBJOINED LETTER KSSA" #x0FB9)
- ("TIBETAN SUBJOINED LETTER FIXED-FORM WA" #x0FBA)
- ("TIBETAN SUBJOINED LETTER FIXED-FORM YA" #x0FBB)
- ("TIBETAN SUBJOINED LETTER FIXED-FORM RA" #x0FBC)
- ("TIBETAN KU RU KHA" #x0FBE)
- ("TIBETAN KU RU KHA BZHI MIG CAN" #x0FBF)
- ("TIBETAN CANTILLATION SIGN HEAVY BEAT" #x0FC0)
- ("TIBETAN CANTILLATION SIGN LIGHT BEAT" #x0FC1)
- ("TIBETAN CANTILLATION SIGN CANG TE-U" #x0FC2)
- ("TIBETAN CANTILLATION SIGN SBUB -CHAL" #x0FC3)
- ("TIBETAN SYMBOL DRIL BU" #x0FC4)
- ("TIBETAN SYMBOL RDO RJE" #x0FC5)
- ("TIBETAN SYMBOL PADMA GDAN" #x0FC6)
- ("TIBETAN SYMBOL RDO RJE RGYA GRAM" #x0FC7)
- ("TIBETAN SYMBOL PHUR PA" #x0FC8)
- ("TIBETAN SYMBOL NOR BU" #x0FC9)
- ("TIBETAN SYMBOL NOR BU NYIS -KHYIL" #x0FCA)
- ("TIBETAN SYMBOL NOR BU GSUM -KHYIL" #x0FCB)
- ("TIBETAN SYMBOL NOR BU BZHI -KHYIL" #x0FCC)
- ("TIBETAN SIGN RDEL NAG GSUM" #x0FCF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'myanmar
- '(("MYANMAR LETTER KA" #x1000)
- ("MYANMAR LETTER KHA" #x1001)
- ("MYANMAR LETTER GA" #x1002)
- ("MYANMAR LETTER GHA" #x1003)
- ("MYANMAR LETTER NGA" #x1004)
- ("MYANMAR LETTER CA" #x1005)
- ("MYANMAR LETTER CHA" #x1006)
- ("MYANMAR LETTER JA" #x1007)
- ("MYANMAR LETTER JHA" #x1008)
- ("MYANMAR LETTER NYA" #x1009)
- ("MYANMAR LETTER NNYA" #x100A)
- ("MYANMAR LETTER TTA" #x100B)
- ("MYANMAR LETTER TTHA" #x100C)
- ("MYANMAR LETTER DDA" #x100D)
- ("MYANMAR LETTER DDHA" #x100E)
- ("MYANMAR LETTER NNA" #x100F)
- ("MYANMAR LETTER TA" #x1010)
- ("MYANMAR LETTER THA" #x1011)
- ("MYANMAR LETTER DA" #x1012)
- ("MYANMAR LETTER DHA" #x1013)
- ("MYANMAR LETTER NA" #x1014)
- ("MYANMAR LETTER PA" #x1015)
- ("MYANMAR LETTER PHA" #x1016)
- ("MYANMAR LETTER BA" #x1017)
- ("MYANMAR LETTER BHA" #x1018)
- ("MYANMAR LETTER MA" #x1019)
- ("MYANMAR LETTER YA" #x101A)
- ("MYANMAR LETTER RA" #x101B)
- ("MYANMAR LETTER LA" #x101C)
- ("MYANMAR LETTER WA" #x101D)
- ("MYANMAR LETTER SA" #x101E)
- ("MYANMAR LETTER HA" #x101F)
- ("MYANMAR LETTER LLA" #x1020)
- ("MYANMAR LETTER A" #x1021)
- ("MYANMAR LETTER I" #x1023)
- ("MYANMAR LETTER II" #x1024)
- ("MYANMAR LETTER U" #x1025)
- ("MYANMAR LETTER UU" #x1026)
- ("MYANMAR LETTER E" #x1027)
- ("MYANMAR LETTER O" #x1029)
- ("MYANMAR LETTER AU" #x102A)
- ("MYANMAR VOWEL SIGN AA" #x102C)
- ("MYANMAR VOWEL SIGN I" #x102D)
- ("MYANMAR VOWEL SIGN II" #x102E)
- ("MYANMAR VOWEL SIGN U" #x102F)
- ("MYANMAR VOWEL SIGN UU" #x1030)
- ("MYANMAR VOWEL SIGN E" #x1031)
- ("MYANMAR VOWEL SIGN AI" #x1032)
- ("MYANMAR SIGN ANUSVARA" #x1036)
- ("MYANMAR SIGN DOT BELOW" #x1037)
- ("MYANMAR SIGN VISARGA" #x1038)
- ("MYANMAR SIGN VIRAMA" #x1039)
- ("MYANMAR DIGIT ZERO" #x1040)
- ("MYANMAR DIGIT ONE" #x1041)
- ("MYANMAR DIGIT TWO" #x1042)
- ("MYANMAR DIGIT THREE" #x1043)
- ("MYANMAR DIGIT FOUR" #x1044)
- ("MYANMAR DIGIT FIVE" #x1045)
- ("MYANMAR DIGIT SIX" #x1046)
- ("MYANMAR DIGIT SEVEN" #x1047)
- ("MYANMAR DIGIT EIGHT" #x1048)
- ("MYANMAR DIGIT NINE" #x1049)
- ("MYANMAR SIGN LITTLE SECTION" #x104A)
- ("MYANMAR SIGN SECTION" #x104B)
- ("MYANMAR SYMBOL LOCATIVE" #x104C)
- ("MYANMAR SYMBOL COMPLETED" #x104D)
- ("MYANMAR SYMBOL AFOREMENTIONED" #x104E)
- ("MYANMAR SYMBOL GENITIVE" #x104F)
- ("MYANMAR LETTER SHA" #x1050)
- ("MYANMAR LETTER SSA" #x1051)
- ("MYANMAR LETTER VOCALIC R" #x1052)
- ("MYANMAR LETTER VOCALIC RR" #x1053)
- ("MYANMAR LETTER VOCALIC L" #x1054)
- ("MYANMAR LETTER VOCALIC LL" #x1055)
- ("MYANMAR VOWEL SIGN VOCALIC R" #x1056)
- ("MYANMAR VOWEL SIGN VOCALIC RR" #x1057)
- ("MYANMAR VOWEL SIGN VOCALIC L" #x1058)
- ("MYANMAR VOWEL SIGN VOCALIC LL" #x1059)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'georgian
- '(("GEORGIAN CAPITAL LETTER AN" #x10A0)
- ("GEORGIAN CAPITAL LETTER BAN" #x10A1)
- ("GEORGIAN CAPITAL LETTER GAN" #x10A2)
- ("GEORGIAN CAPITAL LETTER DON" #x10A3)
- ("GEORGIAN CAPITAL LETTER EN" #x10A4)
- ("GEORGIAN CAPITAL LETTER VIN" #x10A5)
- ("GEORGIAN CAPITAL LETTER ZEN" #x10A6)
- ("GEORGIAN CAPITAL LETTER TAN" #x10A7)
- ("GEORGIAN CAPITAL LETTER IN" #x10A8)
- ("GEORGIAN CAPITAL LETTER KAN" #x10A9)
- ("GEORGIAN CAPITAL LETTER LAS" #x10AA)
- ("GEORGIAN CAPITAL LETTER MAN" #x10AB)
- ("GEORGIAN CAPITAL LETTER NAR" #x10AC)
- ("GEORGIAN CAPITAL LETTER ON" #x10AD)
- ("GEORGIAN CAPITAL LETTER PAR" #x10AE)
- ("GEORGIAN CAPITAL LETTER ZHAR" #x10AF)
- ("GEORGIAN CAPITAL LETTER RAE" #x10B0)
- ("GEORGIAN CAPITAL LETTER SAN" #x10B1)
- ("GEORGIAN CAPITAL LETTER TAR" #x10B2)
- ("GEORGIAN CAPITAL LETTER UN" #x10B3)
- ("GEORGIAN CAPITAL LETTER PHAR" #x10B4)
- ("GEORGIAN CAPITAL LETTER KHAR" #x10B5)
- ("GEORGIAN CAPITAL LETTER GHAN" #x10B6)
- ("GEORGIAN CAPITAL LETTER QAR" #x10B7)
- ("GEORGIAN CAPITAL LETTER SHIN" #x10B8)
- ("GEORGIAN CAPITAL LETTER CHIN" #x10B9)
- ("GEORGIAN CAPITAL LETTER CAN" #x10BA)
- ("GEORGIAN CAPITAL LETTER JIL" #x10BB)
- ("GEORGIAN CAPITAL LETTER CIL" #x10BC)
- ("GEORGIAN CAPITAL LETTER CHAR" #x10BD)
- ("GEORGIAN CAPITAL LETTER XAN" #x10BE)
- ("GEORGIAN CAPITAL LETTER JHAN" #x10BF)
- ("GEORGIAN CAPITAL LETTER HAE" #x10C0)
- ("GEORGIAN CAPITAL LETTER HE" #x10C1)
- ("GEORGIAN CAPITAL LETTER HIE" #x10C2)
- ("GEORGIAN CAPITAL LETTER WE" #x10C3)
- ("GEORGIAN CAPITAL LETTER HAR" #x10C4)
- ("GEORGIAN CAPITAL LETTER HOE" #x10C5)
- ("GEORGIAN LETTER AN" #x10D0)
- ("GEORGIAN LETTER BAN" #x10D1)
- ("GEORGIAN LETTER GAN" #x10D2)
- ("GEORGIAN LETTER DON" #x10D3)
- ("GEORGIAN LETTER EN" #x10D4)
- ("GEORGIAN LETTER VIN" #x10D5)
- ("GEORGIAN LETTER ZEN" #x10D6)
- ("GEORGIAN LETTER TAN" #x10D7)
- ("GEORGIAN LETTER IN" #x10D8)
- ("GEORGIAN LETTER KAN" #x10D9)
- ("GEORGIAN LETTER LAS" #x10DA)
- ("GEORGIAN LETTER MAN" #x10DB)
- ("GEORGIAN LETTER NAR" #x10DC)
- ("GEORGIAN LETTER ON" #x10DD)
- ("GEORGIAN LETTER PAR" #x10DE)
- ("GEORGIAN LETTER ZHAR" #x10DF)
- ("GEORGIAN LETTER RAE" #x10E0)
- ("GEORGIAN LETTER SAN" #x10E1)
- ("GEORGIAN LETTER TAR" #x10E2)
- ("GEORGIAN LETTER UN" #x10E3)
- ("GEORGIAN LETTER PHAR" #x10E4)
- ("GEORGIAN LETTER KHAR" #x10E5)
- ("GEORGIAN LETTER GHAN" #x10E6)
- ("GEORGIAN LETTER QAR" #x10E7)
- ("GEORGIAN LETTER SHIN" #x10E8)
- ("GEORGIAN LETTER CHIN" #x10E9)
- ("GEORGIAN LETTER CAN" #x10EA)
- ("GEORGIAN LETTER JIL" #x10EB)
- ("GEORGIAN LETTER CIL" #x10EC)
- ("GEORGIAN LETTER CHAR" #x10ED)
- ("GEORGIAN LETTER XAN" #x10EE)
- ("GEORGIAN LETTER JHAN" #x10EF)
- ("GEORGIAN LETTER HAE" #x10F0)
- ("GEORGIAN LETTER HE" #x10F1)
- ("GEORGIAN LETTER HIE" #x10F2)
- ("GEORGIAN LETTER WE" #x10F3)
- ("GEORGIAN LETTER HAR" #x10F4)
- ("GEORGIAN LETTER HOE" #x10F5)
- ("GEORGIAN LETTER FI" #x10F6)
- ("GEORGIAN LETTER YN" #x10F7)
- ("GEORGIAN LETTER ELIFI" #x10F8)
- ("GEORGIAN PARAGRAPH SEPARATOR" #x10FB)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'hangul-jamo
- '(("HANGUL CHOSEONG KIYEOK" #x1100)
- ("HANGUL CHOSEONG SSANGKIYEOK" #x1101)
- ("HANGUL CHOSEONG NIEUN" #x1102)
- ("HANGUL CHOSEONG TIKEUT" #x1103)
- ("HANGUL CHOSEONG SSANGTIKEUT" #x1104)
- ("HANGUL CHOSEONG RIEUL" #x1105)
- ("HANGUL CHOSEONG MIEUM" #x1106)
- ("HANGUL CHOSEONG PIEUP" #x1107)
- ("HANGUL CHOSEONG SSANGPIEUP" #x1108)
- ("HANGUL CHOSEONG SIOS" #x1109)
- ("HANGUL CHOSEONG SSANGSIOS" #x110A)
- ("HANGUL CHOSEONG IEUNG" #x110B)
- ("HANGUL CHOSEONG CIEUC" #x110C)
- ("HANGUL CHOSEONG SSANGCIEUC" #x110D)
- ("HANGUL CHOSEONG CHIEUCH" #x110E)
- ("HANGUL CHOSEONG KHIEUKH" #x110F)
- ("HANGUL CHOSEONG THIEUTH" #x1110)
- ("HANGUL CHOSEONG PHIEUPH" #x1111)
- ("HANGUL CHOSEONG HIEUH" #x1112)
- ("HANGUL CHOSEONG NIEUN-KIYEOK" #x1113)
- ("HANGUL CHOSEONG SSANGNIEUN" #x1114)
- ("HANGUL CHOSEONG NIEUN-TIKEUT" #x1115)
- ("HANGUL CHOSEONG NIEUN-PIEUP" #x1116)
- ("HANGUL CHOSEONG TIKEUT-KIYEOK" #x1117)
- ("HANGUL CHOSEONG RIEUL-NIEUN" #x1118)
- ("HANGUL CHOSEONG SSANGRIEUL" #x1119)
- ("HANGUL CHOSEONG RIEUL-HIEUH" #x111A)
- ("HANGUL CHOSEONG KAPYEOUNRIEUL" #x111B)
- ("HANGUL CHOSEONG MIEUM-PIEUP" #x111C)
- ("HANGUL CHOSEONG KAPYEOUNMIEUM" #x111D)
- ("HANGUL CHOSEONG PIEUP-KIYEOK" #x111E)
- ("HANGUL CHOSEONG PIEUP-NIEUN" #x111F)
- ("HANGUL CHOSEONG PIEUP-TIKEUT" #x1120)
- ("HANGUL CHOSEONG PIEUP-SIOS" #x1121)
- ("HANGUL CHOSEONG PIEUP-SIOS-KIYEOK" #x1122)
- ("HANGUL CHOSEONG PIEUP-SIOS-TIKEUT" #x1123)
- ("HANGUL CHOSEONG PIEUP-SIOS-PIEUP" #x1124)
- ("HANGUL CHOSEONG PIEUP-SSANGSIOS" #x1125)
- ("HANGUL CHOSEONG PIEUP-SIOS-CIEUC" #x1126)
- ("HANGUL CHOSEONG PIEUP-CIEUC" #x1127)
- ("HANGUL CHOSEONG PIEUP-CHIEUCH" #x1128)
- ("HANGUL CHOSEONG PIEUP-THIEUTH" #x1129)
- ("HANGUL CHOSEONG PIEUP-PHIEUPH" #x112A)
- ("HANGUL CHOSEONG KAPYEOUNPIEUP" #x112B)
- ("HANGUL CHOSEONG KAPYEOUNSSANGPIEUP" #x112C)
- ("HANGUL CHOSEONG SIOS-KIYEOK" #x112D)
- ("HANGUL CHOSEONG SIOS-NIEUN" #x112E)
- ("HANGUL CHOSEONG SIOS-TIKEUT" #x112F)
- ("HANGUL CHOSEONG SIOS-RIEUL" #x1130)
- ("HANGUL CHOSEONG SIOS-MIEUM" #x1131)
- ("HANGUL CHOSEONG SIOS-PIEUP" #x1132)
- ("HANGUL CHOSEONG SIOS-PIEUP-KIYEOK" #x1133)
- ("HANGUL CHOSEONG SIOS-SSANGSIOS" #x1134)
- ("HANGUL CHOSEONG SIOS-IEUNG" #x1135)
- ("HANGUL CHOSEONG SIOS-CIEUC" #x1136)
- ("HANGUL CHOSEONG SIOS-CHIEUCH" #x1137)
- ("HANGUL CHOSEONG SIOS-KHIEUKH" #x1138)
- ("HANGUL CHOSEONG SIOS-THIEUTH" #x1139)
- ("HANGUL CHOSEONG SIOS-PHIEUPH" #x113A)
- ("HANGUL CHOSEONG SIOS-HIEUH" #x113B)
- ("HANGUL CHOSEONG CHITUEUMSIOS" #x113C)
- ("HANGUL CHOSEONG CHITUEUMSSANGSIOS" #x113D)
- ("HANGUL CHOSEONG CEONGCHIEUMSIOS" #x113E)
- ("HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS" #x113F)
- ("HANGUL CHOSEONG PANSIOS" #x1140)
- ("HANGUL CHOSEONG IEUNG-KIYEOK" #x1141)
- ("HANGUL CHOSEONG IEUNG-TIKEUT" #x1142)
- ("HANGUL CHOSEONG IEUNG-MIEUM" #x1143)
- ("HANGUL CHOSEONG IEUNG-PIEUP" #x1144)
- ("HANGUL CHOSEONG IEUNG-SIOS" #x1145)
- ("HANGUL CHOSEONG IEUNG-PANSIOS" #x1146)
- ("HANGUL CHOSEONG SSANGIEUNG" #x1147)
- ("HANGUL CHOSEONG IEUNG-CIEUC" #x1148)
- ("HANGUL CHOSEONG IEUNG-CHIEUCH" #x1149)
- ("HANGUL CHOSEONG IEUNG-THIEUTH" #x114A)
- ("HANGUL CHOSEONG IEUNG-PHIEUPH" #x114B)
- ("HANGUL CHOSEONG YESIEUNG" #x114C)
- ("HANGUL CHOSEONG CIEUC-IEUNG" #x114D)
- ("HANGUL CHOSEONG CHITUEUMCIEUC" #x114E)
- ("HANGUL CHOSEONG CHITUEUMSSANGCIEUC" #x114F)
- ("HANGUL CHOSEONG CEONGCHIEUMCIEUC" #x1150)
- ("HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC" #x1151)
- ("HANGUL CHOSEONG CHIEUCH-KHIEUKH" #x1152)
- ("HANGUL CHOSEONG CHIEUCH-HIEUH" #x1153)
- ("HANGUL CHOSEONG CHITUEUMCHIEUCH" #x1154)
- ("HANGUL CHOSEONG CEONGCHIEUMCHIEUCH" #x1155)
- ("HANGUL CHOSEONG PHIEUPH-PIEUP" #x1156)
- ("HANGUL CHOSEONG KAPYEOUNPHIEUPH" #x1157)
- ("HANGUL CHOSEONG SSANGHIEUH" #x1158)
- ("HANGUL CHOSEONG YEORINHIEUH" #x1159)
- ("HANGUL CHOSEONG FILLER" #x115F)
- ("HANGUL JUNGSEONG FILLER" #x1160)
- ("HANGUL JUNGSEONG A" #x1161)
- ("HANGUL JUNGSEONG AE" #x1162)
- ("HANGUL JUNGSEONG YA" #x1163)
- ("HANGUL JUNGSEONG YAE" #x1164)
- ("HANGUL JUNGSEONG EO" #x1165)
- ("HANGUL JUNGSEONG E" #x1166)
- ("HANGUL JUNGSEONG YEO" #x1167)
- ("HANGUL JUNGSEONG YE" #x1168)
- ("HANGUL JUNGSEONG O" #x1169)
- ("HANGUL JUNGSEONG WA" #x116A)
- ("HANGUL JUNGSEONG WAE" #x116B)
- ("HANGUL JUNGSEONG OE" #x116C)
- ("HANGUL JUNGSEONG YO" #x116D)
- ("HANGUL JUNGSEONG U" #x116E)
- ("HANGUL JUNGSEONG WEO" #x116F)
- ("HANGUL JUNGSEONG WE" #x1170)
- ("HANGUL JUNGSEONG WI" #x1171)
- ("HANGUL JUNGSEONG YU" #x1172)
- ("HANGUL JUNGSEONG EU" #x1173)
- ("HANGUL JUNGSEONG YI" #x1174)
- ("HANGUL JUNGSEONG I" #x1175)
- ("HANGUL JUNGSEONG A-O" #x1176)
- ("HANGUL JUNGSEONG A-U" #x1177)
- ("HANGUL JUNGSEONG YA-O" #x1178)
- ("HANGUL JUNGSEONG YA-YO" #x1179)
- ("HANGUL JUNGSEONG EO-O" #x117A)
- ("HANGUL JUNGSEONG EO-U" #x117B)
- ("HANGUL JUNGSEONG EO-EU" #x117C)
- ("HANGUL JUNGSEONG YEO-O" #x117D)
- ("HANGUL JUNGSEONG YEO-U" #x117E)
- ("HANGUL JUNGSEONG O-EO" #x117F)
- ("HANGUL JUNGSEONG O-E" #x1180)
- ("HANGUL JUNGSEONG O-YE" #x1181)
- ("HANGUL JUNGSEONG O-O" #x1182)
- ("HANGUL JUNGSEONG O-U" #x1183)
- ("HANGUL JUNGSEONG YO-YA" #x1184)
- ("HANGUL JUNGSEONG YO-YAE" #x1185)
- ("HANGUL JUNGSEONG YO-YEO" #x1186)
- ("HANGUL JUNGSEONG YO-O" #x1187)
- ("HANGUL JUNGSEONG YO-I" #x1188)
- ("HANGUL JUNGSEONG U-A" #x1189)
- ("HANGUL JUNGSEONG U-AE" #x118A)
- ("HANGUL JUNGSEONG U-EO-EU" #x118B)
- ("HANGUL JUNGSEONG U-YE" #x118C)
- ("HANGUL JUNGSEONG U-U" #x118D)
- ("HANGUL JUNGSEONG YU-A" #x118E)
- ("HANGUL JUNGSEONG YU-EO" #x118F)
- ("HANGUL JUNGSEONG YU-E" #x1190)
- ("HANGUL JUNGSEONG YU-YEO" #x1191)
- ("HANGUL JUNGSEONG YU-YE" #x1192)
- ("HANGUL JUNGSEONG YU-U" #x1193)
- ("HANGUL JUNGSEONG YU-I" #x1194)
- ("HANGUL JUNGSEONG EU-U" #x1195)
- ("HANGUL JUNGSEONG EU-EU" #x1196)
- ("HANGUL JUNGSEONG YI-U" #x1197)
- ("HANGUL JUNGSEONG I-A" #x1198)
- ("HANGUL JUNGSEONG I-YA" #x1199)
- ("HANGUL JUNGSEONG I-O" #x119A)
- ("HANGUL JUNGSEONG I-U" #x119B)
- ("HANGUL JUNGSEONG I-EU" #x119C)
- ("HANGUL JUNGSEONG I-ARAEA" #x119D)
- ("HANGUL JUNGSEONG ARAEA" #x119E)
- ("HANGUL JUNGSEONG ARAEA-EO" #x119F)
- ("HANGUL JUNGSEONG ARAEA-U" #x11A0)
- ("HANGUL JUNGSEONG ARAEA-I" #x11A1)
- ("HANGUL JUNGSEONG SSANGARAEA" #x11A2)
- ("HANGUL JONGSEONG KIYEOK" #x11A8)
- ("HANGUL JONGSEONG SSANGKIYEOK" #x11A9)
- ("HANGUL JONGSEONG KIYEOK-SIOS" #x11AA)
- ("HANGUL JONGSEONG NIEUN" #x11AB)
- ("HANGUL JONGSEONG NIEUN-CIEUC" #x11AC)
- ("HANGUL JONGSEONG NIEUN-HIEUH" #x11AD)
- ("HANGUL JONGSEONG TIKEUT" #x11AE)
- ("HANGUL JONGSEONG RIEUL" #x11AF)
- ("HANGUL JONGSEONG RIEUL-KIYEOK" #x11B0)
- ("HANGUL JONGSEONG RIEUL-MIEUM" #x11B1)
- ("HANGUL JONGSEONG RIEUL-PIEUP" #x11B2)
- ("HANGUL JONGSEONG RIEUL-SIOS" #x11B3)
- ("HANGUL JONGSEONG RIEUL-THIEUTH" #x11B4)
- ("HANGUL JONGSEONG RIEUL-PHIEUPH" #x11B5)
- ("HANGUL JONGSEONG RIEUL-HIEUH" #x11B6)
- ("HANGUL JONGSEONG MIEUM" #x11B7)
- ("HANGUL JONGSEONG PIEUP" #x11B8)
- ("HANGUL JONGSEONG PIEUP-SIOS" #x11B9)
- ("HANGUL JONGSEONG SIOS" #x11BA)
- ("HANGUL JONGSEONG SSANGSIOS" #x11BB)
- ("HANGUL JONGSEONG IEUNG" #x11BC)
- ("HANGUL JONGSEONG CIEUC" #x11BD)
- ("HANGUL JONGSEONG CHIEUCH" #x11BE)
- ("HANGUL JONGSEONG KHIEUKH" #x11BF)
- ("HANGUL JONGSEONG THIEUTH" #x11C0)
- ("HANGUL JONGSEONG PHIEUPH" #x11C1)
- ("HANGUL JONGSEONG HIEUH" #x11C2)
- ("HANGUL JONGSEONG KIYEOK-RIEUL" #x11C3)
- ("HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK" #x11C4)
- ("HANGUL JONGSEONG NIEUN-KIYEOK" #x11C5)
- ("HANGUL JONGSEONG NIEUN-TIKEUT" #x11C6)
- ("HANGUL JONGSEONG NIEUN-SIOS" #x11C7)
- ("HANGUL JONGSEONG NIEUN-PANSIOS" #x11C8)
- ("HANGUL JONGSEONG NIEUN-THIEUTH" #x11C9)
- ("HANGUL JONGSEONG TIKEUT-KIYEOK" #x11CA)
- ("HANGUL JONGSEONG TIKEUT-RIEUL" #x11CB)
- ("HANGUL JONGSEONG RIEUL-KIYEOK-SIOS" #x11CC)
- ("HANGUL JONGSEONG RIEUL-NIEUN" #x11CD)
- ("HANGUL JONGSEONG RIEUL-TIKEUT" #x11CE)
- ("HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH" #x11CF)
- ("HANGUL JONGSEONG SSANGRIEUL" #x11D0)
- ("HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK" #x11D1)
- ("HANGUL JONGSEONG RIEUL-MIEUM-SIOS" #x11D2)
- ("HANGUL JONGSEONG RIEUL-PIEUP-SIOS" #x11D3)
- ("HANGUL JONGSEONG RIEUL-PIEUP-HIEUH" #x11D4)
- ("HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP" #x11D5)
- ("HANGUL JONGSEONG RIEUL-SSANGSIOS" #x11D6)
- ("HANGUL JONGSEONG RIEUL-PANSIOS" #x11D7)
- ("HANGUL JONGSEONG RIEUL-KHIEUKH" #x11D8)
- ("HANGUL JONGSEONG RIEUL-YEORINHIEUH" #x11D9)
- ("HANGUL JONGSEONG MIEUM-KIYEOK" #x11DA)
- ("HANGUL JONGSEONG MIEUM-RIEUL" #x11DB)
- ("HANGUL JONGSEONG MIEUM-PIEUP" #x11DC)
- ("HANGUL JONGSEONG MIEUM-SIOS" #x11DD)
- ("HANGUL JONGSEONG MIEUM-SSANGSIOS" #x11DE)
- ("HANGUL JONGSEONG MIEUM-PANSIOS" #x11DF)
- ("HANGUL JONGSEONG MIEUM-CHIEUCH" #x11E0)
- ("HANGUL JONGSEONG MIEUM-HIEUH" #x11E1)
- ("HANGUL JONGSEONG KAPYEOUNMIEUM" #x11E2)
- ("HANGUL JONGSEONG PIEUP-RIEUL" #x11E3)
- ("HANGUL JONGSEONG PIEUP-PHIEUPH" #x11E4)
- ("HANGUL JONGSEONG PIEUP-HIEUH" #x11E5)
- ("HANGUL JONGSEONG KAPYEOUNPIEUP" #x11E6)
- ("HANGUL JONGSEONG SIOS-KIYEOK" #x11E7)
- ("HANGUL JONGSEONG SIOS-TIKEUT" #x11E8)
- ("HANGUL JONGSEONG SIOS-RIEUL" #x11E9)
- ("HANGUL JONGSEONG SIOS-PIEUP" #x11EA)
- ("HANGUL JONGSEONG PANSIOS" #x11EB)
- ("HANGUL JONGSEONG IEUNG-KIYEOK" #x11EC)
- ("HANGUL JONGSEONG IEUNG-SSANGKIYEOK" #x11ED)
- ("HANGUL JONGSEONG SSANGIEUNG" #x11EE)
- ("HANGUL JONGSEONG IEUNG-KHIEUKH" #x11EF)
- ("HANGUL JONGSEONG YESIEUNG" #x11F0)
- ("HANGUL JONGSEONG YESIEUNG-SIOS" #x11F1)
- ("HANGUL JONGSEONG YESIEUNG-PANSIOS" #x11F2)
- ("HANGUL JONGSEONG PHIEUPH-PIEUP" #x11F3)
- ("HANGUL JONGSEONG KAPYEOUNPHIEUPH" #x11F4)
- ("HANGUL JONGSEONG HIEUH-NIEUN" #x11F5)
- ("HANGUL JONGSEONG HIEUH-RIEUL" #x11F6)
- ("HANGUL JONGSEONG HIEUH-MIEUM" #x11F7)
- ("HANGUL JONGSEONG HIEUH-PIEUP" #x11F8)
- ("HANGUL JONGSEONG YEORINHIEUH" #x11F9)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'ethiopic
- '(("ETHIOPIC SYLLABLE HA" #x1200)
- ("ETHIOPIC SYLLABLE HU" #x1201)
- ("ETHIOPIC SYLLABLE HI" #x1202)
- ("ETHIOPIC SYLLABLE HAA" #x1203)
- ("ETHIOPIC SYLLABLE HEE" #x1204)
- ("ETHIOPIC SYLLABLE HE" #x1205)
- ("ETHIOPIC SYLLABLE HO" #x1206)
- ("ETHIOPIC SYLLABLE LA" #x1208)
- ("ETHIOPIC SYLLABLE LU" #x1209)
- ("ETHIOPIC SYLLABLE LI" #x120A)
- ("ETHIOPIC SYLLABLE LAA" #x120B)
- ("ETHIOPIC SYLLABLE LEE" #x120C)
- ("ETHIOPIC SYLLABLE LE" #x120D)
- ("ETHIOPIC SYLLABLE LO" #x120E)
- ("ETHIOPIC SYLLABLE LWA" #x120F)
- ("ETHIOPIC SYLLABLE HHA" #x1210)
- ("ETHIOPIC SYLLABLE HHU" #x1211)
- ("ETHIOPIC SYLLABLE HHI" #x1212)
- ("ETHIOPIC SYLLABLE HHAA" #x1213)
- ("ETHIOPIC SYLLABLE HHEE" #x1214)
- ("ETHIOPIC SYLLABLE HHE" #x1215)
- ("ETHIOPIC SYLLABLE HHO" #x1216)
- ("ETHIOPIC SYLLABLE HHWA" #x1217)
- ("ETHIOPIC SYLLABLE MA" #x1218)
- ("ETHIOPIC SYLLABLE MU" #x1219)
- ("ETHIOPIC SYLLABLE MI" #x121A)
- ("ETHIOPIC SYLLABLE MAA" #x121B)
- ("ETHIOPIC SYLLABLE MEE" #x121C)
- ("ETHIOPIC SYLLABLE ME" #x121D)
- ("ETHIOPIC SYLLABLE MO" #x121E)
- ("ETHIOPIC SYLLABLE MWA" #x121F)
- ("ETHIOPIC SYLLABLE SZA" #x1220)
- ("ETHIOPIC SYLLABLE SZU" #x1221)
- ("ETHIOPIC SYLLABLE SZI" #x1222)
- ("ETHIOPIC SYLLABLE SZAA" #x1223)
- ("ETHIOPIC SYLLABLE SZEE" #x1224)
- ("ETHIOPIC SYLLABLE SZE" #x1225)
- ("ETHIOPIC SYLLABLE SZO" #x1226)
- ("ETHIOPIC SYLLABLE SZWA" #x1227)
- ("ETHIOPIC SYLLABLE RA" #x1228)
- ("ETHIOPIC SYLLABLE RU" #x1229)
- ("ETHIOPIC SYLLABLE RI" #x122A)
- ("ETHIOPIC SYLLABLE RAA" #x122B)
- ("ETHIOPIC SYLLABLE REE" #x122C)
- ("ETHIOPIC SYLLABLE RE" #x122D)
- ("ETHIOPIC SYLLABLE RO" #x122E)
- ("ETHIOPIC SYLLABLE RWA" #x122F)
- ("ETHIOPIC SYLLABLE SA" #x1230)
- ("ETHIOPIC SYLLABLE SU" #x1231)
- ("ETHIOPIC SYLLABLE SI" #x1232)
- ("ETHIOPIC SYLLABLE SAA" #x1233)
- ("ETHIOPIC SYLLABLE SEE" #x1234)
- ("ETHIOPIC SYLLABLE SE" #x1235)
- ("ETHIOPIC SYLLABLE SO" #x1236)
- ("ETHIOPIC SYLLABLE SWA" #x1237)
- ("ETHIOPIC SYLLABLE SHA" #x1238)
- ("ETHIOPIC SYLLABLE SHU" #x1239)
- ("ETHIOPIC SYLLABLE SHI" #x123A)
- ("ETHIOPIC SYLLABLE SHAA" #x123B)
- ("ETHIOPIC SYLLABLE SHEE" #x123C)
- ("ETHIOPIC SYLLABLE SHE" #x123D)
- ("ETHIOPIC SYLLABLE SHO" #x123E)
- ("ETHIOPIC SYLLABLE SHWA" #x123F)
- ("ETHIOPIC SYLLABLE QA" #x1240)
- ("ETHIOPIC SYLLABLE QU" #x1241)
- ("ETHIOPIC SYLLABLE QI" #x1242)
- ("ETHIOPIC SYLLABLE QAA" #x1243)
- ("ETHIOPIC SYLLABLE QEE" #x1244)
- ("ETHIOPIC SYLLABLE QE" #x1245)
- ("ETHIOPIC SYLLABLE QO" #x1246)
- ("ETHIOPIC SYLLABLE QWA" #x1248)
- ("ETHIOPIC SYLLABLE QWI" #x124A)
- ("ETHIOPIC SYLLABLE QWAA" #x124B)
- ("ETHIOPIC SYLLABLE QWEE" #x124C)
- ("ETHIOPIC SYLLABLE QWE" #x124D)
- ("ETHIOPIC SYLLABLE QHA" #x1250)
- ("ETHIOPIC SYLLABLE QHU" #x1251)
- ("ETHIOPIC SYLLABLE QHI" #x1252)
- ("ETHIOPIC SYLLABLE QHAA" #x1253)
- ("ETHIOPIC SYLLABLE QHEE" #x1254)
- ("ETHIOPIC SYLLABLE QHE" #x1255)
- ("ETHIOPIC SYLLABLE QHO" #x1256)
- ("ETHIOPIC SYLLABLE QHWA" #x1258)
- ("ETHIOPIC SYLLABLE QHWI" #x125A)
- ("ETHIOPIC SYLLABLE QHWAA" #x125B)
- ("ETHIOPIC SYLLABLE QHWEE" #x125C)
- ("ETHIOPIC SYLLABLE QHWE" #x125D)
- ("ETHIOPIC SYLLABLE BA" #x1260)
- ("ETHIOPIC SYLLABLE BU" #x1261)
- ("ETHIOPIC SYLLABLE BI" #x1262)
- ("ETHIOPIC SYLLABLE BAA" #x1263)
- ("ETHIOPIC SYLLABLE BEE" #x1264)
- ("ETHIOPIC SYLLABLE BE" #x1265)
- ("ETHIOPIC SYLLABLE BO" #x1266)
- ("ETHIOPIC SYLLABLE BWA" #x1267)
- ("ETHIOPIC SYLLABLE VA" #x1268)
- ("ETHIOPIC SYLLABLE VU" #x1269)
- ("ETHIOPIC SYLLABLE VI" #x126A)
- ("ETHIOPIC SYLLABLE VAA" #x126B)
- ("ETHIOPIC SYLLABLE VEE" #x126C)
- ("ETHIOPIC SYLLABLE VE" #x126D)
- ("ETHIOPIC SYLLABLE VO" #x126E)
- ("ETHIOPIC SYLLABLE VWA" #x126F)
- ("ETHIOPIC SYLLABLE TA" #x1270)
- ("ETHIOPIC SYLLABLE TU" #x1271)
- ("ETHIOPIC SYLLABLE TI" #x1272)
- ("ETHIOPIC SYLLABLE TAA" #x1273)
- ("ETHIOPIC SYLLABLE TEE" #x1274)
- ("ETHIOPIC SYLLABLE TE" #x1275)
- ("ETHIOPIC SYLLABLE TO" #x1276)
- ("ETHIOPIC SYLLABLE TWA" #x1277)
- ("ETHIOPIC SYLLABLE CA" #x1278)
- ("ETHIOPIC SYLLABLE CU" #x1279)
- ("ETHIOPIC SYLLABLE CI" #x127A)
- ("ETHIOPIC SYLLABLE CAA" #x127B)
- ("ETHIOPIC SYLLABLE CEE" #x127C)
- ("ETHIOPIC SYLLABLE CE" #x127D)
- ("ETHIOPIC SYLLABLE CO" #x127E)
- ("ETHIOPIC SYLLABLE CWA" #x127F)
- ("ETHIOPIC SYLLABLE XA" #x1280)
- ("ETHIOPIC SYLLABLE XU" #x1281)
- ("ETHIOPIC SYLLABLE XI" #x1282)
- ("ETHIOPIC SYLLABLE XAA" #x1283)
- ("ETHIOPIC SYLLABLE XEE" #x1284)
- ("ETHIOPIC SYLLABLE XE" #x1285)
- ("ETHIOPIC SYLLABLE XO" #x1286)
- ("ETHIOPIC SYLLABLE XWA" #x1288)
- ("ETHIOPIC SYLLABLE XWI" #x128A)
- ("ETHIOPIC SYLLABLE XWAA" #x128B)
- ("ETHIOPIC SYLLABLE XWEE" #x128C)
- ("ETHIOPIC SYLLABLE XWE" #x128D)
- ("ETHIOPIC SYLLABLE NA" #x1290)
- ("ETHIOPIC SYLLABLE NU" #x1291)
- ("ETHIOPIC SYLLABLE NI" #x1292)
- ("ETHIOPIC SYLLABLE NAA" #x1293)
- ("ETHIOPIC SYLLABLE NEE" #x1294)
- ("ETHIOPIC SYLLABLE NE" #x1295)
- ("ETHIOPIC SYLLABLE NO" #x1296)
- ("ETHIOPIC SYLLABLE NWA" #x1297)
- ("ETHIOPIC SYLLABLE NYA" #x1298)
- ("ETHIOPIC SYLLABLE NYU" #x1299)
- ("ETHIOPIC SYLLABLE NYI" #x129A)
- ("ETHIOPIC SYLLABLE NYAA" #x129B)
- ("ETHIOPIC SYLLABLE NYEE" #x129C)
- ("ETHIOPIC SYLLABLE NYE" #x129D)
- ("ETHIOPIC SYLLABLE NYO" #x129E)
- ("ETHIOPIC SYLLABLE NYWA" #x129F)
- ("ETHIOPIC SYLLABLE GLOTTAL A" #x12A0)
- ("ETHIOPIC SYLLABLE GLOTTAL U" #x12A1)
- ("ETHIOPIC SYLLABLE GLOTTAL I" #x12A2)
- ("ETHIOPIC SYLLABLE GLOTTAL AA" #x12A3)
- ("ETHIOPIC SYLLABLE GLOTTAL EE" #x12A4)
- ("ETHIOPIC SYLLABLE GLOTTAL E" #x12A5)
- ("ETHIOPIC SYLLABLE GLOTTAL O" #x12A6)
- ("ETHIOPIC SYLLABLE GLOTTAL WA" #x12A7)
- ("ETHIOPIC SYLLABLE KA" #x12A8)
- ("ETHIOPIC SYLLABLE KU" #x12A9)
- ("ETHIOPIC SYLLABLE KI" #x12AA)
- ("ETHIOPIC SYLLABLE KAA" #x12AB)
- ("ETHIOPIC SYLLABLE KEE" #x12AC)
- ("ETHIOPIC SYLLABLE KE" #x12AD)
- ("ETHIOPIC SYLLABLE KO" #x12AE)
- ("ETHIOPIC SYLLABLE KWA" #x12B0)
- ("ETHIOPIC SYLLABLE KWI" #x12B2)
- ("ETHIOPIC SYLLABLE KWAA" #x12B3)
- ("ETHIOPIC SYLLABLE KWEE" #x12B4)
- ("ETHIOPIC SYLLABLE KWE" #x12B5)
- ("ETHIOPIC SYLLABLE KXA" #x12B8)
- ("ETHIOPIC SYLLABLE KXU" #x12B9)
- ("ETHIOPIC SYLLABLE KXI" #x12BA)
- ("ETHIOPIC SYLLABLE KXAA" #x12BB)
- ("ETHIOPIC SYLLABLE KXEE" #x12BC)
- ("ETHIOPIC SYLLABLE KXE" #x12BD)
- ("ETHIOPIC SYLLABLE KXO" #x12BE)
- ("ETHIOPIC SYLLABLE KXWA" #x12C0)
- ("ETHIOPIC SYLLABLE KXWI" #x12C2)
- ("ETHIOPIC SYLLABLE KXWAA" #x12C3)
- ("ETHIOPIC SYLLABLE KXWEE" #x12C4)
- ("ETHIOPIC SYLLABLE KXWE" #x12C5)
- ("ETHIOPIC SYLLABLE WA" #x12C8)
- ("ETHIOPIC SYLLABLE WU" #x12C9)
- ("ETHIOPIC SYLLABLE WI" #x12CA)
- ("ETHIOPIC SYLLABLE WAA" #x12CB)
- ("ETHIOPIC SYLLABLE WEE" #x12CC)
- ("ETHIOPIC SYLLABLE WE" #x12CD)
- ("ETHIOPIC SYLLABLE WO" #x12CE)
- ("ETHIOPIC SYLLABLE PHARYNGEAL A" #x12D0)
- ("ETHIOPIC SYLLABLE PHARYNGEAL U" #x12D1)
- ("ETHIOPIC SYLLABLE PHARYNGEAL I" #x12D2)
- ("ETHIOPIC SYLLABLE PHARYNGEAL AA" #x12D3)
- ("ETHIOPIC SYLLABLE PHARYNGEAL EE" #x12D4)
- ("ETHIOPIC SYLLABLE PHARYNGEAL E" #x12D5)
- ("ETHIOPIC SYLLABLE PHARYNGEAL O" #x12D6)
- ("ETHIOPIC SYLLABLE ZA" #x12D8)
- ("ETHIOPIC SYLLABLE ZU" #x12D9)
- ("ETHIOPIC SYLLABLE ZI" #x12DA)
- ("ETHIOPIC SYLLABLE ZAA" #x12DB)
- ("ETHIOPIC SYLLABLE ZEE" #x12DC)
- ("ETHIOPIC SYLLABLE ZE" #x12DD)
- ("ETHIOPIC SYLLABLE ZO" #x12DE)
- ("ETHIOPIC SYLLABLE ZWA" #x12DF)
- ("ETHIOPIC SYLLABLE ZHA" #x12E0)
- ("ETHIOPIC SYLLABLE ZHU" #x12E1)
- ("ETHIOPIC SYLLABLE ZHI" #x12E2)
- ("ETHIOPIC SYLLABLE ZHAA" #x12E3)
- ("ETHIOPIC SYLLABLE ZHEE" #x12E4)
- ("ETHIOPIC SYLLABLE ZHE" #x12E5)
- ("ETHIOPIC SYLLABLE ZHO" #x12E6)
- ("ETHIOPIC SYLLABLE ZHWA" #x12E7)
- ("ETHIOPIC SYLLABLE YA" #x12E8)
- ("ETHIOPIC SYLLABLE YU" #x12E9)
- ("ETHIOPIC SYLLABLE YI" #x12EA)
- ("ETHIOPIC SYLLABLE YAA" #x12EB)
- ("ETHIOPIC SYLLABLE YEE" #x12EC)
- ("ETHIOPIC SYLLABLE YE" #x12ED)
- ("ETHIOPIC SYLLABLE YO" #x12EE)
- ("ETHIOPIC SYLLABLE DA" #x12F0)
- ("ETHIOPIC SYLLABLE DU" #x12F1)
- ("ETHIOPIC SYLLABLE DI" #x12F2)
- ("ETHIOPIC SYLLABLE DAA" #x12F3)
- ("ETHIOPIC SYLLABLE DEE" #x12F4)
- ("ETHIOPIC SYLLABLE DE" #x12F5)
- ("ETHIOPIC SYLLABLE DO" #x12F6)
- ("ETHIOPIC SYLLABLE DWA" #x12F7)
- ("ETHIOPIC SYLLABLE DDA" #x12F8)
- ("ETHIOPIC SYLLABLE DDU" #x12F9)
- ("ETHIOPIC SYLLABLE DDI" #x12FA)
- ("ETHIOPIC SYLLABLE DDAA" #x12FB)
- ("ETHIOPIC SYLLABLE DDEE" #x12FC)
- ("ETHIOPIC SYLLABLE DDE" #x12FD)
- ("ETHIOPIC SYLLABLE DDO" #x12FE)
- ("ETHIOPIC SYLLABLE DDWA" #x12FF)
- ("ETHIOPIC SYLLABLE JA" #x1300)
- ("ETHIOPIC SYLLABLE JU" #x1301)
- ("ETHIOPIC SYLLABLE JI" #x1302)
- ("ETHIOPIC SYLLABLE JAA" #x1303)
- ("ETHIOPIC SYLLABLE JEE" #x1304)
- ("ETHIOPIC SYLLABLE JE" #x1305)
- ("ETHIOPIC SYLLABLE JO" #x1306)
- ("ETHIOPIC SYLLABLE JWA" #x1307)
- ("ETHIOPIC SYLLABLE GA" #x1308)
- ("ETHIOPIC SYLLABLE GU" #x1309)
- ("ETHIOPIC SYLLABLE GI" #x130A)
- ("ETHIOPIC SYLLABLE GAA" #x130B)
- ("ETHIOPIC SYLLABLE GEE" #x130C)
- ("ETHIOPIC SYLLABLE GE" #x130D)
- ("ETHIOPIC SYLLABLE GO" #x130E)
- ("ETHIOPIC SYLLABLE GWA" #x1310)
- ("ETHIOPIC SYLLABLE GWI" #x1312)
- ("ETHIOPIC SYLLABLE GWAA" #x1313)
- ("ETHIOPIC SYLLABLE GWEE" #x1314)
- ("ETHIOPIC SYLLABLE GWE" #x1315)
- ("ETHIOPIC SYLLABLE GGA" #x1318)
- ("ETHIOPIC SYLLABLE GGU" #x1319)
- ("ETHIOPIC SYLLABLE GGI" #x131A)
- ("ETHIOPIC SYLLABLE GGAA" #x131B)
- ("ETHIOPIC SYLLABLE GGEE" #x131C)
- ("ETHIOPIC SYLLABLE GGE" #x131D)
- ("ETHIOPIC SYLLABLE GGO" #x131E)
- ("ETHIOPIC SYLLABLE THA" #x1320)
- ("ETHIOPIC SYLLABLE THU" #x1321)
- ("ETHIOPIC SYLLABLE THI" #x1322)
- ("ETHIOPIC SYLLABLE THAA" #x1323)
- ("ETHIOPIC SYLLABLE THEE" #x1324)
- ("ETHIOPIC SYLLABLE THE" #x1325)
- ("ETHIOPIC SYLLABLE THO" #x1326)
- ("ETHIOPIC SYLLABLE THWA" #x1327)
- ("ETHIOPIC SYLLABLE CHA" #x1328)
- ("ETHIOPIC SYLLABLE CHU" #x1329)
- ("ETHIOPIC SYLLABLE CHI" #x132A)
- ("ETHIOPIC SYLLABLE CHAA" #x132B)
- ("ETHIOPIC SYLLABLE CHEE" #x132C)
- ("ETHIOPIC SYLLABLE CHE" #x132D)
- ("ETHIOPIC SYLLABLE CHO" #x132E)
- ("ETHIOPIC SYLLABLE CHWA" #x132F)
- ("ETHIOPIC SYLLABLE PHA" #x1330)
- ("ETHIOPIC SYLLABLE PHU" #x1331)
- ("ETHIOPIC SYLLABLE PHI" #x1332)
- ("ETHIOPIC SYLLABLE PHAA" #x1333)
- ("ETHIOPIC SYLLABLE PHEE" #x1334)
- ("ETHIOPIC SYLLABLE PHE" #x1335)
- ("ETHIOPIC SYLLABLE PHO" #x1336)
- ("ETHIOPIC SYLLABLE PHWA" #x1337)
- ("ETHIOPIC SYLLABLE TSA" #x1338)
- ("ETHIOPIC SYLLABLE TSU" #x1339)
- ("ETHIOPIC SYLLABLE TSI" #x133A)
- ("ETHIOPIC SYLLABLE TSAA" #x133B)
- ("ETHIOPIC SYLLABLE TSEE" #x133C)
- ("ETHIOPIC SYLLABLE TSE" #x133D)
- ("ETHIOPIC SYLLABLE TSO" #x133E)
- ("ETHIOPIC SYLLABLE TSWA" #x133F)
- ("ETHIOPIC SYLLABLE TZA" #x1340)
- ("ETHIOPIC SYLLABLE TZU" #x1341)
- ("ETHIOPIC SYLLABLE TZI" #x1342)
- ("ETHIOPIC SYLLABLE TZAA" #x1343)
- ("ETHIOPIC SYLLABLE TZEE" #x1344)
- ("ETHIOPIC SYLLABLE TZE" #x1345)
- ("ETHIOPIC SYLLABLE TZO" #x1346)
- ("ETHIOPIC SYLLABLE FA" #x1348)
- ("ETHIOPIC SYLLABLE FU" #x1349)
- ("ETHIOPIC SYLLABLE FI" #x134A)
- ("ETHIOPIC SYLLABLE FAA" #x134B)
- ("ETHIOPIC SYLLABLE FEE" #x134C)
- ("ETHIOPIC SYLLABLE FE" #x134D)
- ("ETHIOPIC SYLLABLE FO" #x134E)
- ("ETHIOPIC SYLLABLE FWA" #x134F)
- ("ETHIOPIC SYLLABLE PA" #x1350)
- ("ETHIOPIC SYLLABLE PU" #x1351)
- ("ETHIOPIC SYLLABLE PI" #x1352)
- ("ETHIOPIC SYLLABLE PAA" #x1353)
- ("ETHIOPIC SYLLABLE PEE" #x1354)
- ("ETHIOPIC SYLLABLE PE" #x1355)
- ("ETHIOPIC SYLLABLE PO" #x1356)
- ("ETHIOPIC SYLLABLE PWA" #x1357)
- ("ETHIOPIC SYLLABLE RYA" #x1358)
- ("ETHIOPIC SYLLABLE MYA" #x1359)
- ("ETHIOPIC SYLLABLE FYA" #x135A)
- ("ETHIOPIC WORDSPACE" #x1361)
- ("ETHIOPIC FULL STOP" #x1362)
- ("ETHIOPIC COMMA" #x1363)
- ("ETHIOPIC SEMICOLON" #x1364)
- ("ETHIOPIC COLON" #x1365)
- ("ETHIOPIC PREFACE COLON" #x1366)
- ("ETHIOPIC QUESTION MARK" #x1367)
- ("ETHIOPIC PARAGRAPH SEPARATOR" #x1368)
- ("ETHIOPIC DIGIT ONE" #x1369)
- ("ETHIOPIC DIGIT TWO" #x136A)
- ("ETHIOPIC DIGIT THREE" #x136B)
- ("ETHIOPIC DIGIT FOUR" #x136C)
- ("ETHIOPIC DIGIT FIVE" #x136D)
- ("ETHIOPIC DIGIT SIX" #x136E)
- ("ETHIOPIC DIGIT SEVEN" #x136F)
- ("ETHIOPIC DIGIT EIGHT" #x1370)
- ("ETHIOPIC DIGIT NINE" #x1371)
- ("ETHIOPIC NUMBER TEN" #x1372)
- ("ETHIOPIC NUMBER TWENTY" #x1373)
- ("ETHIOPIC NUMBER THIRTY" #x1374)
- ("ETHIOPIC NUMBER FORTY" #x1375)
- ("ETHIOPIC NUMBER FIFTY" #x1376)
- ("ETHIOPIC NUMBER SIXTY" #x1377)
- ("ETHIOPIC NUMBER SEVENTY" #x1378)
- ("ETHIOPIC NUMBER EIGHTY" #x1379)
- ("ETHIOPIC NUMBER NINETY" #x137A)
- ("ETHIOPIC NUMBER HUNDRED" #x137B)
- ("ETHIOPIC NUMBER TEN THOUSAND" #x137C)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cherokee
- '(("CHEROKEE LETTER A" #x13A0)
- ("CHEROKEE LETTER E" #x13A1)
- ("CHEROKEE LETTER I" #x13A2)
- ("CHEROKEE LETTER O" #x13A3)
- ("CHEROKEE LETTER U" #x13A4)
- ("CHEROKEE LETTER V" #x13A5)
- ("CHEROKEE LETTER GA" #x13A6)
- ("CHEROKEE LETTER KA" #x13A7)
- ("CHEROKEE LETTER GE" #x13A8)
- ("CHEROKEE LETTER GI" #x13A9)
- ("CHEROKEE LETTER GO" #x13AA)
- ("CHEROKEE LETTER GU" #x13AB)
- ("CHEROKEE LETTER GV" #x13AC)
- ("CHEROKEE LETTER HA" #x13AD)
- ("CHEROKEE LETTER HE" #x13AE)
- ("CHEROKEE LETTER HI" #x13AF)
- ("CHEROKEE LETTER HO" #x13B0)
- ("CHEROKEE LETTER HU" #x13B1)
- ("CHEROKEE LETTER HV" #x13B2)
- ("CHEROKEE LETTER LA" #x13B3)
- ("CHEROKEE LETTER LE" #x13B4)
- ("CHEROKEE LETTER LI" #x13B5)
- ("CHEROKEE LETTER LO" #x13B6)
- ("CHEROKEE LETTER LU" #x13B7)
- ("CHEROKEE LETTER LV" #x13B8)
- ("CHEROKEE LETTER MA" #x13B9)
- ("CHEROKEE LETTER ME" #x13BA)
- ("CHEROKEE LETTER MI" #x13BB)
- ("CHEROKEE LETTER MO" #x13BC)
- ("CHEROKEE LETTER MU" #x13BD)
- ("CHEROKEE LETTER NA" #x13BE)
- ("CHEROKEE LETTER HNA" #x13BF)
- ("CHEROKEE LETTER NAH" #x13C0)
- ("CHEROKEE LETTER NE" #x13C1)
- ("CHEROKEE LETTER NI" #x13C2)
- ("CHEROKEE LETTER NO" #x13C3)
- ("CHEROKEE LETTER NU" #x13C4)
- ("CHEROKEE LETTER NV" #x13C5)
- ("CHEROKEE LETTER QUA" #x13C6)
- ("CHEROKEE LETTER QUE" #x13C7)
- ("CHEROKEE LETTER QUI" #x13C8)
- ("CHEROKEE LETTER QUO" #x13C9)
- ("CHEROKEE LETTER QUU" #x13CA)
- ("CHEROKEE LETTER QUV" #x13CB)
- ("CHEROKEE LETTER SA" #x13CC)
- ("CHEROKEE LETTER S" #x13CD)
- ("CHEROKEE LETTER SE" #x13CE)
- ("CHEROKEE LETTER SI" #x13CF)
- ("CHEROKEE LETTER SO" #x13D0)
- ("CHEROKEE LETTER SU" #x13D1)
- ("CHEROKEE LETTER SV" #x13D2)
- ("CHEROKEE LETTER DA" #x13D3)
- ("CHEROKEE LETTER TA" #x13D4)
- ("CHEROKEE LETTER DE" #x13D5)
- ("CHEROKEE LETTER TE" #x13D6)
- ("CHEROKEE LETTER DI" #x13D7)
- ("CHEROKEE LETTER TI" #x13D8)
- ("CHEROKEE LETTER DO" #x13D9)
- ("CHEROKEE LETTER DU" #x13DA)
- ("CHEROKEE LETTER DV" #x13DB)
- ("CHEROKEE LETTER DLA" #x13DC)
- ("CHEROKEE LETTER TLA" #x13DD)
- ("CHEROKEE LETTER TLE" #x13DE)
- ("CHEROKEE LETTER TLI" #x13DF)
- ("CHEROKEE LETTER TLO" #x13E0)
- ("CHEROKEE LETTER TLU" #x13E1)
- ("CHEROKEE LETTER TLV" #x13E2)
- ("CHEROKEE LETTER TSA" #x13E3)
- ("CHEROKEE LETTER TSE" #x13E4)
- ("CHEROKEE LETTER TSI" #x13E5)
- ("CHEROKEE LETTER TSO" #x13E6)
- ("CHEROKEE LETTER TSU" #x13E7)
- ("CHEROKEE LETTER TSV" #x13E8)
- ("CHEROKEE LETTER WA" #x13E9)
- ("CHEROKEE LETTER WE" #x13EA)
- ("CHEROKEE LETTER WI" #x13EB)
- ("CHEROKEE LETTER WO" #x13EC)
- ("CHEROKEE LETTER WU" #x13ED)
- ("CHEROKEE LETTER WV" #x13EE)
- ("CHEROKEE LETTER YA" #x13EF)
- ("CHEROKEE LETTER YE" #x13F0)
- ("CHEROKEE LETTER YI" #x13F1)
- ("CHEROKEE LETTER YO" #x13F2)
- ("CHEROKEE LETTER YU" #x13F3)
- ("CHEROKEE LETTER YV" #x13F4)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'unified-canadian-aboriginal-syllabics
- '(("CANADIAN SYLLABICS E" #x1401)
- ("CANADIAN SYLLABICS AAI" #x1402)
- ("CANADIAN SYLLABICS I" #x1403)
- ("CANADIAN SYLLABICS II" #x1404)
- ("CANADIAN SYLLABICS O" #x1405)
- ("CANADIAN SYLLABICS OO" #x1406)
- ("CANADIAN SYLLABICS Y-CREE OO" #x1407)
- ("CANADIAN SYLLABICS CARRIER EE" #x1408)
- ("CANADIAN SYLLABICS CARRIER I" #x1409)
- ("CANADIAN SYLLABICS A" #x140A)
- ("CANADIAN SYLLABICS AA" #x140B)
- ("CANADIAN SYLLABICS WE" #x140C)
- ("CANADIAN SYLLABICS WEST-CREE WE" #x140D)
- ("CANADIAN SYLLABICS WI" #x140E)
- ("CANADIAN SYLLABICS WEST-CREE WI" #x140F)
- ("CANADIAN SYLLABICS WII" #x1410)
- ("CANADIAN SYLLABICS WEST-CREE WII" #x1411)
- ("CANADIAN SYLLABICS WO" #x1412)
- ("CANADIAN SYLLABICS WEST-CREE WO" #x1413)
- ("CANADIAN SYLLABICS WOO" #x1414)
- ("CANADIAN SYLLABICS WEST-CREE WOO" #x1415)
- ("CANADIAN SYLLABICS NASKAPI WOO" #x1416)
- ("CANADIAN SYLLABICS WA" #x1417)
- ("CANADIAN SYLLABICS WEST-CREE WA" #x1418)
- ("CANADIAN SYLLABICS WAA" #x1419)
- ("CANADIAN SYLLABICS WEST-CREE WAA" #x141A)
- ("CANADIAN SYLLABICS NASKAPI WAA" #x141B)
- ("CANADIAN SYLLABICS AI" #x141C)
- ("CANADIAN SYLLABICS Y-CREE W" #x141D)
- ("CANADIAN SYLLABICS GLOTTAL STOP" #x141E)
- ("CANADIAN SYLLABICS FINAL ACUTE" #x141F)
- ("CANADIAN SYLLABICS FINAL GRAVE" #x1420)
- ("CANADIAN SYLLABICS FINAL BOTTOM HALF RING" #x1421)
- ("CANADIAN SYLLABICS FINAL TOP HALF RING" #x1422)
- ("CANADIAN SYLLABICS FINAL RIGHT HALF RING" #x1423)
- ("CANADIAN SYLLABICS FINAL RING" #x1424)
- ("CANADIAN SYLLABICS FINAL DOUBLE ACUTE" #x1425)
- ("CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES" #x1426)
- ("CANADIAN SYLLABICS FINAL MIDDLE DOT" #x1427)
- ("CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE" #x1428)
- ("CANADIAN SYLLABICS FINAL PLUS" #x1429)
- ("CANADIAN SYLLABICS FINAL DOWN TACK" #x142A)
- ("CANADIAN SYLLABICS EN" #x142B)
- ("CANADIAN SYLLABICS IN" #x142C)
- ("CANADIAN SYLLABICS ON" #x142D)
- ("CANADIAN SYLLABICS AN" #x142E)
- ("CANADIAN SYLLABICS PE" #x142F)
- ("CANADIAN SYLLABICS PAAI" #x1430)
- ("CANADIAN SYLLABICS PI" #x1431)
- ("CANADIAN SYLLABICS PII" #x1432)
- ("CANADIAN SYLLABICS PO" #x1433)
- ("CANADIAN SYLLABICS POO" #x1434)
- ("CANADIAN SYLLABICS Y-CREE POO" #x1435)
- ("CANADIAN SYLLABICS CARRIER HEE" #x1436)
- ("CANADIAN SYLLABICS CARRIER HI" #x1437)
- ("CANADIAN SYLLABICS PA" #x1438)
- ("CANADIAN SYLLABICS PAA" #x1439)
- ("CANADIAN SYLLABICS PWE" #x143A)
- ("CANADIAN SYLLABICS WEST-CREE PWE" #x143B)
- ("CANADIAN SYLLABICS PWI" #x143C)
- ("CANADIAN SYLLABICS WEST-CREE PWI" #x143D)
- ("CANADIAN SYLLABICS PWII" #x143E)
- ("CANADIAN SYLLABICS WEST-CREE PWII" #x143F)
- ("CANADIAN SYLLABICS PWO" #x1440)
- ("CANADIAN SYLLABICS WEST-CREE PWO" #x1441)
- ("CANADIAN SYLLABICS PWOO" #x1442)
- ("CANADIAN SYLLABICS WEST-CREE PWOO" #x1443)
- ("CANADIAN SYLLABICS PWA" #x1444)
- ("CANADIAN SYLLABICS WEST-CREE PWA" #x1445)
- ("CANADIAN SYLLABICS PWAA" #x1446)
- ("CANADIAN SYLLABICS WEST-CREE PWAA" #x1447)
- ("CANADIAN SYLLABICS Y-CREE PWAA" #x1448)
- ("CANADIAN SYLLABICS P" #x1449)
- ("CANADIAN SYLLABICS WEST-CREE P" #x144A)
- ("CANADIAN SYLLABICS CARRIER H" #x144B)
- ("CANADIAN SYLLABICS TE" #x144C)
- ("CANADIAN SYLLABICS TAAI" #x144D)
- ("CANADIAN SYLLABICS TI" #x144E)
- ("CANADIAN SYLLABICS TII" #x144F)
- ("CANADIAN SYLLABICS TO" #x1450)
- ("CANADIAN SYLLABICS TOO" #x1451)
- ("CANADIAN SYLLABICS Y-CREE TOO" #x1452)
- ("CANADIAN SYLLABICS CARRIER DEE" #x1453)
- ("CANADIAN SYLLABICS CARRIER DI" #x1454)
- ("CANADIAN SYLLABICS TA" #x1455)
- ("CANADIAN SYLLABICS TAA" #x1456)
- ("CANADIAN SYLLABICS TWE" #x1457)
- ("CANADIAN SYLLABICS WEST-CREE TWE" #x1458)
- ("CANADIAN SYLLABICS TWI" #x1459)
- ("CANADIAN SYLLABICS WEST-CREE TWI" #x145A)
- ("CANADIAN SYLLABICS TWII" #x145B)
- ("CANADIAN SYLLABICS WEST-CREE TWII" #x145C)
- ("CANADIAN SYLLABICS TWO" #x145D)
- ("CANADIAN SYLLABICS WEST-CREE TWO" #x145E)
- ("CANADIAN SYLLABICS TWOO" #x145F)
- ("CANADIAN SYLLABICS WEST-CREE TWOO" #x1460)
- ("CANADIAN SYLLABICS TWA" #x1461)
- ("CANADIAN SYLLABICS WEST-CREE TWA" #x1462)
- ("CANADIAN SYLLABICS TWAA" #x1463)
- ("CANADIAN SYLLABICS WEST-CREE TWAA" #x1464)
- ("CANADIAN SYLLABICS NASKAPI TWAA" #x1465)
- ("CANADIAN SYLLABICS T" #x1466)
- ("CANADIAN SYLLABICS TTE" #x1467)
- ("CANADIAN SYLLABICS TTI" #x1468)
- ("CANADIAN SYLLABICS TTO" #x1469)
- ("CANADIAN SYLLABICS TTA" #x146A)
- ("CANADIAN SYLLABICS KE" #x146B)
- ("CANADIAN SYLLABICS KAAI" #x146C)
- ("CANADIAN SYLLABICS KI" #x146D)
- ("CANADIAN SYLLABICS KII" #x146E)
- ("CANADIAN SYLLABICS KO" #x146F)
- ("CANADIAN SYLLABICS KOO" #x1470)
- ("CANADIAN SYLLABICS Y-CREE KOO" #x1471)
- ("CANADIAN SYLLABICS KA" #x1472)
- ("CANADIAN SYLLABICS KAA" #x1473)
- ("CANADIAN SYLLABICS KWE" #x1474)
- ("CANADIAN SYLLABICS WEST-CREE KWE" #x1475)
- ("CANADIAN SYLLABICS KWI" #x1476)
- ("CANADIAN SYLLABICS WEST-CREE KWI" #x1477)
- ("CANADIAN SYLLABICS KWII" #x1478)
- ("CANADIAN SYLLABICS WEST-CREE KWII" #x1479)
- ("CANADIAN SYLLABICS KWO" #x147A)
- ("CANADIAN SYLLABICS WEST-CREE KWO" #x147B)
- ("CANADIAN SYLLABICS KWOO" #x147C)
- ("CANADIAN SYLLABICS WEST-CREE KWOO" #x147D)
- ("CANADIAN SYLLABICS KWA" #x147E)
- ("CANADIAN SYLLABICS WEST-CREE KWA" #x147F)
- ("CANADIAN SYLLABICS KWAA" #x1480)
- ("CANADIAN SYLLABICS WEST-CREE KWAA" #x1481)
- ("CANADIAN SYLLABICS NASKAPI KWAA" #x1482)
- ("CANADIAN SYLLABICS K" #x1483)
- ("CANADIAN SYLLABICS KW" #x1484)
- ("CANADIAN SYLLABICS SOUTH-SLAVEY KEH" #x1485)
- ("CANADIAN SYLLABICS SOUTH-SLAVEY KIH" #x1486)
- ("CANADIAN SYLLABICS SOUTH-SLAVEY KOH" #x1487)
- ("CANADIAN SYLLABICS SOUTH-SLAVEY KAH" #x1488)
- ("CANADIAN SYLLABICS CE" #x1489)
- ("CANADIAN SYLLABICS CAAI" #x148A)
- ("CANADIAN SYLLABICS CI" #x148B)
- ("CANADIAN SYLLABICS CII" #x148C)
- ("CANADIAN SYLLABICS CO" #x148D)
- ("CANADIAN SYLLABICS COO" #x148E)
- ("CANADIAN SYLLABICS Y-CREE COO" #x148F)
- ("CANADIAN SYLLABICS CA" #x1490)
- ("CANADIAN SYLLABICS CAA" #x1491)
- ("CANADIAN SYLLABICS CWE" #x1492)
- ("CANADIAN SYLLABICS WEST-CREE CWE" #x1493)
- ("CANADIAN SYLLABICS CWI" #x1494)
- ("CANADIAN SYLLABICS WEST-CREE CWI" #x1495)
- ("CANADIAN SYLLABICS CWII" #x1496)
- ("CANADIAN SYLLABICS WEST-CREE CWII" #x1497)
- ("CANADIAN SYLLABICS CWO" #x1498)
- ("CANADIAN SYLLABICS WEST-CREE CWO" #x1499)
- ("CANADIAN SYLLABICS CWOO" #x149A)
- ("CANADIAN SYLLABICS WEST-CREE CWOO" #x149B)
- ("CANADIAN SYLLABICS CWA" #x149C)
- ("CANADIAN SYLLABICS WEST-CREE CWA" #x149D)
- ("CANADIAN SYLLABICS CWAA" #x149E)
- ("CANADIAN SYLLABICS WEST-CREE CWAA" #x149F)
- ("CANADIAN SYLLABICS NASKAPI CWAA" #x14A0)
- ("CANADIAN SYLLABICS C" #x14A1)
- ("CANADIAN SYLLABICS SAYISI TH" #x14A2)
- ("CANADIAN SYLLABICS ME" #x14A3)
- ("CANADIAN SYLLABICS MAAI" #x14A4)
- ("CANADIAN SYLLABICS MI" #x14A5)
- ("CANADIAN SYLLABICS MII" #x14A6)
- ("CANADIAN SYLLABICS MO" #x14A7)
- ("CANADIAN SYLLABICS MOO" #x14A8)
- ("CANADIAN SYLLABICS Y-CREE MOO" #x14A9)
- ("CANADIAN SYLLABICS MA" #x14AA)
- ("CANADIAN SYLLABICS MAA" #x14AB)
- ("CANADIAN SYLLABICS MWE" #x14AC)
- ("CANADIAN SYLLABICS WEST-CREE MWE" #x14AD)
- ("CANADIAN SYLLABICS MWI" #x14AE)
- ("CANADIAN SYLLABICS WEST-CREE MWI" #x14AF)
- ("CANADIAN SYLLABICS MWII" #x14B0)
- ("CANADIAN SYLLABICS WEST-CREE MWII" #x14B1)
- ("CANADIAN SYLLABICS MWO" #x14B2)
- ("CANADIAN SYLLABICS WEST-CREE MWO" #x14B3)
- ("CANADIAN SYLLABICS MWOO" #x14B4)
- ("CANADIAN SYLLABICS WEST-CREE MWOO" #x14B5)
- ("CANADIAN SYLLABICS MWA" #x14B6)
- ("CANADIAN SYLLABICS WEST-CREE MWA" #x14B7)
- ("CANADIAN SYLLABICS MWAA" #x14B8)
- ("CANADIAN SYLLABICS WEST-CREE MWAA" #x14B9)
- ("CANADIAN SYLLABICS NASKAPI MWAA" #x14BA)
- ("CANADIAN SYLLABICS M" #x14BB)
- ("CANADIAN SYLLABICS WEST-CREE M" #x14BC)
- ("CANADIAN SYLLABICS MH" #x14BD)
- ("CANADIAN SYLLABICS ATHAPASCAN M" #x14BE)
- ("CANADIAN SYLLABICS SAYISI M" #x14BF)
- ("CANADIAN SYLLABICS NE" #x14C0)
- ("CANADIAN SYLLABICS NAAI" #x14C1)
- ("CANADIAN SYLLABICS NI" #x14C2)
- ("CANADIAN SYLLABICS NII" #x14C3)
- ("CANADIAN SYLLABICS NO" #x14C4)
- ("CANADIAN SYLLABICS NOO" #x14C5)
- ("CANADIAN SYLLABICS Y-CREE NOO" #x14C6)
- ("CANADIAN SYLLABICS NA" #x14C7)
- ("CANADIAN SYLLABICS NAA" #x14C8)
- ("CANADIAN SYLLABICS NWE" #x14C9)
- ("CANADIAN SYLLABICS WEST-CREE NWE" #x14CA)
- ("CANADIAN SYLLABICS NWA" #x14CB)
- ("CANADIAN SYLLABICS WEST-CREE NWA" #x14CC)
- ("CANADIAN SYLLABICS NWAA" #x14CD)
- ("CANADIAN SYLLABICS WEST-CREE NWAA" #x14CE)
- ("CANADIAN SYLLABICS NASKAPI NWAA" #x14CF)
- ("CANADIAN SYLLABICS N" #x14D0)
- ("CANADIAN SYLLABICS CARRIER NG" #x14D1)
- ("CANADIAN SYLLABICS NH" #x14D2)
- ("CANADIAN SYLLABICS LE" #x14D3)
- ("CANADIAN SYLLABICS LAAI" #x14D4)
- ("CANADIAN SYLLABICS LI" #x14D5)
- ("CANADIAN SYLLABICS LII" #x14D6)
- ("CANADIAN SYLLABICS LO" #x14D7)
- ("CANADIAN SYLLABICS LOO" #x14D8)
- ("CANADIAN SYLLABICS Y-CREE LOO" #x14D9)
- ("CANADIAN SYLLABICS LA" #x14DA)
- ("CANADIAN SYLLABICS LAA" #x14DB)
- ("CANADIAN SYLLABICS LWE" #x14DC)
- ("CANADIAN SYLLABICS WEST-CREE LWE" #x14DD)
- ("CANADIAN SYLLABICS LWI" #x14DE)
- ("CANADIAN SYLLABICS WEST-CREE LWI" #x14DF)
- ("CANADIAN SYLLABICS LWII" #x14E0)
- ("CANADIAN SYLLABICS WEST-CREE LWII" #x14E1)
- ("CANADIAN SYLLABICS LWO" #x14E2)
- ("CANADIAN SYLLABICS WEST-CREE LWO" #x14E3)
- ("CANADIAN SYLLABICS LWOO" #x14E4)
- ("CANADIAN SYLLABICS WEST-CREE LWOO" #x14E5)
- ("CANADIAN SYLLABICS LWA" #x14E6)
- ("CANADIAN SYLLABICS WEST-CREE LWA" #x14E7)
- ("CANADIAN SYLLABICS LWAA" #x14E8)
- ("CANADIAN SYLLABICS WEST-CREE LWAA" #x14E9)
- ("CANADIAN SYLLABICS L" #x14EA)
- ("CANADIAN SYLLABICS WEST-CREE L" #x14EB)
- ("CANADIAN SYLLABICS MEDIAL L" #x14EC)
- ("CANADIAN SYLLABICS SE" #x14ED)
- ("CANADIAN SYLLABICS SAAI" #x14EE)
- ("CANADIAN SYLLABICS SI" #x14EF)
- ("CANADIAN SYLLABICS SII" #x14F0)
- ("CANADIAN SYLLABICS SO" #x14F1)
- ("CANADIAN SYLLABICS SOO" #x14F2)
- ("CANADIAN SYLLABICS Y-CREE SOO" #x14F3)
- ("CANADIAN SYLLABICS SA" #x14F4)
- ("CANADIAN SYLLABICS SAA" #x14F5)
- ("CANADIAN SYLLABICS SWE" #x14F6)
- ("CANADIAN SYLLABICS WEST-CREE SWE" #x14F7)
- ("CANADIAN SYLLABICS SWI" #x14F8)
- ("CANADIAN SYLLABICS WEST-CREE SWI" #x14F9)
- ("CANADIAN SYLLABICS SWII" #x14FA)
- ("CANADIAN SYLLABICS WEST-CREE SWII" #x14FB)
- ("CANADIAN SYLLABICS SWO" #x14FC)
- ("CANADIAN SYLLABICS WEST-CREE SWO" #x14FD)
- ("CANADIAN SYLLABICS SWOO" #x14FE)
- ("CANADIAN SYLLABICS WEST-CREE SWOO" #x14FF)
- ("CANADIAN SYLLABICS SWA" #x1500)
- ("CANADIAN SYLLABICS WEST-CREE SWA" #x1501)
- ("CANADIAN SYLLABICS SWAA" #x1502)
- ("CANADIAN SYLLABICS WEST-CREE SWAA" #x1503)
- ("CANADIAN SYLLABICS NASKAPI SWAA" #x1504)
- ("CANADIAN SYLLABICS S" #x1505)
- ("CANADIAN SYLLABICS ATHAPASCAN S" #x1506)
- ("CANADIAN SYLLABICS SW" #x1507)
- ("CANADIAN SYLLABICS BLACKFOOT S" #x1508)
- ("CANADIAN SYLLABICS MOOSE-CREE SK" #x1509)
- ("CANADIAN SYLLABICS NASKAPI SKW" #x150A)
- ("CANADIAN SYLLABICS NASKAPI S-W" #x150B)
- ("CANADIAN SYLLABICS NASKAPI SPWA" #x150C)
- ("CANADIAN SYLLABICS NASKAPI STWA" #x150D)
- ("CANADIAN SYLLABICS NASKAPI SKWA" #x150E)
- ("CANADIAN SYLLABICS NASKAPI SCWA" #x150F)
- ("CANADIAN SYLLABICS SHE" #x1510)
- ("CANADIAN SYLLABICS SHI" #x1511)
- ("CANADIAN SYLLABICS SHII" #x1512)
- ("CANADIAN SYLLABICS SHO" #x1513)
- ("CANADIAN SYLLABICS SHOO" #x1514)
- ("CANADIAN SYLLABICS SHA" #x1515)
- ("CANADIAN SYLLABICS SHAA" #x1516)
- ("CANADIAN SYLLABICS SHWE" #x1517)
- ("CANADIAN SYLLABICS WEST-CREE SHWE" #x1518)
- ("CANADIAN SYLLABICS SHWI" #x1519)
- ("CANADIAN SYLLABICS WEST-CREE SHWI" #x151A)
- ("CANADIAN SYLLABICS SHWII" #x151B)
- ("CANADIAN SYLLABICS WEST-CREE SHWII" #x151C)
- ("CANADIAN SYLLABICS SHWO" #x151D)
- ("CANADIAN SYLLABICS WEST-CREE SHWO" #x151E)
- ("CANADIAN SYLLABICS SHWOO" #x151F)
- ("CANADIAN SYLLABICS WEST-CREE SHWOO" #x1520)
- ("CANADIAN SYLLABICS SHWA" #x1521)
- ("CANADIAN SYLLABICS WEST-CREE SHWA" #x1522)
- ("CANADIAN SYLLABICS SHWAA" #x1523)
- ("CANADIAN SYLLABICS WEST-CREE SHWAA" #x1524)
- ("CANADIAN SYLLABICS SH" #x1525)
- ("CANADIAN SYLLABICS YE" #x1526)
- ("CANADIAN SYLLABICS YAAI" #x1527)
- ("CANADIAN SYLLABICS YI" #x1528)
- ("CANADIAN SYLLABICS YII" #x1529)
- ("CANADIAN SYLLABICS YO" #x152A)
- ("CANADIAN SYLLABICS YOO" #x152B)
- ("CANADIAN SYLLABICS Y-CREE YOO" #x152C)
- ("CANADIAN SYLLABICS YA" #x152D)
- ("CANADIAN SYLLABICS YAA" #x152E)
- ("CANADIAN SYLLABICS YWE" #x152F)
- ("CANADIAN SYLLABICS WEST-CREE YWE" #x1530)
- ("CANADIAN SYLLABICS YWI" #x1531)
- ("CANADIAN SYLLABICS WEST-CREE YWI" #x1532)
- ("CANADIAN SYLLABICS YWII" #x1533)
- ("CANADIAN SYLLABICS WEST-CREE YWII" #x1534)
- ("CANADIAN SYLLABICS YWO" #x1535)
- ("CANADIAN SYLLABICS WEST-CREE YWO" #x1536)
- ("CANADIAN SYLLABICS YWOO" #x1537)
- ("CANADIAN SYLLABICS WEST-CREE YWOO" #x1538)
- ("CANADIAN SYLLABICS YWA" #x1539)
- ("CANADIAN SYLLABICS WEST-CREE YWA" #x153A)
- ("CANADIAN SYLLABICS YWAA" #x153B)
- ("CANADIAN SYLLABICS WEST-CREE YWAA" #x153C)
- ("CANADIAN SYLLABICS NASKAPI YWAA" #x153D)
- ("CANADIAN SYLLABICS Y" #x153E)
- ("CANADIAN SYLLABICS BIBLE-CREE Y" #x153F)
- ("CANADIAN SYLLABICS WEST-CREE Y" #x1540)
- ("CANADIAN SYLLABICS SAYISI YI" #x1541)
- ("CANADIAN SYLLABICS RE" #x1542)
- ("CANADIAN SYLLABICS R-CREE RE" #x1543)
- ("CANADIAN SYLLABICS WEST-CREE LE" #x1544)
- ("CANADIAN SYLLABICS RAAI" #x1545)
- ("CANADIAN SYLLABICS RI" #x1546)
- ("CANADIAN SYLLABICS RII" #x1547)
- ("CANADIAN SYLLABICS RO" #x1548)
- ("CANADIAN SYLLABICS ROO" #x1549)
- ("CANADIAN SYLLABICS WEST-CREE LO" #x154A)
- ("CANADIAN SYLLABICS RA" #x154B)
- ("CANADIAN SYLLABICS RAA" #x154C)
- ("CANADIAN SYLLABICS WEST-CREE LA" #x154D)
- ("CANADIAN SYLLABICS RWAA" #x154E)
- ("CANADIAN SYLLABICS WEST-CREE RWAA" #x154F)
- ("CANADIAN SYLLABICS R" #x1550)
- ("CANADIAN SYLLABICS WEST-CREE R" #x1551)
- ("CANADIAN SYLLABICS MEDIAL R" #x1552)
- ("CANADIAN SYLLABICS FE" #x1553)
- ("CANADIAN SYLLABICS FAAI" #x1554)
- ("CANADIAN SYLLABICS FI" #x1555)
- ("CANADIAN SYLLABICS FII" #x1556)
- ("CANADIAN SYLLABICS FO" #x1557)
- ("CANADIAN SYLLABICS FOO" #x1558)
- ("CANADIAN SYLLABICS FA" #x1559)
- ("CANADIAN SYLLABICS FAA" #x155A)
- ("CANADIAN SYLLABICS FWAA" #x155B)
- ("CANADIAN SYLLABICS WEST-CREE FWAA" #x155C)
- ("CANADIAN SYLLABICS F" #x155D)
- ("CANADIAN SYLLABICS THE" #x155E)
- ("CANADIAN SYLLABICS N-CREE THE" #x155F)
- ("CANADIAN SYLLABICS THI" #x1560)
- ("CANADIAN SYLLABICS N-CREE THI" #x1561)
- ("CANADIAN SYLLABICS THII" #x1562)
- ("CANADIAN SYLLABICS N-CREE THII" #x1563)
- ("CANADIAN SYLLABICS THO" #x1564)
- ("CANADIAN SYLLABICS THOO" #x1565)
- ("CANADIAN SYLLABICS THA" #x1566)
- ("CANADIAN SYLLABICS THAA" #x1567)
- ("CANADIAN SYLLABICS THWAA" #x1568)
- ("CANADIAN SYLLABICS WEST-CREE THWAA" #x1569)
- ("CANADIAN SYLLABICS TH" #x156A)
- ("CANADIAN SYLLABICS TTHE" #x156B)
- ("CANADIAN SYLLABICS TTHI" #x156C)
- ("CANADIAN SYLLABICS TTHO" #x156D)
- ("CANADIAN SYLLABICS TTHA" #x156E)
- ("CANADIAN SYLLABICS TTH" #x156F)
- ("CANADIAN SYLLABICS TYE" #x1570)
- ("CANADIAN SYLLABICS TYI" #x1571)
- ("CANADIAN SYLLABICS TYO" #x1572)
- ("CANADIAN SYLLABICS TYA" #x1573)
- ("CANADIAN SYLLABICS NUNAVIK HE" #x1574)
- ("CANADIAN SYLLABICS NUNAVIK HI" #x1575)
- ("CANADIAN SYLLABICS NUNAVIK HII" #x1576)
- ("CANADIAN SYLLABICS NUNAVIK HO" #x1577)
- ("CANADIAN SYLLABICS NUNAVIK HOO" #x1578)
- ("CANADIAN SYLLABICS NUNAVIK HA" #x1579)
- ("CANADIAN SYLLABICS NUNAVIK HAA" #x157A)
- ("CANADIAN SYLLABICS NUNAVIK H" #x157B)
- ("CANADIAN SYLLABICS NUNAVUT H" #x157C)
- ("CANADIAN SYLLABICS HK" #x157D)
- ("CANADIAN SYLLABICS QAAI" #x157E)
- ("CANADIAN SYLLABICS QI" #x157F)
- ("CANADIAN SYLLABICS QII" #x1580)
- ("CANADIAN SYLLABICS QO" #x1581)
- ("CANADIAN SYLLABICS QOO" #x1582)
- ("CANADIAN SYLLABICS QA" #x1583)
- ("CANADIAN SYLLABICS QAA" #x1584)
- ("CANADIAN SYLLABICS Q" #x1585)
- ("CANADIAN SYLLABICS TLHE" #x1586)
- ("CANADIAN SYLLABICS TLHI" #x1587)
- ("CANADIAN SYLLABICS TLHO" #x1588)
- ("CANADIAN SYLLABICS TLHA" #x1589)
- ("CANADIAN SYLLABICS WEST-CREE RE" #x158A)
- ("CANADIAN SYLLABICS WEST-CREE RI" #x158B)
- ("CANADIAN SYLLABICS WEST-CREE RO" #x158C)
- ("CANADIAN SYLLABICS WEST-CREE RA" #x158D)
- ("CANADIAN SYLLABICS NGAAI" #x158E)
- ("CANADIAN SYLLABICS NGI" #x158F)
- ("CANADIAN SYLLABICS NGII" #x1590)
- ("CANADIAN SYLLABICS NGO" #x1591)
- ("CANADIAN SYLLABICS NGOO" #x1592)
- ("CANADIAN SYLLABICS NGA" #x1593)
- ("CANADIAN SYLLABICS NGAA" #x1594)
- ("CANADIAN SYLLABICS NG" #x1595)
- ("CANADIAN SYLLABICS NNG" #x1596)
- ("CANADIAN SYLLABICS SAYISI SHE" #x1597)
- ("CANADIAN SYLLABICS SAYISI SHI" #x1598)
- ("CANADIAN SYLLABICS SAYISI SHO" #x1599)
- ("CANADIAN SYLLABICS SAYISI SHA" #x159A)
- ("CANADIAN SYLLABICS WOODS-CREE THE" #x159B)
- ("CANADIAN SYLLABICS WOODS-CREE THI" #x159C)
- ("CANADIAN SYLLABICS WOODS-CREE THO" #x159D)
- ("CANADIAN SYLLABICS WOODS-CREE THA" #x159E)
- ("CANADIAN SYLLABICS WOODS-CREE TH" #x159F)
- ("CANADIAN SYLLABICS LHI" #x15A0)
- ("CANADIAN SYLLABICS LHII" #x15A1)
- ("CANADIAN SYLLABICS LHO" #x15A2)
- ("CANADIAN SYLLABICS LHOO" #x15A3)
- ("CANADIAN SYLLABICS LHA" #x15A4)
- ("CANADIAN SYLLABICS LHAA" #x15A5)
- ("CANADIAN SYLLABICS LH" #x15A6)
- ("CANADIAN SYLLABICS TH-CREE THE" #x15A7)
- ("CANADIAN SYLLABICS TH-CREE THI" #x15A8)
- ("CANADIAN SYLLABICS TH-CREE THII" #x15A9)
- ("CANADIAN SYLLABICS TH-CREE THO" #x15AA)
- ("CANADIAN SYLLABICS TH-CREE THOO" #x15AB)
- ("CANADIAN SYLLABICS TH-CREE THA" #x15AC)
- ("CANADIAN SYLLABICS TH-CREE THAA" #x15AD)
- ("CANADIAN SYLLABICS TH-CREE TH" #x15AE)
- ("CANADIAN SYLLABICS AIVILIK B" #x15AF)
- ("CANADIAN SYLLABICS BLACKFOOT E" #x15B0)
- ("CANADIAN SYLLABICS BLACKFOOT I" #x15B1)
- ("CANADIAN SYLLABICS BLACKFOOT O" #x15B2)
- ("CANADIAN SYLLABICS BLACKFOOT A" #x15B3)
- ("CANADIAN SYLLABICS BLACKFOOT WE" #x15B4)
- ("CANADIAN SYLLABICS BLACKFOOT WI" #x15B5)
- ("CANADIAN SYLLABICS BLACKFOOT WO" #x15B6)
- ("CANADIAN SYLLABICS BLACKFOOT WA" #x15B7)
- ("CANADIAN SYLLABICS BLACKFOOT NE" #x15B8)
- ("CANADIAN SYLLABICS BLACKFOOT NI" #x15B9)
- ("CANADIAN SYLLABICS BLACKFOOT NO" #x15BA)
- ("CANADIAN SYLLABICS BLACKFOOT NA" #x15BB)
- ("CANADIAN SYLLABICS BLACKFOOT KE" #x15BC)
- ("CANADIAN SYLLABICS BLACKFOOT KI" #x15BD)
- ("CANADIAN SYLLABICS BLACKFOOT KO" #x15BE)
- ("CANADIAN SYLLABICS BLACKFOOT KA" #x15BF)
- ("CANADIAN SYLLABICS SAYISI HE" #x15C0)
- ("CANADIAN SYLLABICS SAYISI HI" #x15C1)
- ("CANADIAN SYLLABICS SAYISI HO" #x15C2)
- ("CANADIAN SYLLABICS SAYISI HA" #x15C3)
- ("CANADIAN SYLLABICS CARRIER GHU" #x15C4)
- ("CANADIAN SYLLABICS CARRIER GHO" #x15C5)
- ("CANADIAN SYLLABICS CARRIER GHE" #x15C6)
- ("CANADIAN SYLLABICS CARRIER GHEE" #x15C7)
- ("CANADIAN SYLLABICS CARRIER GHI" #x15C8)
- ("CANADIAN SYLLABICS CARRIER GHA" #x15C9)
- ("CANADIAN SYLLABICS CARRIER RU" #x15CA)
- ("CANADIAN SYLLABICS CARRIER RO" #x15CB)
- ("CANADIAN SYLLABICS CARRIER RE" #x15CC)
- ("CANADIAN SYLLABICS CARRIER REE" #x15CD)
- ("CANADIAN SYLLABICS CARRIER RI" #x15CE)
- ("CANADIAN SYLLABICS CARRIER RA" #x15CF)
- ("CANADIAN SYLLABICS CARRIER WU" #x15D0)
- ("CANADIAN SYLLABICS CARRIER WO" #x15D1)
- ("CANADIAN SYLLABICS CARRIER WE" #x15D2)
- ("CANADIAN SYLLABICS CARRIER WEE" #x15D3)
- ("CANADIAN SYLLABICS CARRIER WI" #x15D4)
- ("CANADIAN SYLLABICS CARRIER WA" #x15D5)
- ("CANADIAN SYLLABICS CARRIER HWU" #x15D6)
- ("CANADIAN SYLLABICS CARRIER HWO" #x15D7)
- ("CANADIAN SYLLABICS CARRIER HWE" #x15D8)
- ("CANADIAN SYLLABICS CARRIER HWEE" #x15D9)
- ("CANADIAN SYLLABICS CARRIER HWI" #x15DA)
- ("CANADIAN SYLLABICS CARRIER HWA" #x15DB)
- ("CANADIAN SYLLABICS CARRIER THU" #x15DC)
- ("CANADIAN SYLLABICS CARRIER THO" #x15DD)
- ("CANADIAN SYLLABICS CARRIER THE" #x15DE)
- ("CANADIAN SYLLABICS CARRIER THEE" #x15DF)
- ("CANADIAN SYLLABICS CARRIER THI" #x15E0)
- ("CANADIAN SYLLABICS CARRIER THA" #x15E1)
- ("CANADIAN SYLLABICS CARRIER TTU" #x15E2)
- ("CANADIAN SYLLABICS CARRIER TTO" #x15E3)
- ("CANADIAN SYLLABICS CARRIER TTE" #x15E4)
- ("CANADIAN SYLLABICS CARRIER TTEE" #x15E5)
- ("CANADIAN SYLLABICS CARRIER TTI" #x15E6)
- ("CANADIAN SYLLABICS CARRIER TTA" #x15E7)
- ("CANADIAN SYLLABICS CARRIER PU" #x15E8)
- ("CANADIAN SYLLABICS CARRIER PO" #x15E9)
- ("CANADIAN SYLLABICS CARRIER PE" #x15EA)
- ("CANADIAN SYLLABICS CARRIER PEE" #x15EB)
- ("CANADIAN SYLLABICS CARRIER PI" #x15EC)
- ("CANADIAN SYLLABICS CARRIER PA" #x15ED)
- ("CANADIAN SYLLABICS CARRIER P" #x15EE)
- ("CANADIAN SYLLABICS CARRIER GU" #x15EF)
- ("CANADIAN SYLLABICS CARRIER GO" #x15F0)
- ("CANADIAN SYLLABICS CARRIER GE" #x15F1)
- ("CANADIAN SYLLABICS CARRIER GEE" #x15F2)
- ("CANADIAN SYLLABICS CARRIER GI" #x15F3)
- ("CANADIAN SYLLABICS CARRIER GA" #x15F4)
- ("CANADIAN SYLLABICS CARRIER KHU" #x15F5)
- ("CANADIAN SYLLABICS CARRIER KHO" #x15F6)
- ("CANADIAN SYLLABICS CARRIER KHE" #x15F7)
- ("CANADIAN SYLLABICS CARRIER KHEE" #x15F8)
- ("CANADIAN SYLLABICS CARRIER KHI" #x15F9)
- ("CANADIAN SYLLABICS CARRIER KHA" #x15FA)
- ("CANADIAN SYLLABICS CARRIER KKU" #x15FB)
- ("CANADIAN SYLLABICS CARRIER KKO" #x15FC)
- ("CANADIAN SYLLABICS CARRIER KKE" #x15FD)
- ("CANADIAN SYLLABICS CARRIER KKEE" #x15FE)
- ("CANADIAN SYLLABICS CARRIER KKI" #x15FF)
- ("CANADIAN SYLLABICS CARRIER KKA" #x1600)
- ("CANADIAN SYLLABICS CARRIER KK" #x1601)
- ("CANADIAN SYLLABICS CARRIER NU" #x1602)
- ("CANADIAN SYLLABICS CARRIER NO" #x1603)
- ("CANADIAN SYLLABICS CARRIER NE" #x1604)
- ("CANADIAN SYLLABICS CARRIER NEE" #x1605)
- ("CANADIAN SYLLABICS CARRIER NI" #x1606)
- ("CANADIAN SYLLABICS CARRIER NA" #x1607)
- ("CANADIAN SYLLABICS CARRIER MU" #x1608)
- ("CANADIAN SYLLABICS CARRIER MO" #x1609)
- ("CANADIAN SYLLABICS CARRIER ME" #x160A)
- ("CANADIAN SYLLABICS CARRIER MEE" #x160B)
- ("CANADIAN SYLLABICS CARRIER MI" #x160C)
- ("CANADIAN SYLLABICS CARRIER MA" #x160D)
- ("CANADIAN SYLLABICS CARRIER YU" #x160E)
- ("CANADIAN SYLLABICS CARRIER YO" #x160F)
- ("CANADIAN SYLLABICS CARRIER YE" #x1610)
- ("CANADIAN SYLLABICS CARRIER YEE" #x1611)
- ("CANADIAN SYLLABICS CARRIER YI" #x1612)
- ("CANADIAN SYLLABICS CARRIER YA" #x1613)
- ("CANADIAN SYLLABICS CARRIER JU" #x1614)
- ("CANADIAN SYLLABICS SAYISI JU" #x1615)
- ("CANADIAN SYLLABICS CARRIER JO" #x1616)
- ("CANADIAN SYLLABICS CARRIER JE" #x1617)
- ("CANADIAN SYLLABICS CARRIER JEE" #x1618)
- ("CANADIAN SYLLABICS CARRIER JI" #x1619)
- ("CANADIAN SYLLABICS SAYISI JI" #x161A)
- ("CANADIAN SYLLABICS CARRIER JA" #x161B)
- ("CANADIAN SYLLABICS CARRIER JJU" #x161C)
- ("CANADIAN SYLLABICS CARRIER JJO" #x161D)
- ("CANADIAN SYLLABICS CARRIER JJE" #x161E)
- ("CANADIAN SYLLABICS CARRIER JJEE" #x161F)
- ("CANADIAN SYLLABICS CARRIER JJI" #x1620)
- ("CANADIAN SYLLABICS CARRIER JJA" #x1621)
- ("CANADIAN SYLLABICS CARRIER LU" #x1622)
- ("CANADIAN SYLLABICS CARRIER LO" #x1623)
- ("CANADIAN SYLLABICS CARRIER LE" #x1624)
- ("CANADIAN SYLLABICS CARRIER LEE" #x1625)
- ("CANADIAN SYLLABICS CARRIER LI" #x1626)
- ("CANADIAN SYLLABICS CARRIER LA" #x1627)
- ("CANADIAN SYLLABICS CARRIER DLU" #x1628)
- ("CANADIAN SYLLABICS CARRIER DLO" #x1629)
- ("CANADIAN SYLLABICS CARRIER DLE" #x162A)
- ("CANADIAN SYLLABICS CARRIER DLEE" #x162B)
- ("CANADIAN SYLLABICS CARRIER DLI" #x162C)
- ("CANADIAN SYLLABICS CARRIER DLA" #x162D)
- ("CANADIAN SYLLABICS CARRIER LHU" #x162E)
- ("CANADIAN SYLLABICS CARRIER LHO" #x162F)
- ("CANADIAN SYLLABICS CARRIER LHE" #x1630)
- ("CANADIAN SYLLABICS CARRIER LHEE" #x1631)
- ("CANADIAN SYLLABICS CARRIER LHI" #x1632)
- ("CANADIAN SYLLABICS CARRIER LHA" #x1633)
- ("CANADIAN SYLLABICS CARRIER TLHU" #x1634)
- ("CANADIAN SYLLABICS CARRIER TLHO" #x1635)
- ("CANADIAN SYLLABICS CARRIER TLHE" #x1636)
- ("CANADIAN SYLLABICS CARRIER TLHEE" #x1637)
- ("CANADIAN SYLLABICS CARRIER TLHI" #x1638)
- ("CANADIAN SYLLABICS CARRIER TLHA" #x1639)
- ("CANADIAN SYLLABICS CARRIER TLU" #x163A)
- ("CANADIAN SYLLABICS CARRIER TLO" #x163B)
- ("CANADIAN SYLLABICS CARRIER TLE" #x163C)
- ("CANADIAN SYLLABICS CARRIER TLEE" #x163D)
- ("CANADIAN SYLLABICS CARRIER TLI" #x163E)
- ("CANADIAN SYLLABICS CARRIER TLA" #x163F)
- ("CANADIAN SYLLABICS CARRIER ZU" #x1640)
- ("CANADIAN SYLLABICS CARRIER ZO" #x1641)
- ("CANADIAN SYLLABICS CARRIER ZE" #x1642)
- ("CANADIAN SYLLABICS CARRIER ZEE" #x1643)
- ("CANADIAN SYLLABICS CARRIER ZI" #x1644)
- ("CANADIAN SYLLABICS CARRIER ZA" #x1645)
- ("CANADIAN SYLLABICS CARRIER Z" #x1646)
- ("CANADIAN SYLLABICS CARRIER INITIAL Z" #x1647)
- ("CANADIAN SYLLABICS CARRIER DZU" #x1648)
- ("CANADIAN SYLLABICS CARRIER DZO" #x1649)
- ("CANADIAN SYLLABICS CARRIER DZE" #x164A)
- ("CANADIAN SYLLABICS CARRIER DZEE" #x164B)
- ("CANADIAN SYLLABICS CARRIER DZI" #x164C)
- ("CANADIAN SYLLABICS CARRIER DZA" #x164D)
- ("CANADIAN SYLLABICS CARRIER SU" #x164E)
- ("CANADIAN SYLLABICS CARRIER SO" #x164F)
- ("CANADIAN SYLLABICS CARRIER SE" #x1650)
- ("CANADIAN SYLLABICS CARRIER SEE" #x1651)
- ("CANADIAN SYLLABICS CARRIER SI" #x1652)
- ("CANADIAN SYLLABICS CARRIER SA" #x1653)
- ("CANADIAN SYLLABICS CARRIER SHU" #x1654)
- ("CANADIAN SYLLABICS CARRIER SHO" #x1655)
- ("CANADIAN SYLLABICS CARRIER SHE" #x1656)
- ("CANADIAN SYLLABICS CARRIER SHEE" #x1657)
- ("CANADIAN SYLLABICS CARRIER SHI" #x1658)
- ("CANADIAN SYLLABICS CARRIER SHA" #x1659)
- ("CANADIAN SYLLABICS CARRIER SH" #x165A)
- ("CANADIAN SYLLABICS CARRIER TSU" #x165B)
- ("CANADIAN SYLLABICS CARRIER TSO" #x165C)
- ("CANADIAN SYLLABICS CARRIER TSE" #x165D)
- ("CANADIAN SYLLABICS CARRIER TSEE" #x165E)
- ("CANADIAN SYLLABICS CARRIER TSI" #x165F)
- ("CANADIAN SYLLABICS CARRIER TSA" #x1660)
- ("CANADIAN SYLLABICS CARRIER CHU" #x1661)
- ("CANADIAN SYLLABICS CARRIER CHO" #x1662)
- ("CANADIAN SYLLABICS CARRIER CHE" #x1663)
- ("CANADIAN SYLLABICS CARRIER CHEE" #x1664)
- ("CANADIAN SYLLABICS CARRIER CHI" #x1665)
- ("CANADIAN SYLLABICS CARRIER CHA" #x1666)
- ("CANADIAN SYLLABICS CARRIER TTSU" #x1667)
- ("CANADIAN SYLLABICS CARRIER TTSO" #x1668)
- ("CANADIAN SYLLABICS CARRIER TTSE" #x1669)
- ("CANADIAN SYLLABICS CARRIER TTSEE" #x166A)
- ("CANADIAN SYLLABICS CARRIER TTSI" #x166B)
- ("CANADIAN SYLLABICS CARRIER TTSA" #x166C)
- ("CANADIAN SYLLABICS CHI SIGN" #x166D)
- ("CANADIAN SYLLABICS FULL STOP" #x166E)
- ("CANADIAN SYLLABICS QAI" #x166F)
- ("CANADIAN SYLLABICS NGAI" #x1670)
- ("CANADIAN SYLLABICS NNGI" #x1671)
- ("CANADIAN SYLLABICS NNGII" #x1672)
- ("CANADIAN SYLLABICS NNGO" #x1673)
- ("CANADIAN SYLLABICS NNGOO" #x1674)
- ("CANADIAN SYLLABICS NNGA" #x1675)
- ("CANADIAN SYLLABICS NNGAA" #x1676)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'ogham
- '(("OGHAM SPACE MARK" #x1680)
- ("OGHAM LETTER BEITH" #x1681)
- ("OGHAM LETTER LUIS" #x1682)
- ("OGHAM LETTER FEARN" #x1683)
- ("OGHAM LETTER SAIL" #x1684)
- ("OGHAM LETTER NION" #x1685)
- ("OGHAM LETTER UATH" #x1686)
- ("OGHAM LETTER DAIR" #x1687)
- ("OGHAM LETTER TINNE" #x1688)
- ("OGHAM LETTER COLL" #x1689)
- ("OGHAM LETTER CEIRT" #x168A)
- ("OGHAM LETTER MUIN" #x168B)
- ("OGHAM LETTER GORT" #x168C)
- ("OGHAM LETTER NGEADAL" #x168D)
- ("OGHAM LETTER STRAIF" #x168E)
- ("OGHAM LETTER RUIS" #x168F)
- ("OGHAM LETTER AILM" #x1690)
- ("OGHAM LETTER ONN" #x1691)
- ("OGHAM LETTER UR" #x1692)
- ("OGHAM LETTER EADHADH" #x1693)
- ("OGHAM LETTER IODHADH" #x1694)
- ("OGHAM LETTER EABHADH" #x1695)
- ("OGHAM LETTER OR" #x1696)
- ("OGHAM LETTER UILLEANN" #x1697)
- ("OGHAM LETTER IFIN" #x1698)
- ("OGHAM LETTER EAMHANCHOLL" #x1699)
- ("OGHAM LETTER PEITH" #x169A)
- ("OGHAM FEATHER MARK" #x169B)
- ("OGHAM REVERSED FEATHER MARK" #x169C)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'runic
- '(("RUNIC LETTER FEHU FEOH FE F" #x16A0)
- ("RUNIC LETTER V" #x16A1)
- ("RUNIC LETTER URUZ UR U" #x16A2)
- ("RUNIC LETTER YR" #x16A3)
- ("RUNIC LETTER Y" #x16A4)
- ("RUNIC LETTER W" #x16A5)
- ("RUNIC LETTER THURISAZ THURS THORN" #x16A6)
- ("RUNIC LETTER ETH" #x16A7)
- ("RUNIC LETTER ANSUZ A" #x16A8)
- ("RUNIC LETTER OS O" #x16A9)
- ("RUNIC LETTER AC A" #x16AA)
- ("RUNIC LETTER AESC" #x16AB)
- ("RUNIC LETTER LONG-BRANCH-OSS O" #x16AC)
- ("RUNIC LETTER SHORT-TWIG-OSS O" #x16AD)
- ("RUNIC LETTER O" #x16AE)
- ("RUNIC LETTER OE" #x16AF)
- ("RUNIC LETTER ON" #x16B0)
- ("RUNIC LETTER RAIDO RAD REID R" #x16B1)
- ("RUNIC LETTER KAUNA" #x16B2)
- ("RUNIC LETTER CEN" #x16B3)
- ("RUNIC LETTER KAUN K" #x16B4)
- ("RUNIC LETTER G" #x16B5)
- ("RUNIC LETTER ENG" #x16B6)
- ("RUNIC LETTER GEBO GYFU G" #x16B7)
- ("RUNIC LETTER GAR" #x16B8)
- ("RUNIC LETTER WUNJO WYNN W" #x16B9)
- ("RUNIC LETTER HAGLAZ H" #x16BA)
- ("RUNIC LETTER HAEGL H" #x16BB)
- ("RUNIC LETTER LONG-BRANCH-HAGALL H" #x16BC)
- ("RUNIC LETTER SHORT-TWIG-HAGALL H" #x16BD)
- ("RUNIC LETTER NAUDIZ NYD NAUD N" #x16BE)
- ("RUNIC LETTER SHORT-TWIG-NAUD N" #x16BF)
- ("RUNIC LETTER DOTTED-N" #x16C0)
- ("RUNIC LETTER ISAZ IS ISS I" #x16C1)
- ("RUNIC LETTER E" #x16C2)
- ("RUNIC LETTER JERAN J" #x16C3)
- ("RUNIC LETTER GER" #x16C4)
- ("RUNIC LETTER LONG-BRANCH-AR AE" #x16C5)
- ("RUNIC LETTER SHORT-TWIG-AR A" #x16C6)
- ("RUNIC LETTER IWAZ EOH" #x16C7)
- ("RUNIC LETTER PERTHO PEORTH P" #x16C8)
- ("RUNIC LETTER ALGIZ EOLHX" #x16C9)
- ("RUNIC LETTER SOWILO S" #x16CA)
- ("RUNIC LETTER SIGEL LONG-BRANCH-SOL S" #x16CB)
- ("RUNIC LETTER SHORT-TWIG-SOL S" #x16CC)
- ("RUNIC LETTER C" #x16CD)
- ("RUNIC LETTER Z" #x16CE)
- ("RUNIC LETTER TIWAZ TIR TYR T" #x16CF)
- ("RUNIC LETTER SHORT-TWIG-TYR T" #x16D0)
- ("RUNIC LETTER D" #x16D1)
- ("RUNIC LETTER BERKANAN BEORC BJARKAN B" #x16D2)
- ("RUNIC LETTER SHORT-TWIG-BJARKAN B" #x16D3)
- ("RUNIC LETTER DOTTED-P" #x16D4)
- ("RUNIC LETTER OPEN-P" #x16D5)
- ("RUNIC LETTER EHWAZ EH E" #x16D6)
- ("RUNIC LETTER MANNAZ MAN M" #x16D7)
- ("RUNIC LETTER LONG-BRANCH-MADR M" #x16D8)
- ("RUNIC LETTER SHORT-TWIG-MADR M" #x16D9)
- ("RUNIC LETTER LAUKAZ LAGU LOGR L" #x16DA)
- ("RUNIC LETTER DOTTED-L" #x16DB)
- ("RUNIC LETTER INGWAZ" #x16DC)
- ("RUNIC LETTER ING" #x16DD)
- ("RUNIC LETTER DAGAZ DAEG D" #x16DE)
- ("RUNIC LETTER OTHALAN ETHEL O" #x16DF)
- ("RUNIC LETTER EAR" #x16E0)
- ("RUNIC LETTER IOR" #x16E1)
- ("RUNIC LETTER CWEORTH" #x16E2)
- ("RUNIC LETTER CALC" #x16E3)
- ("RUNIC LETTER CEALC" #x16E4)
- ("RUNIC LETTER STAN" #x16E5)
- ("RUNIC LETTER LONG-BRANCH-YR" #x16E6)
- ("RUNIC LETTER SHORT-TWIG-YR" #x16E7)
- ("RUNIC LETTER ICELANDIC-YR" #x16E8)
- ("RUNIC LETTER Q" #x16E9)
- ("RUNIC LETTER X" #x16EA)
- ("RUNIC SINGLE PUNCTUATION" #x16EB)
- ("RUNIC MULTIPLE PUNCTUATION" #x16EC)
- ("RUNIC CROSS PUNCTUATION" #x16ED)
- ("RUNIC ARLAUG SYMBOL" #x16EE)
- ("RUNIC TVIMADUR SYMBOL" #x16EF)
- ("RUNIC BELGTHOR SYMBOL" #x16F0)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'tagalog
- '(("TAGALOG LETTER A" #x1700)
- ("TAGALOG LETTER I" #x1701)
- ("TAGALOG LETTER U" #x1702)
- ("TAGALOG LETTER KA" #x1703)
- ("TAGALOG LETTER GA" #x1704)
- ("TAGALOG LETTER NGA" #x1705)
- ("TAGALOG LETTER TA" #x1706)
- ("TAGALOG LETTER DA" #x1707)
- ("TAGALOG LETTER NA" #x1708)
- ("TAGALOG LETTER PA" #x1709)
- ("TAGALOG LETTER BA" #x170A)
- ("TAGALOG LETTER MA" #x170B)
- ("TAGALOG LETTER YA" #x170C)
- ("TAGALOG LETTER LA" #x170E)
- ("TAGALOG LETTER WA" #x170F)
- ("TAGALOG LETTER SA" #x1710)
- ("TAGALOG LETTER HA" #x1711)
- ("TAGALOG VOWEL SIGN I" #x1712)
- ("TAGALOG VOWEL SIGN U" #x1713)
- ("TAGALOG SIGN VIRAMA" #x1714)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'hanunoo
- '(("HANUNOO LETTER A" #x1720)
- ("HANUNOO LETTER I" #x1721)
- ("HANUNOO LETTER U" #x1722)
- ("HANUNOO LETTER KA" #x1723)
- ("HANUNOO LETTER GA" #x1724)
- ("HANUNOO LETTER NGA" #x1725)
- ("HANUNOO LETTER TA" #x1726)
- ("HANUNOO LETTER DA" #x1727)
- ("HANUNOO LETTER NA" #x1728)
- ("HANUNOO LETTER PA" #x1729)
- ("HANUNOO LETTER BA" #x172A)
- ("HANUNOO LETTER MA" #x172B)
- ("HANUNOO LETTER YA" #x172C)
- ("HANUNOO LETTER RA" #x172D)
- ("HANUNOO LETTER LA" #x172E)
- ("HANUNOO LETTER WA" #x172F)
- ("HANUNOO LETTER SA" #x1730)
- ("HANUNOO LETTER HA" #x1731)
- ("HANUNOO VOWEL SIGN I" #x1732)
- ("HANUNOO VOWEL SIGN U" #x1733)
- ("HANUNOO SIGN PAMUDPOD" #x1734)
- ("PHILIPPINE SINGLE PUNCTUATION" #x1735)
- ("PHILIPPINE DOUBLE PUNCTUATION" #x1736)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'buhid
- '(("BUHID LETTER A" #x1740)
- ("BUHID LETTER I" #x1741)
- ("BUHID LETTER U" #x1742)
- ("BUHID LETTER KA" #x1743)
- ("BUHID LETTER GA" #x1744)
- ("BUHID LETTER NGA" #x1745)
- ("BUHID LETTER TA" #x1746)
- ("BUHID LETTER DA" #x1747)
- ("BUHID LETTER NA" #x1748)
- ("BUHID LETTER PA" #x1749)
- ("BUHID LETTER BA" #x174A)
- ("BUHID LETTER MA" #x174B)
- ("BUHID LETTER YA" #x174C)
- ("BUHID LETTER RA" #x174D)
- ("BUHID LETTER LA" #x174E)
- ("BUHID LETTER WA" #x174F)
- ("BUHID LETTER SA" #x1750)
- ("BUHID LETTER HA" #x1751)
- ("BUHID VOWEL SIGN I" #x1752)
- ("BUHID VOWEL SIGN U" #x1753)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'tagbanwa
- '(("TAGBANWA LETTER A" #x1760)
- ("TAGBANWA LETTER I" #x1761)
- ("TAGBANWA LETTER U" #x1762)
- ("TAGBANWA LETTER KA" #x1763)
- ("TAGBANWA LETTER GA" #x1764)
- ("TAGBANWA LETTER NGA" #x1765)
- ("TAGBANWA LETTER TA" #x1766)
- ("TAGBANWA LETTER DA" #x1767)
- ("TAGBANWA LETTER NA" #x1768)
- ("TAGBANWA LETTER PA" #x1769)
- ("TAGBANWA LETTER BA" #x176A)
- ("TAGBANWA LETTER MA" #x176B)
- ("TAGBANWA LETTER YA" #x176C)
- ("TAGBANWA LETTER LA" #x176E)
- ("TAGBANWA LETTER WA" #x176F)
- ("TAGBANWA LETTER SA" #x1770)
- ("TAGBANWA VOWEL SIGN I" #x1772)
- ("TAGBANWA VOWEL SIGN U" #x1773)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'khmer
- '(("KHMER LETTER KA" #x1780)
- ("KHMER LETTER KHA" #x1781)
- ("KHMER LETTER KO" #x1782)
- ("KHMER LETTER KHO" #x1783)
- ("KHMER LETTER NGO" #x1784)
- ("KHMER LETTER CA" #x1785)
- ("KHMER LETTER CHA" #x1786)
- ("KHMER LETTER CO" #x1787)
- ("KHMER LETTER CHO" #x1788)
- ("KHMER LETTER NYO" #x1789)
- ("KHMER LETTER DA" #x178A)
- ("KHMER LETTER TTHA" #x178B)
- ("KHMER LETTER DO" #x178C)
- ("KHMER LETTER TTHO" #x178D)
- ("KHMER LETTER NNO" #x178E)
- ("KHMER LETTER TA" #x178F)
- ("KHMER LETTER THA" #x1790)
- ("KHMER LETTER TO" #x1791)
- ("KHMER LETTER THO" #x1792)
- ("KHMER LETTER NO" #x1793)
- ("KHMER LETTER BA" #x1794)
- ("KHMER LETTER PHA" #x1795)
- ("KHMER LETTER PO" #x1796)
- ("KHMER LETTER PHO" #x1797)
- ("KHMER LETTER MO" #x1798)
- ("KHMER LETTER YO" #x1799)
- ("KHMER LETTER RO" #x179A)
- ("KHMER LETTER LO" #x179B)
- ("KHMER LETTER VO" #x179C)
- ("KHMER LETTER SHA" #x179D)
- ("KHMER LETTER SSO" #x179E)
- ("KHMER LETTER SA" #x179F)
- ("KHMER LETTER HA" #x17A0)
- ("KHMER LETTER LA" #x17A1)
- ("KHMER LETTER QA" #x17A2)
- ("KHMER INDEPENDENT VOWEL QAQ" #x17A3)
- ("KHMER INDEPENDENT VOWEL QAA" #x17A4)
- ("KHMER INDEPENDENT VOWEL QI" #x17A5)
- ("KHMER INDEPENDENT VOWEL QII" #x17A6)
- ("KHMER INDEPENDENT VOWEL QU" #x17A7)
- ("KHMER INDEPENDENT VOWEL QUK" #x17A8)
- ("KHMER INDEPENDENT VOWEL QUU" #x17A9)
- ("KHMER INDEPENDENT VOWEL QUUV" #x17AA)
- ("KHMER INDEPENDENT VOWEL RY" #x17AB)
- ("KHMER INDEPENDENT VOWEL RYY" #x17AC)
- ("KHMER INDEPENDENT VOWEL LY" #x17AD)
- ("KHMER INDEPENDENT VOWEL LYY" #x17AE)
- ("KHMER INDEPENDENT VOWEL QE" #x17AF)
- ("KHMER INDEPENDENT VOWEL QAI" #x17B0)
- ("KHMER INDEPENDENT VOWEL QOO TYPE ONE" #x17B1)
- ("KHMER INDEPENDENT VOWEL QOO TYPE TWO" #x17B2)
- ("KHMER INDEPENDENT VOWEL QAU" #x17B3)
- ("KHMER VOWEL INHERENT AQ" #x17B4)
- ("KHMER VOWEL INHERENT AA" #x17B5)
- ("KHMER VOWEL SIGN AA" #x17B6)
- ("KHMER VOWEL SIGN I" #x17B7)
- ("KHMER VOWEL SIGN II" #x17B8)
- ("KHMER VOWEL SIGN Y" #x17B9)
- ("KHMER VOWEL SIGN YY" #x17BA)
- ("KHMER VOWEL SIGN U" #x17BB)
- ("KHMER VOWEL SIGN UU" #x17BC)
- ("KHMER VOWEL SIGN UA" #x17BD)
- ("KHMER VOWEL SIGN OE" #x17BE)
- ("KHMER VOWEL SIGN YA" #x17BF)
- ("KHMER VOWEL SIGN IE" #x17C0)
- ("KHMER VOWEL SIGN E" #x17C1)
- ("KHMER VOWEL SIGN AE" #x17C2)
- ("KHMER VOWEL SIGN AI" #x17C3)
- ("KHMER VOWEL SIGN OO" #x17C4)
- ("KHMER VOWEL SIGN AU" #x17C5)
- ("KHMER SIGN NIKAHIT" #x17C6)
- ("KHMER SIGN REAHMUK" #x17C7)
- ("KHMER SIGN YUUKALEAPINTU" #x17C8)
- ("KHMER SIGN MUUSIKATOAN" #x17C9)
- ("KHMER SIGN TRIISAP" #x17CA)
- ("KHMER SIGN BANTOC" #x17CB)
- ("KHMER SIGN ROBAT" #x17CC)
- ("KHMER SIGN TOANDAKHIAT" #x17CD)
- ("KHMER SIGN KAKABAT" #x17CE)
- ("KHMER SIGN AHSDA" #x17CF)
- ("KHMER SIGN SAMYOK SANNYA" #x17D0)
- ("KHMER SIGN VIRIAM" #x17D1)
- ("KHMER SIGN COENG" #x17D2)
- ("KHMER SIGN BATHAMASAT" #x17D3)
- ("KHMER SIGN KHAN" #x17D4)
- ("KHMER SIGN BARIYOOSAN" #x17D5)
- ("KHMER SIGN CAMNUC PII KUUH" #x17D6)
- ("KHMER SIGN LEK TOO" #x17D7)
- ("KHMER SIGN BEYYAL" #x17D8)
- ("KHMER SIGN PHNAEK MUAN" #x17D9)
- ("KHMER SIGN KOOMUUT" #x17DA)
- ("KHMER CURRENCY SYMBOL RIEL" #x17DB)
- ("KHMER SIGN AVAKRAHASANYA" #x17DC)
- ("KHMER DIGIT ZERO" #x17E0)
- ("KHMER DIGIT ONE" #x17E1)
- ("KHMER DIGIT TWO" #x17E2)
- ("KHMER DIGIT THREE" #x17E3)
- ("KHMER DIGIT FOUR" #x17E4)
- ("KHMER DIGIT FIVE" #x17E5)
- ("KHMER DIGIT SIX" #x17E6)
- ("KHMER DIGIT SEVEN" #x17E7)
- ("KHMER DIGIT EIGHT" #x17E8)
- ("KHMER DIGIT NINE" #x17E9)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'mongolian
- '(("MONGOLIAN BIRGA" #x1800)
- ("MONGOLIAN ELLIPSIS" #x1801)
- ("MONGOLIAN COMMA" #x1802)
- ("MONGOLIAN FULL STOP" #x1803)
- ("MONGOLIAN COLON" #x1804)
- ("MONGOLIAN FOUR DOTS" #x1805)
- ("MONGOLIAN TODO SOFT HYPHEN" #x1806)
- ("MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER" #x1807)
- ("MONGOLIAN MANCHU COMMA" #x1808)
- ("MONGOLIAN MANCHU FULL STOP" #x1809)
- ("MONGOLIAN NIRUGU" #x180A)
- ("MONGOLIAN FREE VARIATION SELECTOR ONE" #x180B)
- ("MONGOLIAN FREE VARIATION SELECTOR TWO" #x180C)
- ("MONGOLIAN FREE VARIATION SELECTOR THREE" #x180D)
- ("MONGOLIAN VOWEL SEPARATOR" #x180E)
- ("MONGOLIAN DIGIT ZERO" #x1810)
- ("MONGOLIAN DIGIT ONE" #x1811)
- ("MONGOLIAN DIGIT TWO" #x1812)
- ("MONGOLIAN DIGIT THREE" #x1813)
- ("MONGOLIAN DIGIT FOUR" #x1814)
- ("MONGOLIAN DIGIT FIVE" #x1815)
- ("MONGOLIAN DIGIT SIX" #x1816)
- ("MONGOLIAN DIGIT SEVEN" #x1817)
- ("MONGOLIAN DIGIT EIGHT" #x1818)
- ("MONGOLIAN DIGIT NINE" #x1819)
- ("MONGOLIAN LETTER A" #x1820)
- ("MONGOLIAN LETTER E" #x1821)
- ("MONGOLIAN LETTER I" #x1822)
- ("MONGOLIAN LETTER O" #x1823)
- ("MONGOLIAN LETTER U" #x1824)
- ("MONGOLIAN LETTER OE" #x1825)
- ("MONGOLIAN LETTER UE" #x1826)
- ("MONGOLIAN LETTER EE" #x1827)
- ("MONGOLIAN LETTER NA" #x1828)
- ("MONGOLIAN LETTER ANG" #x1829)
- ("MONGOLIAN LETTER BA" #x182A)
- ("MONGOLIAN LETTER PA" #x182B)
- ("MONGOLIAN LETTER QA" #x182C)
- ("MONGOLIAN LETTER GA" #x182D)
- ("MONGOLIAN LETTER MA" #x182E)
- ("MONGOLIAN LETTER LA" #x182F)
- ("MONGOLIAN LETTER SA" #x1830)
- ("MONGOLIAN LETTER SHA" #x1831)
- ("MONGOLIAN LETTER TA" #x1832)
- ("MONGOLIAN LETTER DA" #x1833)
- ("MONGOLIAN LETTER CHA" #x1834)
- ("MONGOLIAN LETTER JA" #x1835)
- ("MONGOLIAN LETTER YA" #x1836)
- ("MONGOLIAN LETTER RA" #x1837)
- ("MONGOLIAN LETTER WA" #x1838)
- ("MONGOLIAN LETTER FA" #x1839)
- ("MONGOLIAN LETTER KA" #x183A)
- ("MONGOLIAN LETTER KHA" #x183B)
- ("MONGOLIAN LETTER TSA" #x183C)
- ("MONGOLIAN LETTER ZA" #x183D)
- ("MONGOLIAN LETTER HAA" #x183E)
- ("MONGOLIAN LETTER ZRA" #x183F)
- ("MONGOLIAN LETTER LHA" #x1840)
- ("MONGOLIAN LETTER ZHI" #x1841)
- ("MONGOLIAN LETTER CHI" #x1842)
- ("MONGOLIAN LETTER TODO LONG VOWEL SIGN" #x1843)
- ("MONGOLIAN LETTER TODO E" #x1844)
- ("MONGOLIAN LETTER TODO I" #x1845)
- ("MONGOLIAN LETTER TODO O" #x1846)
- ("MONGOLIAN LETTER TODO U" #x1847)
- ("MONGOLIAN LETTER TODO OE" #x1848)
- ("MONGOLIAN LETTER TODO UE" #x1849)
- ("MONGOLIAN LETTER TODO ANG" #x184A)
- ("MONGOLIAN LETTER TODO BA" #x184B)
- ("MONGOLIAN LETTER TODO PA" #x184C)
- ("MONGOLIAN LETTER TODO QA" #x184D)
- ("MONGOLIAN LETTER TODO GA" #x184E)
- ("MONGOLIAN LETTER TODO MA" #x184F)
- ("MONGOLIAN LETTER TODO TA" #x1850)
- ("MONGOLIAN LETTER TODO DA" #x1851)
- ("MONGOLIAN LETTER TODO CHA" #x1852)
- ("MONGOLIAN LETTER TODO JA" #x1853)
- ("MONGOLIAN LETTER TODO TSA" #x1854)
- ("MONGOLIAN LETTER TODO YA" #x1855)
- ("MONGOLIAN LETTER TODO WA" #x1856)
- ("MONGOLIAN LETTER TODO KA" #x1857)
- ("MONGOLIAN LETTER TODO GAA" #x1858)
- ("MONGOLIAN LETTER TODO HAA" #x1859)
- ("MONGOLIAN LETTER TODO JIA" #x185A)
- ("MONGOLIAN LETTER TODO NIA" #x185B)
- ("MONGOLIAN LETTER TODO DZA" #x185C)
- ("MONGOLIAN LETTER SIBE E" #x185D)
- ("MONGOLIAN LETTER SIBE I" #x185E)
- ("MONGOLIAN LETTER SIBE IY" #x185F)
- ("MONGOLIAN LETTER SIBE UE" #x1860)
- ("MONGOLIAN LETTER SIBE U" #x1861)
- ("MONGOLIAN LETTER SIBE ANG" #x1862)
- ("MONGOLIAN LETTER SIBE KA" #x1863)
- ("MONGOLIAN LETTER SIBE GA" #x1864)
- ("MONGOLIAN LETTER SIBE HA" #x1865)
- ("MONGOLIAN LETTER SIBE PA" #x1866)
- ("MONGOLIAN LETTER SIBE SHA" #x1867)
- ("MONGOLIAN LETTER SIBE TA" #x1868)
- ("MONGOLIAN LETTER SIBE DA" #x1869)
- ("MONGOLIAN LETTER SIBE JA" #x186A)
- ("MONGOLIAN LETTER SIBE FA" #x186B)
- ("MONGOLIAN LETTER SIBE GAA" #x186C)
- ("MONGOLIAN LETTER SIBE HAA" #x186D)
- ("MONGOLIAN LETTER SIBE TSA" #x186E)
- ("MONGOLIAN LETTER SIBE ZA" #x186F)
- ("MONGOLIAN LETTER SIBE RAA" #x1870)
- ("MONGOLIAN LETTER SIBE CHA" #x1871)
- ("MONGOLIAN LETTER SIBE ZHA" #x1872)
- ("MONGOLIAN LETTER MANCHU I" #x1873)
- ("MONGOLIAN LETTER MANCHU KA" #x1874)
- ("MONGOLIAN LETTER MANCHU RA" #x1875)
- ("MONGOLIAN LETTER MANCHU FA" #x1876)
- ("MONGOLIAN LETTER MANCHU ZHA" #x1877)
- ("MONGOLIAN LETTER ALI GALI ANUSVARA ONE" #x1880)
- ("MONGOLIAN LETTER ALI GALI VISARGA ONE" #x1881)
- ("MONGOLIAN LETTER ALI GALI DAMARU" #x1882)
- ("MONGOLIAN LETTER ALI GALI UBADAMA" #x1883)
- ("MONGOLIAN LETTER ALI GALI INVERTED UBADAMA" #x1884)
- ("MONGOLIAN LETTER ALI GALI BALUDA" #x1885)
- ("MONGOLIAN LETTER ALI GALI THREE BALUDA" #x1886)
- ("MONGOLIAN LETTER ALI GALI A" #x1887)
- ("MONGOLIAN LETTER ALI GALI I" #x1888)
- ("MONGOLIAN LETTER ALI GALI KA" #x1889)
- ("MONGOLIAN LETTER ALI GALI NGA" #x188A)
- ("MONGOLIAN LETTER ALI GALI CA" #x188B)
- ("MONGOLIAN LETTER ALI GALI TTA" #x188C)
- ("MONGOLIAN LETTER ALI GALI TTHA" #x188D)
- ("MONGOLIAN LETTER ALI GALI DDA" #x188E)
- ("MONGOLIAN LETTER ALI GALI NNA" #x188F)
- ("MONGOLIAN LETTER ALI GALI TA" #x1890)
- ("MONGOLIAN LETTER ALI GALI DA" #x1891)
- ("MONGOLIAN LETTER ALI GALI PA" #x1892)
- ("MONGOLIAN LETTER ALI GALI PHA" #x1893)
- ("MONGOLIAN LETTER ALI GALI SSA" #x1894)
- ("MONGOLIAN LETTER ALI GALI ZHA" #x1895)
- ("MONGOLIAN LETTER ALI GALI ZA" #x1896)
- ("MONGOLIAN LETTER ALI GALI AH" #x1897)
- ("MONGOLIAN LETTER TODO ALI GALI TA" #x1898)
- ("MONGOLIAN LETTER TODO ALI GALI ZHA" #x1899)
- ("MONGOLIAN LETTER MANCHU ALI GALI GHA" #x189A)
- ("MONGOLIAN LETTER MANCHU ALI GALI NGA" #x189B)
- ("MONGOLIAN LETTER MANCHU ALI GALI CA" #x189C)
- ("MONGOLIAN LETTER MANCHU ALI GALI JHA" #x189D)
- ("MONGOLIAN LETTER MANCHU ALI GALI TTA" #x189E)
- ("MONGOLIAN LETTER MANCHU ALI GALI DDHA" #x189F)
- ("MONGOLIAN LETTER MANCHU ALI GALI TA" #x18A0)
- ("MONGOLIAN LETTER MANCHU ALI GALI DHA" #x18A1)
- ("MONGOLIAN LETTER MANCHU ALI GALI SSA" #x18A2)
- ("MONGOLIAN LETTER MANCHU ALI GALI CYA" #x18A3)
- ("MONGOLIAN LETTER MANCHU ALI GALI ZHA" #x18A4)
- ("MONGOLIAN LETTER MANCHU ALI GALI ZA" #x18A5)
- ("MONGOLIAN LETTER ALI GALI HALF U" #x18A6)
- ("MONGOLIAN LETTER ALI GALI HALF YA" #x18A7)
- ("MONGOLIAN LETTER MANCHU ALI GALI BHA" #x18A8)
- ("MONGOLIAN LETTER ALI GALI DAGALGA" #x18A9)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'latin-extended-additional
- '(("LATIN CAPITAL LETTER A WITH RING BELOW" #x1E00)
- ("LATIN SMALL LETTER A WITH RING BELOW" #x1E01)
- ("LATIN CAPITAL LETTER B WITH DOT ABOVE" #x1E02)
- ("LATIN SMALL LETTER B WITH DOT ABOVE" #x1E03)
- ("LATIN CAPITAL LETTER B WITH DOT BELOW" #x1E04)
- ("LATIN SMALL LETTER B WITH DOT BELOW" #x1E05)
- ("LATIN CAPITAL LETTER B WITH LINE BELOW" #x1E06)
- ("LATIN SMALL LETTER B WITH LINE BELOW" #x1E07)
- ("LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE" #x1E08)
- ("LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" #x1E09)
- ("LATIN CAPITAL LETTER D WITH DOT ABOVE" #x1E0A)
- ("LATIN SMALL LETTER D WITH DOT ABOVE" #x1E0B)
- ("LATIN CAPITAL LETTER D WITH DOT BELOW" #x1E0C)
- ("LATIN SMALL LETTER D WITH DOT BELOW" #x1E0D)
- ("LATIN CAPITAL LETTER D WITH LINE BELOW" #x1E0E)
- ("LATIN SMALL LETTER D WITH LINE BELOW" #x1E0F)
- ("LATIN CAPITAL LETTER D WITH CEDILLA" #x1E10)
- ("LATIN SMALL LETTER D WITH CEDILLA" #x1E11)
- ("LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW" #x1E12)
- ("LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW" #x1E13)
- ("LATIN CAPITAL LETTER E WITH MACRON AND GRAVE" #x1E14)
- ("LATIN SMALL LETTER E WITH MACRON AND GRAVE" #x1E15)
- ("LATIN CAPITAL LETTER E WITH MACRON AND ACUTE" #x1E16)
- ("LATIN SMALL LETTER E WITH MACRON AND ACUTE" #x1E17)
- ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW" #x1E18)
- ("LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW" #x1E19)
- ("LATIN CAPITAL LETTER E WITH TILDE BELOW" #x1E1A)
- ("LATIN SMALL LETTER E WITH TILDE BELOW" #x1E1B)
- ("LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE" #x1E1C)
- ("LATIN SMALL LETTER E WITH CEDILLA AND BREVE" #x1E1D)
- ("LATIN CAPITAL LETTER F WITH DOT ABOVE" #x1E1E)
- ("LATIN SMALL LETTER F WITH DOT ABOVE" #x1E1F)
- ("LATIN CAPITAL LETTER G WITH MACRON" #x1E20)
- ("LATIN SMALL LETTER G WITH MACRON" #x1E21)
- ("LATIN CAPITAL LETTER H WITH DOT ABOVE" #x1E22)
- ("LATIN SMALL LETTER H WITH DOT ABOVE" #x1E23)
- ("LATIN CAPITAL LETTER H WITH DOT BELOW" #x1E24)
- ("LATIN SMALL LETTER H WITH DOT BELOW" #x1E25)
- ("LATIN CAPITAL LETTER H WITH DIAERESIS" #x1E26)
- ("LATIN SMALL LETTER H WITH DIAERESIS" #x1E27)
- ("LATIN CAPITAL LETTER H WITH CEDILLA" #x1E28)
- ("LATIN SMALL LETTER H WITH CEDILLA" #x1E29)
- ("LATIN CAPITAL LETTER H WITH BREVE BELOW" #x1E2A)
- ("LATIN SMALL LETTER H WITH BREVE BELOW" #x1E2B)
- ("LATIN CAPITAL LETTER I WITH TILDE BELOW" #x1E2C)
- ("LATIN SMALL LETTER I WITH TILDE BELOW" #x1E2D)
- ("LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE" #x1E2E)
- ("LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE" #x1E2F)
- ("LATIN CAPITAL LETTER K WITH ACUTE" #x1E30)
- ("LATIN SMALL LETTER K WITH ACUTE" #x1E31)
- ("LATIN CAPITAL LETTER K WITH DOT BELOW" #x1E32)
- ("LATIN SMALL LETTER K WITH DOT BELOW" #x1E33)
- ("LATIN CAPITAL LETTER K WITH LINE BELOW" #x1E34)
- ("LATIN SMALL LETTER K WITH LINE BELOW" #x1E35)
- ("LATIN CAPITAL LETTER L WITH DOT BELOW" #x1E36)
- ("LATIN SMALL LETTER L WITH DOT BELOW" #x1E37)
- ("LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON" #x1E38)
- ("LATIN SMALL LETTER L WITH DOT BELOW AND MACRON" #x1E39)
- ("LATIN CAPITAL LETTER L WITH LINE BELOW" #x1E3A)
- ("LATIN SMALL LETTER L WITH LINE BELOW" #x1E3B)
- ("LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW" #x1E3C)
- ("LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW" #x1E3D)
- ("LATIN CAPITAL LETTER M WITH ACUTE" #x1E3E)
- ("LATIN SMALL LETTER M WITH ACUTE" #x1E3F)
- ("LATIN CAPITAL LETTER M WITH DOT ABOVE" #x1E40)
- ("LATIN SMALL LETTER M WITH DOT ABOVE" #x1E41)
- ("LATIN CAPITAL LETTER M WITH DOT BELOW" #x1E42)
- ("LATIN SMALL LETTER M WITH DOT BELOW" #x1E43)
- ("LATIN CAPITAL LETTER N WITH DOT ABOVE" #x1E44)
- ("LATIN SMALL LETTER N WITH DOT ABOVE" #x1E45)
- ("LATIN CAPITAL LETTER N WITH DOT BELOW" #x1E46)
- ("LATIN SMALL LETTER N WITH DOT BELOW" #x1E47)
- ("LATIN CAPITAL LETTER N WITH LINE BELOW" #x1E48)
- ("LATIN SMALL LETTER N WITH LINE BELOW" #x1E49)
- ("LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW" #x1E4A)
- ("LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW" #x1E4B)
- ("LATIN CAPITAL LETTER O WITH TILDE AND ACUTE" #x1E4C)
- ("LATIN SMALL LETTER O WITH TILDE AND ACUTE" #x1E4D)
- ("LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS" #x1E4E)
- ("LATIN SMALL LETTER O WITH TILDE AND DIAERESIS" #x1E4F)
- ("LATIN CAPITAL LETTER O WITH MACRON AND GRAVE" #x1E50)
- ("LATIN SMALL LETTER O WITH MACRON AND GRAVE" #x1E51)
- ("LATIN CAPITAL LETTER O WITH MACRON AND ACUTE" #x1E52)
- ("LATIN SMALL LETTER O WITH MACRON AND ACUTE" #x1E53)
- ("LATIN CAPITAL LETTER P WITH ACUTE" #x1E54)
- ("LATIN SMALL LETTER P WITH ACUTE" #x1E55)
- ("LATIN CAPITAL LETTER P WITH DOT ABOVE" #x1E56)
- ("LATIN SMALL LETTER P WITH DOT ABOVE" #x1E57)
- ("LATIN CAPITAL LETTER R WITH DOT ABOVE" #x1E58)
- ("LATIN SMALL LETTER R WITH DOT ABOVE" #x1E59)
- ("LATIN CAPITAL LETTER R WITH DOT BELOW" #x1E5A)
- ("LATIN SMALL LETTER R WITH DOT BELOW" #x1E5B)
- ("LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON" #x1E5C)
- ("LATIN SMALL LETTER R WITH DOT BELOW AND MACRON" #x1E5D)
- ("LATIN CAPITAL LETTER R WITH LINE BELOW" #x1E5E)
- ("LATIN SMALL LETTER R WITH LINE BELOW" #x1E5F)
- ("LATIN CAPITAL LETTER S WITH DOT ABOVE" #x1E60)
- ("LATIN SMALL LETTER S WITH DOT ABOVE" #x1E61)
- ("LATIN CAPITAL LETTER S WITH DOT BELOW" #x1E62)
- ("LATIN SMALL LETTER S WITH DOT BELOW" #x1E63)
- ("LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE" #x1E64)
- ("LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE" #x1E65)
- ("LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE" #x1E66)
- ("LATIN SMALL LETTER S WITH CARON AND DOT ABOVE" #x1E67)
- ("LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E68)
- ("LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E69)
- ("LATIN CAPITAL LETTER T WITH DOT ABOVE" #x1E6A)
- ("LATIN SMALL LETTER T WITH DOT ABOVE" #x1E6B)
- ("LATIN CAPITAL LETTER T WITH DOT BELOW" #x1E6C)
- ("LATIN SMALL LETTER T WITH DOT BELOW" #x1E6D)
- ("LATIN CAPITAL LETTER T WITH LINE BELOW" #x1E6E)
- ("LATIN SMALL LETTER T WITH LINE BELOW" #x1E6F)
- ("LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW" #x1E70)
- ("LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW" #x1E71)
- ("LATIN CAPITAL LETTER U WITH DIAERESIS BELOW" #x1E72)
- ("LATIN SMALL LETTER U WITH DIAERESIS BELOW" #x1E73)
- ("LATIN CAPITAL LETTER U WITH TILDE BELOW" #x1E74)
- ("LATIN SMALL LETTER U WITH TILDE BELOW" #x1E75)
- ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW" #x1E76)
- ("LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW" #x1E77)
- ("LATIN CAPITAL LETTER U WITH TILDE AND ACUTE" #x1E78)
- ("LATIN SMALL LETTER U WITH TILDE AND ACUTE" #x1E79)
- ("LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS" #x1E7A)
- ("LATIN SMALL LETTER U WITH MACRON AND DIAERESIS" #x1E7B)
- ("LATIN CAPITAL LETTER V WITH TILDE" #x1E7C)
- ("LATIN SMALL LETTER V WITH TILDE" #x1E7D)
- ("LATIN CAPITAL LETTER V WITH DOT BELOW" #x1E7E)
- ("LATIN SMALL LETTER V WITH DOT BELOW" #x1E7F)
- ("LATIN CAPITAL LETTER W WITH GRAVE" #x1E80)
- ("LATIN SMALL LETTER W WITH GRAVE" #x1E81)
- ("LATIN CAPITAL LETTER W WITH ACUTE" #x1E82)
- ("LATIN SMALL LETTER W WITH ACUTE" #x1E83)
- ("LATIN CAPITAL LETTER W WITH DIAERESIS" #x1E84)
- ("LATIN SMALL LETTER W WITH DIAERESIS" #x1E85)
- ("LATIN CAPITAL LETTER W WITH DOT ABOVE" #x1E86)
- ("LATIN SMALL LETTER W WITH DOT ABOVE" #x1E87)
- ("LATIN CAPITAL LETTER W WITH DOT BELOW" #x1E88)
- ("LATIN SMALL LETTER W WITH DOT BELOW" #x1E89)
- ("LATIN CAPITAL LETTER X WITH DOT ABOVE" #x1E8A)
- ("LATIN SMALL LETTER X WITH DOT ABOVE" #x1E8B)
- ("LATIN CAPITAL LETTER X WITH DIAERESIS" #x1E8C)
- ("LATIN SMALL LETTER X WITH DIAERESIS" #x1E8D)
- ("LATIN CAPITAL LETTER Y WITH DOT ABOVE" #x1E8E)
- ("LATIN SMALL LETTER Y WITH DOT ABOVE" #x1E8F)
- ("LATIN CAPITAL LETTER Z WITH CIRCUMFLEX" #x1E90)
- ("LATIN SMALL LETTER Z WITH CIRCUMFLEX" #x1E91)
- ("LATIN CAPITAL LETTER Z WITH DOT BELOW" #x1E92)
- ("LATIN SMALL LETTER Z WITH DOT BELOW" #x1E93)
- ("LATIN CAPITAL LETTER Z WITH LINE BELOW" #x1E94)
- ("LATIN SMALL LETTER Z WITH LINE BELOW" #x1E95)
- ("LATIN SMALL LETTER H WITH LINE BELOW" #x1E96)
- ("LATIN SMALL LETTER T WITH DIAERESIS" #x1E97)
- ("LATIN SMALL LETTER W WITH RING ABOVE" #x1E98)
- ("LATIN SMALL LETTER Y WITH RING ABOVE" #x1E99)
- ("LATIN SMALL LETTER A WITH RIGHT HALF RING" #x1E9A)
- ("LATIN SMALL LETTER LONG S WITH DOT ABOVE" #x1E9B)
- ("LATIN CAPITAL LETTER A WITH DOT BELOW" #x1EA0)
- ("LATIN SMALL LETTER A WITH DOT BELOW" #x1EA1)
- ("LATIN CAPITAL LETTER A WITH HOOK ABOVE" #x1EA2)
- ("LATIN SMALL LETTER A WITH HOOK ABOVE" #x1EA3)
- ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA4)
- ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA5)
- ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA6)
- ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA7)
- ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA8)
- ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA9)
- ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAA)
- ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAB)
- ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAC)
- ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAD)
- ("LATIN CAPITAL LETTER A WITH BREVE AND ACUTE" #x1EAE)
- ("LATIN SMALL LETTER A WITH BREVE AND ACUTE" #x1EAF)
- ("LATIN CAPITAL LETTER A WITH BREVE AND GRAVE" #x1EB0)
- ("LATIN SMALL LETTER A WITH BREVE AND GRAVE" #x1EB1)
- ("LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB2)
- ("LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB3)
- ("LATIN CAPITAL LETTER A WITH BREVE AND TILDE" #x1EB4)
- ("LATIN SMALL LETTER A WITH BREVE AND TILDE" #x1EB5)
- ("LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW" #x1EB6)
- ("LATIN SMALL LETTER A WITH BREVE AND DOT BELOW" #x1EB7)
- ("LATIN CAPITAL LETTER E WITH DOT BELOW" #x1EB8)
- ("LATIN SMALL LETTER E WITH DOT BELOW" #x1EB9)
- ("LATIN CAPITAL LETTER E WITH HOOK ABOVE" #x1EBA)
- ("LATIN SMALL LETTER E WITH HOOK ABOVE" #x1EBB)
- ("LATIN CAPITAL LETTER E WITH TILDE" #x1EBC)
- ("LATIN SMALL LETTER E WITH TILDE" #x1EBD)
- ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBE)
- ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBF)
- ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC0)
- ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC1)
- ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC2)
- ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC3)
- ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC4)
- ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC5)
- ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC6)
- ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC7)
- ("LATIN CAPITAL LETTER I WITH HOOK ABOVE" #x1EC8)
- ("LATIN SMALL LETTER I WITH HOOK ABOVE" #x1EC9)
- ("LATIN CAPITAL LETTER I WITH DOT BELOW" #x1ECA)
- ("LATIN SMALL LETTER I WITH DOT BELOW" #x1ECB)
- ("LATIN CAPITAL LETTER O WITH DOT BELOW" #x1ECC)
- ("LATIN SMALL LETTER O WITH DOT BELOW" #x1ECD)
- ("LATIN CAPITAL LETTER O WITH HOOK ABOVE" #x1ECE)
- ("LATIN SMALL LETTER O WITH HOOK ABOVE" #x1ECF)
- ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED0)
- ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED1)
- ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED2)
- ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED3)
- ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED4)
- ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED5)
- ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED6)
- ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED7)
- ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED8)
- ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED9)
- ("LATIN CAPITAL LETTER O WITH HORN AND ACUTE" #x1EDA)
- ("LATIN SMALL LETTER O WITH HORN AND ACUTE" #x1EDB)
- ("LATIN CAPITAL LETTER O WITH HORN AND GRAVE" #x1EDC)
- ("LATIN SMALL LETTER O WITH HORN AND GRAVE" #x1EDD)
- ("LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE" #x1EDE)
- ("LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE" #x1EDF)
- ("LATIN CAPITAL LETTER O WITH HORN AND TILDE" #x1EE0)
- ("LATIN SMALL LETTER O WITH HORN AND TILDE" #x1EE1)
- ("LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW" #x1EE2)
- ("LATIN SMALL LETTER O WITH HORN AND DOT BELOW" #x1EE3)
- ("LATIN CAPITAL LETTER U WITH DOT BELOW" #x1EE4)
- ("LATIN SMALL LETTER U WITH DOT BELOW" #x1EE5)
- ("LATIN CAPITAL LETTER U WITH HOOK ABOVE" #x1EE6)
- ("LATIN SMALL LETTER U WITH HOOK ABOVE" #x1EE7)
- ("LATIN CAPITAL LETTER U WITH HORN AND ACUTE" #x1EE8)
- ("LATIN SMALL LETTER U WITH HORN AND ACUTE" #x1EE9)
- ("LATIN CAPITAL LETTER U WITH HORN AND GRAVE" #x1EEA)
- ("LATIN SMALL LETTER U WITH HORN AND GRAVE" #x1EEB)
- ("LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE" #x1EEC)
- ("LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE" #x1EED)
- ("LATIN CAPITAL LETTER U WITH HORN AND TILDE" #x1EEE)
- ("LATIN SMALL LETTER U WITH HORN AND TILDE" #x1EEF)
- ("LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW" #x1EF0)
- ("LATIN SMALL LETTER U WITH HORN AND DOT BELOW" #x1EF1)
- ("LATIN CAPITAL LETTER Y WITH GRAVE" #x1EF2)
- ("LATIN SMALL LETTER Y WITH GRAVE" #x1EF3)
- ("LATIN CAPITAL LETTER Y WITH DOT BELOW" #x1EF4)
- ("LATIN SMALL LETTER Y WITH DOT BELOW" #x1EF5)
- ("LATIN CAPITAL LETTER Y WITH HOOK ABOVE" #x1EF6)
- ("LATIN SMALL LETTER Y WITH HOOK ABOVE" #x1EF7)
- ("LATIN CAPITAL LETTER Y WITH TILDE" #x1EF8)
- ("LATIN SMALL LETTER Y WITH TILDE" #x1EF9)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'greek-extended
- '(("GREEK SMALL LETTER ALPHA WITH PSILI" #x1F00)
- ("GREEK SMALL LETTER ALPHA WITH DASIA" #x1F01)
- ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA" #x1F02)
- ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" #x1F03)
- ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA" #x1F04)
- ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA" #x1F05)
- ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F06)
- ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F07)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI" #x1F08)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA" #x1F09)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA" #x1F0A)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA" #x1F0B)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA" #x1F0C)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA" #x1F0D)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F0E)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F0F)
- ("GREEK SMALL LETTER EPSILON WITH PSILI" #x1F10)
- ("GREEK SMALL LETTER EPSILON WITH DASIA" #x1F11)
- ("GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA" #x1F12)
- ("GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA" #x1F13)
- ("GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA" #x1F14)
- ("GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA" #x1F15)
- ("GREEK CAPITAL LETTER EPSILON WITH PSILI" #x1F18)
- ("GREEK CAPITAL LETTER EPSILON WITH DASIA" #x1F19)
- ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA" #x1F1A)
- ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA" #x1F1B)
- ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA" #x1F1C)
- ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA" #x1F1D)
- ("GREEK SMALL LETTER ETA WITH PSILI" #x1F20)
- ("GREEK SMALL LETTER ETA WITH DASIA" #x1F21)
- ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA" #x1F22)
- ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA" #x1F23)
- ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA" #x1F24)
- ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA" #x1F25)
- ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F26)
- ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F27)
- ("GREEK CAPITAL LETTER ETA WITH PSILI" #x1F28)
- ("GREEK CAPITAL LETTER ETA WITH DASIA" #x1F29)
- ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA" #x1F2A)
- ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA" #x1F2B)
- ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA" #x1F2C)
- ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA" #x1F2D)
- ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F2E)
- ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F2F)
- ("GREEK SMALL LETTER IOTA WITH PSILI" #x1F30)
- ("GREEK SMALL LETTER IOTA WITH DASIA" #x1F31)
- ("GREEK SMALL LETTER IOTA WITH PSILI AND VARIA" #x1F32)
- ("GREEK SMALL LETTER IOTA WITH DASIA AND VARIA" #x1F33)
- ("GREEK SMALL LETTER IOTA WITH PSILI AND OXIA" #x1F34)
- ("GREEK SMALL LETTER IOTA WITH DASIA AND OXIA" #x1F35)
- ("GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F36)
- ("GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F37)
- ("GREEK CAPITAL LETTER IOTA WITH PSILI" #x1F38)
- ("GREEK CAPITAL LETTER IOTA WITH DASIA" #x1F39)
- ("GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA" #x1F3A)
- ("GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA" #x1F3B)
- ("GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA" #x1F3C)
- ("GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA" #x1F3D)
- ("GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F3E)
- ("GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F3F)
- ("GREEK SMALL LETTER OMICRON WITH PSILI" #x1F40)
- ("GREEK SMALL LETTER OMICRON WITH DASIA" #x1F41)
- ("GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA" #x1F42)
- ("GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA" #x1F43)
- ("GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA" #x1F44)
- ("GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA" #x1F45)
- ("GREEK CAPITAL LETTER OMICRON WITH PSILI" #x1F48)
- ("GREEK CAPITAL LETTER OMICRON WITH DASIA" #x1F49)
- ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA" #x1F4A)
- ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA" #x1F4B)
- ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA" #x1F4C)
- ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA" #x1F4D)
- ("GREEK SMALL LETTER UPSILON WITH PSILI" #x1F50)
- ("GREEK SMALL LETTER UPSILON WITH DASIA" #x1F51)
- ("GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA" #x1F52)
- ("GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA" #x1F53)
- ("GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA" #x1F54)
- ("GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA" #x1F55)
- ("GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI" #x1F56)
- ("GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F57)
- ("GREEK CAPITAL LETTER UPSILON WITH DASIA" #x1F59)
- ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA" #x1F5B)
- ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA" #x1F5D)
- ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F5F)
- ("GREEK SMALL LETTER OMEGA WITH PSILI" #x1F60)
- ("GREEK SMALL LETTER OMEGA WITH DASIA" #x1F61)
- ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA" #x1F62)
- ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA" #x1F63)
- ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA" #x1F64)
- ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA" #x1F65)
- ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F66)
- ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F67)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI" #x1F68)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA" #x1F69)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA" #x1F6A)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA" #x1F6B)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA" #x1F6C)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA" #x1F6D)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F6E)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F6F)
- ("GREEK SMALL LETTER ALPHA WITH VARIA" #x1F70)
- ("GREEK SMALL LETTER ALPHA WITH OXIA" #x1F71)
- ("GREEK SMALL LETTER EPSILON WITH VARIA" #x1F72)
- ("GREEK SMALL LETTER EPSILON WITH OXIA" #x1F73)
- ("GREEK SMALL LETTER ETA WITH VARIA" #x1F74)
- ("GREEK SMALL LETTER ETA WITH OXIA" #x1F75)
- ("GREEK SMALL LETTER IOTA WITH VARIA" #x1F76)
- ("GREEK SMALL LETTER IOTA WITH OXIA" #x1F77)
- ("GREEK SMALL LETTER OMICRON WITH VARIA" #x1F78)
- ("GREEK SMALL LETTER OMICRON WITH OXIA" #x1F79)
- ("GREEK SMALL LETTER UPSILON WITH VARIA" #x1F7A)
- ("GREEK SMALL LETTER UPSILON WITH OXIA" #x1F7B)
- ("GREEK SMALL LETTER OMEGA WITH VARIA" #x1F7C)
- ("GREEK SMALL LETTER OMEGA WITH OXIA" #x1F7D)
- ("GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI" #x1F80)
- ("GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI" #x1F81)
- ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F82)
- ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F83)
- ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F84)
- ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F85)
- ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F86)
- ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F87)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI" #x1F88)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI" #x1F89)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F8A)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F8B)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F8C)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F8D)
- ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8E)
- ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8F)
- ("GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI" #x1F90)
- ("GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI" #x1F91)
- ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F92)
- ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F93)
- ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F94)
- ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F95)
- ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F96)
- ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F97)
- ("GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI" #x1F98)
- ("GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI" #x1F99)
- ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F9A)
- ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F9B)
- ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F9C)
- ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F9D)
- ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9E)
- ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9F)
- ("GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI" #x1FA0)
- ("GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI" #x1FA1)
- ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1FA2)
- ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1FA3)
- ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1FA4)
- ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1FA5)
- ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA6)
- ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA7)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI" #x1FA8)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI" #x1FA9)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1FAA)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1FAB)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1FAC)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1FAD)
- ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAE)
- ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAF)
- ("GREEK SMALL LETTER ALPHA WITH VRACHY" #x1FB0)
- ("GREEK SMALL LETTER ALPHA WITH MACRON" #x1FB1)
- ("GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI" #x1FB2)
- ("GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI" #x1FB3)
- ("GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI" #x1FB4)
- ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI" #x1FB6)
- ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FB7)
- ("GREEK CAPITAL LETTER ALPHA WITH VRACHY" #x1FB8)
- ("GREEK CAPITAL LETTER ALPHA WITH MACRON" #x1FB9)
- ("GREEK CAPITAL LETTER ALPHA WITH VARIA" #x1FBA)
- ("GREEK CAPITAL LETTER ALPHA WITH OXIA" #x1FBB)
- ("GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI" #x1FBC)
- ("GREEK KORONIS" #x1FBD)
- ("GREEK PROSGEGRAMMENI" #x1FBE)
- ("GREEK PSILI" #x1FBF)
- ("GREEK PERISPOMENI" #x1FC0)
- ("GREEK DIALYTIKA AND PERISPOMENI" #x1FC1)
- ("GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI" #x1FC2)
- ("GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI" #x1FC3)
- ("GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI" #x1FC4)
- ("GREEK SMALL LETTER ETA WITH PERISPOMENI" #x1FC6)
- ("GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FC7)
- ("GREEK CAPITAL LETTER EPSILON WITH VARIA" #x1FC8)
- ("GREEK CAPITAL LETTER EPSILON WITH OXIA" #x1FC9)
- ("GREEK CAPITAL LETTER ETA WITH VARIA" #x1FCA)
- ("GREEK CAPITAL LETTER ETA WITH OXIA" #x1FCB)
- ("GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI" #x1FCC)
- ("GREEK PSILI AND VARIA" #x1FCD)
- ("GREEK PSILI AND OXIA" #x1FCE)
- ("GREEK PSILI AND PERISPOMENI" #x1FCF)
- ("GREEK SMALL LETTER IOTA WITH VRACHY" #x1FD0)
- ("GREEK SMALL LETTER IOTA WITH MACRON" #x1FD1)
- ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA" #x1FD2)
- ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA" #x1FD3)
- ("GREEK SMALL LETTER IOTA WITH PERISPOMENI" #x1FD6)
- ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI" #x1FD7)
- ("GREEK CAPITAL LETTER IOTA WITH VRACHY" #x1FD8)
- ("GREEK CAPITAL LETTER IOTA WITH MACRON" #x1FD9)
- ("GREEK CAPITAL LETTER IOTA WITH VARIA" #x1FDA)
- ("GREEK CAPITAL LETTER IOTA WITH OXIA" #x1FDB)
- ("GREEK DASIA AND VARIA" #x1FDD)
- ("GREEK DASIA AND OXIA" #x1FDE)
- ("GREEK DASIA AND PERISPOMENI" #x1FDF)
- ("GREEK SMALL LETTER UPSILON WITH VRACHY" #x1FE0)
- ("GREEK SMALL LETTER UPSILON WITH MACRON" #x1FE1)
- ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA" #x1FE2)
- ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA" #x1FE3)
- ("GREEK SMALL LETTER RHO WITH PSILI" #x1FE4)
- ("GREEK SMALL LETTER RHO WITH DASIA" #x1FE5)
- ("GREEK SMALL LETTER UPSILON WITH PERISPOMENI" #x1FE6)
- ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI" #x1FE7)
- ("GREEK CAPITAL LETTER UPSILON WITH VRACHY" #x1FE8)
- ("GREEK CAPITAL LETTER UPSILON WITH MACRON" #x1FE9)
- ("GREEK CAPITAL LETTER UPSILON WITH VARIA" #x1FEA)
- ("GREEK CAPITAL LETTER UPSILON WITH OXIA" #x1FEB)
- ("GREEK CAPITAL LETTER RHO WITH DASIA" #x1FEC)
- ("GREEK DIALYTIKA AND VARIA" #x1FED)
- ("GREEK DIALYTIKA AND OXIA" #x1FEE)
- ("GREEK VARIA" #x1FEF)
- ("GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI" #x1FF2)
- ("GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI" #x1FF3)
- ("GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI" #x1FF4)
- ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI" #x1FF6)
- ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FF7)
- ("GREEK CAPITAL LETTER OMICRON WITH VARIA" #x1FF8)
- ("GREEK CAPITAL LETTER OMICRON WITH OXIA" #x1FF9)
- ("GREEK CAPITAL LETTER OMEGA WITH VARIA" #x1FFA)
- ("GREEK CAPITAL LETTER OMEGA WITH OXIA" #x1FFB)
- ("GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI" #x1FFC)
- ("GREEK OXIA" #x1FFD)
- ("GREEK DASIA" #x1FFE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'general-punctuation
- '(("EN QUAD" #x2000)
- ("EM QUAD" #x2001)
- ("EN SPACE" #x2002)
- ("EM SPACE" #x2003)
- ("THREE-PER-EM SPACE" #x2004)
- ("FOUR-PER-EM SPACE" #x2005)
- ("SIX-PER-EM SPACE" #x2006)
- ("FIGURE SPACE" #x2007)
- ("PUNCTUATION SPACE" #x2008)
- ("THIN SPACE" #x2009)
- ("HAIR SPACE" #x200A)
- ("ZERO WIDTH SPACE" #x200B)
- ("ZERO WIDTH NON-JOINER" #x200C)
- ("ZERO WIDTH JOINER" #x200D)
- ("LEFT-TO-RIGHT MARK" #x200E)
- ("RIGHT-TO-LEFT MARK" #x200F)
- ("HYPHEN" #x2010)
- ("NON-BREAKING HYPHEN" #x2011)
- ("FIGURE DASH" #x2012)
- ("EN DASH" #x2013)
- ("EM DASH" #x2014)
- ("HORIZONTAL BAR" #x2015)
- ("DOUBLE VERTICAL LINE" #x2016)
- ("DOUBLE LOW LINE" #x2017)
- ("LEFT SINGLE QUOTATION MARK" #x2018)
- ("RIGHT SINGLE QUOTATION MARK" #x2019)
- ("SINGLE LOW-9 QUOTATION MARK" #x201A)
- ("SINGLE HIGH-REVERSED-9 QUOTATION MARK" #x201B)
- ("LEFT DOUBLE QUOTATION MARK" #x201C)
- ("RIGHT DOUBLE QUOTATION MARK" #x201D)
- ("DOUBLE LOW-9 QUOTATION MARK" #x201E)
- ("DOUBLE HIGH-REVERSED-9 QUOTATION MARK" #x201F)
- ("DAGGER" #x2020)
- ("DOUBLE DAGGER" #x2021)
- ("BULLET" #x2022)
- ("TRIANGULAR BULLET" #x2023)
- ("ONE DOT LEADER" #x2024)
- ("TWO DOT LEADER" #x2025)
- ("HORIZONTAL ELLIPSIS" #x2026)
- ("HYPHENATION POINT" #x2027)
- ("LINE SEPARATOR" #x2028)
- ("PARAGRAPH SEPARATOR" #x2029)
- ("LEFT-TO-RIGHT EMBEDDING" #x202A)
- ("RIGHT-TO-LEFT EMBEDDING" #x202B)
- ("POP DIRECTIONAL FORMATTING" #x202C)
- ("LEFT-TO-RIGHT OVERRIDE" #x202D)
- ("RIGHT-TO-LEFT OVERRIDE" #x202E)
- ("NARROW NO-BREAK SPACE" #x202F)
- ("PER MILLE SIGN" #x2030)
- ("PER TEN THOUSAND SIGN" #x2031)
- ("PRIME" #x2032)
- ("DOUBLE PRIME" #x2033)
- ("TRIPLE PRIME" #x2034)
- ("REVERSED PRIME" #x2035)
- ("REVERSED DOUBLE PRIME" #x2036)
- ("REVERSED TRIPLE PRIME" #x2037)
- ("CARET" #x2038)
- ("SINGLE LEFT-POINTING ANGLE QUOTATION MARK" #x2039)
- ("SINGLE RIGHT-POINTING ANGLE QUOTATION MARK" #x203A)
- ("REFERENCE MARK" #x203B)
- ("DOUBLE EXCLAMATION MARK" #x203C)
- ("INTERROBANG" #x203D)
- ("OVERLINE" #x203E)
- ("UNDERTIE" #x203F)
- ("CHARACTER TIE" #x2040)
- ("CARET INSERTION POINT" #x2041)
- ("ASTERISM" #x2042)
- ("HYPHEN BULLET" #x2043)
- ("FRACTION SLASH" #x2044)
- ("LEFT SQUARE BRACKET WITH QUILL" #x2045)
- ("RIGHT SQUARE BRACKET WITH QUILL" #x2046)
- ("DOUBLE QUESTION MARK" #x2047)
- ("QUESTION EXCLAMATION MARK" #x2048)
- ("EXCLAMATION QUESTION MARK" #x2049)
- ("TIRONIAN SIGN ET" #x204A)
- ("REVERSED PILCROW SIGN" #x204B)
- ("BLACK LEFTWARDS BULLET" #x204C)
- ("BLACK RIGHTWARDS BULLET" #x204D)
- ("LOW ASTERISK" #x204E)
- ("REVERSED SEMICOLON" #x204F)
- ("CLOSE UP" #x2050)
- ("TWO ASTERISKS ALIGNED VERTICALLY" #x2051)
- ("COMMERCIAL MINUS SIGN" #x2052)
- ("QUADRUPLE PRIME" #x2057)
- ("MEDIUM MATHEMATICAL SPACE" #x205F)
- ("WORD JOINER" #x2060)
- ("FUNCTION APPLICATION" #x2061)
- ("INVISIBLE TIMES" #x2062)
- ("INVISIBLE SEPARATOR" #x2063)
- ("INHIBIT SYMMETRIC SWAPPING" #x206A)
- ("ACTIVATE SYMMETRIC SWAPPING" #x206B)
- ("INHIBIT ARABIC FORM SHAPING" #x206C)
- ("ACTIVATE ARABIC FORM SHAPING" #x206D)
- ("NATIONAL DIGIT SHAPES" #x206E)
- ("NOMINAL DIGIT SHAPES" #x206F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'superscripts-and-subscripts
- '(("SUPERSCRIPT ZERO" #x2070)
- ("SUPERSCRIPT LATIN SMALL LETTER I" #x2071)
- ("SUPERSCRIPT FOUR" #x2074)
- ("SUPERSCRIPT FIVE" #x2075)
- ("SUPERSCRIPT SIX" #x2076)
- ("SUPERSCRIPT SEVEN" #x2077)
- ("SUPERSCRIPT EIGHT" #x2078)
- ("SUPERSCRIPT NINE" #x2079)
- ("SUPERSCRIPT PLUS SIGN" #x207A)
- ("SUPERSCRIPT MINUS" #x207B)
- ("SUPERSCRIPT EQUALS SIGN" #x207C)
- ("SUPERSCRIPT LEFT PARENTHESIS" #x207D)
- ("SUPERSCRIPT RIGHT PARENTHESIS" #x207E)
- ("SUPERSCRIPT LATIN SMALL LETTER N" #x207F)
- ("SUBSCRIPT ZERO" #x2080)
- ("SUBSCRIPT ONE" #x2081)
- ("SUBSCRIPT TWO" #x2082)
- ("SUBSCRIPT THREE" #x2083)
- ("SUBSCRIPT FOUR" #x2084)
- ("SUBSCRIPT FIVE" #x2085)
- ("SUBSCRIPT SIX" #x2086)
- ("SUBSCRIPT SEVEN" #x2087)
- ("SUBSCRIPT EIGHT" #x2088)
- ("SUBSCRIPT NINE" #x2089)
- ("SUBSCRIPT PLUS SIGN" #x208A)
- ("SUBSCRIPT MINUS" #x208B)
- ("SUBSCRIPT EQUALS SIGN" #x208C)
- ("SUBSCRIPT LEFT PARENTHESIS" #x208D)
- ("SUBSCRIPT RIGHT PARENTHESIS" #x208E)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'currency-symbols
- '(("EURO-CURRENCY SIGN" #x20A0)
- ("COLON SIGN" #x20A1)
- ("CRUZEIRO SIGN" #x20A2)
- ("FRENCH FRANC SIGN" #x20A3)
- ("LIRA SIGN" #x20A4)
- ("MILL SIGN" #x20A5)
- ("NAIRA SIGN" #x20A6)
- ("PESETA SIGN" #x20A7)
- ("RUPEE SIGN" #x20A8)
- ("WON SIGN" #x20A9)
- ("NEW SHEQEL SIGN" #x20AA)
- ("DONG SIGN" #x20AB)
- ("EURO SIGN" #x20AC)
- ("KIP SIGN" #x20AD)
- ("TUGRIK SIGN" #x20AE)
- ("DRACHMA SIGN" #x20AF)
- ("GERMAN PENNY SIGN" #x20B0)
- ("PESO SIGN" #x20B1)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'combining-diacritical-marks-for-symbols
- '(("COMBINING LEFT HARPOON ABOVE" #x20D0)
- ("COMBINING RIGHT HARPOON ABOVE" #x20D1)
- ("COMBINING LONG VERTICAL LINE OVERLAY" #x20D2)
- ("COMBINING SHORT VERTICAL LINE OVERLAY" #x20D3)
- ("COMBINING ANTICLOCKWISE ARROW ABOVE" #x20D4)
- ("COMBINING CLOCKWISE ARROW ABOVE" #x20D5)
- ("COMBINING LEFT ARROW ABOVE" #x20D6)
- ("COMBINING RIGHT ARROW ABOVE" #x20D7)
- ("COMBINING RING OVERLAY" #x20D8)
- ("COMBINING CLOCKWISE RING OVERLAY" #x20D9)
- ("COMBINING ANTICLOCKWISE RING OVERLAY" #x20DA)
- ("COMBINING THREE DOTS ABOVE" #x20DB)
- ("COMBINING FOUR DOTS ABOVE" #x20DC)
- ("COMBINING ENCLOSING CIRCLE" #x20DD)
- ("COMBINING ENCLOSING SQUARE" #x20DE)
- ("COMBINING ENCLOSING DIAMOND" #x20DF)
- ("COMBINING ENCLOSING CIRCLE BACKSLASH" #x20E0)
- ("COMBINING LEFT RIGHT ARROW ABOVE" #x20E1)
- ("COMBINING ENCLOSING SCREEN" #x20E2)
- ("COMBINING ENCLOSING KEYCAP" #x20E3)
- ("COMBINING ENCLOSING UPWARD POINTING TRIANGLE" #x20E4)
- ("COMBINING REVERSE SOLIDUS OVERLAY" #x20E5)
- ("COMBINING DOUBLE VERTICAL STROKE OVERLAY" #x20E6)
- ("COMBINING ANNUITY SYMBOL" #x20E7)
- ("COMBINING TRIPLE UNDERDOT" #x20E8)
- ("COMBINING WIDE BRIDGE ABOVE" #x20E9)
- ("COMBINING LEFTWARDS ARROW OVERLAY" #x20EA)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'letterlike-symbols
- '(("ACCOUNT OF" #x2100)
- ("ADDRESSED TO THE SUBJECT" #x2101)
- ("DOUBLE-STRUCK CAPITAL C" #x2102)
- ("DEGREE CELSIUS" #x2103)
- ("CENTRE LINE SYMBOL" #x2104)
- ("CARE OF" #x2105)
- ("CADA UNA" #x2106)
- ("EULER CONSTANT" #x2107)
- ("SCRUPLE" #x2108)
- ("DEGREE FAHRENHEIT" #x2109)
- ("SCRIPT SMALL G" #x210A)
- ("SCRIPT CAPITAL H" #x210B)
- ("BLACK-LETTER CAPITAL H" #x210C)
- ("DOUBLE-STRUCK CAPITAL H" #x210D)
- ("PLANCK CONSTANT" #x210E)
- ("PLANCK CONSTANT OVER TWO PI" #x210F)
- ("SCRIPT CAPITAL I" #x2110)
- ("BLACK-LETTER CAPITAL I" #x2111)
- ("SCRIPT CAPITAL L" #x2112)
- ("SCRIPT SMALL L" #x2113)
- ("L B BAR SYMBOL" #x2114)
- ("DOUBLE-STRUCK CAPITAL N" #x2115)
- ("NUMERO SIGN" #x2116)
- ("SOUND RECORDING COPYRIGHT" #x2117)
- ("SCRIPT CAPITAL P" #x2118)
- ("DOUBLE-STRUCK CAPITAL P" #x2119)
- ("DOUBLE-STRUCK CAPITAL Q" #x211A)
- ("SCRIPT CAPITAL R" #x211B)
- ("BLACK-LETTER CAPITAL R" #x211C)
- ("DOUBLE-STRUCK CAPITAL R" #x211D)
- ("PRESCRIPTION TAKE" #x211E)
- ("RESPONSE" #x211F)
- ("SERVICE MARK" #x2120)
- ("TELEPHONE SIGN" #x2121)
- ("TRADE MARK SIGN" #x2122)
- ("VERSICLE" #x2123)
- ("DOUBLE-STRUCK CAPITAL Z" #x2124)
- ("OUNCE SIGN" #x2125)
- ("OHM SIGN" #x2126)
- ("INVERTED OHM SIGN" #x2127)
- ("BLACK-LETTER CAPITAL Z" #x2128)
- ("TURNED GREEK SMALL LETTER IOTA" #x2129)
- ("KELVIN SIGN" #x212A)
- ("ANGSTROM SIGN" #x212B)
- ("SCRIPT CAPITAL B" #x212C)
- ("BLACK-LETTER CAPITAL C" #x212D)
- ("ESTIMATED SYMBOL" #x212E)
- ("SCRIPT SMALL E" #x212F)
- ("SCRIPT CAPITAL E" #x2130)
- ("SCRIPT CAPITAL F" #x2131)
- ("TURNED CAPITAL F" #x2132)
- ("SCRIPT CAPITAL M" #x2133)
- ("SCRIPT SMALL O" #x2134)
- ("ALEF SYMBOL" #x2135)
- ("BET SYMBOL" #x2136)
- ("GIMEL SYMBOL" #x2137)
- ("DALET SYMBOL" #x2138)
- ("INFORMATION SOURCE" #x2139)
- ("ROTATED CAPITAL Q" #x213A)
- ("DOUBLE-STRUCK SMALL GAMMA" #x213D)
- ("DOUBLE-STRUCK CAPITAL GAMMA" #x213E)
- ("DOUBLE-STRUCK CAPITAL PI" #x213F)
- ("DOUBLE-STRUCK N-ARY SUMMATION" #x2140)
- ("TURNED SANS-SERIF CAPITAL G" #x2141)
- ("TURNED SANS-SERIF CAPITAL L" #x2142)
- ("REVERSED SANS-SERIF CAPITAL L" #x2143)
- ("TURNED SANS-SERIF CAPITAL Y" #x2144)
- ("DOUBLE-STRUCK ITALIC CAPITAL D" #x2145)
- ("DOUBLE-STRUCK ITALIC SMALL D" #x2146)
- ("DOUBLE-STRUCK ITALIC SMALL E" #x2147)
- ("DOUBLE-STRUCK ITALIC SMALL I" #x2148)
- ("DOUBLE-STRUCK ITALIC SMALL J" #x2149)
- ("PROPERTY LINE" #x214A)
- ("TURNED AMPERSAND" #x214B)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'number-forms
- '(("VULGAR FRACTION ONE THIRD" #x2153)
- ("VULGAR FRACTION TWO THIRDS" #x2154)
- ("VULGAR FRACTION ONE FIFTH" #x2155)
- ("VULGAR FRACTION TWO FIFTHS" #x2156)
- ("VULGAR FRACTION THREE FIFTHS" #x2157)
- ("VULGAR FRACTION FOUR FIFTHS" #x2158)
- ("VULGAR FRACTION ONE SIXTH" #x2159)
- ("VULGAR FRACTION FIVE SIXTHS" #x215A)
- ("VULGAR FRACTION ONE EIGHTH" #x215B)
- ("VULGAR FRACTION THREE EIGHTHS" #x215C)
- ("VULGAR FRACTION FIVE EIGHTHS" #x215D)
- ("VULGAR FRACTION SEVEN EIGHTHS" #x215E)
- ("FRACTION NUMERATOR ONE" #x215F)
- ("ROMAN NUMERAL ONE" #x2160)
- ("ROMAN NUMERAL TWO" #x2161)
- ("ROMAN NUMERAL THREE" #x2162)
- ("ROMAN NUMERAL FOUR" #x2163)
- ("ROMAN NUMERAL FIVE" #x2164)
- ("ROMAN NUMERAL SIX" #x2165)
- ("ROMAN NUMERAL SEVEN" #x2166)
- ("ROMAN NUMERAL EIGHT" #x2167)
- ("ROMAN NUMERAL NINE" #x2168)
- ("ROMAN NUMERAL TEN" #x2169)
- ("ROMAN NUMERAL ELEVEN" #x216A)
- ("ROMAN NUMERAL TWELVE" #x216B)
- ("ROMAN NUMERAL FIFTY" #x216C)
- ("ROMAN NUMERAL ONE HUNDRED" #x216D)
- ("ROMAN NUMERAL FIVE HUNDRED" #x216E)
- ("ROMAN NUMERAL ONE THOUSAND" #x216F)
- ("SMALL ROMAN NUMERAL ONE" #x2170)
- ("SMALL ROMAN NUMERAL TWO" #x2171)
- ("SMALL ROMAN NUMERAL THREE" #x2172)
- ("SMALL ROMAN NUMERAL FOUR" #x2173)
- ("SMALL ROMAN NUMERAL FIVE" #x2174)
- ("SMALL ROMAN NUMERAL SIX" #x2175)
- ("SMALL ROMAN NUMERAL SEVEN" #x2176)
- ("SMALL ROMAN NUMERAL EIGHT" #x2177)
- ("SMALL ROMAN NUMERAL NINE" #x2178)
- ("SMALL ROMAN NUMERAL TEN" #x2179)
- ("SMALL ROMAN NUMERAL ELEVEN" #x217A)
- ("SMALL ROMAN NUMERAL TWELVE" #x217B)
- ("SMALL ROMAN NUMERAL FIFTY" #x217C)
- ("SMALL ROMAN NUMERAL ONE HUNDRED" #x217D)
- ("SMALL ROMAN NUMERAL FIVE HUNDRED" #x217E)
- ("SMALL ROMAN NUMERAL ONE THOUSAND" #x217F)
- ("ROMAN NUMERAL ONE THOUSAND C D" #x2180)
- ("ROMAN NUMERAL FIVE THOUSAND" #x2181)
- ("ROMAN NUMERAL TEN THOUSAND" #x2182)
- ("ROMAN NUMERAL REVERSED ONE HUNDRED" #x2183)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'arrows
- '(("LEFTWARDS ARROW" #x2190)
- ("UPWARDS ARROW" #x2191)
- ("RIGHTWARDS ARROW" #x2192)
- ("DOWNWARDS ARROW" #x2193)
- ("LEFT RIGHT ARROW" #x2194)
- ("UP DOWN ARROW" #x2195)
- ("NORTH WEST ARROW" #x2196)
- ("NORTH EAST ARROW" #x2197)
- ("SOUTH EAST ARROW" #x2198)
- ("SOUTH WEST ARROW" #x2199)
- ("LEFTWARDS ARROW WITH STROKE" #x219A)
- ("RIGHTWARDS ARROW WITH STROKE" #x219B)
- ("LEFTWARDS WAVE ARROW" #x219C)
- ("RIGHTWARDS WAVE ARROW" #x219D)
- ("LEFTWARDS TWO HEADED ARROW" #x219E)
- ("UPWARDS TWO HEADED ARROW" #x219F)
- ("RIGHTWARDS TWO HEADED ARROW" #x21A0)
- ("DOWNWARDS TWO HEADED ARROW" #x21A1)
- ("LEFTWARDS ARROW WITH TAIL" #x21A2)
- ("RIGHTWARDS ARROW WITH TAIL" #x21A3)
- ("LEFTWARDS ARROW FROM BAR" #x21A4)
- ("UPWARDS ARROW FROM BAR" #x21A5)
- ("RIGHTWARDS ARROW FROM BAR" #x21A6)
- ("DOWNWARDS ARROW FROM BAR" #x21A7)
- ("UP DOWN ARROW WITH BASE" #x21A8)
- ("LEFTWARDS ARROW WITH HOOK" #x21A9)
- ("RIGHTWARDS ARROW WITH HOOK" #x21AA)
- ("LEFTWARDS ARROW WITH LOOP" #x21AB)
- ("RIGHTWARDS ARROW WITH LOOP" #x21AC)
- ("LEFT RIGHT WAVE ARROW" #x21AD)
- ("LEFT RIGHT ARROW WITH STROKE" #x21AE)
- ("DOWNWARDS ZIGZAG ARROW" #x21AF)
- ("UPWARDS ARROW WITH TIP LEFTWARDS" #x21B0)
- ("UPWARDS ARROW WITH TIP RIGHTWARDS" #x21B1)
- ("DOWNWARDS ARROW WITH TIP LEFTWARDS" #x21B2)
- ("DOWNWARDS ARROW WITH TIP RIGHTWARDS" #x21B3)
- ("RIGHTWARDS ARROW WITH CORNER DOWNWARDS" #x21B4)
- ("DOWNWARDS ARROW WITH CORNER LEFTWARDS" #x21B5)
- ("ANTICLOCKWISE TOP SEMICIRCLE ARROW" #x21B6)
- ("CLOCKWISE TOP SEMICIRCLE ARROW" #x21B7)
- ("NORTH WEST ARROW TO LONG BAR" #x21B8)
- ("LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR" #x21B9)
- ("ANTICLOCKWISE OPEN CIRCLE ARROW" #x21BA)
- ("CLOCKWISE OPEN CIRCLE ARROW" #x21BB)
- ("LEFTWARDS HARPOON WITH BARB UPWARDS" #x21BC)
- ("LEFTWARDS HARPOON WITH BARB DOWNWARDS" #x21BD)
- ("UPWARDS HARPOON WITH BARB RIGHTWARDS" #x21BE)
- ("UPWARDS HARPOON WITH BARB LEFTWARDS" #x21BF)
- ("RIGHTWARDS HARPOON WITH BARB UPWARDS" #x21C0)
- ("RIGHTWARDS HARPOON WITH BARB DOWNWARDS" #x21C1)
- ("DOWNWARDS HARPOON WITH BARB RIGHTWARDS" #x21C2)
- ("DOWNWARDS HARPOON WITH BARB LEFTWARDS" #x21C3)
- ("RIGHTWARDS ARROW OVER LEFTWARDS ARROW" #x21C4)
- ("UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW" #x21C5)
- ("LEFTWARDS ARROW OVER RIGHTWARDS ARROW" #x21C6)
- ("LEFTWARDS PAIRED ARROWS" #x21C7)
- ("UPWARDS PAIRED ARROWS" #x21C8)
- ("RIGHTWARDS PAIRED ARROWS" #x21C9)
- ("DOWNWARDS PAIRED ARROWS" #x21CA)
- ("LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON" #x21CB)
- ("RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON" #x21CC)
- ("LEFTWARDS DOUBLE ARROW WITH STROKE" #x21CD)
- ("LEFT RIGHT DOUBLE ARROW WITH STROKE" #x21CE)
- ("RIGHTWARDS DOUBLE ARROW WITH STROKE" #x21CF)
- ("LEFTWARDS DOUBLE ARROW" #x21D0)
- ("UPWARDS DOUBLE ARROW" #x21D1)
- ("RIGHTWARDS DOUBLE ARROW" #x21D2)
- ("DOWNWARDS DOUBLE ARROW" #x21D3)
- ("LEFT RIGHT DOUBLE ARROW" #x21D4)
- ("UP DOWN DOUBLE ARROW" #x21D5)
- ("NORTH WEST DOUBLE ARROW" #x21D6)
- ("NORTH EAST DOUBLE ARROW" #x21D7)
- ("SOUTH EAST DOUBLE ARROW" #x21D8)
- ("SOUTH WEST DOUBLE ARROW" #x21D9)
- ("LEFTWARDS TRIPLE ARROW" #x21DA)
- ("RIGHTWARDS TRIPLE ARROW" #x21DB)
- ("LEFTWARDS SQUIGGLE ARROW" #x21DC)
- ("RIGHTWARDS SQUIGGLE ARROW" #x21DD)
- ("UPWARDS ARROW WITH DOUBLE STROKE" #x21DE)
- ("DOWNWARDS ARROW WITH DOUBLE STROKE" #x21DF)
- ("LEFTWARDS DASHED ARROW" #x21E0)
- ("UPWARDS DASHED ARROW" #x21E1)
- ("RIGHTWARDS DASHED ARROW" #x21E2)
- ("DOWNWARDS DASHED ARROW" #x21E3)
- ("LEFTWARDS ARROW TO BAR" #x21E4)
- ("RIGHTWARDS ARROW TO BAR" #x21E5)
- ("LEFTWARDS WHITE ARROW" #x21E6)
- ("UPWARDS WHITE ARROW" #x21E7)
- ("RIGHTWARDS WHITE ARROW" #x21E8)
- ("DOWNWARDS WHITE ARROW" #x21E9)
- ("UPWARDS WHITE ARROW FROM BAR" #x21EA)
- ("UPWARDS WHITE ARROW ON PEDESTAL" #x21EB)
- ("UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR" #x21EC)
- ("UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR" #x21ED)
- ("UPWARDS WHITE DOUBLE ARROW" #x21EE)
- ("UPWARDS WHITE DOUBLE ARROW ON PEDESTAL" #x21EF)
- ("RIGHTWARDS WHITE ARROW FROM WALL" #x21F0)
- ("NORTH WEST ARROW TO CORNER" #x21F1)
- ("SOUTH EAST ARROW TO CORNER" #x21F2)
- ("UP DOWN WHITE ARROW" #x21F3)
- ("RIGHT ARROW WITH SMALL CIRCLE" #x21F4)
- ("DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW" #x21F5)
- ("THREE RIGHTWARDS ARROWS" #x21F6)
- ("LEFTWARDS ARROW WITH VERTICAL STROKE" #x21F7)
- ("RIGHTWARDS ARROW WITH VERTICAL STROKE" #x21F8)
- ("LEFT RIGHT ARROW WITH VERTICAL STROKE" #x21F9)
- ("LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FA)
- ("RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FB)
- ("LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE" #x21FC)
- ("LEFTWARDS OPEN-HEADED ARROW" #x21FD)
- ("RIGHTWARDS OPEN-HEADED ARROW" #x21FE)
- ("LEFT RIGHT OPEN-HEADED ARROW" #x21FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'mathematical-operators
- '(("FOR ALL" #x2200)
- ("COMPLEMENT" #x2201)
- ("PARTIAL DIFFERENTIAL" #x2202)
- ("THERE EXISTS" #x2203)
- ("THERE DOES NOT EXIST" #x2204)
- ("EMPTY SET" #x2205)
- ("INCREMENT" #x2206)
- ("NABLA" #x2207)
- ("ELEMENT OF" #x2208)
- ("NOT AN ELEMENT OF" #x2209)
- ("SMALL ELEMENT OF" #x220A)
- ("CONTAINS AS MEMBER" #x220B)
- ("DOES NOT CONTAIN AS MEMBER" #x220C)
- ("SMALL CONTAINS AS MEMBER" #x220D)
- ("END OF PROOF" #x220E)
- ("N-ARY PRODUCT" #x220F)
- ("N-ARY COPRODUCT" #x2210)
- ("N-ARY SUMMATION" #x2211)
- ("MINUS SIGN" #x2212)
- ("MINUS-OR-PLUS SIGN" #x2213)
- ("DOT PLUS" #x2214)
- ("DIVISION SLASH" #x2215)
- ("SET MINUS" #x2216)
- ("ASTERISK OPERATOR" #x2217)
- ("RING OPERATOR" #x2218)
- ("BULLET OPERATOR" #x2219)
- ("SQUARE ROOT" #x221A)
- ("CUBE ROOT" #x221B)
- ("FOURTH ROOT" #x221C)
- ("PROPORTIONAL TO" #x221D)
- ("INFINITY" #x221E)
- ("RIGHT ANGLE" #x221F)
- ("ANGLE" #x2220)
- ("MEASURED ANGLE" #x2221)
- ("SPHERICAL ANGLE" #x2222)
- ("DIVIDES" #x2223)
- ("DOES NOT DIVIDE" #x2224)
- ("PARALLEL TO" #x2225)
- ("NOT PARALLEL TO" #x2226)
- ("LOGICAL AND" #x2227)
- ("LOGICAL OR" #x2228)
- ("INTERSECTION" #x2229)
- ("UNION" #x222A)
- ("INTEGRAL" #x222B)
- ("DOUBLE INTEGRAL" #x222C)
- ("TRIPLE INTEGRAL" #x222D)
- ("CONTOUR INTEGRAL" #x222E)
- ("SURFACE INTEGRAL" #x222F)
- ("VOLUME INTEGRAL" #x2230)
- ("CLOCKWISE INTEGRAL" #x2231)
- ("CLOCKWISE CONTOUR INTEGRAL" #x2232)
- ("ANTICLOCKWISE CONTOUR INTEGRAL" #x2233)
- ("THEREFORE" #x2234)
- ("BECAUSE" #x2235)
- ("RATIO" #x2236)
- ("PROPORTION" #x2237)
- ("DOT MINUS" #x2238)
- ("EXCESS" #x2239)
- ("GEOMETRIC PROPORTION" #x223A)
- ("HOMOTHETIC" #x223B)
- ("TILDE OPERATOR" #x223C)
- ("REVERSED TILDE" #x223D)
- ("INVERTED LAZY S" #x223E)
- ("SINE WAVE" #x223F)
- ("WREATH PRODUCT" #x2240)
- ("NOT TILDE" #x2241)
- ("MINUS TILDE" #x2242)
- ("ASYMPTOTICALLY EQUAL TO" #x2243)
- ("NOT ASYMPTOTICALLY EQUAL TO" #x2244)
- ("APPROXIMATELY EQUAL TO" #x2245)
- ("APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" #x2246)
- ("NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" #x2247)
- ("ALMOST EQUAL TO" #x2248)
- ("NOT ALMOST EQUAL TO" #x2249)
- ("ALMOST EQUAL OR EQUAL TO" #x224A)
- ("TRIPLE TILDE" #x224B)
- ("ALL EQUAL TO" #x224C)
- ("EQUIVALENT TO" #x224D)
- ("GEOMETRICALLY EQUIVALENT TO" #x224E)
- ("DIFFERENCE BETWEEN" #x224F)
- ("APPROACHES THE LIMIT" #x2250)
- ("GEOMETRICALLY EQUAL TO" #x2251)
- ("APPROXIMATELY EQUAL TO OR THE IMAGE OF" #x2252)
- ("IMAGE OF OR APPROXIMATELY EQUAL TO" #x2253)
- ("COLON EQUALS" #x2254)
- ("EQUALS COLON" #x2255)
- ("RING IN EQUAL TO" #x2256)
- ("RING EQUAL TO" #x2257)
- ("CORRESPONDS TO" #x2258)
- ("ESTIMATES" #x2259)
- ("EQUIANGULAR TO" #x225A)
- ("STAR EQUALS" #x225B)
- ("DELTA EQUAL TO" #x225C)
- ("EQUAL TO BY DEFINITION" #x225D)
- ("MEASURED BY" #x225E)
- ("QUESTIONED EQUAL TO" #x225F)
- ("NOT EQUAL TO" #x2260)
- ("IDENTICAL TO" #x2261)
- ("NOT IDENTICAL TO" #x2262)
- ("STRICTLY EQUIVALENT TO" #x2263)
- ("LESS-THAN OR EQUAL TO" #x2264)
- ("GREATER-THAN OR EQUAL TO" #x2265)
- ("LESS-THAN OVER EQUAL TO" #x2266)
- ("GREATER-THAN OVER EQUAL TO" #x2267)
- ("LESS-THAN BUT NOT EQUAL TO" #x2268)
- ("GREATER-THAN BUT NOT EQUAL TO" #x2269)
- ("MUCH LESS-THAN" #x226A)
- ("MUCH GREATER-THAN" #x226B)
- ("BETWEEN" #x226C)
- ("NOT EQUIVALENT TO" #x226D)
- ("NOT LESS-THAN" #x226E)
- ("NOT GREATER-THAN" #x226F)
- ("NEITHER LESS-THAN NOR EQUAL TO" #x2270)
- ("NEITHER GREATER-THAN NOR EQUAL TO" #x2271)
- ("LESS-THAN OR EQUIVALENT TO" #x2272)
- ("GREATER-THAN OR EQUIVALENT TO" #x2273)
- ("NEITHER LESS-THAN NOR EQUIVALENT TO" #x2274)
- ("NEITHER GREATER-THAN NOR EQUIVALENT TO" #x2275)
- ("LESS-THAN OR GREATER-THAN" #x2276)
- ("GREATER-THAN OR LESS-THAN" #x2277)
- ("NEITHER LESS-THAN NOR GREATER-THAN" #x2278)
- ("NEITHER GREATER-THAN NOR LESS-THAN" #x2279)
- ("PRECEDES" #x227A)
- ("SUCCEEDS" #x227B)
- ("PRECEDES OR EQUAL TO" #x227C)
- ("SUCCEEDS OR EQUAL TO" #x227D)
- ("PRECEDES OR EQUIVALENT TO" #x227E)
- ("SUCCEEDS OR EQUIVALENT TO" #x227F)
- ("DOES NOT PRECEDE" #x2280)
- ("DOES NOT SUCCEED" #x2281)
- ("SUBSET OF" #x2282)
- ("SUPERSET OF" #x2283)
- ("NOT A SUBSET OF" #x2284)
- ("NOT A SUPERSET OF" #x2285)
- ("SUBSET OF OR EQUAL TO" #x2286)
- ("SUPERSET OF OR EQUAL TO" #x2287)
- ("NEITHER A SUBSET OF NOR EQUAL TO" #x2288)
- ("NEITHER A SUPERSET OF NOR EQUAL TO" #x2289)
- ("SUBSET OF WITH NOT EQUAL TO" #x228A)
- ("SUPERSET OF WITH NOT EQUAL TO" #x228B)
- ("MULTISET" #x228C)
- ("MULTISET MULTIPLICATION" #x228D)
- ("MULTISET UNION" #x228E)
- ("SQUARE IMAGE OF" #x228F)
- ("SQUARE ORIGINAL OF" #x2290)
- ("SQUARE IMAGE OF OR EQUAL TO" #x2291)
- ("SQUARE ORIGINAL OF OR EQUAL TO" #x2292)
- ("SQUARE CAP" #x2293)
- ("SQUARE CUP" #x2294)
- ("CIRCLED PLUS" #x2295)
- ("CIRCLED MINUS" #x2296)
- ("CIRCLED TIMES" #x2297)
- ("CIRCLED DIVISION SLASH" #x2298)
- ("CIRCLED DOT OPERATOR" #x2299)
- ("CIRCLED RING OPERATOR" #x229A)
- ("CIRCLED ASTERISK OPERATOR" #x229B)
- ("CIRCLED EQUALS" #x229C)
- ("CIRCLED DASH" #x229D)
- ("SQUARED PLUS" #x229E)
- ("SQUARED MINUS" #x229F)
- ("SQUARED TIMES" #x22A0)
- ("SQUARED DOT OPERATOR" #x22A1)
- ("RIGHT TACK" #x22A2)
- ("LEFT TACK" #x22A3)
- ("DOWN TACK" #x22A4)
- ("UP TACK" #x22A5)
- ("ASSERTION" #x22A6)
- ("MODELS" #x22A7)
- ("TRUE" #x22A8)
- ("FORCES" #x22A9)
- ("TRIPLE VERTICAL BAR RIGHT TURNSTILE" #x22AA)
- ("DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AB)
- ("DOES NOT PROVE" #x22AC)
- ("NOT TRUE" #x22AD)
- ("DOES NOT FORCE" #x22AE)
- ("NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AF)
- ("PRECEDES UNDER RELATION" #x22B0)
- ("SUCCEEDS UNDER RELATION" #x22B1)
- ("NORMAL SUBGROUP OF" #x22B2)
- ("CONTAINS AS NORMAL SUBGROUP" #x22B3)
- ("NORMAL SUBGROUP OF OR EQUAL TO" #x22B4)
- ("CONTAINS AS NORMAL SUBGROUP OR EQUAL TO" #x22B5)
- ("ORIGINAL OF" #x22B6)
- ("IMAGE OF" #x22B7)
- ("MULTIMAP" #x22B8)
- ("HERMITIAN CONJUGATE MATRIX" #x22B9)
- ("INTERCALATE" #x22BA)
- ("XOR" #x22BB)
- ("NAND" #x22BC)
- ("NOR" #x22BD)
- ("RIGHT ANGLE WITH ARC" #x22BE)
- ("RIGHT TRIANGLE" #x22BF)
- ("N-ARY LOGICAL AND" #x22C0)
- ("N-ARY LOGICAL OR" #x22C1)
- ("N-ARY INTERSECTION" #x22C2)
- ("N-ARY UNION" #x22C3)
- ("DIAMOND OPERATOR" #x22C4)
- ("DOT OPERATOR" #x22C5)
- ("STAR OPERATOR" #x22C6)
- ("DIVISION TIMES" #x22C7)
- ("BOWTIE" #x22C8)
- ("LEFT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22C9)
- ("RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22CA)
- ("LEFT SEMIDIRECT PRODUCT" #x22CB)
- ("RIGHT SEMIDIRECT PRODUCT" #x22CC)
- ("REVERSED TILDE EQUALS" #x22CD)
- ("CURLY LOGICAL OR" #x22CE)
- ("CURLY LOGICAL AND" #x22CF)
- ("DOUBLE SUBSET" #x22D0)
- ("DOUBLE SUPERSET" #x22D1)
- ("DOUBLE INTERSECTION" #x22D2)
- ("DOUBLE UNION" #x22D3)
- ("PITCHFORK" #x22D4)
- ("EQUAL AND PARALLEL TO" #x22D5)
- ("LESS-THAN WITH DOT" #x22D6)
- ("GREATER-THAN WITH DOT" #x22D7)
- ("VERY MUCH LESS-THAN" #x22D8)
- ("VERY MUCH GREATER-THAN" #x22D9)
- ("LESS-THAN EQUAL TO OR GREATER-THAN" #x22DA)
- ("GREATER-THAN EQUAL TO OR LESS-THAN" #x22DB)
- ("EQUAL TO OR LESS-THAN" #x22DC)
- ("EQUAL TO OR GREATER-THAN" #x22DD)
- ("EQUAL TO OR PRECEDES" #x22DE)
- ("EQUAL TO OR SUCCEEDS" #x22DF)
- ("DOES NOT PRECEDE OR EQUAL" #x22E0)
- ("DOES NOT SUCCEED OR EQUAL" #x22E1)
- ("NOT SQUARE IMAGE OF OR EQUAL TO" #x22E2)
- ("NOT SQUARE ORIGINAL OF OR EQUAL TO" #x22E3)
- ("SQUARE IMAGE OF OR NOT EQUAL TO" #x22E4)
- ("SQUARE ORIGINAL OF OR NOT EQUAL TO" #x22E5)
- ("LESS-THAN BUT NOT EQUIVALENT TO" #x22E6)
- ("GREATER-THAN BUT NOT EQUIVALENT TO" #x22E7)
- ("PRECEDES BUT NOT EQUIVALENT TO" #x22E8)
- ("SUCCEEDS BUT NOT EQUIVALENT TO" #x22E9)
- ("NOT NORMAL SUBGROUP OF" #x22EA)
- ("DOES NOT CONTAIN AS NORMAL SUBGROUP" #x22EB)
- ("NOT NORMAL SUBGROUP OF OR EQUAL TO" #x22EC)
- ("DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL" #x22ED)
- ("VERTICAL ELLIPSIS" #x22EE)
- ("MIDLINE HORIZONTAL ELLIPSIS" #x22EF)
- ("UP RIGHT DIAGONAL ELLIPSIS" #x22F0)
- ("DOWN RIGHT DIAGONAL ELLIPSIS" #x22F1)
- ("ELEMENT OF WITH LONG HORIZONTAL STROKE" #x22F2)
- ("ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F3)
- ("SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F4)
- ("ELEMENT OF WITH DOT ABOVE" #x22F5)
- ("ELEMENT OF WITH OVERBAR" #x22F6)
- ("SMALL ELEMENT OF WITH OVERBAR" #x22F7)
- ("ELEMENT OF WITH UNDERBAR" #x22F8)
- ("ELEMENT OF WITH TWO HORIZONTAL STROKES" #x22F9)
- ("CONTAINS WITH LONG HORIZONTAL STROKE" #x22FA)
- ("CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FB)
- ("SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FC)
- ("CONTAINS WITH OVERBAR" #x22FD)
- ("SMALL CONTAINS WITH OVERBAR" #x22FE)
- ("Z NOTATION BAG MEMBERSHIP" #x22FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'miscellaneous-technical
- '(("DIAMETER SIGN" #x2300)
- ("ELECTRIC ARROW" #x2301)
- ("HOUSE" #x2302)
- ("UP ARROWHEAD" #x2303)
- ("DOWN ARROWHEAD" #x2304)
- ("PROJECTIVE" #x2305)
- ("PERSPECTIVE" #x2306)
- ("WAVY LINE" #x2307)
- ("LEFT CEILING" #x2308)
- ("RIGHT CEILING" #x2309)
- ("LEFT FLOOR" #x230A)
- ("RIGHT FLOOR" #x230B)
- ("BOTTOM RIGHT CROP" #x230C)
- ("BOTTOM LEFT CROP" #x230D)
- ("TOP RIGHT CROP" #x230E)
- ("TOP LEFT CROP" #x230F)
- ("REVERSED NOT SIGN" #x2310)
- ("SQUARE LOZENGE" #x2311)
- ("ARC" #x2312)
- ("SEGMENT" #x2313)
- ("SECTOR" #x2314)
- ("TELEPHONE RECORDER" #x2315)
- ("POSITION INDICATOR" #x2316)
- ("VIEWDATA SQUARE" #x2317)
- ("PLACE OF INTEREST SIGN" #x2318)
- ("TURNED NOT SIGN" #x2319)
- ("WATCH" #x231A)
- ("HOURGLASS" #x231B)
- ("TOP LEFT CORNER" #x231C)
- ("TOP RIGHT CORNER" #x231D)
- ("BOTTOM LEFT CORNER" #x231E)
- ("BOTTOM RIGHT CORNER" #x231F)
- ("TOP HALF INTEGRAL" #x2320)
- ("BOTTOM HALF INTEGRAL" #x2321)
- ("FROWN" #x2322)
- ("SMILE" #x2323)
- ("UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS" #x2324)
- ("OPTION KEY" #x2325)
- ("ERASE TO THE RIGHT" #x2326)
- ("X IN A RECTANGLE BOX" #x2327)
- ("KEYBOARD" #x2328)
- ("LEFT-POINTING ANGLE BRACKET" #x2329)
- ("RIGHT-POINTING ANGLE BRACKET" #x232A)
- ("ERASE TO THE LEFT" #x232B)
- ("BENZENE RING" #x232C)
- ("CYLINDRICITY" #x232D)
- ("ALL AROUND-PROFILE" #x232E)
- ("SYMMETRY" #x232F)
- ("TOTAL RUNOUT" #x2330)
- ("DIMENSION ORIGIN" #x2331)
- ("CONICAL TAPER" #x2332)
- ("SLOPE" #x2333)
- ("COUNTERBORE" #x2334)
- ("COUNTERSINK" #x2335)
- ("APL FUNCTIONAL SYMBOL I-BEAM" #x2336)
- ("APL FUNCTIONAL SYMBOL SQUISH QUAD" #x2337)
- ("APL FUNCTIONAL SYMBOL QUAD EQUAL" #x2338)
- ("APL FUNCTIONAL SYMBOL QUAD DIVIDE" #x2339)
- ("APL FUNCTIONAL SYMBOL QUAD DIAMOND" #x233A)
- ("APL FUNCTIONAL SYMBOL QUAD JOT" #x233B)
- ("APL FUNCTIONAL SYMBOL QUAD CIRCLE" #x233C)
- ("APL FUNCTIONAL SYMBOL CIRCLE STILE" #x233D)
- ("APL FUNCTIONAL SYMBOL CIRCLE JOT" #x233E)
- ("APL FUNCTIONAL SYMBOL SLASH BAR" #x233F)
- ("APL FUNCTIONAL SYMBOL BACKSLASH BAR" #x2340)
- ("APL FUNCTIONAL SYMBOL QUAD SLASH" #x2341)
- ("APL FUNCTIONAL SYMBOL QUAD BACKSLASH" #x2342)
- ("APL FUNCTIONAL SYMBOL QUAD LESS-THAN" #x2343)
- ("APL FUNCTIONAL SYMBOL QUAD GREATER-THAN" #x2344)
- ("APL FUNCTIONAL SYMBOL LEFTWARDS VANE" #x2345)
- ("APL FUNCTIONAL SYMBOL RIGHTWARDS VANE" #x2346)
- ("APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW" #x2347)
- ("APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW" #x2348)
- ("APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH" #x2349)
- ("APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR" #x234A)
- ("APL FUNCTIONAL SYMBOL DELTA STILE" #x234B)
- ("APL FUNCTIONAL SYMBOL QUAD DOWN CARET" #x234C)
- ("APL FUNCTIONAL SYMBOL QUAD DELTA" #x234D)
- ("APL FUNCTIONAL SYMBOL DOWN TACK JOT" #x234E)
- ("APL FUNCTIONAL SYMBOL UPWARDS VANE" #x234F)
- ("APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW" #x2350)
- ("APL FUNCTIONAL SYMBOL UP TACK OVERBAR" #x2351)
- ("APL FUNCTIONAL SYMBOL DEL STILE" #x2352)
- ("APL FUNCTIONAL SYMBOL QUAD UP CARET" #x2353)
- ("APL FUNCTIONAL SYMBOL QUAD DEL" #x2354)
- ("APL FUNCTIONAL SYMBOL UP TACK JOT" #x2355)
- ("APL FUNCTIONAL SYMBOL DOWNWARDS VANE" #x2356)
- ("APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW" #x2357)
- ("APL FUNCTIONAL SYMBOL QUOTE UNDERBAR" #x2358)
- ("APL FUNCTIONAL SYMBOL DELTA UNDERBAR" #x2359)
- ("APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR" #x235A)
- ("APL FUNCTIONAL SYMBOL JOT UNDERBAR" #x235B)
- ("APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR" #x235C)
- ("APL FUNCTIONAL SYMBOL UP SHOE JOT" #x235D)
- ("APL FUNCTIONAL SYMBOL QUOTE QUAD" #x235E)
- ("APL FUNCTIONAL SYMBOL CIRCLE STAR" #x235F)
- ("APL FUNCTIONAL SYMBOL QUAD COLON" #x2360)
- ("APL FUNCTIONAL SYMBOL UP TACK DIAERESIS" #x2361)
- ("APL FUNCTIONAL SYMBOL DEL DIAERESIS" #x2362)
- ("APL FUNCTIONAL SYMBOL STAR DIAERESIS" #x2363)
- ("APL FUNCTIONAL SYMBOL JOT DIAERESIS" #x2364)
- ("APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS" #x2365)
- ("APL FUNCTIONAL SYMBOL DOWN SHOE STILE" #x2366)
- ("APL FUNCTIONAL SYMBOL LEFT SHOE STILE" #x2367)
- ("APL FUNCTIONAL SYMBOL TILDE DIAERESIS" #x2368)
- ("APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS" #x2369)
- ("APL FUNCTIONAL SYMBOL COMMA BAR" #x236A)
- ("APL FUNCTIONAL SYMBOL DEL TILDE" #x236B)
- ("APL FUNCTIONAL SYMBOL ZILDE" #x236C)
- ("APL FUNCTIONAL SYMBOL STILE TILDE" #x236D)
- ("APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR" #x236E)
- ("APL FUNCTIONAL SYMBOL QUAD NOT EQUAL" #x236F)
- ("APL FUNCTIONAL SYMBOL QUAD QUESTION" #x2370)
- ("APL FUNCTIONAL SYMBOL DOWN CARET TILDE" #x2371)
- ("APL FUNCTIONAL SYMBOL UP CARET TILDE" #x2372)
- ("APL FUNCTIONAL SYMBOL IOTA" #x2373)
- ("APL FUNCTIONAL SYMBOL RHO" #x2374)
- ("APL FUNCTIONAL SYMBOL OMEGA" #x2375)
- ("APL FUNCTIONAL SYMBOL ALPHA UNDERBAR" #x2376)
- ("APL FUNCTIONAL SYMBOL EPSILON UNDERBAR" #x2377)
- ("APL FUNCTIONAL SYMBOL IOTA UNDERBAR" #x2378)
- ("APL FUNCTIONAL SYMBOL OMEGA UNDERBAR" #x2379)
- ("APL FUNCTIONAL SYMBOL ALPHA" #x237A)
- ("NOT CHECK MARK" #x237B)
- ("RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW" #x237C)
- ("SHOULDERED OPEN BOX" #x237D)
- ("BELL SYMBOL" #x237E)
- ("VERTICAL LINE WITH MIDDLE DOT" #x237F)
- ("INSERTION SYMBOL" #x2380)
- ("CONTINUOUS UNDERLINE SYMBOL" #x2381)
- ("DISCONTINUOUS UNDERLINE SYMBOL" #x2382)
- ("EMPHASIS SYMBOL" #x2383)
- ("COMPOSITION SYMBOL" #x2384)
- ("WHITE SQUARE WITH CENTRE VERTICAL LINE" #x2385)
- ("ENTER SYMBOL" #x2386)
- ("ALTERNATIVE KEY SYMBOL" #x2387)
- ("HELM SYMBOL" #x2388)
- ("CIRCLED HORIZONTAL BAR WITH NOTCH" #x2389)
- ("CIRCLED TRIANGLE DOWN" #x238A)
- ("BROKEN CIRCLE WITH NORTHWEST ARROW" #x238B)
- ("UNDO SYMBOL" #x238C)
- ("MONOSTABLE SYMBOL" #x238D)
- ("HYSTERESIS SYMBOL" #x238E)
- ("OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL" #x238F)
- ("OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL" #x2390)
- ("PASSIVE-PULL-DOWN-OUTPUT SYMBOL" #x2391)
- ("PASSIVE-PULL-UP-OUTPUT SYMBOL" #x2392)
- ("DIRECT CURRENT SYMBOL FORM TWO" #x2393)
- ("SOFTWARE-FUNCTION SYMBOL" #x2394)
- ("APL FUNCTIONAL SYMBOL QUAD" #x2395)
- ("DECIMAL SEPARATOR KEY SYMBOL" #x2396)
- ("PREVIOUS PAGE" #x2397)
- ("NEXT PAGE" #x2398)
- ("PRINT SCREEN SYMBOL" #x2399)
- ("CLEAR SCREEN SYMBOL" #x239A)
- ("LEFT PARENTHESIS UPPER HOOK" #x239B)
- ("LEFT PARENTHESIS EXTENSION" #x239C)
- ("LEFT PARENTHESIS LOWER HOOK" #x239D)
- ("RIGHT PARENTHESIS UPPER HOOK" #x239E)
- ("RIGHT PARENTHESIS EXTENSION" #x239F)
- ("RIGHT PARENTHESIS LOWER HOOK" #x23A0)
- ("LEFT SQUARE BRACKET UPPER CORNER" #x23A1)
- ("LEFT SQUARE BRACKET EXTENSION" #x23A2)
- ("LEFT SQUARE BRACKET LOWER CORNER" #x23A3)
- ("RIGHT SQUARE BRACKET UPPER CORNER" #x23A4)
- ("RIGHT SQUARE BRACKET EXTENSION" #x23A5)
- ("RIGHT SQUARE BRACKET LOWER CORNER" #x23A6)
- ("LEFT CURLY BRACKET UPPER HOOK" #x23A7)
- ("LEFT CURLY BRACKET MIDDLE PIECE" #x23A8)
- ("LEFT CURLY BRACKET LOWER HOOK" #x23A9)
- ("CURLY BRACKET EXTENSION" #x23AA)
- ("RIGHT CURLY BRACKET UPPER HOOK" #x23AB)
- ("RIGHT CURLY BRACKET MIDDLE PIECE" #x23AC)
- ("RIGHT CURLY BRACKET LOWER HOOK" #x23AD)
- ("INTEGRAL EXTENSION" #x23AE)
- ("HORIZONTAL LINE EXTENSION" #x23AF)
- ("UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION" #x23B0)
- ("UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION" #x23B1)
- ("SUMMATION TOP" #x23B2)
- ("SUMMATION BOTTOM" #x23B3)
- ("TOP SQUARE BRACKET" #x23B4)
- ("BOTTOM SQUARE BRACKET" #x23B5)
- ("BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET" #x23B6)
- ("RADICAL SYMBOL BOTTOM" #x23B7)
- ("LEFT VERTICAL BOX LINE" #x23B8)
- ("RIGHT VERTICAL BOX LINE" #x23B9)
- ("HORIZONTAL SCAN LINE-1" #x23BA)
- ("HORIZONTAL SCAN LINE-3" #x23BB)
- ("HORIZONTAL SCAN LINE-7" #x23BC)
- ("HORIZONTAL SCAN LINE-9" #x23BD)
- ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT" #x23BE)
- ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT" #x23BF)
- ("DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE" #x23C0)
- ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE" #x23C1)
- ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE" #x23C2)
- ("DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE" #x23C3)
- ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE" #x23C4)
- ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE" #x23C5)
- ("DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE" #x23C6)
- ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE" #x23C7)
- ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE" #x23C8)
- ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL" #x23C9)
- ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL" #x23CA)
- ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT" #x23CB)
- ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT" #x23CC)
- ("SQUARE FOOT" #x23CD)
- ("RETURN SYMBOL" #x23CE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'control-pictures
- '(("SYMBOL FOR NULL" #x2400)
- ("SYMBOL FOR START OF HEADING" #x2401)
- ("SYMBOL FOR START OF TEXT" #x2402)
- ("SYMBOL FOR END OF TEXT" #x2403)
- ("SYMBOL FOR END OF TRANSMISSION" #x2404)
- ("SYMBOL FOR ENQUIRY" #x2405)
- ("SYMBOL FOR ACKNOWLEDGE" #x2406)
- ("SYMBOL FOR BELL" #x2407)
- ("SYMBOL FOR BACKSPACE" #x2408)
- ("SYMBOL FOR HORIZONTAL TABULATION" #x2409)
- ("SYMBOL FOR LINE FEED" #x240A)
- ("SYMBOL FOR VERTICAL TABULATION" #x240B)
- ("SYMBOL FOR FORM FEED" #x240C)
- ("SYMBOL FOR CARRIAGE RETURN" #x240D)
- ("SYMBOL FOR SHIFT OUT" #x240E)
- ("SYMBOL FOR SHIFT IN" #x240F)
- ("SYMBOL FOR DATA LINK ESCAPE" #x2410)
- ("SYMBOL FOR DEVICE CONTROL ONE" #x2411)
- ("SYMBOL FOR DEVICE CONTROL TWO" #x2412)
- ("SYMBOL FOR DEVICE CONTROL THREE" #x2413)
- ("SYMBOL FOR DEVICE CONTROL FOUR" #x2414)
- ("SYMBOL FOR NEGATIVE ACKNOWLEDGE" #x2415)
- ("SYMBOL FOR SYNCHRONOUS IDLE" #x2416)
- ("SYMBOL FOR END OF TRANSMISSION BLOCK" #x2417)
- ("SYMBOL FOR CANCEL" #x2418)
- ("SYMBOL FOR END OF MEDIUM" #x2419)
- ("SYMBOL FOR SUBSTITUTE" #x241A)
- ("SYMBOL FOR ESCAPE" #x241B)
- ("SYMBOL FOR FILE SEPARATOR" #x241C)
- ("SYMBOL FOR GROUP SEPARATOR" #x241D)
- ("SYMBOL FOR RECORD SEPARATOR" #x241E)
- ("SYMBOL FOR UNIT SEPARATOR" #x241F)
- ("SYMBOL FOR SPACE" #x2420)
- ("SYMBOL FOR DELETE" #x2421)
- ("BLANK SYMBOL" #x2422)
- ("OPEN BOX" #x2423)
- ("SYMBOL FOR NEWLINE" #x2424)
- ("SYMBOL FOR DELETE FORM TWO" #x2425)
- ("SYMBOL FOR SUBSTITUTE FORM TWO" #x2426)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'optical-character-recognition
- '(("OCR HOOK" #x2440)
- ("OCR CHAIR" #x2441)
- ("OCR FORK" #x2442)
- ("OCR INVERTED FORK" #x2443)
- ("OCR BELT BUCKLE" #x2444)
- ("OCR BOW TIE" #x2445)
- ("OCR BRANCH BANK IDENTIFICATION" #x2446)
- ("OCR AMOUNT OF CHECK" #x2447)
- ("OCR DASH" #x2448)
- ("OCR CUSTOMER ACCOUNT NUMBER" #x2449)
- ("OCR DOUBLE BACKSLASH" #x244A)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'enclosed-alphanumerics
- '(("CIRCLED DIGIT ONE" #x2460)
- ("CIRCLED DIGIT TWO" #x2461)
- ("CIRCLED DIGIT THREE" #x2462)
- ("CIRCLED DIGIT FOUR" #x2463)
- ("CIRCLED DIGIT FIVE" #x2464)
- ("CIRCLED DIGIT SIX" #x2465)
- ("CIRCLED DIGIT SEVEN" #x2466)
- ("CIRCLED DIGIT EIGHT" #x2467)
- ("CIRCLED DIGIT NINE" #x2468)
- ("CIRCLED NUMBER TEN" #x2469)
- ("CIRCLED NUMBER ELEVEN" #x246A)
- ("CIRCLED NUMBER TWELVE" #x246B)
- ("CIRCLED NUMBER THIRTEEN" #x246C)
- ("CIRCLED NUMBER FOURTEEN" #x246D)
- ("CIRCLED NUMBER FIFTEEN" #x246E)
- ("CIRCLED NUMBER SIXTEEN" #x246F)
- ("CIRCLED NUMBER SEVENTEEN" #x2470)
- ("CIRCLED NUMBER EIGHTEEN" #x2471)
- ("CIRCLED NUMBER NINETEEN" #x2472)
- ("CIRCLED NUMBER TWENTY" #x2473)
- ("PARENTHESIZED DIGIT ONE" #x2474)
- ("PARENTHESIZED DIGIT TWO" #x2475)
- ("PARENTHESIZED DIGIT THREE" #x2476)
- ("PARENTHESIZED DIGIT FOUR" #x2477)
- ("PARENTHESIZED DIGIT FIVE" #x2478)
- ("PARENTHESIZED DIGIT SIX" #x2479)
- ("PARENTHESIZED DIGIT SEVEN" #x247A)
- ("PARENTHESIZED DIGIT EIGHT" #x247B)
- ("PARENTHESIZED DIGIT NINE" #x247C)
- ("PARENTHESIZED NUMBER TEN" #x247D)
- ("PARENTHESIZED NUMBER ELEVEN" #x247E)
- ("PARENTHESIZED NUMBER TWELVE" #x247F)
- ("PARENTHESIZED NUMBER THIRTEEN" #x2480)
- ("PARENTHESIZED NUMBER FOURTEEN" #x2481)
- ("PARENTHESIZED NUMBER FIFTEEN" #x2482)
- ("PARENTHESIZED NUMBER SIXTEEN" #x2483)
- ("PARENTHESIZED NUMBER SEVENTEEN" #x2484)
- ("PARENTHESIZED NUMBER EIGHTEEN" #x2485)
- ("PARENTHESIZED NUMBER NINETEEN" #x2486)
- ("PARENTHESIZED NUMBER TWENTY" #x2487)
- ("DIGIT ONE FULL STOP" #x2488)
- ("DIGIT TWO FULL STOP" #x2489)
- ("DIGIT THREE FULL STOP" #x248A)
- ("DIGIT FOUR FULL STOP" #x248B)
- ("DIGIT FIVE FULL STOP" #x248C)
- ("DIGIT SIX FULL STOP" #x248D)
- ("DIGIT SEVEN FULL STOP" #x248E)
- ("DIGIT EIGHT FULL STOP" #x248F)
- ("DIGIT NINE FULL STOP" #x2490)
- ("NUMBER TEN FULL STOP" #x2491)
- ("NUMBER ELEVEN FULL STOP" #x2492)
- ("NUMBER TWELVE FULL STOP" #x2493)
- ("NUMBER THIRTEEN FULL STOP" #x2494)
- ("NUMBER FOURTEEN FULL STOP" #x2495)
- ("NUMBER FIFTEEN FULL STOP" #x2496)
- ("NUMBER SIXTEEN FULL STOP" #x2497)
- ("NUMBER SEVENTEEN FULL STOP" #x2498)
- ("NUMBER EIGHTEEN FULL STOP" #x2499)
- ("NUMBER NINETEEN FULL STOP" #x249A)
- ("NUMBER TWENTY FULL STOP" #x249B)
- ("PARENTHESIZED LATIN SMALL LETTER A" #x249C)
- ("PARENTHESIZED LATIN SMALL LETTER B" #x249D)
- ("PARENTHESIZED LATIN SMALL LETTER C" #x249E)
- ("PARENTHESIZED LATIN SMALL LETTER D" #x249F)
- ("PARENTHESIZED LATIN SMALL LETTER E" #x24A0)
- ("PARENTHESIZED LATIN SMALL LETTER F" #x24A1)
- ("PARENTHESIZED LATIN SMALL LETTER G" #x24A2)
- ("PARENTHESIZED LATIN SMALL LETTER H" #x24A3)
- ("PARENTHESIZED LATIN SMALL LETTER I" #x24A4)
- ("PARENTHESIZED LATIN SMALL LETTER J" #x24A5)
- ("PARENTHESIZED LATIN SMALL LETTER K" #x24A6)
- ("PARENTHESIZED LATIN SMALL LETTER L" #x24A7)
- ("PARENTHESIZED LATIN SMALL LETTER M" #x24A8)
- ("PARENTHESIZED LATIN SMALL LETTER N" #x24A9)
- ("PARENTHESIZED LATIN SMALL LETTER O" #x24AA)
- ("PARENTHESIZED LATIN SMALL LETTER P" #x24AB)
- ("PARENTHESIZED LATIN SMALL LETTER Q" #x24AC)
- ("PARENTHESIZED LATIN SMALL LETTER R" #x24AD)
- ("PARENTHESIZED LATIN SMALL LETTER S" #x24AE)
- ("PARENTHESIZED LATIN SMALL LETTER T" #x24AF)
- ("PARENTHESIZED LATIN SMALL LETTER U" #x24B0)
- ("PARENTHESIZED LATIN SMALL LETTER V" #x24B1)
- ("PARENTHESIZED LATIN SMALL LETTER W" #x24B2)
- ("PARENTHESIZED LATIN SMALL LETTER X" #x24B3)
- ("PARENTHESIZED LATIN SMALL LETTER Y" #x24B4)
- ("PARENTHESIZED LATIN SMALL LETTER Z" #x24B5)
- ("CIRCLED LATIN CAPITAL LETTER A" #x24B6)
- ("CIRCLED LATIN CAPITAL LETTER B" #x24B7)
- ("CIRCLED LATIN CAPITAL LETTER C" #x24B8)
- ("CIRCLED LATIN CAPITAL LETTER D" #x24B9)
- ("CIRCLED LATIN CAPITAL LETTER E" #x24BA)
- ("CIRCLED LATIN CAPITAL LETTER F" #x24BB)
- ("CIRCLED LATIN CAPITAL LETTER G" #x24BC)
- ("CIRCLED LATIN CAPITAL LETTER H" #x24BD)
- ("CIRCLED LATIN CAPITAL LETTER I" #x24BE)
- ("CIRCLED LATIN CAPITAL LETTER J" #x24BF)
- ("CIRCLED LATIN CAPITAL LETTER K" #x24C0)
- ("CIRCLED LATIN CAPITAL LETTER L" #x24C1)
- ("CIRCLED LATIN CAPITAL LETTER M" #x24C2)
- ("CIRCLED LATIN CAPITAL LETTER N" #x24C3)
- ("CIRCLED LATIN CAPITAL LETTER O" #x24C4)
- ("CIRCLED LATIN CAPITAL LETTER P" #x24C5)
- ("CIRCLED LATIN CAPITAL LETTER Q" #x24C6)
- ("CIRCLED LATIN CAPITAL LETTER R" #x24C7)
- ("CIRCLED LATIN CAPITAL LETTER S" #x24C8)
- ("CIRCLED LATIN CAPITAL LETTER T" #x24C9)
- ("CIRCLED LATIN CAPITAL LETTER U" #x24CA)
- ("CIRCLED LATIN CAPITAL LETTER V" #x24CB)
- ("CIRCLED LATIN CAPITAL LETTER W" #x24CC)
- ("CIRCLED LATIN CAPITAL LETTER X" #x24CD)
- ("CIRCLED LATIN CAPITAL LETTER Y" #x24CE)
- ("CIRCLED LATIN CAPITAL LETTER Z" #x24CF)
- ("CIRCLED LATIN SMALL LETTER A" #x24D0)
- ("CIRCLED LATIN SMALL LETTER B" #x24D1)
- ("CIRCLED LATIN SMALL LETTER C" #x24D2)
- ("CIRCLED LATIN SMALL LETTER D" #x24D3)
- ("CIRCLED LATIN SMALL LETTER E" #x24D4)
- ("CIRCLED LATIN SMALL LETTER F" #x24D5)
- ("CIRCLED LATIN SMALL LETTER G" #x24D6)
- ("CIRCLED LATIN SMALL LETTER H" #x24D7)
- ("CIRCLED LATIN SMALL LETTER I" #x24D8)
- ("CIRCLED LATIN SMALL LETTER J" #x24D9)
- ("CIRCLED LATIN SMALL LETTER K" #x24DA)
- ("CIRCLED LATIN SMALL LETTER L" #x24DB)
- ("CIRCLED LATIN SMALL LETTER M" #x24DC)
- ("CIRCLED LATIN SMALL LETTER N" #x24DD)
- ("CIRCLED LATIN SMALL LETTER O" #x24DE)
- ("CIRCLED LATIN SMALL LETTER P" #x24DF)
- ("CIRCLED LATIN SMALL LETTER Q" #x24E0)
- ("CIRCLED LATIN SMALL LETTER R" #x24E1)
- ("CIRCLED LATIN SMALL LETTER S" #x24E2)
- ("CIRCLED LATIN SMALL LETTER T" #x24E3)
- ("CIRCLED LATIN SMALL LETTER U" #x24E4)
- ("CIRCLED LATIN SMALL LETTER V" #x24E5)
- ("CIRCLED LATIN SMALL LETTER W" #x24E6)
- ("CIRCLED LATIN SMALL LETTER X" #x24E7)
- ("CIRCLED LATIN SMALL LETTER Y" #x24E8)
- ("CIRCLED LATIN SMALL LETTER Z" #x24E9)
- ("CIRCLED DIGIT ZERO" #x24EA)
- ("NEGATIVE CIRCLED NUMBER ELEVEN" #x24EB)
- ("NEGATIVE CIRCLED NUMBER TWELVE" #x24EC)
- ("NEGATIVE CIRCLED NUMBER THIRTEEN" #x24ED)
- ("NEGATIVE CIRCLED NUMBER FOURTEEN" #x24EE)
- ("NEGATIVE CIRCLED NUMBER FIFTEEN" #x24EF)
- ("NEGATIVE CIRCLED NUMBER SIXTEEN" #x24F0)
- ("NEGATIVE CIRCLED NUMBER SEVENTEEN" #x24F1)
- ("NEGATIVE CIRCLED NUMBER EIGHTEEN" #x24F2)
- ("NEGATIVE CIRCLED NUMBER NINETEEN" #x24F3)
- ("NEGATIVE CIRCLED NUMBER TWENTY" #x24F4)
- ("DOUBLE CIRCLED DIGIT ONE" #x24F5)
- ("DOUBLE CIRCLED DIGIT TWO" #x24F6)
- ("DOUBLE CIRCLED DIGIT THREE" #x24F7)
- ("DOUBLE CIRCLED DIGIT FOUR" #x24F8)
- ("DOUBLE CIRCLED DIGIT FIVE" #x24F9)
- ("DOUBLE CIRCLED DIGIT SIX" #x24FA)
- ("DOUBLE CIRCLED DIGIT SEVEN" #x24FB)
- ("DOUBLE CIRCLED DIGIT EIGHT" #x24FC)
- ("DOUBLE CIRCLED DIGIT NINE" #x24FD)
- ("DOUBLE CIRCLED NUMBER TEN" #x24FE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'box-drawing
- '(("BOX DRAWINGS LIGHT HORIZONTAL" #x2500)
- ("BOX DRAWINGS HEAVY HORIZONTAL" #x2501)
- ("BOX DRAWINGS LIGHT VERTICAL" #x2502)
- ("BOX DRAWINGS HEAVY VERTICAL" #x2503)
- ("BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL" #x2504)
- ("BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL" #x2505)
- ("BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL" #x2506)
- ("BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL" #x2507)
- ("BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL" #x2508)
- ("BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL" #x2509)
- ("BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL" #x250A)
- ("BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL" #x250B)
- ("BOX DRAWINGS LIGHT DOWN AND RIGHT" #x250C)
- ("BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY" #x250D)
- ("BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT" #x250E)
- ("BOX DRAWINGS HEAVY DOWN AND RIGHT" #x250F)
- ("BOX DRAWINGS LIGHT DOWN AND LEFT" #x2510)
- ("BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY" #x2511)
- ("BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT" #x2512)
- ("BOX DRAWINGS HEAVY DOWN AND LEFT" #x2513)
- ("BOX DRAWINGS LIGHT UP AND RIGHT" #x2514)
- ("BOX DRAWINGS UP LIGHT AND RIGHT HEAVY" #x2515)
- ("BOX DRAWINGS UP HEAVY AND RIGHT LIGHT" #x2516)
- ("BOX DRAWINGS HEAVY UP AND RIGHT" #x2517)
- ("BOX DRAWINGS LIGHT UP AND LEFT" #x2518)
- ("BOX DRAWINGS UP LIGHT AND LEFT HEAVY" #x2519)
- ("BOX DRAWINGS UP HEAVY AND LEFT LIGHT" #x251A)
- ("BOX DRAWINGS HEAVY UP AND LEFT" #x251B)
- ("BOX DRAWINGS LIGHT VERTICAL AND RIGHT" #x251C)
- ("BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY" #x251D)
- ("BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT" #x251E)
- ("BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT" #x251F)
- ("BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT" #x2520)
- ("BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY" #x2521)
- ("BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY" #x2522)
- ("BOX DRAWINGS HEAVY VERTICAL AND RIGHT" #x2523)
- ("BOX DRAWINGS LIGHT VERTICAL AND LEFT" #x2524)
- ("BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY" #x2525)
- ("BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT" #x2526)
- ("BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT" #x2527)
- ("BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT" #x2528)
- ("BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY" #x2529)
- ("BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY" #x252A)
- ("BOX DRAWINGS HEAVY VERTICAL AND LEFT" #x252B)
- ("BOX DRAWINGS LIGHT DOWN AND HORIZONTAL" #x252C)
- ("BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT" #x252D)
- ("BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT" #x252E)
- ("BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY" #x252F)
- ("BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT" #x2530)
- ("BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY" #x2531)
- ("BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY" #x2532)
- ("BOX DRAWINGS HEAVY DOWN AND HORIZONTAL" #x2533)
- ("BOX DRAWINGS LIGHT UP AND HORIZONTAL" #x2534)
- ("BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT" #x2535)
- ("BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT" #x2536)
- ("BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY" #x2537)
- ("BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT" #x2538)
- ("BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY" #x2539)
- ("BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY" #x253A)
- ("BOX DRAWINGS HEAVY UP AND HORIZONTAL" #x253B)
- ("BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL" #x253C)
- ("BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT" #x253D)
- ("BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT" #x253E)
- ("BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY" #x253F)
- ("BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT" #x2540)
- ("BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT" #x2541)
- ("BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT" #x2542)
- ("BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT" #x2543)
- ("BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT" #x2544)
- ("BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT" #x2545)
- ("BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT" #x2546)
- ("BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY" #x2547)
- ("BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY" #x2548)
- ("BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY" #x2549)
- ("BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY" #x254A)
- ("BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL" #x254B)
- ("BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL" #x254C)
- ("BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL" #x254D)
- ("BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL" #x254E)
- ("BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL" #x254F)
- ("BOX DRAWINGS DOUBLE HORIZONTAL" #x2550)
- ("BOX DRAWINGS DOUBLE VERTICAL" #x2551)
- ("BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE" #x2552)
- ("BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE" #x2553)
- ("BOX DRAWINGS DOUBLE DOWN AND RIGHT" #x2554)
- ("BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE" #x2555)
- ("BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE" #x2556)
- ("BOX DRAWINGS DOUBLE DOWN AND LEFT" #x2557)
- ("BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE" #x2558)
- ("BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE" #x2559)
- ("BOX DRAWINGS DOUBLE UP AND RIGHT" #x255A)
- ("BOX DRAWINGS UP SINGLE AND LEFT DOUBLE" #x255B)
- ("BOX DRAWINGS UP DOUBLE AND LEFT SINGLE" #x255C)
- ("BOX DRAWINGS DOUBLE UP AND LEFT" #x255D)
- ("BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE" #x255E)
- ("BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE" #x255F)
- ("BOX DRAWINGS DOUBLE VERTICAL AND RIGHT" #x2560)
- ("BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE" #x2561)
- ("BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE" #x2562)
- ("BOX DRAWINGS DOUBLE VERTICAL AND LEFT" #x2563)
- ("BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE" #x2564)
- ("BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE" #x2565)
- ("BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL" #x2566)
- ("BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE" #x2567)
- ("BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE" #x2568)
- ("BOX DRAWINGS DOUBLE UP AND HORIZONTAL" #x2569)
- ("BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE" #x256A)
- ("BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE" #x256B)
- ("BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL" #x256C)
- ("BOX DRAWINGS LIGHT ARC DOWN AND RIGHT" #x256D)
- ("BOX DRAWINGS LIGHT ARC DOWN AND LEFT" #x256E)
- ("BOX DRAWINGS LIGHT ARC UP AND LEFT" #x256F)
- ("BOX DRAWINGS LIGHT ARC UP AND RIGHT" #x2570)
- ("BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT" #x2571)
- ("BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT" #x2572)
- ("BOX DRAWINGS LIGHT DIAGONAL CROSS" #x2573)
- ("BOX DRAWINGS LIGHT LEFT" #x2574)
- ("BOX DRAWINGS LIGHT UP" #x2575)
- ("BOX DRAWINGS LIGHT RIGHT" #x2576)
- ("BOX DRAWINGS LIGHT DOWN" #x2577)
- ("BOX DRAWINGS HEAVY LEFT" #x2578)
- ("BOX DRAWINGS HEAVY UP" #x2579)
- ("BOX DRAWINGS HEAVY RIGHT" #x257A)
- ("BOX DRAWINGS HEAVY DOWN" #x257B)
- ("BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT" #x257C)
- ("BOX DRAWINGS LIGHT UP AND HEAVY DOWN" #x257D)
- ("BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT" #x257E)
- ("BOX DRAWINGS HEAVY UP AND LIGHT DOWN" #x257F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'block-elements
- '(("UPPER HALF BLOCK" #x2580)
- ("LOWER ONE EIGHTH BLOCK" #x2581)
- ("LOWER ONE QUARTER BLOCK" #x2582)
- ("LOWER THREE EIGHTHS BLOCK" #x2583)
- ("LOWER HALF BLOCK" #x2584)
- ("LOWER FIVE EIGHTHS BLOCK" #x2585)
- ("LOWER THREE QUARTERS BLOCK" #x2586)
- ("LOWER SEVEN EIGHTHS BLOCK" #x2587)
- ("FULL BLOCK" #x2588)
- ("LEFT SEVEN EIGHTHS BLOCK" #x2589)
- ("LEFT THREE QUARTERS BLOCK" #x258A)
- ("LEFT FIVE EIGHTHS BLOCK" #x258B)
- ("LEFT HALF BLOCK" #x258C)
- ("LEFT THREE EIGHTHS BLOCK" #x258D)
- ("LEFT ONE QUARTER BLOCK" #x258E)
- ("LEFT ONE EIGHTH BLOCK" #x258F)
- ("RIGHT HALF BLOCK" #x2590)
- ("LIGHT SHADE" #x2591)
- ("MEDIUM SHADE" #x2592)
- ("DARK SHADE" #x2593)
- ("UPPER ONE EIGHTH BLOCK" #x2594)
- ("RIGHT ONE EIGHTH BLOCK" #x2595)
- ("QUADRANT LOWER LEFT" #x2596)
- ("QUADRANT LOWER RIGHT" #x2597)
- ("QUADRANT UPPER LEFT" #x2598)
- ("QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT" #x2599)
- ("QUADRANT UPPER LEFT AND LOWER RIGHT" #x259A)
- ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT" #x259B)
- ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT" #x259C)
- ("QUADRANT UPPER RIGHT" #x259D)
- ("QUADRANT UPPER RIGHT AND LOWER LEFT" #x259E)
- ("QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT" #x259F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'geometric-shapes
- '(("BLACK SQUARE" #x25A0)
- ("WHITE SQUARE" #x25A1)
- ("WHITE SQUARE WITH ROUNDED CORNERS" #x25A2)
- ("WHITE SQUARE CONTAINING BLACK SMALL SQUARE" #x25A3)
- ("SQUARE WITH HORIZONTAL FILL" #x25A4)
- ("SQUARE WITH VERTICAL FILL" #x25A5)
- ("SQUARE WITH ORTHOGONAL CROSSHATCH FILL" #x25A6)
- ("SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL" #x25A7)
- ("SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL" #x25A8)
- ("SQUARE WITH DIAGONAL CROSSHATCH FILL" #x25A9)
- ("BLACK SMALL SQUARE" #x25AA)
- ("WHITE SMALL SQUARE" #x25AB)
- ("BLACK RECTANGLE" #x25AC)
- ("WHITE RECTANGLE" #x25AD)
- ("BLACK VERTICAL RECTANGLE" #x25AE)
- ("WHITE VERTICAL RECTANGLE" #x25AF)
- ("BLACK PARALLELOGRAM" #x25B0)
- ("WHITE PARALLELOGRAM" #x25B1)
- ("BLACK UP-POINTING TRIANGLE" #x25B2)
- ("WHITE UP-POINTING TRIANGLE" #x25B3)
- ("BLACK UP-POINTING SMALL TRIANGLE" #x25B4)
- ("WHITE UP-POINTING SMALL TRIANGLE" #x25B5)
- ("BLACK RIGHT-POINTING TRIANGLE" #x25B6)
- ("WHITE RIGHT-POINTING TRIANGLE" #x25B7)
- ("BLACK RIGHT-POINTING SMALL TRIANGLE" #x25B8)
- ("WHITE RIGHT-POINTING SMALL TRIANGLE" #x25B9)
- ("BLACK RIGHT-POINTING POINTER" #x25BA)
- ("WHITE RIGHT-POINTING POINTER" #x25BB)
- ("BLACK DOWN-POINTING TRIANGLE" #x25BC)
- ("WHITE DOWN-POINTING TRIANGLE" #x25BD)
- ("BLACK DOWN-POINTING SMALL TRIANGLE" #x25BE)
- ("WHITE DOWN-POINTING SMALL TRIANGLE" #x25BF)
- ("BLACK LEFT-POINTING TRIANGLE" #x25C0)
- ("WHITE LEFT-POINTING TRIANGLE" #x25C1)
- ("BLACK LEFT-POINTING SMALL TRIANGLE" #x25C2)
- ("WHITE LEFT-POINTING SMALL TRIANGLE" #x25C3)
- ("BLACK LEFT-POINTING POINTER" #x25C4)
- ("WHITE LEFT-POINTING POINTER" #x25C5)
- ("BLACK DIAMOND" #x25C6)
- ("WHITE DIAMOND" #x25C7)
- ("WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND" #x25C8)
- ("FISHEYE" #x25C9)
- ("LOZENGE" #x25CA)
- ("WHITE CIRCLE" #x25CB)
- ("DOTTED CIRCLE" #x25CC)
- ("CIRCLE WITH VERTICAL FILL" #x25CD)
- ("BULLSEYE" #x25CE)
- ("BLACK CIRCLE" #x25CF)
- ("CIRCLE WITH LEFT HALF BLACK" #x25D0)
- ("CIRCLE WITH RIGHT HALF BLACK" #x25D1)
- ("CIRCLE WITH LOWER HALF BLACK" #x25D2)
- ("CIRCLE WITH UPPER HALF BLACK" #x25D3)
- ("CIRCLE WITH UPPER RIGHT QUADRANT BLACK" #x25D4)
- ("CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK" #x25D5)
- ("LEFT HALF BLACK CIRCLE" #x25D6)
- ("RIGHT HALF BLACK CIRCLE" #x25D7)
- ("INVERSE BULLET" #x25D8)
- ("INVERSE WHITE CIRCLE" #x25D9)
- ("UPPER HALF INVERSE WHITE CIRCLE" #x25DA)
- ("LOWER HALF INVERSE WHITE CIRCLE" #x25DB)
- ("UPPER LEFT QUADRANT CIRCULAR ARC" #x25DC)
- ("UPPER RIGHT QUADRANT CIRCULAR ARC" #x25DD)
- ("LOWER RIGHT QUADRANT CIRCULAR ARC" #x25DE)
- ("LOWER LEFT QUADRANT CIRCULAR ARC" #x25DF)
- ("UPPER HALF CIRCLE" #x25E0)
- ("LOWER HALF CIRCLE" #x25E1)
- ("BLACK LOWER RIGHT TRIANGLE" #x25E2)
- ("BLACK LOWER LEFT TRIANGLE" #x25E3)
- ("BLACK UPPER LEFT TRIANGLE" #x25E4)
- ("BLACK UPPER RIGHT TRIANGLE" #x25E5)
- ("WHITE BULLET" #x25E6)
- ("SQUARE WITH LEFT HALF BLACK" #x25E7)
- ("SQUARE WITH RIGHT HALF BLACK" #x25E8)
- ("SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK" #x25E9)
- ("SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK" #x25EA)
- ("WHITE SQUARE WITH VERTICAL BISECTING LINE" #x25EB)
- ("WHITE UP-POINTING TRIANGLE WITH DOT" #x25EC)
- ("UP-POINTING TRIANGLE WITH LEFT HALF BLACK" #x25ED)
- ("UP-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x25EE)
- ("LARGE CIRCLE" #x25EF)
- ("WHITE SQUARE WITH UPPER LEFT QUADRANT" #x25F0)
- ("WHITE SQUARE WITH LOWER LEFT QUADRANT" #x25F1)
- ("WHITE SQUARE WITH LOWER RIGHT QUADRANT" #x25F2)
- ("WHITE SQUARE WITH UPPER RIGHT QUADRANT" #x25F3)
- ("WHITE CIRCLE WITH UPPER LEFT QUADRANT" #x25F4)
- ("WHITE CIRCLE WITH LOWER LEFT QUADRANT" #x25F5)
- ("WHITE CIRCLE WITH LOWER RIGHT QUADRANT" #x25F6)
- ("WHITE CIRCLE WITH UPPER RIGHT QUADRANT" #x25F7)
- ("UPPER LEFT TRIANGLE" #x25F8)
- ("UPPER RIGHT TRIANGLE" #x25F9)
- ("LOWER LEFT TRIANGLE" #x25FA)
- ("WHITE MEDIUM SQUARE" #x25FB)
- ("BLACK MEDIUM SQUARE" #x25FC)
- ("WHITE MEDIUM SMALL SQUARE" #x25FD)
- ("BLACK MEDIUM SMALL SQUARE" #x25FE)
- ("LOWER RIGHT TRIANGLE" #x25FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'miscellaneous-symbols
- '(("BLACK SUN WITH RAYS" #x2600)
- ("CLOUD" #x2601)
- ("UMBRELLA" #x2602)
- ("SNOWMAN" #x2603)
- ("COMET" #x2604)
- ("BLACK STAR" #x2605)
- ("WHITE STAR" #x2606)
- ("LIGHTNING" #x2607)
- ("THUNDERSTORM" #x2608)
- ("SUN" #x2609)
- ("ASCENDING NODE" #x260A)
- ("DESCENDING NODE" #x260B)
- ("CONJUNCTION" #x260C)
- ("OPPOSITION" #x260D)
- ("BLACK TELEPHONE" #x260E)
- ("WHITE TELEPHONE" #x260F)
- ("BALLOT BOX" #x2610)
- ("BALLOT BOX WITH CHECK" #x2611)
- ("BALLOT BOX WITH X" #x2612)
- ("SALTIRE" #x2613)
- ("WHITE SHOGI PIECE" #x2616)
- ("BLACK SHOGI PIECE" #x2617)
- ("REVERSED ROTATED FLORAL HEART BULLET" #x2619)
- ("BLACK LEFT POINTING INDEX" #x261A)
- ("BLACK RIGHT POINTING INDEX" #x261B)
- ("WHITE LEFT POINTING INDEX" #x261C)
- ("WHITE UP POINTING INDEX" #x261D)
- ("WHITE RIGHT POINTING INDEX" #x261E)
- ("WHITE DOWN POINTING INDEX" #x261F)
- ("SKULL AND CROSSBONES" #x2620)
- ("CAUTION SIGN" #x2621)
- ("RADIOACTIVE SIGN" #x2622)
- ("BIOHAZARD SIGN" #x2623)
- ("CADUCEUS" #x2624)
- ("ANKH" #x2625)
- ("ORTHODOX CROSS" #x2626)
- ("CHI RHO" #x2627)
- ("CROSS OF LORRAINE" #x2628)
- ("CROSS OF JERUSALEM" #x2629)
- ("STAR AND CRESCENT" #x262A)
- ("FARSI SYMBOL" #x262B)
- ("ADI SHAKTI" #x262C)
- ("HAMMER AND SICKLE" #x262D)
- ("PEACE SYMBOL" #x262E)
- ("YIN YANG" #x262F)
- ("TRIGRAM FOR HEAVEN" #x2630)
- ("TRIGRAM FOR LAKE" #x2631)
- ("TRIGRAM FOR FIRE" #x2632)
- ("TRIGRAM FOR THUNDER" #x2633)
- ("TRIGRAM FOR WIND" #x2634)
- ("TRIGRAM FOR WATER" #x2635)
- ("TRIGRAM FOR MOUNTAIN" #x2636)
- ("TRIGRAM FOR EARTH" #x2637)
- ("WHEEL OF DHARMA" #x2638)
- ("WHITE FROWNING FACE" #x2639)
- ("WHITE SMILING FACE" #x263A)
- ("BLACK SMILING FACE" #x263B)
- ("WHITE SUN WITH RAYS" #x263C)
- ("FIRST QUARTER MOON" #x263D)
- ("LAST QUARTER MOON" #x263E)
- ("MERCURY" #x263F)
- ("FEMALE SIGN" #x2640)
- ("EARTH" #x2641)
- ("MALE SIGN" #x2642)
- ("JUPITER" #x2643)
- ("SATURN" #x2644)
- ("URANUS" #x2645)
- ("NEPTUNE" #x2646)
- ("PLUTO" #x2647)
- ("ARIES" #x2648)
- ("TAURUS" #x2649)
- ("GEMINI" #x264A)
- ("CANCER" #x264B)
- ("LEO" #x264C)
- ("VIRGO" #x264D)
- ("LIBRA" #x264E)
- ("SCORPIUS" #x264F)
- ("SAGITTARIUS" #x2650)
- ("CAPRICORN" #x2651)
- ("AQUARIUS" #x2652)
- ("PISCES" #x2653)
- ("WHITE CHESS KING" #x2654)
- ("WHITE CHESS QUEEN" #x2655)
- ("WHITE CHESS ROOK" #x2656)
- ("WHITE CHESS BISHOP" #x2657)
- ("WHITE CHESS KNIGHT" #x2658)
- ("WHITE CHESS PAWN" #x2659)
- ("BLACK CHESS KING" #x265A)
- ("BLACK CHESS QUEEN" #x265B)
- ("BLACK CHESS ROOK" #x265C)
- ("BLACK CHESS BISHOP" #x265D)
- ("BLACK CHESS KNIGHT" #x265E)
- ("BLACK CHESS PAWN" #x265F)
- ("BLACK SPADE SUIT" #x2660)
- ("WHITE HEART SUIT" #x2661)
- ("WHITE DIAMOND SUIT" #x2662)
- ("BLACK CLUB SUIT" #x2663)
- ("WHITE SPADE SUIT" #x2664)
- ("BLACK HEART SUIT" #x2665)
- ("BLACK DIAMOND SUIT" #x2666)
- ("WHITE CLUB SUIT" #x2667)
- ("HOT SPRINGS" #x2668)
- ("QUARTER NOTE" #x2669)
- ("EIGHTH NOTE" #x266A)
- ("BEAMED EIGHTH NOTES" #x266B)
- ("BEAMED SIXTEENTH NOTES" #x266C)
- ("MUSIC FLAT SIGN" #x266D)
- ("MUSIC NATURAL SIGN" #x266E)
- ("MUSIC SHARP SIGN" #x266F)
- ("WEST SYRIAC CROSS" #x2670)
- ("EAST SYRIAC CROSS" #x2671)
- ("UNIVERSAL RECYCLING SYMBOL" #x2672)
- ("RECYCLING SYMBOL FOR TYPE-1 PLASTICS" #x2673)
- ("RECYCLING SYMBOL FOR TYPE-2 PLASTICS" #x2674)
- ("RECYCLING SYMBOL FOR TYPE-3 PLASTICS" #x2675)
- ("RECYCLING SYMBOL FOR TYPE-4 PLASTICS" #x2676)
- ("RECYCLING SYMBOL FOR TYPE-5 PLASTICS" #x2677)
- ("RECYCLING SYMBOL FOR TYPE-6 PLASTICS" #x2678)
- ("RECYCLING SYMBOL FOR TYPE-7 PLASTICS" #x2679)
- ("RECYCLING SYMBOL FOR GENERIC MATERIALS" #x267A)
- ("BLACK UNIVERSAL RECYCLING SYMBOL" #x267B)
- ("RECYCLED PAPER SYMBOL" #x267C)
- ("PARTIALLY-RECYCLED PAPER SYMBOL" #x267D)
- ("DIE FACE-1" #x2680)
- ("DIE FACE-2" #x2681)
- ("DIE FACE-3" #x2682)
- ("DIE FACE-4" #x2683)
- ("DIE FACE-5" #x2684)
- ("DIE FACE-6" #x2685)
- ("WHITE CIRCLE WITH DOT RIGHT" #x2686)
- ("WHITE CIRCLE WITH TWO DOTS" #x2687)
- ("BLACK CIRCLE WITH WHITE DOT RIGHT" #x2688)
- ("BLACK CIRCLE WITH TWO WHITE DOTS" #x2689)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'dingbats
- '(("UPPER BLADE SCISSORS" #x2701)
- ("BLACK SCISSORS" #x2702)
- ("LOWER BLADE SCISSORS" #x2703)
- ("WHITE SCISSORS" #x2704)
- ("TELEPHONE LOCATION SIGN" #x2706)
- ("TAPE DRIVE" #x2707)
- ("AIRPLANE" #x2708)
- ("ENVELOPE" #x2709)
- ("VICTORY HAND" #x270C)
- ("WRITING HAND" #x270D)
- ("LOWER RIGHT PENCIL" #x270E)
- ("PENCIL" #x270F)
- ("UPPER RIGHT PENCIL" #x2710)
- ("WHITE NIB" #x2711)
- ("BLACK NIB" #x2712)
- ("CHECK MARK" #x2713)
- ("HEAVY CHECK MARK" #x2714)
- ("MULTIPLICATION X" #x2715)
- ("HEAVY MULTIPLICATION X" #x2716)
- ("BALLOT X" #x2717)
- ("HEAVY BALLOT X" #x2718)
- ("OUTLINED GREEK CROSS" #x2719)
- ("HEAVY GREEK CROSS" #x271A)
- ("OPEN CENTRE CROSS" #x271B)
- ("HEAVY OPEN CENTRE CROSS" #x271C)
- ("LATIN CROSS" #x271D)
- ("SHADOWED WHITE LATIN CROSS" #x271E)
- ("OUTLINED LATIN CROSS" #x271F)
- ("MALTESE CROSS" #x2720)
- ("STAR OF DAVID" #x2721)
- ("FOUR TEARDROP-SPOKED ASTERISK" #x2722)
- ("FOUR BALLOON-SPOKED ASTERISK" #x2723)
- ("HEAVY FOUR BALLOON-SPOKED ASTERISK" #x2724)
- ("FOUR CLUB-SPOKED ASTERISK" #x2725)
- ("BLACK FOUR POINTED STAR" #x2726)
- ("WHITE FOUR POINTED STAR" #x2727)
- ("STRESS OUTLINED WHITE STAR" #x2729)
- ("CIRCLED WHITE STAR" #x272A)
- ("OPEN CENTRE BLACK STAR" #x272B)
- ("BLACK CENTRE WHITE STAR" #x272C)
- ("OUTLINED BLACK STAR" #x272D)
- ("HEAVY OUTLINED BLACK STAR" #x272E)
- ("PINWHEEL STAR" #x272F)
- ("SHADOWED WHITE STAR" #x2730)
- ("HEAVY ASTERISK" #x2731)
- ("OPEN CENTRE ASTERISK" #x2732)
- ("EIGHT SPOKED ASTERISK" #x2733)
- ("EIGHT POINTED BLACK STAR" #x2734)
- ("EIGHT POINTED PINWHEEL STAR" #x2735)
- ("SIX POINTED BLACK STAR" #x2736)
- ("EIGHT POINTED RECTILINEAR BLACK STAR" #x2737)
- ("HEAVY EIGHT POINTED RECTILINEAR BLACK STAR" #x2738)
- ("TWELVE POINTED BLACK STAR" #x2739)
- ("SIXTEEN POINTED ASTERISK" #x273A)
- ("TEARDROP-SPOKED ASTERISK" #x273B)
- ("OPEN CENTRE TEARDROP-SPOKED ASTERISK" #x273C)
- ("HEAVY TEARDROP-SPOKED ASTERISK" #x273D)
- ("SIX PETALLED BLACK AND WHITE FLORETTE" #x273E)
- ("BLACK FLORETTE" #x273F)
- ("WHITE FLORETTE" #x2740)
- ("EIGHT PETALLED OUTLINED BLACK FLORETTE" #x2741)
- ("CIRCLED OPEN CENTRE EIGHT POINTED STAR" #x2742)
- ("HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK" #x2743)
- ("SNOWFLAKE" #x2744)
- ("TIGHT TRIFOLIATE SNOWFLAKE" #x2745)
- ("HEAVY CHEVRON SNOWFLAKE" #x2746)
- ("SPARKLE" #x2747)
- ("HEAVY SPARKLE" #x2748)
- ("BALLOON-SPOKED ASTERISK" #x2749)
- ("EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274A)
- ("HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274B)
- ("SHADOWED WHITE CIRCLE" #x274D)
- ("LOWER RIGHT DROP-SHADOWED WHITE SQUARE" #x274F)
- ("UPPER RIGHT DROP-SHADOWED WHITE SQUARE" #x2750)
- ("LOWER RIGHT SHADOWED WHITE SQUARE" #x2751)
- ("UPPER RIGHT SHADOWED WHITE SQUARE" #x2752)
- ("BLACK DIAMOND MINUS WHITE X" #x2756)
- ("LIGHT VERTICAL BAR" #x2758)
- ("MEDIUM VERTICAL BAR" #x2759)
- ("HEAVY VERTICAL BAR" #x275A)
- ("HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275B)
- ("HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT" #x275C)
- ("HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275D)
- ("HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" #x275E)
- ("CURVED STEM PARAGRAPH SIGN ORNAMENT" #x2761)
- ("HEAVY EXCLAMATION MARK ORNAMENT" #x2762)
- ("HEAVY HEART EXCLAMATION MARK ORNAMENT" #x2763)
- ("HEAVY BLACK HEART" #x2764)
- ("ROTATED HEAVY BLACK HEART BULLET" #x2765)
- ("FLORAL HEART" #x2766)
- ("ROTATED FLORAL HEART BULLET" #x2767)
- ("MEDIUM LEFT PARENTHESIS ORNAMENT" #x2768)
- ("MEDIUM RIGHT PARENTHESIS ORNAMENT" #x2769)
- ("MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT" #x276A)
- ("MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT" #x276B)
- ("MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT" #x276C)
- ("MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x276D)
- ("HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276E)
- ("HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276F)
- ("HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT" #x2770)
- ("HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x2771)
- ("LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT" #x2772)
- ("LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT" #x2773)
- ("MEDIUM LEFT CURLY BRACKET ORNAMENT" #x2774)
- ("MEDIUM RIGHT CURLY BRACKET ORNAMENT" #x2775)
- ("DINGBAT NEGATIVE CIRCLED DIGIT ONE" #x2776)
- ("DINGBAT NEGATIVE CIRCLED DIGIT TWO" #x2777)
- ("DINGBAT NEGATIVE CIRCLED DIGIT THREE" #x2778)
- ("DINGBAT NEGATIVE CIRCLED DIGIT FOUR" #x2779)
- ("DINGBAT NEGATIVE CIRCLED DIGIT FIVE" #x277A)
- ("DINGBAT NEGATIVE CIRCLED DIGIT SIX" #x277B)
- ("DINGBAT NEGATIVE CIRCLED DIGIT SEVEN" #x277C)
- ("DINGBAT NEGATIVE CIRCLED DIGIT EIGHT" #x277D)
- ("DINGBAT NEGATIVE CIRCLED DIGIT NINE" #x277E)
- ("DINGBAT NEGATIVE CIRCLED NUMBER TEN" #x277F)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT ONE" #x2780)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT TWO" #x2781)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT THREE" #x2782)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT FOUR" #x2783)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT FIVE" #x2784)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT SIX" #x2785)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN" #x2786)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT" #x2787)
- ("DINGBAT CIRCLED SANS-SERIF DIGIT NINE" #x2788)
- ("DINGBAT CIRCLED SANS-SERIF NUMBER TEN" #x2789)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE" #x278A)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO" #x278B)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE" #x278C)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR" #x278D)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE" #x278E)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX" #x278F)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN" #x2790)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT" #x2791)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE" #x2792)
- ("DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN" #x2793)
- ("HEAVY WIDE-HEADED RIGHTWARDS ARROW" #x2794)
- ("HEAVY SOUTH EAST ARROW" #x2798)
- ("HEAVY RIGHTWARDS ARROW" #x2799)
- ("HEAVY NORTH EAST ARROW" #x279A)
- ("DRAFTING POINT RIGHTWARDS ARROW" #x279B)
- ("HEAVY ROUND-TIPPED RIGHTWARDS ARROW" #x279C)
- ("TRIANGLE-HEADED RIGHTWARDS ARROW" #x279D)
- ("HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW" #x279E)
- ("DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x279F)
- ("HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x27A0)
- ("BLACK RIGHTWARDS ARROW" #x27A1)
- ("THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD" #x27A2)
- ("THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD" #x27A3)
- ("BLACK RIGHTWARDS ARROWHEAD" #x27A4)
- ("HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW" #x27A5)
- ("HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW" #x27A6)
- ("SQUAT BLACK RIGHTWARDS ARROW" #x27A7)
- ("HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW" #x27A8)
- ("RIGHT-SHADED WHITE RIGHTWARDS ARROW" #x27A9)
- ("LEFT-SHADED WHITE RIGHTWARDS ARROW" #x27AA)
- ("BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AB)
- ("FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AC)
- ("HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AD)
- ("HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AE)
- ("NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AF)
- ("NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27B1)
- ("CIRCLED HEAVY WHITE RIGHTWARDS ARROW" #x27B2)
- ("WHITE-FEATHERED RIGHTWARDS ARROW" #x27B3)
- ("BLACK-FEATHERED SOUTH EAST ARROW" #x27B4)
- ("BLACK-FEATHERED RIGHTWARDS ARROW" #x27B5)
- ("BLACK-FEATHERED NORTH EAST ARROW" #x27B6)
- ("HEAVY BLACK-FEATHERED SOUTH EAST ARROW" #x27B7)
- ("HEAVY BLACK-FEATHERED RIGHTWARDS ARROW" #x27B8)
- ("HEAVY BLACK-FEATHERED NORTH EAST ARROW" #x27B9)
- ("TEARDROP-BARBED RIGHTWARDS ARROW" #x27BA)
- ("HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW" #x27BB)
- ("WEDGE-TAILED RIGHTWARDS ARROW" #x27BC)
- ("HEAVY WEDGE-TAILED RIGHTWARDS ARROW" #x27BD)
- ("OPEN-OUTLINED RIGHTWARDS ARROW" #x27BE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-a
- '(("WHITE DIAMOND WITH CENTRED DOT" #x27D0)
- ("AND WITH DOT" #x27D1)
- ("ELEMENT OF OPENING UPWARDS" #x27D2)
- ("LOWER RIGHT CORNER WITH DOT" #x27D3)
- ("UPPER LEFT CORNER WITH DOT" #x27D4)
- ("LEFT OUTER JOIN" #x27D5)
- ("RIGHT OUTER JOIN" #x27D6)
- ("FULL OUTER JOIN" #x27D7)
- ("LARGE UP TACK" #x27D8)
- ("LARGE DOWN TACK" #x27D9)
- ("LEFT AND RIGHT DOUBLE TURNSTILE" #x27DA)
- ("LEFT AND RIGHT TACK" #x27DB)
- ("LEFT MULTIMAP" #x27DC)
- ("LONG RIGHT TACK" #x27DD)
- ("LONG LEFT TACK" #x27DE)
- ("UP TACK WITH CIRCLE ABOVE" #x27DF)
- ("LOZENGE DIVIDED BY HORIZONTAL RULE" #x27E0)
- ("WHITE CONCAVE-SIDED DIAMOND" #x27E1)
- ("WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK" #x27E2)
- ("WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK" #x27E3)
- ("WHITE SQUARE WITH LEFTWARDS TICK" #x27E4)
- ("WHITE SQUARE WITH RIGHTWARDS TICK" #x27E5)
- ("MATHEMATICAL LEFT WHITE SQUARE BRACKET" #x27E6)
- ("MATHEMATICAL RIGHT WHITE SQUARE BRACKET" #x27E7)
- ("MATHEMATICAL LEFT ANGLE BRACKET" #x27E8)
- ("MATHEMATICAL RIGHT ANGLE BRACKET" #x27E9)
- ("MATHEMATICAL LEFT DOUBLE ANGLE BRACKET" #x27EA)
- ("MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET" #x27EB)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'supplemental-arrows-a
- '(("UPWARDS QUADRUPLE ARROW" #x27F0)
- ("DOWNWARDS QUADRUPLE ARROW" #x27F1)
- ("ANTICLOCKWISE GAPPED CIRCLE ARROW" #x27F2)
- ("CLOCKWISE GAPPED CIRCLE ARROW" #x27F3)
- ("RIGHT ARROW WITH CIRCLED PLUS" #x27F4)
- ("LONG LEFTWARDS ARROW" #x27F5)
- ("LONG RIGHTWARDS ARROW" #x27F6)
- ("LONG LEFT RIGHT ARROW" #x27F7)
- ("LONG LEFTWARDS DOUBLE ARROW" #x27F8)
- ("LONG RIGHTWARDS DOUBLE ARROW" #x27F9)
- ("LONG LEFT RIGHT DOUBLE ARROW" #x27FA)
- ("LONG LEFTWARDS ARROW FROM BAR" #x27FB)
- ("LONG RIGHTWARDS ARROW FROM BAR" #x27FC)
- ("LONG LEFTWARDS DOUBLE ARROW FROM BAR" #x27FD)
- ("LONG RIGHTWARDS DOUBLE ARROW FROM BAR" #x27FE)
- ("LONG RIGHTWARDS SQUIGGLE ARROW" #x27FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'braille-patterns
- '(("BRAILLE PATTERN BLANK" #x2800)
- ("BRAILLE PATTERN DOTS-1" #x2801)
- ("BRAILLE PATTERN DOTS-2" #x2802)
- ("BRAILLE PATTERN DOTS-12" #x2803)
- ("BRAILLE PATTERN DOTS-3" #x2804)
- ("BRAILLE PATTERN DOTS-13" #x2805)
- ("BRAILLE PATTERN DOTS-23" #x2806)
- ("BRAILLE PATTERN DOTS-123" #x2807)
- ("BRAILLE PATTERN DOTS-4" #x2808)
- ("BRAILLE PATTERN DOTS-14" #x2809)
- ("BRAILLE PATTERN DOTS-24" #x280A)
- ("BRAILLE PATTERN DOTS-124" #x280B)
- ("BRAILLE PATTERN DOTS-34" #x280C)
- ("BRAILLE PATTERN DOTS-134" #x280D)
- ("BRAILLE PATTERN DOTS-234" #x280E)
- ("BRAILLE PATTERN DOTS-1234" #x280F)
- ("BRAILLE PATTERN DOTS-5" #x2810)
- ("BRAILLE PATTERN DOTS-15" #x2811)
- ("BRAILLE PATTERN DOTS-25" #x2812)
- ("BRAILLE PATTERN DOTS-125" #x2813)
- ("BRAILLE PATTERN DOTS-35" #x2814)
- ("BRAILLE PATTERN DOTS-135" #x2815)
- ("BRAILLE PATTERN DOTS-235" #x2816)
- ("BRAILLE PATTERN DOTS-1235" #x2817)
- ("BRAILLE PATTERN DOTS-45" #x2818)
- ("BRAILLE PATTERN DOTS-145" #x2819)
- ("BRAILLE PATTERN DOTS-245" #x281A)
- ("BRAILLE PATTERN DOTS-1245" #x281B)
- ("BRAILLE PATTERN DOTS-345" #x281C)
- ("BRAILLE PATTERN DOTS-1345" #x281D)
- ("BRAILLE PATTERN DOTS-2345" #x281E)
- ("BRAILLE PATTERN DOTS-12345" #x281F)
- ("BRAILLE PATTERN DOTS-6" #x2820)
- ("BRAILLE PATTERN DOTS-16" #x2821)
- ("BRAILLE PATTERN DOTS-26" #x2822)
- ("BRAILLE PATTERN DOTS-126" #x2823)
- ("BRAILLE PATTERN DOTS-36" #x2824)
- ("BRAILLE PATTERN DOTS-136" #x2825)
- ("BRAILLE PATTERN DOTS-236" #x2826)
- ("BRAILLE PATTERN DOTS-1236" #x2827)
- ("BRAILLE PATTERN DOTS-46" #x2828)
- ("BRAILLE PATTERN DOTS-146" #x2829)
- ("BRAILLE PATTERN DOTS-246" #x282A)
- ("BRAILLE PATTERN DOTS-1246" #x282B)
- ("BRAILLE PATTERN DOTS-346" #x282C)
- ("BRAILLE PATTERN DOTS-1346" #x282D)
- ("BRAILLE PATTERN DOTS-2346" #x282E)
- ("BRAILLE PATTERN DOTS-12346" #x282F)
- ("BRAILLE PATTERN DOTS-56" #x2830)
- ("BRAILLE PATTERN DOTS-156" #x2831)
- ("BRAILLE PATTERN DOTS-256" #x2832)
- ("BRAILLE PATTERN DOTS-1256" #x2833)
- ("BRAILLE PATTERN DOTS-356" #x2834)
- ("BRAILLE PATTERN DOTS-1356" #x2835)
- ("BRAILLE PATTERN DOTS-2356" #x2836)
- ("BRAILLE PATTERN DOTS-12356" #x2837)
- ("BRAILLE PATTERN DOTS-456" #x2838)
- ("BRAILLE PATTERN DOTS-1456" #x2839)
- ("BRAILLE PATTERN DOTS-2456" #x283A)
- ("BRAILLE PATTERN DOTS-12456" #x283B)
- ("BRAILLE PATTERN DOTS-3456" #x283C)
- ("BRAILLE PATTERN DOTS-13456" #x283D)
- ("BRAILLE PATTERN DOTS-23456" #x283E)
- ("BRAILLE PATTERN DOTS-123456" #x283F)
- ("BRAILLE PATTERN DOTS-7" #x2840)
- ("BRAILLE PATTERN DOTS-17" #x2841)
- ("BRAILLE PATTERN DOTS-27" #x2842)
- ("BRAILLE PATTERN DOTS-127" #x2843)
- ("BRAILLE PATTERN DOTS-37" #x2844)
- ("BRAILLE PATTERN DOTS-137" #x2845)
- ("BRAILLE PATTERN DOTS-237" #x2846)
- ("BRAILLE PATTERN DOTS-1237" #x2847)
- ("BRAILLE PATTERN DOTS-47" #x2848)
- ("BRAILLE PATTERN DOTS-147" #x2849)
- ("BRAILLE PATTERN DOTS-247" #x284A)
- ("BRAILLE PATTERN DOTS-1247" #x284B)
- ("BRAILLE PATTERN DOTS-347" #x284C)
- ("BRAILLE PATTERN DOTS-1347" #x284D)
- ("BRAILLE PATTERN DOTS-2347" #x284E)
- ("BRAILLE PATTERN DOTS-12347" #x284F)
- ("BRAILLE PATTERN DOTS-57" #x2850)
- ("BRAILLE PATTERN DOTS-157" #x2851)
- ("BRAILLE PATTERN DOTS-257" #x2852)
- ("BRAILLE PATTERN DOTS-1257" #x2853)
- ("BRAILLE PATTERN DOTS-357" #x2854)
- ("BRAILLE PATTERN DOTS-1357" #x2855)
- ("BRAILLE PATTERN DOTS-2357" #x2856)
- ("BRAILLE PATTERN DOTS-12357" #x2857)
- ("BRAILLE PATTERN DOTS-457" #x2858)
- ("BRAILLE PATTERN DOTS-1457" #x2859)
- ("BRAILLE PATTERN DOTS-2457" #x285A)
- ("BRAILLE PATTERN DOTS-12457" #x285B)
- ("BRAILLE PATTERN DOTS-3457" #x285C)
- ("BRAILLE PATTERN DOTS-13457" #x285D)
- ("BRAILLE PATTERN DOTS-23457" #x285E)
- ("BRAILLE PATTERN DOTS-123457" #x285F)
- ("BRAILLE PATTERN DOTS-67" #x2860)
- ("BRAILLE PATTERN DOTS-167" #x2861)
- ("BRAILLE PATTERN DOTS-267" #x2862)
- ("BRAILLE PATTERN DOTS-1267" #x2863)
- ("BRAILLE PATTERN DOTS-367" #x2864)
- ("BRAILLE PATTERN DOTS-1367" #x2865)
- ("BRAILLE PATTERN DOTS-2367" #x2866)
- ("BRAILLE PATTERN DOTS-12367" #x2867)
- ("BRAILLE PATTERN DOTS-467" #x2868)
- ("BRAILLE PATTERN DOTS-1467" #x2869)
- ("BRAILLE PATTERN DOTS-2467" #x286A)
- ("BRAILLE PATTERN DOTS-12467" #x286B)
- ("BRAILLE PATTERN DOTS-3467" #x286C)
- ("BRAILLE PATTERN DOTS-13467" #x286D)
- ("BRAILLE PATTERN DOTS-23467" #x286E)
- ("BRAILLE PATTERN DOTS-123467" #x286F)
- ("BRAILLE PATTERN DOTS-567" #x2870)
- ("BRAILLE PATTERN DOTS-1567" #x2871)
- ("BRAILLE PATTERN DOTS-2567" #x2872)
- ("BRAILLE PATTERN DOTS-12567" #x2873)
- ("BRAILLE PATTERN DOTS-3567" #x2874)
- ("BRAILLE PATTERN DOTS-13567" #x2875)
- ("BRAILLE PATTERN DOTS-23567" #x2876)
- ("BRAILLE PATTERN DOTS-123567" #x2877)
- ("BRAILLE PATTERN DOTS-4567" #x2878)
- ("BRAILLE PATTERN DOTS-14567" #x2879)
- ("BRAILLE PATTERN DOTS-24567" #x287A)
- ("BRAILLE PATTERN DOTS-124567" #x287B)
- ("BRAILLE PATTERN DOTS-34567" #x287C)
- ("BRAILLE PATTERN DOTS-134567" #x287D)
- ("BRAILLE PATTERN DOTS-234567" #x287E)
- ("BRAILLE PATTERN DOTS-1234567" #x287F)
- ("BRAILLE PATTERN DOTS-8" #x2880)
- ("BRAILLE PATTERN DOTS-18" #x2881)
- ("BRAILLE PATTERN DOTS-28" #x2882)
- ("BRAILLE PATTERN DOTS-128" #x2883)
- ("BRAILLE PATTERN DOTS-38" #x2884)
- ("BRAILLE PATTERN DOTS-138" #x2885)
- ("BRAILLE PATTERN DOTS-238" #x2886)
- ("BRAILLE PATTERN DOTS-1238" #x2887)
- ("BRAILLE PATTERN DOTS-48" #x2888)
- ("BRAILLE PATTERN DOTS-148" #x2889)
- ("BRAILLE PATTERN DOTS-248" #x288A)
- ("BRAILLE PATTERN DOTS-1248" #x288B)
- ("BRAILLE PATTERN DOTS-348" #x288C)
- ("BRAILLE PATTERN DOTS-1348" #x288D)
- ("BRAILLE PATTERN DOTS-2348" #x288E)
- ("BRAILLE PATTERN DOTS-12348" #x288F)
- ("BRAILLE PATTERN DOTS-58" #x2890)
- ("BRAILLE PATTERN DOTS-158" #x2891)
- ("BRAILLE PATTERN DOTS-258" #x2892)
- ("BRAILLE PATTERN DOTS-1258" #x2893)
- ("BRAILLE PATTERN DOTS-358" #x2894)
- ("BRAILLE PATTERN DOTS-1358" #x2895)
- ("BRAILLE PATTERN DOTS-2358" #x2896)
- ("BRAILLE PATTERN DOTS-12358" #x2897)
- ("BRAILLE PATTERN DOTS-458" #x2898)
- ("BRAILLE PATTERN DOTS-1458" #x2899)
- ("BRAILLE PATTERN DOTS-2458" #x289A)
- ("BRAILLE PATTERN DOTS-12458" #x289B)
- ("BRAILLE PATTERN DOTS-3458" #x289C)
- ("BRAILLE PATTERN DOTS-13458" #x289D)
- ("BRAILLE PATTERN DOTS-23458" #x289E)
- ("BRAILLE PATTERN DOTS-123458" #x289F)
- ("BRAILLE PATTERN DOTS-68" #x28A0)
- ("BRAILLE PATTERN DOTS-168" #x28A1)
- ("BRAILLE PATTERN DOTS-268" #x28A2)
- ("BRAILLE PATTERN DOTS-1268" #x28A3)
- ("BRAILLE PATTERN DOTS-368" #x28A4)
- ("BRAILLE PATTERN DOTS-1368" #x28A5)
- ("BRAILLE PATTERN DOTS-2368" #x28A6)
- ("BRAILLE PATTERN DOTS-12368" #x28A7)
- ("BRAILLE PATTERN DOTS-468" #x28A8)
- ("BRAILLE PATTERN DOTS-1468" #x28A9)
- ("BRAILLE PATTERN DOTS-2468" #x28AA)
- ("BRAILLE PATTERN DOTS-12468" #x28AB)
- ("BRAILLE PATTERN DOTS-3468" #x28AC)
- ("BRAILLE PATTERN DOTS-13468" #x28AD)
- ("BRAILLE PATTERN DOTS-23468" #x28AE)
- ("BRAILLE PATTERN DOTS-123468" #x28AF)
- ("BRAILLE PATTERN DOTS-568" #x28B0)
- ("BRAILLE PATTERN DOTS-1568" #x28B1)
- ("BRAILLE PATTERN DOTS-2568" #x28B2)
- ("BRAILLE PATTERN DOTS-12568" #x28B3)
- ("BRAILLE PATTERN DOTS-3568" #x28B4)
- ("BRAILLE PATTERN DOTS-13568" #x28B5)
- ("BRAILLE PATTERN DOTS-23568" #x28B6)
- ("BRAILLE PATTERN DOTS-123568" #x28B7)
- ("BRAILLE PATTERN DOTS-4568" #x28B8)
- ("BRAILLE PATTERN DOTS-14568" #x28B9)
- ("BRAILLE PATTERN DOTS-24568" #x28BA)
- ("BRAILLE PATTERN DOTS-124568" #x28BB)
- ("BRAILLE PATTERN DOTS-34568" #x28BC)
- ("BRAILLE PATTERN DOTS-134568" #x28BD)
- ("BRAILLE PATTERN DOTS-234568" #x28BE)
- ("BRAILLE PATTERN DOTS-1234568" #x28BF)
- ("BRAILLE PATTERN DOTS-78" #x28C0)
- ("BRAILLE PATTERN DOTS-178" #x28C1)
- ("BRAILLE PATTERN DOTS-278" #x28C2)
- ("BRAILLE PATTERN DOTS-1278" #x28C3)
- ("BRAILLE PATTERN DOTS-378" #x28C4)
- ("BRAILLE PATTERN DOTS-1378" #x28C5)
- ("BRAILLE PATTERN DOTS-2378" #x28C6)
- ("BRAILLE PATTERN DOTS-12378" #x28C7)
- ("BRAILLE PATTERN DOTS-478" #x28C8)
- ("BRAILLE PATTERN DOTS-1478" #x28C9)
- ("BRAILLE PATTERN DOTS-2478" #x28CA)
- ("BRAILLE PATTERN DOTS-12478" #x28CB)
- ("BRAILLE PATTERN DOTS-3478" #x28CC)
- ("BRAILLE PATTERN DOTS-13478" #x28CD)
- ("BRAILLE PATTERN DOTS-23478" #x28CE)
- ("BRAILLE PATTERN DOTS-123478" #x28CF)
- ("BRAILLE PATTERN DOTS-578" #x28D0)
- ("BRAILLE PATTERN DOTS-1578" #x28D1)
- ("BRAILLE PATTERN DOTS-2578" #x28D2)
- ("BRAILLE PATTERN DOTS-12578" #x28D3)
- ("BRAILLE PATTERN DOTS-3578" #x28D4)
- ("BRAILLE PATTERN DOTS-13578" #x28D5)
- ("BRAILLE PATTERN DOTS-23578" #x28D6)
- ("BRAILLE PATTERN DOTS-123578" #x28D7)
- ("BRAILLE PATTERN DOTS-4578" #x28D8)
- ("BRAILLE PATTERN DOTS-14578" #x28D9)
- ("BRAILLE PATTERN DOTS-24578" #x28DA)
- ("BRAILLE PATTERN DOTS-124578" #x28DB)
- ("BRAILLE PATTERN DOTS-34578" #x28DC)
- ("BRAILLE PATTERN DOTS-134578" #x28DD)
- ("BRAILLE PATTERN DOTS-234578" #x28DE)
- ("BRAILLE PATTERN DOTS-1234578" #x28DF)
- ("BRAILLE PATTERN DOTS-678" #x28E0)
- ("BRAILLE PATTERN DOTS-1678" #x28E1)
- ("BRAILLE PATTERN DOTS-2678" #x28E2)
- ("BRAILLE PATTERN DOTS-12678" #x28E3)
- ("BRAILLE PATTERN DOTS-3678" #x28E4)
- ("BRAILLE PATTERN DOTS-13678" #x28E5)
- ("BRAILLE PATTERN DOTS-23678" #x28E6)
- ("BRAILLE PATTERN DOTS-123678" #x28E7)
- ("BRAILLE PATTERN DOTS-4678" #x28E8)
- ("BRAILLE PATTERN DOTS-14678" #x28E9)
- ("BRAILLE PATTERN DOTS-24678" #x28EA)
- ("BRAILLE PATTERN DOTS-124678" #x28EB)
- ("BRAILLE PATTERN DOTS-34678" #x28EC)
- ("BRAILLE PATTERN DOTS-134678" #x28ED)
- ("BRAILLE PATTERN DOTS-234678" #x28EE)
- ("BRAILLE PATTERN DOTS-1234678" #x28EF)
- ("BRAILLE PATTERN DOTS-5678" #x28F0)
- ("BRAILLE PATTERN DOTS-15678" #x28F1)
- ("BRAILLE PATTERN DOTS-25678" #x28F2)
- ("BRAILLE PATTERN DOTS-125678" #x28F3)
- ("BRAILLE PATTERN DOTS-35678" #x28F4)
- ("BRAILLE PATTERN DOTS-135678" #x28F5)
- ("BRAILLE PATTERN DOTS-235678" #x28F6)
- ("BRAILLE PATTERN DOTS-1235678" #x28F7)
- ("BRAILLE PATTERN DOTS-45678" #x28F8)
- ("BRAILLE PATTERN DOTS-145678" #x28F9)
- ("BRAILLE PATTERN DOTS-245678" #x28FA)
- ("BRAILLE PATTERN DOTS-1245678" #x28FB)
- ("BRAILLE PATTERN DOTS-345678" #x28FC)
- ("BRAILLE PATTERN DOTS-1345678" #x28FD)
- ("BRAILLE PATTERN DOTS-2345678" #x28FE)
- ("BRAILLE PATTERN DOTS-12345678" #x28FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'supplemental-arrows-b
- '(("RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE" #x2900)
- ("RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE" #x2901)
- ("LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2902)
- ("RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2903)
- ("LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE" #x2904)
- ("RIGHTWARDS TWO-HEADED ARROW FROM BAR" #x2905)
- ("LEFTWARDS DOUBLE ARROW FROM BAR" #x2906)
- ("RIGHTWARDS DOUBLE ARROW FROM BAR" #x2907)
- ("DOWNWARDS ARROW WITH HORIZONTAL STROKE" #x2908)
- ("UPWARDS ARROW WITH HORIZONTAL STROKE" #x2909)
- ("UPWARDS TRIPLE ARROW" #x290A)
- ("DOWNWARDS TRIPLE ARROW" #x290B)
- ("LEFTWARDS DOUBLE DASH ARROW" #x290C)
- ("RIGHTWARDS DOUBLE DASH ARROW" #x290D)
- ("LEFTWARDS TRIPLE DASH ARROW" #x290E)
- ("RIGHTWARDS TRIPLE DASH ARROW" #x290F)
- ("RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW" #x2910)
- ("RIGHTWARDS ARROW WITH DOTTED STEM" #x2911)
- ("UPWARDS ARROW TO BAR" #x2912)
- ("DOWNWARDS ARROW TO BAR" #x2913)
- ("RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE" #x2914)
- ("RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2915)
- ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL" #x2916)
- ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE" #x2917)
- ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2918)
- ("LEFTWARDS ARROW-TAIL" #x2919)
- ("RIGHTWARDS ARROW-TAIL" #x291A)
- ("LEFTWARDS DOUBLE ARROW-TAIL" #x291B)
- ("RIGHTWARDS DOUBLE ARROW-TAIL" #x291C)
- ("LEFTWARDS ARROW TO BLACK DIAMOND" #x291D)
- ("RIGHTWARDS ARROW TO BLACK DIAMOND" #x291E)
- ("LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x291F)
- ("RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x2920)
- ("NORTH WEST AND SOUTH EAST ARROW" #x2921)
- ("NORTH EAST AND SOUTH WEST ARROW" #x2922)
- ("NORTH WEST ARROW WITH HOOK" #x2923)
- ("NORTH EAST ARROW WITH HOOK" #x2924)
- ("SOUTH EAST ARROW WITH HOOK" #x2925)
- ("SOUTH WEST ARROW WITH HOOK" #x2926)
- ("NORTH WEST ARROW AND NORTH EAST ARROW" #x2927)
- ("NORTH EAST ARROW AND SOUTH EAST ARROW" #x2928)
- ("SOUTH EAST ARROW AND SOUTH WEST ARROW" #x2929)
- ("SOUTH WEST ARROW AND NORTH WEST ARROW" #x292A)
- ("RISING DIAGONAL CROSSING FALLING DIAGONAL" #x292B)
- ("FALLING DIAGONAL CROSSING RISING DIAGONAL" #x292C)
- ("SOUTH EAST ARROW CROSSING NORTH EAST ARROW" #x292D)
- ("NORTH EAST ARROW CROSSING SOUTH EAST ARROW" #x292E)
- ("FALLING DIAGONAL CROSSING NORTH EAST ARROW" #x292F)
- ("RISING DIAGONAL CROSSING SOUTH EAST ARROW" #x2930)
- ("NORTH EAST ARROW CROSSING NORTH WEST ARROW" #x2931)
- ("NORTH WEST ARROW CROSSING NORTH EAST ARROW" #x2932)
- ("WAVE ARROW POINTING DIRECTLY RIGHT" #x2933)
- ("ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS" #x2934)
- ("ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS" #x2935)
- ("ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS" #x2936)
- ("ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS" #x2937)
- ("RIGHT-SIDE ARC CLOCKWISE ARROW" #x2938)
- ("LEFT-SIDE ARC ANTICLOCKWISE ARROW" #x2939)
- ("TOP ARC ANTICLOCKWISE ARROW" #x293A)
- ("BOTTOM ARC ANTICLOCKWISE ARROW" #x293B)
- ("TOP ARC CLOCKWISE ARROW WITH MINUS" #x293C)
- ("TOP ARC ANTICLOCKWISE ARROW WITH PLUS" #x293D)
- ("LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW" #x293E)
- ("LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW" #x293F)
- ("ANTICLOCKWISE CLOSED CIRCLE ARROW" #x2940)
- ("CLOCKWISE CLOSED CIRCLE ARROW" #x2941)
- ("RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW" #x2942)
- ("LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW" #x2943)
- ("SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW" #x2944)
- ("RIGHTWARDS ARROW WITH PLUS BELOW" #x2945)
- ("LEFTWARDS ARROW WITH PLUS BELOW" #x2946)
- ("RIGHTWARDS ARROW THROUGH X" #x2947)
- ("LEFT RIGHT ARROW THROUGH SMALL CIRCLE" #x2948)
- ("UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE" #x2949)
- ("LEFT BARB UP RIGHT BARB DOWN HARPOON" #x294A)
- ("LEFT BARB DOWN RIGHT BARB UP HARPOON" #x294B)
- ("UP BARB RIGHT DOWN BARB LEFT HARPOON" #x294C)
- ("UP BARB LEFT DOWN BARB RIGHT HARPOON" #x294D)
- ("LEFT BARB UP RIGHT BARB UP HARPOON" #x294E)
- ("UP BARB RIGHT DOWN BARB RIGHT HARPOON" #x294F)
- ("LEFT BARB DOWN RIGHT BARB DOWN HARPOON" #x2950)
- ("UP BARB LEFT DOWN BARB LEFT HARPOON" #x2951)
- ("LEFTWARDS HARPOON WITH BARB UP TO BAR" #x2952)
- ("RIGHTWARDS HARPOON WITH BARB UP TO BAR" #x2953)
- ("UPWARDS HARPOON WITH BARB RIGHT TO BAR" #x2954)
- ("DOWNWARDS HARPOON WITH BARB RIGHT TO BAR" #x2955)
- ("LEFTWARDS HARPOON WITH BARB DOWN TO BAR" #x2956)
- ("RIGHTWARDS HARPOON WITH BARB DOWN TO BAR" #x2957)
- ("UPWARDS HARPOON WITH BARB LEFT TO BAR" #x2958)
- ("DOWNWARDS HARPOON WITH BARB LEFT TO BAR" #x2959)
- ("LEFTWARDS HARPOON WITH BARB UP FROM BAR" #x295A)
- ("RIGHTWARDS HARPOON WITH BARB UP FROM BAR" #x295B)
- ("UPWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295C)
- ("DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295D)
- ("LEFTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295E)
- ("RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295F)
- ("UPWARDS HARPOON WITH BARB LEFT FROM BAR" #x2960)
- ("DOWNWARDS HARPOON WITH BARB LEFT FROM BAR" #x2961)
- ("LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2962)
- ("UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x2963)
- ("RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2964)
- ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x2965)
- ("LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP" #x2966)
- ("LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2967)
- ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP" #x2968)
- ("RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2969)
- ("LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296A)
- ("LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296B)
- ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296C)
- ("RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296D)
- ("UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x296E)
- ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x296F)
- ("RIGHT DOUBLE ARROW WITH ROUNDED HEAD" #x2970)
- ("EQUALS SIGN ABOVE RIGHTWARDS ARROW" #x2971)
- ("TILDE OPERATOR ABOVE RIGHTWARDS ARROW" #x2972)
- ("LEFTWARDS ARROW ABOVE TILDE OPERATOR" #x2973)
- ("RIGHTWARDS ARROW ABOVE TILDE OPERATOR" #x2974)
- ("RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO" #x2975)
- ("LESS-THAN ABOVE LEFTWARDS ARROW" #x2976)
- ("LEFTWARDS ARROW THROUGH LESS-THAN" #x2977)
- ("GREATER-THAN ABOVE RIGHTWARDS ARROW" #x2978)
- ("SUBSET ABOVE RIGHTWARDS ARROW" #x2979)
- ("LEFTWARDS ARROW THROUGH SUBSET" #x297A)
- ("SUPERSET ABOVE LEFTWARDS ARROW" #x297B)
- ("LEFT FISH TAIL" #x297C)
- ("RIGHT FISH TAIL" #x297D)
- ("UP FISH TAIL" #x297E)
- ("DOWN FISH TAIL" #x297F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-b
- '(("TRIPLE VERTICAL BAR DELIMITER" #x2980)
- ("Z NOTATION SPOT" #x2981)
- ("Z NOTATION TYPE COLON" #x2982)
- ("LEFT WHITE CURLY BRACKET" #x2983)
- ("RIGHT WHITE CURLY BRACKET" #x2984)
- ("LEFT WHITE PARENTHESIS" #x2985)
- ("RIGHT WHITE PARENTHESIS" #x2986)
- ("Z NOTATION LEFT IMAGE BRACKET" #x2987)
- ("Z NOTATION RIGHT IMAGE BRACKET" #x2988)
- ("Z NOTATION LEFT BINDING BRACKET" #x2989)
- ("Z NOTATION RIGHT BINDING BRACKET" #x298A)
- ("LEFT SQUARE BRACKET WITH UNDERBAR" #x298B)
- ("RIGHT SQUARE BRACKET WITH UNDERBAR" #x298C)
- ("LEFT SQUARE BRACKET WITH TICK IN TOP CORNER" #x298D)
- ("RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298E)
- ("LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298F)
- ("RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER" #x2990)
- ("LEFT ANGLE BRACKET WITH DOT" #x2991)
- ("RIGHT ANGLE BRACKET WITH DOT" #x2992)
- ("LEFT ARC LESS-THAN BRACKET" #x2993)
- ("RIGHT ARC GREATER-THAN BRACKET" #x2994)
- ("DOUBLE LEFT ARC GREATER-THAN BRACKET" #x2995)
- ("DOUBLE RIGHT ARC LESS-THAN BRACKET" #x2996)
- ("LEFT BLACK TORTOISE SHELL BRACKET" #x2997)
- ("RIGHT BLACK TORTOISE SHELL BRACKET" #x2998)
- ("DOTTED FENCE" #x2999)
- ("VERTICAL ZIGZAG LINE" #x299A)
- ("MEASURED ANGLE OPENING LEFT" #x299B)
- ("RIGHT ANGLE VARIANT WITH SQUARE" #x299C)
- ("MEASURED RIGHT ANGLE WITH DOT" #x299D)
- ("ANGLE WITH S INSIDE" #x299E)
- ("ACUTE ANGLE" #x299F)
- ("SPHERICAL ANGLE OPENING LEFT" #x29A0)
- ("SPHERICAL ANGLE OPENING UP" #x29A1)
- ("TURNED ANGLE" #x29A2)
- ("REVERSED ANGLE" #x29A3)
- ("ANGLE WITH UNDERBAR" #x29A4)
- ("REVERSED ANGLE WITH UNDERBAR" #x29A5)
- ("OBLIQUE ANGLE OPENING UP" #x29A6)
- ("OBLIQUE ANGLE OPENING DOWN" #x29A7)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT" #x29A8)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT" #x29A9)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT" #x29AA)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT" #x29AB)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP" #x29AC)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP" #x29AD)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN" #x29AE)
- ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN" #x29AF)
- ("REVERSED EMPTY SET" #x29B0)
- ("EMPTY SET WITH OVERBAR" #x29B1)
- ("EMPTY SET WITH SMALL CIRCLE ABOVE" #x29B2)
- ("EMPTY SET WITH RIGHT ARROW ABOVE" #x29B3)
- ("EMPTY SET WITH LEFT ARROW ABOVE" #x29B4)
- ("CIRCLE WITH HORIZONTAL BAR" #x29B5)
- ("CIRCLED VERTICAL BAR" #x29B6)
- ("CIRCLED PARALLEL" #x29B7)
- ("CIRCLED REVERSE SOLIDUS" #x29B8)
- ("CIRCLED PERPENDICULAR" #x29B9)
- ("CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR" #x29BA)
- ("CIRCLE WITH SUPERIMPOSED X" #x29BB)
- ("CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN" #x29BC)
- ("UP ARROW THROUGH CIRCLE" #x29BD)
- ("CIRCLED WHITE BULLET" #x29BE)
- ("CIRCLED BULLET" #x29BF)
- ("CIRCLED LESS-THAN" #x29C0)
- ("CIRCLED GREATER-THAN" #x29C1)
- ("CIRCLE WITH SMALL CIRCLE TO THE RIGHT" #x29C2)
- ("CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT" #x29C3)
- ("SQUARED RISING DIAGONAL SLASH" #x29C4)
- ("SQUARED FALLING DIAGONAL SLASH" #x29C5)
- ("SQUARED ASTERISK" #x29C6)
- ("SQUARED SMALL CIRCLE" #x29C7)
- ("SQUARED SQUARE" #x29C8)
- ("TWO JOINED SQUARES" #x29C9)
- ("TRIANGLE WITH DOT ABOVE" #x29CA)
- ("TRIANGLE WITH UNDERBAR" #x29CB)
- ("S IN TRIANGLE" #x29CC)
- ("TRIANGLE WITH SERIFS AT BOTTOM" #x29CD)
- ("RIGHT TRIANGLE ABOVE LEFT TRIANGLE" #x29CE)
- ("LEFT TRIANGLE BESIDE VERTICAL BAR" #x29CF)
- ("VERTICAL BAR BESIDE RIGHT TRIANGLE" #x29D0)
- ("BOWTIE WITH LEFT HALF BLACK" #x29D1)
- ("BOWTIE WITH RIGHT HALF BLACK" #x29D2)
- ("BLACK BOWTIE" #x29D3)
- ("TIMES WITH LEFT HALF BLACK" #x29D4)
- ("TIMES WITH RIGHT HALF BLACK" #x29D5)
- ("WHITE HOURGLASS" #x29D6)
- ("BLACK HOURGLASS" #x29D7)
- ("LEFT WIGGLY FENCE" #x29D8)
- ("RIGHT WIGGLY FENCE" #x29D9)
- ("LEFT DOUBLE WIGGLY FENCE" #x29DA)
- ("RIGHT DOUBLE WIGGLY FENCE" #x29DB)
- ("INCOMPLETE INFINITY" #x29DC)
- ("TIE OVER INFINITY" #x29DD)
- ("INFINITY NEGATED WITH VERTICAL BAR" #x29DE)
- ("DOUBLE-ENDED MULTIMAP" #x29DF)
- ("SQUARE WITH CONTOURED OUTLINE" #x29E0)
- ("INCREASES AS" #x29E1)
- ("SHUFFLE PRODUCT" #x29E2)
- ("EQUALS SIGN AND SLANTED PARALLEL" #x29E3)
- ("EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE" #x29E4)
- ("IDENTICAL TO AND SLANTED PARALLEL" #x29E5)
- ("GLEICH STARK" #x29E6)
- ("THERMODYNAMIC" #x29E7)
- ("DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK" #x29E8)
- ("DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x29E9)
- ("BLACK DIAMOND WITH DOWN ARROW" #x29EA)
- ("BLACK LOZENGE" #x29EB)
- ("WHITE CIRCLE WITH DOWN ARROW" #x29EC)
- ("BLACK CIRCLE WITH DOWN ARROW" #x29ED)
- ("ERROR-BARRED WHITE SQUARE" #x29EE)
- ("ERROR-BARRED BLACK SQUARE" #x29EF)
- ("ERROR-BARRED WHITE DIAMOND" #x29F0)
- ("ERROR-BARRED BLACK DIAMOND" #x29F1)
- ("ERROR-BARRED WHITE CIRCLE" #x29F2)
- ("ERROR-BARRED BLACK CIRCLE" #x29F3)
- ("RULE-DELAYED" #x29F4)
- ("REVERSE SOLIDUS OPERATOR" #x29F5)
- ("SOLIDUS WITH OVERBAR" #x29F6)
- ("REVERSE SOLIDUS WITH HORIZONTAL STROKE" #x29F7)
- ("BIG SOLIDUS" #x29F8)
- ("BIG REVERSE SOLIDUS" #x29F9)
- ("DOUBLE PLUS" #x29FA)
- ("TRIPLE PLUS" #x29FB)
- ("LEFT-POINTING CURVED ANGLE BRACKET" #x29FC)
- ("RIGHT-POINTING CURVED ANGLE BRACKET" #x29FD)
- ("TINY" #x29FE)
- ("MINY" #x29FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'supplemental-mathematical-operators
- '(("N-ARY CIRCLED DOT OPERATOR" #x2A00)
- ("N-ARY CIRCLED PLUS OPERATOR" #x2A01)
- ("N-ARY CIRCLED TIMES OPERATOR" #x2A02)
- ("N-ARY UNION OPERATOR WITH DOT" #x2A03)
- ("N-ARY UNION OPERATOR WITH PLUS" #x2A04)
- ("N-ARY SQUARE INTERSECTION OPERATOR" #x2A05)
- ("N-ARY SQUARE UNION OPERATOR" #x2A06)
- ("TWO LOGICAL AND OPERATOR" #x2A07)
- ("TWO LOGICAL OR OPERATOR" #x2A08)
- ("N-ARY TIMES OPERATOR" #x2A09)
- ("MODULO TWO SUM" #x2A0A)
- ("SUMMATION WITH INTEGRAL" #x2A0B)
- ("QUADRUPLE INTEGRAL OPERATOR" #x2A0C)
- ("FINITE PART INTEGRAL" #x2A0D)
- ("INTEGRAL WITH DOUBLE STROKE" #x2A0E)
- ("INTEGRAL AVERAGE WITH SLASH" #x2A0F)
- ("CIRCULATION FUNCTION" #x2A10)
- ("ANTICLOCKWISE INTEGRATION" #x2A11)
- ("LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE" #x2A12)
- ("LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE" #x2A13)
- ("LINE INTEGRATION NOT INCLUDING THE POLE" #x2A14)
- ("INTEGRAL AROUND A POINT OPERATOR" #x2A15)
- ("QUATERNION INTEGRAL OPERATOR" #x2A16)
- ("INTEGRAL WITH LEFTWARDS ARROW WITH HOOK" #x2A17)
- ("INTEGRAL WITH TIMES SIGN" #x2A18)
- ("INTEGRAL WITH INTERSECTION" #x2A19)
- ("INTEGRAL WITH UNION" #x2A1A)
- ("INTEGRAL WITH OVERBAR" #x2A1B)
- ("INTEGRAL WITH UNDERBAR" #x2A1C)
- ("JOIN" #x2A1D)
- ("LARGE LEFT TRIANGLE OPERATOR" #x2A1E)
- ("Z NOTATION SCHEMA COMPOSITION" #x2A1F)
- ("Z NOTATION SCHEMA PIPING" #x2A20)
- ("Z NOTATION SCHEMA PROJECTION" #x2A21)
- ("PLUS SIGN WITH SMALL CIRCLE ABOVE" #x2A22)
- ("PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE" #x2A23)
- ("PLUS SIGN WITH TILDE ABOVE" #x2A24)
- ("PLUS SIGN WITH DOT BELOW" #x2A25)
- ("PLUS SIGN WITH TILDE BELOW" #x2A26)
- ("PLUS SIGN WITH SUBSCRIPT TWO" #x2A27)
- ("PLUS SIGN WITH BLACK TRIANGLE" #x2A28)
- ("MINUS SIGN WITH COMMA ABOVE" #x2A29)
- ("MINUS SIGN WITH DOT BELOW" #x2A2A)
- ("MINUS SIGN WITH FALLING DOTS" #x2A2B)
- ("MINUS SIGN WITH RISING DOTS" #x2A2C)
- ("PLUS SIGN IN LEFT HALF CIRCLE" #x2A2D)
- ("PLUS SIGN IN RIGHT HALF CIRCLE" #x2A2E)
- ("VECTOR OR CROSS PRODUCT" #x2A2F)
- ("MULTIPLICATION SIGN WITH DOT ABOVE" #x2A30)
- ("MULTIPLICATION SIGN WITH UNDERBAR" #x2A31)
- ("SEMIDIRECT PRODUCT WITH BOTTOM CLOSED" #x2A32)
- ("SMASH PRODUCT" #x2A33)
- ("MULTIPLICATION SIGN IN LEFT HALF CIRCLE" #x2A34)
- ("MULTIPLICATION SIGN IN RIGHT HALF CIRCLE" #x2A35)
- ("CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT" #x2A36)
- ("MULTIPLICATION SIGN IN DOUBLE CIRCLE" #x2A37)
- ("CIRCLED DIVISION SIGN" #x2A38)
- ("PLUS SIGN IN TRIANGLE" #x2A39)
- ("MINUS SIGN IN TRIANGLE" #x2A3A)
- ("MULTIPLICATION SIGN IN TRIANGLE" #x2A3B)
- ("INTERIOR PRODUCT" #x2A3C)
- ("RIGHTHAND INTERIOR PRODUCT" #x2A3D)
- ("Z NOTATION RELATIONAL COMPOSITION" #x2A3E)
- ("AMALGAMATION OR COPRODUCT" #x2A3F)
- ("INTERSECTION WITH DOT" #x2A40)
- ("UNION WITH MINUS SIGN" #x2A41)
- ("UNION WITH OVERBAR" #x2A42)
- ("INTERSECTION WITH OVERBAR" #x2A43)
- ("INTERSECTION WITH LOGICAL AND" #x2A44)
- ("UNION WITH LOGICAL OR" #x2A45)
- ("UNION ABOVE INTERSECTION" #x2A46)
- ("INTERSECTION ABOVE UNION" #x2A47)
- ("UNION ABOVE BAR ABOVE INTERSECTION" #x2A48)
- ("INTERSECTION ABOVE BAR ABOVE UNION" #x2A49)
- ("UNION BESIDE AND JOINED WITH UNION" #x2A4A)
- ("INTERSECTION BESIDE AND JOINED WITH INTERSECTION" #x2A4B)
- ("CLOSED UNION WITH SERIFS" #x2A4C)
- ("CLOSED INTERSECTION WITH SERIFS" #x2A4D)
- ("DOUBLE SQUARE INTERSECTION" #x2A4E)
- ("DOUBLE SQUARE UNION" #x2A4F)
- ("CLOSED UNION WITH SERIFS AND SMASH PRODUCT" #x2A50)
- ("LOGICAL AND WITH DOT ABOVE" #x2A51)
- ("LOGICAL OR WITH DOT ABOVE" #x2A52)
- ("DOUBLE LOGICAL AND" #x2A53)
- ("DOUBLE LOGICAL OR" #x2A54)
- ("TWO INTERSECTING LOGICAL AND" #x2A55)
- ("TWO INTERSECTING LOGICAL OR" #x2A56)
- ("SLOPING LARGE OR" #x2A57)
- ("SLOPING LARGE AND" #x2A58)
- ("LOGICAL OR OVERLAPPING LOGICAL AND" #x2A59)
- ("LOGICAL AND WITH MIDDLE STEM" #x2A5A)
- ("LOGICAL OR WITH MIDDLE STEM" #x2A5B)
- ("LOGICAL AND WITH HORIZONTAL DASH" #x2A5C)
- ("LOGICAL OR WITH HORIZONTAL DASH" #x2A5D)
- ("LOGICAL AND WITH DOUBLE OVERBAR" #x2A5E)
- ("LOGICAL AND WITH UNDERBAR" #x2A5F)
- ("LOGICAL AND WITH DOUBLE UNDERBAR" #x2A60)
- ("SMALL VEE WITH UNDERBAR" #x2A61)
- ("LOGICAL OR WITH DOUBLE OVERBAR" #x2A62)
- ("LOGICAL OR WITH DOUBLE UNDERBAR" #x2A63)
- ("Z NOTATION DOMAIN ANTIRESTRICTION" #x2A64)
- ("Z NOTATION RANGE ANTIRESTRICTION" #x2A65)
- ("EQUALS SIGN WITH DOT BELOW" #x2A66)
- ("IDENTICAL WITH DOT ABOVE" #x2A67)
- ("TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE" #x2A68)
- ("TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE" #x2A69)
- ("TILDE OPERATOR WITH DOT ABOVE" #x2A6A)
- ("TILDE OPERATOR WITH RISING DOTS" #x2A6B)
- ("SIMILAR MINUS SIMILAR" #x2A6C)
- ("CONGRUENT WITH DOT ABOVE" #x2A6D)
- ("EQUALS WITH ASTERISK" #x2A6E)
- ("ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT" #x2A6F)
- ("APPROXIMATELY EQUAL OR EQUAL TO" #x2A70)
- ("EQUALS SIGN ABOVE PLUS SIGN" #x2A71)
- ("PLUS SIGN ABOVE EQUALS SIGN" #x2A72)
- ("EQUALS SIGN ABOVE TILDE OPERATOR" #x2A73)
- ("DOUBLE COLON EQUAL" #x2A74)
- ("TWO CONSECUTIVE EQUALS SIGNS" #x2A75)
- ("THREE CONSECUTIVE EQUALS SIGNS" #x2A76)
- ("EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW" #x2A77)
- ("EQUIVALENT WITH FOUR DOTS ABOVE" #x2A78)
- ("LESS-THAN WITH CIRCLE INSIDE" #x2A79)
- ("GREATER-THAN WITH CIRCLE INSIDE" #x2A7A)
- ("LESS-THAN WITH QUESTION MARK ABOVE" #x2A7B)
- ("GREATER-THAN WITH QUESTION MARK ABOVE" #x2A7C)
- ("LESS-THAN OR SLANTED EQUAL TO" #x2A7D)
- ("GREATER-THAN OR SLANTED EQUAL TO" #x2A7E)
- ("LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A7F)
- ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A80)
- ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A81)
- ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A82)
- ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT" #x2A83)
- ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT" #x2A84)
- ("LESS-THAN OR APPROXIMATE" #x2A85)
- ("GREATER-THAN OR APPROXIMATE" #x2A86)
- ("LESS-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A87)
- ("GREATER-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A88)
- ("LESS-THAN AND NOT APPROXIMATE" #x2A89)
- ("GREATER-THAN AND NOT APPROXIMATE" #x2A8A)
- ("LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN" #x2A8B)
- ("GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN" #x2A8C)
- ("LESS-THAN ABOVE SIMILAR OR EQUAL" #x2A8D)
- ("GREATER-THAN ABOVE SIMILAR OR EQUAL" #x2A8E)
- ("LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN" #x2A8F)
- ("GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN" #x2A90)
- ("LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL" #x2A91)
- ("GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL" #x2A92)
- ("LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL" #x2A93)
- ("GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL" #x2A94)
- ("SLANTED EQUAL TO OR LESS-THAN" #x2A95)
- ("SLANTED EQUAL TO OR GREATER-THAN" #x2A96)
- ("SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE" #x2A97)
- ("SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE" #x2A98)
- ("DOUBLE-LINE EQUAL TO OR LESS-THAN" #x2A99)
- ("DOUBLE-LINE EQUAL TO OR GREATER-THAN" #x2A9A)
- ("DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN" #x2A9B)
- ("DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN" #x2A9C)
- ("SIMILAR OR LESS-THAN" #x2A9D)
- ("SIMILAR OR GREATER-THAN" #x2A9E)
- ("SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN" #x2A9F)
- ("SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN" #x2AA0)
- ("DOUBLE NESTED LESS-THAN" #x2AA1)
- ("DOUBLE NESTED GREATER-THAN" #x2AA2)
- ("DOUBLE NESTED LESS-THAN WITH UNDERBAR" #x2AA3)
- ("GREATER-THAN OVERLAPPING LESS-THAN" #x2AA4)
- ("GREATER-THAN BESIDE LESS-THAN" #x2AA5)
- ("LESS-THAN CLOSED BY CURVE" #x2AA6)
- ("GREATER-THAN CLOSED BY CURVE" #x2AA7)
- ("LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA8)
- ("GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA9)
- ("SMALLER THAN" #x2AAA)
- ("LARGER THAN" #x2AAB)
- ("SMALLER THAN OR EQUAL TO" #x2AAC)
- ("LARGER THAN OR EQUAL TO" #x2AAD)
- ("EQUALS SIGN WITH BUMPY ABOVE" #x2AAE)
- ("PRECEDES ABOVE SINGLE-LINE EQUALS SIGN" #x2AAF)
- ("SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN" #x2AB0)
- ("PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB1)
- ("SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB2)
- ("PRECEDES ABOVE EQUALS SIGN" #x2AB3)
- ("SUCCEEDS ABOVE EQUALS SIGN" #x2AB4)
- ("PRECEDES ABOVE NOT EQUAL TO" #x2AB5)
- ("SUCCEEDS ABOVE NOT EQUAL TO" #x2AB6)
- ("PRECEDES ABOVE ALMOST EQUAL TO" #x2AB7)
- ("SUCCEEDS ABOVE ALMOST EQUAL TO" #x2AB8)
- ("PRECEDES ABOVE NOT ALMOST EQUAL TO" #x2AB9)
- ("SUCCEEDS ABOVE NOT ALMOST EQUAL TO" #x2ABA)
- ("DOUBLE PRECEDES" #x2ABB)
- ("DOUBLE SUCCEEDS" #x2ABC)
- ("SUBSET WITH DOT" #x2ABD)
- ("SUPERSET WITH DOT" #x2ABE)
- ("SUBSET WITH PLUS SIGN BELOW" #x2ABF)
- ("SUPERSET WITH PLUS SIGN BELOW" #x2AC0)
- ("SUBSET WITH MULTIPLICATION SIGN BELOW" #x2AC1)
- ("SUPERSET WITH MULTIPLICATION SIGN BELOW" #x2AC2)
- ("SUBSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC3)
- ("SUPERSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC4)
- ("SUBSET OF ABOVE EQUALS SIGN" #x2AC5)
- ("SUPERSET OF ABOVE EQUALS SIGN" #x2AC6)
- ("SUBSET OF ABOVE TILDE OPERATOR" #x2AC7)
- ("SUPERSET OF ABOVE TILDE OPERATOR" #x2AC8)
- ("SUBSET OF ABOVE ALMOST EQUAL TO" #x2AC9)
- ("SUPERSET OF ABOVE ALMOST EQUAL TO" #x2ACA)
- ("SUBSET OF ABOVE NOT EQUAL TO" #x2ACB)
- ("SUPERSET OF ABOVE NOT EQUAL TO" #x2ACC)
- ("SQUARE LEFT OPEN BOX OPERATOR" #x2ACD)
- ("SQUARE RIGHT OPEN BOX OPERATOR" #x2ACE)
- ("CLOSED SUBSET" #x2ACF)
- ("CLOSED SUPERSET" #x2AD0)
- ("CLOSED SUBSET OR EQUAL TO" #x2AD1)
- ("CLOSED SUPERSET OR EQUAL TO" #x2AD2)
- ("SUBSET ABOVE SUPERSET" #x2AD3)
- ("SUPERSET ABOVE SUBSET" #x2AD4)
- ("SUBSET ABOVE SUBSET" #x2AD5)
- ("SUPERSET ABOVE SUPERSET" #x2AD6)
- ("SUPERSET BESIDE SUBSET" #x2AD7)
- ("SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET" #x2AD8)
- ("ELEMENT OF OPENING DOWNWARDS" #x2AD9)
- ("PITCHFORK WITH TEE TOP" #x2ADA)
- ("TRANSVERSAL INTERSECTION" #x2ADB)
- ("FORKING" #x2ADC)
- ("NONFORKING" #x2ADD)
- ("SHORT LEFT TACK" #x2ADE)
- ("SHORT DOWN TACK" #x2ADF)
- ("SHORT UP TACK" #x2AE0)
- ("PERPENDICULAR WITH S" #x2AE1)
- ("VERTICAL BAR TRIPLE RIGHT TURNSTILE" #x2AE2)
- ("DOUBLE VERTICAL BAR LEFT TURNSTILE" #x2AE3)
- ("VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE4)
- ("DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE5)
- ("LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL" #x2AE6)
- ("SHORT DOWN TACK WITH OVERBAR" #x2AE7)
- ("SHORT UP TACK WITH UNDERBAR" #x2AE8)
- ("SHORT UP TACK ABOVE SHORT DOWN TACK" #x2AE9)
- ("DOUBLE DOWN TACK" #x2AEA)
- ("DOUBLE UP TACK" #x2AEB)
- ("DOUBLE STROKE NOT SIGN" #x2AEC)
- ("REVERSED DOUBLE STROKE NOT SIGN" #x2AED)
- ("DOES NOT DIVIDE WITH REVERSED NEGATION SLASH" #x2AEE)
- ("VERTICAL LINE WITH CIRCLE ABOVE" #x2AEF)
- ("VERTICAL LINE WITH CIRCLE BELOW" #x2AF0)
- ("DOWN TACK WITH CIRCLE BELOW" #x2AF1)
- ("PARALLEL WITH HORIZONTAL STROKE" #x2AF2)
- ("PARALLEL WITH TILDE OPERATOR" #x2AF3)
- ("TRIPLE VERTICAL BAR BINARY RELATION" #x2AF4)
- ("TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE" #x2AF5)
- ("TRIPLE COLON OPERATOR" #x2AF6)
- ("TRIPLE NESTED LESS-THAN" #x2AF7)
- ("TRIPLE NESTED GREATER-THAN" #x2AF8)
- ("DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO" #x2AF9)
- ("DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO" #x2AFA)
- ("TRIPLE SOLIDUS BINARY RELATION" #x2AFB)
- ("LARGE TRIPLE VERTICAL BAR OPERATOR" #x2AFC)
- ("DOUBLE SOLIDUS OPERATOR" #x2AFD)
- ("WHITE VERTICAL BAR" #x2AFE)
- ("N-ARY WHITE VERTICAL BAR" #x2AFF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cjk-radicals-supplement
- '(("CJK RADICAL REPEAT" #x2E80)
- ("CJK RADICAL CLIFF" #x2E81)
- ("CJK RADICAL SECOND ONE" #x2E82)
- ("CJK RADICAL SECOND TWO" #x2E83)
- ("CJK RADICAL SECOND THREE" #x2E84)
- ("CJK RADICAL PERSON" #x2E85)
- ("CJK RADICAL BOX" #x2E86)
- ("CJK RADICAL TABLE" #x2E87)
- ("CJK RADICAL KNIFE ONE" #x2E88)
- ("CJK RADICAL KNIFE TWO" #x2E89)
- ("CJK RADICAL DIVINATION" #x2E8A)
- ("CJK RADICAL SEAL" #x2E8B)
- ("CJK RADICAL SMALL ONE" #x2E8C)
- ("CJK RADICAL SMALL TWO" #x2E8D)
- ("CJK RADICAL LAME ONE" #x2E8E)
- ("CJK RADICAL LAME TWO" #x2E8F)
- ("CJK RADICAL LAME THREE" #x2E90)
- ("CJK RADICAL LAME FOUR" #x2E91)
- ("CJK RADICAL SNAKE" #x2E92)
- ("CJK RADICAL THREAD" #x2E93)
- ("CJK RADICAL SNOUT ONE" #x2E94)
- ("CJK RADICAL SNOUT TWO" #x2E95)
- ("CJK RADICAL HEART ONE" #x2E96)
- ("CJK RADICAL HEART TWO" #x2E97)
- ("CJK RADICAL HAND" #x2E98)
- ("CJK RADICAL RAP" #x2E99)
- ("CJK RADICAL CHOKE" #x2E9B)
- ("CJK RADICAL SUN" #x2E9C)
- ("CJK RADICAL MOON" #x2E9D)
- ("CJK RADICAL DEATH" #x2E9E)
- ("CJK RADICAL MOTHER" #x2E9F)
- ("CJK RADICAL CIVILIAN" #x2EA0)
- ("CJK RADICAL WATER ONE" #x2EA1)
- ("CJK RADICAL WATER TWO" #x2EA2)
- ("CJK RADICAL FIRE" #x2EA3)
- ("CJK RADICAL PAW ONE" #x2EA4)
- ("CJK RADICAL PAW TWO" #x2EA5)
- ("CJK RADICAL SIMPLIFIED HALF TREE TRUNK" #x2EA6)
- ("CJK RADICAL COW" #x2EA7)
- ("CJK RADICAL DOG" #x2EA8)
- ("CJK RADICAL JADE" #x2EA9)
- ("CJK RADICAL BOLT OF CLOTH" #x2EAA)
- ("CJK RADICAL EYE" #x2EAB)
- ("CJK RADICAL SPIRIT ONE" #x2EAC)
- ("CJK RADICAL SPIRIT TWO" #x2EAD)
- ("CJK RADICAL BAMBOO" #x2EAE)
- ("CJK RADICAL SILK" #x2EAF)
- ("CJK RADICAL C-SIMPLIFIED SILK" #x2EB0)
- ("CJK RADICAL NET ONE" #x2EB1)
- ("CJK RADICAL NET TWO" #x2EB2)
- ("CJK RADICAL NET THREE" #x2EB3)
- ("CJK RADICAL NET FOUR" #x2EB4)
- ("CJK RADICAL MESH" #x2EB5)
- ("CJK RADICAL SHEEP" #x2EB6)
- ("CJK RADICAL RAM" #x2EB7)
- ("CJK RADICAL EWE" #x2EB8)
- ("CJK RADICAL OLD" #x2EB9)
- ("CJK RADICAL BRUSH ONE" #x2EBA)
- ("CJK RADICAL BRUSH TWO" #x2EBB)
- ("CJK RADICAL MEAT" #x2EBC)
- ("CJK RADICAL MORTAR" #x2EBD)
- ("CJK RADICAL GRASS ONE" #x2EBE)
- ("CJK RADICAL GRASS TWO" #x2EBF)
- ("CJK RADICAL GRASS THREE" #x2EC0)
- ("CJK RADICAL TIGER" #x2EC1)
- ("CJK RADICAL CLOTHES" #x2EC2)
- ("CJK RADICAL WEST ONE" #x2EC3)
- ("CJK RADICAL WEST TWO" #x2EC4)
- ("CJK RADICAL C-SIMPLIFIED SEE" #x2EC5)
- ("CJK RADICAL SIMPLIFIED HORN" #x2EC6)
- ("CJK RADICAL HORN" #x2EC7)
- ("CJK RADICAL C-SIMPLIFIED SPEECH" #x2EC8)
- ("CJK RADICAL C-SIMPLIFIED SHELL" #x2EC9)
- ("CJK RADICAL FOOT" #x2ECA)
- ("CJK RADICAL C-SIMPLIFIED CART" #x2ECB)
- ("CJK RADICAL SIMPLIFIED WALK" #x2ECC)
- ("CJK RADICAL WALK ONE" #x2ECD)
- ("CJK RADICAL WALK TWO" #x2ECE)
- ("CJK RADICAL CITY" #x2ECF)
- ("CJK RADICAL C-SIMPLIFIED GOLD" #x2ED0)
- ("CJK RADICAL LONG ONE" #x2ED1)
- ("CJK RADICAL LONG TWO" #x2ED2)
- ("CJK RADICAL C-SIMPLIFIED LONG" #x2ED3)
- ("CJK RADICAL C-SIMPLIFIED GATE" #x2ED4)
- ("CJK RADICAL MOUND ONE" #x2ED5)
- ("CJK RADICAL MOUND TWO" #x2ED6)
- ("CJK RADICAL RAIN" #x2ED7)
- ("CJK RADICAL BLUE" #x2ED8)
- ("CJK RADICAL C-SIMPLIFIED TANNED LEATHER" #x2ED9)
- ("CJK RADICAL C-SIMPLIFIED LEAF" #x2EDA)
- ("CJK RADICAL C-SIMPLIFIED WIND" #x2EDB)
- ("CJK RADICAL C-SIMPLIFIED FLY" #x2EDC)
- ("CJK RADICAL EAT ONE" #x2EDD)
- ("CJK RADICAL EAT TWO" #x2EDE)
- ("CJK RADICAL EAT THREE" #x2EDF)
- ("CJK RADICAL C-SIMPLIFIED EAT" #x2EE0)
- ("CJK RADICAL HEAD" #x2EE1)
- ("CJK RADICAL C-SIMPLIFIED HORSE" #x2EE2)
- ("CJK RADICAL BONE" #x2EE3)
- ("CJK RADICAL GHOST" #x2EE4)
- ("CJK RADICAL C-SIMPLIFIED FISH" #x2EE5)
- ("CJK RADICAL C-SIMPLIFIED BIRD" #x2EE6)
- ("CJK RADICAL C-SIMPLIFIED SALT" #x2EE7)
- ("CJK RADICAL SIMPLIFIED WHEAT" #x2EE8)
- ("CJK RADICAL SIMPLIFIED YELLOW" #x2EE9)
- ("CJK RADICAL C-SIMPLIFIED FROG" #x2EEA)
- ("CJK RADICAL J-SIMPLIFIED EVEN" #x2EEB)
- ("CJK RADICAL C-SIMPLIFIED EVEN" #x2EEC)
- ("CJK RADICAL J-SIMPLIFIED TOOTH" #x2EED)
- ("CJK RADICAL C-SIMPLIFIED TOOTH" #x2EEE)
- ("CJK RADICAL J-SIMPLIFIED DRAGON" #x2EEF)
- ("CJK RADICAL C-SIMPLIFIED DRAGON" #x2EF0)
- ("CJK RADICAL TURTLE" #x2EF1)
- ("CJK RADICAL J-SIMPLIFIED TURTLE" #x2EF2)
- ("CJK RADICAL C-SIMPLIFIED TURTLE" #x2EF3)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'kangxi-radicals
- '(("KANGXI RADICAL ONE" #x2F00)
- ("KANGXI RADICAL LINE" #x2F01)
- ("KANGXI RADICAL DOT" #x2F02)
- ("KANGXI RADICAL SLASH" #x2F03)
- ("KANGXI RADICAL SECOND" #x2F04)
- ("KANGXI RADICAL HOOK" #x2F05)
- ("KANGXI RADICAL TWO" #x2F06)
- ("KANGXI RADICAL LID" #x2F07)
- ("KANGXI RADICAL MAN" #x2F08)
- ("KANGXI RADICAL LEGS" #x2F09)
- ("KANGXI RADICAL ENTER" #x2F0A)
- ("KANGXI RADICAL EIGHT" #x2F0B)
- ("KANGXI RADICAL DOWN BOX" #x2F0C)
- ("KANGXI RADICAL COVER" #x2F0D)
- ("KANGXI RADICAL ICE" #x2F0E)
- ("KANGXI RADICAL TABLE" #x2F0F)
- ("KANGXI RADICAL OPEN BOX" #x2F10)
- ("KANGXI RADICAL KNIFE" #x2F11)
- ("KANGXI RADICAL POWER" #x2F12)
- ("KANGXI RADICAL WRAP" #x2F13)
- ("KANGXI RADICAL SPOON" #x2F14)
- ("KANGXI RADICAL RIGHT OPEN BOX" #x2F15)
- ("KANGXI RADICAL HIDING ENCLOSURE" #x2F16)
- ("KANGXI RADICAL TEN" #x2F17)
- ("KANGXI RADICAL DIVINATION" #x2F18)
- ("KANGXI RADICAL SEAL" #x2F19)
- ("KANGXI RADICAL CLIFF" #x2F1A)
- ("KANGXI RADICAL PRIVATE" #x2F1B)
- ("KANGXI RADICAL AGAIN" #x2F1C)
- ("KANGXI RADICAL MOUTH" #x2F1D)
- ("KANGXI RADICAL ENCLOSURE" #x2F1E)
- ("KANGXI RADICAL EARTH" #x2F1F)
- ("KANGXI RADICAL SCHOLAR" #x2F20)
- ("KANGXI RADICAL GO" #x2F21)
- ("KANGXI RADICAL GO SLOWLY" #x2F22)
- ("KANGXI RADICAL EVENING" #x2F23)
- ("KANGXI RADICAL BIG" #x2F24)
- ("KANGXI RADICAL WOMAN" #x2F25)
- ("KANGXI RADICAL CHILD" #x2F26)
- ("KANGXI RADICAL ROOF" #x2F27)
- ("KANGXI RADICAL INCH" #x2F28)
- ("KANGXI RADICAL SMALL" #x2F29)
- ("KANGXI RADICAL LAME" #x2F2A)
- ("KANGXI RADICAL CORPSE" #x2F2B)
- ("KANGXI RADICAL SPROUT" #x2F2C)
- ("KANGXI RADICAL MOUNTAIN" #x2F2D)
- ("KANGXI RADICAL RIVER" #x2F2E)
- ("KANGXI RADICAL WORK" #x2F2F)
- ("KANGXI RADICAL ONESELF" #x2F30)
- ("KANGXI RADICAL TURBAN" #x2F31)
- ("KANGXI RADICAL DRY" #x2F32)
- ("KANGXI RADICAL SHORT THREAD" #x2F33)
- ("KANGXI RADICAL DOTTED CLIFF" #x2F34)
- ("KANGXI RADICAL LONG STRIDE" #x2F35)
- ("KANGXI RADICAL TWO HANDS" #x2F36)
- ("KANGXI RADICAL SHOOT" #x2F37)
- ("KANGXI RADICAL BOW" #x2F38)
- ("KANGXI RADICAL SNOUT" #x2F39)
- ("KANGXI RADICAL BRISTLE" #x2F3A)
- ("KANGXI RADICAL STEP" #x2F3B)
- ("KANGXI RADICAL HEART" #x2F3C)
- ("KANGXI RADICAL HALBERD" #x2F3D)
- ("KANGXI RADICAL DOOR" #x2F3E)
- ("KANGXI RADICAL HAND" #x2F3F)
- ("KANGXI RADICAL BRANCH" #x2F40)
- ("KANGXI RADICAL RAP" #x2F41)
- ("KANGXI RADICAL SCRIPT" #x2F42)
- ("KANGXI RADICAL DIPPER" #x2F43)
- ("KANGXI RADICAL AXE" #x2F44)
- ("KANGXI RADICAL SQUARE" #x2F45)
- ("KANGXI RADICAL NOT" #x2F46)
- ("KANGXI RADICAL SUN" #x2F47)
- ("KANGXI RADICAL SAY" #x2F48)
- ("KANGXI RADICAL MOON" #x2F49)
- ("KANGXI RADICAL TREE" #x2F4A)
- ("KANGXI RADICAL LACK" #x2F4B)
- ("KANGXI RADICAL STOP" #x2F4C)
- ("KANGXI RADICAL DEATH" #x2F4D)
- ("KANGXI RADICAL WEAPON" #x2F4E)
- ("KANGXI RADICAL DO NOT" #x2F4F)
- ("KANGXI RADICAL COMPARE" #x2F50)
- ("KANGXI RADICAL FUR" #x2F51)
- ("KANGXI RADICAL CLAN" #x2F52)
- ("KANGXI RADICAL STEAM" #x2F53)
- ("KANGXI RADICAL WATER" #x2F54)
- ("KANGXI RADICAL FIRE" #x2F55)
- ("KANGXI RADICAL CLAW" #x2F56)
- ("KANGXI RADICAL FATHER" #x2F57)
- ("KANGXI RADICAL DOUBLE X" #x2F58)
- ("KANGXI RADICAL HALF TREE TRUNK" #x2F59)
- ("KANGXI RADICAL SLICE" #x2F5A)
- ("KANGXI RADICAL FANG" #x2F5B)
- ("KANGXI RADICAL COW" #x2F5C)
- ("KANGXI RADICAL DOG" #x2F5D)
- ("KANGXI RADICAL PROFOUND" #x2F5E)
- ("KANGXI RADICAL JADE" #x2F5F)
- ("KANGXI RADICAL MELON" #x2F60)
- ("KANGXI RADICAL TILE" #x2F61)
- ("KANGXI RADICAL SWEET" #x2F62)
- ("KANGXI RADICAL LIFE" #x2F63)
- ("KANGXI RADICAL USE" #x2F64)
- ("KANGXI RADICAL FIELD" #x2F65)
- ("KANGXI RADICAL BOLT OF CLOTH" #x2F66)
- ("KANGXI RADICAL SICKNESS" #x2F67)
- ("KANGXI RADICAL DOTTED TENT" #x2F68)
- ("KANGXI RADICAL WHITE" #x2F69)
- ("KANGXI RADICAL SKIN" #x2F6A)
- ("KANGXI RADICAL DISH" #x2F6B)
- ("KANGXI RADICAL EYE" #x2F6C)
- ("KANGXI RADICAL SPEAR" #x2F6D)
- ("KANGXI RADICAL ARROW" #x2F6E)
- ("KANGXI RADICAL STONE" #x2F6F)
- ("KANGXI RADICAL SPIRIT" #x2F70)
- ("KANGXI RADICAL TRACK" #x2F71)
- ("KANGXI RADICAL GRAIN" #x2F72)
- ("KANGXI RADICAL CAVE" #x2F73)
- ("KANGXI RADICAL STAND" #x2F74)
- ("KANGXI RADICAL BAMBOO" #x2F75)
- ("KANGXI RADICAL RICE" #x2F76)
- ("KANGXI RADICAL SILK" #x2F77)
- ("KANGXI RADICAL JAR" #x2F78)
- ("KANGXI RADICAL NET" #x2F79)
- ("KANGXI RADICAL SHEEP" #x2F7A)
- ("KANGXI RADICAL FEATHER" #x2F7B)
- ("KANGXI RADICAL OLD" #x2F7C)
- ("KANGXI RADICAL AND" #x2F7D)
- ("KANGXI RADICAL PLOW" #x2F7E)
- ("KANGXI RADICAL EAR" #x2F7F)
- ("KANGXI RADICAL BRUSH" #x2F80)
- ("KANGXI RADICAL MEAT" #x2F81)
- ("KANGXI RADICAL MINISTER" #x2F82)
- ("KANGXI RADICAL SELF" #x2F83)
- ("KANGXI RADICAL ARRIVE" #x2F84)
- ("KANGXI RADICAL MORTAR" #x2F85)
- ("KANGXI RADICAL TONGUE" #x2F86)
- ("KANGXI RADICAL OPPOSE" #x2F87)
- ("KANGXI RADICAL BOAT" #x2F88)
- ("KANGXI RADICAL STOPPING" #x2F89)
- ("KANGXI RADICAL COLOR" #x2F8A)
- ("KANGXI RADICAL GRASS" #x2F8B)
- ("KANGXI RADICAL TIGER" #x2F8C)
- ("KANGXI RADICAL INSECT" #x2F8D)
- ("KANGXI RADICAL BLOOD" #x2F8E)
- ("KANGXI RADICAL WALK ENCLOSURE" #x2F8F)
- ("KANGXI RADICAL CLOTHES" #x2F90)
- ("KANGXI RADICAL WEST" #x2F91)
- ("KANGXI RADICAL SEE" #x2F92)
- ("KANGXI RADICAL HORN" #x2F93)
- ("KANGXI RADICAL SPEECH" #x2F94)
- ("KANGXI RADICAL VALLEY" #x2F95)
- ("KANGXI RADICAL BEAN" #x2F96)
- ("KANGXI RADICAL PIG" #x2F97)
- ("KANGXI RADICAL BADGER" #x2F98)
- ("KANGXI RADICAL SHELL" #x2F99)
- ("KANGXI RADICAL RED" #x2F9A)
- ("KANGXI RADICAL RUN" #x2F9B)
- ("KANGXI RADICAL FOOT" #x2F9C)
- ("KANGXI RADICAL BODY" #x2F9D)
- ("KANGXI RADICAL CART" #x2F9E)
- ("KANGXI RADICAL BITTER" #x2F9F)
- ("KANGXI RADICAL MORNING" #x2FA0)
- ("KANGXI RADICAL WALK" #x2FA1)
- ("KANGXI RADICAL CITY" #x2FA2)
- ("KANGXI RADICAL WINE" #x2FA3)
- ("KANGXI RADICAL DISTINGUISH" #x2FA4)
- ("KANGXI RADICAL VILLAGE" #x2FA5)
- ("KANGXI RADICAL GOLD" #x2FA6)
- ("KANGXI RADICAL LONG" #x2FA7)
- ("KANGXI RADICAL GATE" #x2FA8)
- ("KANGXI RADICAL MOUND" #x2FA9)
- ("KANGXI RADICAL SLAVE" #x2FAA)
- ("KANGXI RADICAL SHORT TAILED BIRD" #x2FAB)
- ("KANGXI RADICAL RAIN" #x2FAC)
- ("KANGXI RADICAL BLUE" #x2FAD)
- ("KANGXI RADICAL WRONG" #x2FAE)
- ("KANGXI RADICAL FACE" #x2FAF)
- ("KANGXI RADICAL LEATHER" #x2FB0)
- ("KANGXI RADICAL TANNED LEATHER" #x2FB1)
- ("KANGXI RADICAL LEEK" #x2FB2)
- ("KANGXI RADICAL SOUND" #x2FB3)
- ("KANGXI RADICAL LEAF" #x2FB4)
- ("KANGXI RADICAL WIND" #x2FB5)
- ("KANGXI RADICAL FLY" #x2FB6)
- ("KANGXI RADICAL EAT" #x2FB7)
- ("KANGXI RADICAL HEAD" #x2FB8)
- ("KANGXI RADICAL FRAGRANT" #x2FB9)
- ("KANGXI RADICAL HORSE" #x2FBA)
- ("KANGXI RADICAL BONE" #x2FBB)
- ("KANGXI RADICAL TALL" #x2FBC)
- ("KANGXI RADICAL HAIR" #x2FBD)
- ("KANGXI RADICAL FIGHT" #x2FBE)
- ("KANGXI RADICAL SACRIFICIAL WINE" #x2FBF)
- ("KANGXI RADICAL CAULDRON" #x2FC0)
- ("KANGXI RADICAL GHOST" #x2FC1)
- ("KANGXI RADICAL FISH" #x2FC2)
- ("KANGXI RADICAL BIRD" #x2FC3)
- ("KANGXI RADICAL SALT" #x2FC4)
- ("KANGXI RADICAL DEER" #x2FC5)
- ("KANGXI RADICAL WHEAT" #x2FC6)
- ("KANGXI RADICAL HEMP" #x2FC7)
- ("KANGXI RADICAL YELLOW" #x2FC8)
- ("KANGXI RADICAL MILLET" #x2FC9)
- ("KANGXI RADICAL BLACK" #x2FCA)
- ("KANGXI RADICAL EMBROIDERY" #x2FCB)
- ("KANGXI RADICAL FROG" #x2FCC)
- ("KANGXI RADICAL TRIPOD" #x2FCD)
- ("KANGXI RADICAL DRUM" #x2FCE)
- ("KANGXI RADICAL RAT" #x2FCF)
- ("KANGXI RADICAL NOSE" #x2FD0)
- ("KANGXI RADICAL EVEN" #x2FD1)
- ("KANGXI RADICAL TOOTH" #x2FD2)
- ("KANGXI RADICAL DRAGON" #x2FD3)
- ("KANGXI RADICAL TURTLE" #x2FD4)
- ("KANGXI RADICAL FLUTE" #x2FD5)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'ideographic-description-characters
- '(("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT" #x2FF0)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW" #x2FF1)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT" #x2FF2)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW" #x2FF3)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND" #x2FF4)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE" #x2FF5)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW" #x2FF6)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT" #x2FF7)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT" #x2FF8)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT" #x2FF9)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT" #x2FFA)
- ("IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID" #x2FFB)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cjk-symbols-and-punctuation
- '(("IDEOGRAPHIC SPACE" #x3000)
- ("IDEOGRAPHIC COMMA" #x3001)
- ("IDEOGRAPHIC FULL STOP" #x3002)
- ("DITTO MARK" #x3003)
- ("JAPANESE INDUSTRIAL STANDARD SYMBOL" #x3004)
- ("IDEOGRAPHIC ITERATION MARK" #x3005)
- ("IDEOGRAPHIC CLOSING MARK" #x3006)
- ("IDEOGRAPHIC NUMBER ZERO" #x3007)
- ("LEFT ANGLE BRACKET" #x3008)
- ("RIGHT ANGLE BRACKET" #x3009)
- ("LEFT DOUBLE ANGLE BRACKET" #x300A)
- ("RIGHT DOUBLE ANGLE BRACKET" #x300B)
- ("LEFT CORNER BRACKET" #x300C)
- ("RIGHT CORNER BRACKET" #x300D)
- ("LEFT WHITE CORNER BRACKET" #x300E)
- ("RIGHT WHITE CORNER BRACKET" #x300F)
- ("LEFT BLACK LENTICULAR BRACKET" #x3010)
- ("RIGHT BLACK LENTICULAR BRACKET" #x3011)
- ("POSTAL MARK" #x3012)
- ("GETA MARK" #x3013)
- ("LEFT TORTOISE SHELL BRACKET" #x3014)
- ("RIGHT TORTOISE SHELL BRACKET" #x3015)
- ("LEFT WHITE LENTICULAR BRACKET" #x3016)
- ("RIGHT WHITE LENTICULAR BRACKET" #x3017)
- ("LEFT WHITE TORTOISE SHELL BRACKET" #x3018)
- ("RIGHT WHITE TORTOISE SHELL BRACKET" #x3019)
- ("LEFT WHITE SQUARE BRACKET" #x301A)
- ("RIGHT WHITE SQUARE BRACKET" #x301B)
- ("WAVE DASH" #x301C)
- ("REVERSED DOUBLE PRIME QUOTATION MARK" #x301D)
- ("DOUBLE PRIME QUOTATION MARK" #x301E)
- ("LOW DOUBLE PRIME QUOTATION MARK" #x301F)
- ("POSTAL MARK FACE" #x3020)
- ("HANGZHOU NUMERAL ONE" #x3021)
- ("HANGZHOU NUMERAL TWO" #x3022)
- ("HANGZHOU NUMERAL THREE" #x3023)
- ("HANGZHOU NUMERAL FOUR" #x3024)
- ("HANGZHOU NUMERAL FIVE" #x3025)
- ("HANGZHOU NUMERAL SIX" #x3026)
- ("HANGZHOU NUMERAL SEVEN" #x3027)
- ("HANGZHOU NUMERAL EIGHT" #x3028)
- ("HANGZHOU NUMERAL NINE" #x3029)
- ("IDEOGRAPHIC LEVEL TONE MARK" #x302A)
- ("IDEOGRAPHIC RISING TONE MARK" #x302B)
- ("IDEOGRAPHIC DEPARTING TONE MARK" #x302C)
- ("IDEOGRAPHIC ENTERING TONE MARK" #x302D)
- ("HANGUL SINGLE DOT TONE MARK" #x302E)
- ("HANGUL DOUBLE DOT TONE MARK" #x302F)
- ("WAVY DASH" #x3030)
- ("VERTICAL KANA REPEAT MARK" #x3031)
- ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK" #x3032)
- ("VERTICAL KANA REPEAT MARK UPPER HALF" #x3033)
- ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF" #x3034)
- ("VERTICAL KANA REPEAT MARK LOWER HALF" #x3035)
- ("CIRCLED POSTAL MARK" #x3036)
- ("IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL" #x3037)
- ("HANGZHOU NUMERAL TEN" #x3038)
- ("HANGZHOU NUMERAL TWENTY" #x3039)
- ("HANGZHOU NUMERAL THIRTY" #x303A)
- ("VERTICAL IDEOGRAPHIC ITERATION MARK" #x303B)
- ("MASU MARK" #x303C)
- ("PART ALTERNATION MARK" #x303D)
- ("IDEOGRAPHIC VARIATION INDICATOR" #x303E)
- ("IDEOGRAPHIC HALF FILL SPACE" #x303F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'hiragana
- '(("HIRAGANA LETTER SMALL A" #x3041)
- ("HIRAGANA LETTER A" #x3042)
- ("HIRAGANA LETTER SMALL I" #x3043)
- ("HIRAGANA LETTER I" #x3044)
- ("HIRAGANA LETTER SMALL U" #x3045)
- ("HIRAGANA LETTER U" #x3046)
- ("HIRAGANA LETTER SMALL E" #x3047)
- ("HIRAGANA LETTER E" #x3048)
- ("HIRAGANA LETTER SMALL O" #x3049)
- ("HIRAGANA LETTER O" #x304A)
- ("HIRAGANA LETTER KA" #x304B)
- ("HIRAGANA LETTER GA" #x304C)
- ("HIRAGANA LETTER KI" #x304D)
- ("HIRAGANA LETTER GI" #x304E)
- ("HIRAGANA LETTER KU" #x304F)
- ("HIRAGANA LETTER GU" #x3050)
- ("HIRAGANA LETTER KE" #x3051)
- ("HIRAGANA LETTER GE" #x3052)
- ("HIRAGANA LETTER KO" #x3053)
- ("HIRAGANA LETTER GO" #x3054)
- ("HIRAGANA LETTER SA" #x3055)
- ("HIRAGANA LETTER ZA" #x3056)
- ("HIRAGANA LETTER SI" #x3057)
- ("HIRAGANA LETTER ZI" #x3058)
- ("HIRAGANA LETTER SU" #x3059)
- ("HIRAGANA LETTER ZU" #x305A)
- ("HIRAGANA LETTER SE" #x305B)
- ("HIRAGANA LETTER ZE" #x305C)
- ("HIRAGANA LETTER SO" #x305D)
- ("HIRAGANA LETTER ZO" #x305E)
- ("HIRAGANA LETTER TA" #x305F)
- ("HIRAGANA LETTER DA" #x3060)
- ("HIRAGANA LETTER TI" #x3061)
- ("HIRAGANA LETTER DI" #x3062)
- ("HIRAGANA LETTER SMALL TU" #x3063)
- ("HIRAGANA LETTER TU" #x3064)
- ("HIRAGANA LETTER DU" #x3065)
- ("HIRAGANA LETTER TE" #x3066)
- ("HIRAGANA LETTER DE" #x3067)
- ("HIRAGANA LETTER TO" #x3068)
- ("HIRAGANA LETTER DO" #x3069)
- ("HIRAGANA LETTER NA" #x306A)
- ("HIRAGANA LETTER NI" #x306B)
- ("HIRAGANA LETTER NU" #x306C)
- ("HIRAGANA LETTER NE" #x306D)
- ("HIRAGANA LETTER NO" #x306E)
- ("HIRAGANA LETTER HA" #x306F)
- ("HIRAGANA LETTER BA" #x3070)
- ("HIRAGANA LETTER PA" #x3071)
- ("HIRAGANA LETTER HI" #x3072)
- ("HIRAGANA LETTER BI" #x3073)
- ("HIRAGANA LETTER PI" #x3074)
- ("HIRAGANA LETTER HU" #x3075)
- ("HIRAGANA LETTER BU" #x3076)
- ("HIRAGANA LETTER PU" #x3077)
- ("HIRAGANA LETTER HE" #x3078)
- ("HIRAGANA LETTER BE" #x3079)
- ("HIRAGANA LETTER PE" #x307A)
- ("HIRAGANA LETTER HO" #x307B)
- ("HIRAGANA LETTER BO" #x307C)
- ("HIRAGANA LETTER PO" #x307D)
- ("HIRAGANA LETTER MA" #x307E)
- ("HIRAGANA LETTER MI" #x307F)
- ("HIRAGANA LETTER MU" #x3080)
- ("HIRAGANA LETTER ME" #x3081)
- ("HIRAGANA LETTER MO" #x3082)
- ("HIRAGANA LETTER SMALL YA" #x3083)
- ("HIRAGANA LETTER YA" #x3084)
- ("HIRAGANA LETTER SMALL YU" #x3085)
- ("HIRAGANA LETTER YU" #x3086)
- ("HIRAGANA LETTER SMALL YO" #x3087)
- ("HIRAGANA LETTER YO" #x3088)
- ("HIRAGANA LETTER RA" #x3089)
- ("HIRAGANA LETTER RI" #x308A)
- ("HIRAGANA LETTER RU" #x308B)
- ("HIRAGANA LETTER RE" #x308C)
- ("HIRAGANA LETTER RO" #x308D)
- ("HIRAGANA LETTER SMALL WA" #x308E)
- ("HIRAGANA LETTER WA" #x308F)
- ("HIRAGANA LETTER WI" #x3090)
- ("HIRAGANA LETTER WE" #x3091)
- ("HIRAGANA LETTER WO" #x3092)
- ("HIRAGANA LETTER N" #x3093)
- ("HIRAGANA LETTER VU" #x3094)
- ("HIRAGANA LETTER SMALL KA" #x3095)
- ("HIRAGANA LETTER SMALL KE" #x3096)
- ("COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK" #x3099)
- ("COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309A)
- ("KATAKANA-HIRAGANA VOICED SOUND MARK" #x309B)
- ("KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309C)
- ("HIRAGANA ITERATION MARK" #x309D)
- ("HIRAGANA VOICED ITERATION MARK" #x309E)
- ("HIRAGANA DIGRAPH YORI" #x309F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'katakana
- '(("KATAKANA-HIRAGANA DOUBLE HYPHEN" #x30A0)
- ("KATAKANA LETTER SMALL A" #x30A1)
- ("KATAKANA LETTER A" #x30A2)
- ("KATAKANA LETTER SMALL I" #x30A3)
- ("KATAKANA LETTER I" #x30A4)
- ("KATAKANA LETTER SMALL U" #x30A5)
- ("KATAKANA LETTER U" #x30A6)
- ("KATAKANA LETTER SMALL E" #x30A7)
- ("KATAKANA LETTER E" #x30A8)
- ("KATAKANA LETTER SMALL O" #x30A9)
- ("KATAKANA LETTER O" #x30AA)
- ("KATAKANA LETTER KA" #x30AB)
- ("KATAKANA LETTER GA" #x30AC)
- ("KATAKANA LETTER KI" #x30AD)
- ("KATAKANA LETTER GI" #x30AE)
- ("KATAKANA LETTER KU" #x30AF)
- ("KATAKANA LETTER GU" #x30B0)
- ("KATAKANA LETTER KE" #x30B1)
- ("KATAKANA LETTER GE" #x30B2)
- ("KATAKANA LETTER KO" #x30B3)
- ("KATAKANA LETTER GO" #x30B4)
- ("KATAKANA LETTER SA" #x30B5)
- ("KATAKANA LETTER ZA" #x30B6)
- ("KATAKANA LETTER SI" #x30B7)
- ("KATAKANA LETTER ZI" #x30B8)
- ("KATAKANA LETTER SU" #x30B9)
- ("KATAKANA LETTER ZU" #x30BA)
- ("KATAKANA LETTER SE" #x30BB)
- ("KATAKANA LETTER ZE" #x30BC)
- ("KATAKANA LETTER SO" #x30BD)
- ("KATAKANA LETTER ZO" #x30BE)
- ("KATAKANA LETTER TA" #x30BF)
- ("KATAKANA LETTER DA" #x30C0)
- ("KATAKANA LETTER TI" #x30C1)
- ("KATAKANA LETTER DI" #x30C2)
- ("KATAKANA LETTER SMALL TU" #x30C3)
- ("KATAKANA LETTER TU" #x30C4)
- ("KATAKANA LETTER DU" #x30C5)
- ("KATAKANA LETTER TE" #x30C6)
- ("KATAKANA LETTER DE" #x30C7)
- ("KATAKANA LETTER TO" #x30C8)
- ("KATAKANA LETTER DO" #x30C9)
- ("KATAKANA LETTER NA" #x30CA)
- ("KATAKANA LETTER NI" #x30CB)
- ("KATAKANA LETTER NU" #x30CC)
- ("KATAKANA LETTER NE" #x30CD)
- ("KATAKANA LETTER NO" #x30CE)
- ("KATAKANA LETTER HA" #x30CF)
- ("KATAKANA LETTER BA" #x30D0)
- ("KATAKANA LETTER PA" #x30D1)
- ("KATAKANA LETTER HI" #x30D2)
- ("KATAKANA LETTER BI" #x30D3)
- ("KATAKANA LETTER PI" #x30D4)
- ("KATAKANA LETTER HU" #x30D5)
- ("KATAKANA LETTER BU" #x30D6)
- ("KATAKANA LETTER PU" #x30D7)
- ("KATAKANA LETTER HE" #x30D8)
- ("KATAKANA LETTER BE" #x30D9)
- ("KATAKANA LETTER PE" #x30DA)
- ("KATAKANA LETTER HO" #x30DB)
- ("KATAKANA LETTER BO" #x30DC)
- ("KATAKANA LETTER PO" #x30DD)
- ("KATAKANA LETTER MA" #x30DE)
- ("KATAKANA LETTER MI" #x30DF)
- ("KATAKANA LETTER MU" #x30E0)
- ("KATAKANA LETTER ME" #x30E1)
- ("KATAKANA LETTER MO" #x30E2)
- ("KATAKANA LETTER SMALL YA" #x30E3)
- ("KATAKANA LETTER YA" #x30E4)
- ("KATAKANA LETTER SMALL YU" #x30E5)
- ("KATAKANA LETTER YU" #x30E6)
- ("KATAKANA LETTER SMALL YO" #x30E7)
- ("KATAKANA LETTER YO" #x30E8)
- ("KATAKANA LETTER RA" #x30E9)
- ("KATAKANA LETTER RI" #x30EA)
- ("KATAKANA LETTER RU" #x30EB)
- ("KATAKANA LETTER RE" #x30EC)
- ("KATAKANA LETTER RO" #x30ED)
- ("KATAKANA LETTER SMALL WA" #x30EE)
- ("KATAKANA LETTER WA" #x30EF)
- ("KATAKANA LETTER WI" #x30F0)
- ("KATAKANA LETTER WE" #x30F1)
- ("KATAKANA LETTER WO" #x30F2)
- ("KATAKANA LETTER N" #x30F3)
- ("KATAKANA LETTER VU" #x30F4)
- ("KATAKANA LETTER SMALL KA" #x30F5)
- ("KATAKANA LETTER SMALL KE" #x30F6)
- ("KATAKANA LETTER VA" #x30F7)
- ("KATAKANA LETTER VI" #x30F8)
- ("KATAKANA LETTER VE" #x30F9)
- ("KATAKANA LETTER VO" #x30FA)
- ("KATAKANA MIDDLE DOT" #x30FB)
- ("KATAKANA-HIRAGANA PROLONGED SOUND MARK" #x30FC)
- ("KATAKANA ITERATION MARK" #x30FD)
- ("KATAKANA VOICED ITERATION MARK" #x30FE)
- ("KATAKANA DIGRAPH KOTO" #x30FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'bopomofo
- '(("BOPOMOFO LETTER B" #x3105)
- ("BOPOMOFO LETTER P" #x3106)
- ("BOPOMOFO LETTER M" #x3107)
- ("BOPOMOFO LETTER F" #x3108)
- ("BOPOMOFO LETTER D" #x3109)
- ("BOPOMOFO LETTER T" #x310A)
- ("BOPOMOFO LETTER N" #x310B)
- ("BOPOMOFO LETTER L" #x310C)
- ("BOPOMOFO LETTER G" #x310D)
- ("BOPOMOFO LETTER K" #x310E)
- ("BOPOMOFO LETTER H" #x310F)
- ("BOPOMOFO LETTER J" #x3110)
- ("BOPOMOFO LETTER Q" #x3111)
- ("BOPOMOFO LETTER X" #x3112)
- ("BOPOMOFO LETTER ZH" #x3113)
- ("BOPOMOFO LETTER CH" #x3114)
- ("BOPOMOFO LETTER SH" #x3115)
- ("BOPOMOFO LETTER R" #x3116)
- ("BOPOMOFO LETTER Z" #x3117)
- ("BOPOMOFO LETTER C" #x3118)
- ("BOPOMOFO LETTER S" #x3119)
- ("BOPOMOFO LETTER A" #x311A)
- ("BOPOMOFO LETTER O" #x311B)
- ("BOPOMOFO LETTER E" #x311C)
- ("BOPOMOFO LETTER EH" #x311D)
- ("BOPOMOFO LETTER AI" #x311E)
- ("BOPOMOFO LETTER EI" #x311F)
- ("BOPOMOFO LETTER AU" #x3120)
- ("BOPOMOFO LETTER OU" #x3121)
- ("BOPOMOFO LETTER AN" #x3122)
- ("BOPOMOFO LETTER EN" #x3123)
- ("BOPOMOFO LETTER ANG" #x3124)
- ("BOPOMOFO LETTER ENG" #x3125)
- ("BOPOMOFO LETTER ER" #x3126)
- ("BOPOMOFO LETTER I" #x3127)
- ("BOPOMOFO LETTER U" #x3128)
- ("BOPOMOFO LETTER IU" #x3129)
- ("BOPOMOFO LETTER V" #x312A)
- ("BOPOMOFO LETTER NG" #x312B)
- ("BOPOMOFO LETTER GN" #x312C)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'hangul-compatibility-jamo
- '(("HANGUL LETTER KIYEOK" #x3131)
- ("HANGUL LETTER SSANGKIYEOK" #x3132)
- ("HANGUL LETTER KIYEOK-SIOS" #x3133)
- ("HANGUL LETTER NIEUN" #x3134)
- ("HANGUL LETTER NIEUN-CIEUC" #x3135)
- ("HANGUL LETTER NIEUN-HIEUH" #x3136)
- ("HANGUL LETTER TIKEUT" #x3137)
- ("HANGUL LETTER SSANGTIKEUT" #x3138)
- ("HANGUL LETTER RIEUL" #x3139)
- ("HANGUL LETTER RIEUL-KIYEOK" #x313A)
- ("HANGUL LETTER RIEUL-MIEUM" #x313B)
- ("HANGUL LETTER RIEUL-PIEUP" #x313C)
- ("HANGUL LETTER RIEUL-SIOS" #x313D)
- ("HANGUL LETTER RIEUL-THIEUTH" #x313E)
- ("HANGUL LETTER RIEUL-PHIEUPH" #x313F)
- ("HANGUL LETTER RIEUL-HIEUH" #x3140)
- ("HANGUL LETTER MIEUM" #x3141)
- ("HANGUL LETTER PIEUP" #x3142)
- ("HANGUL LETTER SSANGPIEUP" #x3143)
- ("HANGUL LETTER PIEUP-SIOS" #x3144)
- ("HANGUL LETTER SIOS" #x3145)
- ("HANGUL LETTER SSANGSIOS" #x3146)
- ("HANGUL LETTER IEUNG" #x3147)
- ("HANGUL LETTER CIEUC" #x3148)
- ("HANGUL LETTER SSANGCIEUC" #x3149)
- ("HANGUL LETTER CHIEUCH" #x314A)
- ("HANGUL LETTER KHIEUKH" #x314B)
- ("HANGUL LETTER THIEUTH" #x314C)
- ("HANGUL LETTER PHIEUPH" #x314D)
- ("HANGUL LETTER HIEUH" #x314E)
- ("HANGUL LETTER A" #x314F)
- ("HANGUL LETTER AE" #x3150)
- ("HANGUL LETTER YA" #x3151)
- ("HANGUL LETTER YAE" #x3152)
- ("HANGUL LETTER EO" #x3153)
- ("HANGUL LETTER E" #x3154)
- ("HANGUL LETTER YEO" #x3155)
- ("HANGUL LETTER YE" #x3156)
- ("HANGUL LETTER O" #x3157)
- ("HANGUL LETTER WA" #x3158)
- ("HANGUL LETTER WAE" #x3159)
- ("HANGUL LETTER OE" #x315A)
- ("HANGUL LETTER YO" #x315B)
- ("HANGUL LETTER U" #x315C)
- ("HANGUL LETTER WEO" #x315D)
- ("HANGUL LETTER WE" #x315E)
- ("HANGUL LETTER WI" #x315F)
- ("HANGUL LETTER YU" #x3160)
- ("HANGUL LETTER EU" #x3161)
- ("HANGUL LETTER YI" #x3162)
- ("HANGUL LETTER I" #x3163)
- ("HANGUL FILLER" #x3164)
- ("HANGUL LETTER SSANGNIEUN" #x3165)
- ("HANGUL LETTER NIEUN-TIKEUT" #x3166)
- ("HANGUL LETTER NIEUN-SIOS" #x3167)
- ("HANGUL LETTER NIEUN-PANSIOS" #x3168)
- ("HANGUL LETTER RIEUL-KIYEOK-SIOS" #x3169)
- ("HANGUL LETTER RIEUL-TIKEUT" #x316A)
- ("HANGUL LETTER RIEUL-PIEUP-SIOS" #x316B)
- ("HANGUL LETTER RIEUL-PANSIOS" #x316C)
- ("HANGUL LETTER RIEUL-YEORINHIEUH" #x316D)
- ("HANGUL LETTER MIEUM-PIEUP" #x316E)
- ("HANGUL LETTER MIEUM-SIOS" #x316F)
- ("HANGUL LETTER MIEUM-PANSIOS" #x3170)
- ("HANGUL LETTER KAPYEOUNMIEUM" #x3171)
- ("HANGUL LETTER PIEUP-KIYEOK" #x3172)
- ("HANGUL LETTER PIEUP-TIKEUT" #x3173)
- ("HANGUL LETTER PIEUP-SIOS-KIYEOK" #x3174)
- ("HANGUL LETTER PIEUP-SIOS-TIKEUT" #x3175)
- ("HANGUL LETTER PIEUP-CIEUC" #x3176)
- ("HANGUL LETTER PIEUP-THIEUTH" #x3177)
- ("HANGUL LETTER KAPYEOUNPIEUP" #x3178)
- ("HANGUL LETTER KAPYEOUNSSANGPIEUP" #x3179)
- ("HANGUL LETTER SIOS-KIYEOK" #x317A)
- ("HANGUL LETTER SIOS-NIEUN" #x317B)
- ("HANGUL LETTER SIOS-TIKEUT" #x317C)
- ("HANGUL LETTER SIOS-PIEUP" #x317D)
- ("HANGUL LETTER SIOS-CIEUC" #x317E)
- ("HANGUL LETTER PANSIOS" #x317F)
- ("HANGUL LETTER SSANGIEUNG" #x3180)
- ("HANGUL LETTER YESIEUNG" #x3181)
- ("HANGUL LETTER YESIEUNG-SIOS" #x3182)
- ("HANGUL LETTER YESIEUNG-PANSIOS" #x3183)
- ("HANGUL LETTER KAPYEOUNPHIEUPH" #x3184)
- ("HANGUL LETTER SSANGHIEUH" #x3185)
- ("HANGUL LETTER YEORINHIEUH" #x3186)
- ("HANGUL LETTER YO-YA" #x3187)
- ("HANGUL LETTER YO-YAE" #x3188)
- ("HANGUL LETTER YO-I" #x3189)
- ("HANGUL LETTER YU-YEO" #x318A)
- ("HANGUL LETTER YU-YE" #x318B)
- ("HANGUL LETTER YU-I" #x318C)
- ("HANGUL LETTER ARAEA" #x318D)
- ("HANGUL LETTER ARAEAE" #x318E)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'kanbun
- '(("IDEOGRAPHIC ANNOTATION LINKING MARK" #x3190)
- ("IDEOGRAPHIC ANNOTATION REVERSE MARK" #x3191)
- ("IDEOGRAPHIC ANNOTATION ONE MARK" #x3192)
- ("IDEOGRAPHIC ANNOTATION TWO MARK" #x3193)
- ("IDEOGRAPHIC ANNOTATION THREE MARK" #x3194)
- ("IDEOGRAPHIC ANNOTATION FOUR MARK" #x3195)
- ("IDEOGRAPHIC ANNOTATION TOP MARK" #x3196)
- ("IDEOGRAPHIC ANNOTATION MIDDLE MARK" #x3197)
- ("IDEOGRAPHIC ANNOTATION BOTTOM MARK" #x3198)
- ("IDEOGRAPHIC ANNOTATION FIRST MARK" #x3199)
- ("IDEOGRAPHIC ANNOTATION SECOND MARK" #x319A)
- ("IDEOGRAPHIC ANNOTATION THIRD MARK" #x319B)
- ("IDEOGRAPHIC ANNOTATION FOURTH MARK" #x319C)
- ("IDEOGRAPHIC ANNOTATION HEAVEN MARK" #x319D)
- ("IDEOGRAPHIC ANNOTATION EARTH MARK" #x319E)
- ("IDEOGRAPHIC ANNOTATION MAN MARK" #x319F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'bopomofo-extended
- '(("BOPOMOFO LETTER BU" #x31A0)
- ("BOPOMOFO LETTER ZI" #x31A1)
- ("BOPOMOFO LETTER JI" #x31A2)
- ("BOPOMOFO LETTER GU" #x31A3)
- ("BOPOMOFO LETTER EE" #x31A4)
- ("BOPOMOFO LETTER ENN" #x31A5)
- ("BOPOMOFO LETTER OO" #x31A6)
- ("BOPOMOFO LETTER ONN" #x31A7)
- ("BOPOMOFO LETTER IR" #x31A8)
- ("BOPOMOFO LETTER ANN" #x31A9)
- ("BOPOMOFO LETTER INN" #x31AA)
- ("BOPOMOFO LETTER UNN" #x31AB)
- ("BOPOMOFO LETTER IM" #x31AC)
- ("BOPOMOFO LETTER NGG" #x31AD)
- ("BOPOMOFO LETTER AINN" #x31AE)
- ("BOPOMOFO LETTER AUNN" #x31AF)
- ("BOPOMOFO LETTER AM" #x31B0)
- ("BOPOMOFO LETTER OM" #x31B1)
- ("BOPOMOFO LETTER ONG" #x31B2)
- ("BOPOMOFO LETTER INNN" #x31B3)
- ("BOPOMOFO FINAL LETTER P" #x31B4)
- ("BOPOMOFO FINAL LETTER T" #x31B5)
- ("BOPOMOFO FINAL LETTER K" #x31B6)
- ("BOPOMOFO FINAL LETTER H" #x31B7)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'katakana-phonetic-extensions
- '(("KATAKANA LETTER SMALL KU" #x31F0)
- ("KATAKANA LETTER SMALL SI" #x31F1)
- ("KATAKANA LETTER SMALL SU" #x31F2)
- ("KATAKANA LETTER SMALL TO" #x31F3)
- ("KATAKANA LETTER SMALL NU" #x31F4)
- ("KATAKANA LETTER SMALL HA" #x31F5)
- ("KATAKANA LETTER SMALL HI" #x31F6)
- ("KATAKANA LETTER SMALL HU" #x31F7)
- ("KATAKANA LETTER SMALL HE" #x31F8)
- ("KATAKANA LETTER SMALL HO" #x31F9)
- ("KATAKANA LETTER SMALL MU" #x31FA)
- ("KATAKANA LETTER SMALL RA" #x31FB)
- ("KATAKANA LETTER SMALL RI" #x31FC)
- ("KATAKANA LETTER SMALL RU" #x31FD)
- ("KATAKANA LETTER SMALL RE" #x31FE)
- ("KATAKANA LETTER SMALL RO" #x31FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'enclosed-cjk-letters-and-months
- '(("PARENTHESIZED HANGUL KIYEOK" #x3200)
- ("PARENTHESIZED HANGUL NIEUN" #x3201)
- ("PARENTHESIZED HANGUL TIKEUT" #x3202)
- ("PARENTHESIZED HANGUL RIEUL" #x3203)
- ("PARENTHESIZED HANGUL MIEUM" #x3204)
- ("PARENTHESIZED HANGUL PIEUP" #x3205)
- ("PARENTHESIZED HANGUL SIOS" #x3206)
- ("PARENTHESIZED HANGUL IEUNG" #x3207)
- ("PARENTHESIZED HANGUL CIEUC" #x3208)
- ("PARENTHESIZED HANGUL CHIEUCH" #x3209)
- ("PARENTHESIZED HANGUL KHIEUKH" #x320A)
- ("PARENTHESIZED HANGUL THIEUTH" #x320B)
- ("PARENTHESIZED HANGUL PHIEUPH" #x320C)
- ("PARENTHESIZED HANGUL HIEUH" #x320D)
- ("PARENTHESIZED HANGUL KIYEOK A" #x320E)
- ("PARENTHESIZED HANGUL NIEUN A" #x320F)
- ("PARENTHESIZED HANGUL TIKEUT A" #x3210)
- ("PARENTHESIZED HANGUL RIEUL A" #x3211)
- ("PARENTHESIZED HANGUL MIEUM A" #x3212)
- ("PARENTHESIZED HANGUL PIEUP A" #x3213)
- ("PARENTHESIZED HANGUL SIOS A" #x3214)
- ("PARENTHESIZED HANGUL IEUNG A" #x3215)
- ("PARENTHESIZED HANGUL CIEUC A" #x3216)
- ("PARENTHESIZED HANGUL CHIEUCH A" #x3217)
- ("PARENTHESIZED HANGUL KHIEUKH A" #x3218)
- ("PARENTHESIZED HANGUL THIEUTH A" #x3219)
- ("PARENTHESIZED HANGUL PHIEUPH A" #x321A)
- ("PARENTHESIZED HANGUL HIEUH A" #x321B)
- ("PARENTHESIZED HANGUL CIEUC U" #x321C)
- ("PARENTHESIZED IDEOGRAPH ONE" #x3220)
- ("PARENTHESIZED IDEOGRAPH TWO" #x3221)
- ("PARENTHESIZED IDEOGRAPH THREE" #x3222)
- ("PARENTHESIZED IDEOGRAPH FOUR" #x3223)
- ("PARENTHESIZED IDEOGRAPH FIVE" #x3224)
- ("PARENTHESIZED IDEOGRAPH SIX" #x3225)
- ("PARENTHESIZED IDEOGRAPH SEVEN" #x3226)
- ("PARENTHESIZED IDEOGRAPH EIGHT" #x3227)
- ("PARENTHESIZED IDEOGRAPH NINE" #x3228)
- ("PARENTHESIZED IDEOGRAPH TEN" #x3229)
- ("PARENTHESIZED IDEOGRAPH MOON" #x322A)
- ("PARENTHESIZED IDEOGRAPH FIRE" #x322B)
- ("PARENTHESIZED IDEOGRAPH WATER" #x322C)
- ("PARENTHESIZED IDEOGRAPH WOOD" #x322D)
- ("PARENTHESIZED IDEOGRAPH METAL" #x322E)
- ("PARENTHESIZED IDEOGRAPH EARTH" #x322F)
- ("PARENTHESIZED IDEOGRAPH SUN" #x3230)
- ("PARENTHESIZED IDEOGRAPH STOCK" #x3231)
- ("PARENTHESIZED IDEOGRAPH HAVE" #x3232)
- ("PARENTHESIZED IDEOGRAPH SOCIETY" #x3233)
- ("PARENTHESIZED IDEOGRAPH NAME" #x3234)
- ("PARENTHESIZED IDEOGRAPH SPECIAL" #x3235)
- ("PARENTHESIZED IDEOGRAPH FINANCIAL" #x3236)
- ("PARENTHESIZED IDEOGRAPH CONGRATULATION" #x3237)
- ("PARENTHESIZED IDEOGRAPH LABOR" #x3238)
- ("PARENTHESIZED IDEOGRAPH REPRESENT" #x3239)
- ("PARENTHESIZED IDEOGRAPH CALL" #x323A)
- ("PARENTHESIZED IDEOGRAPH STUDY" #x323B)
- ("PARENTHESIZED IDEOGRAPH SUPERVISE" #x323C)
- ("PARENTHESIZED IDEOGRAPH ENTERPRISE" #x323D)
- ("PARENTHESIZED IDEOGRAPH RESOURCE" #x323E)
- ("PARENTHESIZED IDEOGRAPH ALLIANCE" #x323F)
- ("PARENTHESIZED IDEOGRAPH FESTIVAL" #x3240)
- ("PARENTHESIZED IDEOGRAPH REST" #x3241)
- ("PARENTHESIZED IDEOGRAPH SELF" #x3242)
- ("PARENTHESIZED IDEOGRAPH REACH" #x3243)
- ("CIRCLED NUMBER TWENTY ONE" #x3251)
- ("CIRCLED NUMBER TWENTY TWO" #x3252)
- ("CIRCLED NUMBER TWENTY THREE" #x3253)
- ("CIRCLED NUMBER TWENTY FOUR" #x3254)
- ("CIRCLED NUMBER TWENTY FIVE" #x3255)
- ("CIRCLED NUMBER TWENTY SIX" #x3256)
- ("CIRCLED NUMBER TWENTY SEVEN" #x3257)
- ("CIRCLED NUMBER TWENTY EIGHT" #x3258)
- ("CIRCLED NUMBER TWENTY NINE" #x3259)
- ("CIRCLED NUMBER THIRTY" #x325A)
- ("CIRCLED NUMBER THIRTY ONE" #x325B)
- ("CIRCLED NUMBER THIRTY TWO" #x325C)
- ("CIRCLED NUMBER THIRTY THREE" #x325D)
- ("CIRCLED NUMBER THIRTY FOUR" #x325E)
- ("CIRCLED NUMBER THIRTY FIVE" #x325F)
- ("CIRCLED HANGUL KIYEOK" #x3260)
- ("CIRCLED HANGUL NIEUN" #x3261)
- ("CIRCLED HANGUL TIKEUT" #x3262)
- ("CIRCLED HANGUL RIEUL" #x3263)
- ("CIRCLED HANGUL MIEUM" #x3264)
- ("CIRCLED HANGUL PIEUP" #x3265)
- ("CIRCLED HANGUL SIOS" #x3266)
- ("CIRCLED HANGUL IEUNG" #x3267)
- ("CIRCLED HANGUL CIEUC" #x3268)
- ("CIRCLED HANGUL CHIEUCH" #x3269)
- ("CIRCLED HANGUL KHIEUKH" #x326A)
- ("CIRCLED HANGUL THIEUTH" #x326B)
- ("CIRCLED HANGUL PHIEUPH" #x326C)
- ("CIRCLED HANGUL HIEUH" #x326D)
- ("CIRCLED HANGUL KIYEOK A" #x326E)
- ("CIRCLED HANGUL NIEUN A" #x326F)
- ("CIRCLED HANGUL TIKEUT A" #x3270)
- ("CIRCLED HANGUL RIEUL A" #x3271)
- ("CIRCLED HANGUL MIEUM A" #x3272)
- ("CIRCLED HANGUL PIEUP A" #x3273)
- ("CIRCLED HANGUL SIOS A" #x3274)
- ("CIRCLED HANGUL IEUNG A" #x3275)
- ("CIRCLED HANGUL CIEUC A" #x3276)
- ("CIRCLED HANGUL CHIEUCH A" #x3277)
- ("CIRCLED HANGUL KHIEUKH A" #x3278)
- ("CIRCLED HANGUL THIEUTH A" #x3279)
- ("CIRCLED HANGUL PHIEUPH A" #x327A)
- ("CIRCLED HANGUL HIEUH A" #x327B)
- ("KOREAN STANDARD SYMBOL" #x327F)
- ("CIRCLED IDEOGRAPH ONE" #x3280)
- ("CIRCLED IDEOGRAPH TWO" #x3281)
- ("CIRCLED IDEOGRAPH THREE" #x3282)
- ("CIRCLED IDEOGRAPH FOUR" #x3283)
- ("CIRCLED IDEOGRAPH FIVE" #x3284)
- ("CIRCLED IDEOGRAPH SIX" #x3285)
- ("CIRCLED IDEOGRAPH SEVEN" #x3286)
- ("CIRCLED IDEOGRAPH EIGHT" #x3287)
- ("CIRCLED IDEOGRAPH NINE" #x3288)
- ("CIRCLED IDEOGRAPH TEN" #x3289)
- ("CIRCLED IDEOGRAPH MOON" #x328A)
- ("CIRCLED IDEOGRAPH FIRE" #x328B)
- ("CIRCLED IDEOGRAPH WATER" #x328C)
- ("CIRCLED IDEOGRAPH WOOD" #x328D)
- ("CIRCLED IDEOGRAPH METAL" #x328E)
- ("CIRCLED IDEOGRAPH EARTH" #x328F)
- ("CIRCLED IDEOGRAPH SUN" #x3290)
- ("CIRCLED IDEOGRAPH STOCK" #x3291)
- ("CIRCLED IDEOGRAPH HAVE" #x3292)
- ("CIRCLED IDEOGRAPH SOCIETY" #x3293)
- ("CIRCLED IDEOGRAPH NAME" #x3294)
- ("CIRCLED IDEOGRAPH SPECIAL" #x3295)
- ("CIRCLED IDEOGRAPH FINANCIAL" #x3296)
- ("CIRCLED IDEOGRAPH CONGRATULATION" #x3297)
- ("CIRCLED IDEOGRAPH LABOR" #x3298)
- ("CIRCLED IDEOGRAPH SECRET" #x3299)
- ("CIRCLED IDEOGRAPH MALE" #x329A)
- ("CIRCLED IDEOGRAPH FEMALE" #x329B)
- ("CIRCLED IDEOGRAPH SUITABLE" #x329C)
- ("CIRCLED IDEOGRAPH EXCELLENT" #x329D)
- ("CIRCLED IDEOGRAPH PRINT" #x329E)
- ("CIRCLED IDEOGRAPH ATTENTION" #x329F)
- ("CIRCLED IDEOGRAPH ITEM" #x32A0)
- ("CIRCLED IDEOGRAPH REST" #x32A1)
- ("CIRCLED IDEOGRAPH COPY" #x32A2)
- ("CIRCLED IDEOGRAPH CORRECT" #x32A3)
- ("CIRCLED IDEOGRAPH HIGH" #x32A4)
- ("CIRCLED IDEOGRAPH CENTRE" #x32A5)
- ("CIRCLED IDEOGRAPH LOW" #x32A6)
- ("CIRCLED IDEOGRAPH LEFT" #x32A7)
- ("CIRCLED IDEOGRAPH RIGHT" #x32A8)
- ("CIRCLED IDEOGRAPH MEDICINE" #x32A9)
- ("CIRCLED IDEOGRAPH RELIGION" #x32AA)
- ("CIRCLED IDEOGRAPH STUDY" #x32AB)
- ("CIRCLED IDEOGRAPH SUPERVISE" #x32AC)
- ("CIRCLED IDEOGRAPH ENTERPRISE" #x32AD)
- ("CIRCLED IDEOGRAPH RESOURCE" #x32AE)
- ("CIRCLED IDEOGRAPH ALLIANCE" #x32AF)
- ("CIRCLED IDEOGRAPH NIGHT" #x32B0)
- ("CIRCLED NUMBER THIRTY SIX" #x32B1)
- ("CIRCLED NUMBER THIRTY SEVEN" #x32B2)
- ("CIRCLED NUMBER THIRTY EIGHT" #x32B3)
- ("CIRCLED NUMBER THIRTY NINE" #x32B4)
- ("CIRCLED NUMBER FORTY" #x32B5)
- ("CIRCLED NUMBER FORTY ONE" #x32B6)
- ("CIRCLED NUMBER FORTY TWO" #x32B7)
- ("CIRCLED NUMBER FORTY THREE" #x32B8)
- ("CIRCLED NUMBER FORTY FOUR" #x32B9)
- ("CIRCLED NUMBER FORTY FIVE" #x32BA)
- ("CIRCLED NUMBER FORTY SIX" #x32BB)
- ("CIRCLED NUMBER FORTY SEVEN" #x32BC)
- ("CIRCLED NUMBER FORTY EIGHT" #x32BD)
- ("CIRCLED NUMBER FORTY NINE" #x32BE)
- ("CIRCLED NUMBER FIFTY" #x32BF)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY" #x32C0)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY" #x32C1)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH" #x32C2)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL" #x32C3)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY" #x32C4)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE" #x32C5)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY" #x32C6)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST" #x32C7)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER" #x32C8)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER" #x32C9)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER" #x32CA)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER" #x32CB)
- ("CIRCLED KATAKANA A" #x32D0)
- ("CIRCLED KATAKANA I" #x32D1)
- ("CIRCLED KATAKANA U" #x32D2)
- ("CIRCLED KATAKANA E" #x32D3)
- ("CIRCLED KATAKANA O" #x32D4)
- ("CIRCLED KATAKANA KA" #x32D5)
- ("CIRCLED KATAKANA KI" #x32D6)
- ("CIRCLED KATAKANA KU" #x32D7)
- ("CIRCLED KATAKANA KE" #x32D8)
- ("CIRCLED KATAKANA KO" #x32D9)
- ("CIRCLED KATAKANA SA" #x32DA)
- ("CIRCLED KATAKANA SI" #x32DB)
- ("CIRCLED KATAKANA SU" #x32DC)
- ("CIRCLED KATAKANA SE" #x32DD)
- ("CIRCLED KATAKANA SO" #x32DE)
- ("CIRCLED KATAKANA TA" #x32DF)
- ("CIRCLED KATAKANA TI" #x32E0)
- ("CIRCLED KATAKANA TU" #x32E1)
- ("CIRCLED KATAKANA TE" #x32E2)
- ("CIRCLED KATAKANA TO" #x32E3)
- ("CIRCLED KATAKANA NA" #x32E4)
- ("CIRCLED KATAKANA NI" #x32E5)
- ("CIRCLED KATAKANA NU" #x32E6)
- ("CIRCLED KATAKANA NE" #x32E7)
- ("CIRCLED KATAKANA NO" #x32E8)
- ("CIRCLED KATAKANA HA" #x32E9)
- ("CIRCLED KATAKANA HI" #x32EA)
- ("CIRCLED KATAKANA HU" #x32EB)
- ("CIRCLED KATAKANA HE" #x32EC)
- ("CIRCLED KATAKANA HO" #x32ED)
- ("CIRCLED KATAKANA MA" #x32EE)
- ("CIRCLED KATAKANA MI" #x32EF)
- ("CIRCLED KATAKANA MU" #x32F0)
- ("CIRCLED KATAKANA ME" #x32F1)
- ("CIRCLED KATAKANA MO" #x32F2)
- ("CIRCLED KATAKANA YA" #x32F3)
- ("CIRCLED KATAKANA YU" #x32F4)
- ("CIRCLED KATAKANA YO" #x32F5)
- ("CIRCLED KATAKANA RA" #x32F6)
- ("CIRCLED KATAKANA RI" #x32F7)
- ("CIRCLED KATAKANA RU" #x32F8)
- ("CIRCLED KATAKANA RE" #x32F9)
- ("CIRCLED KATAKANA RO" #x32FA)
- ("CIRCLED KATAKANA WA" #x32FB)
- ("CIRCLED KATAKANA WI" #x32FC)
- ("CIRCLED KATAKANA WE" #x32FD)
- ("CIRCLED KATAKANA WO" #x32FE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cjk-compatibility
- '(("SQUARE APAATO" #x3300)
- ("SQUARE ARUHUA" #x3301)
- ("SQUARE ANPEA" #x3302)
- ("SQUARE AARU" #x3303)
- ("SQUARE ININGU" #x3304)
- ("SQUARE INTI" #x3305)
- ("SQUARE UON" #x3306)
- ("SQUARE ESUKUUDO" #x3307)
- ("SQUARE EEKAA" #x3308)
- ("SQUARE ONSU" #x3309)
- ("SQUARE OOMU" #x330A)
- ("SQUARE KAIRI" #x330B)
- ("SQUARE KARATTO" #x330C)
- ("SQUARE KARORII" #x330D)
- ("SQUARE GARON" #x330E)
- ("SQUARE GANMA" #x330F)
- ("SQUARE GIGA" #x3310)
- ("SQUARE GINII" #x3311)
- ("SQUARE KYURII" #x3312)
- ("SQUARE GIRUDAA" #x3313)
- ("SQUARE KIRO" #x3314)
- ("SQUARE KIROGURAMU" #x3315)
- ("SQUARE KIROMEETORU" #x3316)
- ("SQUARE KIROWATTO" #x3317)
- ("SQUARE GURAMU" #x3318)
- ("SQUARE GURAMUTON" #x3319)
- ("SQUARE KURUZEIRO" #x331A)
- ("SQUARE KUROONE" #x331B)
- ("SQUARE KEESU" #x331C)
- ("SQUARE KORUNA" #x331D)
- ("SQUARE KOOPO" #x331E)
- ("SQUARE SAIKURU" #x331F)
- ("SQUARE SANTIIMU" #x3320)
- ("SQUARE SIRINGU" #x3321)
- ("SQUARE SENTI" #x3322)
- ("SQUARE SENTO" #x3323)
- ("SQUARE DAASU" #x3324)
- ("SQUARE DESI" #x3325)
- ("SQUARE DORU" #x3326)
- ("SQUARE TON" #x3327)
- ("SQUARE NANO" #x3328)
- ("SQUARE NOTTO" #x3329)
- ("SQUARE HAITU" #x332A)
- ("SQUARE PAASENTO" #x332B)
- ("SQUARE PAATU" #x332C)
- ("SQUARE BAARERU" #x332D)
- ("SQUARE PIASUTORU" #x332E)
- ("SQUARE PIKURU" #x332F)
- ("SQUARE PIKO" #x3330)
- ("SQUARE BIRU" #x3331)
- ("SQUARE HUARADDO" #x3332)
- ("SQUARE HUIITO" #x3333)
- ("SQUARE BUSSYERU" #x3334)
- ("SQUARE HURAN" #x3335)
- ("SQUARE HEKUTAARU" #x3336)
- ("SQUARE PESO" #x3337)
- ("SQUARE PENIHI" #x3338)
- ("SQUARE HERUTU" #x3339)
- ("SQUARE PENSU" #x333A)
- ("SQUARE PEEZI" #x333B)
- ("SQUARE BEETA" #x333C)
- ("SQUARE POINTO" #x333D)
- ("SQUARE BORUTO" #x333E)
- ("SQUARE HON" #x333F)
- ("SQUARE PONDO" #x3340)
- ("SQUARE HOORU" #x3341)
- ("SQUARE HOON" #x3342)
- ("SQUARE MAIKURO" #x3343)
- ("SQUARE MAIRU" #x3344)
- ("SQUARE MAHHA" #x3345)
- ("SQUARE MARUKU" #x3346)
- ("SQUARE MANSYON" #x3347)
- ("SQUARE MIKURON" #x3348)
- ("SQUARE MIRI" #x3349)
- ("SQUARE MIRIBAARU" #x334A)
- ("SQUARE MEGA" #x334B)
- ("SQUARE MEGATON" #x334C)
- ("SQUARE MEETORU" #x334D)
- ("SQUARE YAADO" #x334E)
- ("SQUARE YAARU" #x334F)
- ("SQUARE YUAN" #x3350)
- ("SQUARE RITTORU" #x3351)
- ("SQUARE RIRA" #x3352)
- ("SQUARE RUPII" #x3353)
- ("SQUARE RUUBURU" #x3354)
- ("SQUARE REMU" #x3355)
- ("SQUARE RENTOGEN" #x3356)
- ("SQUARE WATTO" #x3357)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO" #x3358)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE" #x3359)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO" #x335A)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE" #x335B)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR" #x335C)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE" #x335D)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX" #x335E)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN" #x335F)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT" #x3360)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE" #x3361)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN" #x3362)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN" #x3363)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE" #x3364)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN" #x3365)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN" #x3366)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN" #x3367)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN" #x3368)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN" #x3369)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN" #x336A)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN" #x336B)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY" #x336C)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE" #x336D)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO" #x336E)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE" #x336F)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR" #x3370)
- ("SQUARE HPA" #x3371)
- ("SQUARE DA" #x3372)
- ("SQUARE AU" #x3373)
- ("SQUARE BAR" #x3374)
- ("SQUARE OV" #x3375)
- ("SQUARE PC" #x3376)
- ("SQUARE ERA NAME HEISEI" #x337B)
- ("SQUARE ERA NAME SYOUWA" #x337C)
- ("SQUARE ERA NAME TAISYOU" #x337D)
- ("SQUARE ERA NAME MEIZI" #x337E)
- ("SQUARE CORPORATION" #x337F)
- ("SQUARE PA AMPS" #x3380)
- ("SQUARE NA" #x3381)
- ("SQUARE MU A" #x3382)
- ("SQUARE MA" #x3383)
- ("SQUARE KA" #x3384)
- ("SQUARE KB" #x3385)
- ("SQUARE MB" #x3386)
- ("SQUARE GB" #x3387)
- ("SQUARE CAL" #x3388)
- ("SQUARE KCAL" #x3389)
- ("SQUARE PF" #x338A)
- ("SQUARE NF" #x338B)
- ("SQUARE MU F" #x338C)
- ("SQUARE MU G" #x338D)
- ("SQUARE MG" #x338E)
- ("SQUARE KG" #x338F)
- ("SQUARE HZ" #x3390)
- ("SQUARE KHZ" #x3391)
- ("SQUARE MHZ" #x3392)
- ("SQUARE GHZ" #x3393)
- ("SQUARE THZ" #x3394)
- ("SQUARE MU L" #x3395)
- ("SQUARE ML" #x3396)
- ("SQUARE DL" #x3397)
- ("SQUARE KL" #x3398)
- ("SQUARE FM" #x3399)
- ("SQUARE NM" #x339A)
- ("SQUARE MU M" #x339B)
- ("SQUARE MM" #x339C)
- ("SQUARE CM" #x339D)
- ("SQUARE KM" #x339E)
- ("SQUARE MM SQUARED" #x339F)
- ("SQUARE CM SQUARED" #x33A0)
- ("SQUARE M SQUARED" #x33A1)
- ("SQUARE KM SQUARED" #x33A2)
- ("SQUARE MM CUBED" #x33A3)
- ("SQUARE CM CUBED" #x33A4)
- ("SQUARE M CUBED" #x33A5)
- ("SQUARE KM CUBED" #x33A6)
- ("SQUARE M OVER S" #x33A7)
- ("SQUARE M OVER S SQUARED" #x33A8)
- ("SQUARE PA" #x33A9)
- ("SQUARE KPA" #x33AA)
- ("SQUARE MPA" #x33AB)
- ("SQUARE GPA" #x33AC)
- ("SQUARE RAD" #x33AD)
- ("SQUARE RAD OVER S" #x33AE)
- ("SQUARE RAD OVER S SQUARED" #x33AF)
- ("SQUARE PS" #x33B0)
- ("SQUARE NS" #x33B1)
- ("SQUARE MU S" #x33B2)
- ("SQUARE MS" #x33B3)
- ("SQUARE PV" #x33B4)
- ("SQUARE NV" #x33B5)
- ("SQUARE MU V" #x33B6)
- ("SQUARE MV" #x33B7)
- ("SQUARE KV" #x33B8)
- ("SQUARE MV MEGA" #x33B9)
- ("SQUARE PW" #x33BA)
- ("SQUARE NW" #x33BB)
- ("SQUARE MU W" #x33BC)
- ("SQUARE MW" #x33BD)
- ("SQUARE KW" #x33BE)
- ("SQUARE MW MEGA" #x33BF)
- ("SQUARE K OHM" #x33C0)
- ("SQUARE M OHM" #x33C1)
- ("SQUARE AM" #x33C2)
- ("SQUARE BQ" #x33C3)
- ("SQUARE CC" #x33C4)
- ("SQUARE CD" #x33C5)
- ("SQUARE C OVER KG" #x33C6)
- ("SQUARE CO" #x33C7)
- ("SQUARE DB" #x33C8)
- ("SQUARE GY" #x33C9)
- ("SQUARE HA" #x33CA)
- ("SQUARE HP" #x33CB)
- ("SQUARE IN" #x33CC)
- ("SQUARE KK" #x33CD)
- ("SQUARE KM CAPITAL" #x33CE)
- ("SQUARE KT" #x33CF)
- ("SQUARE LM" #x33D0)
- ("SQUARE LN" #x33D1)
- ("SQUARE LOG" #x33D2)
- ("SQUARE LX" #x33D3)
- ("SQUARE MB SMALL" #x33D4)
- ("SQUARE MIL" #x33D5)
- ("SQUARE MOL" #x33D6)
- ("SQUARE PH" #x33D7)
- ("SQUARE PM" #x33D8)
- ("SQUARE PPM" #x33D9)
- ("SQUARE PR" #x33DA)
- ("SQUARE SR" #x33DB)
- ("SQUARE SV" #x33DC)
- ("SQUARE WB" #x33DD)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE" #x33E0)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO" #x33E1)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE" #x33E2)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR" #x33E3)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE" #x33E4)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX" #x33E5)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN" #x33E6)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT" #x33E7)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE" #x33E8)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN" #x33E9)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN" #x33EA)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE" #x33EB)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN" #x33EC)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN" #x33ED)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN" #x33EE)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN" #x33EF)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN" #x33F0)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN" #x33F1)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN" #x33F2)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY" #x33F3)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE" #x33F4)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO" #x33F5)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE" #x33F6)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR" #x33F7)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE" #x33F8)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX" #x33F9)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN" #x33FA)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT" #x33FB)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE" #x33FC)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY" #x33FD)
- ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE" #x33FE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cjk-unified-ideographs-extension-a
- '())
-
+++ /dev/null
-(nxml-define-char-name-set 'yi-syllables
- '(("YI SYLLABLE IT" #xA000)
- ("YI SYLLABLE IX" #xA001)
- ("YI SYLLABLE I" #xA002)
- ("YI SYLLABLE IP" #xA003)
- ("YI SYLLABLE IET" #xA004)
- ("YI SYLLABLE IEX" #xA005)
- ("YI SYLLABLE IE" #xA006)
- ("YI SYLLABLE IEP" #xA007)
- ("YI SYLLABLE AT" #xA008)
- ("YI SYLLABLE AX" #xA009)
- ("YI SYLLABLE A" #xA00A)
- ("YI SYLLABLE AP" #xA00B)
- ("YI SYLLABLE UOX" #xA00C)
- ("YI SYLLABLE UO" #xA00D)
- ("YI SYLLABLE UOP" #xA00E)
- ("YI SYLLABLE OT" #xA00F)
- ("YI SYLLABLE OX" #xA010)
- ("YI SYLLABLE O" #xA011)
- ("YI SYLLABLE OP" #xA012)
- ("YI SYLLABLE EX" #xA013)
- ("YI SYLLABLE E" #xA014)
- ("YI SYLLABLE WU" #xA015)
- ("YI SYLLABLE BIT" #xA016)
- ("YI SYLLABLE BIX" #xA017)
- ("YI SYLLABLE BI" #xA018)
- ("YI SYLLABLE BIP" #xA019)
- ("YI SYLLABLE BIET" #xA01A)
- ("YI SYLLABLE BIEX" #xA01B)
- ("YI SYLLABLE BIE" #xA01C)
- ("YI SYLLABLE BIEP" #xA01D)
- ("YI SYLLABLE BAT" #xA01E)
- ("YI SYLLABLE BAX" #xA01F)
- ("YI SYLLABLE BA" #xA020)
- ("YI SYLLABLE BAP" #xA021)
- ("YI SYLLABLE BUOX" #xA022)
- ("YI SYLLABLE BUO" #xA023)
- ("YI SYLLABLE BUOP" #xA024)
- ("YI SYLLABLE BOT" #xA025)
- ("YI SYLLABLE BOX" #xA026)
- ("YI SYLLABLE BO" #xA027)
- ("YI SYLLABLE BOP" #xA028)
- ("YI SYLLABLE BEX" #xA029)
- ("YI SYLLABLE BE" #xA02A)
- ("YI SYLLABLE BEP" #xA02B)
- ("YI SYLLABLE BUT" #xA02C)
- ("YI SYLLABLE BUX" #xA02D)
- ("YI SYLLABLE BU" #xA02E)
- ("YI SYLLABLE BUP" #xA02F)
- ("YI SYLLABLE BURX" #xA030)
- ("YI SYLLABLE BUR" #xA031)
- ("YI SYLLABLE BYT" #xA032)
- ("YI SYLLABLE BYX" #xA033)
- ("YI SYLLABLE BY" #xA034)
- ("YI SYLLABLE BYP" #xA035)
- ("YI SYLLABLE BYRX" #xA036)
- ("YI SYLLABLE BYR" #xA037)
- ("YI SYLLABLE PIT" #xA038)
- ("YI SYLLABLE PIX" #xA039)
- ("YI SYLLABLE PI" #xA03A)
- ("YI SYLLABLE PIP" #xA03B)
- ("YI SYLLABLE PIEX" #xA03C)
- ("YI SYLLABLE PIE" #xA03D)
- ("YI SYLLABLE PIEP" #xA03E)
- ("YI SYLLABLE PAT" #xA03F)
- ("YI SYLLABLE PAX" #xA040)
- ("YI SYLLABLE PA" #xA041)
- ("YI SYLLABLE PAP" #xA042)
- ("YI SYLLABLE PUOX" #xA043)
- ("YI SYLLABLE PUO" #xA044)
- ("YI SYLLABLE PUOP" #xA045)
- ("YI SYLLABLE POT" #xA046)
- ("YI SYLLABLE POX" #xA047)
- ("YI SYLLABLE PO" #xA048)
- ("YI SYLLABLE POP" #xA049)
- ("YI SYLLABLE PUT" #xA04A)
- ("YI SYLLABLE PUX" #xA04B)
- ("YI SYLLABLE PU" #xA04C)
- ("YI SYLLABLE PUP" #xA04D)
- ("YI SYLLABLE PURX" #xA04E)
- ("YI SYLLABLE PUR" #xA04F)
- ("YI SYLLABLE PYT" #xA050)
- ("YI SYLLABLE PYX" #xA051)
- ("YI SYLLABLE PY" #xA052)
- ("YI SYLLABLE PYP" #xA053)
- ("YI SYLLABLE PYRX" #xA054)
- ("YI SYLLABLE PYR" #xA055)
- ("YI SYLLABLE BBIT" #xA056)
- ("YI SYLLABLE BBIX" #xA057)
- ("YI SYLLABLE BBI" #xA058)
- ("YI SYLLABLE BBIP" #xA059)
- ("YI SYLLABLE BBIET" #xA05A)
- ("YI SYLLABLE BBIEX" #xA05B)
- ("YI SYLLABLE BBIE" #xA05C)
- ("YI SYLLABLE BBIEP" #xA05D)
- ("YI SYLLABLE BBAT" #xA05E)
- ("YI SYLLABLE BBAX" #xA05F)
- ("YI SYLLABLE BBA" #xA060)
- ("YI SYLLABLE BBAP" #xA061)
- ("YI SYLLABLE BBUOX" #xA062)
- ("YI SYLLABLE BBUO" #xA063)
- ("YI SYLLABLE BBUOP" #xA064)
- ("YI SYLLABLE BBOT" #xA065)
- ("YI SYLLABLE BBOX" #xA066)
- ("YI SYLLABLE BBO" #xA067)
- ("YI SYLLABLE BBOP" #xA068)
- ("YI SYLLABLE BBEX" #xA069)
- ("YI SYLLABLE BBE" #xA06A)
- ("YI SYLLABLE BBEP" #xA06B)
- ("YI SYLLABLE BBUT" #xA06C)
- ("YI SYLLABLE BBUX" #xA06D)
- ("YI SYLLABLE BBU" #xA06E)
- ("YI SYLLABLE BBUP" #xA06F)
- ("YI SYLLABLE BBURX" #xA070)
- ("YI SYLLABLE BBUR" #xA071)
- ("YI SYLLABLE BBYT" #xA072)
- ("YI SYLLABLE BBYX" #xA073)
- ("YI SYLLABLE BBY" #xA074)
- ("YI SYLLABLE BBYP" #xA075)
- ("YI SYLLABLE NBIT" #xA076)
- ("YI SYLLABLE NBIX" #xA077)
- ("YI SYLLABLE NBI" #xA078)
- ("YI SYLLABLE NBIP" #xA079)
- ("YI SYLLABLE NBIEX" #xA07A)
- ("YI SYLLABLE NBIE" #xA07B)
- ("YI SYLLABLE NBIEP" #xA07C)
- ("YI SYLLABLE NBAT" #xA07D)
- ("YI SYLLABLE NBAX" #xA07E)
- ("YI SYLLABLE NBA" #xA07F)
- ("YI SYLLABLE NBAP" #xA080)
- ("YI SYLLABLE NBOT" #xA081)
- ("YI SYLLABLE NBOX" #xA082)
- ("YI SYLLABLE NBO" #xA083)
- ("YI SYLLABLE NBOP" #xA084)
- ("YI SYLLABLE NBUT" #xA085)
- ("YI SYLLABLE NBUX" #xA086)
- ("YI SYLLABLE NBU" #xA087)
- ("YI SYLLABLE NBUP" #xA088)
- ("YI SYLLABLE NBURX" #xA089)
- ("YI SYLLABLE NBUR" #xA08A)
- ("YI SYLLABLE NBYT" #xA08B)
- ("YI SYLLABLE NBYX" #xA08C)
- ("YI SYLLABLE NBY" #xA08D)
- ("YI SYLLABLE NBYP" #xA08E)
- ("YI SYLLABLE NBYRX" #xA08F)
- ("YI SYLLABLE NBYR" #xA090)
- ("YI SYLLABLE HMIT" #xA091)
- ("YI SYLLABLE HMIX" #xA092)
- ("YI SYLLABLE HMI" #xA093)
- ("YI SYLLABLE HMIP" #xA094)
- ("YI SYLLABLE HMIEX" #xA095)
- ("YI SYLLABLE HMIE" #xA096)
- ("YI SYLLABLE HMIEP" #xA097)
- ("YI SYLLABLE HMAT" #xA098)
- ("YI SYLLABLE HMAX" #xA099)
- ("YI SYLLABLE HMA" #xA09A)
- ("YI SYLLABLE HMAP" #xA09B)
- ("YI SYLLABLE HMUOX" #xA09C)
- ("YI SYLLABLE HMUO" #xA09D)
- ("YI SYLLABLE HMUOP" #xA09E)
- ("YI SYLLABLE HMOT" #xA09F)
- ("YI SYLLABLE HMOX" #xA0A0)
- ("YI SYLLABLE HMO" #xA0A1)
- ("YI SYLLABLE HMOP" #xA0A2)
- ("YI SYLLABLE HMUT" #xA0A3)
- ("YI SYLLABLE HMUX" #xA0A4)
- ("YI SYLLABLE HMU" #xA0A5)
- ("YI SYLLABLE HMUP" #xA0A6)
- ("YI SYLLABLE HMURX" #xA0A7)
- ("YI SYLLABLE HMUR" #xA0A8)
- ("YI SYLLABLE HMYX" #xA0A9)
- ("YI SYLLABLE HMY" #xA0AA)
- ("YI SYLLABLE HMYP" #xA0AB)
- ("YI SYLLABLE HMYRX" #xA0AC)
- ("YI SYLLABLE HMYR" #xA0AD)
- ("YI SYLLABLE MIT" #xA0AE)
- ("YI SYLLABLE MIX" #xA0AF)
- ("YI SYLLABLE MI" #xA0B0)
- ("YI SYLLABLE MIP" #xA0B1)
- ("YI SYLLABLE MIEX" #xA0B2)
- ("YI SYLLABLE MIE" #xA0B3)
- ("YI SYLLABLE MIEP" #xA0B4)
- ("YI SYLLABLE MAT" #xA0B5)
- ("YI SYLLABLE MAX" #xA0B6)
- ("YI SYLLABLE MA" #xA0B7)
- ("YI SYLLABLE MAP" #xA0B8)
- ("YI SYLLABLE MUOT" #xA0B9)
- ("YI SYLLABLE MUOX" #xA0BA)
- ("YI SYLLABLE MUO" #xA0BB)
- ("YI SYLLABLE MUOP" #xA0BC)
- ("YI SYLLABLE MOT" #xA0BD)
- ("YI SYLLABLE MOX" #xA0BE)
- ("YI SYLLABLE MO" #xA0BF)
- ("YI SYLLABLE MOP" #xA0C0)
- ("YI SYLLABLE MEX" #xA0C1)
- ("YI SYLLABLE ME" #xA0C2)
- ("YI SYLLABLE MUT" #xA0C3)
- ("YI SYLLABLE MUX" #xA0C4)
- ("YI SYLLABLE MU" #xA0C5)
- ("YI SYLLABLE MUP" #xA0C6)
- ("YI SYLLABLE MURX" #xA0C7)
- ("YI SYLLABLE MUR" #xA0C8)
- ("YI SYLLABLE MYT" #xA0C9)
- ("YI SYLLABLE MYX" #xA0CA)
- ("YI SYLLABLE MY" #xA0CB)
- ("YI SYLLABLE MYP" #xA0CC)
- ("YI SYLLABLE FIT" #xA0CD)
- ("YI SYLLABLE FIX" #xA0CE)
- ("YI SYLLABLE FI" #xA0CF)
- ("YI SYLLABLE FIP" #xA0D0)
- ("YI SYLLABLE FAT" #xA0D1)
- ("YI SYLLABLE FAX" #xA0D2)
- ("YI SYLLABLE FA" #xA0D3)
- ("YI SYLLABLE FAP" #xA0D4)
- ("YI SYLLABLE FOX" #xA0D5)
- ("YI SYLLABLE FO" #xA0D6)
- ("YI SYLLABLE FOP" #xA0D7)
- ("YI SYLLABLE FUT" #xA0D8)
- ("YI SYLLABLE FUX" #xA0D9)
- ("YI SYLLABLE FU" #xA0DA)
- ("YI SYLLABLE FUP" #xA0DB)
- ("YI SYLLABLE FURX" #xA0DC)
- ("YI SYLLABLE FUR" #xA0DD)
- ("YI SYLLABLE FYT" #xA0DE)
- ("YI SYLLABLE FYX" #xA0DF)
- ("YI SYLLABLE FY" #xA0E0)
- ("YI SYLLABLE FYP" #xA0E1)
- ("YI SYLLABLE VIT" #xA0E2)
- ("YI SYLLABLE VIX" #xA0E3)
- ("YI SYLLABLE VI" #xA0E4)
- ("YI SYLLABLE VIP" #xA0E5)
- ("YI SYLLABLE VIET" #xA0E6)
- ("YI SYLLABLE VIEX" #xA0E7)
- ("YI SYLLABLE VIE" #xA0E8)
- ("YI SYLLABLE VIEP" #xA0E9)
- ("YI SYLLABLE VAT" #xA0EA)
- ("YI SYLLABLE VAX" #xA0EB)
- ("YI SYLLABLE VA" #xA0EC)
- ("YI SYLLABLE VAP" #xA0ED)
- ("YI SYLLABLE VOT" #xA0EE)
- ("YI SYLLABLE VOX" #xA0EF)
- ("YI SYLLABLE VO" #xA0F0)
- ("YI SYLLABLE VOP" #xA0F1)
- ("YI SYLLABLE VEX" #xA0F2)
- ("YI SYLLABLE VEP" #xA0F3)
- ("YI SYLLABLE VUT" #xA0F4)
- ("YI SYLLABLE VUX" #xA0F5)
- ("YI SYLLABLE VU" #xA0F6)
- ("YI SYLLABLE VUP" #xA0F7)
- ("YI SYLLABLE VURX" #xA0F8)
- ("YI SYLLABLE VUR" #xA0F9)
- ("YI SYLLABLE VYT" #xA0FA)
- ("YI SYLLABLE VYX" #xA0FB)
- ("YI SYLLABLE VY" #xA0FC)
- ("YI SYLLABLE VYP" #xA0FD)
- ("YI SYLLABLE VYRX" #xA0FE)
- ("YI SYLLABLE VYR" #xA0FF)
- ("YI SYLLABLE DIT" #xA100)
- ("YI SYLLABLE DIX" #xA101)
- ("YI SYLLABLE DI" #xA102)
- ("YI SYLLABLE DIP" #xA103)
- ("YI SYLLABLE DIEX" #xA104)
- ("YI SYLLABLE DIE" #xA105)
- ("YI SYLLABLE DIEP" #xA106)
- ("YI SYLLABLE DAT" #xA107)
- ("YI SYLLABLE DAX" #xA108)
- ("YI SYLLABLE DA" #xA109)
- ("YI SYLLABLE DAP" #xA10A)
- ("YI SYLLABLE DUOX" #xA10B)
- ("YI SYLLABLE DUO" #xA10C)
- ("YI SYLLABLE DOT" #xA10D)
- ("YI SYLLABLE DOX" #xA10E)
- ("YI SYLLABLE DO" #xA10F)
- ("YI SYLLABLE DOP" #xA110)
- ("YI SYLLABLE DEX" #xA111)
- ("YI SYLLABLE DE" #xA112)
- ("YI SYLLABLE DEP" #xA113)
- ("YI SYLLABLE DUT" #xA114)
- ("YI SYLLABLE DUX" #xA115)
- ("YI SYLLABLE DU" #xA116)
- ("YI SYLLABLE DUP" #xA117)
- ("YI SYLLABLE DURX" #xA118)
- ("YI SYLLABLE DUR" #xA119)
- ("YI SYLLABLE TIT" #xA11A)
- ("YI SYLLABLE TIX" #xA11B)
- ("YI SYLLABLE TI" #xA11C)
- ("YI SYLLABLE TIP" #xA11D)
- ("YI SYLLABLE TIEX" #xA11E)
- ("YI SYLLABLE TIE" #xA11F)
- ("YI SYLLABLE TIEP" #xA120)
- ("YI SYLLABLE TAT" #xA121)
- ("YI SYLLABLE TAX" #xA122)
- ("YI SYLLABLE TA" #xA123)
- ("YI SYLLABLE TAP" #xA124)
- ("YI SYLLABLE TUOT" #xA125)
- ("YI SYLLABLE TUOX" #xA126)
- ("YI SYLLABLE TUO" #xA127)
- ("YI SYLLABLE TUOP" #xA128)
- ("YI SYLLABLE TOT" #xA129)
- ("YI SYLLABLE TOX" #xA12A)
- ("YI SYLLABLE TO" #xA12B)
- ("YI SYLLABLE TOP" #xA12C)
- ("YI SYLLABLE TEX" #xA12D)
- ("YI SYLLABLE TE" #xA12E)
- ("YI SYLLABLE TEP" #xA12F)
- ("YI SYLLABLE TUT" #xA130)
- ("YI SYLLABLE TUX" #xA131)
- ("YI SYLLABLE TU" #xA132)
- ("YI SYLLABLE TUP" #xA133)
- ("YI SYLLABLE TURX" #xA134)
- ("YI SYLLABLE TUR" #xA135)
- ("YI SYLLABLE DDIT" #xA136)
- ("YI SYLLABLE DDIX" #xA137)
- ("YI SYLLABLE DDI" #xA138)
- ("YI SYLLABLE DDIP" #xA139)
- ("YI SYLLABLE DDIEX" #xA13A)
- ("YI SYLLABLE DDIE" #xA13B)
- ("YI SYLLABLE DDIEP" #xA13C)
- ("YI SYLLABLE DDAT" #xA13D)
- ("YI SYLLABLE DDAX" #xA13E)
- ("YI SYLLABLE DDA" #xA13F)
- ("YI SYLLABLE DDAP" #xA140)
- ("YI SYLLABLE DDUOX" #xA141)
- ("YI SYLLABLE DDUO" #xA142)
- ("YI SYLLABLE DDUOP" #xA143)
- ("YI SYLLABLE DDOT" #xA144)
- ("YI SYLLABLE DDOX" #xA145)
- ("YI SYLLABLE DDO" #xA146)
- ("YI SYLLABLE DDOP" #xA147)
- ("YI SYLLABLE DDEX" #xA148)
- ("YI SYLLABLE DDE" #xA149)
- ("YI SYLLABLE DDEP" #xA14A)
- ("YI SYLLABLE DDUT" #xA14B)
- ("YI SYLLABLE DDUX" #xA14C)
- ("YI SYLLABLE DDU" #xA14D)
- ("YI SYLLABLE DDUP" #xA14E)
- ("YI SYLLABLE DDURX" #xA14F)
- ("YI SYLLABLE DDUR" #xA150)
- ("YI SYLLABLE NDIT" #xA151)
- ("YI SYLLABLE NDIX" #xA152)
- ("YI SYLLABLE NDI" #xA153)
- ("YI SYLLABLE NDIP" #xA154)
- ("YI SYLLABLE NDIEX" #xA155)
- ("YI SYLLABLE NDIE" #xA156)
- ("YI SYLLABLE NDAT" #xA157)
- ("YI SYLLABLE NDAX" #xA158)
- ("YI SYLLABLE NDA" #xA159)
- ("YI SYLLABLE NDAP" #xA15A)
- ("YI SYLLABLE NDOT" #xA15B)
- ("YI SYLLABLE NDOX" #xA15C)
- ("YI SYLLABLE NDO" #xA15D)
- ("YI SYLLABLE NDOP" #xA15E)
- ("YI SYLLABLE NDEX" #xA15F)
- ("YI SYLLABLE NDE" #xA160)
- ("YI SYLLABLE NDEP" #xA161)
- ("YI SYLLABLE NDUT" #xA162)
- ("YI SYLLABLE NDUX" #xA163)
- ("YI SYLLABLE NDU" #xA164)
- ("YI SYLLABLE NDUP" #xA165)
- ("YI SYLLABLE NDURX" #xA166)
- ("YI SYLLABLE NDUR" #xA167)
- ("YI SYLLABLE HNIT" #xA168)
- ("YI SYLLABLE HNIX" #xA169)
- ("YI SYLLABLE HNI" #xA16A)
- ("YI SYLLABLE HNIP" #xA16B)
- ("YI SYLLABLE HNIET" #xA16C)
- ("YI SYLLABLE HNIEX" #xA16D)
- ("YI SYLLABLE HNIE" #xA16E)
- ("YI SYLLABLE HNIEP" #xA16F)
- ("YI SYLLABLE HNAT" #xA170)
- ("YI SYLLABLE HNAX" #xA171)
- ("YI SYLLABLE HNA" #xA172)
- ("YI SYLLABLE HNAP" #xA173)
- ("YI SYLLABLE HNUOX" #xA174)
- ("YI SYLLABLE HNUO" #xA175)
- ("YI SYLLABLE HNOT" #xA176)
- ("YI SYLLABLE HNOX" #xA177)
- ("YI SYLLABLE HNOP" #xA178)
- ("YI SYLLABLE HNEX" #xA179)
- ("YI SYLLABLE HNE" #xA17A)
- ("YI SYLLABLE HNEP" #xA17B)
- ("YI SYLLABLE HNUT" #xA17C)
- ("YI SYLLABLE NIT" #xA17D)
- ("YI SYLLABLE NIX" #xA17E)
- ("YI SYLLABLE NI" #xA17F)
- ("YI SYLLABLE NIP" #xA180)
- ("YI SYLLABLE NIEX" #xA181)
- ("YI SYLLABLE NIE" #xA182)
- ("YI SYLLABLE NIEP" #xA183)
- ("YI SYLLABLE NAX" #xA184)
- ("YI SYLLABLE NA" #xA185)
- ("YI SYLLABLE NAP" #xA186)
- ("YI SYLLABLE NUOX" #xA187)
- ("YI SYLLABLE NUO" #xA188)
- ("YI SYLLABLE NUOP" #xA189)
- ("YI SYLLABLE NOT" #xA18A)
- ("YI SYLLABLE NOX" #xA18B)
- ("YI SYLLABLE NO" #xA18C)
- ("YI SYLLABLE NOP" #xA18D)
- ("YI SYLLABLE NEX" #xA18E)
- ("YI SYLLABLE NE" #xA18F)
- ("YI SYLLABLE NEP" #xA190)
- ("YI SYLLABLE NUT" #xA191)
- ("YI SYLLABLE NUX" #xA192)
- ("YI SYLLABLE NU" #xA193)
- ("YI SYLLABLE NUP" #xA194)
- ("YI SYLLABLE NURX" #xA195)
- ("YI SYLLABLE NUR" #xA196)
- ("YI SYLLABLE HLIT" #xA197)
- ("YI SYLLABLE HLIX" #xA198)
- ("YI SYLLABLE HLI" #xA199)
- ("YI SYLLABLE HLIP" #xA19A)
- ("YI SYLLABLE HLIEX" #xA19B)
- ("YI SYLLABLE HLIE" #xA19C)
- ("YI SYLLABLE HLIEP" #xA19D)
- ("YI SYLLABLE HLAT" #xA19E)
- ("YI SYLLABLE HLAX" #xA19F)
- ("YI SYLLABLE HLA" #xA1A0)
- ("YI SYLLABLE HLAP" #xA1A1)
- ("YI SYLLABLE HLUOX" #xA1A2)
- ("YI SYLLABLE HLUO" #xA1A3)
- ("YI SYLLABLE HLUOP" #xA1A4)
- ("YI SYLLABLE HLOX" #xA1A5)
- ("YI SYLLABLE HLO" #xA1A6)
- ("YI SYLLABLE HLOP" #xA1A7)
- ("YI SYLLABLE HLEX" #xA1A8)
- ("YI SYLLABLE HLE" #xA1A9)
- ("YI SYLLABLE HLEP" #xA1AA)
- ("YI SYLLABLE HLUT" #xA1AB)
- ("YI SYLLABLE HLUX" #xA1AC)
- ("YI SYLLABLE HLU" #xA1AD)
- ("YI SYLLABLE HLUP" #xA1AE)
- ("YI SYLLABLE HLURX" #xA1AF)
- ("YI SYLLABLE HLUR" #xA1B0)
- ("YI SYLLABLE HLYT" #xA1B1)
- ("YI SYLLABLE HLYX" #xA1B2)
- ("YI SYLLABLE HLY" #xA1B3)
- ("YI SYLLABLE HLYP" #xA1B4)
- ("YI SYLLABLE HLYRX" #xA1B5)
- ("YI SYLLABLE HLYR" #xA1B6)
- ("YI SYLLABLE LIT" #xA1B7)
- ("YI SYLLABLE LIX" #xA1B8)
- ("YI SYLLABLE LI" #xA1B9)
- ("YI SYLLABLE LIP" #xA1BA)
- ("YI SYLLABLE LIET" #xA1BB)
- ("YI SYLLABLE LIEX" #xA1BC)
- ("YI SYLLABLE LIE" #xA1BD)
- ("YI SYLLABLE LIEP" #xA1BE)
- ("YI SYLLABLE LAT" #xA1BF)
- ("YI SYLLABLE LAX" #xA1C0)
- ("YI SYLLABLE LA" #xA1C1)
- ("YI SYLLABLE LAP" #xA1C2)
- ("YI SYLLABLE LUOT" #xA1C3)
- ("YI SYLLABLE LUOX" #xA1C4)
- ("YI SYLLABLE LUO" #xA1C5)
- ("YI SYLLABLE LUOP" #xA1C6)
- ("YI SYLLABLE LOT" #xA1C7)
- ("YI SYLLABLE LOX" #xA1C8)
- ("YI SYLLABLE LO" #xA1C9)
- ("YI SYLLABLE LOP" #xA1CA)
- ("YI SYLLABLE LEX" #xA1CB)
- ("YI SYLLABLE LE" #xA1CC)
- ("YI SYLLABLE LEP" #xA1CD)
- ("YI SYLLABLE LUT" #xA1CE)
- ("YI SYLLABLE LUX" #xA1CF)
- ("YI SYLLABLE LU" #xA1D0)
- ("YI SYLLABLE LUP" #xA1D1)
- ("YI SYLLABLE LURX" #xA1D2)
- ("YI SYLLABLE LUR" #xA1D3)
- ("YI SYLLABLE LYT" #xA1D4)
- ("YI SYLLABLE LYX" #xA1D5)
- ("YI SYLLABLE LY" #xA1D6)
- ("YI SYLLABLE LYP" #xA1D7)
- ("YI SYLLABLE LYRX" #xA1D8)
- ("YI SYLLABLE LYR" #xA1D9)
- ("YI SYLLABLE GIT" #xA1DA)
- ("YI SYLLABLE GIX" #xA1DB)
- ("YI SYLLABLE GI" #xA1DC)
- ("YI SYLLABLE GIP" #xA1DD)
- ("YI SYLLABLE GIET" #xA1DE)
- ("YI SYLLABLE GIEX" #xA1DF)
- ("YI SYLLABLE GIE" #xA1E0)
- ("YI SYLLABLE GIEP" #xA1E1)
- ("YI SYLLABLE GAT" #xA1E2)
- ("YI SYLLABLE GAX" #xA1E3)
- ("YI SYLLABLE GA" #xA1E4)
- ("YI SYLLABLE GAP" #xA1E5)
- ("YI SYLLABLE GUOT" #xA1E6)
- ("YI SYLLABLE GUOX" #xA1E7)
- ("YI SYLLABLE GUO" #xA1E8)
- ("YI SYLLABLE GUOP" #xA1E9)
- ("YI SYLLABLE GOT" #xA1EA)
- ("YI SYLLABLE GOX" #xA1EB)
- ("YI SYLLABLE GO" #xA1EC)
- ("YI SYLLABLE GOP" #xA1ED)
- ("YI SYLLABLE GET" #xA1EE)
- ("YI SYLLABLE GEX" #xA1EF)
- ("YI SYLLABLE GE" #xA1F0)
- ("YI SYLLABLE GEP" #xA1F1)
- ("YI SYLLABLE GUT" #xA1F2)
- ("YI SYLLABLE GUX" #xA1F3)
- ("YI SYLLABLE GU" #xA1F4)
- ("YI SYLLABLE GUP" #xA1F5)
- ("YI SYLLABLE GURX" #xA1F6)
- ("YI SYLLABLE GUR" #xA1F7)
- ("YI SYLLABLE KIT" #xA1F8)
- ("YI SYLLABLE KIX" #xA1F9)
- ("YI SYLLABLE KI" #xA1FA)
- ("YI SYLLABLE KIP" #xA1FB)
- ("YI SYLLABLE KIEX" #xA1FC)
- ("YI SYLLABLE KIE" #xA1FD)
- ("YI SYLLABLE KIEP" #xA1FE)
- ("YI SYLLABLE KAT" #xA1FF)
- ("YI SYLLABLE KAX" #xA200)
- ("YI SYLLABLE KA" #xA201)
- ("YI SYLLABLE KAP" #xA202)
- ("YI SYLLABLE KUOX" #xA203)
- ("YI SYLLABLE KUO" #xA204)
- ("YI SYLLABLE KUOP" #xA205)
- ("YI SYLLABLE KOT" #xA206)
- ("YI SYLLABLE KOX" #xA207)
- ("YI SYLLABLE KO" #xA208)
- ("YI SYLLABLE KOP" #xA209)
- ("YI SYLLABLE KET" #xA20A)
- ("YI SYLLABLE KEX" #xA20B)
- ("YI SYLLABLE KE" #xA20C)
- ("YI SYLLABLE KEP" #xA20D)
- ("YI SYLLABLE KUT" #xA20E)
- ("YI SYLLABLE KUX" #xA20F)
- ("YI SYLLABLE KU" #xA210)
- ("YI SYLLABLE KUP" #xA211)
- ("YI SYLLABLE KURX" #xA212)
- ("YI SYLLABLE KUR" #xA213)
- ("YI SYLLABLE GGIT" #xA214)
- ("YI SYLLABLE GGIX" #xA215)
- ("YI SYLLABLE GGI" #xA216)
- ("YI SYLLABLE GGIEX" #xA217)
- ("YI SYLLABLE GGIE" #xA218)
- ("YI SYLLABLE GGIEP" #xA219)
- ("YI SYLLABLE GGAT" #xA21A)
- ("YI SYLLABLE GGAX" #xA21B)
- ("YI SYLLABLE GGA" #xA21C)
- ("YI SYLLABLE GGAP" #xA21D)
- ("YI SYLLABLE GGUOT" #xA21E)
- ("YI SYLLABLE GGUOX" #xA21F)
- ("YI SYLLABLE GGUO" #xA220)
- ("YI SYLLABLE GGUOP" #xA221)
- ("YI SYLLABLE GGOT" #xA222)
- ("YI SYLLABLE GGOX" #xA223)
- ("YI SYLLABLE GGO" #xA224)
- ("YI SYLLABLE GGOP" #xA225)
- ("YI SYLLABLE GGET" #xA226)
- ("YI SYLLABLE GGEX" #xA227)
- ("YI SYLLABLE GGE" #xA228)
- ("YI SYLLABLE GGEP" #xA229)
- ("YI SYLLABLE GGUT" #xA22A)
- ("YI SYLLABLE GGUX" #xA22B)
- ("YI SYLLABLE GGU" #xA22C)
- ("YI SYLLABLE GGUP" #xA22D)
- ("YI SYLLABLE GGURX" #xA22E)
- ("YI SYLLABLE GGUR" #xA22F)
- ("YI SYLLABLE MGIEX" #xA230)
- ("YI SYLLABLE MGIE" #xA231)
- ("YI SYLLABLE MGAT" #xA232)
- ("YI SYLLABLE MGAX" #xA233)
- ("YI SYLLABLE MGA" #xA234)
- ("YI SYLLABLE MGAP" #xA235)
- ("YI SYLLABLE MGUOX" #xA236)
- ("YI SYLLABLE MGUO" #xA237)
- ("YI SYLLABLE MGUOP" #xA238)
- ("YI SYLLABLE MGOT" #xA239)
- ("YI SYLLABLE MGOX" #xA23A)
- ("YI SYLLABLE MGO" #xA23B)
- ("YI SYLLABLE MGOP" #xA23C)
- ("YI SYLLABLE MGEX" #xA23D)
- ("YI SYLLABLE MGE" #xA23E)
- ("YI SYLLABLE MGEP" #xA23F)
- ("YI SYLLABLE MGUT" #xA240)
- ("YI SYLLABLE MGUX" #xA241)
- ("YI SYLLABLE MGU" #xA242)
- ("YI SYLLABLE MGUP" #xA243)
- ("YI SYLLABLE MGURX" #xA244)
- ("YI SYLLABLE MGUR" #xA245)
- ("YI SYLLABLE HXIT" #xA246)
- ("YI SYLLABLE HXIX" #xA247)
- ("YI SYLLABLE HXI" #xA248)
- ("YI SYLLABLE HXIP" #xA249)
- ("YI SYLLABLE HXIET" #xA24A)
- ("YI SYLLABLE HXIEX" #xA24B)
- ("YI SYLLABLE HXIE" #xA24C)
- ("YI SYLLABLE HXIEP" #xA24D)
- ("YI SYLLABLE HXAT" #xA24E)
- ("YI SYLLABLE HXAX" #xA24F)
- ("YI SYLLABLE HXA" #xA250)
- ("YI SYLLABLE HXAP" #xA251)
- ("YI SYLLABLE HXUOT" #xA252)
- ("YI SYLLABLE HXUOX" #xA253)
- ("YI SYLLABLE HXUO" #xA254)
- ("YI SYLLABLE HXUOP" #xA255)
- ("YI SYLLABLE HXOT" #xA256)
- ("YI SYLLABLE HXOX" #xA257)
- ("YI SYLLABLE HXO" #xA258)
- ("YI SYLLABLE HXOP" #xA259)
- ("YI SYLLABLE HXEX" #xA25A)
- ("YI SYLLABLE HXE" #xA25B)
- ("YI SYLLABLE HXEP" #xA25C)
- ("YI SYLLABLE NGIEX" #xA25D)
- ("YI SYLLABLE NGIE" #xA25E)
- ("YI SYLLABLE NGIEP" #xA25F)
- ("YI SYLLABLE NGAT" #xA260)
- ("YI SYLLABLE NGAX" #xA261)
- ("YI SYLLABLE NGA" #xA262)
- ("YI SYLLABLE NGAP" #xA263)
- ("YI SYLLABLE NGUOT" #xA264)
- ("YI SYLLABLE NGUOX" #xA265)
- ("YI SYLLABLE NGUO" #xA266)
- ("YI SYLLABLE NGOT" #xA267)
- ("YI SYLLABLE NGOX" #xA268)
- ("YI SYLLABLE NGO" #xA269)
- ("YI SYLLABLE NGOP" #xA26A)
- ("YI SYLLABLE NGEX" #xA26B)
- ("YI SYLLABLE NGE" #xA26C)
- ("YI SYLLABLE NGEP" #xA26D)
- ("YI SYLLABLE HIT" #xA26E)
- ("YI SYLLABLE HIEX" #xA26F)
- ("YI SYLLABLE HIE" #xA270)
- ("YI SYLLABLE HAT" #xA271)
- ("YI SYLLABLE HAX" #xA272)
- ("YI SYLLABLE HA" #xA273)
- ("YI SYLLABLE HAP" #xA274)
- ("YI SYLLABLE HUOT" #xA275)
- ("YI SYLLABLE HUOX" #xA276)
- ("YI SYLLABLE HUO" #xA277)
- ("YI SYLLABLE HUOP" #xA278)
- ("YI SYLLABLE HOT" #xA279)
- ("YI SYLLABLE HOX" #xA27A)
- ("YI SYLLABLE HO" #xA27B)
- ("YI SYLLABLE HOP" #xA27C)
- ("YI SYLLABLE HEX" #xA27D)
- ("YI SYLLABLE HE" #xA27E)
- ("YI SYLLABLE HEP" #xA27F)
- ("YI SYLLABLE WAT" #xA280)
- ("YI SYLLABLE WAX" #xA281)
- ("YI SYLLABLE WA" #xA282)
- ("YI SYLLABLE WAP" #xA283)
- ("YI SYLLABLE WUOX" #xA284)
- ("YI SYLLABLE WUO" #xA285)
- ("YI SYLLABLE WUOP" #xA286)
- ("YI SYLLABLE WOX" #xA287)
- ("YI SYLLABLE WO" #xA288)
- ("YI SYLLABLE WOP" #xA289)
- ("YI SYLLABLE WEX" #xA28A)
- ("YI SYLLABLE WE" #xA28B)
- ("YI SYLLABLE WEP" #xA28C)
- ("YI SYLLABLE ZIT" #xA28D)
- ("YI SYLLABLE ZIX" #xA28E)
- ("YI SYLLABLE ZI" #xA28F)
- ("YI SYLLABLE ZIP" #xA290)
- ("YI SYLLABLE ZIEX" #xA291)
- ("YI SYLLABLE ZIE" #xA292)
- ("YI SYLLABLE ZIEP" #xA293)
- ("YI SYLLABLE ZAT" #xA294)
- ("YI SYLLABLE ZAX" #xA295)
- ("YI SYLLABLE ZA" #xA296)
- ("YI SYLLABLE ZAP" #xA297)
- ("YI SYLLABLE ZUOX" #xA298)
- ("YI SYLLABLE ZUO" #xA299)
- ("YI SYLLABLE ZUOP" #xA29A)
- ("YI SYLLABLE ZOT" #xA29B)
- ("YI SYLLABLE ZOX" #xA29C)
- ("YI SYLLABLE ZO" #xA29D)
- ("YI SYLLABLE ZOP" #xA29E)
- ("YI SYLLABLE ZEX" #xA29F)
- ("YI SYLLABLE ZE" #xA2A0)
- ("YI SYLLABLE ZEP" #xA2A1)
- ("YI SYLLABLE ZUT" #xA2A2)
- ("YI SYLLABLE ZUX" #xA2A3)
- ("YI SYLLABLE ZU" #xA2A4)
- ("YI SYLLABLE ZUP" #xA2A5)
- ("YI SYLLABLE ZURX" #xA2A6)
- ("YI SYLLABLE ZUR" #xA2A7)
- ("YI SYLLABLE ZYT" #xA2A8)
- ("YI SYLLABLE ZYX" #xA2A9)
- ("YI SYLLABLE ZY" #xA2AA)
- ("YI SYLLABLE ZYP" #xA2AB)
- ("YI SYLLABLE ZYRX" #xA2AC)
- ("YI SYLLABLE ZYR" #xA2AD)
- ("YI SYLLABLE CIT" #xA2AE)
- ("YI SYLLABLE CIX" #xA2AF)
- ("YI SYLLABLE CI" #xA2B0)
- ("YI SYLLABLE CIP" #xA2B1)
- ("YI SYLLABLE CIET" #xA2B2)
- ("YI SYLLABLE CIEX" #xA2B3)
- ("YI SYLLABLE CIE" #xA2B4)
- ("YI SYLLABLE CIEP" #xA2B5)
- ("YI SYLLABLE CAT" #xA2B6)
- ("YI SYLLABLE CAX" #xA2B7)
- ("YI SYLLABLE CA" #xA2B8)
- ("YI SYLLABLE CAP" #xA2B9)
- ("YI SYLLABLE CUOX" #xA2BA)
- ("YI SYLLABLE CUO" #xA2BB)
- ("YI SYLLABLE CUOP" #xA2BC)
- ("YI SYLLABLE COT" #xA2BD)
- ("YI SYLLABLE COX" #xA2BE)
- ("YI SYLLABLE CO" #xA2BF)
- ("YI SYLLABLE COP" #xA2C0)
- ("YI SYLLABLE CEX" #xA2C1)
- ("YI SYLLABLE CE" #xA2C2)
- ("YI SYLLABLE CEP" #xA2C3)
- ("YI SYLLABLE CUT" #xA2C4)
- ("YI SYLLABLE CUX" #xA2C5)
- ("YI SYLLABLE CU" #xA2C6)
- ("YI SYLLABLE CUP" #xA2C7)
- ("YI SYLLABLE CURX" #xA2C8)
- ("YI SYLLABLE CUR" #xA2C9)
- ("YI SYLLABLE CYT" #xA2CA)
- ("YI SYLLABLE CYX" #xA2CB)
- ("YI SYLLABLE CY" #xA2CC)
- ("YI SYLLABLE CYP" #xA2CD)
- ("YI SYLLABLE CYRX" #xA2CE)
- ("YI SYLLABLE CYR" #xA2CF)
- ("YI SYLLABLE ZZIT" #xA2D0)
- ("YI SYLLABLE ZZIX" #xA2D1)
- ("YI SYLLABLE ZZI" #xA2D2)
- ("YI SYLLABLE ZZIP" #xA2D3)
- ("YI SYLLABLE ZZIET" #xA2D4)
- ("YI SYLLABLE ZZIEX" #xA2D5)
- ("YI SYLLABLE ZZIE" #xA2D6)
- ("YI SYLLABLE ZZIEP" #xA2D7)
- ("YI SYLLABLE ZZAT" #xA2D8)
- ("YI SYLLABLE ZZAX" #xA2D9)
- ("YI SYLLABLE ZZA" #xA2DA)
- ("YI SYLLABLE ZZAP" #xA2DB)
- ("YI SYLLABLE ZZOX" #xA2DC)
- ("YI SYLLABLE ZZO" #xA2DD)
- ("YI SYLLABLE ZZOP" #xA2DE)
- ("YI SYLLABLE ZZEX" #xA2DF)
- ("YI SYLLABLE ZZE" #xA2E0)
- ("YI SYLLABLE ZZEP" #xA2E1)
- ("YI SYLLABLE ZZUX" #xA2E2)
- ("YI SYLLABLE ZZU" #xA2E3)
- ("YI SYLLABLE ZZUP" #xA2E4)
- ("YI SYLLABLE ZZURX" #xA2E5)
- ("YI SYLLABLE ZZUR" #xA2E6)
- ("YI SYLLABLE ZZYT" #xA2E7)
- ("YI SYLLABLE ZZYX" #xA2E8)
- ("YI SYLLABLE ZZY" #xA2E9)
- ("YI SYLLABLE ZZYP" #xA2EA)
- ("YI SYLLABLE ZZYRX" #xA2EB)
- ("YI SYLLABLE ZZYR" #xA2EC)
- ("YI SYLLABLE NZIT" #xA2ED)
- ("YI SYLLABLE NZIX" #xA2EE)
- ("YI SYLLABLE NZI" #xA2EF)
- ("YI SYLLABLE NZIP" #xA2F0)
- ("YI SYLLABLE NZIEX" #xA2F1)
- ("YI SYLLABLE NZIE" #xA2F2)
- ("YI SYLLABLE NZIEP" #xA2F3)
- ("YI SYLLABLE NZAT" #xA2F4)
- ("YI SYLLABLE NZAX" #xA2F5)
- ("YI SYLLABLE NZA" #xA2F6)
- ("YI SYLLABLE NZAP" #xA2F7)
- ("YI SYLLABLE NZUOX" #xA2F8)
- ("YI SYLLABLE NZUO" #xA2F9)
- ("YI SYLLABLE NZOX" #xA2FA)
- ("YI SYLLABLE NZOP" #xA2FB)
- ("YI SYLLABLE NZEX" #xA2FC)
- ("YI SYLLABLE NZE" #xA2FD)
- ("YI SYLLABLE NZUX" #xA2FE)
- ("YI SYLLABLE NZU" #xA2FF)
- ("YI SYLLABLE NZUP" #xA300)
- ("YI SYLLABLE NZURX" #xA301)
- ("YI SYLLABLE NZUR" #xA302)
- ("YI SYLLABLE NZYT" #xA303)
- ("YI SYLLABLE NZYX" #xA304)
- ("YI SYLLABLE NZY" #xA305)
- ("YI SYLLABLE NZYP" #xA306)
- ("YI SYLLABLE NZYRX" #xA307)
- ("YI SYLLABLE NZYR" #xA308)
- ("YI SYLLABLE SIT" #xA309)
- ("YI SYLLABLE SIX" #xA30A)
- ("YI SYLLABLE SI" #xA30B)
- ("YI SYLLABLE SIP" #xA30C)
- ("YI SYLLABLE SIEX" #xA30D)
- ("YI SYLLABLE SIE" #xA30E)
- ("YI SYLLABLE SIEP" #xA30F)
- ("YI SYLLABLE SAT" #xA310)
- ("YI SYLLABLE SAX" #xA311)
- ("YI SYLLABLE SA" #xA312)
- ("YI SYLLABLE SAP" #xA313)
- ("YI SYLLABLE SUOX" #xA314)
- ("YI SYLLABLE SUO" #xA315)
- ("YI SYLLABLE SUOP" #xA316)
- ("YI SYLLABLE SOT" #xA317)
- ("YI SYLLABLE SOX" #xA318)
- ("YI SYLLABLE SO" #xA319)
- ("YI SYLLABLE SOP" #xA31A)
- ("YI SYLLABLE SEX" #xA31B)
- ("YI SYLLABLE SE" #xA31C)
- ("YI SYLLABLE SEP" #xA31D)
- ("YI SYLLABLE SUT" #xA31E)
- ("YI SYLLABLE SUX" #xA31F)
- ("YI SYLLABLE SU" #xA320)
- ("YI SYLLABLE SUP" #xA321)
- ("YI SYLLABLE SURX" #xA322)
- ("YI SYLLABLE SUR" #xA323)
- ("YI SYLLABLE SYT" #xA324)
- ("YI SYLLABLE SYX" #xA325)
- ("YI SYLLABLE SY" #xA326)
- ("YI SYLLABLE SYP" #xA327)
- ("YI SYLLABLE SYRX" #xA328)
- ("YI SYLLABLE SYR" #xA329)
- ("YI SYLLABLE SSIT" #xA32A)
- ("YI SYLLABLE SSIX" #xA32B)
- ("YI SYLLABLE SSI" #xA32C)
- ("YI SYLLABLE SSIP" #xA32D)
- ("YI SYLLABLE SSIEX" #xA32E)
- ("YI SYLLABLE SSIE" #xA32F)
- ("YI SYLLABLE SSIEP" #xA330)
- ("YI SYLLABLE SSAT" #xA331)
- ("YI SYLLABLE SSAX" #xA332)
- ("YI SYLLABLE SSA" #xA333)
- ("YI SYLLABLE SSAP" #xA334)
- ("YI SYLLABLE SSOT" #xA335)
- ("YI SYLLABLE SSOX" #xA336)
- ("YI SYLLABLE SSO" #xA337)
- ("YI SYLLABLE SSOP" #xA338)
- ("YI SYLLABLE SSEX" #xA339)
- ("YI SYLLABLE SSE" #xA33A)
- ("YI SYLLABLE SSEP" #xA33B)
- ("YI SYLLABLE SSUT" #xA33C)
- ("YI SYLLABLE SSUX" #xA33D)
- ("YI SYLLABLE SSU" #xA33E)
- ("YI SYLLABLE SSUP" #xA33F)
- ("YI SYLLABLE SSYT" #xA340)
- ("YI SYLLABLE SSYX" #xA341)
- ("YI SYLLABLE SSY" #xA342)
- ("YI SYLLABLE SSYP" #xA343)
- ("YI SYLLABLE SSYRX" #xA344)
- ("YI SYLLABLE SSYR" #xA345)
- ("YI SYLLABLE ZHAT" #xA346)
- ("YI SYLLABLE ZHAX" #xA347)
- ("YI SYLLABLE ZHA" #xA348)
- ("YI SYLLABLE ZHAP" #xA349)
- ("YI SYLLABLE ZHUOX" #xA34A)
- ("YI SYLLABLE ZHUO" #xA34B)
- ("YI SYLLABLE ZHUOP" #xA34C)
- ("YI SYLLABLE ZHOT" #xA34D)
- ("YI SYLLABLE ZHOX" #xA34E)
- ("YI SYLLABLE ZHO" #xA34F)
- ("YI SYLLABLE ZHOP" #xA350)
- ("YI SYLLABLE ZHET" #xA351)
- ("YI SYLLABLE ZHEX" #xA352)
- ("YI SYLLABLE ZHE" #xA353)
- ("YI SYLLABLE ZHEP" #xA354)
- ("YI SYLLABLE ZHUT" #xA355)
- ("YI SYLLABLE ZHUX" #xA356)
- ("YI SYLLABLE ZHU" #xA357)
- ("YI SYLLABLE ZHUP" #xA358)
- ("YI SYLLABLE ZHURX" #xA359)
- ("YI SYLLABLE ZHUR" #xA35A)
- ("YI SYLLABLE ZHYT" #xA35B)
- ("YI SYLLABLE ZHYX" #xA35C)
- ("YI SYLLABLE ZHY" #xA35D)
- ("YI SYLLABLE ZHYP" #xA35E)
- ("YI SYLLABLE ZHYRX" #xA35F)
- ("YI SYLLABLE ZHYR" #xA360)
- ("YI SYLLABLE CHAT" #xA361)
- ("YI SYLLABLE CHAX" #xA362)
- ("YI SYLLABLE CHA" #xA363)
- ("YI SYLLABLE CHAP" #xA364)
- ("YI SYLLABLE CHUOT" #xA365)
- ("YI SYLLABLE CHUOX" #xA366)
- ("YI SYLLABLE CHUO" #xA367)
- ("YI SYLLABLE CHUOP" #xA368)
- ("YI SYLLABLE CHOT" #xA369)
- ("YI SYLLABLE CHOX" #xA36A)
- ("YI SYLLABLE CHO" #xA36B)
- ("YI SYLLABLE CHOP" #xA36C)
- ("YI SYLLABLE CHET" #xA36D)
- ("YI SYLLABLE CHEX" #xA36E)
- ("YI SYLLABLE CHE" #xA36F)
- ("YI SYLLABLE CHEP" #xA370)
- ("YI SYLLABLE CHUX" #xA371)
- ("YI SYLLABLE CHU" #xA372)
- ("YI SYLLABLE CHUP" #xA373)
- ("YI SYLLABLE CHURX" #xA374)
- ("YI SYLLABLE CHUR" #xA375)
- ("YI SYLLABLE CHYT" #xA376)
- ("YI SYLLABLE CHYX" #xA377)
- ("YI SYLLABLE CHY" #xA378)
- ("YI SYLLABLE CHYP" #xA379)
- ("YI SYLLABLE CHYRX" #xA37A)
- ("YI SYLLABLE CHYR" #xA37B)
- ("YI SYLLABLE RRAX" #xA37C)
- ("YI SYLLABLE RRA" #xA37D)
- ("YI SYLLABLE RRUOX" #xA37E)
- ("YI SYLLABLE RRUO" #xA37F)
- ("YI SYLLABLE RROT" #xA380)
- ("YI SYLLABLE RROX" #xA381)
- ("YI SYLLABLE RRO" #xA382)
- ("YI SYLLABLE RROP" #xA383)
- ("YI SYLLABLE RRET" #xA384)
- ("YI SYLLABLE RREX" #xA385)
- ("YI SYLLABLE RRE" #xA386)
- ("YI SYLLABLE RREP" #xA387)
- ("YI SYLLABLE RRUT" #xA388)
- ("YI SYLLABLE RRUX" #xA389)
- ("YI SYLLABLE RRU" #xA38A)
- ("YI SYLLABLE RRUP" #xA38B)
- ("YI SYLLABLE RRURX" #xA38C)
- ("YI SYLLABLE RRUR" #xA38D)
- ("YI SYLLABLE RRYT" #xA38E)
- ("YI SYLLABLE RRYX" #xA38F)
- ("YI SYLLABLE RRY" #xA390)
- ("YI SYLLABLE RRYP" #xA391)
- ("YI SYLLABLE RRYRX" #xA392)
- ("YI SYLLABLE RRYR" #xA393)
- ("YI SYLLABLE NRAT" #xA394)
- ("YI SYLLABLE NRAX" #xA395)
- ("YI SYLLABLE NRA" #xA396)
- ("YI SYLLABLE NRAP" #xA397)
- ("YI SYLLABLE NROX" #xA398)
- ("YI SYLLABLE NRO" #xA399)
- ("YI SYLLABLE NROP" #xA39A)
- ("YI SYLLABLE NRET" #xA39B)
- ("YI SYLLABLE NREX" #xA39C)
- ("YI SYLLABLE NRE" #xA39D)
- ("YI SYLLABLE NREP" #xA39E)
- ("YI SYLLABLE NRUT" #xA39F)
- ("YI SYLLABLE NRUX" #xA3A0)
- ("YI SYLLABLE NRU" #xA3A1)
- ("YI SYLLABLE NRUP" #xA3A2)
- ("YI SYLLABLE NRURX" #xA3A3)
- ("YI SYLLABLE NRUR" #xA3A4)
- ("YI SYLLABLE NRYT" #xA3A5)
- ("YI SYLLABLE NRYX" #xA3A6)
- ("YI SYLLABLE NRY" #xA3A7)
- ("YI SYLLABLE NRYP" #xA3A8)
- ("YI SYLLABLE NRYRX" #xA3A9)
- ("YI SYLLABLE NRYR" #xA3AA)
- ("YI SYLLABLE SHAT" #xA3AB)
- ("YI SYLLABLE SHAX" #xA3AC)
- ("YI SYLLABLE SHA" #xA3AD)
- ("YI SYLLABLE SHAP" #xA3AE)
- ("YI SYLLABLE SHUOX" #xA3AF)
- ("YI SYLLABLE SHUO" #xA3B0)
- ("YI SYLLABLE SHUOP" #xA3B1)
- ("YI SYLLABLE SHOT" #xA3B2)
- ("YI SYLLABLE SHOX" #xA3B3)
- ("YI SYLLABLE SHO" #xA3B4)
- ("YI SYLLABLE SHOP" #xA3B5)
- ("YI SYLLABLE SHET" #xA3B6)
- ("YI SYLLABLE SHEX" #xA3B7)
- ("YI SYLLABLE SHE" #xA3B8)
- ("YI SYLLABLE SHEP" #xA3B9)
- ("YI SYLLABLE SHUT" #xA3BA)
- ("YI SYLLABLE SHUX" #xA3BB)
- ("YI SYLLABLE SHU" #xA3BC)
- ("YI SYLLABLE SHUP" #xA3BD)
- ("YI SYLLABLE SHURX" #xA3BE)
- ("YI SYLLABLE SHUR" #xA3BF)
- ("YI SYLLABLE SHYT" #xA3C0)
- ("YI SYLLABLE SHYX" #xA3C1)
- ("YI SYLLABLE SHY" #xA3C2)
- ("YI SYLLABLE SHYP" #xA3C3)
- ("YI SYLLABLE SHYRX" #xA3C4)
- ("YI SYLLABLE SHYR" #xA3C5)
- ("YI SYLLABLE RAT" #xA3C6)
- ("YI SYLLABLE RAX" #xA3C7)
- ("YI SYLLABLE RA" #xA3C8)
- ("YI SYLLABLE RAP" #xA3C9)
- ("YI SYLLABLE RUOX" #xA3CA)
- ("YI SYLLABLE RUO" #xA3CB)
- ("YI SYLLABLE RUOP" #xA3CC)
- ("YI SYLLABLE ROT" #xA3CD)
- ("YI SYLLABLE ROX" #xA3CE)
- ("YI SYLLABLE RO" #xA3CF)
- ("YI SYLLABLE ROP" #xA3D0)
- ("YI SYLLABLE REX" #xA3D1)
- ("YI SYLLABLE RE" #xA3D2)
- ("YI SYLLABLE REP" #xA3D3)
- ("YI SYLLABLE RUT" #xA3D4)
- ("YI SYLLABLE RUX" #xA3D5)
- ("YI SYLLABLE RU" #xA3D6)
- ("YI SYLLABLE RUP" #xA3D7)
- ("YI SYLLABLE RURX" #xA3D8)
- ("YI SYLLABLE RUR" #xA3D9)
- ("YI SYLLABLE RYT" #xA3DA)
- ("YI SYLLABLE RYX" #xA3DB)
- ("YI SYLLABLE RY" #xA3DC)
- ("YI SYLLABLE RYP" #xA3DD)
- ("YI SYLLABLE RYRX" #xA3DE)
- ("YI SYLLABLE RYR" #xA3DF)
- ("YI SYLLABLE JIT" #xA3E0)
- ("YI SYLLABLE JIX" #xA3E1)
- ("YI SYLLABLE JI" #xA3E2)
- ("YI SYLLABLE JIP" #xA3E3)
- ("YI SYLLABLE JIET" #xA3E4)
- ("YI SYLLABLE JIEX" #xA3E5)
- ("YI SYLLABLE JIE" #xA3E6)
- ("YI SYLLABLE JIEP" #xA3E7)
- ("YI SYLLABLE JUOT" #xA3E8)
- ("YI SYLLABLE JUOX" #xA3E9)
- ("YI SYLLABLE JUO" #xA3EA)
- ("YI SYLLABLE JUOP" #xA3EB)
- ("YI SYLLABLE JOT" #xA3EC)
- ("YI SYLLABLE JOX" #xA3ED)
- ("YI SYLLABLE JO" #xA3EE)
- ("YI SYLLABLE JOP" #xA3EF)
- ("YI SYLLABLE JUT" #xA3F0)
- ("YI SYLLABLE JUX" #xA3F1)
- ("YI SYLLABLE JU" #xA3F2)
- ("YI SYLLABLE JUP" #xA3F3)
- ("YI SYLLABLE JURX" #xA3F4)
- ("YI SYLLABLE JUR" #xA3F5)
- ("YI SYLLABLE JYT" #xA3F6)
- ("YI SYLLABLE JYX" #xA3F7)
- ("YI SYLLABLE JY" #xA3F8)
- ("YI SYLLABLE JYP" #xA3F9)
- ("YI SYLLABLE JYRX" #xA3FA)
- ("YI SYLLABLE JYR" #xA3FB)
- ("YI SYLLABLE QIT" #xA3FC)
- ("YI SYLLABLE QIX" #xA3FD)
- ("YI SYLLABLE QI" #xA3FE)
- ("YI SYLLABLE QIP" #xA3FF)
- ("YI SYLLABLE QIET" #xA400)
- ("YI SYLLABLE QIEX" #xA401)
- ("YI SYLLABLE QIE" #xA402)
- ("YI SYLLABLE QIEP" #xA403)
- ("YI SYLLABLE QUOT" #xA404)
- ("YI SYLLABLE QUOX" #xA405)
- ("YI SYLLABLE QUO" #xA406)
- ("YI SYLLABLE QUOP" #xA407)
- ("YI SYLLABLE QOT" #xA408)
- ("YI SYLLABLE QOX" #xA409)
- ("YI SYLLABLE QO" #xA40A)
- ("YI SYLLABLE QOP" #xA40B)
- ("YI SYLLABLE QUT" #xA40C)
- ("YI SYLLABLE QUX" #xA40D)
- ("YI SYLLABLE QU" #xA40E)
- ("YI SYLLABLE QUP" #xA40F)
- ("YI SYLLABLE QURX" #xA410)
- ("YI SYLLABLE QUR" #xA411)
- ("YI SYLLABLE QYT" #xA412)
- ("YI SYLLABLE QYX" #xA413)
- ("YI SYLLABLE QY" #xA414)
- ("YI SYLLABLE QYP" #xA415)
- ("YI SYLLABLE QYRX" #xA416)
- ("YI SYLLABLE QYR" #xA417)
- ("YI SYLLABLE JJIT" #xA418)
- ("YI SYLLABLE JJIX" #xA419)
- ("YI SYLLABLE JJI" #xA41A)
- ("YI SYLLABLE JJIP" #xA41B)
- ("YI SYLLABLE JJIET" #xA41C)
- ("YI SYLLABLE JJIEX" #xA41D)
- ("YI SYLLABLE JJIE" #xA41E)
- ("YI SYLLABLE JJIEP" #xA41F)
- ("YI SYLLABLE JJUOX" #xA420)
- ("YI SYLLABLE JJUO" #xA421)
- ("YI SYLLABLE JJUOP" #xA422)
- ("YI SYLLABLE JJOT" #xA423)
- ("YI SYLLABLE JJOX" #xA424)
- ("YI SYLLABLE JJO" #xA425)
- ("YI SYLLABLE JJOP" #xA426)
- ("YI SYLLABLE JJUT" #xA427)
- ("YI SYLLABLE JJUX" #xA428)
- ("YI SYLLABLE JJU" #xA429)
- ("YI SYLLABLE JJUP" #xA42A)
- ("YI SYLLABLE JJURX" #xA42B)
- ("YI SYLLABLE JJUR" #xA42C)
- ("YI SYLLABLE JJYT" #xA42D)
- ("YI SYLLABLE JJYX" #xA42E)
- ("YI SYLLABLE JJY" #xA42F)
- ("YI SYLLABLE JJYP" #xA430)
- ("YI SYLLABLE NJIT" #xA431)
- ("YI SYLLABLE NJIX" #xA432)
- ("YI SYLLABLE NJI" #xA433)
- ("YI SYLLABLE NJIP" #xA434)
- ("YI SYLLABLE NJIET" #xA435)
- ("YI SYLLABLE NJIEX" #xA436)
- ("YI SYLLABLE NJIE" #xA437)
- ("YI SYLLABLE NJIEP" #xA438)
- ("YI SYLLABLE NJUOX" #xA439)
- ("YI SYLLABLE NJUO" #xA43A)
- ("YI SYLLABLE NJOT" #xA43B)
- ("YI SYLLABLE NJOX" #xA43C)
- ("YI SYLLABLE NJO" #xA43D)
- ("YI SYLLABLE NJOP" #xA43E)
- ("YI SYLLABLE NJUX" #xA43F)
- ("YI SYLLABLE NJU" #xA440)
- ("YI SYLLABLE NJUP" #xA441)
- ("YI SYLLABLE NJURX" #xA442)
- ("YI SYLLABLE NJUR" #xA443)
- ("YI SYLLABLE NJYT" #xA444)
- ("YI SYLLABLE NJYX" #xA445)
- ("YI SYLLABLE NJY" #xA446)
- ("YI SYLLABLE NJYP" #xA447)
- ("YI SYLLABLE NJYRX" #xA448)
- ("YI SYLLABLE NJYR" #xA449)
- ("YI SYLLABLE NYIT" #xA44A)
- ("YI SYLLABLE NYIX" #xA44B)
- ("YI SYLLABLE NYI" #xA44C)
- ("YI SYLLABLE NYIP" #xA44D)
- ("YI SYLLABLE NYIET" #xA44E)
- ("YI SYLLABLE NYIEX" #xA44F)
- ("YI SYLLABLE NYIE" #xA450)
- ("YI SYLLABLE NYIEP" #xA451)
- ("YI SYLLABLE NYUOX" #xA452)
- ("YI SYLLABLE NYUO" #xA453)
- ("YI SYLLABLE NYUOP" #xA454)
- ("YI SYLLABLE NYOT" #xA455)
- ("YI SYLLABLE NYOX" #xA456)
- ("YI SYLLABLE NYO" #xA457)
- ("YI SYLLABLE NYOP" #xA458)
- ("YI SYLLABLE NYUT" #xA459)
- ("YI SYLLABLE NYUX" #xA45A)
- ("YI SYLLABLE NYU" #xA45B)
- ("YI SYLLABLE NYUP" #xA45C)
- ("YI SYLLABLE XIT" #xA45D)
- ("YI SYLLABLE XIX" #xA45E)
- ("YI SYLLABLE XI" #xA45F)
- ("YI SYLLABLE XIP" #xA460)
- ("YI SYLLABLE XIET" #xA461)
- ("YI SYLLABLE XIEX" #xA462)
- ("YI SYLLABLE XIE" #xA463)
- ("YI SYLLABLE XIEP" #xA464)
- ("YI SYLLABLE XUOX" #xA465)
- ("YI SYLLABLE XUO" #xA466)
- ("YI SYLLABLE XOT" #xA467)
- ("YI SYLLABLE XOX" #xA468)
- ("YI SYLLABLE XO" #xA469)
- ("YI SYLLABLE XOP" #xA46A)
- ("YI SYLLABLE XYT" #xA46B)
- ("YI SYLLABLE XYX" #xA46C)
- ("YI SYLLABLE XY" #xA46D)
- ("YI SYLLABLE XYP" #xA46E)
- ("YI SYLLABLE XYRX" #xA46F)
- ("YI SYLLABLE XYR" #xA470)
- ("YI SYLLABLE YIT" #xA471)
- ("YI SYLLABLE YIX" #xA472)
- ("YI SYLLABLE YI" #xA473)
- ("YI SYLLABLE YIP" #xA474)
- ("YI SYLLABLE YIET" #xA475)
- ("YI SYLLABLE YIEX" #xA476)
- ("YI SYLLABLE YIE" #xA477)
- ("YI SYLLABLE YIEP" #xA478)
- ("YI SYLLABLE YUOT" #xA479)
- ("YI SYLLABLE YUOX" #xA47A)
- ("YI SYLLABLE YUO" #xA47B)
- ("YI SYLLABLE YUOP" #xA47C)
- ("YI SYLLABLE YOT" #xA47D)
- ("YI SYLLABLE YOX" #xA47E)
- ("YI SYLLABLE YO" #xA47F)
- ("YI SYLLABLE YOP" #xA480)
- ("YI SYLLABLE YUT" #xA481)
- ("YI SYLLABLE YUX" #xA482)
- ("YI SYLLABLE YU" #xA483)
- ("YI SYLLABLE YUP" #xA484)
- ("YI SYLLABLE YURX" #xA485)
- ("YI SYLLABLE YUR" #xA486)
- ("YI SYLLABLE YYT" #xA487)
- ("YI SYLLABLE YYX" #xA488)
- ("YI SYLLABLE YY" #xA489)
- ("YI SYLLABLE YYP" #xA48A)
- ("YI SYLLABLE YYRX" #xA48B)
- ("YI SYLLABLE YYR" #xA48C)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'yi-radicals
- '(("YI RADICAL QOT" #xA490)
- ("YI RADICAL LI" #xA491)
- ("YI RADICAL KIT" #xA492)
- ("YI RADICAL NYIP" #xA493)
- ("YI RADICAL CYP" #xA494)
- ("YI RADICAL SSI" #xA495)
- ("YI RADICAL GGOP" #xA496)
- ("YI RADICAL GEP" #xA497)
- ("YI RADICAL MI" #xA498)
- ("YI RADICAL HXIT" #xA499)
- ("YI RADICAL LYR" #xA49A)
- ("YI RADICAL BBUT" #xA49B)
- ("YI RADICAL MOP" #xA49C)
- ("YI RADICAL YO" #xA49D)
- ("YI RADICAL PUT" #xA49E)
- ("YI RADICAL HXUO" #xA49F)
- ("YI RADICAL TAT" #xA4A0)
- ("YI RADICAL GA" #xA4A1)
- ("YI RADICAL ZUP" #xA4A2)
- ("YI RADICAL CYT" #xA4A3)
- ("YI RADICAL DDUR" #xA4A4)
- ("YI RADICAL BUR" #xA4A5)
- ("YI RADICAL GGUO" #xA4A6)
- ("YI RADICAL NYOP" #xA4A7)
- ("YI RADICAL TU" #xA4A8)
- ("YI RADICAL OP" #xA4A9)
- ("YI RADICAL JJUT" #xA4AA)
- ("YI RADICAL ZOT" #xA4AB)
- ("YI RADICAL PYT" #xA4AC)
- ("YI RADICAL HMO" #xA4AD)
- ("YI RADICAL YIT" #xA4AE)
- ("YI RADICAL VUR" #xA4AF)
- ("YI RADICAL SHY" #xA4B0)
- ("YI RADICAL VEP" #xA4B1)
- ("YI RADICAL ZA" #xA4B2)
- ("YI RADICAL JO" #xA4B3)
- ("YI RADICAL NZUP" #xA4B4)
- ("YI RADICAL JJY" #xA4B5)
- ("YI RADICAL GOT" #xA4B6)
- ("YI RADICAL JJIE" #xA4B7)
- ("YI RADICAL WO" #xA4B8)
- ("YI RADICAL DU" #xA4B9)
- ("YI RADICAL SHUR" #xA4BA)
- ("YI RADICAL LIE" #xA4BB)
- ("YI RADICAL CY" #xA4BC)
- ("YI RADICAL CUOP" #xA4BD)
- ("YI RADICAL CIP" #xA4BE)
- ("YI RADICAL HXOP" #xA4BF)
- ("YI RADICAL SHAT" #xA4C0)
- ("YI RADICAL ZUR" #xA4C1)
- ("YI RADICAL SHOP" #xA4C2)
- ("YI RADICAL CHE" #xA4C3)
- ("YI RADICAL ZZIET" #xA4C4)
- ("YI RADICAL NBIE" #xA4C5)
- ("YI RADICAL KE" #xA4C6)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'alphabetic-presentation-forms
- '(("LATIN SMALL LIGATURE FF" #xFB00)
- ("LATIN SMALL LIGATURE FI" #xFB01)
- ("LATIN SMALL LIGATURE FL" #xFB02)
- ("LATIN SMALL LIGATURE FFI" #xFB03)
- ("LATIN SMALL LIGATURE FFL" #xFB04)
- ("LATIN SMALL LIGATURE LONG S T" #xFB05)
- ("LATIN SMALL LIGATURE ST" #xFB06)
- ("ARMENIAN SMALL LIGATURE MEN NOW" #xFB13)
- ("ARMENIAN SMALL LIGATURE MEN ECH" #xFB14)
- ("ARMENIAN SMALL LIGATURE MEN INI" #xFB15)
- ("ARMENIAN SMALL LIGATURE VEW NOW" #xFB16)
- ("ARMENIAN SMALL LIGATURE MEN XEH" #xFB17)
- ("HEBREW LETTER YOD WITH HIRIQ" #xFB1D)
- ("HEBREW POINT JUDEO-SPANISH VARIKA" #xFB1E)
- ("HEBREW LIGATURE YIDDISH YOD YOD PATAH" #xFB1F)
- ("HEBREW LETTER ALTERNATIVE AYIN" #xFB20)
- ("HEBREW LETTER WIDE ALEF" #xFB21)
- ("HEBREW LETTER WIDE DALET" #xFB22)
- ("HEBREW LETTER WIDE HE" #xFB23)
- ("HEBREW LETTER WIDE KAF" #xFB24)
- ("HEBREW LETTER WIDE LAMED" #xFB25)
- ("HEBREW LETTER WIDE FINAL MEM" #xFB26)
- ("HEBREW LETTER WIDE RESH" #xFB27)
- ("HEBREW LETTER WIDE TAV" #xFB28)
- ("HEBREW LETTER ALTERNATIVE PLUS SIGN" #xFB29)
- ("HEBREW LETTER SHIN WITH SHIN DOT" #xFB2A)
- ("HEBREW LETTER SHIN WITH SIN DOT" #xFB2B)
- ("HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT" #xFB2C)
- ("HEBREW LETTER SHIN WITH DAGESH AND SIN DOT" #xFB2D)
- ("HEBREW LETTER ALEF WITH PATAH" #xFB2E)
- ("HEBREW LETTER ALEF WITH QAMATS" #xFB2F)
- ("HEBREW LETTER ALEF WITH MAPIQ" #xFB30)
- ("HEBREW LETTER BET WITH DAGESH" #xFB31)
- ("HEBREW LETTER GIMEL WITH DAGESH" #xFB32)
- ("HEBREW LETTER DALET WITH DAGESH" #xFB33)
- ("HEBREW LETTER HE WITH MAPIQ" #xFB34)
- ("HEBREW LETTER VAV WITH DAGESH" #xFB35)
- ("HEBREW LETTER ZAYIN WITH DAGESH" #xFB36)
- ("HEBREW LETTER TET WITH DAGESH" #xFB38)
- ("HEBREW LETTER YOD WITH DAGESH" #xFB39)
- ("HEBREW LETTER FINAL KAF WITH DAGESH" #xFB3A)
- ("HEBREW LETTER KAF WITH DAGESH" #xFB3B)
- ("HEBREW LETTER LAMED WITH DAGESH" #xFB3C)
- ("HEBREW LETTER MEM WITH DAGESH" #xFB3E)
- ("HEBREW LETTER NUN WITH DAGESH" #xFB40)
- ("HEBREW LETTER SAMEKH WITH DAGESH" #xFB41)
- ("HEBREW LETTER FINAL PE WITH DAGESH" #xFB43)
- ("HEBREW LETTER PE WITH DAGESH" #xFB44)
- ("HEBREW LETTER TSADI WITH DAGESH" #xFB46)
- ("HEBREW LETTER QOF WITH DAGESH" #xFB47)
- ("HEBREW LETTER RESH WITH DAGESH" #xFB48)
- ("HEBREW LETTER SHIN WITH DAGESH" #xFB49)
- ("HEBREW LETTER TAV WITH DAGESH" #xFB4A)
- ("HEBREW LETTER VAV WITH HOLAM" #xFB4B)
- ("HEBREW LETTER BET WITH RAFE" #xFB4C)
- ("HEBREW LETTER KAF WITH RAFE" #xFB4D)
- ("HEBREW LETTER PE WITH RAFE" #xFB4E)
- ("HEBREW LIGATURE ALEF LAMED" #xFB4F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'arabic-presentation-forms-a
- '(("ARABIC LETTER ALEF WASLA ISOLATED FORM" #xFB50)
- ("ARABIC LETTER ALEF WASLA FINAL FORM" #xFB51)
- ("ARABIC LETTER BEEH ISOLATED FORM" #xFB52)
- ("ARABIC LETTER BEEH FINAL FORM" #xFB53)
- ("ARABIC LETTER BEEH INITIAL FORM" #xFB54)
- ("ARABIC LETTER BEEH MEDIAL FORM" #xFB55)
- ("ARABIC LETTER PEH ISOLATED FORM" #xFB56)
- ("ARABIC LETTER PEH FINAL FORM" #xFB57)
- ("ARABIC LETTER PEH INITIAL FORM" #xFB58)
- ("ARABIC LETTER PEH MEDIAL FORM" #xFB59)
- ("ARABIC LETTER BEHEH ISOLATED FORM" #xFB5A)
- ("ARABIC LETTER BEHEH FINAL FORM" #xFB5B)
- ("ARABIC LETTER BEHEH INITIAL FORM" #xFB5C)
- ("ARABIC LETTER BEHEH MEDIAL FORM" #xFB5D)
- ("ARABIC LETTER TTEHEH ISOLATED FORM" #xFB5E)
- ("ARABIC LETTER TTEHEH FINAL FORM" #xFB5F)
- ("ARABIC LETTER TTEHEH INITIAL FORM" #xFB60)
- ("ARABIC LETTER TTEHEH MEDIAL FORM" #xFB61)
- ("ARABIC LETTER TEHEH ISOLATED FORM" #xFB62)
- ("ARABIC LETTER TEHEH FINAL FORM" #xFB63)
- ("ARABIC LETTER TEHEH INITIAL FORM" #xFB64)
- ("ARABIC LETTER TEHEH MEDIAL FORM" #xFB65)
- ("ARABIC LETTER TTEH ISOLATED FORM" #xFB66)
- ("ARABIC LETTER TTEH FINAL FORM" #xFB67)
- ("ARABIC LETTER TTEH INITIAL FORM" #xFB68)
- ("ARABIC LETTER TTEH MEDIAL FORM" #xFB69)
- ("ARABIC LETTER VEH ISOLATED FORM" #xFB6A)
- ("ARABIC LETTER VEH FINAL FORM" #xFB6B)
- ("ARABIC LETTER VEH INITIAL FORM" #xFB6C)
- ("ARABIC LETTER VEH MEDIAL FORM" #xFB6D)
- ("ARABIC LETTER PEHEH ISOLATED FORM" #xFB6E)
- ("ARABIC LETTER PEHEH FINAL FORM" #xFB6F)
- ("ARABIC LETTER PEHEH INITIAL FORM" #xFB70)
- ("ARABIC LETTER PEHEH MEDIAL FORM" #xFB71)
- ("ARABIC LETTER DYEH ISOLATED FORM" #xFB72)
- ("ARABIC LETTER DYEH FINAL FORM" #xFB73)
- ("ARABIC LETTER DYEH INITIAL FORM" #xFB74)
- ("ARABIC LETTER DYEH MEDIAL FORM" #xFB75)
- ("ARABIC LETTER NYEH ISOLATED FORM" #xFB76)
- ("ARABIC LETTER NYEH FINAL FORM" #xFB77)
- ("ARABIC LETTER NYEH INITIAL FORM" #xFB78)
- ("ARABIC LETTER NYEH MEDIAL FORM" #xFB79)
- ("ARABIC LETTER TCHEH ISOLATED FORM" #xFB7A)
- ("ARABIC LETTER TCHEH FINAL FORM" #xFB7B)
- ("ARABIC LETTER TCHEH INITIAL FORM" #xFB7C)
- ("ARABIC LETTER TCHEH MEDIAL FORM" #xFB7D)
- ("ARABIC LETTER TCHEHEH ISOLATED FORM" #xFB7E)
- ("ARABIC LETTER TCHEHEH FINAL FORM" #xFB7F)
- ("ARABIC LETTER TCHEHEH INITIAL FORM" #xFB80)
- ("ARABIC LETTER TCHEHEH MEDIAL FORM" #xFB81)
- ("ARABIC LETTER DDAHAL ISOLATED FORM" #xFB82)
- ("ARABIC LETTER DDAHAL FINAL FORM" #xFB83)
- ("ARABIC LETTER DAHAL ISOLATED FORM" #xFB84)
- ("ARABIC LETTER DAHAL FINAL FORM" #xFB85)
- ("ARABIC LETTER DUL ISOLATED FORM" #xFB86)
- ("ARABIC LETTER DUL FINAL FORM" #xFB87)
- ("ARABIC LETTER DDAL ISOLATED FORM" #xFB88)
- ("ARABIC LETTER DDAL FINAL FORM" #xFB89)
- ("ARABIC LETTER JEH ISOLATED FORM" #xFB8A)
- ("ARABIC LETTER JEH FINAL FORM" #xFB8B)
- ("ARABIC LETTER RREH ISOLATED FORM" #xFB8C)
- ("ARABIC LETTER RREH FINAL FORM" #xFB8D)
- ("ARABIC LETTER KEHEH ISOLATED FORM" #xFB8E)
- ("ARABIC LETTER KEHEH FINAL FORM" #xFB8F)
- ("ARABIC LETTER KEHEH INITIAL FORM" #xFB90)
- ("ARABIC LETTER KEHEH MEDIAL FORM" #xFB91)
- ("ARABIC LETTER GAF ISOLATED FORM" #xFB92)
- ("ARABIC LETTER GAF FINAL FORM" #xFB93)
- ("ARABIC LETTER GAF INITIAL FORM" #xFB94)
- ("ARABIC LETTER GAF MEDIAL FORM" #xFB95)
- ("ARABIC LETTER GUEH ISOLATED FORM" #xFB96)
- ("ARABIC LETTER GUEH FINAL FORM" #xFB97)
- ("ARABIC LETTER GUEH INITIAL FORM" #xFB98)
- ("ARABIC LETTER GUEH MEDIAL FORM" #xFB99)
- ("ARABIC LETTER NGOEH ISOLATED FORM" #xFB9A)
- ("ARABIC LETTER NGOEH FINAL FORM" #xFB9B)
- ("ARABIC LETTER NGOEH INITIAL FORM" #xFB9C)
- ("ARABIC LETTER NGOEH MEDIAL FORM" #xFB9D)
- ("ARABIC LETTER NOON GHUNNA ISOLATED FORM" #xFB9E)
- ("ARABIC LETTER NOON GHUNNA FINAL FORM" #xFB9F)
- ("ARABIC LETTER RNOON ISOLATED FORM" #xFBA0)
- ("ARABIC LETTER RNOON FINAL FORM" #xFBA1)
- ("ARABIC LETTER RNOON INITIAL FORM" #xFBA2)
- ("ARABIC LETTER RNOON MEDIAL FORM" #xFBA3)
- ("ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM" #xFBA4)
- ("ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM" #xFBA5)
- ("ARABIC LETTER HEH GOAL ISOLATED FORM" #xFBA6)
- ("ARABIC LETTER HEH GOAL FINAL FORM" #xFBA7)
- ("ARABIC LETTER HEH GOAL INITIAL FORM" #xFBA8)
- ("ARABIC LETTER HEH GOAL MEDIAL FORM" #xFBA9)
- ("ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM" #xFBAA)
- ("ARABIC LETTER HEH DOACHASHMEE FINAL FORM" #xFBAB)
- ("ARABIC LETTER HEH DOACHASHMEE INITIAL FORM" #xFBAC)
- ("ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM" #xFBAD)
- ("ARABIC LETTER YEH BARREE ISOLATED FORM" #xFBAE)
- ("ARABIC LETTER YEH BARREE FINAL FORM" #xFBAF)
- ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM" #xFBB0)
- ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM" #xFBB1)
- ("ARABIC LETTER NG ISOLATED FORM" #xFBD3)
- ("ARABIC LETTER NG FINAL FORM" #xFBD4)
- ("ARABIC LETTER NG INITIAL FORM" #xFBD5)
- ("ARABIC LETTER NG MEDIAL FORM" #xFBD6)
- ("ARABIC LETTER U ISOLATED FORM" #xFBD7)
- ("ARABIC LETTER U FINAL FORM" #xFBD8)
- ("ARABIC LETTER OE ISOLATED FORM" #xFBD9)
- ("ARABIC LETTER OE FINAL FORM" #xFBDA)
- ("ARABIC LETTER YU ISOLATED FORM" #xFBDB)
- ("ARABIC LETTER YU FINAL FORM" #xFBDC)
- ("ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM" #xFBDD)
- ("ARABIC LETTER VE ISOLATED FORM" #xFBDE)
- ("ARABIC LETTER VE FINAL FORM" #xFBDF)
- ("ARABIC LETTER KIRGHIZ OE ISOLATED FORM" #xFBE0)
- ("ARABIC LETTER KIRGHIZ OE FINAL FORM" #xFBE1)
- ("ARABIC LETTER KIRGHIZ YU ISOLATED FORM" #xFBE2)
- ("ARABIC LETTER KIRGHIZ YU FINAL FORM" #xFBE3)
- ("ARABIC LETTER E ISOLATED FORM" #xFBE4)
- ("ARABIC LETTER E FINAL FORM" #xFBE5)
- ("ARABIC LETTER E INITIAL FORM" #xFBE6)
- ("ARABIC LETTER E MEDIAL FORM" #xFBE7)
- ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM" #xFBE8)
- ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM" #xFBE9)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM" #xFBEA)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM" #xFBEB)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM" #xFBEC)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM" #xFBED)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM" #xFBEE)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM" #xFBEF)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM" #xFBF0)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM" #xFBF1)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM" #xFBF2)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM" #xFBF3)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM" #xFBF4)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM" #xFBF5)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM" #xFBF6)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM" #xFBF7)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM" #xFBF8)
- ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFBF9)
- ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFBFA)
- ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM" #xFBFB)
- ("ARABIC LETTER FARSI YEH ISOLATED FORM" #xFBFC)
- ("ARABIC LETTER FARSI YEH FINAL FORM" #xFBFD)
- ("ARABIC LETTER FARSI YEH INITIAL FORM" #xFBFE)
- ("ARABIC LETTER FARSI YEH MEDIAL FORM" #xFBFF)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM" #xFC00)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM" #xFC01)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM" #xFC02)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFC03)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM" #xFC04)
- ("ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM" #xFC05)
- ("ARABIC LIGATURE BEH WITH HAH ISOLATED FORM" #xFC06)
- ("ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM" #xFC07)
- ("ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM" #xFC08)
- ("ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM" #xFC09)
- ("ARABIC LIGATURE BEH WITH YEH ISOLATED FORM" #xFC0A)
- ("ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM" #xFC0B)
- ("ARABIC LIGATURE TEH WITH HAH ISOLATED FORM" #xFC0C)
- ("ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM" #xFC0D)
- ("ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM" #xFC0E)
- ("ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM" #xFC0F)
- ("ARABIC LIGATURE TEH WITH YEH ISOLATED FORM" #xFC10)
- ("ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM" #xFC11)
- ("ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM" #xFC12)
- ("ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM" #xFC13)
- ("ARABIC LIGATURE THEH WITH YEH ISOLATED FORM" #xFC14)
- ("ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM" #xFC15)
- ("ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM" #xFC16)
- ("ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM" #xFC17)
- ("ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM" #xFC18)
- ("ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM" #xFC19)
- ("ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM" #xFC1A)
- ("ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM" #xFC1B)
- ("ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM" #xFC1C)
- ("ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM" #xFC1D)
- ("ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM" #xFC1E)
- ("ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM" #xFC1F)
- ("ARABIC LIGATURE SAD WITH HAH ISOLATED FORM" #xFC20)
- ("ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM" #xFC21)
- ("ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM" #xFC22)
- ("ARABIC LIGATURE DAD WITH HAH ISOLATED FORM" #xFC23)
- ("ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM" #xFC24)
- ("ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM" #xFC25)
- ("ARABIC LIGATURE TAH WITH HAH ISOLATED FORM" #xFC26)
- ("ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM" #xFC27)
- ("ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM" #xFC28)
- ("ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM" #xFC29)
- ("ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM" #xFC2A)
- ("ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM" #xFC2B)
- ("ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM" #xFC2C)
- ("ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM" #xFC2D)
- ("ARABIC LIGATURE FEH WITH HAH ISOLATED FORM" #xFC2E)
- ("ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM" #xFC2F)
- ("ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM" #xFC30)
- ("ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM" #xFC31)
- ("ARABIC LIGATURE FEH WITH YEH ISOLATED FORM" #xFC32)
- ("ARABIC LIGATURE QAF WITH HAH ISOLATED FORM" #xFC33)
- ("ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM" #xFC34)
- ("ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM" #xFC35)
- ("ARABIC LIGATURE QAF WITH YEH ISOLATED FORM" #xFC36)
- ("ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM" #xFC37)
- ("ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM" #xFC38)
- ("ARABIC LIGATURE KAF WITH HAH ISOLATED FORM" #xFC39)
- ("ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM" #xFC3A)
- ("ARABIC LIGATURE KAF WITH LAM ISOLATED FORM" #xFC3B)
- ("ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM" #xFC3C)
- ("ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM" #xFC3D)
- ("ARABIC LIGATURE KAF WITH YEH ISOLATED FORM" #xFC3E)
- ("ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM" #xFC3F)
- ("ARABIC LIGATURE LAM WITH HAH ISOLATED FORM" #xFC40)
- ("ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM" #xFC41)
- ("ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM" #xFC42)
- ("ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM" #xFC43)
- ("ARABIC LIGATURE LAM WITH YEH ISOLATED FORM" #xFC44)
- ("ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM" #xFC45)
- ("ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM" #xFC46)
- ("ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM" #xFC47)
- ("ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM" #xFC48)
- ("ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM" #xFC49)
- ("ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM" #xFC4A)
- ("ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM" #xFC4B)
- ("ARABIC LIGATURE NOON WITH HAH ISOLATED FORM" #xFC4C)
- ("ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM" #xFC4D)
- ("ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM" #xFC4E)
- ("ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM" #xFC4F)
- ("ARABIC LIGATURE NOON WITH YEH ISOLATED FORM" #xFC50)
- ("ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM" #xFC51)
- ("ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM" #xFC52)
- ("ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM" #xFC53)
- ("ARABIC LIGATURE HEH WITH YEH ISOLATED FORM" #xFC54)
- ("ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM" #xFC55)
- ("ARABIC LIGATURE YEH WITH HAH ISOLATED FORM" #xFC56)
- ("ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM" #xFC57)
- ("ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM" #xFC58)
- ("ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM" #xFC59)
- ("ARABIC LIGATURE YEH WITH YEH ISOLATED FORM" #xFC5A)
- ("ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5B)
- ("ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5C)
- ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5D)
- ("ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM" #xFC5E)
- ("ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM" #xFC5F)
- ("ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM" #xFC60)
- ("ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM" #xFC61)
- ("ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM" #xFC62)
- ("ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC63)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM" #xFC64)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM" #xFC65)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM" #xFC66)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM" #xFC67)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFC68)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM" #xFC69)
- ("ARABIC LIGATURE BEH WITH REH FINAL FORM" #xFC6A)
- ("ARABIC LIGATURE BEH WITH ZAIN FINAL FORM" #xFC6B)
- ("ARABIC LIGATURE BEH WITH MEEM FINAL FORM" #xFC6C)
- ("ARABIC LIGATURE BEH WITH NOON FINAL FORM" #xFC6D)
- ("ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM" #xFC6E)
- ("ARABIC LIGATURE BEH WITH YEH FINAL FORM" #xFC6F)
- ("ARABIC LIGATURE TEH WITH REH FINAL FORM" #xFC70)
- ("ARABIC LIGATURE TEH WITH ZAIN FINAL FORM" #xFC71)
- ("ARABIC LIGATURE TEH WITH MEEM FINAL FORM" #xFC72)
- ("ARABIC LIGATURE TEH WITH NOON FINAL FORM" #xFC73)
- ("ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM" #xFC74)
- ("ARABIC LIGATURE TEH WITH YEH FINAL FORM" #xFC75)
- ("ARABIC LIGATURE THEH WITH REH FINAL FORM" #xFC76)
- ("ARABIC LIGATURE THEH WITH ZAIN FINAL FORM" #xFC77)
- ("ARABIC LIGATURE THEH WITH MEEM FINAL FORM" #xFC78)
- ("ARABIC LIGATURE THEH WITH NOON FINAL FORM" #xFC79)
- ("ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM" #xFC7A)
- ("ARABIC LIGATURE THEH WITH YEH FINAL FORM" #xFC7B)
- ("ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM" #xFC7C)
- ("ARABIC LIGATURE FEH WITH YEH FINAL FORM" #xFC7D)
- ("ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM" #xFC7E)
- ("ARABIC LIGATURE QAF WITH YEH FINAL FORM" #xFC7F)
- ("ARABIC LIGATURE KAF WITH ALEF FINAL FORM" #xFC80)
- ("ARABIC LIGATURE KAF WITH LAM FINAL FORM" #xFC81)
- ("ARABIC LIGATURE KAF WITH MEEM FINAL FORM" #xFC82)
- ("ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM" #xFC83)
- ("ARABIC LIGATURE KAF WITH YEH FINAL FORM" #xFC84)
- ("ARABIC LIGATURE LAM WITH MEEM FINAL FORM" #xFC85)
- ("ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM" #xFC86)
- ("ARABIC LIGATURE LAM WITH YEH FINAL FORM" #xFC87)
- ("ARABIC LIGATURE MEEM WITH ALEF FINAL FORM" #xFC88)
- ("ARABIC LIGATURE MEEM WITH MEEM FINAL FORM" #xFC89)
- ("ARABIC LIGATURE NOON WITH REH FINAL FORM" #xFC8A)
- ("ARABIC LIGATURE NOON WITH ZAIN FINAL FORM" #xFC8B)
- ("ARABIC LIGATURE NOON WITH MEEM FINAL FORM" #xFC8C)
- ("ARABIC LIGATURE NOON WITH NOON FINAL FORM" #xFC8D)
- ("ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM" #xFC8E)
- ("ARABIC LIGATURE NOON WITH YEH FINAL FORM" #xFC8F)
- ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM" #xFC90)
- ("ARABIC LIGATURE YEH WITH REH FINAL FORM" #xFC91)
- ("ARABIC LIGATURE YEH WITH ZAIN FINAL FORM" #xFC92)
- ("ARABIC LIGATURE YEH WITH MEEM FINAL FORM" #xFC93)
- ("ARABIC LIGATURE YEH WITH NOON FINAL FORM" #xFC94)
- ("ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM" #xFC95)
- ("ARABIC LIGATURE YEH WITH YEH FINAL FORM" #xFC96)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM" #xFC97)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM" #xFC98)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM" #xFC99)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM" #xFC9A)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM" #xFC9B)
- ("ARABIC LIGATURE BEH WITH JEEM INITIAL FORM" #xFC9C)
- ("ARABIC LIGATURE BEH WITH HAH INITIAL FORM" #xFC9D)
- ("ARABIC LIGATURE BEH WITH KHAH INITIAL FORM" #xFC9E)
- ("ARABIC LIGATURE BEH WITH MEEM INITIAL FORM" #xFC9F)
- ("ARABIC LIGATURE BEH WITH HEH INITIAL FORM" #xFCA0)
- ("ARABIC LIGATURE TEH WITH JEEM INITIAL FORM" #xFCA1)
- ("ARABIC LIGATURE TEH WITH HAH INITIAL FORM" #xFCA2)
- ("ARABIC LIGATURE TEH WITH KHAH INITIAL FORM" #xFCA3)
- ("ARABIC LIGATURE TEH WITH MEEM INITIAL FORM" #xFCA4)
- ("ARABIC LIGATURE TEH WITH HEH INITIAL FORM" #xFCA5)
- ("ARABIC LIGATURE THEH WITH MEEM INITIAL FORM" #xFCA6)
- ("ARABIC LIGATURE JEEM WITH HAH INITIAL FORM" #xFCA7)
- ("ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM" #xFCA8)
- ("ARABIC LIGATURE HAH WITH JEEM INITIAL FORM" #xFCA9)
- ("ARABIC LIGATURE HAH WITH MEEM INITIAL FORM" #xFCAA)
- ("ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM" #xFCAB)
- ("ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM" #xFCAC)
- ("ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM" #xFCAD)
- ("ARABIC LIGATURE SEEN WITH HAH INITIAL FORM" #xFCAE)
- ("ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM" #xFCAF)
- ("ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM" #xFCB0)
- ("ARABIC LIGATURE SAD WITH HAH INITIAL FORM" #xFCB1)
- ("ARABIC LIGATURE SAD WITH KHAH INITIAL FORM" #xFCB2)
- ("ARABIC LIGATURE SAD WITH MEEM INITIAL FORM" #xFCB3)
- ("ARABIC LIGATURE DAD WITH JEEM INITIAL FORM" #xFCB4)
- ("ARABIC LIGATURE DAD WITH HAH INITIAL FORM" #xFCB5)
- ("ARABIC LIGATURE DAD WITH KHAH INITIAL FORM" #xFCB6)
- ("ARABIC LIGATURE DAD WITH MEEM INITIAL FORM" #xFCB7)
- ("ARABIC LIGATURE TAH WITH HAH INITIAL FORM" #xFCB8)
- ("ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM" #xFCB9)
- ("ARABIC LIGATURE AIN WITH JEEM INITIAL FORM" #xFCBA)
- ("ARABIC LIGATURE AIN WITH MEEM INITIAL FORM" #xFCBB)
- ("ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM" #xFCBC)
- ("ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM" #xFCBD)
- ("ARABIC LIGATURE FEH WITH JEEM INITIAL FORM" #xFCBE)
- ("ARABIC LIGATURE FEH WITH HAH INITIAL FORM" #xFCBF)
- ("ARABIC LIGATURE FEH WITH KHAH INITIAL FORM" #xFCC0)
- ("ARABIC LIGATURE FEH WITH MEEM INITIAL FORM" #xFCC1)
- ("ARABIC LIGATURE QAF WITH HAH INITIAL FORM" #xFCC2)
- ("ARABIC LIGATURE QAF WITH MEEM INITIAL FORM" #xFCC3)
- ("ARABIC LIGATURE KAF WITH JEEM INITIAL FORM" #xFCC4)
- ("ARABIC LIGATURE KAF WITH HAH INITIAL FORM" #xFCC5)
- ("ARABIC LIGATURE KAF WITH KHAH INITIAL FORM" #xFCC6)
- ("ARABIC LIGATURE KAF WITH LAM INITIAL FORM" #xFCC7)
- ("ARABIC LIGATURE KAF WITH MEEM INITIAL FORM" #xFCC8)
- ("ARABIC LIGATURE LAM WITH JEEM INITIAL FORM" #xFCC9)
- ("ARABIC LIGATURE LAM WITH HAH INITIAL FORM" #xFCCA)
- ("ARABIC LIGATURE LAM WITH KHAH INITIAL FORM" #xFCCB)
- ("ARABIC LIGATURE LAM WITH MEEM INITIAL FORM" #xFCCC)
- ("ARABIC LIGATURE LAM WITH HEH INITIAL FORM" #xFCCD)
- ("ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM" #xFCCE)
- ("ARABIC LIGATURE MEEM WITH HAH INITIAL FORM" #xFCCF)
- ("ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM" #xFCD0)
- ("ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM" #xFCD1)
- ("ARABIC LIGATURE NOON WITH JEEM INITIAL FORM" #xFCD2)
- ("ARABIC LIGATURE NOON WITH HAH INITIAL FORM" #xFCD3)
- ("ARABIC LIGATURE NOON WITH KHAH INITIAL FORM" #xFCD4)
- ("ARABIC LIGATURE NOON WITH MEEM INITIAL FORM" #xFCD5)
- ("ARABIC LIGATURE NOON WITH HEH INITIAL FORM" #xFCD6)
- ("ARABIC LIGATURE HEH WITH JEEM INITIAL FORM" #xFCD7)
- ("ARABIC LIGATURE HEH WITH MEEM INITIAL FORM" #xFCD8)
- ("ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM" #xFCD9)
- ("ARABIC LIGATURE YEH WITH JEEM INITIAL FORM" #xFCDA)
- ("ARABIC LIGATURE YEH WITH HAH INITIAL FORM" #xFCDB)
- ("ARABIC LIGATURE YEH WITH KHAH INITIAL FORM" #xFCDC)
- ("ARABIC LIGATURE YEH WITH MEEM INITIAL FORM" #xFCDD)
- ("ARABIC LIGATURE YEH WITH HEH INITIAL FORM" #xFCDE)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM" #xFCDF)
- ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM" #xFCE0)
- ("ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM" #xFCE1)
- ("ARABIC LIGATURE BEH WITH HEH MEDIAL FORM" #xFCE2)
- ("ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM" #xFCE3)
- ("ARABIC LIGATURE TEH WITH HEH MEDIAL FORM" #xFCE4)
- ("ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM" #xFCE5)
- ("ARABIC LIGATURE THEH WITH HEH MEDIAL FORM" #xFCE6)
- ("ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM" #xFCE7)
- ("ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM" #xFCE8)
- ("ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM" #xFCE9)
- ("ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM" #xFCEA)
- ("ARABIC LIGATURE KAF WITH LAM MEDIAL FORM" #xFCEB)
- ("ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM" #xFCEC)
- ("ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM" #xFCED)
- ("ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM" #xFCEE)
- ("ARABIC LIGATURE NOON WITH HEH MEDIAL FORM" #xFCEF)
- ("ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM" #xFCF0)
- ("ARABIC LIGATURE YEH WITH HEH MEDIAL FORM" #xFCF1)
- ("ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM" #xFCF2)
- ("ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM" #xFCF3)
- ("ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM" #xFCF4)
- ("ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM" #xFCF5)
- ("ARABIC LIGATURE TAH WITH YEH ISOLATED FORM" #xFCF6)
- ("ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF7)
- ("ARABIC LIGATURE AIN WITH YEH ISOLATED FORM" #xFCF8)
- ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF9)
- ("ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM" #xFCFA)
- ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFB)
- ("ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM" #xFCFC)
- ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFD)
- ("ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM" #xFCFE)
- ("ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM" #xFCFF)
- ("ARABIC LIGATURE HAH WITH YEH ISOLATED FORM" #xFD00)
- ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM" #xFD01)
- ("ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM" #xFD02)
- ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM" #xFD03)
- ("ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM" #xFD04)
- ("ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM" #xFD05)
- ("ARABIC LIGATURE SAD WITH YEH ISOLATED FORM" #xFD06)
- ("ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM" #xFD07)
- ("ARABIC LIGATURE DAD WITH YEH ISOLATED FORM" #xFD08)
- ("ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM" #xFD09)
- ("ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM" #xFD0A)
- ("ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM" #xFD0B)
- ("ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM" #xFD0C)
- ("ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM" #xFD0D)
- ("ARABIC LIGATURE SEEN WITH REH ISOLATED FORM" #xFD0E)
- ("ARABIC LIGATURE SAD WITH REH ISOLATED FORM" #xFD0F)
- ("ARABIC LIGATURE DAD WITH REH ISOLATED FORM" #xFD10)
- ("ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM" #xFD11)
- ("ARABIC LIGATURE TAH WITH YEH FINAL FORM" #xFD12)
- ("ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM" #xFD13)
- ("ARABIC LIGATURE AIN WITH YEH FINAL FORM" #xFD14)
- ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM" #xFD15)
- ("ARABIC LIGATURE GHAIN WITH YEH FINAL FORM" #xFD16)
- ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM" #xFD17)
- ("ARABIC LIGATURE SEEN WITH YEH FINAL FORM" #xFD18)
- ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM" #xFD19)
- ("ARABIC LIGATURE SHEEN WITH YEH FINAL FORM" #xFD1A)
- ("ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM" #xFD1B)
- ("ARABIC LIGATURE HAH WITH YEH FINAL FORM" #xFD1C)
- ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM" #xFD1D)
- ("ARABIC LIGATURE JEEM WITH YEH FINAL FORM" #xFD1E)
- ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM" #xFD1F)
- ("ARABIC LIGATURE KHAH WITH YEH FINAL FORM" #xFD20)
- ("ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM" #xFD21)
- ("ARABIC LIGATURE SAD WITH YEH FINAL FORM" #xFD22)
- ("ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM" #xFD23)
- ("ARABIC LIGATURE DAD WITH YEH FINAL FORM" #xFD24)
- ("ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM" #xFD25)
- ("ARABIC LIGATURE SHEEN WITH HAH FINAL FORM" #xFD26)
- ("ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM" #xFD27)
- ("ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM" #xFD28)
- ("ARABIC LIGATURE SHEEN WITH REH FINAL FORM" #xFD29)
- ("ARABIC LIGATURE SEEN WITH REH FINAL FORM" #xFD2A)
- ("ARABIC LIGATURE SAD WITH REH FINAL FORM" #xFD2B)
- ("ARABIC LIGATURE DAD WITH REH FINAL FORM" #xFD2C)
- ("ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM" #xFD2D)
- ("ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM" #xFD2E)
- ("ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM" #xFD2F)
- ("ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM" #xFD30)
- ("ARABIC LIGATURE SEEN WITH HEH INITIAL FORM" #xFD31)
- ("ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM" #xFD32)
- ("ARABIC LIGATURE TAH WITH MEEM INITIAL FORM" #xFD33)
- ("ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM" #xFD34)
- ("ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM" #xFD35)
- ("ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM" #xFD36)
- ("ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM" #xFD37)
- ("ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM" #xFD38)
- ("ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM" #xFD39)
- ("ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM" #xFD3A)
- ("ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM" #xFD3B)
- ("ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM" #xFD3C)
- ("ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM" #xFD3D)
- ("ORNATE LEFT PARENTHESIS" #xFD3E)
- ("ORNATE RIGHT PARENTHESIS" #xFD3F)
- ("ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM" #xFD50)
- ("ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM" #xFD51)
- ("ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM" #xFD52)
- ("ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM" #xFD53)
- ("ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM" #xFD54)
- ("ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM" #xFD55)
- ("ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM" #xFD56)
- ("ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM" #xFD57)
- ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM" #xFD58)
- ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM" #xFD59)
- ("ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM" #xFD5A)
- ("ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD5B)
- ("ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM" #xFD5C)
- ("ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM" #xFD5D)
- ("ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD5E)
- ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM" #xFD5F)
- ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM" #xFD60)
- ("ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM" #xFD61)
- ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM" #xFD62)
- ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD63)
- ("ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM" #xFD64)
- ("ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM" #xFD65)
- ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM" #xFD66)
- ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM" #xFD67)
- ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM" #xFD68)
- ("ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM" #xFD69)
- ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM" #xFD6A)
- ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM" #xFD6B)
- ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM" #xFD6C)
- ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD6D)
- ("ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD6E)
- ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM" #xFD6F)
- ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM" #xFD70)
- ("ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM" #xFD71)
- ("ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM" #xFD72)
- ("ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM" #xFD73)
- ("ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM" #xFD74)
- ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM" #xFD75)
- ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM" #xFD76)
- ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM" #xFD77)
- ("ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD78)
- ("ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM" #xFD79)
- ("ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM" #xFD7A)
- ("ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD7B)
- ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM" #xFD7C)
- ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM" #xFD7D)
- ("ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM" #xFD7E)
- ("ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM" #xFD7F)
- ("ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM" #xFD80)
- ("ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM" #xFD81)
- ("ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD82)
- ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM" #xFD83)
- ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM" #xFD84)
- ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM" #xFD85)
- ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM" #xFD86)
- ("ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM" #xFD87)
- ("ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM" #xFD88)
- ("ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM" #xFD89)
- ("ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM" #xFD8A)
- ("ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM" #xFD8B)
- ("ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM" #xFD8C)
- ("ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM" #xFD8D)
- ("ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM" #xFD8E)
- ("ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM" #xFD8F)
- ("ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM" #xFD92)
- ("ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM" #xFD93)
- ("ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM" #xFD94)
- ("ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM" #xFD95)
- ("ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD96)
- ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM" #xFD97)
- ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM" #xFD98)
- ("ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD99)
- ("ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM" #xFD9A)
- ("ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD9B)
- ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM" #xFD9C)
- ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM" #xFD9D)
- ("ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM" #xFD9E)
- ("ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM" #xFD9F)
- ("ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFDA0)
- ("ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM" #xFDA1)
- ("ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA2)
- ("ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM" #xFDA3)
- ("ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA4)
- ("ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM" #xFDA5)
- ("ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFDA6)
- ("ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA7)
- ("ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA8)
- ("ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM" #xFDA9)
- ("ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM" #xFDAA)
- ("ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM" #xFDAB)
- ("ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM" #xFDAC)
- ("ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM" #xFDAD)
- ("ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM" #xFDAE)
- ("ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM" #xFDAF)
- ("ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM" #xFDB0)
- ("ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM" #xFDB1)
- ("ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM" #xFDB2)
- ("ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM" #xFDB3)
- ("ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM" #xFDB4)
- ("ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM" #xFDB5)
- ("ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM" #xFDB6)
- ("ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM" #xFDB7)
- ("ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM" #xFDB8)
- ("ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM" #xFDB9)
- ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM" #xFDBA)
- ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM" #xFDBB)
- ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM" #xFDBC)
- ("ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM" #xFDBD)
- ("ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM" #xFDBE)
- ("ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM" #xFDBF)
- ("ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM" #xFDC0)
- ("ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM" #xFDC1)
- ("ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM" #xFDC2)
- ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM" #xFDC3)
- ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM" #xFDC4)
- ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM" #xFDC5)
- ("ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM" #xFDC6)
- ("ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM" #xFDC7)
- ("ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF0)
- ("ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF1)
- ("ARABIC LIGATURE ALLAH ISOLATED FORM" #xFDF2)
- ("ARABIC LIGATURE AKBAR ISOLATED FORM" #xFDF3)
- ("ARABIC LIGATURE MOHAMMAD ISOLATED FORM" #xFDF4)
- ("ARABIC LIGATURE SALAM ISOLATED FORM" #xFDF5)
- ("ARABIC LIGATURE RASOUL ISOLATED FORM" #xFDF6)
- ("ARABIC LIGATURE ALAYHE ISOLATED FORM" #xFDF7)
- ("ARABIC LIGATURE WASALLAM ISOLATED FORM" #xFDF8)
- ("ARABIC LIGATURE SALLA ISOLATED FORM" #xFDF9)
- ("ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM" #xFDFA)
- ("ARABIC LIGATURE JALLAJALALOUHOU" #xFDFB)
- ("RIAL SIGN" #xFDFC)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'variation-selectors
- '(("VARIATION SELECTOR-1" #xFE00)
- ("VARIATION SELECTOR-2" #xFE01)
- ("VARIATION SELECTOR-3" #xFE02)
- ("VARIATION SELECTOR-4" #xFE03)
- ("VARIATION SELECTOR-5" #xFE04)
- ("VARIATION SELECTOR-6" #xFE05)
- ("VARIATION SELECTOR-7" #xFE06)
- ("VARIATION SELECTOR-8" #xFE07)
- ("VARIATION SELECTOR-9" #xFE08)
- ("VARIATION SELECTOR-10" #xFE09)
- ("VARIATION SELECTOR-11" #xFE0A)
- ("VARIATION SELECTOR-12" #xFE0B)
- ("VARIATION SELECTOR-13" #xFE0C)
- ("VARIATION SELECTOR-14" #xFE0D)
- ("VARIATION SELECTOR-15" #xFE0E)
- ("VARIATION SELECTOR-16" #xFE0F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'combining-half-marks
- '(("COMBINING LIGATURE LEFT HALF" #xFE20)
- ("COMBINING LIGATURE RIGHT HALF" #xFE21)
- ("COMBINING DOUBLE TILDE LEFT HALF" #xFE22)
- ("COMBINING DOUBLE TILDE RIGHT HALF" #xFE23)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'cjk-compatibility-forms
- '(("PRESENTATION FORM FOR VERTICAL TWO DOT LEADER" #xFE30)
- ("PRESENTATION FORM FOR VERTICAL EM DASH" #xFE31)
- ("PRESENTATION FORM FOR VERTICAL EN DASH" #xFE32)
- ("PRESENTATION FORM FOR VERTICAL LOW LINE" #xFE33)
- ("PRESENTATION FORM FOR VERTICAL WAVY LOW LINE" #xFE34)
- ("PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS" #xFE35)
- ("PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS" #xFE36)
- ("PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET" #xFE37)
- ("PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET" #xFE38)
- ("PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET" #xFE39)
- ("PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET" #xFE3A)
- ("PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET" #xFE3B)
- ("PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET" #xFE3C)
- ("PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET" #xFE3D)
- ("PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET" #xFE3E)
- ("PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET" #xFE3F)
- ("PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET" #xFE40)
- ("PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET" #xFE41)
- ("PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET" #xFE42)
- ("PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET" #xFE43)
- ("PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET" #xFE44)
- ("SESAME DOT" #xFE45)
- ("WHITE SESAME DOT" #xFE46)
- ("DASHED OVERLINE" #xFE49)
- ("CENTRELINE OVERLINE" #xFE4A)
- ("WAVY OVERLINE" #xFE4B)
- ("DOUBLE WAVY OVERLINE" #xFE4C)
- ("DASHED LOW LINE" #xFE4D)
- ("CENTRELINE LOW LINE" #xFE4E)
- ("WAVY LOW LINE" #xFE4F)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'small-form-variants
- '(("SMALL COMMA" #xFE50)
- ("SMALL IDEOGRAPHIC COMMA" #xFE51)
- ("SMALL FULL STOP" #xFE52)
- ("SMALL SEMICOLON" #xFE54)
- ("SMALL COLON" #xFE55)
- ("SMALL QUESTION MARK" #xFE56)
- ("SMALL EXCLAMATION MARK" #xFE57)
- ("SMALL EM DASH" #xFE58)
- ("SMALL LEFT PARENTHESIS" #xFE59)
- ("SMALL RIGHT PARENTHESIS" #xFE5A)
- ("SMALL LEFT CURLY BRACKET" #xFE5B)
- ("SMALL RIGHT CURLY BRACKET" #xFE5C)
- ("SMALL LEFT TORTOISE SHELL BRACKET" #xFE5D)
- ("SMALL RIGHT TORTOISE SHELL BRACKET" #xFE5E)
- ("SMALL NUMBER SIGN" #xFE5F)
- ("SMALL AMPERSAND" #xFE60)
- ("SMALL ASTERISK" #xFE61)
- ("SMALL PLUS SIGN" #xFE62)
- ("SMALL HYPHEN-MINUS" #xFE63)
- ("SMALL LESS-THAN SIGN" #xFE64)
- ("SMALL GREATER-THAN SIGN" #xFE65)
- ("SMALL EQUALS SIGN" #xFE66)
- ("SMALL REVERSE SOLIDUS" #xFE68)
- ("SMALL DOLLAR SIGN" #xFE69)
- ("SMALL PERCENT SIGN" #xFE6A)
- ("SMALL COMMERCIAL AT" #xFE6B)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'arabic-presentation-forms-b
- '(("ARABIC FATHATAN ISOLATED FORM" #xFE70)
- ("ARABIC TATWEEL WITH FATHATAN ABOVE" #xFE71)
- ("ARABIC DAMMATAN ISOLATED FORM" #xFE72)
- ("ARABIC TAIL FRAGMENT" #xFE73)
- ("ARABIC KASRATAN ISOLATED FORM" #xFE74)
- ("ARABIC FATHA ISOLATED FORM" #xFE76)
- ("ARABIC FATHA MEDIAL FORM" #xFE77)
- ("ARABIC DAMMA ISOLATED FORM" #xFE78)
- ("ARABIC DAMMA MEDIAL FORM" #xFE79)
- ("ARABIC KASRA ISOLATED FORM" #xFE7A)
- ("ARABIC KASRA MEDIAL FORM" #xFE7B)
- ("ARABIC SHADDA ISOLATED FORM" #xFE7C)
- ("ARABIC SHADDA MEDIAL FORM" #xFE7D)
- ("ARABIC SUKUN ISOLATED FORM" #xFE7E)
- ("ARABIC SUKUN MEDIAL FORM" #xFE7F)
- ("ARABIC LETTER HAMZA ISOLATED FORM" #xFE80)
- ("ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM" #xFE81)
- ("ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM" #xFE82)
- ("ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFE83)
- ("ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM" #xFE84)
- ("ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM" #xFE85)
- ("ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM" #xFE86)
- ("ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM" #xFE87)
- ("ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM" #xFE88)
- ("ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM" #xFE89)
- ("ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM" #xFE8A)
- ("ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM" #xFE8B)
- ("ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM" #xFE8C)
- ("ARABIC LETTER ALEF ISOLATED FORM" #xFE8D)
- ("ARABIC LETTER ALEF FINAL FORM" #xFE8E)
- ("ARABIC LETTER BEH ISOLATED FORM" #xFE8F)
- ("ARABIC LETTER BEH FINAL FORM" #xFE90)
- ("ARABIC LETTER BEH INITIAL FORM" #xFE91)
- ("ARABIC LETTER BEH MEDIAL FORM" #xFE92)
- ("ARABIC LETTER TEH MARBUTA ISOLATED FORM" #xFE93)
- ("ARABIC LETTER TEH MARBUTA FINAL FORM" #xFE94)
- ("ARABIC LETTER TEH ISOLATED FORM" #xFE95)
- ("ARABIC LETTER TEH FINAL FORM" #xFE96)
- ("ARABIC LETTER TEH INITIAL FORM" #xFE97)
- ("ARABIC LETTER TEH MEDIAL FORM" #xFE98)
- ("ARABIC LETTER THEH ISOLATED FORM" #xFE99)
- ("ARABIC LETTER THEH FINAL FORM" #xFE9A)
- ("ARABIC LETTER THEH INITIAL FORM" #xFE9B)
- ("ARABIC LETTER THEH MEDIAL FORM" #xFE9C)
- ("ARABIC LETTER JEEM ISOLATED FORM" #xFE9D)
- ("ARABIC LETTER JEEM FINAL FORM" #xFE9E)
- ("ARABIC LETTER JEEM INITIAL FORM" #xFE9F)
- ("ARABIC LETTER JEEM MEDIAL FORM" #xFEA0)
- ("ARABIC LETTER HAH ISOLATED FORM" #xFEA1)
- ("ARABIC LETTER HAH FINAL FORM" #xFEA2)
- ("ARABIC LETTER HAH INITIAL FORM" #xFEA3)
- ("ARABIC LETTER HAH MEDIAL FORM" #xFEA4)
- ("ARABIC LETTER KHAH ISOLATED FORM" #xFEA5)
- ("ARABIC LETTER KHAH FINAL FORM" #xFEA6)
- ("ARABIC LETTER KHAH INITIAL FORM" #xFEA7)
- ("ARABIC LETTER KHAH MEDIAL FORM" #xFEA8)
- ("ARABIC LETTER DAL ISOLATED FORM" #xFEA9)
- ("ARABIC LETTER DAL FINAL FORM" #xFEAA)
- ("ARABIC LETTER THAL ISOLATED FORM" #xFEAB)
- ("ARABIC LETTER THAL FINAL FORM" #xFEAC)
- ("ARABIC LETTER REH ISOLATED FORM" #xFEAD)
- ("ARABIC LETTER REH FINAL FORM" #xFEAE)
- ("ARABIC LETTER ZAIN ISOLATED FORM" #xFEAF)
- ("ARABIC LETTER ZAIN FINAL FORM" #xFEB0)
- ("ARABIC LETTER SEEN ISOLATED FORM" #xFEB1)
- ("ARABIC LETTER SEEN FINAL FORM" #xFEB2)
- ("ARABIC LETTER SEEN INITIAL FORM" #xFEB3)
- ("ARABIC LETTER SEEN MEDIAL FORM" #xFEB4)
- ("ARABIC LETTER SHEEN ISOLATED FORM" #xFEB5)
- ("ARABIC LETTER SHEEN FINAL FORM" #xFEB6)
- ("ARABIC LETTER SHEEN INITIAL FORM" #xFEB7)
- ("ARABIC LETTER SHEEN MEDIAL FORM" #xFEB8)
- ("ARABIC LETTER SAD ISOLATED FORM" #xFEB9)
- ("ARABIC LETTER SAD FINAL FORM" #xFEBA)
- ("ARABIC LETTER SAD INITIAL FORM" #xFEBB)
- ("ARABIC LETTER SAD MEDIAL FORM" #xFEBC)
- ("ARABIC LETTER DAD ISOLATED FORM" #xFEBD)
- ("ARABIC LETTER DAD FINAL FORM" #xFEBE)
- ("ARABIC LETTER DAD INITIAL FORM" #xFEBF)
- ("ARABIC LETTER DAD MEDIAL FORM" #xFEC0)
- ("ARABIC LETTER TAH ISOLATED FORM" #xFEC1)
- ("ARABIC LETTER TAH FINAL FORM" #xFEC2)
- ("ARABIC LETTER TAH INITIAL FORM" #xFEC3)
- ("ARABIC LETTER TAH MEDIAL FORM" #xFEC4)
- ("ARABIC LETTER ZAH ISOLATED FORM" #xFEC5)
- ("ARABIC LETTER ZAH FINAL FORM" #xFEC6)
- ("ARABIC LETTER ZAH INITIAL FORM" #xFEC7)
- ("ARABIC LETTER ZAH MEDIAL FORM" #xFEC8)
- ("ARABIC LETTER AIN ISOLATED FORM" #xFEC9)
- ("ARABIC LETTER AIN FINAL FORM" #xFECA)
- ("ARABIC LETTER AIN INITIAL FORM" #xFECB)
- ("ARABIC LETTER AIN MEDIAL FORM" #xFECC)
- ("ARABIC LETTER GHAIN ISOLATED FORM" #xFECD)
- ("ARABIC LETTER GHAIN FINAL FORM" #xFECE)
- ("ARABIC LETTER GHAIN INITIAL FORM" #xFECF)
- ("ARABIC LETTER GHAIN MEDIAL FORM" #xFED0)
- ("ARABIC LETTER FEH ISOLATED FORM" #xFED1)
- ("ARABIC LETTER FEH FINAL FORM" #xFED2)
- ("ARABIC LETTER FEH INITIAL FORM" #xFED3)
- ("ARABIC LETTER FEH MEDIAL FORM" #xFED4)
- ("ARABIC LETTER QAF ISOLATED FORM" #xFED5)
- ("ARABIC LETTER QAF FINAL FORM" #xFED6)
- ("ARABIC LETTER QAF INITIAL FORM" #xFED7)
- ("ARABIC LETTER QAF MEDIAL FORM" #xFED8)
- ("ARABIC LETTER KAF ISOLATED FORM" #xFED9)
- ("ARABIC LETTER KAF FINAL FORM" #xFEDA)
- ("ARABIC LETTER KAF INITIAL FORM" #xFEDB)
- ("ARABIC LETTER KAF MEDIAL FORM" #xFEDC)
- ("ARABIC LETTER LAM ISOLATED FORM" #xFEDD)
- ("ARABIC LETTER LAM FINAL FORM" #xFEDE)
- ("ARABIC LETTER LAM INITIAL FORM" #xFEDF)
- ("ARABIC LETTER LAM MEDIAL FORM" #xFEE0)
- ("ARABIC LETTER MEEM ISOLATED FORM" #xFEE1)
- ("ARABIC LETTER MEEM FINAL FORM" #xFEE2)
- ("ARABIC LETTER MEEM INITIAL FORM" #xFEE3)
- ("ARABIC LETTER MEEM MEDIAL FORM" #xFEE4)
- ("ARABIC LETTER NOON ISOLATED FORM" #xFEE5)
- ("ARABIC LETTER NOON FINAL FORM" #xFEE6)
- ("ARABIC LETTER NOON INITIAL FORM" #xFEE7)
- ("ARABIC LETTER NOON MEDIAL FORM" #xFEE8)
- ("ARABIC LETTER HEH ISOLATED FORM" #xFEE9)
- ("ARABIC LETTER HEH FINAL FORM" #xFEEA)
- ("ARABIC LETTER HEH INITIAL FORM" #xFEEB)
- ("ARABIC LETTER HEH MEDIAL FORM" #xFEEC)
- ("ARABIC LETTER WAW ISOLATED FORM" #xFEED)
- ("ARABIC LETTER WAW FINAL FORM" #xFEEE)
- ("ARABIC LETTER ALEF MAKSURA ISOLATED FORM" #xFEEF)
- ("ARABIC LETTER ALEF MAKSURA FINAL FORM" #xFEF0)
- ("ARABIC LETTER YEH ISOLATED FORM" #xFEF1)
- ("ARABIC LETTER YEH FINAL FORM" #xFEF2)
- ("ARABIC LETTER YEH INITIAL FORM" #xFEF3)
- ("ARABIC LETTER YEH MEDIAL FORM" #xFEF4)
- ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM" #xFEF5)
- ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM" #xFEF6)
- ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFEF7)
- ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM" #xFEF8)
- ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM" #xFEF9)
- ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM" #xFEFA)
- ("ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM" #xFEFB)
- ("ARABIC LIGATURE LAM WITH ALEF FINAL FORM" #xFEFC)
- ("ZERO WIDTH NO-BREAK SPACE" #xFEFF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'halfwidth-and-fullwidth-forms
- '(("FULLWIDTH EXCLAMATION MARK" #xFF01)
- ("FULLWIDTH QUOTATION MARK" #xFF02)
- ("FULLWIDTH NUMBER SIGN" #xFF03)
- ("FULLWIDTH DOLLAR SIGN" #xFF04)
- ("FULLWIDTH PERCENT SIGN" #xFF05)
- ("FULLWIDTH AMPERSAND" #xFF06)
- ("FULLWIDTH APOSTROPHE" #xFF07)
- ("FULLWIDTH LEFT PARENTHESIS" #xFF08)
- ("FULLWIDTH RIGHT PARENTHESIS" #xFF09)
- ("FULLWIDTH ASTERISK" #xFF0A)
- ("FULLWIDTH PLUS SIGN" #xFF0B)
- ("FULLWIDTH COMMA" #xFF0C)
- ("FULLWIDTH HYPHEN-MINUS" #xFF0D)
- ("FULLWIDTH FULL STOP" #xFF0E)
- ("FULLWIDTH SOLIDUS" #xFF0F)
- ("FULLWIDTH DIGIT ZERO" #xFF10)
- ("FULLWIDTH DIGIT ONE" #xFF11)
- ("FULLWIDTH DIGIT TWO" #xFF12)
- ("FULLWIDTH DIGIT THREE" #xFF13)
- ("FULLWIDTH DIGIT FOUR" #xFF14)
- ("FULLWIDTH DIGIT FIVE" #xFF15)
- ("FULLWIDTH DIGIT SIX" #xFF16)
- ("FULLWIDTH DIGIT SEVEN" #xFF17)
- ("FULLWIDTH DIGIT EIGHT" #xFF18)
- ("FULLWIDTH DIGIT NINE" #xFF19)
- ("FULLWIDTH COLON" #xFF1A)
- ("FULLWIDTH SEMICOLON" #xFF1B)
- ("FULLWIDTH LESS-THAN SIGN" #xFF1C)
- ("FULLWIDTH EQUALS SIGN" #xFF1D)
- ("FULLWIDTH GREATER-THAN SIGN" #xFF1E)
- ("FULLWIDTH QUESTION MARK" #xFF1F)
- ("FULLWIDTH COMMERCIAL AT" #xFF20)
- ("FULLWIDTH LATIN CAPITAL LETTER A" #xFF21)
- ("FULLWIDTH LATIN CAPITAL LETTER B" #xFF22)
- ("FULLWIDTH LATIN CAPITAL LETTER C" #xFF23)
- ("FULLWIDTH LATIN CAPITAL LETTER D" #xFF24)
- ("FULLWIDTH LATIN CAPITAL LETTER E" #xFF25)
- ("FULLWIDTH LATIN CAPITAL LETTER F" #xFF26)
- ("FULLWIDTH LATIN CAPITAL LETTER G" #xFF27)
- ("FULLWIDTH LATIN CAPITAL LETTER H" #xFF28)
- ("FULLWIDTH LATIN CAPITAL LETTER I" #xFF29)
- ("FULLWIDTH LATIN CAPITAL LETTER J" #xFF2A)
- ("FULLWIDTH LATIN CAPITAL LETTER K" #xFF2B)
- ("FULLWIDTH LATIN CAPITAL LETTER L" #xFF2C)
- ("FULLWIDTH LATIN CAPITAL LETTER M" #xFF2D)
- ("FULLWIDTH LATIN CAPITAL LETTER N" #xFF2E)
- ("FULLWIDTH LATIN CAPITAL LETTER O" #xFF2F)
- ("FULLWIDTH LATIN CAPITAL LETTER P" #xFF30)
- ("FULLWIDTH LATIN CAPITAL LETTER Q" #xFF31)
- ("FULLWIDTH LATIN CAPITAL LETTER R" #xFF32)
- ("FULLWIDTH LATIN CAPITAL LETTER S" #xFF33)
- ("FULLWIDTH LATIN CAPITAL LETTER T" #xFF34)
- ("FULLWIDTH LATIN CAPITAL LETTER U" #xFF35)
- ("FULLWIDTH LATIN CAPITAL LETTER V" #xFF36)
- ("FULLWIDTH LATIN CAPITAL LETTER W" #xFF37)
- ("FULLWIDTH LATIN CAPITAL LETTER X" #xFF38)
- ("FULLWIDTH LATIN CAPITAL LETTER Y" #xFF39)
- ("FULLWIDTH LATIN CAPITAL LETTER Z" #xFF3A)
- ("FULLWIDTH LEFT SQUARE BRACKET" #xFF3B)
- ("FULLWIDTH REVERSE SOLIDUS" #xFF3C)
- ("FULLWIDTH RIGHT SQUARE BRACKET" #xFF3D)
- ("FULLWIDTH CIRCUMFLEX ACCENT" #xFF3E)
- ("FULLWIDTH LOW LINE" #xFF3F)
- ("FULLWIDTH GRAVE ACCENT" #xFF40)
- ("FULLWIDTH LATIN SMALL LETTER A" #xFF41)
- ("FULLWIDTH LATIN SMALL LETTER B" #xFF42)
- ("FULLWIDTH LATIN SMALL LETTER C" #xFF43)
- ("FULLWIDTH LATIN SMALL LETTER D" #xFF44)
- ("FULLWIDTH LATIN SMALL LETTER E" #xFF45)
- ("FULLWIDTH LATIN SMALL LETTER F" #xFF46)
- ("FULLWIDTH LATIN SMALL LETTER G" #xFF47)
- ("FULLWIDTH LATIN SMALL LETTER H" #xFF48)
- ("FULLWIDTH LATIN SMALL LETTER I" #xFF49)
- ("FULLWIDTH LATIN SMALL LETTER J" #xFF4A)
- ("FULLWIDTH LATIN SMALL LETTER K" #xFF4B)
- ("FULLWIDTH LATIN SMALL LETTER L" #xFF4C)
- ("FULLWIDTH LATIN SMALL LETTER M" #xFF4D)
- ("FULLWIDTH LATIN SMALL LETTER N" #xFF4E)
- ("FULLWIDTH LATIN SMALL LETTER O" #xFF4F)
- ("FULLWIDTH LATIN SMALL LETTER P" #xFF50)
- ("FULLWIDTH LATIN SMALL LETTER Q" #xFF51)
- ("FULLWIDTH LATIN SMALL LETTER R" #xFF52)
- ("FULLWIDTH LATIN SMALL LETTER S" #xFF53)
- ("FULLWIDTH LATIN SMALL LETTER T" #xFF54)
- ("FULLWIDTH LATIN SMALL LETTER U" #xFF55)
- ("FULLWIDTH LATIN SMALL LETTER V" #xFF56)
- ("FULLWIDTH LATIN SMALL LETTER W" #xFF57)
- ("FULLWIDTH LATIN SMALL LETTER X" #xFF58)
- ("FULLWIDTH LATIN SMALL LETTER Y" #xFF59)
- ("FULLWIDTH LATIN SMALL LETTER Z" #xFF5A)
- ("FULLWIDTH LEFT CURLY BRACKET" #xFF5B)
- ("FULLWIDTH VERTICAL LINE" #xFF5C)
- ("FULLWIDTH RIGHT CURLY BRACKET" #xFF5D)
- ("FULLWIDTH TILDE" #xFF5E)
- ("FULLWIDTH LEFT WHITE PARENTHESIS" #xFF5F)
- ("FULLWIDTH RIGHT WHITE PARENTHESIS" #xFF60)
- ("HALFWIDTH IDEOGRAPHIC FULL STOP" #xFF61)
- ("HALFWIDTH LEFT CORNER BRACKET" #xFF62)
- ("HALFWIDTH RIGHT CORNER BRACKET" #xFF63)
- ("HALFWIDTH IDEOGRAPHIC COMMA" #xFF64)
- ("HALFWIDTH KATAKANA MIDDLE DOT" #xFF65)
- ("HALFWIDTH KATAKANA LETTER WO" #xFF66)
- ("HALFWIDTH KATAKANA LETTER SMALL A" #xFF67)
- ("HALFWIDTH KATAKANA LETTER SMALL I" #xFF68)
- ("HALFWIDTH KATAKANA LETTER SMALL U" #xFF69)
- ("HALFWIDTH KATAKANA LETTER SMALL E" #xFF6A)
- ("HALFWIDTH KATAKANA LETTER SMALL O" #xFF6B)
- ("HALFWIDTH KATAKANA LETTER SMALL YA" #xFF6C)
- ("HALFWIDTH KATAKANA LETTER SMALL YU" #xFF6D)
- ("HALFWIDTH KATAKANA LETTER SMALL YO" #xFF6E)
- ("HALFWIDTH KATAKANA LETTER SMALL TU" #xFF6F)
- ("HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK" #xFF70)
- ("HALFWIDTH KATAKANA LETTER A" #xFF71)
- ("HALFWIDTH KATAKANA LETTER I" #xFF72)
- ("HALFWIDTH KATAKANA LETTER U" #xFF73)
- ("HALFWIDTH KATAKANA LETTER E" #xFF74)
- ("HALFWIDTH KATAKANA LETTER O" #xFF75)
- ("HALFWIDTH KATAKANA LETTER KA" #xFF76)
- ("HALFWIDTH KATAKANA LETTER KI" #xFF77)
- ("HALFWIDTH KATAKANA LETTER KU" #xFF78)
- ("HALFWIDTH KATAKANA LETTER KE" #xFF79)
- ("HALFWIDTH KATAKANA LETTER KO" #xFF7A)
- ("HALFWIDTH KATAKANA LETTER SA" #xFF7B)
- ("HALFWIDTH KATAKANA LETTER SI" #xFF7C)
- ("HALFWIDTH KATAKANA LETTER SU" #xFF7D)
- ("HALFWIDTH KATAKANA LETTER SE" #xFF7E)
- ("HALFWIDTH KATAKANA LETTER SO" #xFF7F)
- ("HALFWIDTH KATAKANA LETTER TA" #xFF80)
- ("HALFWIDTH KATAKANA LETTER TI" #xFF81)
- ("HALFWIDTH KATAKANA LETTER TU" #xFF82)
- ("HALFWIDTH KATAKANA LETTER TE" #xFF83)
- ("HALFWIDTH KATAKANA LETTER TO" #xFF84)
- ("HALFWIDTH KATAKANA LETTER NA" #xFF85)
- ("HALFWIDTH KATAKANA LETTER NI" #xFF86)
- ("HALFWIDTH KATAKANA LETTER NU" #xFF87)
- ("HALFWIDTH KATAKANA LETTER NE" #xFF88)
- ("HALFWIDTH KATAKANA LETTER NO" #xFF89)
- ("HALFWIDTH KATAKANA LETTER HA" #xFF8A)
- ("HALFWIDTH KATAKANA LETTER HI" #xFF8B)
- ("HALFWIDTH KATAKANA LETTER HU" #xFF8C)
- ("HALFWIDTH KATAKANA LETTER HE" #xFF8D)
- ("HALFWIDTH KATAKANA LETTER HO" #xFF8E)
- ("HALFWIDTH KATAKANA LETTER MA" #xFF8F)
- ("HALFWIDTH KATAKANA LETTER MI" #xFF90)
- ("HALFWIDTH KATAKANA LETTER MU" #xFF91)
- ("HALFWIDTH KATAKANA LETTER ME" #xFF92)
- ("HALFWIDTH KATAKANA LETTER MO" #xFF93)
- ("HALFWIDTH KATAKANA LETTER YA" #xFF94)
- ("HALFWIDTH KATAKANA LETTER YU" #xFF95)
- ("HALFWIDTH KATAKANA LETTER YO" #xFF96)
- ("HALFWIDTH KATAKANA LETTER RA" #xFF97)
- ("HALFWIDTH KATAKANA LETTER RI" #xFF98)
- ("HALFWIDTH KATAKANA LETTER RU" #xFF99)
- ("HALFWIDTH KATAKANA LETTER RE" #xFF9A)
- ("HALFWIDTH KATAKANA LETTER RO" #xFF9B)
- ("HALFWIDTH KATAKANA LETTER WA" #xFF9C)
- ("HALFWIDTH KATAKANA LETTER N" #xFF9D)
- ("HALFWIDTH KATAKANA VOICED SOUND MARK" #xFF9E)
- ("HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK" #xFF9F)
- ("HALFWIDTH HANGUL FILLER" #xFFA0)
- ("HALFWIDTH HANGUL LETTER KIYEOK" #xFFA1)
- ("HALFWIDTH HANGUL LETTER SSANGKIYEOK" #xFFA2)
- ("HALFWIDTH HANGUL LETTER KIYEOK-SIOS" #xFFA3)
- ("HALFWIDTH HANGUL LETTER NIEUN" #xFFA4)
- ("HALFWIDTH HANGUL LETTER NIEUN-CIEUC" #xFFA5)
- ("HALFWIDTH HANGUL LETTER NIEUN-HIEUH" #xFFA6)
- ("HALFWIDTH HANGUL LETTER TIKEUT" #xFFA7)
- ("HALFWIDTH HANGUL LETTER SSANGTIKEUT" #xFFA8)
- ("HALFWIDTH HANGUL LETTER RIEUL" #xFFA9)
- ("HALFWIDTH HANGUL LETTER RIEUL-KIYEOK" #xFFAA)
- ("HALFWIDTH HANGUL LETTER RIEUL-MIEUM" #xFFAB)
- ("HALFWIDTH HANGUL LETTER RIEUL-PIEUP" #xFFAC)
- ("HALFWIDTH HANGUL LETTER RIEUL-SIOS" #xFFAD)
- ("HALFWIDTH HANGUL LETTER RIEUL-THIEUTH" #xFFAE)
- ("HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH" #xFFAF)
- ("HALFWIDTH HANGUL LETTER RIEUL-HIEUH" #xFFB0)
- ("HALFWIDTH HANGUL LETTER MIEUM" #xFFB1)
- ("HALFWIDTH HANGUL LETTER PIEUP" #xFFB2)
- ("HALFWIDTH HANGUL LETTER SSANGPIEUP" #xFFB3)
- ("HALFWIDTH HANGUL LETTER PIEUP-SIOS" #xFFB4)
- ("HALFWIDTH HANGUL LETTER SIOS" #xFFB5)
- ("HALFWIDTH HANGUL LETTER SSANGSIOS" #xFFB6)
- ("HALFWIDTH HANGUL LETTER IEUNG" #xFFB7)
- ("HALFWIDTH HANGUL LETTER CIEUC" #xFFB8)
- ("HALFWIDTH HANGUL LETTER SSANGCIEUC" #xFFB9)
- ("HALFWIDTH HANGUL LETTER CHIEUCH" #xFFBA)
- ("HALFWIDTH HANGUL LETTER KHIEUKH" #xFFBB)
- ("HALFWIDTH HANGUL LETTER THIEUTH" #xFFBC)
- ("HALFWIDTH HANGUL LETTER PHIEUPH" #xFFBD)
- ("HALFWIDTH HANGUL LETTER HIEUH" #xFFBE)
- ("HALFWIDTH HANGUL LETTER A" #xFFC2)
- ("HALFWIDTH HANGUL LETTER AE" #xFFC3)
- ("HALFWIDTH HANGUL LETTER YA" #xFFC4)
- ("HALFWIDTH HANGUL LETTER YAE" #xFFC5)
- ("HALFWIDTH HANGUL LETTER EO" #xFFC6)
- ("HALFWIDTH HANGUL LETTER E" #xFFC7)
- ("HALFWIDTH HANGUL LETTER YEO" #xFFCA)
- ("HALFWIDTH HANGUL LETTER YE" #xFFCB)
- ("HALFWIDTH HANGUL LETTER O" #xFFCC)
- ("HALFWIDTH HANGUL LETTER WA" #xFFCD)
- ("HALFWIDTH HANGUL LETTER WAE" #xFFCE)
- ("HALFWIDTH HANGUL LETTER OE" #xFFCF)
- ("HALFWIDTH HANGUL LETTER YO" #xFFD2)
- ("HALFWIDTH HANGUL LETTER U" #xFFD3)
- ("HALFWIDTH HANGUL LETTER WEO" #xFFD4)
- ("HALFWIDTH HANGUL LETTER WE" #xFFD5)
- ("HALFWIDTH HANGUL LETTER WI" #xFFD6)
- ("HALFWIDTH HANGUL LETTER YU" #xFFD7)
- ("HALFWIDTH HANGUL LETTER EU" #xFFDA)
- ("HALFWIDTH HANGUL LETTER YI" #xFFDB)
- ("HALFWIDTH HANGUL LETTER I" #xFFDC)
- ("FULLWIDTH CENT SIGN" #xFFE0)
- ("FULLWIDTH POUND SIGN" #xFFE1)
- ("FULLWIDTH NOT SIGN" #xFFE2)
- ("FULLWIDTH MACRON" #xFFE3)
- ("FULLWIDTH BROKEN BAR" #xFFE4)
- ("FULLWIDTH YEN SIGN" #xFFE5)
- ("FULLWIDTH WON SIGN" #xFFE6)
- ("HALFWIDTH FORMS LIGHT VERTICAL" #xFFE8)
- ("HALFWIDTH LEFTWARDS ARROW" #xFFE9)
- ("HALFWIDTH UPWARDS ARROW" #xFFEA)
- ("HALFWIDTH RIGHTWARDS ARROW" #xFFEB)
- ("HALFWIDTH DOWNWARDS ARROW" #xFFEC)
- ("HALFWIDTH BLACK SQUARE" #xFFED)
- ("HALFWIDTH WHITE CIRCLE" #xFFEE)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'specials
- '(("INTERLINEAR ANNOTATION ANCHOR" #xFFF9)
- ("INTERLINEAR ANNOTATION SEPARATOR" #xFFFA)
- ("INTERLINEAR ANNOTATION TERMINATOR" #xFFFB)
- ("OBJECT REPLACEMENT CHARACTER" #xFFFC)
- ("REPLACEMENT CHARACTER" #xFFFD)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'old-italic
- '(("OLD ITALIC LETTER A" #x10300)
- ("OLD ITALIC LETTER BE" #x10301)
- ("OLD ITALIC LETTER KE" #x10302)
- ("OLD ITALIC LETTER DE" #x10303)
- ("OLD ITALIC LETTER E" #x10304)
- ("OLD ITALIC LETTER VE" #x10305)
- ("OLD ITALIC LETTER ZE" #x10306)
- ("OLD ITALIC LETTER HE" #x10307)
- ("OLD ITALIC LETTER THE" #x10308)
- ("OLD ITALIC LETTER I" #x10309)
- ("OLD ITALIC LETTER KA" #x1030A)
- ("OLD ITALIC LETTER EL" #x1030B)
- ("OLD ITALIC LETTER EM" #x1030C)
- ("OLD ITALIC LETTER EN" #x1030D)
- ("OLD ITALIC LETTER ESH" #x1030E)
- ("OLD ITALIC LETTER O" #x1030F)
- ("OLD ITALIC LETTER PE" #x10310)
- ("OLD ITALIC LETTER SHE" #x10311)
- ("OLD ITALIC LETTER KU" #x10312)
- ("OLD ITALIC LETTER ER" #x10313)
- ("OLD ITALIC LETTER ES" #x10314)
- ("OLD ITALIC LETTER TE" #x10315)
- ("OLD ITALIC LETTER U" #x10316)
- ("OLD ITALIC LETTER EKS" #x10317)
- ("OLD ITALIC LETTER PHE" #x10318)
- ("OLD ITALIC LETTER KHE" #x10319)
- ("OLD ITALIC LETTER EF" #x1031A)
- ("OLD ITALIC LETTER ERS" #x1031B)
- ("OLD ITALIC LETTER CHE" #x1031C)
- ("OLD ITALIC LETTER II" #x1031D)
- ("OLD ITALIC LETTER UU" #x1031E)
- ("OLD ITALIC NUMERAL ONE" #x10320)
- ("OLD ITALIC NUMERAL FIVE" #x10321)
- ("OLD ITALIC NUMERAL TEN" #x10322)
- ("OLD ITALIC NUMERAL FIFTY" #x10323)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'gothic
- '(("GOTHIC LETTER AHSA" #x10330)
- ("GOTHIC LETTER BAIRKAN" #x10331)
- ("GOTHIC LETTER GIBA" #x10332)
- ("GOTHIC LETTER DAGS" #x10333)
- ("GOTHIC LETTER AIHVUS" #x10334)
- ("GOTHIC LETTER QAIRTHRA" #x10335)
- ("GOTHIC LETTER IUJA" #x10336)
- ("GOTHIC LETTER HAGL" #x10337)
- ("GOTHIC LETTER THIUTH" #x10338)
- ("GOTHIC LETTER EIS" #x10339)
- ("GOTHIC LETTER KUSMA" #x1033A)
- ("GOTHIC LETTER LAGUS" #x1033B)
- ("GOTHIC LETTER MANNA" #x1033C)
- ("GOTHIC LETTER NAUTHS" #x1033D)
- ("GOTHIC LETTER JER" #x1033E)
- ("GOTHIC LETTER URUS" #x1033F)
- ("GOTHIC LETTER PAIRTHRA" #x10340)
- ("GOTHIC LETTER NINETY" #x10341)
- ("GOTHIC LETTER RAIDA" #x10342)
- ("GOTHIC LETTER SAUIL" #x10343)
- ("GOTHIC LETTER TEIWS" #x10344)
- ("GOTHIC LETTER WINJA" #x10345)
- ("GOTHIC LETTER FAIHU" #x10346)
- ("GOTHIC LETTER IGGWS" #x10347)
- ("GOTHIC LETTER HWAIR" #x10348)
- ("GOTHIC LETTER OTHAL" #x10349)
- ("GOTHIC LETTER NINE HUNDRED" #x1034A)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'deseret
- '(("DESERET CAPITAL LETTER LONG I" #x10400)
- ("DESERET CAPITAL LETTER LONG E" #x10401)
- ("DESERET CAPITAL LETTER LONG A" #x10402)
- ("DESERET CAPITAL LETTER LONG AH" #x10403)
- ("DESERET CAPITAL LETTER LONG O" #x10404)
- ("DESERET CAPITAL LETTER LONG OO" #x10405)
- ("DESERET CAPITAL LETTER SHORT I" #x10406)
- ("DESERET CAPITAL LETTER SHORT E" #x10407)
- ("DESERET CAPITAL LETTER SHORT A" #x10408)
- ("DESERET CAPITAL LETTER SHORT AH" #x10409)
- ("DESERET CAPITAL LETTER SHORT O" #x1040A)
- ("DESERET CAPITAL LETTER SHORT OO" #x1040B)
- ("DESERET CAPITAL LETTER AY" #x1040C)
- ("DESERET CAPITAL LETTER OW" #x1040D)
- ("DESERET CAPITAL LETTER WU" #x1040E)
- ("DESERET CAPITAL LETTER YEE" #x1040F)
- ("DESERET CAPITAL LETTER H" #x10410)
- ("DESERET CAPITAL LETTER PEE" #x10411)
- ("DESERET CAPITAL LETTER BEE" #x10412)
- ("DESERET CAPITAL LETTER TEE" #x10413)
- ("DESERET CAPITAL LETTER DEE" #x10414)
- ("DESERET CAPITAL LETTER CHEE" #x10415)
- ("DESERET CAPITAL LETTER JEE" #x10416)
- ("DESERET CAPITAL LETTER KAY" #x10417)
- ("DESERET CAPITAL LETTER GAY" #x10418)
- ("DESERET CAPITAL LETTER EF" #x10419)
- ("DESERET CAPITAL LETTER VEE" #x1041A)
- ("DESERET CAPITAL LETTER ETH" #x1041B)
- ("DESERET CAPITAL LETTER THEE" #x1041C)
- ("DESERET CAPITAL LETTER ES" #x1041D)
- ("DESERET CAPITAL LETTER ZEE" #x1041E)
- ("DESERET CAPITAL LETTER ESH" #x1041F)
- ("DESERET CAPITAL LETTER ZHEE" #x10420)
- ("DESERET CAPITAL LETTER ER" #x10421)
- ("DESERET CAPITAL LETTER EL" #x10422)
- ("DESERET CAPITAL LETTER EM" #x10423)
- ("DESERET CAPITAL LETTER EN" #x10424)
- ("DESERET CAPITAL LETTER ENG" #x10425)
- ("DESERET SMALL LETTER LONG I" #x10428)
- ("DESERET SMALL LETTER LONG E" #x10429)
- ("DESERET SMALL LETTER LONG A" #x1042A)
- ("DESERET SMALL LETTER LONG AH" #x1042B)
- ("DESERET SMALL LETTER LONG O" #x1042C)
- ("DESERET SMALL LETTER LONG OO" #x1042D)
- ("DESERET SMALL LETTER SHORT I" #x1042E)
- ("DESERET SMALL LETTER SHORT E" #x1042F)
- ("DESERET SMALL LETTER SHORT A" #x10430)
- ("DESERET SMALL LETTER SHORT AH" #x10431)
- ("DESERET SMALL LETTER SHORT O" #x10432)
- ("DESERET SMALL LETTER SHORT OO" #x10433)
- ("DESERET SMALL LETTER AY" #x10434)
- ("DESERET SMALL LETTER OW" #x10435)
- ("DESERET SMALL LETTER WU" #x10436)
- ("DESERET SMALL LETTER YEE" #x10437)
- ("DESERET SMALL LETTER H" #x10438)
- ("DESERET SMALL LETTER PEE" #x10439)
- ("DESERET SMALL LETTER BEE" #x1043A)
- ("DESERET SMALL LETTER TEE" #x1043B)
- ("DESERET SMALL LETTER DEE" #x1043C)
- ("DESERET SMALL LETTER CHEE" #x1043D)
- ("DESERET SMALL LETTER JEE" #x1043E)
- ("DESERET SMALL LETTER KAY" #x1043F)
- ("DESERET SMALL LETTER GAY" #x10440)
- ("DESERET SMALL LETTER EF" #x10441)
- ("DESERET SMALL LETTER VEE" #x10442)
- ("DESERET SMALL LETTER ETH" #x10443)
- ("DESERET SMALL LETTER THEE" #x10444)
- ("DESERET SMALL LETTER ES" #x10445)
- ("DESERET SMALL LETTER ZEE" #x10446)
- ("DESERET SMALL LETTER ESH" #x10447)
- ("DESERET SMALL LETTER ZHEE" #x10448)
- ("DESERET SMALL LETTER ER" #x10449)
- ("DESERET SMALL LETTER EL" #x1044A)
- ("DESERET SMALL LETTER EM" #x1044B)
- ("DESERET SMALL LETTER EN" #x1044C)
- ("DESERET SMALL LETTER ENG" #x1044D)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'byzantine-musical-symbols
- '(("BYZANTINE MUSICAL SYMBOL PSILI" #x1D000)
- ("BYZANTINE MUSICAL SYMBOL DASEIA" #x1D001)
- ("BYZANTINE MUSICAL SYMBOL PERISPOMENI" #x1D002)
- ("BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON" #x1D003)
- ("BYZANTINE MUSICAL SYMBOL OXEIA DIPLI" #x1D004)
- ("BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON" #x1D005)
- ("BYZANTINE MUSICAL SYMBOL VAREIA DIPLI" #x1D006)
- ("BYZANTINE MUSICAL SYMBOL KATHISTI" #x1D007)
- ("BYZANTINE MUSICAL SYMBOL SYRMATIKI" #x1D008)
- ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI" #x1D009)
- ("BYZANTINE MUSICAL SYMBOL YPOKRISIS" #x1D00A)
- ("BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI" #x1D00B)
- ("BYZANTINE MUSICAL SYMBOL KREMASTI" #x1D00C)
- ("BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON" #x1D00D)
- ("BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON" #x1D00E)
- ("BYZANTINE MUSICAL SYMBOL TELEIA" #x1D00F)
- ("BYZANTINE MUSICAL SYMBOL KENTIMATA" #x1D010)
- ("BYZANTINE MUSICAL SYMBOL APOSTROFOS" #x1D011)
- ("BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI" #x1D012)
- ("BYZANTINE MUSICAL SYMBOL SYNEVMA" #x1D013)
- ("BYZANTINE MUSICAL SYMBOL THITA" #x1D014)
- ("BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION" #x1D015)
- ("BYZANTINE MUSICAL SYMBOL GORGON ARCHAION" #x1D016)
- ("BYZANTINE MUSICAL SYMBOL PSILON" #x1D017)
- ("BYZANTINE MUSICAL SYMBOL CHAMILON" #x1D018)
- ("BYZANTINE MUSICAL SYMBOL VATHY" #x1D019)
- ("BYZANTINE MUSICAL SYMBOL ISON ARCHAION" #x1D01A)
- ("BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION" #x1D01B)
- ("BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION" #x1D01C)
- ("BYZANTINE MUSICAL SYMBOL SAXIMATA" #x1D01D)
- ("BYZANTINE MUSICAL SYMBOL PARICHON" #x1D01E)
- ("BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA" #x1D01F)
- ("BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION" #x1D020)
- ("BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION" #x1D021)
- ("BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION" #x1D022)
- ("BYZANTINE MUSICAL SYMBOL APOTHEMA" #x1D023)
- ("BYZANTINE MUSICAL SYMBOL KLASMA" #x1D024)
- ("BYZANTINE MUSICAL SYMBOL REVMA" #x1D025)
- ("BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION" #x1D026)
- ("BYZANTINE MUSICAL SYMBOL TINAGMA" #x1D027)
- ("BYZANTINE MUSICAL SYMBOL ANATRICHISMA" #x1D028)
- ("BYZANTINE MUSICAL SYMBOL SEISMA" #x1D029)
- ("BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION" #x1D02A)
- ("BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU" #x1D02B)
- ("BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION" #x1D02C)
- ("BYZANTINE MUSICAL SYMBOL THEMA" #x1D02D)
- ("BYZANTINE MUSICAL SYMBOL LEMOI" #x1D02E)
- ("BYZANTINE MUSICAL SYMBOL DYO" #x1D02F)
- ("BYZANTINE MUSICAL SYMBOL TRIA" #x1D030)
- ("BYZANTINE MUSICAL SYMBOL TESSERA" #x1D031)
- ("BYZANTINE MUSICAL SYMBOL KRATIMATA" #x1D032)
- ("BYZANTINE MUSICAL SYMBOL APESO EXO NEO" #x1D033)
- ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION" #x1D034)
- ("BYZANTINE MUSICAL SYMBOL IMIFTHORA" #x1D035)
- ("BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION" #x1D036)
- ("BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON" #x1D037)
- ("BYZANTINE MUSICAL SYMBOL PELASTON" #x1D038)
- ("BYZANTINE MUSICAL SYMBOL PSIFISTON" #x1D039)
- ("BYZANTINE MUSICAL SYMBOL KONTEVMA" #x1D03A)
- ("BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION" #x1D03B)
- ("BYZANTINE MUSICAL SYMBOL RAPISMA" #x1D03C)
- ("BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION" #x1D03D)
- ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION" #x1D03E)
- ("BYZANTINE MUSICAL SYMBOL ICHADIN" #x1D03F)
- ("BYZANTINE MUSICAL SYMBOL NANA" #x1D040)
- ("BYZANTINE MUSICAL SYMBOL PETASMA" #x1D041)
- ("BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO" #x1D042)
- ("BYZANTINE MUSICAL SYMBOL TROMIKON ALLO" #x1D043)
- ("BYZANTINE MUSICAL SYMBOL STRAGGISMATA" #x1D044)
- ("BYZANTINE MUSICAL SYMBOL GRONTHISMATA" #x1D045)
- ("BYZANTINE MUSICAL SYMBOL ISON NEO" #x1D046)
- ("BYZANTINE MUSICAL SYMBOL OLIGON NEO" #x1D047)
- ("BYZANTINE MUSICAL SYMBOL OXEIA NEO" #x1D048)
- ("BYZANTINE MUSICAL SYMBOL PETASTI" #x1D049)
- ("BYZANTINE MUSICAL SYMBOL KOUFISMA" #x1D04A)
- ("BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA" #x1D04B)
- ("BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA" #x1D04C)
- ("BYZANTINE MUSICAL SYMBOL PELASTON NEO" #x1D04D)
- ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO" #x1D04E)
- ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO" #x1D04F)
- ("BYZANTINE MUSICAL SYMBOL YPSILI" #x1D050)
- ("BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO" #x1D051)
- ("BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO" #x1D052)
- ("BYZANTINE MUSICAL SYMBOL YPORROI" #x1D053)
- ("BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON" #x1D054)
- ("BYZANTINE MUSICAL SYMBOL ELAFRON" #x1D055)
- ("BYZANTINE MUSICAL SYMBOL CHAMILI" #x1D056)
- ("BYZANTINE MUSICAL SYMBOL MIKRON ISON" #x1D057)
- ("BYZANTINE MUSICAL SYMBOL VAREIA NEO" #x1D058)
- ("BYZANTINE MUSICAL SYMBOL PIASMA NEO" #x1D059)
- ("BYZANTINE MUSICAL SYMBOL PSIFISTON NEO" #x1D05A)
- ("BYZANTINE MUSICAL SYMBOL OMALON" #x1D05B)
- ("BYZANTINE MUSICAL SYMBOL ANTIKENOMA" #x1D05C)
- ("BYZANTINE MUSICAL SYMBOL LYGISMA" #x1D05D)
- ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO" #x1D05E)
- ("BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO" #x1D05F)
- ("BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA" #x1D060)
- ("BYZANTINE MUSICAL SYMBOL KYLISMA" #x1D061)
- ("BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA" #x1D062)
- ("BYZANTINE MUSICAL SYMBOL TROMIKON NEO" #x1D063)
- ("BYZANTINE MUSICAL SYMBOL EKSTREPTON" #x1D064)
- ("BYZANTINE MUSICAL SYMBOL SYNAGMA NEO" #x1D065)
- ("BYZANTINE MUSICAL SYMBOL SYRMA" #x1D066)
- ("BYZANTINE MUSICAL SYMBOL CHOREVMA NEO" #x1D067)
- ("BYZANTINE MUSICAL SYMBOL EPEGERMA" #x1D068)
- ("BYZANTINE MUSICAL SYMBOL SEISMA NEO" #x1D069)
- ("BYZANTINE MUSICAL SYMBOL XIRON KLASMA" #x1D06A)
- ("BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON" #x1D06B)
- ("BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA" #x1D06C)
- ("BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA" #x1D06D)
- ("BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA" #x1D06E)
- ("BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA" #x1D06F)
- ("BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA" #x1D070)
- ("BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA" #x1D071)
- ("BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON" #x1D072)
- ("BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON" #x1D073)
- ("BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON" #x1D074)
- ("BYZANTINE MUSICAL SYMBOL OYRANISMA NEO" #x1D075)
- ("BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO" #x1D076)
- ("BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO" #x1D077)
- ("BYZANTINE MUSICAL SYMBOL THEMA APLOUN" #x1D078)
- ("BYZANTINE MUSICAL SYMBOL THES KAI APOTHES" #x1D079)
- ("BYZANTINE MUSICAL SYMBOL KATAVASMA" #x1D07A)
- ("BYZANTINE MUSICAL SYMBOL ENDOFONON" #x1D07B)
- ("BYZANTINE MUSICAL SYMBOL YFEN KATO" #x1D07C)
- ("BYZANTINE MUSICAL SYMBOL YFEN ANO" #x1D07D)
- ("BYZANTINE MUSICAL SYMBOL STAVROS" #x1D07E)
- ("BYZANTINE MUSICAL SYMBOL KLASMA ANO" #x1D07F)
- ("BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION" #x1D080)
- ("BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION" #x1D081)
- ("BYZANTINE MUSICAL SYMBOL KRATIMA ALLO" #x1D082)
- ("BYZANTINE MUSICAL SYMBOL KRATIMA NEO" #x1D083)
- ("BYZANTINE MUSICAL SYMBOL APODERMA NEO" #x1D084)
- ("BYZANTINE MUSICAL SYMBOL APLI" #x1D085)
- ("BYZANTINE MUSICAL SYMBOL DIPLI" #x1D086)
- ("BYZANTINE MUSICAL SYMBOL TRIPLI" #x1D087)
- ("BYZANTINE MUSICAL SYMBOL TETRAPLI" #x1D088)
- ("BYZANTINE MUSICAL SYMBOL KORONIS" #x1D089)
- ("BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU" #x1D08A)
- ("BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON" #x1D08B)
- ("BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON" #x1D08C)
- ("BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON" #x1D08D)
- ("BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU" #x1D08E)
- ("BYZANTINE MUSICAL SYMBOL GORGON NEO ANO" #x1D08F)
- ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA" #x1D090)
- ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA" #x1D091)
- ("BYZANTINE MUSICAL SYMBOL DIGORGON" #x1D092)
- ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO" #x1D093)
- ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO" #x1D094)
- ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA" #x1D095)
- ("BYZANTINE MUSICAL SYMBOL TRIGORGON" #x1D096)
- ("BYZANTINE MUSICAL SYMBOL ARGON" #x1D097)
- ("BYZANTINE MUSICAL SYMBOL IMIDIARGON" #x1D098)
- ("BYZANTINE MUSICAL SYMBOL DIARGON" #x1D099)
- ("BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI" #x1D09A)
- ("BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI" #x1D09B)
- ("BYZANTINE MUSICAL SYMBOL AGOGI ARGI" #x1D09C)
- ("BYZANTINE MUSICAL SYMBOL AGOGI METRIA" #x1D09D)
- ("BYZANTINE MUSICAL SYMBOL AGOGI MESI" #x1D09E)
- ("BYZANTINE MUSICAL SYMBOL AGOGI GORGI" #x1D09F)
- ("BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI" #x1D0A0)
- ("BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI" #x1D0A1)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS" #x1D0A2)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS" #x1D0A3)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS" #x1D0A4)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS" #x1D0A5)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS" #x1D0A6)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS" #x1D0A7)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS" #x1D0A8)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS" #x1D0A9)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS" #x1D0AA)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS" #x1D0AB)
- ("BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS" #x1D0AC)
- ("BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS" #x1D0AD)
- ("BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS" #x1D0AE)
- ("BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS" #x1D0AF)
- ("BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS" #x1D0B0)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS" #x1D0B1)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS" #x1D0B2)
- ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS" #x1D0B3)
- ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN" #x1D0B4)
- ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN" #x1D0B5)
- ("BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU" #x1D0B6)
- ("BYZANTINE MUSICAL SYMBOL IMIFONON" #x1D0B7)
- ("BYZANTINE MUSICAL SYMBOL IMIFTHORON" #x1D0B8)
- ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU" #x1D0B9)
- ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA" #x1D0BA)
- ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA" #x1D0BB)
- ("BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS" #x1D0BC)
- ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI" #x1D0BD)
- ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI" #x1D0BE)
- ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE" #x1D0BF)
- ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO" #x1D0C0)
- ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO" #x1D0C1)
- ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO" #x1D0C2)
- ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS" #x1D0C3)
- ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS" #x1D0C4)
- ("BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS" #x1D0C5)
- ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI" #x1D0C6)
- ("BYZANTINE MUSICAL SYMBOL FTHORA NENANO" #x1D0C7)
- ("BYZANTINE MUSICAL SYMBOL CHROA ZYGOS" #x1D0C8)
- ("BYZANTINE MUSICAL SYMBOL CHROA KLITON" #x1D0C9)
- ("BYZANTINE MUSICAL SYMBOL CHROA SPATHI" #x1D0CA)
- ("BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION" #x1D0CB)
- ("BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA" #x1D0CC)
- ("BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION" #x1D0CD)
- ("BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION" #x1D0CE)
- ("BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION" #x1D0CF)
- ("BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA" #x1D0D0)
- ("BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D1)
- ("BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA" #x1D0D2)
- ("BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D3)
- ("BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA" #x1D0D4)
- ("BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D5)
- ("BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA" #x1D0D6)
- ("BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D7)
- ("BYZANTINE MUSICAL SYMBOL GENIKI DIESIS" #x1D0D8)
- ("BYZANTINE MUSICAL SYMBOL GENIKI YFESIS" #x1D0D9)
- ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI" #x1D0DA)
- ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI" #x1D0DB)
- ("BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI" #x1D0DC)
- ("BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS" #x1D0DD)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS" #x1D0DE)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU" #x1D0DF)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU" #x1D0E0)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU" #x1D0E1)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS" #x1D0E2)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU" #x1D0E3)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU" #x1D0E4)
- ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU" #x1D0E5)
- ("BYZANTINE MUSICAL SYMBOL DIGRAMMA GG" #x1D0E6)
- ("BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU" #x1D0E7)
- ("BYZANTINE MUSICAL SYMBOL STIGMA" #x1D0E8)
- ("BYZANTINE MUSICAL SYMBOL ARKTIKO PA" #x1D0E9)
- ("BYZANTINE MUSICAL SYMBOL ARKTIKO VOU" #x1D0EA)
- ("BYZANTINE MUSICAL SYMBOL ARKTIKO GA" #x1D0EB)
- ("BYZANTINE MUSICAL SYMBOL ARKTIKO DI" #x1D0EC)
- ("BYZANTINE MUSICAL SYMBOL ARKTIKO KE" #x1D0ED)
- ("BYZANTINE MUSICAL SYMBOL ARKTIKO ZO" #x1D0EE)
- ("BYZANTINE MUSICAL SYMBOL ARKTIKO NI" #x1D0EF)
- ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO" #x1D0F0)
- ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO" #x1D0F1)
- ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO" #x1D0F2)
- ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO" #x1D0F3)
- ("BYZANTINE MUSICAL SYMBOL KLASMA KATO" #x1D0F4)
- ("BYZANTINE MUSICAL SYMBOL GORGON NEO KATO" #x1D0F5)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'musical-symbols
- '(("MUSICAL SYMBOL SINGLE BARLINE" #x1D100)
- ("MUSICAL SYMBOL DOUBLE BARLINE" #x1D101)
- ("MUSICAL SYMBOL FINAL BARLINE" #x1D102)
- ("MUSICAL SYMBOL REVERSE FINAL BARLINE" #x1D103)
- ("MUSICAL SYMBOL DASHED BARLINE" #x1D104)
- ("MUSICAL SYMBOL SHORT BARLINE" #x1D105)
- ("MUSICAL SYMBOL LEFT REPEAT SIGN" #x1D106)
- ("MUSICAL SYMBOL RIGHT REPEAT SIGN" #x1D107)
- ("MUSICAL SYMBOL REPEAT DOTS" #x1D108)
- ("MUSICAL SYMBOL DAL SEGNO" #x1D109)
- ("MUSICAL SYMBOL DA CAPO" #x1D10A)
- ("MUSICAL SYMBOL SEGNO" #x1D10B)
- ("MUSICAL SYMBOL CODA" #x1D10C)
- ("MUSICAL SYMBOL REPEATED FIGURE-1" #x1D10D)
- ("MUSICAL SYMBOL REPEATED FIGURE-2" #x1D10E)
- ("MUSICAL SYMBOL REPEATED FIGURE-3" #x1D10F)
- ("MUSICAL SYMBOL FERMATA" #x1D110)
- ("MUSICAL SYMBOL FERMATA BELOW" #x1D111)
- ("MUSICAL SYMBOL BREATH MARK" #x1D112)
- ("MUSICAL SYMBOL CAESURA" #x1D113)
- ("MUSICAL SYMBOL BRACE" #x1D114)
- ("MUSICAL SYMBOL BRACKET" #x1D115)
- ("MUSICAL SYMBOL ONE-LINE STAFF" #x1D116)
- ("MUSICAL SYMBOL TWO-LINE STAFF" #x1D117)
- ("MUSICAL SYMBOL THREE-LINE STAFF" #x1D118)
- ("MUSICAL SYMBOL FOUR-LINE STAFF" #x1D119)
- ("MUSICAL SYMBOL FIVE-LINE STAFF" #x1D11A)
- ("MUSICAL SYMBOL SIX-LINE STAFF" #x1D11B)
- ("MUSICAL SYMBOL SIX-STRING FRETBOARD" #x1D11C)
- ("MUSICAL SYMBOL FOUR-STRING FRETBOARD" #x1D11D)
- ("MUSICAL SYMBOL G CLEF" #x1D11E)
- ("MUSICAL SYMBOL G CLEF OTTAVA ALTA" #x1D11F)
- ("MUSICAL SYMBOL G CLEF OTTAVA BASSA" #x1D120)
- ("MUSICAL SYMBOL C CLEF" #x1D121)
- ("MUSICAL SYMBOL F CLEF" #x1D122)
- ("MUSICAL SYMBOL F CLEF OTTAVA ALTA" #x1D123)
- ("MUSICAL SYMBOL F CLEF OTTAVA BASSA" #x1D124)
- ("MUSICAL SYMBOL DRUM CLEF-1" #x1D125)
- ("MUSICAL SYMBOL DRUM CLEF-2" #x1D126)
- ("MUSICAL SYMBOL DOUBLE SHARP" #x1D12A)
- ("MUSICAL SYMBOL DOUBLE FLAT" #x1D12B)
- ("MUSICAL SYMBOL FLAT UP" #x1D12C)
- ("MUSICAL SYMBOL FLAT DOWN" #x1D12D)
- ("MUSICAL SYMBOL NATURAL UP" #x1D12E)
- ("MUSICAL SYMBOL NATURAL DOWN" #x1D12F)
- ("MUSICAL SYMBOL SHARP UP" #x1D130)
- ("MUSICAL SYMBOL SHARP DOWN" #x1D131)
- ("MUSICAL SYMBOL QUARTER TONE SHARP" #x1D132)
- ("MUSICAL SYMBOL QUARTER TONE FLAT" #x1D133)
- ("MUSICAL SYMBOL COMMON TIME" #x1D134)
- ("MUSICAL SYMBOL CUT TIME" #x1D135)
- ("MUSICAL SYMBOL OTTAVA ALTA" #x1D136)
- ("MUSICAL SYMBOL OTTAVA BASSA" #x1D137)
- ("MUSICAL SYMBOL QUINDICESIMA ALTA" #x1D138)
- ("MUSICAL SYMBOL QUINDICESIMA BASSA" #x1D139)
- ("MUSICAL SYMBOL MULTI REST" #x1D13A)
- ("MUSICAL SYMBOL WHOLE REST" #x1D13B)
- ("MUSICAL SYMBOL HALF REST" #x1D13C)
- ("MUSICAL SYMBOL QUARTER REST" #x1D13D)
- ("MUSICAL SYMBOL EIGHTH REST" #x1D13E)
- ("MUSICAL SYMBOL SIXTEENTH REST" #x1D13F)
- ("MUSICAL SYMBOL THIRTY-SECOND REST" #x1D140)
- ("MUSICAL SYMBOL SIXTY-FOURTH REST" #x1D141)
- ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST" #x1D142)
- ("MUSICAL SYMBOL X NOTEHEAD" #x1D143)
- ("MUSICAL SYMBOL PLUS NOTEHEAD" #x1D144)
- ("MUSICAL SYMBOL CIRCLE X NOTEHEAD" #x1D145)
- ("MUSICAL SYMBOL SQUARE NOTEHEAD WHITE" #x1D146)
- ("MUSICAL SYMBOL SQUARE NOTEHEAD BLACK" #x1D147)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE" #x1D148)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK" #x1D149)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE" #x1D14A)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK" #x1D14B)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE" #x1D14C)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK" #x1D14D)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE" #x1D14E)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK" #x1D14F)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE" #x1D150)
- ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK" #x1D151)
- ("MUSICAL SYMBOL MOON NOTEHEAD WHITE" #x1D152)
- ("MUSICAL SYMBOL MOON NOTEHEAD BLACK" #x1D153)
- ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE" #x1D154)
- ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK" #x1D155)
- ("MUSICAL SYMBOL PARENTHESIS NOTEHEAD" #x1D156)
- ("MUSICAL SYMBOL VOID NOTEHEAD" #x1D157)
- ("MUSICAL SYMBOL NOTEHEAD BLACK" #x1D158)
- ("MUSICAL SYMBOL NULL NOTEHEAD" #x1D159)
- ("MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE" #x1D15A)
- ("MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK" #x1D15B)
- ("MUSICAL SYMBOL BREVE" #x1D15C)
- ("MUSICAL SYMBOL WHOLE NOTE" #x1D15D)
- ("MUSICAL SYMBOL HALF NOTE" #x1D15E)
- ("MUSICAL SYMBOL QUARTER NOTE" #x1D15F)
- ("MUSICAL SYMBOL EIGHTH NOTE" #x1D160)
- ("MUSICAL SYMBOL SIXTEENTH NOTE" #x1D161)
- ("MUSICAL SYMBOL THIRTY-SECOND NOTE" #x1D162)
- ("MUSICAL SYMBOL SIXTY-FOURTH NOTE" #x1D163)
- ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE" #x1D164)
- ("MUSICAL SYMBOL COMBINING STEM" #x1D165)
- ("MUSICAL SYMBOL COMBINING SPRECHGESANG STEM" #x1D166)
- ("MUSICAL SYMBOL COMBINING TREMOLO-1" #x1D167)
- ("MUSICAL SYMBOL COMBINING TREMOLO-2" #x1D168)
- ("MUSICAL SYMBOL COMBINING TREMOLO-3" #x1D169)
- ("MUSICAL SYMBOL FINGERED TREMOLO-1" #x1D16A)
- ("MUSICAL SYMBOL FINGERED TREMOLO-2" #x1D16B)
- ("MUSICAL SYMBOL FINGERED TREMOLO-3" #x1D16C)
- ("MUSICAL SYMBOL COMBINING AUGMENTATION DOT" #x1D16D)
- ("MUSICAL SYMBOL COMBINING FLAG-1" #x1D16E)
- ("MUSICAL SYMBOL COMBINING FLAG-2" #x1D16F)
- ("MUSICAL SYMBOL COMBINING FLAG-3" #x1D170)
- ("MUSICAL SYMBOL COMBINING FLAG-4" #x1D171)
- ("MUSICAL SYMBOL COMBINING FLAG-5" #x1D172)
- ("MUSICAL SYMBOL BEGIN BEAM" #x1D173)
- ("MUSICAL SYMBOL END BEAM" #x1D174)
- ("MUSICAL SYMBOL BEGIN TIE" #x1D175)
- ("MUSICAL SYMBOL END TIE" #x1D176)
- ("MUSICAL SYMBOL BEGIN SLUR" #x1D177)
- ("MUSICAL SYMBOL END SLUR" #x1D178)
- ("MUSICAL SYMBOL BEGIN PHRASE" #x1D179)
- ("MUSICAL SYMBOL END PHRASE" #x1D17A)
- ("MUSICAL SYMBOL COMBINING ACCENT" #x1D17B)
- ("MUSICAL SYMBOL COMBINING STACCATO" #x1D17C)
- ("MUSICAL SYMBOL COMBINING TENUTO" #x1D17D)
- ("MUSICAL SYMBOL COMBINING STACCATISSIMO" #x1D17E)
- ("MUSICAL SYMBOL COMBINING MARCATO" #x1D17F)
- ("MUSICAL SYMBOL COMBINING MARCATO-STACCATO" #x1D180)
- ("MUSICAL SYMBOL COMBINING ACCENT-STACCATO" #x1D181)
- ("MUSICAL SYMBOL COMBINING LOURE" #x1D182)
- ("MUSICAL SYMBOL ARPEGGIATO UP" #x1D183)
- ("MUSICAL SYMBOL ARPEGGIATO DOWN" #x1D184)
- ("MUSICAL SYMBOL COMBINING DOIT" #x1D185)
- ("MUSICAL SYMBOL COMBINING RIP" #x1D186)
- ("MUSICAL SYMBOL COMBINING FLIP" #x1D187)
- ("MUSICAL SYMBOL COMBINING SMEAR" #x1D188)
- ("MUSICAL SYMBOL COMBINING BEND" #x1D189)
- ("MUSICAL SYMBOL COMBINING DOUBLE TONGUE" #x1D18A)
- ("MUSICAL SYMBOL COMBINING TRIPLE TONGUE" #x1D18B)
- ("MUSICAL SYMBOL RINFORZANDO" #x1D18C)
- ("MUSICAL SYMBOL SUBITO" #x1D18D)
- ("MUSICAL SYMBOL Z" #x1D18E)
- ("MUSICAL SYMBOL PIANO" #x1D18F)
- ("MUSICAL SYMBOL MEZZO" #x1D190)
- ("MUSICAL SYMBOL FORTE" #x1D191)
- ("MUSICAL SYMBOL CRESCENDO" #x1D192)
- ("MUSICAL SYMBOL DECRESCENDO" #x1D193)
- ("MUSICAL SYMBOL GRACE NOTE SLASH" #x1D194)
- ("MUSICAL SYMBOL GRACE NOTE NO SLASH" #x1D195)
- ("MUSICAL SYMBOL TR" #x1D196)
- ("MUSICAL SYMBOL TURN" #x1D197)
- ("MUSICAL SYMBOL INVERTED TURN" #x1D198)
- ("MUSICAL SYMBOL TURN SLASH" #x1D199)
- ("MUSICAL SYMBOL TURN UP" #x1D19A)
- ("MUSICAL SYMBOL ORNAMENT STROKE-1" #x1D19B)
- ("MUSICAL SYMBOL ORNAMENT STROKE-2" #x1D19C)
- ("MUSICAL SYMBOL ORNAMENT STROKE-3" #x1D19D)
- ("MUSICAL SYMBOL ORNAMENT STROKE-4" #x1D19E)
- ("MUSICAL SYMBOL ORNAMENT STROKE-5" #x1D19F)
- ("MUSICAL SYMBOL ORNAMENT STROKE-6" #x1D1A0)
- ("MUSICAL SYMBOL ORNAMENT STROKE-7" #x1D1A1)
- ("MUSICAL SYMBOL ORNAMENT STROKE-8" #x1D1A2)
- ("MUSICAL SYMBOL ORNAMENT STROKE-9" #x1D1A3)
- ("MUSICAL SYMBOL ORNAMENT STROKE-10" #x1D1A4)
- ("MUSICAL SYMBOL ORNAMENT STROKE-11" #x1D1A5)
- ("MUSICAL SYMBOL HAUPTSTIMME" #x1D1A6)
- ("MUSICAL SYMBOL NEBENSTIMME" #x1D1A7)
- ("MUSICAL SYMBOL END OF STIMME" #x1D1A8)
- ("MUSICAL SYMBOL DEGREE SLASH" #x1D1A9)
- ("MUSICAL SYMBOL COMBINING DOWN BOW" #x1D1AA)
- ("MUSICAL SYMBOL COMBINING UP BOW" #x1D1AB)
- ("MUSICAL SYMBOL COMBINING HARMONIC" #x1D1AC)
- ("MUSICAL SYMBOL COMBINING SNAP PIZZICATO" #x1D1AD)
- ("MUSICAL SYMBOL PEDAL MARK" #x1D1AE)
- ("MUSICAL SYMBOL PEDAL UP MARK" #x1D1AF)
- ("MUSICAL SYMBOL HALF PEDAL MARK" #x1D1B0)
- ("MUSICAL SYMBOL GLISSANDO UP" #x1D1B1)
- ("MUSICAL SYMBOL GLISSANDO DOWN" #x1D1B2)
- ("MUSICAL SYMBOL WITH FINGERNAILS" #x1D1B3)
- ("MUSICAL SYMBOL DAMP" #x1D1B4)
- ("MUSICAL SYMBOL DAMP ALL" #x1D1B5)
- ("MUSICAL SYMBOL MAXIMA" #x1D1B6)
- ("MUSICAL SYMBOL LONGA" #x1D1B7)
- ("MUSICAL SYMBOL BREVIS" #x1D1B8)
- ("MUSICAL SYMBOL SEMIBREVIS WHITE" #x1D1B9)
- ("MUSICAL SYMBOL SEMIBREVIS BLACK" #x1D1BA)
- ("MUSICAL SYMBOL MINIMA" #x1D1BB)
- ("MUSICAL SYMBOL MINIMA BLACK" #x1D1BC)
- ("MUSICAL SYMBOL SEMIMINIMA WHITE" #x1D1BD)
- ("MUSICAL SYMBOL SEMIMINIMA BLACK" #x1D1BE)
- ("MUSICAL SYMBOL FUSA WHITE" #x1D1BF)
- ("MUSICAL SYMBOL FUSA BLACK" #x1D1C0)
- ("MUSICAL SYMBOL LONGA PERFECTA REST" #x1D1C1)
- ("MUSICAL SYMBOL LONGA IMPERFECTA REST" #x1D1C2)
- ("MUSICAL SYMBOL BREVIS REST" #x1D1C3)
- ("MUSICAL SYMBOL SEMIBREVIS REST" #x1D1C4)
- ("MUSICAL SYMBOL MINIMA REST" #x1D1C5)
- ("MUSICAL SYMBOL SEMIMINIMA REST" #x1D1C6)
- ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA" #x1D1C7)
- ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1C8)
- ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1" #x1D1C9)
- ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA" #x1D1CA)
- ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1CB)
- ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1" #x1D1CC)
- ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2" #x1D1CD)
- ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3" #x1D1CE)
- ("MUSICAL SYMBOL CROIX" #x1D1CF)
- ("MUSICAL SYMBOL GREGORIAN C CLEF" #x1D1D0)
- ("MUSICAL SYMBOL GREGORIAN F CLEF" #x1D1D1)
- ("MUSICAL SYMBOL SQUARE B" #x1D1D2)
- ("MUSICAL SYMBOL VIRGA" #x1D1D3)
- ("MUSICAL SYMBOL PODATUS" #x1D1D4)
- ("MUSICAL SYMBOL CLIVIS" #x1D1D5)
- ("MUSICAL SYMBOL SCANDICUS" #x1D1D6)
- ("MUSICAL SYMBOL CLIMACUS" #x1D1D7)
- ("MUSICAL SYMBOL TORCULUS" #x1D1D8)
- ("MUSICAL SYMBOL PORRECTUS" #x1D1D9)
- ("MUSICAL SYMBOL PORRECTUS FLEXUS" #x1D1DA)
- ("MUSICAL SYMBOL SCANDICUS FLEXUS" #x1D1DB)
- ("MUSICAL SYMBOL TORCULUS RESUPINUS" #x1D1DC)
- ("MUSICAL SYMBOL PES SUBPUNCTIS" #x1D1DD)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'mathematical-alphanumeric-symbols
- '(("MATHEMATICAL BOLD CAPITAL A" #x1D400)
- ("MATHEMATICAL BOLD CAPITAL B" #x1D401)
- ("MATHEMATICAL BOLD CAPITAL C" #x1D402)
- ("MATHEMATICAL BOLD CAPITAL D" #x1D403)
- ("MATHEMATICAL BOLD CAPITAL E" #x1D404)
- ("MATHEMATICAL BOLD CAPITAL F" #x1D405)
- ("MATHEMATICAL BOLD CAPITAL G" #x1D406)
- ("MATHEMATICAL BOLD CAPITAL H" #x1D407)
- ("MATHEMATICAL BOLD CAPITAL I" #x1D408)
- ("MATHEMATICAL BOLD CAPITAL J" #x1D409)
- ("MATHEMATICAL BOLD CAPITAL K" #x1D40A)
- ("MATHEMATICAL BOLD CAPITAL L" #x1D40B)
- ("MATHEMATICAL BOLD CAPITAL M" #x1D40C)
- ("MATHEMATICAL BOLD CAPITAL N" #x1D40D)
- ("MATHEMATICAL BOLD CAPITAL O" #x1D40E)
- ("MATHEMATICAL BOLD CAPITAL P" #x1D40F)
- ("MATHEMATICAL BOLD CAPITAL Q" #x1D410)
- ("MATHEMATICAL BOLD CAPITAL R" #x1D411)
- ("MATHEMATICAL BOLD CAPITAL S" #x1D412)
- ("MATHEMATICAL BOLD CAPITAL T" #x1D413)
- ("MATHEMATICAL BOLD CAPITAL U" #x1D414)
- ("MATHEMATICAL BOLD CAPITAL V" #x1D415)
- ("MATHEMATICAL BOLD CAPITAL W" #x1D416)
- ("MATHEMATICAL BOLD CAPITAL X" #x1D417)
- ("MATHEMATICAL BOLD CAPITAL Y" #x1D418)
- ("MATHEMATICAL BOLD CAPITAL Z" #x1D419)
- ("MATHEMATICAL BOLD SMALL A" #x1D41A)
- ("MATHEMATICAL BOLD SMALL B" #x1D41B)
- ("MATHEMATICAL BOLD SMALL C" #x1D41C)
- ("MATHEMATICAL BOLD SMALL D" #x1D41D)
- ("MATHEMATICAL BOLD SMALL E" #x1D41E)
- ("MATHEMATICAL BOLD SMALL F" #x1D41F)
- ("MATHEMATICAL BOLD SMALL G" #x1D420)
- ("MATHEMATICAL BOLD SMALL H" #x1D421)
- ("MATHEMATICAL BOLD SMALL I" #x1D422)
- ("MATHEMATICAL BOLD SMALL J" #x1D423)
- ("MATHEMATICAL BOLD SMALL K" #x1D424)
- ("MATHEMATICAL BOLD SMALL L" #x1D425)
- ("MATHEMATICAL BOLD SMALL M" #x1D426)
- ("MATHEMATICAL BOLD SMALL N" #x1D427)
- ("MATHEMATICAL BOLD SMALL O" #x1D428)
- ("MATHEMATICAL BOLD SMALL P" #x1D429)
- ("MATHEMATICAL BOLD SMALL Q" #x1D42A)
- ("MATHEMATICAL BOLD SMALL R" #x1D42B)
- ("MATHEMATICAL BOLD SMALL S" #x1D42C)
- ("MATHEMATICAL BOLD SMALL T" #x1D42D)
- ("MATHEMATICAL BOLD SMALL U" #x1D42E)
- ("MATHEMATICAL BOLD SMALL V" #x1D42F)
- ("MATHEMATICAL BOLD SMALL W" #x1D430)
- ("MATHEMATICAL BOLD SMALL X" #x1D431)
- ("MATHEMATICAL BOLD SMALL Y" #x1D432)
- ("MATHEMATICAL BOLD SMALL Z" #x1D433)
- ("MATHEMATICAL ITALIC CAPITAL A" #x1D434)
- ("MATHEMATICAL ITALIC CAPITAL B" #x1D435)
- ("MATHEMATICAL ITALIC CAPITAL C" #x1D436)
- ("MATHEMATICAL ITALIC CAPITAL D" #x1D437)
- ("MATHEMATICAL ITALIC CAPITAL E" #x1D438)
- ("MATHEMATICAL ITALIC CAPITAL F" #x1D439)
- ("MATHEMATICAL ITALIC CAPITAL G" #x1D43A)
- ("MATHEMATICAL ITALIC CAPITAL H" #x1D43B)
- ("MATHEMATICAL ITALIC CAPITAL I" #x1D43C)
- ("MATHEMATICAL ITALIC CAPITAL J" #x1D43D)
- ("MATHEMATICAL ITALIC CAPITAL K" #x1D43E)
- ("MATHEMATICAL ITALIC CAPITAL L" #x1D43F)
- ("MATHEMATICAL ITALIC CAPITAL M" #x1D440)
- ("MATHEMATICAL ITALIC CAPITAL N" #x1D441)
- ("MATHEMATICAL ITALIC CAPITAL O" #x1D442)
- ("MATHEMATICAL ITALIC CAPITAL P" #x1D443)
- ("MATHEMATICAL ITALIC CAPITAL Q" #x1D444)
- ("MATHEMATICAL ITALIC CAPITAL R" #x1D445)
- ("MATHEMATICAL ITALIC CAPITAL S" #x1D446)
- ("MATHEMATICAL ITALIC CAPITAL T" #x1D447)
- ("MATHEMATICAL ITALIC CAPITAL U" #x1D448)
- ("MATHEMATICAL ITALIC CAPITAL V" #x1D449)
- ("MATHEMATICAL ITALIC CAPITAL W" #x1D44A)
- ("MATHEMATICAL ITALIC CAPITAL X" #x1D44B)
- ("MATHEMATICAL ITALIC CAPITAL Y" #x1D44C)
- ("MATHEMATICAL ITALIC CAPITAL Z" #x1D44D)
- ("MATHEMATICAL ITALIC SMALL A" #x1D44E)
- ("MATHEMATICAL ITALIC SMALL B" #x1D44F)
- ("MATHEMATICAL ITALIC SMALL C" #x1D450)
- ("MATHEMATICAL ITALIC SMALL D" #x1D451)
- ("MATHEMATICAL ITALIC SMALL E" #x1D452)
- ("MATHEMATICAL ITALIC SMALL F" #x1D453)
- ("MATHEMATICAL ITALIC SMALL G" #x1D454)
- ("MATHEMATICAL ITALIC SMALL I" #x1D456)
- ("MATHEMATICAL ITALIC SMALL J" #x1D457)
- ("MATHEMATICAL ITALIC SMALL K" #x1D458)
- ("MATHEMATICAL ITALIC SMALL L" #x1D459)
- ("MATHEMATICAL ITALIC SMALL M" #x1D45A)
- ("MATHEMATICAL ITALIC SMALL N" #x1D45B)
- ("MATHEMATICAL ITALIC SMALL O" #x1D45C)
- ("MATHEMATICAL ITALIC SMALL P" #x1D45D)
- ("MATHEMATICAL ITALIC SMALL Q" #x1D45E)
- ("MATHEMATICAL ITALIC SMALL R" #x1D45F)
- ("MATHEMATICAL ITALIC SMALL S" #x1D460)
- ("MATHEMATICAL ITALIC SMALL T" #x1D461)
- ("MATHEMATICAL ITALIC SMALL U" #x1D462)
- ("MATHEMATICAL ITALIC SMALL V" #x1D463)
- ("MATHEMATICAL ITALIC SMALL W" #x1D464)
- ("MATHEMATICAL ITALIC SMALL X" #x1D465)
- ("MATHEMATICAL ITALIC SMALL Y" #x1D466)
- ("MATHEMATICAL ITALIC SMALL Z" #x1D467)
- ("MATHEMATICAL BOLD ITALIC CAPITAL A" #x1D468)
- ("MATHEMATICAL BOLD ITALIC CAPITAL B" #x1D469)
- ("MATHEMATICAL BOLD ITALIC CAPITAL C" #x1D46A)
- ("MATHEMATICAL BOLD ITALIC CAPITAL D" #x1D46B)
- ("MATHEMATICAL BOLD ITALIC CAPITAL E" #x1D46C)
- ("MATHEMATICAL BOLD ITALIC CAPITAL F" #x1D46D)
- ("MATHEMATICAL BOLD ITALIC CAPITAL G" #x1D46E)
- ("MATHEMATICAL BOLD ITALIC CAPITAL H" #x1D46F)
- ("MATHEMATICAL BOLD ITALIC CAPITAL I" #x1D470)
- ("MATHEMATICAL BOLD ITALIC CAPITAL J" #x1D471)
- ("MATHEMATICAL BOLD ITALIC CAPITAL K" #x1D472)
- ("MATHEMATICAL BOLD ITALIC CAPITAL L" #x1D473)
- ("MATHEMATICAL BOLD ITALIC CAPITAL M" #x1D474)
- ("MATHEMATICAL BOLD ITALIC CAPITAL N" #x1D475)
- ("MATHEMATICAL BOLD ITALIC CAPITAL O" #x1D476)
- ("MATHEMATICAL BOLD ITALIC CAPITAL P" #x1D477)
- ("MATHEMATICAL BOLD ITALIC CAPITAL Q" #x1D478)
- ("MATHEMATICAL BOLD ITALIC CAPITAL R" #x1D479)
- ("MATHEMATICAL BOLD ITALIC CAPITAL S" #x1D47A)
- ("MATHEMATICAL BOLD ITALIC CAPITAL T" #x1D47B)
- ("MATHEMATICAL BOLD ITALIC CAPITAL U" #x1D47C)
- ("MATHEMATICAL BOLD ITALIC CAPITAL V" #x1D47D)
- ("MATHEMATICAL BOLD ITALIC CAPITAL W" #x1D47E)
- ("MATHEMATICAL BOLD ITALIC CAPITAL X" #x1D47F)
- ("MATHEMATICAL BOLD ITALIC CAPITAL Y" #x1D480)
- ("MATHEMATICAL BOLD ITALIC CAPITAL Z" #x1D481)
- ("MATHEMATICAL BOLD ITALIC SMALL A" #x1D482)
- ("MATHEMATICAL BOLD ITALIC SMALL B" #x1D483)
- ("MATHEMATICAL BOLD ITALIC SMALL C" #x1D484)
- ("MATHEMATICAL BOLD ITALIC SMALL D" #x1D485)
- ("MATHEMATICAL BOLD ITALIC SMALL E" #x1D486)
- ("MATHEMATICAL BOLD ITALIC SMALL F" #x1D487)
- ("MATHEMATICAL BOLD ITALIC SMALL G" #x1D488)
- ("MATHEMATICAL BOLD ITALIC SMALL H" #x1D489)
- ("MATHEMATICAL BOLD ITALIC SMALL I" #x1D48A)
- ("MATHEMATICAL BOLD ITALIC SMALL J" #x1D48B)
- ("MATHEMATICAL BOLD ITALIC SMALL K" #x1D48C)
- ("MATHEMATICAL BOLD ITALIC SMALL L" #x1D48D)
- ("MATHEMATICAL BOLD ITALIC SMALL M" #x1D48E)
- ("MATHEMATICAL BOLD ITALIC SMALL N" #x1D48F)
- ("MATHEMATICAL BOLD ITALIC SMALL O" #x1D490)
- ("MATHEMATICAL BOLD ITALIC SMALL P" #x1D491)
- ("MATHEMATICAL BOLD ITALIC SMALL Q" #x1D492)
- ("MATHEMATICAL BOLD ITALIC SMALL R" #x1D493)
- ("MATHEMATICAL BOLD ITALIC SMALL S" #x1D494)
- ("MATHEMATICAL BOLD ITALIC SMALL T" #x1D495)
- ("MATHEMATICAL BOLD ITALIC SMALL U" #x1D496)
- ("MATHEMATICAL BOLD ITALIC SMALL V" #x1D497)
- ("MATHEMATICAL BOLD ITALIC SMALL W" #x1D498)
- ("MATHEMATICAL BOLD ITALIC SMALL X" #x1D499)
- ("MATHEMATICAL BOLD ITALIC SMALL Y" #x1D49A)
- ("MATHEMATICAL BOLD ITALIC SMALL Z" #x1D49B)
- ("MATHEMATICAL SCRIPT CAPITAL A" #x1D49C)
- ("MATHEMATICAL SCRIPT CAPITAL C" #x1D49E)
- ("MATHEMATICAL SCRIPT CAPITAL D" #x1D49F)
- ("MATHEMATICAL SCRIPT CAPITAL G" #x1D4A2)
- ("MATHEMATICAL SCRIPT CAPITAL J" #x1D4A5)
- ("MATHEMATICAL SCRIPT CAPITAL K" #x1D4A6)
- ("MATHEMATICAL SCRIPT CAPITAL N" #x1D4A9)
- ("MATHEMATICAL SCRIPT CAPITAL O" #x1D4AA)
- ("MATHEMATICAL SCRIPT CAPITAL P" #x1D4AB)
- ("MATHEMATICAL SCRIPT CAPITAL Q" #x1D4AC)
- ("MATHEMATICAL SCRIPT CAPITAL S" #x1D4AE)
- ("MATHEMATICAL SCRIPT CAPITAL T" #x1D4AF)
- ("MATHEMATICAL SCRIPT CAPITAL U" #x1D4B0)
- ("MATHEMATICAL SCRIPT CAPITAL V" #x1D4B1)
- ("MATHEMATICAL SCRIPT CAPITAL W" #x1D4B2)
- ("MATHEMATICAL SCRIPT CAPITAL X" #x1D4B3)
- ("MATHEMATICAL SCRIPT CAPITAL Y" #x1D4B4)
- ("MATHEMATICAL SCRIPT CAPITAL Z" #x1D4B5)
- ("MATHEMATICAL SCRIPT SMALL A" #x1D4B6)
- ("MATHEMATICAL SCRIPT SMALL B" #x1D4B7)
- ("MATHEMATICAL SCRIPT SMALL C" #x1D4B8)
- ("MATHEMATICAL SCRIPT SMALL D" #x1D4B9)
- ("MATHEMATICAL SCRIPT SMALL F" #x1D4BB)
- ("MATHEMATICAL SCRIPT SMALL H" #x1D4BD)
- ("MATHEMATICAL SCRIPT SMALL I" #x1D4BE)
- ("MATHEMATICAL SCRIPT SMALL J" #x1D4BF)
- ("MATHEMATICAL SCRIPT SMALL K" #x1D4C0)
- ("MATHEMATICAL SCRIPT SMALL M" #x1D4C2)
- ("MATHEMATICAL SCRIPT SMALL N" #x1D4C3)
- ("MATHEMATICAL SCRIPT SMALL P" #x1D4C5)
- ("MATHEMATICAL SCRIPT SMALL Q" #x1D4C6)
- ("MATHEMATICAL SCRIPT SMALL R" #x1D4C7)
- ("MATHEMATICAL SCRIPT SMALL S" #x1D4C8)
- ("MATHEMATICAL SCRIPT SMALL T" #x1D4C9)
- ("MATHEMATICAL SCRIPT SMALL U" #x1D4CA)
- ("MATHEMATICAL SCRIPT SMALL V" #x1D4CB)
- ("MATHEMATICAL SCRIPT SMALL W" #x1D4CC)
- ("MATHEMATICAL SCRIPT SMALL X" #x1D4CD)
- ("MATHEMATICAL SCRIPT SMALL Y" #x1D4CE)
- ("MATHEMATICAL SCRIPT SMALL Z" #x1D4CF)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL A" #x1D4D0)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL B" #x1D4D1)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL C" #x1D4D2)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL D" #x1D4D3)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL E" #x1D4D4)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL F" #x1D4D5)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL G" #x1D4D6)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL H" #x1D4D7)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL I" #x1D4D8)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL J" #x1D4D9)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL K" #x1D4DA)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL L" #x1D4DB)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL M" #x1D4DC)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL N" #x1D4DD)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL O" #x1D4DE)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL P" #x1D4DF)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL Q" #x1D4E0)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL R" #x1D4E1)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL S" #x1D4E2)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL T" #x1D4E3)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL U" #x1D4E4)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL V" #x1D4E5)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL W" #x1D4E6)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL X" #x1D4E7)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL Y" #x1D4E8)
- ("MATHEMATICAL BOLD SCRIPT CAPITAL Z" #x1D4E9)
- ("MATHEMATICAL BOLD SCRIPT SMALL A" #x1D4EA)
- ("MATHEMATICAL BOLD SCRIPT SMALL B" #x1D4EB)
- ("MATHEMATICAL BOLD SCRIPT SMALL C" #x1D4EC)
- ("MATHEMATICAL BOLD SCRIPT SMALL D" #x1D4ED)
- ("MATHEMATICAL BOLD SCRIPT SMALL E" #x1D4EE)
- ("MATHEMATICAL BOLD SCRIPT SMALL F" #x1D4EF)
- ("MATHEMATICAL BOLD SCRIPT SMALL G" #x1D4F0)
- ("MATHEMATICAL BOLD SCRIPT SMALL H" #x1D4F1)
- ("MATHEMATICAL BOLD SCRIPT SMALL I" #x1D4F2)
- ("MATHEMATICAL BOLD SCRIPT SMALL J" #x1D4F3)
- ("MATHEMATICAL BOLD SCRIPT SMALL K" #x1D4F4)
- ("MATHEMATICAL BOLD SCRIPT SMALL L" #x1D4F5)
- ("MATHEMATICAL BOLD SCRIPT SMALL M" #x1D4F6)
- ("MATHEMATICAL BOLD SCRIPT SMALL N" #x1D4F7)
- ("MATHEMATICAL BOLD SCRIPT SMALL O" #x1D4F8)
- ("MATHEMATICAL BOLD SCRIPT SMALL P" #x1D4F9)
- ("MATHEMATICAL BOLD SCRIPT SMALL Q" #x1D4FA)
- ("MATHEMATICAL BOLD SCRIPT SMALL R" #x1D4FB)
- ("MATHEMATICAL BOLD SCRIPT SMALL S" #x1D4FC)
- ("MATHEMATICAL BOLD SCRIPT SMALL T" #x1D4FD)
- ("MATHEMATICAL BOLD SCRIPT SMALL U" #x1D4FE)
- ("MATHEMATICAL BOLD SCRIPT SMALL V" #x1D4FF)
- ("MATHEMATICAL BOLD SCRIPT SMALL W" #x1D500)
- ("MATHEMATICAL BOLD SCRIPT SMALL X" #x1D501)
- ("MATHEMATICAL BOLD SCRIPT SMALL Y" #x1D502)
- ("MATHEMATICAL BOLD SCRIPT SMALL Z" #x1D503)
- ("MATHEMATICAL FRAKTUR CAPITAL A" #x1D504)
- ("MATHEMATICAL FRAKTUR CAPITAL B" #x1D505)
- ("MATHEMATICAL FRAKTUR CAPITAL D" #x1D507)
- ("MATHEMATICAL FRAKTUR CAPITAL E" #x1D508)
- ("MATHEMATICAL FRAKTUR CAPITAL F" #x1D509)
- ("MATHEMATICAL FRAKTUR CAPITAL G" #x1D50A)
- ("MATHEMATICAL FRAKTUR CAPITAL J" #x1D50D)
- ("MATHEMATICAL FRAKTUR CAPITAL K" #x1D50E)
- ("MATHEMATICAL FRAKTUR CAPITAL L" #x1D50F)
- ("MATHEMATICAL FRAKTUR CAPITAL M" #x1D510)
- ("MATHEMATICAL FRAKTUR CAPITAL N" #x1D511)
- ("MATHEMATICAL FRAKTUR CAPITAL O" #x1D512)
- ("MATHEMATICAL FRAKTUR CAPITAL P" #x1D513)
- ("MATHEMATICAL FRAKTUR CAPITAL Q" #x1D514)
- ("MATHEMATICAL FRAKTUR CAPITAL S" #x1D516)
- ("MATHEMATICAL FRAKTUR CAPITAL T" #x1D517)
- ("MATHEMATICAL FRAKTUR CAPITAL U" #x1D518)
- ("MATHEMATICAL FRAKTUR CAPITAL V" #x1D519)
- ("MATHEMATICAL FRAKTUR CAPITAL W" #x1D51A)
- ("MATHEMATICAL FRAKTUR CAPITAL X" #x1D51B)
- ("MATHEMATICAL FRAKTUR CAPITAL Y" #x1D51C)
- ("MATHEMATICAL FRAKTUR SMALL A" #x1D51E)
- ("MATHEMATICAL FRAKTUR SMALL B" #x1D51F)
- ("MATHEMATICAL FRAKTUR SMALL C" #x1D520)
- ("MATHEMATICAL FRAKTUR SMALL D" #x1D521)
- ("MATHEMATICAL FRAKTUR SMALL E" #x1D522)
- ("MATHEMATICAL FRAKTUR SMALL F" #x1D523)
- ("MATHEMATICAL FRAKTUR SMALL G" #x1D524)
- ("MATHEMATICAL FRAKTUR SMALL H" #x1D525)
- ("MATHEMATICAL FRAKTUR SMALL I" #x1D526)
- ("MATHEMATICAL FRAKTUR SMALL J" #x1D527)
- ("MATHEMATICAL FRAKTUR SMALL K" #x1D528)
- ("MATHEMATICAL FRAKTUR SMALL L" #x1D529)
- ("MATHEMATICAL FRAKTUR SMALL M" #x1D52A)
- ("MATHEMATICAL FRAKTUR SMALL N" #x1D52B)
- ("MATHEMATICAL FRAKTUR SMALL O" #x1D52C)
- ("MATHEMATICAL FRAKTUR SMALL P" #x1D52D)
- ("MATHEMATICAL FRAKTUR SMALL Q" #x1D52E)
- ("MATHEMATICAL FRAKTUR SMALL R" #x1D52F)
- ("MATHEMATICAL FRAKTUR SMALL S" #x1D530)
- ("MATHEMATICAL FRAKTUR SMALL T" #x1D531)
- ("MATHEMATICAL FRAKTUR SMALL U" #x1D532)
- ("MATHEMATICAL FRAKTUR SMALL V" #x1D533)
- ("MATHEMATICAL FRAKTUR SMALL W" #x1D534)
- ("MATHEMATICAL FRAKTUR SMALL X" #x1D535)
- ("MATHEMATICAL FRAKTUR SMALL Y" #x1D536)
- ("MATHEMATICAL FRAKTUR SMALL Z" #x1D537)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL A" #x1D538)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL B" #x1D539)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL D" #x1D53B)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL E" #x1D53C)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL F" #x1D53D)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL G" #x1D53E)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL I" #x1D540)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL J" #x1D541)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL K" #x1D542)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL L" #x1D543)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL M" #x1D544)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL O" #x1D546)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL S" #x1D54A)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL T" #x1D54B)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL U" #x1D54C)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL V" #x1D54D)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL W" #x1D54E)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL X" #x1D54F)
- ("MATHEMATICAL DOUBLE-STRUCK CAPITAL Y" #x1D550)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL A" #x1D552)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL B" #x1D553)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL C" #x1D554)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL D" #x1D555)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL E" #x1D556)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL F" #x1D557)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL G" #x1D558)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL H" #x1D559)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL I" #x1D55A)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL J" #x1D55B)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL K" #x1D55C)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL L" #x1D55D)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL M" #x1D55E)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL N" #x1D55F)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL O" #x1D560)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL P" #x1D561)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL Q" #x1D562)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL R" #x1D563)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL S" #x1D564)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL T" #x1D565)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL U" #x1D566)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL V" #x1D567)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL W" #x1D568)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL X" #x1D569)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL Y" #x1D56A)
- ("MATHEMATICAL DOUBLE-STRUCK SMALL Z" #x1D56B)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL A" #x1D56C)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL B" #x1D56D)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL C" #x1D56E)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL D" #x1D56F)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL E" #x1D570)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL F" #x1D571)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL G" #x1D572)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL H" #x1D573)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL I" #x1D574)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL J" #x1D575)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL K" #x1D576)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL L" #x1D577)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL M" #x1D578)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL N" #x1D579)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL O" #x1D57A)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL P" #x1D57B)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL Q" #x1D57C)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL R" #x1D57D)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL S" #x1D57E)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL T" #x1D57F)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL U" #x1D580)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL V" #x1D581)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL W" #x1D582)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL X" #x1D583)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL Y" #x1D584)
- ("MATHEMATICAL BOLD FRAKTUR CAPITAL Z" #x1D585)
- ("MATHEMATICAL BOLD FRAKTUR SMALL A" #x1D586)
- ("MATHEMATICAL BOLD FRAKTUR SMALL B" #x1D587)
- ("MATHEMATICAL BOLD FRAKTUR SMALL C" #x1D588)
- ("MATHEMATICAL BOLD FRAKTUR SMALL D" #x1D589)
- ("MATHEMATICAL BOLD FRAKTUR SMALL E" #x1D58A)
- ("MATHEMATICAL BOLD FRAKTUR SMALL F" #x1D58B)
- ("MATHEMATICAL BOLD FRAKTUR SMALL G" #x1D58C)
- ("MATHEMATICAL BOLD FRAKTUR SMALL H" #x1D58D)
- ("MATHEMATICAL BOLD FRAKTUR SMALL I" #x1D58E)
- ("MATHEMATICAL BOLD FRAKTUR SMALL J" #x1D58F)
- ("MATHEMATICAL BOLD FRAKTUR SMALL K" #x1D590)
- ("MATHEMATICAL BOLD FRAKTUR SMALL L" #x1D591)
- ("MATHEMATICAL BOLD FRAKTUR SMALL M" #x1D592)
- ("MATHEMATICAL BOLD FRAKTUR SMALL N" #x1D593)
- ("MATHEMATICAL BOLD FRAKTUR SMALL O" #x1D594)
- ("MATHEMATICAL BOLD FRAKTUR SMALL P" #x1D595)
- ("MATHEMATICAL BOLD FRAKTUR SMALL Q" #x1D596)
- ("MATHEMATICAL BOLD FRAKTUR SMALL R" #x1D597)
- ("MATHEMATICAL BOLD FRAKTUR SMALL S" #x1D598)
- ("MATHEMATICAL BOLD FRAKTUR SMALL T" #x1D599)
- ("MATHEMATICAL BOLD FRAKTUR SMALL U" #x1D59A)
- ("MATHEMATICAL BOLD FRAKTUR SMALL V" #x1D59B)
- ("MATHEMATICAL BOLD FRAKTUR SMALL W" #x1D59C)
- ("MATHEMATICAL BOLD FRAKTUR SMALL X" #x1D59D)
- ("MATHEMATICAL BOLD FRAKTUR SMALL Y" #x1D59E)
- ("MATHEMATICAL BOLD FRAKTUR SMALL Z" #x1D59F)
- ("MATHEMATICAL SANS-SERIF CAPITAL A" #x1D5A0)
- ("MATHEMATICAL SANS-SERIF CAPITAL B" #x1D5A1)
- ("MATHEMATICAL SANS-SERIF CAPITAL C" #x1D5A2)
- ("MATHEMATICAL SANS-SERIF CAPITAL D" #x1D5A3)
- ("MATHEMATICAL SANS-SERIF CAPITAL E" #x1D5A4)
- ("MATHEMATICAL SANS-SERIF CAPITAL F" #x1D5A5)
- ("MATHEMATICAL SANS-SERIF CAPITAL G" #x1D5A6)
- ("MATHEMATICAL SANS-SERIF CAPITAL H" #x1D5A7)
- ("MATHEMATICAL SANS-SERIF CAPITAL I" #x1D5A8)
- ("MATHEMATICAL SANS-SERIF CAPITAL J" #x1D5A9)
- ("MATHEMATICAL SANS-SERIF CAPITAL K" #x1D5AA)
- ("MATHEMATICAL SANS-SERIF CAPITAL L" #x1D5AB)
- ("MATHEMATICAL SANS-SERIF CAPITAL M" #x1D5AC)
- ("MATHEMATICAL SANS-SERIF CAPITAL N" #x1D5AD)
- ("MATHEMATICAL SANS-SERIF CAPITAL O" #x1D5AE)
- ("MATHEMATICAL SANS-SERIF CAPITAL P" #x1D5AF)
- ("MATHEMATICAL SANS-SERIF CAPITAL Q" #x1D5B0)
- ("MATHEMATICAL SANS-SERIF CAPITAL R" #x1D5B1)
- ("MATHEMATICAL SANS-SERIF CAPITAL S" #x1D5B2)
- ("MATHEMATICAL SANS-SERIF CAPITAL T" #x1D5B3)
- ("MATHEMATICAL SANS-SERIF CAPITAL U" #x1D5B4)
- ("MATHEMATICAL SANS-SERIF CAPITAL V" #x1D5B5)
- ("MATHEMATICAL SANS-SERIF CAPITAL W" #x1D5B6)
- ("MATHEMATICAL SANS-SERIF CAPITAL X" #x1D5B7)
- ("MATHEMATICAL SANS-SERIF CAPITAL Y" #x1D5B8)
- ("MATHEMATICAL SANS-SERIF CAPITAL Z" #x1D5B9)
- ("MATHEMATICAL SANS-SERIF SMALL A" #x1D5BA)
- ("MATHEMATICAL SANS-SERIF SMALL B" #x1D5BB)
- ("MATHEMATICAL SANS-SERIF SMALL C" #x1D5BC)
- ("MATHEMATICAL SANS-SERIF SMALL D" #x1D5BD)
- ("MATHEMATICAL SANS-SERIF SMALL E" #x1D5BE)
- ("MATHEMATICAL SANS-SERIF SMALL F" #x1D5BF)
- ("MATHEMATICAL SANS-SERIF SMALL G" #x1D5C0)
- ("MATHEMATICAL SANS-SERIF SMALL H" #x1D5C1)
- ("MATHEMATICAL SANS-SERIF SMALL I" #x1D5C2)
- ("MATHEMATICAL SANS-SERIF SMALL J" #x1D5C3)
- ("MATHEMATICAL SANS-SERIF SMALL K" #x1D5C4)
- ("MATHEMATICAL SANS-SERIF SMALL L" #x1D5C5)
- ("MATHEMATICAL SANS-SERIF SMALL M" #x1D5C6)
- ("MATHEMATICAL SANS-SERIF SMALL N" #x1D5C7)
- ("MATHEMATICAL SANS-SERIF SMALL O" #x1D5C8)
- ("MATHEMATICAL SANS-SERIF SMALL P" #x1D5C9)
- ("MATHEMATICAL SANS-SERIF SMALL Q" #x1D5CA)
- ("MATHEMATICAL SANS-SERIF SMALL R" #x1D5CB)
- ("MATHEMATICAL SANS-SERIF SMALL S" #x1D5CC)
- ("MATHEMATICAL SANS-SERIF SMALL T" #x1D5CD)
- ("MATHEMATICAL SANS-SERIF SMALL U" #x1D5CE)
- ("MATHEMATICAL SANS-SERIF SMALL V" #x1D5CF)
- ("MATHEMATICAL SANS-SERIF SMALL W" #x1D5D0)
- ("MATHEMATICAL SANS-SERIF SMALL X" #x1D5D1)
- ("MATHEMATICAL SANS-SERIF SMALL Y" #x1D5D2)
- ("MATHEMATICAL SANS-SERIF SMALL Z" #x1D5D3)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL A" #x1D5D4)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL B" #x1D5D5)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL C" #x1D5D6)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL D" #x1D5D7)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL E" #x1D5D8)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL F" #x1D5D9)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL G" #x1D5DA)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL H" #x1D5DB)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL I" #x1D5DC)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL J" #x1D5DD)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL K" #x1D5DE)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL L" #x1D5DF)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL M" #x1D5E0)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL N" #x1D5E1)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL O" #x1D5E2)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL P" #x1D5E3)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Q" #x1D5E4)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL R" #x1D5E5)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL S" #x1D5E6)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL T" #x1D5E7)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL U" #x1D5E8)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL V" #x1D5E9)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL W" #x1D5EA)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL X" #x1D5EB)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Y" #x1D5EC)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Z" #x1D5ED)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL A" #x1D5EE)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL B" #x1D5EF)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL C" #x1D5F0)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL D" #x1D5F1)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL E" #x1D5F2)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL F" #x1D5F3)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL G" #x1D5F4)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL H" #x1D5F5)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL I" #x1D5F6)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL J" #x1D5F7)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL K" #x1D5F8)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL L" #x1D5F9)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL M" #x1D5FA)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL N" #x1D5FB)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL O" #x1D5FC)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL P" #x1D5FD)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL Q" #x1D5FE)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL R" #x1D5FF)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL S" #x1D600)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL T" #x1D601)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL U" #x1D602)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL V" #x1D603)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL W" #x1D604)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL X" #x1D605)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL Y" #x1D606)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL Z" #x1D607)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL A" #x1D608)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL B" #x1D609)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL C" #x1D60A)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL D" #x1D60B)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL E" #x1D60C)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL F" #x1D60D)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL G" #x1D60E)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL H" #x1D60F)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL I" #x1D610)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL J" #x1D611)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL K" #x1D612)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL L" #x1D613)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL M" #x1D614)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL N" #x1D615)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL O" #x1D616)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL P" #x1D617)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q" #x1D618)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL R" #x1D619)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL S" #x1D61A)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL T" #x1D61B)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL U" #x1D61C)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL V" #x1D61D)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL W" #x1D61E)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL X" #x1D61F)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y" #x1D620)
- ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z" #x1D621)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL A" #x1D622)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL B" #x1D623)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL C" #x1D624)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL D" #x1D625)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL E" #x1D626)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL F" #x1D627)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL G" #x1D628)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL H" #x1D629)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL I" #x1D62A)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL J" #x1D62B)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL K" #x1D62C)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL L" #x1D62D)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL M" #x1D62E)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL N" #x1D62F)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL O" #x1D630)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL P" #x1D631)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL Q" #x1D632)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL R" #x1D633)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL S" #x1D634)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL T" #x1D635)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL U" #x1D636)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL V" #x1D637)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL W" #x1D638)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL X" #x1D639)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL Y" #x1D63A)
- ("MATHEMATICAL SANS-SERIF ITALIC SMALL Z" #x1D63B)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A" #x1D63C)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B" #x1D63D)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C" #x1D63E)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D" #x1D63F)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E" #x1D640)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F" #x1D641)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G" #x1D642)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H" #x1D643)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I" #x1D644)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J" #x1D645)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K" #x1D646)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L" #x1D647)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M" #x1D648)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N" #x1D649)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O" #x1D64A)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P" #x1D64B)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q" #x1D64C)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R" #x1D64D)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S" #x1D64E)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T" #x1D64F)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U" #x1D650)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V" #x1D651)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W" #x1D652)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X" #x1D653)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y" #x1D654)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z" #x1D655)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A" #x1D656)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B" #x1D657)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C" #x1D658)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D" #x1D659)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E" #x1D65A)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F" #x1D65B)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G" #x1D65C)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H" #x1D65D)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I" #x1D65E)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J" #x1D65F)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K" #x1D660)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L" #x1D661)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M" #x1D662)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N" #x1D663)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O" #x1D664)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P" #x1D665)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q" #x1D666)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R" #x1D667)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S" #x1D668)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T" #x1D669)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U" #x1D66A)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V" #x1D66B)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W" #x1D66C)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X" #x1D66D)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y" #x1D66E)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z" #x1D66F)
- ("MATHEMATICAL MONOSPACE CAPITAL A" #x1D670)
- ("MATHEMATICAL MONOSPACE CAPITAL B" #x1D671)
- ("MATHEMATICAL MONOSPACE CAPITAL C" #x1D672)
- ("MATHEMATICAL MONOSPACE CAPITAL D" #x1D673)
- ("MATHEMATICAL MONOSPACE CAPITAL E" #x1D674)
- ("MATHEMATICAL MONOSPACE CAPITAL F" #x1D675)
- ("MATHEMATICAL MONOSPACE CAPITAL G" #x1D676)
- ("MATHEMATICAL MONOSPACE CAPITAL H" #x1D677)
- ("MATHEMATICAL MONOSPACE CAPITAL I" #x1D678)
- ("MATHEMATICAL MONOSPACE CAPITAL J" #x1D679)
- ("MATHEMATICAL MONOSPACE CAPITAL K" #x1D67A)
- ("MATHEMATICAL MONOSPACE CAPITAL L" #x1D67B)
- ("MATHEMATICAL MONOSPACE CAPITAL M" #x1D67C)
- ("MATHEMATICAL MONOSPACE CAPITAL N" #x1D67D)
- ("MATHEMATICAL MONOSPACE CAPITAL O" #x1D67E)
- ("MATHEMATICAL MONOSPACE CAPITAL P" #x1D67F)
- ("MATHEMATICAL MONOSPACE CAPITAL Q" #x1D680)
- ("MATHEMATICAL MONOSPACE CAPITAL R" #x1D681)
- ("MATHEMATICAL MONOSPACE CAPITAL S" #x1D682)
- ("MATHEMATICAL MONOSPACE CAPITAL T" #x1D683)
- ("MATHEMATICAL MONOSPACE CAPITAL U" #x1D684)
- ("MATHEMATICAL MONOSPACE CAPITAL V" #x1D685)
- ("MATHEMATICAL MONOSPACE CAPITAL W" #x1D686)
- ("MATHEMATICAL MONOSPACE CAPITAL X" #x1D687)
- ("MATHEMATICAL MONOSPACE CAPITAL Y" #x1D688)
- ("MATHEMATICAL MONOSPACE CAPITAL Z" #x1D689)
- ("MATHEMATICAL MONOSPACE SMALL A" #x1D68A)
- ("MATHEMATICAL MONOSPACE SMALL B" #x1D68B)
- ("MATHEMATICAL MONOSPACE SMALL C" #x1D68C)
- ("MATHEMATICAL MONOSPACE SMALL D" #x1D68D)
- ("MATHEMATICAL MONOSPACE SMALL E" #x1D68E)
- ("MATHEMATICAL MONOSPACE SMALL F" #x1D68F)
- ("MATHEMATICAL MONOSPACE SMALL G" #x1D690)
- ("MATHEMATICAL MONOSPACE SMALL H" #x1D691)
- ("MATHEMATICAL MONOSPACE SMALL I" #x1D692)
- ("MATHEMATICAL MONOSPACE SMALL J" #x1D693)
- ("MATHEMATICAL MONOSPACE SMALL K" #x1D694)
- ("MATHEMATICAL MONOSPACE SMALL L" #x1D695)
- ("MATHEMATICAL MONOSPACE SMALL M" #x1D696)
- ("MATHEMATICAL MONOSPACE SMALL N" #x1D697)
- ("MATHEMATICAL MONOSPACE SMALL O" #x1D698)
- ("MATHEMATICAL MONOSPACE SMALL P" #x1D699)
- ("MATHEMATICAL MONOSPACE SMALL Q" #x1D69A)
- ("MATHEMATICAL MONOSPACE SMALL R" #x1D69B)
- ("MATHEMATICAL MONOSPACE SMALL S" #x1D69C)
- ("MATHEMATICAL MONOSPACE SMALL T" #x1D69D)
- ("MATHEMATICAL MONOSPACE SMALL U" #x1D69E)
- ("MATHEMATICAL MONOSPACE SMALL V" #x1D69F)
- ("MATHEMATICAL MONOSPACE SMALL W" #x1D6A0)
- ("MATHEMATICAL MONOSPACE SMALL X" #x1D6A1)
- ("MATHEMATICAL MONOSPACE SMALL Y" #x1D6A2)
- ("MATHEMATICAL MONOSPACE SMALL Z" #x1D6A3)
- ("MATHEMATICAL BOLD CAPITAL ALPHA" #x1D6A8)
- ("MATHEMATICAL BOLD CAPITAL BETA" #x1D6A9)
- ("MATHEMATICAL BOLD CAPITAL GAMMA" #x1D6AA)
- ("MATHEMATICAL BOLD CAPITAL DELTA" #x1D6AB)
- ("MATHEMATICAL BOLD CAPITAL EPSILON" #x1D6AC)
- ("MATHEMATICAL BOLD CAPITAL ZETA" #x1D6AD)
- ("MATHEMATICAL BOLD CAPITAL ETA" #x1D6AE)
- ("MATHEMATICAL BOLD CAPITAL THETA" #x1D6AF)
- ("MATHEMATICAL BOLD CAPITAL IOTA" #x1D6B0)
- ("MATHEMATICAL BOLD CAPITAL KAPPA" #x1D6B1)
- ("MATHEMATICAL BOLD CAPITAL LAMDA" #x1D6B2)
- ("MATHEMATICAL BOLD CAPITAL MU" #x1D6B3)
- ("MATHEMATICAL BOLD CAPITAL NU" #x1D6B4)
- ("MATHEMATICAL BOLD CAPITAL XI" #x1D6B5)
- ("MATHEMATICAL BOLD CAPITAL OMICRON" #x1D6B6)
- ("MATHEMATICAL BOLD CAPITAL PI" #x1D6B7)
- ("MATHEMATICAL BOLD CAPITAL RHO" #x1D6B8)
- ("MATHEMATICAL BOLD CAPITAL THETA SYMBOL" #x1D6B9)
- ("MATHEMATICAL BOLD CAPITAL SIGMA" #x1D6BA)
- ("MATHEMATICAL BOLD CAPITAL TAU" #x1D6BB)
- ("MATHEMATICAL BOLD CAPITAL UPSILON" #x1D6BC)
- ("MATHEMATICAL BOLD CAPITAL PHI" #x1D6BD)
- ("MATHEMATICAL BOLD CAPITAL CHI" #x1D6BE)
- ("MATHEMATICAL BOLD CAPITAL PSI" #x1D6BF)
- ("MATHEMATICAL BOLD CAPITAL OMEGA" #x1D6C0)
- ("MATHEMATICAL BOLD NABLA" #x1D6C1)
- ("MATHEMATICAL BOLD SMALL ALPHA" #x1D6C2)
- ("MATHEMATICAL BOLD SMALL BETA" #x1D6C3)
- ("MATHEMATICAL BOLD SMALL GAMMA" #x1D6C4)
- ("MATHEMATICAL BOLD SMALL DELTA" #x1D6C5)
- ("MATHEMATICAL BOLD SMALL EPSILON" #x1D6C6)
- ("MATHEMATICAL BOLD SMALL ZETA" #x1D6C7)
- ("MATHEMATICAL BOLD SMALL ETA" #x1D6C8)
- ("MATHEMATICAL BOLD SMALL THETA" #x1D6C9)
- ("MATHEMATICAL BOLD SMALL IOTA" #x1D6CA)
- ("MATHEMATICAL BOLD SMALL KAPPA" #x1D6CB)
- ("MATHEMATICAL BOLD SMALL LAMDA" #x1D6CC)
- ("MATHEMATICAL BOLD SMALL MU" #x1D6CD)
- ("MATHEMATICAL BOLD SMALL NU" #x1D6CE)
- ("MATHEMATICAL BOLD SMALL XI" #x1D6CF)
- ("MATHEMATICAL BOLD SMALL OMICRON" #x1D6D0)
- ("MATHEMATICAL BOLD SMALL PI" #x1D6D1)
- ("MATHEMATICAL BOLD SMALL RHO" #x1D6D2)
- ("MATHEMATICAL BOLD SMALL FINAL SIGMA" #x1D6D3)
- ("MATHEMATICAL BOLD SMALL SIGMA" #x1D6D4)
- ("MATHEMATICAL BOLD SMALL TAU" #x1D6D5)
- ("MATHEMATICAL BOLD SMALL UPSILON" #x1D6D6)
- ("MATHEMATICAL BOLD SMALL PHI" #x1D6D7)
- ("MATHEMATICAL BOLD SMALL CHI" #x1D6D8)
- ("MATHEMATICAL BOLD SMALL PSI" #x1D6D9)
- ("MATHEMATICAL BOLD SMALL OMEGA" #x1D6DA)
- ("MATHEMATICAL BOLD PARTIAL DIFFERENTIAL" #x1D6DB)
- ("MATHEMATICAL BOLD EPSILON SYMBOL" #x1D6DC)
- ("MATHEMATICAL BOLD THETA SYMBOL" #x1D6DD)
- ("MATHEMATICAL BOLD KAPPA SYMBOL" #x1D6DE)
- ("MATHEMATICAL BOLD PHI SYMBOL" #x1D6DF)
- ("MATHEMATICAL BOLD RHO SYMBOL" #x1D6E0)
- ("MATHEMATICAL BOLD PI SYMBOL" #x1D6E1)
- ("MATHEMATICAL ITALIC CAPITAL ALPHA" #x1D6E2)
- ("MATHEMATICAL ITALIC CAPITAL BETA" #x1D6E3)
- ("MATHEMATICAL ITALIC CAPITAL GAMMA" #x1D6E4)
- ("MATHEMATICAL ITALIC CAPITAL DELTA" #x1D6E5)
- ("MATHEMATICAL ITALIC CAPITAL EPSILON" #x1D6E6)
- ("MATHEMATICAL ITALIC CAPITAL ZETA" #x1D6E7)
- ("MATHEMATICAL ITALIC CAPITAL ETA" #x1D6E8)
- ("MATHEMATICAL ITALIC CAPITAL THETA" #x1D6E9)
- ("MATHEMATICAL ITALIC CAPITAL IOTA" #x1D6EA)
- ("MATHEMATICAL ITALIC CAPITAL KAPPA" #x1D6EB)
- ("MATHEMATICAL ITALIC CAPITAL LAMDA" #x1D6EC)
- ("MATHEMATICAL ITALIC CAPITAL MU" #x1D6ED)
- ("MATHEMATICAL ITALIC CAPITAL NU" #x1D6EE)
- ("MATHEMATICAL ITALIC CAPITAL XI" #x1D6EF)
- ("MATHEMATICAL ITALIC CAPITAL OMICRON" #x1D6F0)
- ("MATHEMATICAL ITALIC CAPITAL PI" #x1D6F1)
- ("MATHEMATICAL ITALIC CAPITAL RHO" #x1D6F2)
- ("MATHEMATICAL ITALIC CAPITAL THETA SYMBOL" #x1D6F3)
- ("MATHEMATICAL ITALIC CAPITAL SIGMA" #x1D6F4)
- ("MATHEMATICAL ITALIC CAPITAL TAU" #x1D6F5)
- ("MATHEMATICAL ITALIC CAPITAL UPSILON" #x1D6F6)
- ("MATHEMATICAL ITALIC CAPITAL PHI" #x1D6F7)
- ("MATHEMATICAL ITALIC CAPITAL CHI" #x1D6F8)
- ("MATHEMATICAL ITALIC CAPITAL PSI" #x1D6F9)
- ("MATHEMATICAL ITALIC CAPITAL OMEGA" #x1D6FA)
- ("MATHEMATICAL ITALIC NABLA" #x1D6FB)
- ("MATHEMATICAL ITALIC SMALL ALPHA" #x1D6FC)
- ("MATHEMATICAL ITALIC SMALL BETA" #x1D6FD)
- ("MATHEMATICAL ITALIC SMALL GAMMA" #x1D6FE)
- ("MATHEMATICAL ITALIC SMALL DELTA" #x1D6FF)
- ("MATHEMATICAL ITALIC SMALL EPSILON" #x1D700)
- ("MATHEMATICAL ITALIC SMALL ZETA" #x1D701)
- ("MATHEMATICAL ITALIC SMALL ETA" #x1D702)
- ("MATHEMATICAL ITALIC SMALL THETA" #x1D703)
- ("MATHEMATICAL ITALIC SMALL IOTA" #x1D704)
- ("MATHEMATICAL ITALIC SMALL KAPPA" #x1D705)
- ("MATHEMATICAL ITALIC SMALL LAMDA" #x1D706)
- ("MATHEMATICAL ITALIC SMALL MU" #x1D707)
- ("MATHEMATICAL ITALIC SMALL NU" #x1D708)
- ("MATHEMATICAL ITALIC SMALL XI" #x1D709)
- ("MATHEMATICAL ITALIC SMALL OMICRON" #x1D70A)
- ("MATHEMATICAL ITALIC SMALL PI" #x1D70B)
- ("MATHEMATICAL ITALIC SMALL RHO" #x1D70C)
- ("MATHEMATICAL ITALIC SMALL FINAL SIGMA" #x1D70D)
- ("MATHEMATICAL ITALIC SMALL SIGMA" #x1D70E)
- ("MATHEMATICAL ITALIC SMALL TAU" #x1D70F)
- ("MATHEMATICAL ITALIC SMALL UPSILON" #x1D710)
- ("MATHEMATICAL ITALIC SMALL PHI" #x1D711)
- ("MATHEMATICAL ITALIC SMALL CHI" #x1D712)
- ("MATHEMATICAL ITALIC SMALL PSI" #x1D713)
- ("MATHEMATICAL ITALIC SMALL OMEGA" #x1D714)
- ("MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL" #x1D715)
- ("MATHEMATICAL ITALIC EPSILON SYMBOL" #x1D716)
- ("MATHEMATICAL ITALIC THETA SYMBOL" #x1D717)
- ("MATHEMATICAL ITALIC KAPPA SYMBOL" #x1D718)
- ("MATHEMATICAL ITALIC PHI SYMBOL" #x1D719)
- ("MATHEMATICAL ITALIC RHO SYMBOL" #x1D71A)
- ("MATHEMATICAL ITALIC PI SYMBOL" #x1D71B)
- ("MATHEMATICAL BOLD ITALIC CAPITAL ALPHA" #x1D71C)
- ("MATHEMATICAL BOLD ITALIC CAPITAL BETA" #x1D71D)
- ("MATHEMATICAL BOLD ITALIC CAPITAL GAMMA" #x1D71E)
- ("MATHEMATICAL BOLD ITALIC CAPITAL DELTA" #x1D71F)
- ("MATHEMATICAL BOLD ITALIC CAPITAL EPSILON" #x1D720)
- ("MATHEMATICAL BOLD ITALIC CAPITAL ZETA" #x1D721)
- ("MATHEMATICAL BOLD ITALIC CAPITAL ETA" #x1D722)
- ("MATHEMATICAL BOLD ITALIC CAPITAL THETA" #x1D723)
- ("MATHEMATICAL BOLD ITALIC CAPITAL IOTA" #x1D724)
- ("MATHEMATICAL BOLD ITALIC CAPITAL KAPPA" #x1D725)
- ("MATHEMATICAL BOLD ITALIC CAPITAL LAMDA" #x1D726)
- ("MATHEMATICAL BOLD ITALIC CAPITAL MU" #x1D727)
- ("MATHEMATICAL BOLD ITALIC CAPITAL NU" #x1D728)
- ("MATHEMATICAL BOLD ITALIC CAPITAL XI" #x1D729)
- ("MATHEMATICAL BOLD ITALIC CAPITAL OMICRON" #x1D72A)
- ("MATHEMATICAL BOLD ITALIC CAPITAL PI" #x1D72B)
- ("MATHEMATICAL BOLD ITALIC CAPITAL RHO" #x1D72C)
- ("MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL" #x1D72D)
- ("MATHEMATICAL BOLD ITALIC CAPITAL SIGMA" #x1D72E)
- ("MATHEMATICAL BOLD ITALIC CAPITAL TAU" #x1D72F)
- ("MATHEMATICAL BOLD ITALIC CAPITAL UPSILON" #x1D730)
- ("MATHEMATICAL BOLD ITALIC CAPITAL PHI" #x1D731)
- ("MATHEMATICAL BOLD ITALIC CAPITAL CHI" #x1D732)
- ("MATHEMATICAL BOLD ITALIC CAPITAL PSI" #x1D733)
- ("MATHEMATICAL BOLD ITALIC CAPITAL OMEGA" #x1D734)
- ("MATHEMATICAL BOLD ITALIC NABLA" #x1D735)
- ("MATHEMATICAL BOLD ITALIC SMALL ALPHA" #x1D736)
- ("MATHEMATICAL BOLD ITALIC SMALL BETA" #x1D737)
- ("MATHEMATICAL BOLD ITALIC SMALL GAMMA" #x1D738)
- ("MATHEMATICAL BOLD ITALIC SMALL DELTA" #x1D739)
- ("MATHEMATICAL BOLD ITALIC SMALL EPSILON" #x1D73A)
- ("MATHEMATICAL BOLD ITALIC SMALL ZETA" #x1D73B)
- ("MATHEMATICAL BOLD ITALIC SMALL ETA" #x1D73C)
- ("MATHEMATICAL BOLD ITALIC SMALL THETA" #x1D73D)
- ("MATHEMATICAL BOLD ITALIC SMALL IOTA" #x1D73E)
- ("MATHEMATICAL BOLD ITALIC SMALL KAPPA" #x1D73F)
- ("MATHEMATICAL BOLD ITALIC SMALL LAMDA" #x1D740)
- ("MATHEMATICAL BOLD ITALIC SMALL MU" #x1D741)
- ("MATHEMATICAL BOLD ITALIC SMALL NU" #x1D742)
- ("MATHEMATICAL BOLD ITALIC SMALL XI" #x1D743)
- ("MATHEMATICAL BOLD ITALIC SMALL OMICRON" #x1D744)
- ("MATHEMATICAL BOLD ITALIC SMALL PI" #x1D745)
- ("MATHEMATICAL BOLD ITALIC SMALL RHO" #x1D746)
- ("MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA" #x1D747)
- ("MATHEMATICAL BOLD ITALIC SMALL SIGMA" #x1D748)
- ("MATHEMATICAL BOLD ITALIC SMALL TAU" #x1D749)
- ("MATHEMATICAL BOLD ITALIC SMALL UPSILON" #x1D74A)
- ("MATHEMATICAL BOLD ITALIC SMALL PHI" #x1D74B)
- ("MATHEMATICAL BOLD ITALIC SMALL CHI" #x1D74C)
- ("MATHEMATICAL BOLD ITALIC SMALL PSI" #x1D74D)
- ("MATHEMATICAL BOLD ITALIC SMALL OMEGA" #x1D74E)
- ("MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D74F)
- ("MATHEMATICAL BOLD ITALIC EPSILON SYMBOL" #x1D750)
- ("MATHEMATICAL BOLD ITALIC THETA SYMBOL" #x1D751)
- ("MATHEMATICAL BOLD ITALIC KAPPA SYMBOL" #x1D752)
- ("MATHEMATICAL BOLD ITALIC PHI SYMBOL" #x1D753)
- ("MATHEMATICAL BOLD ITALIC RHO SYMBOL" #x1D754)
- ("MATHEMATICAL BOLD ITALIC PI SYMBOL" #x1D755)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA" #x1D756)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA" #x1D757)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA" #x1D758)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA" #x1D759)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON" #x1D75A)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA" #x1D75B)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA" #x1D75C)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA" #x1D75D)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA" #x1D75E)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA" #x1D75F)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA" #x1D760)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL MU" #x1D761)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL NU" #x1D762)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL XI" #x1D763)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON" #x1D764)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PI" #x1D765)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO" #x1D766)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL" #x1D767)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA" #x1D768)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU" #x1D769)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON" #x1D76A)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI" #x1D76B)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI" #x1D76C)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI" #x1D76D)
- ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA" #x1D76E)
- ("MATHEMATICAL SANS-SERIF BOLD NABLA" #x1D76F)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA" #x1D770)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL BETA" #x1D771)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA" #x1D772)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL DELTA" #x1D773)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON" #x1D774)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL ZETA" #x1D775)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL ETA" #x1D776)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL THETA" #x1D777)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL IOTA" #x1D778)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA" #x1D779)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA" #x1D77A)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL MU" #x1D77B)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL NU" #x1D77C)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL XI" #x1D77D)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON" #x1D77E)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL PI" #x1D77F)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL RHO" #x1D780)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA" #x1D781)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA" #x1D782)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL TAU" #x1D783)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON" #x1D784)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL PHI" #x1D785)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL CHI" #x1D786)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL PSI" #x1D787)
- ("MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA" #x1D788)
- ("MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL" #x1D789)
- ("MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL" #x1D78A)
- ("MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL" #x1D78B)
- ("MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL" #x1D78C)
- ("MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL" #x1D78D)
- ("MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL" #x1D78E)
- ("MATHEMATICAL SANS-SERIF BOLD PI SYMBOL" #x1D78F)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA" #x1D790)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA" #x1D791)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA" #x1D792)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA" #x1D793)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON" #x1D794)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA" #x1D795)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA" #x1D796)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA" #x1D797)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA" #x1D798)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA" #x1D799)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA" #x1D79A)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU" #x1D79B)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU" #x1D79C)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI" #x1D79D)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON" #x1D79E)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI" #x1D79F)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO" #x1D7A0)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL" #x1D7A1)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA" #x1D7A2)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU" #x1D7A3)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON" #x1D7A4)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI" #x1D7A5)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI" #x1D7A6)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI" #x1D7A7)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA" #x1D7A8)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA" #x1D7A9)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA" #x1D7AA)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA" #x1D7AB)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA" #x1D7AC)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA" #x1D7AD)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON" #x1D7AE)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA" #x1D7AF)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA" #x1D7B0)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA" #x1D7B1)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA" #x1D7B2)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA" #x1D7B3)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA" #x1D7B4)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU" #x1D7B5)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU" #x1D7B6)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI" #x1D7B7)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON" #x1D7B8)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI" #x1D7B9)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO" #x1D7BA)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA" #x1D7BB)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA" #x1D7BC)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU" #x1D7BD)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON" #x1D7BE)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI" #x1D7BF)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI" #x1D7C0)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI" #x1D7C1)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA" #x1D7C2)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D7C3)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL" #x1D7C4)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL" #x1D7C5)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL" #x1D7C6)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL" #x1D7C7)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL" #x1D7C8)
- ("MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL" #x1D7C9)
- ("MATHEMATICAL BOLD DIGIT ZERO" #x1D7CE)
- ("MATHEMATICAL BOLD DIGIT ONE" #x1D7CF)
- ("MATHEMATICAL BOLD DIGIT TWO" #x1D7D0)
- ("MATHEMATICAL BOLD DIGIT THREE" #x1D7D1)
- ("MATHEMATICAL BOLD DIGIT FOUR" #x1D7D2)
- ("MATHEMATICAL BOLD DIGIT FIVE" #x1D7D3)
- ("MATHEMATICAL BOLD DIGIT SIX" #x1D7D4)
- ("MATHEMATICAL BOLD DIGIT SEVEN" #x1D7D5)
- ("MATHEMATICAL BOLD DIGIT EIGHT" #x1D7D6)
- ("MATHEMATICAL BOLD DIGIT NINE" #x1D7D7)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO" #x1D7D8)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT ONE" #x1D7D9)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT TWO" #x1D7DA)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT THREE" #x1D7DB)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR" #x1D7DC)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE" #x1D7DD)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT SIX" #x1D7DE)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN" #x1D7DF)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT" #x1D7E0)
- ("MATHEMATICAL DOUBLE-STRUCK DIGIT NINE" #x1D7E1)
- ("MATHEMATICAL SANS-SERIF DIGIT ZERO" #x1D7E2)
- ("MATHEMATICAL SANS-SERIF DIGIT ONE" #x1D7E3)
- ("MATHEMATICAL SANS-SERIF DIGIT TWO" #x1D7E4)
- ("MATHEMATICAL SANS-SERIF DIGIT THREE" #x1D7E5)
- ("MATHEMATICAL SANS-SERIF DIGIT FOUR" #x1D7E6)
- ("MATHEMATICAL SANS-SERIF DIGIT FIVE" #x1D7E7)
- ("MATHEMATICAL SANS-SERIF DIGIT SIX" #x1D7E8)
- ("MATHEMATICAL SANS-SERIF DIGIT SEVEN" #x1D7E9)
- ("MATHEMATICAL SANS-SERIF DIGIT EIGHT" #x1D7EA)
- ("MATHEMATICAL SANS-SERIF DIGIT NINE" #x1D7EB)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO" #x1D7EC)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT ONE" #x1D7ED)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT TWO" #x1D7EE)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT THREE" #x1D7EF)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR" #x1D7F0)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE" #x1D7F1)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT SIX" #x1D7F2)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN" #x1D7F3)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT" #x1D7F4)
- ("MATHEMATICAL SANS-SERIF BOLD DIGIT NINE" #x1D7F5)
- ("MATHEMATICAL MONOSPACE DIGIT ZERO" #x1D7F6)
- ("MATHEMATICAL MONOSPACE DIGIT ONE" #x1D7F7)
- ("MATHEMATICAL MONOSPACE DIGIT TWO" #x1D7F8)
- ("MATHEMATICAL MONOSPACE DIGIT THREE" #x1D7F9)
- ("MATHEMATICAL MONOSPACE DIGIT FOUR" #x1D7FA)
- ("MATHEMATICAL MONOSPACE DIGIT FIVE" #x1D7FB)
- ("MATHEMATICAL MONOSPACE DIGIT SIX" #x1D7FC)
- ("MATHEMATICAL MONOSPACE DIGIT SEVEN" #x1D7FD)
- ("MATHEMATICAL MONOSPACE DIGIT EIGHT" #x1D7FE)
- ("MATHEMATICAL MONOSPACE DIGIT NINE" #x1D7FF)
- ))
-
+++ /dev/null
-(nxml-define-char-name-set 'tags
- '(("LANGUAGE TAG" #xE0001)
- ("TAG SPACE" #xE0020)
- ("TAG EXCLAMATION MARK" #xE0021)
- ("TAG QUOTATION MARK" #xE0022)
- ("TAG NUMBER SIGN" #xE0023)
- ("TAG DOLLAR SIGN" #xE0024)
- ("TAG PERCENT SIGN" #xE0025)
- ("TAG AMPERSAND" #xE0026)
- ("TAG APOSTROPHE" #xE0027)
- ("TAG LEFT PARENTHESIS" #xE0028)
- ("TAG RIGHT PARENTHESIS" #xE0029)
- ("TAG ASTERISK" #xE002A)
- ("TAG PLUS SIGN" #xE002B)
- ("TAG COMMA" #xE002C)
- ("TAG HYPHEN-MINUS" #xE002D)
- ("TAG FULL STOP" #xE002E)
- ("TAG SOLIDUS" #xE002F)
- ("TAG DIGIT ZERO" #xE0030)
- ("TAG DIGIT ONE" #xE0031)
- ("TAG DIGIT TWO" #xE0032)
- ("TAG DIGIT THREE" #xE0033)
- ("TAG DIGIT FOUR" #xE0034)
- ("TAG DIGIT FIVE" #xE0035)
- ("TAG DIGIT SIX" #xE0036)
- ("TAG DIGIT SEVEN" #xE0037)
- ("TAG DIGIT EIGHT" #xE0038)
- ("TAG DIGIT NINE" #xE0039)
- ("TAG COLON" #xE003A)
- ("TAG SEMICOLON" #xE003B)
- ("TAG LESS-THAN SIGN" #xE003C)
- ("TAG EQUALS SIGN" #xE003D)
- ("TAG GREATER-THAN SIGN" #xE003E)
- ("TAG QUESTION MARK" #xE003F)
- ("TAG COMMERCIAL AT" #xE0040)
- ("TAG LATIN CAPITAL LETTER A" #xE0041)
- ("TAG LATIN CAPITAL LETTER B" #xE0042)
- ("TAG LATIN CAPITAL LETTER C" #xE0043)
- ("TAG LATIN CAPITAL LETTER D" #xE0044)
- ("TAG LATIN CAPITAL LETTER E" #xE0045)
- ("TAG LATIN CAPITAL LETTER F" #xE0046)
- ("TAG LATIN CAPITAL LETTER G" #xE0047)
- ("TAG LATIN CAPITAL LETTER H" #xE0048)
- ("TAG LATIN CAPITAL LETTER I" #xE0049)
- ("TAG LATIN CAPITAL LETTER J" #xE004A)
- ("TAG LATIN CAPITAL LETTER K" #xE004B)
- ("TAG LATIN CAPITAL LETTER L" #xE004C)
- ("TAG LATIN CAPITAL LETTER M" #xE004D)
- ("TAG LATIN CAPITAL LETTER N" #xE004E)
- ("TAG LATIN CAPITAL LETTER O" #xE004F)
- ("TAG LATIN CAPITAL LETTER P" #xE0050)
- ("TAG LATIN CAPITAL LETTER Q" #xE0051)
- ("TAG LATIN CAPITAL LETTER R" #xE0052)
- ("TAG LATIN CAPITAL LETTER S" #xE0053)
- ("TAG LATIN CAPITAL LETTER T" #xE0054)
- ("TAG LATIN CAPITAL LETTER U" #xE0055)
- ("TAG LATIN CAPITAL LETTER V" #xE0056)
- ("TAG LATIN CAPITAL LETTER W" #xE0057)
- ("TAG LATIN CAPITAL LETTER X" #xE0058)
- ("TAG LATIN CAPITAL LETTER Y" #xE0059)
- ("TAG LATIN CAPITAL LETTER Z" #xE005A)
- ("TAG LEFT SQUARE BRACKET" #xE005B)
- ("TAG REVERSE SOLIDUS" #xE005C)
- ("TAG RIGHT SQUARE BRACKET" #xE005D)
- ("TAG CIRCUMFLEX ACCENT" #xE005E)
- ("TAG LOW LINE" #xE005F)
- ("TAG GRAVE ACCENT" #xE0060)
- ("TAG LATIN SMALL LETTER A" #xE0061)
- ("TAG LATIN SMALL LETTER B" #xE0062)
- ("TAG LATIN SMALL LETTER C" #xE0063)
- ("TAG LATIN SMALL LETTER D" #xE0064)
- ("TAG LATIN SMALL LETTER E" #xE0065)
- ("TAG LATIN SMALL LETTER F" #xE0066)
- ("TAG LATIN SMALL LETTER G" #xE0067)
- ("TAG LATIN SMALL LETTER H" #xE0068)
- ("TAG LATIN SMALL LETTER I" #xE0069)
- ("TAG LATIN SMALL LETTER J" #xE006A)
- ("TAG LATIN SMALL LETTER K" #xE006B)
- ("TAG LATIN SMALL LETTER L" #xE006C)
- ("TAG LATIN SMALL LETTER M" #xE006D)
- ("TAG LATIN SMALL LETTER N" #xE006E)
- ("TAG LATIN SMALL LETTER O" #xE006F)
- ("TAG LATIN SMALL LETTER P" #xE0070)
- ("TAG LATIN SMALL LETTER Q" #xE0071)
- ("TAG LATIN SMALL LETTER R" #xE0072)
- ("TAG LATIN SMALL LETTER S" #xE0073)
- ("TAG LATIN SMALL LETTER T" #xE0074)
- ("TAG LATIN SMALL LETTER U" #xE0075)
- ("TAG LATIN SMALL LETTER V" #xE0076)
- ("TAG LATIN SMALL LETTER W" #xE0077)
- ("TAG LATIN SMALL LETTER X" #xE0078)
- ("TAG LATIN SMALL LETTER Y" #xE0079)
- ("TAG LATIN SMALL LETTER Z" #xE007A)
- ("TAG LEFT CURLY BRACKET" #xE007B)
- ("TAG VERTICAL LINE" #xE007C)
- ("TAG RIGHT CURLY BRACKET" #xE007D)
- ("TAG TILDE" #xE007E)
- ("CANCEL TAG" #xE007F)
- ))
-
check:
@echo "We don't have any tests for the lib-src/ directory yet."
+tagsfiles = $(wildcard ${srcdir}/*.[ch])
+
+.PHONY: tags
tags: TAGS
-TAGS: etags${EXEEXT}
- etags *.[ch]
+TAGS: etags${EXEEXT} ${tagsfiles}
+ ./etags ${tagsfiles}
../lib/libgnu.a: $(config_h)
$(MAKE) -C ../lib all
#include <sys/types.h>
#ifdef WINDOWSNT
#include "ntlib.h"
-#include <winsock.h>
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501 /* for getaddrinfo stuff */
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#undef getaddrinfo
+#define getaddrinfo sys_getaddrinfo
+#undef freeaddrinfo
+#define freeaddrinfo sys_freeaddrinfo
+int sys_getaddrinfo (const char * node, const char * service,
+ const struct addrinfo * hints, struct addrinfo ** res);
+void sys_freeaddrinfo (struct addrinfo * ai);
#undef SOCKET_ERROR
#define RECV(s,buf,len,flags) recv (s,buf,len,flags)
#define SEND(s,buf,len,flags) send (s,buf,len,flags)
#endif /* ! KERBEROS5 */
#endif /* KERBEROS */
-#ifndef WINDOWSNT
-#ifndef HAVE_H_ERRNO
-extern int h_errno;
-#endif
-#endif
-
static int socket_connection (char *, int);
static int pop_getline (popserver, char **);
static int sendline (popserver, const char *);
static int
socket_connection (char *host, int flags)
{
-#ifdef HAVE_GETADDRINFO
struct addrinfo *res, *it;
struct addrinfo hints;
int ret;
-#else /* !HAVE_GETADDRINFO */
- struct hostent *hostent;
-#endif
struct servent *servent;
struct sockaddr_in addr;
char found_port = 0;
}
-#ifdef HAVE_GETADDRINFO
memset (&hints, 0, sizeof (hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_CANONNAME;
}
freeaddrinfo (res);
-#else /* !HAVE_GETADDRINFO */
- do
- {
- hostent = gethostbyname (host);
- try_count++;
- if ((! hostent) && ((h_errno != TRY_AGAIN) || (try_count == 5)))
- {
- strcpy (pop_error, "Could not determine POP server's address");
- return (-1);
- }
- } while (! hostent);
-
- while (*hostent->h_addr_list)
- {
- memcpy (&addr.sin_addr, *hostent->h_addr_list, hostent->h_length);
- if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
- break;
- hostent->h_addr_list++;
- }
- connect_ok = *hostent->h_addr_list != NULL;
- if (! connect_ok)
- {
- realhost = alloca (strlen (hostent->h_name) + 1);
- strcpy (realhost, hostent->h_name);
- }
-
-#endif /* !HAVE_GETADDRINFO */
-
#define CONNECT_ERROR "Could not connect to POP server: "
if (! connect_ok)
return (0);
}
+#ifdef WINDOWSNT
+/* The following 2 functions are only available since XP, so we load
+ them dynamically and provide fallbacks. */
+
+int (WINAPI *pfn_getaddrinfo) (const char *, const char *,
+ const struct addrinfo *, struct addrinfo **);
+void (WINAPI *pfn_freeaddrinfo) (struct addrinfo *);
+
+static int
+load_ws2 (void)
+{
+ static int ws2_loaded = 0;
+
+ if (!ws2_loaded)
+ {
+ HANDLE ws2_lib = LoadLibrary ("Ws2_32.dll");
+
+ if (ws2_lib != NULL)
+ {
+ ws2_loaded = 1;
+ pfn_getaddrinfo = (void *) GetProcAddress (ws2_lib, "getaddrinfo");
+ pfn_freeaddrinfo = (void *) GetProcAddress (ws2_lib, "freeaddrinfo");
+ /* Paranoia: these two functions should go together, so if
+ one is absent, we cannot use the other. */
+ if (pfn_getaddrinfo == NULL)
+ pfn_freeaddrinfo = NULL;
+ else if (pfn_freeaddrinfo == NULL)
+ pfn_getaddrinfo = NULL;
+ }
+ }
+ if (!ws2_loaded)
+ {
+ errno = ENETDOWN;
+ return -1;
+ }
+ return 0;
+}
+
+
+int
+sys_getaddrinfo (const char *node, const char *service,
+ const struct addrinfo *hints, struct addrinfo **res)
+{
+ int rc;
+
+ if (load_ws2 () != 0)
+ {
+ errno = ENETDOWN;
+ return WSANO_RECOVERY;
+ }
+
+ if (pfn_getaddrinfo)
+ rc = pfn_getaddrinfo (node, service, hints, res);
+ else
+ {
+ int port = 0;
+ struct hostent *host_info;
+ struct gai_storage {
+ struct addrinfo addrinfo;
+ struct sockaddr_in sockaddr_in;
+ } *gai_storage;
+
+ /* We don't support any flags besides AI_CANONNAME. */
+ if (hints && (hints->ai_flags & ~(AI_CANONNAME)) != 0)
+ return WSAEINVAL;
+ /* NODE cannot be NULL, since pop.c has fallbacks for that. */
+ if (!node)
+ return WSAHOST_NOT_FOUND;
+
+ if (service)
+ {
+ const char *protocol =
+ (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp";
+ struct servent *srv = getservbyname (service, protocol);
+
+ if (srv)
+ port = srv->s_port;
+ else
+ return WSAHOST_NOT_FOUND;
+ }
+
+ gai_storage = calloc (1, sizeof *gai_storage);
+ gai_storage->sockaddr_in.sin_port = port;
+ host_info = gethostbyname (node);
+ if (host_info)
+ {
+ memcpy (&gai_storage->sockaddr_in.sin_addr,
+ host_info->h_addr, host_info->h_length);
+ gai_storage->sockaddr_in.sin_family = host_info->h_addrtype;
+ }
+ else
+ {
+ free (gai_storage);
+ return WSAHOST_NOT_FOUND;
+ }
+
+ gai_storage->addrinfo.ai_addr =
+ (struct sockaddr *)&gai_storage->sockaddr_in;
+ gai_storage->addrinfo.ai_addrlen = sizeof (gai_storage->sockaddr_in);
+ if (hints && (hints->ai_flags & AI_CANONNAME) != 0)
+ {
+ gai_storage->addrinfo.ai_canonname = strdup (host_info->h_name);
+ if (!gai_storage->addrinfo.ai_canonname)
+ {
+ free (gai_storage);
+ return WSA_NOT_ENOUGH_MEMORY;
+ }
+ }
+ gai_storage->addrinfo.ai_protocol = (hints) ? hints->ai_protocol : 0;
+ gai_storage->addrinfo.ai_socktype = (hints) ? hints->ai_socktype : 0;
+ gai_storage->addrinfo.ai_family = gai_storage->sockaddr_in.sin_family;
+ gai_storage->addrinfo.ai_next = NULL;
+
+ *res = &gai_storage->addrinfo;
+ rc = 0;
+ }
+
+ return rc;
+}
+
+void
+sys_freeaddrinfo (struct addrinfo *ai)
+{
+ if (load_ws2 () != 0)
+ {
+ errno = ENETDOWN;
+ return;
+ }
+
+ if (pfn_freeaddrinfo)
+ pfn_freeaddrinfo (ai);
+ else
+ {
+ if (ai->ai_canonname)
+ free (ai->ai_canonname);
+ free (ai);
+ }
+}
+#endif /* WINDOWSNT */
#endif /* MAIL_USE_POP */
+# Copyright 2016 Free Software Foundation, Inc.
+
+# This file is part of GNU Emacs.
+
+# GNU Emacs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU Emacs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+# GNU Emacs assumes GNU Make.
+AUTOMAKE_OPTIONS = -Wno-portability
+
BUILT_SOURCES =
CLEANFILES =
EXTRA_DIST =
libgnu_a_SOURCES += openat-die.c save-cwd.c
endif
+if HYBRID_MALLOC_LIB
+noinst_LIBRARIES += libegnu.a
+endif
+
+libegnu_a_SOURCES = $(libgnu_a_SOURCES)
+libegnu_a_LIBADD = $(patsubst %.o,e-%.o,$(libgnu_a_LIBADD))
+EXTRA_libegnu_a_SOURCES = $(EXTRA_libgnu_a_SOURCES)
+libegnu_a_SHORTNAME = e
+libegnu_a_CPPFLAGS = -Demacs
+MOSTLYCLEANFILES += libegnu.a
+
.PHONY: bootstrap-clean
bootstrap-clean: maintainer-clean
--- /dev/null
+/*
+ Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
+ Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
+ Copyright (C) 2008-2016 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+#include "filevercmp.h"
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <c-ctype.h>
+#include <limits.h>
+
+/* Match a file suffix defined by this regular expression:
+ /(\.[A-Za-z~][A-Za-z0-9~]*)*$/
+ Scan the string *STR and return a pointer to the matching suffix, or
+ NULL if not found. Upon return, *STR points to terminating NUL. */
+static const char *
+match_suffix (const char **str)
+{
+ const char *match = NULL;
+ bool read_alpha = false;
+ while (**str)
+ {
+ if (read_alpha)
+ {
+ read_alpha = false;
+ if (!c_isalpha (**str) && '~' != **str)
+ match = NULL;
+ }
+ else if ('.' == **str)
+ {
+ read_alpha = true;
+ if (!match)
+ match = *str;
+ }
+ else if (!c_isalnum (**str) && '~' != **str)
+ match = NULL;
+ (*str)++;
+ }
+ return match;
+}
+
+/* verrevcmp helper function */
+static int
+order (unsigned char c)
+{
+ if (c_isdigit (c))
+ return 0;
+ else if (c_isalpha (c))
+ return c;
+ else if (c == '~')
+ return -1;
+ else
+ return (int) c + UCHAR_MAX + 1;
+}
+
+/* slightly modified verrevcmp function from dpkg
+ S1, S2 - compared string
+ S1_LEN, S2_LEN - length of strings to be scanned
+
+ This implements the algorithm for comparison of version strings
+ specified by Debian and now widely adopted. The detailed
+ specification can be found in the Debian Policy Manual in the
+ section on the 'Version' control field. This version of the code
+ implements that from s5.6.12 of Debian Policy v3.8.0.1
+ http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version */
+static int _GL_ATTRIBUTE_PURE
+verrevcmp (const char *s1, size_t s1_len, const char *s2, size_t s2_len)
+{
+ size_t s1_pos = 0;
+ size_t s2_pos = 0;
+ while (s1_pos < s1_len || s2_pos < s2_len)
+ {
+ int first_diff = 0;
+ while ((s1_pos < s1_len && !c_isdigit (s1[s1_pos]))
+ || (s2_pos < s2_len && !c_isdigit (s2[s2_pos])))
+ {
+ int s1_c = (s1_pos == s1_len) ? 0 : order (s1[s1_pos]);
+ int s2_c = (s2_pos == s2_len) ? 0 : order (s2[s2_pos]);
+ if (s1_c != s2_c)
+ return s1_c - s2_c;
+ s1_pos++;
+ s2_pos++;
+ }
+ while (s1[s1_pos] == '0')
+ s1_pos++;
+ while (s2[s2_pos] == '0')
+ s2_pos++;
+ while (c_isdigit (s1[s1_pos]) && c_isdigit (s2[s2_pos]))
+ {
+ if (!first_diff)
+ first_diff = s1[s1_pos] - s2[s2_pos];
+ s1_pos++;
+ s2_pos++;
+ }
+ if (c_isdigit (s1[s1_pos]))
+ return 1;
+ if (c_isdigit (s2[s2_pos]))
+ return -1;
+ if (first_diff)
+ return first_diff;
+ }
+ return 0;
+}
+
+/* Compare version strings S1 and S2.
+ See filevercmp.h for function description. */
+int
+filevercmp (const char *s1, const char *s2)
+{
+ const char *s1_pos;
+ const char *s2_pos;
+ const char *s1_suffix, *s2_suffix;
+ size_t s1_len, s2_len;
+ int result;
+
+ /* easy comparison to see if strings are identical */
+ int simple_cmp = strcmp (s1, s2);
+ if (simple_cmp == 0)
+ return 0;
+
+ /* special handle for "", "." and ".." */
+ if (!*s1)
+ return -1;
+ if (!*s2)
+ return 1;
+ if (0 == strcmp (".", s1))
+ return -1;
+ if (0 == strcmp (".", s2))
+ return 1;
+ if (0 == strcmp ("..", s1))
+ return -1;
+ if (0 == strcmp ("..", s2))
+ return 1;
+
+ /* special handle for other hidden files */
+ if (*s1 == '.' && *s2 != '.')
+ return -1;
+ if (*s1 != '.' && *s2 == '.')
+ return 1;
+ if (*s1 == '.' && *s2 == '.')
+ {
+ s1++;
+ s2++;
+ }
+
+ /* "cut" file suffixes */
+ s1_pos = s1;
+ s2_pos = s2;
+ s1_suffix = match_suffix (&s1_pos);
+ s2_suffix = match_suffix (&s2_pos);
+ s1_len = (s1_suffix ? s1_suffix : s1_pos) - s1;
+ s2_len = (s2_suffix ? s2_suffix : s2_pos) - s2;
+
+ /* restore file suffixes if strings are identical after "cut" */
+ if ((s1_suffix || s2_suffix) && (s1_len == s2_len)
+ && 0 == strncmp (s1, s2, s1_len))
+ {
+ s1_len = s1_pos - s1;
+ s2_len = s2_pos - s2;
+ }
+
+ result = verrevcmp (s1, s1_len, s2, s2_len);
+ return result == 0 ? simple_cmp : result;
+}
--- /dev/null
+/*
+ Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
+ Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
+ Copyright (C) 2008-2016 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FILEVERCMP_H
+#define FILEVERCMP_H
+
+/* Compare version strings:
+
+ This function compares strings S1 and S2:
+ 1) By PREFIX in the same way as strcmp.
+ 2) Then by VERSION (most similarly to version compare of Debian's dpkg).
+ Leading zeros in version numbers are ignored.
+ 3) If both (PREFIX and VERSION) are equal, strcmp function is used for
+ comparison. So this function can return 0 if (and only if) strings S1
+ and S2 are identical.
+
+ It returns number >0 for S1 > S2, 0 for S1 == S2 and number <0 for S1 < S2.
+
+ This function compares strings, in a way that if VER1 and VER2 are version
+ numbers and PREFIX and SUFFIX (SUFFIX defined as (\.[A-Za-z~][A-Za-z0-9~]*)*)
+ are strings then VER1 < VER2 implies filevercmp (PREFIX VER1 SUFFIX,
+ PREFIX VER2 SUFFIX) < 0.
+
+ This function is intended to be a replacement for strverscmp. */
+int filevercmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE;
+
+#endif /* FILEVERCMP_H */
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
+# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
MOSTLYCLEANFILES += core *.stackdump
## end gnulib module filemode
+## begin gnulib module filevercmp
+
+libgnu_a_SOURCES += filevercmp.c
+
+EXTRA_DIST += filevercmp.h
+
+## end gnulib module filevercmp
+
## begin gnulib module fpending
#define _GL_INTPROPS_H
#include <limits.h>
+#include <verify.h>
/* Return a value with the common real type of E and V and the value of V. */
#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
an integer. */
#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
-/* True if negative values of the signed integer type T use two's
- complement, ones' complement, or signed magnitude representation,
- respectively. Much GNU code assumes two's complement, but some
- people like to be portable to all possible C hosts. */
-#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
-
-/* True if the signed integer expression E uses two's complement. */
-#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1)
-
/* True if the real type T is signed. */
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
#define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
-/* Minimum and maximum values for integer types and expressions. These
- macros have undefined behavior if T is signed and has padding bits.
- If this is a problem for you, please let us know how to fix it for
- your host. */
+/* Minimum and maximum values for integer types and expressions. */
/* The maximum and minimum values for the integer type T. */
-#define TYPE_MINIMUM(t) \
- ((t) (! TYPE_SIGNED (t) \
- ? (t) 0 \
- : TYPE_SIGNED_MAGNITUDE (t) \
- ? ~ (t) 0 \
- : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
#define TYPE_MAXIMUM(t) \
((t) (! TYPE_SIGNED (t) \
? (t) -1 \
after integer promotion. E should not have side effects. */
#define _GL_INT_MINIMUM(e) \
(EXPR_SIGNED (e) \
- ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \
+ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \
: _GL_INT_CONVERT (e, 0))
#define _GL_INT_MAXIMUM(e) \
(EXPR_SIGNED (e) \
#define _GL_SIGNED_INT_MAXIMUM(e) \
(((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
+/* This include file assumes that signed types are two's complement without
+ padding bits; the above macros have undefined behavior otherwise.
+ If this is a problem for you, please let us know how to fix it for your host.
+ As a sanity check, test the assumption for some signed types that
+ <limits.h> bounds. */
+verify (TYPE_MINIMUM (signed char) == SCHAR_MIN);
+verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX);
+verify (TYPE_MINIMUM (short int) == SHRT_MIN);
+verify (TYPE_MAXIMUM (short int) == SHRT_MAX);
+verify (TYPE_MINIMUM (int) == INT_MIN);
+verify (TYPE_MAXIMUM (int) == INT_MAX);
+verify (TYPE_MINIMUM (long int) == LONG_MIN);
+verify (TYPE_MAXIMUM (long int) == LONG_MAX);
+#ifdef LLONG_MAX
+verify (TYPE_MINIMUM (long long int) == LLONG_MIN);
+verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+#endif
-/* Return 1 if the __typeof__ keyword works. This could be done by
+/* Does the __typeof__ keyword work? This could be done by
'configure', but for now it's easier to do it by hand. */
#if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
|| (0x5110 <= __SUNPRO_C && !__STDC__))
+/* mktime variant that also uses an offset guess
+
+ Copyright 2016 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 3 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program; if not, see
+ <http://www.gnu.org/licenses/>. */
+
#include <time.h>
+
+/* mktime_offset_t is a signed type wide enough to hold a UTC offset
+ in seconds, and used as part of the type of the offset-guess
+ argument to mktime_internal. Use time_t on platforms where time_t
+ is signed, to be compatible with platforms like BeOS that export
+ this implementation detail of mktime. On platforms where time_t is
+ unsigned, GNU and POSIX code can assume 'int' is at least 32 bits
+ which is wide enough for a UTC offset. */
+
+#if TIME_T_IS_SIGNED
+typedef time_t mktime_offset_t;
+#else
+typedef int mktime_offset_t;
+#endif
+
time_t mktime_internal (struct tm *,
struct tm * (*) (time_t const *, struct tm *),
- time_t *);
+ mktime_offset_t *);
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-/* Define this to have a standalone program to test this implementation of
+/* Define this to 1 to have a standalone program to test this implementation of
mktime. */
-/* #define DEBUG_MKTIME 1 */
+#ifndef DEBUG_MKTIME
+# define DEBUG_MKTIME 0
+#endif
-#ifndef _LIBC
+#if !defined _LIBC && !DEBUG_MKTIME
# include <config.h>
#endif
#include <time.h>
#include <limits.h>
+#include <stdbool.h>
-#include <string.h> /* For the real memcpy prototype. */
+#include <intprops.h>
+#include <verify.h>
-#if defined DEBUG_MKTIME && DEBUG_MKTIME
+#if DEBUG_MKTIME
# include <stdio.h>
# include <stdlib.h>
+# include <string.h>
/* Make it work even if the system's libc has its own mktime routine. */
# undef mktime
# define mktime my_mktime
-#endif /* DEBUG_MKTIME */
-
-/* Some of the code in this file assumes that signed integer overflow
- silently wraps around. This assumption can't easily be programmed
- around, nor can it be checked for portably at compile-time or
- easily eliminated at run-time.
-
- Define WRAPV to 1 if the assumption is valid and if
- #pragma GCC optimize ("wrapv")
- does not trigger GCC bug 51793
- <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51793>.
- Otherwise, define it to 0; this forces the use of slower code that,
- while not guaranteed by the C Standard, works on all production
- platforms that we know about. */
-#ifndef WRAPV
-# if (((__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__) \
- && defined __GLIBC__)
-# pragma GCC optimize ("wrapv")
-# define WRAPV 1
-# else
-# define WRAPV 0
-# endif
#endif
-/* Verify a requirement at compile-time (unlike assert, which is runtime). */
-#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
+/* A signed type that can represent an integer number of years
+ multiplied by three times the number of seconds in a year. It is
+ needed when converting a tm_year value times the number of seconds
+ in a year. The factor of three comes because these products need
+ to be subtracted from each other, and sometimes with an offset
+ added to them, without worrying about overflow.
-/* A signed type that is at least one bit wider than int. */
-#if INT_MAX <= LONG_MAX / 2
+ Much of the code uses long_int to represent time_t values, to
+ lessen the hassle of dealing with platforms where time_t is
+ unsigned, and because long_int should suffice to represent all
+ time_t values that mktime can generate even on platforms where
+ time_t is excessively wide. */
+
+#if INT_MAX <= LONG_MAX / 3 / 366 / 24 / 60 / 60
typedef long int long_int;
#else
typedef long long int long_int;
#endif
-verify (long_int_is_wide_enough, INT_MAX == INT_MAX * (long_int) 2 / 2);
+verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 3 / 366 / 24 / 60 / 60);
/* Shift A right by B bits portably, by dividing A by 2**B and
- truncating towards minus infinity. A and B should be free of side
- effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
- INT_BITS is the number of useful bits in an int. GNU code can
- assume that INT_BITS is at least 32.
+ truncating towards minus infinity. B should be in the range 0 <= B
+ <= LONG_INT_BITS - 2, where LONG_INT_BITS is the number of useful
+ bits in a long_int. LONG_INT_BITS is at least 32.
ISO C99 says that A >> B is implementation-defined if A < 0. Some
implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
right in the usual way when A < 0, so SHR falls back on division if
ordinary A >> B doesn't seem to be the usual signed shift. */
-#define SHR(a, b) \
- ((-1 >> 1 == -1 \
- && (long_int) -1 >> 1 == -1 \
- && ((time_t) -1 >> 1 == -1 || ! TYPE_SIGNED (time_t))) \
- ? (a) >> (b) \
- : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
-
-/* The extra casts in the following macros work around compiler bugs,
- e.g., in Cray C 5.0.3.0. */
-
-/* True if the arithmetic type T is an integer type. bool counts as
- an integer. */
-#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
-
-/* True if negative values of the signed integer type T use two's
- complement, or if T is an unsigned integer type. */
-#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-
-/* True if the arithmetic type T is signed. */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-
-/* The maximum and minimum values for the integer type T. These
- macros have undefined behavior if T is signed and has padding bits.
- If this is a problem for you, please let us know how to fix it for
- your host. */
-#define TYPE_MINIMUM(t) \
- ((t) (! TYPE_SIGNED (t) \
- ? (t) 0 \
- : ~ TYPE_MAXIMUM (t)))
-#define TYPE_MAXIMUM(t) \
- ((t) (! TYPE_SIGNED (t) \
- ? (t) -1 \
- : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
-
-#ifndef TIME_T_MIN
-# define TIME_T_MIN TYPE_MINIMUM (time_t)
-#endif
-#ifndef TIME_T_MAX
-# define TIME_T_MAX TYPE_MAXIMUM (time_t)
-#endif
-#define TIME_T_MIDPOINT (SHR (TIME_T_MIN + TIME_T_MAX, 1) + 1)
-verify (time_t_is_integer, TYPE_IS_INTEGER (time_t));
-verify (twos_complement_arithmetic,
- (TYPE_TWOS_COMPLEMENT (int)
- && TYPE_TWOS_COMPLEMENT (long_int)
- && TYPE_TWOS_COMPLEMENT (time_t)));
+static long_int
+shr (long_int a, int b)
+{
+ long_int one = 1;
+ return (-one >> 1 == -1
+ ? a >> b
+ : a / (one << b) - (a % (one << b) < 0));
+}
+
+/* Bounds for the intersection of time_t and long_int. */
+
+static long_int const mktime_min
+ = ((TYPE_SIGNED (time_t) && TYPE_MINIMUM (time_t) < TYPE_MINIMUM (long_int))
+ ? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (time_t));
+static long_int const mktime_max
+ = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (time_t)
+ ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (time_t));
+
+verify (TYPE_IS_INTEGER (time_t));
#define EPOCH_YEAR 1970
#define TM_YEAR_BASE 1900
-verify (base_year_is_a_multiple_of_100, TM_YEAR_BASE % 100 == 0);
+verify (TM_YEAR_BASE % 100 == 0);
-/* Return 1 if YEAR + TM_YEAR_BASE is a leap year. */
-static int
+/* Is YEAR + TM_YEAR_BASE a leap year? */
+static bool
leapyear (long_int year)
{
/* Don't add YEAR to TM_YEAR_BASE, as that might overflow.
};
-#ifndef _LIBC
+#ifdef _LIBC
+typedef time_t mktime_offset_t;
+#else
/* Portable standalone applications should supply a <time.h> that
declares a POSIX-compliant localtime_r, for the benefit of older
implementations that lack localtime_r or have a nonstandard one.
# include "mktime-internal.h"
#endif
-/* Return 1 if the values A and B differ according to the rules for
- tm_isdst: A and B differ if one is zero and the other positive. */
-static int
+/* Do the values A and B differ according to the rules for tm_isdst?
+ A and B differ if one is zero and the other positive. */
+static bool
isdst_differ (int a, int b)
{
return (!a != !b) && (0 <= a) && (0 <= b);
were not adjusted between the time stamps.
The YEAR values uses the same numbering as TP->tm_year. Values
- need not be in the usual range. However, YEAR1 must not be less
- than 2 * INT_MIN or greater than 2 * INT_MAX.
+ need not be in the usual range. However, YEAR1 must not overflow
+ when multiplied by three times the number of seconds in a year, and
+ likewise for YDAY1 and three times the number of seconds in a day. */
- The result may overflow. It is the caller's responsibility to
- detect overflow. */
-
-static time_t
+static long_int
ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1,
int year0, int yday0, int hour0, int min0, int sec0)
{
- verify (C99_integer_division, -1 / 2 == 0);
+ verify (-1 / 2 == 0);
/* Compute intervening leap days correctly even if year is negative.
Take care to avoid integer overflow here. */
- int a4 = SHR (year1, 2) + SHR (TM_YEAR_BASE, 2) - ! (year1 & 3);
- int b4 = SHR (year0, 2) + SHR (TM_YEAR_BASE, 2) - ! (year0 & 3);
+ int a4 = shr (year1, 2) + shr (TM_YEAR_BASE, 2) - ! (year1 & 3);
+ int b4 = shr (year0, 2) + shr (TM_YEAR_BASE, 2) - ! (year0 & 3);
int a100 = a4 / 25 - (a4 % 25 < 0);
int b100 = b4 / 25 - (b4 % 25 < 0);
- int a400 = SHR (a100, 2);
- int b400 = SHR (b100, 2);
+ int a400 = shr (a100, 2);
+ int b400 = shr (b100, 2);
int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
- /* Compute the desired time in time_t precision. Overflow might
- occur here. */
- time_t tyear1 = year1;
- time_t years = tyear1 - year0;
- time_t days = 365 * years + yday1 - yday0 + intervening_leap_days;
- time_t hours = 24 * days + hour1 - hour0;
- time_t minutes = 60 * hours + min1 - min0;
- time_t seconds = 60 * minutes + sec1 - sec0;
+ /* Compute the desired time without overflowing. */
+ long_int years = year1 - year0;
+ long_int days = 365 * years + yday1 - yday0 + intervening_leap_days;
+ long_int hours = 24 * days + hour1 - hour0;
+ long_int minutes = 60 * hours + min1 - min0;
+ long_int seconds = 60 * minutes + sec1 - sec0;
return seconds;
}
-/* Return the average of A and B, even if A + B would overflow. */
-static time_t
-time_t_avg (time_t a, time_t b)
+/* Return the average of A and B, even if A + B would overflow.
+ Round toward positive infinity. */
+static long_int
+long_int_avg (long_int a, long_int b)
{
- return SHR (a, 1) + SHR (b, 1) + (a & b & 1);
-}
-
-/* Return 1 if A + B does not overflow. If time_t is unsigned and if
- B's top bit is set, assume that the sum represents A - -B, and
- return 1 if the subtraction does not wrap around. */
-static int
-time_t_add_ok (time_t a, time_t b)
-{
- if (! TYPE_SIGNED (time_t))
- {
- time_t sum = a + b;
- return (sum < a) == (TIME_T_MIDPOINT <= b);
- }
- else if (WRAPV)
- {
- time_t sum = a + b;
- return (sum < a) == (b < 0);
- }
- else
- {
- time_t avg = time_t_avg (a, b);
- return TIME_T_MIN / 2 <= avg && avg <= TIME_T_MAX / 2;
- }
-}
-
-/* Return 1 if A + B does not overflow. */
-static int
-time_t_int_add_ok (time_t a, int b)
-{
- verify (int_no_wider_than_time_t, INT_MAX <= TIME_T_MAX);
- if (WRAPV)
- {
- time_t sum = a + b;
- return (sum < a) == (b < 0);
- }
- else
- {
- int a_odd = a & 1;
- time_t avg = SHR (a, 1) + (SHR (b, 1) + (a_odd & b));
- return TIME_T_MIN / 2 <= avg && avg <= TIME_T_MAX / 2;
- }
+ return shr (a, 1) + shr (b, 1) + ((a | b) & 1);
}
/* Return a time_t value corresponding to (YEAR-YDAY HOUR:MIN:SEC),
- assuming that *T corresponds to *TP and that no clock adjustments
+ assuming that T corresponds to *TP and that no clock adjustments
occurred between *TP and the desired time.
- If TP is null, return a value not equal to *T; this avoids false matches.
- If overflow occurs, yield the minimal or maximal value, except do not
- yield a value equal to *T. */
-static time_t
+ Although T and the returned value are of type long_int,
+ they represent time_t values and must be in time_t range.
+ If TP is null, return a value not equal to T; this avoids false matches.
+ YEAR and YDAY must not be so large that multiplying them by three times the
+ number of seconds in a year (or day, respectively) would overflow long_int.
+ If the returned value would be out of range, yield the minimal or
+ maximal in-range value, except do not yield a value equal to T. */
+static long_int
guess_time_tm (long_int year, long_int yday, int hour, int min, int sec,
- const time_t *t, const struct tm *tp)
+ long_int t, const struct tm *tp)
{
if (tp)
{
- time_t d = ydhms_diff (year, yday, hour, min, sec,
- tp->tm_year, tp->tm_yday,
- tp->tm_hour, tp->tm_min, tp->tm_sec);
- if (time_t_add_ok (*t, d))
- return *t + d;
+ long_int result;
+ long_int d = ydhms_diff (year, yday, hour, min, sec,
+ tp->tm_year, tp->tm_yday,
+ tp->tm_hour, tp->tm_min, tp->tm_sec);
+ if (! INT_ADD_WRAPV (t, d, &result))
+ return result;
}
/* Overflow occurred one way or another. Return the nearest result
if the actual difference is nonzero, as that would cause a false
match; and don't oscillate between two values, as that would
confuse the spring-forward gap detector. */
- return (*t < TIME_T_MIDPOINT
- ? (*t <= TIME_T_MIN + 1 ? *t + 1 : TIME_T_MIN)
- : (TIME_T_MAX - 1 <= *t ? *t - 1 : TIME_T_MAX));
+ return (t < long_int_avg (mktime_min, mktime_max)
+ ? (t <= mktime_min + 1 ? t + 1 : mktime_min)
+ : (mktime_max - 1 <= t ? t - 1 : mktime_max));
+}
+
+/* Use CONVERT to convert T to a struct tm value in *TM. T must be in
+ range for time_t. Return TM if successfull, NULL if T is out of
+ range for CONVERT. */
+static struct tm *
+convert_time (struct tm *(*convert) (const time_t *, struct tm *),
+ long_int t, struct tm *tm)
+{
+ time_t x = t;
+ return convert (&x, tm);
}
/* Use CONVERT to convert *T to a broken down time in *TP.
If *T is out of range for conversion, adjust it so that
- it is the nearest in-range value and then convert that. */
+ it is the nearest in-range value and then convert that.
+ A value is in range if it fits in both time_t and long_int. */
static struct tm *
ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
- time_t *t, struct tm *tp)
+ long_int *t, struct tm *tp)
{
- struct tm *r = convert (t, tp);
+ struct tm *r;
+ if (*t < mktime_min)
+ *t = mktime_min;
+ else if (mktime_max < *t)
+ *t = mktime_max;
+ r = convert_time (convert, *t, tp);
if (!r && *t)
{
- time_t bad = *t;
- time_t ok = 0;
+ long_int bad = *t;
+ long_int ok = 0;
- /* BAD is a known unconvertible time_t, and OK is a known good one.
+ /* BAD is a known unconvertible value, and OK is a known good one.
Use binary search to narrow the range between BAD and OK until
they differ by 1. */
- while (bad != ok + (bad < 0 ? -1 : 1))
+ while (true)
{
- time_t mid = *t = time_t_avg (ok, bad);
- r = convert (t, tp);
+ long_int mid = long_int_avg (ok, bad);
+ if (mid != ok && mid != bad)
+ break;
+ r = convert_time (convert, mid, tp);
if (r)
ok = mid;
else
{
/* The last conversion attempt failed;
revert to the most recent successful attempt. */
- *t = ok;
- r = convert (t, tp);
+ r = convert_time (convert, ok, tp);
}
}
return r;
}
-
/* Convert *TP to a time_t value, inverting
the monotonic and mostly-unit-linear conversion function CONVERT.
Use *OFFSET to keep track of a guess at the offset of the result,
time_t
__mktime_internal (struct tm *tp,
struct tm *(*convert) (const time_t *, struct tm *),
- time_t *offset)
+ mktime_offset_t *offset)
{
- time_t t, gt, t0, t1, t2;
+ long_int t, gt, t0, t1, t2, dt;
struct tm tm;
/* The maximum number of probes (calls to CONVERT) should be enough
long_int year = lyear_requested + mon_years;
/* The other values need not be in range:
- the remaining code handles minor overflows correctly,
- assuming int and time_t arithmetic wraps around.
- Major overflows are caught at the end. */
+ the remaining code handles overflows correctly. */
/* Calculate day of year from year, month, and day of month.
The result need not be in range. */
long_int lmday = mday;
long_int yday = mon_yday + lmday;
- time_t guessed_offset = *offset;
+ int negative_offset_guess;
int sec_requested = sec;
/* Invert CONVERT by probing. First assume the same offset as last
time. */
+ INT_SUBTRACT_WRAPV (0, *offset, &negative_offset_guess);
t0 = ydhms_diff (year, yday, hour, min, sec,
- EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, - guessed_offset);
-
- if (TIME_T_MAX / INT_MAX / 366 / 24 / 60 / 60 < 3)
- {
- /* time_t isn't large enough to rule out overflows, so check
- for major overflows. A gross check suffices, since if t0
- has overflowed, it is off by a multiple of TIME_T_MAX -
- TIME_T_MIN + 1. So ignore any component of the difference
- that is bounded by a small value. */
-
- /* Approximate log base 2 of the number of time units per
- biennium. A biennium is 2 years; use this unit instead of
- years to avoid integer overflow. For example, 2 average
- Gregorian years are 2 * 365.2425 * 24 * 60 * 60 seconds,
- which is 63113904 seconds, and rint (log2 (63113904)) is
- 26. */
- int ALOG2_SECONDS_PER_BIENNIUM = 26;
- int ALOG2_MINUTES_PER_BIENNIUM = 20;
- int ALOG2_HOURS_PER_BIENNIUM = 14;
- int ALOG2_DAYS_PER_BIENNIUM = 10;
- int LOG2_YEARS_PER_BIENNIUM = 1;
-
- int approx_requested_biennia =
- (SHR (year_requested, LOG2_YEARS_PER_BIENNIUM)
- - SHR (EPOCH_YEAR - TM_YEAR_BASE, LOG2_YEARS_PER_BIENNIUM)
- + SHR (mday, ALOG2_DAYS_PER_BIENNIUM)
- + SHR (hour, ALOG2_HOURS_PER_BIENNIUM)
- + SHR (min, ALOG2_MINUTES_PER_BIENNIUM)
- + (LEAP_SECONDS_POSSIBLE
- ? 0
- : SHR (sec, ALOG2_SECONDS_PER_BIENNIUM)));
-
- int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM);
- int diff = approx_biennia - approx_requested_biennia;
- int approx_abs_diff = diff < 0 ? -1 - diff : diff;
-
- /* IRIX 4.0.5 cc miscalculates TIME_T_MIN / 3: it erroneously
- gives a positive value of 715827882. Setting a variable
- first then doing math on it seems to work.
- (ghazi@caip.rutgers.edu) */
- time_t time_t_max = TIME_T_MAX;
- time_t time_t_min = TIME_T_MIN;
- time_t overflow_threshold =
- (time_t_max / 3 - time_t_min / 3) >> ALOG2_SECONDS_PER_BIENNIUM;
-
- if (overflow_threshold < approx_abs_diff)
- {
- /* Overflow occurred. Try repairing it; this might work if
- the time zone offset is enough to undo the overflow. */
- time_t repaired_t0 = -1 - t0;
- approx_biennia = SHR (repaired_t0, ALOG2_SECONDS_PER_BIENNIUM);
- diff = approx_biennia - approx_requested_biennia;
- approx_abs_diff = diff < 0 ? -1 - diff : diff;
- if (overflow_threshold < approx_abs_diff)
- return -1;
- guessed_offset += repaired_t0 - t0;
- t0 = repaired_t0;
- }
- }
+ EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, negative_offset_guess);
/* Repeatedly use the error to improve the guess. */
for (t = t1 = t2 = t0, dst2 = 0;
- (gt = guess_time_tm (year, yday, hour, min, sec, &t,
+ (gt = guess_time_tm (year, yday, hour, min, sec, t,
ranged_convert (convert, &t, &tm)),
t != gt);
t1 = t2, t2 = t, t = gt, dst2 = tm.tm_isdst != 0)
for (delta = stride; delta < delta_bound; delta += stride)
for (direction = -1; direction <= 1; direction += 2)
- if (time_t_int_add_ok (t, delta * direction))
- {
- time_t ot = t + delta * direction;
- struct tm otm;
- ranged_convert (convert, &ot, &otm);
- if (! isdst_differ (isdst, otm.tm_isdst))
- {
- /* We found the desired tm_isdst.
- Extrapolate back to the desired time. */
- t = guess_time_tm (year, yday, hour, min, sec, &ot, &otm);
- ranged_convert (convert, &t, &tm);
- goto offset_found;
- }
- }
+ {
+ long_int ot;
+ if (! INT_ADD_WRAPV (t, delta * direction, &ot))
+ {
+ struct tm otm;
+ ranged_convert (convert, &ot, &otm);
+ if (! isdst_differ (isdst, otm.tm_isdst))
+ {
+ /* We found the desired tm_isdst.
+ Extrapolate back to the desired time. */
+ t = guess_time_tm (year, yday, hour, min, sec, ot, &otm);
+ ranged_convert (convert, &t, &tm);
+ goto offset_found;
+ }
+ }
+ }
}
offset_found:
- *offset = guessed_offset + t - t0;
+ /* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS.
+ This is just a heuristic to speed up the next mktime call, and
+ correctness is unaffected if integer overflow occurs here. */
+ INT_SUBTRACT_WRAPV (t, t0, &dt);
+ INT_SUBTRACT_WRAPV (dt, negative_offset_guess, offset);
if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec)
{
/* Adjust time to reflect the tm_sec requested, not the normalized value.
Also, repair any damage from a false match due to a leap second. */
- int sec_adjustment = (sec == 0 && tm.tm_sec == 60) - sec;
- if (! time_t_int_add_ok (t, sec_requested))
+ long_int sec_adjustment = sec == 0 && tm.tm_sec == 60;
+ sec_adjustment -= sec;
+ sec_adjustment += sec_requested;
+ if (INT_ADD_WRAPV (t, sec_adjustment, &t)
+ || ! (mktime_min <= t && t <= mktime_max)
+ || ! convert_time (convert, t, &tm))
return -1;
- t1 = t + sec_requested;
- if (! time_t_int_add_ok (t1, sec_adjustment))
- return -1;
- t2 = t1 + sec_adjustment;
- if (! convert (&t2, &tm))
- return -1;
- t = t2;
}
*tp = tm;
}
-/* FIXME: This should use a signed type wide enough to hold any UTC
- offset in seconds. 'int' should be good enough for GNU code. We
- can't fix this unilaterally though, as other modules invoke
- __mktime_internal. */
-static time_t localtime_offset;
+static mktime_offset_t localtime_offset;
/* Convert *TP to a time_t value. */
time_t
libc_hidden_weak (timelocal)
#endif
\f
-#if defined DEBUG_MKTIME && DEBUG_MKTIME
+#if DEBUG_MKTIME
static int
not_equal_tm (const struct tm *a, const struct tm *b)
time_t tk, tl, tl1;
char trailer;
+ /* Sanity check, plus call tzset. */
+ tl = 0;
+ if (! localtime (&tl))
+ {
+ printf ("localtime (0) fails\n");
+ status = 1;
+ }
+
if ((argc == 3 || argc == 4)
&& (sscanf (argv[1], "%d-%d-%d%c",
&tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer)
tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]);
tmk = tm;
tl = mktime (&tmk);
- lt = localtime (&tl);
- if (lt)
- {
- tml = *lt;
- lt = &tml;
- }
+ lt = localtime_r (&tl, &tml);
printf ("mktime returns %ld == ", (long int) tl);
print_tm (&tmk);
printf ("\n");
if (argc == 4)
for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1)
{
- lt = localtime (&tl);
+ lt = localtime_r (&tl, &tml);
if (lt)
{
- tmk = tml = *lt;
+ tmk = tml;
tk = mktime (&tmk);
status |= check_result (tk, tmk, tl, &tml);
}
else
{
- printf ("localtime (%ld) yields 0\n", (long int) tl);
+ printf ("localtime_r (%ld) yields 0\n", (long int) tl);
status = 1;
}
tl1 = tl + by;
for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1)
{
/* Null benchmark. */
- lt = localtime (&tl);
+ lt = localtime_r (&tl, &tml);
if (lt)
{
- tmk = tml = *lt;
+ tmk = tml;
tk = tl;
status |= check_result (tk, tmk, tl, &tml);
}
else
{
- printf ("localtime (%ld) yields 0\n", (long int) tl);
+ printf ("localtime_r (%ld) yields 0\n", (long int) tl);
status = 1;
}
tl1 = tl + by;
/* The extra casts in the following macros work around compiler bugs,
e.g., in Cray C 5.0.3.0. */
-/* True if negative values of the signed integer type T use two's
- complement, ones' complement, or signed magnitude representation,
- respectively. Much GNU code assumes two's complement, but some
- people like to be portable to all possible C hosts. */
-# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
-
/* True if the arithmetic type T is signed. */
# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-/* The maximum and minimum values for the integer type T. These
- macros have undefined behavior if T is signed and has padding bits.
- If this is a problem for you, please let us know how to fix it for
- your host. */
-# define TYPE_MINIMUM(t) \
- ((t) (! TYPE_SIGNED (t) \
- ? (t) 0 \
- : TYPE_SIGNED_MAGNITUDE (t) \
- ? ~ (t) 0 \
- : ~ TYPE_MAXIMUM (t)))
-# define TYPE_MAXIMUM(t) \
- ((t) (! TYPE_SIGNED (t) \
- ? (t) -1 \
+/* Minimum and maximum values for integer types.
+ These macros have undefined behavior for signed types that either
+ have padding bits or do not use two's complement. If this is a
+ problem for you, please let us know how to fix it for your host. */
+
+/* The maximum and minimum values for the integer type T. */
+# define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
+# define TYPE_MAXIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) -1 \
: ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
# ifndef ULLONG_MAX
#include <time.h>
-#ifndef _LIBC
+#ifdef _LIBC
+typedef time_t mktime_offset_t;
+#else
# undef __gmtime_r
# define __gmtime_r gmtime_r
# define __mktime_internal mktime_internal
time_t
timegm (struct tm *tmp)
{
- static time_t gmtime_offset;
+ static mktime_offset_t gmtime_offset;
tmp->tm_isdst = 0;
return __mktime_internal (tmp, __gmtime_r, &gmtime_offset);
}
2015-03-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
* net/shr.el (shr-insert): Remove soft hyphens.
- (shr-insert): Also remove soft hypens from non-folded text.
+ (shr-insert): Also remove soft hyphens from non-folded text.
2015-02-28 Eli Zaretskii <eliz@gnu.org>
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
--eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$@")))' \
-f batch-update-autoloads ${SUBDIRS_ALMOST}
+# autoloads only runs when loaddefs.el is nonexistent, although it
+# generates a number of different files. Provide a force option to enable
+# regeneration of all these files.
+autoloads-force .PHONY:
+ rm loaddefs.el
+ $(MAKE) autoloads
+
# This is required by the bootstrap-emacs target in ../src/Makefile, so
# we know that if we have an emacs executable, we also have a subdirs.el.
$(lisp)/subdirs.el:
"$(top_srcdir)/doc/misc/gnus-news.texi" \
"$(top_srcdir)/etc/GNUS-NEWS"
-ETAGS = ../lib-src/etags
+FORCE:
+.PHONY: FORCE
+
+tagsfiles = $(shell find ${srcdir} -name '*.el')
+tagsfiles := $(filter-out ${srcdir}/%loaddefs.el,${tagsfiles})
+tagsfiles := $(filter-out ${srcdir}/ldefs-boot.el,${tagsfiles})
+tagsfiles := $(filter-out ${srcdir}/eshell/esh-groups.el,${tagsfiles})
+
+ETAGS = ../lib-src/etags${EXEEXT}
-lisptagsfiles1 = $(srcdir)/*.el
-lisptagsfiles2 = $(srcdir)/*/*.el
-lisptagsfiles3 = $(srcdir)/*/*/*.el
-lisptagsfiles4 = $(srcdir)/*/*/*/*.el
+${ETAGS}: FORCE
+ ${MAKE} -C ../lib-src $(notdir $@)
-## The ls | sed | xargs is to stop the command line getting too long
+## The use of xargs is to stop the command line getting too long
## on MS Windows, when the MSYS Bash passes it to a MinGW compiled
## etags. It might be better to use find in a similar way to
## compile-main. But maybe this is not even necessary any more now
## that this uses relative filenames.
-TAGS: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4)
+TAGS: ${ETAGS} ${tagsfiles}
rm -f $@
touch $@
- ls $(lisptagsfiles1) $(lisptagsfiles2) \
- $(lisptagsfiles3) $(lisptagsfiles4) | \
- sed -e '/loaddefs/d; /\/ldefs-boot/d; /esh-groups\.el/d' | \
- xargs $(XARGS_LIMIT) "$(ETAGS)" -a -o $@
+ ls ${tagsfiles} | xargs $(XARGS_LIMIT) "${ETAGS}" -a -o $@
# The src/Makefile.in has its own set of dependencies and when they decide
CAL_DIR = $(lisp)/calendar
## Those files that may contain internal calendar autoload cookies.
CAL_SRC = $(addprefix ${CAL_DIR}/,diary-lib.el holidays.el lunar.el solar.el)
-CAL_SRC := $(sort ${CAL_SRC} $(wildcard ${CAL_DIR}/cal*.el))
+CAL_SRC := $(sort ${CAL_SRC} $(wildcard ${CAL_DIR}/cal-*.el))
CAL_SRC := $(filter-out ${CAL_DIR}/cal-loaddefs.el,${CAL_SRC})
$(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
;;; Code:
(eval-when-compile (require 'cl-lib))
+(require 'obarray)
(defgroup abbrev-mode nil
"Word abbreviations mode."
"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)
(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)))
(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
(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)
(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.
(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
(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)))
;; 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))))))
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.
(eq '- current-prefix-arg)))))
(css-declaration
- (regexp . "^\\s-*\\w+:\\(\\s-*\\).*;")
+ (regexp . "^\\s-*\\(?:\\w-?\\)+:\\(\\s-*\\).*;")
(group . (1))
(modes . '(css-mode html-mode))))
"A list describing all of the available alignment rules.
(defvar align-highlight-overlays nil
"The current overlays highlighting the text matched by a rule.")
+(defvar align-regexp-history nil
+ "Input history for the full user-entered regex in `align-regexp'")
+
;; Sample extension rule set, for vhdl-mode. This should properly be
;; in vhdl-mode.el itself.
(list (region-beginning) (region-end))
(if current-prefix-arg
(list (read-string "Complex align using regexp: "
- "\\(\\s-*\\)")
+ "\\(\\s-*\\)" 'align-regexp-history)
(string-to-number
(read-string
"Parenthesis group to modify (justify if negative): " "1"))
symbol)))))
(defun apropos-documentation-internal (doc)
- (if (consp doc)
- (apropos-documentation-check-elc-file (car doc))
- (if (and doc
- (string-match apropos-all-words-regexp doc)
- (apropos-true-hit-doc doc))
- (when apropos-match-face
- (setq doc (substitute-command-keys (copy-sequence doc)))
- (if (or (string-match apropos-pattern-quoted doc)
- (string-match apropos-all-words-regexp doc))
- (put-text-property (match-beginning 0)
- (match-end 0)
- 'face apropos-match-face doc))
- doc))))
+ (cond
+ ((consp doc)
+ (apropos-documentation-check-elc-file (car doc)))
+ ((and doc
+ ;; Sanity check in case bad data sneaked into the
+ ;; documentation slot.
+ (stringp doc)
+ (string-match apropos-all-words-regexp doc)
+ (apropos-true-hit-doc doc))
+ (when apropos-match-face
+ (setq doc (substitute-command-keys (copy-sequence doc)))
+ (if (or (string-match apropos-pattern-quoted doc)
+ (string-match apropos-all-words-regexp doc))
+ (put-text-property (match-beginning 0)
+ (match-end 0)
+ 'face apropos-match-face doc))
+ doc))))
(defun apropos-format-plist (pl sep &optional compare)
(setq pl (symbol-plist pl))
;;; Code:
(require 'password-cache)
-(require 'mm-util)
-(require 'gnus-util)
(eval-when-compile (require 'cl))
(require 'eieio)
k)
(while (not (memq k choices))
- (setq k (cond
- ((fboundp 'read-char-choice)
- (read-char-choice full-prompt choices))
- (t (message "%s" full-prompt)
- (setq k (read-char))))))
+ (setq k (read-char-choice full-prompt choices)))
k)))
;; (auth-source-pick nil :host "any" :port 'imap :user "joe")
(when (setq item2 (auth-source-netrc-parse-one))
;; Did we get a "machine" value?
(if (equal item2 "machine")
- (progn
- (gnus-error 1
- "%s: Unexpected `machine' token at line %d"
- "auth-source-netrc-parse-entries"
- (auth-source-current-line))
- (forward-line 1))
+ (error
+ "%s: Unexpected `machine' token at line %d"
+ "auth-source-netrc-parse-entries"
+ (auth-source-current-line))
(push (cons item item2) alist)))))
;; Clean up: if there's an entry left over, use it.
(list k (plist-get spec k))))
search-keys))))
;; needed keys (always including host, login, port, and secret)
- (returned-keys (mm-delete-duplicates (append
- '(:host :login :port :secret)
- search-keys)))
+ (returned-keys (delete-dups (append
+ '(:host :login :port :secret)
+ search-keys)))
(items
(loop for search-spec in search-specs
nconc
(let* ((coll (oref backend source))
(max (or max 5000)) ; sanity check: default to stop at 5K
- (ignored-keys '(:create :delete :max :backend :label))
+ ;; Filter out ignored keys from the spec
+ (ignored-keys '(:create :delete :max :backend :label :host :port))
+ ;; Build a search spec without the ignored keys
(search-keys (loop for i below (length spec) by 2
unless (memq (nth i spec) ignored-keys)
collect (nth i spec)))
- ;; build a search spec without the ignored keys
- ;; if a search key is nil or t (match anything), we skip it
+ ;; If a search key value is nil or t (match anything), we skip it
(search-spec (apply #'append (mapcar
(lambda (k)
(if (or (null (plist-get spec k))
(list k (plist-get spec k))))
search-keys)))
;; needed keys (always including host, login, port, and secret)
- (returned-keys (mm-delete-duplicates (append
- '(:host :login :port :secret)
- search-keys)))
- (items (apply #'auth-source-macos-keychain-search-items
- coll
- type
- max
- search-spec))
+ (returned-keys (delete-dups (append
+ '(:host :login :port :secret)
+ search-keys)))
+ ;; Extract host and port from spec
+ (hosts (plist-get spec :host))
+ (hosts (if (and hosts (listp hosts)) hosts `(,hosts)))
+ (ports (plist-get spec :port))
+ (ports (if (and ports (listp ports)) ports `(,ports)))
+ ;; Loop through all combinations of host/port and pass each of these to
+ ;; auth-source-macos-keychain-search-items
+ (items (catch 'match
+ (dolist (host hosts)
+ (dolist (port ports)
+ (let* ((port (if port (format "%S" port)))
+ (items (apply #'auth-source-macos-keychain-search-items
+ coll
+ type
+ max
+ host port
+ search-spec)))
+ (when items
+ (throw 'match items)))))))
;; ensure each item has each key in `returned-keys'
(items (mapcar (lambda (plist)
items)))
items))
+
+(defun auth-source--decode-octal-string (string)
+ "Convert octal string to utf-8 string. E.g: 'a\134b' to 'a\b'"
+ (let ((list (string-to-list string))
+ (size (length string)))
+ (decode-coding-string
+ (apply #'unibyte-string
+ (loop for i = 0 then (+ i (if (eq (nth i list) ?\\) 4 1))
+ for var = (nth i list)
+ while (< i size)
+ if (eq var ?\\)
+ collect (string-to-number
+ (concat (cl-subseq list (+ i 1) (+ i 4))) 8)
+ else
+ collect var))
+ 'utf-8)))
+
(defun* auth-source-macos-keychain-search-items (coll _type _max
+ host port
&key label type
- host user port
+ user
&allow-other-keys)
-
(let* ((keychain-generic (eq type 'macos-keychain-generic))
(args `(,(if keychain-generic
"find-generic-password"
(goto-char (point-min))
(while (not (eobp))
(cond
- ((looking-at "^password: \"\\(.+\\)\"$")
+ ((looking-at "^password: \\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
(setq ret (auth-source-macos-keychain-result-append
ret
keychain-generic
"secret"
- (lexical-let ((v (match-string 1)))
+ (lexical-let ((v (auth-source--decode-octal-string
+ (match-string 1))))
(lambda () v)))))
;; TODO: check if this is really the label
;; match 0x00000007 <blob>="AppleID"
- ((looking-at "^[ ]+0x00000007 <blob>=\"\\(.+\\)\"")
+ ((looking-at
+ "^[ ]+0x00000007 <blob>=\\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
(setq ret (auth-source-macos-keychain-result-append
ret
keychain-generic
"label"
- (match-string 1))))
+ (auth-source--decode-octal-string (match-string 1)))))
;; match "crtr"<uint32>="aapl"
;; match "svce"<blob>="AppleID"
- ((looking-at "^[ ]+\"\\([a-z]+\\)\"[^=]+=\"\\(.+\\)\"")
+ ((looking-at
+ "^[ ]+\"\\([a-z]+\\)\"[^=]+=\\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
(setq ret (auth-source-macos-keychain-result-append
ret
keychain-generic
- (match-string 1)
- (match-string 2)))))
+ (auth-source--decode-octal-string (match-string 1))
+ (auth-source--decode-octal-string (match-string 2))))))
(forward-line)))
;; return `ret' iff it has the :secret key
(and (plist-get ret :secret) (list ret))))
(list k v))))
search-keys)))
;; needed keys (always including host, login, port, and secret)
- (returned-keys (mm-delete-duplicates (append
- '(:host :login :port :secret)
- search-keys)))
+ (returned-keys (delete-dups (append
+ '(:host :login :port :secret)
+ search-keys)))
(items (plstore-find store search-spec))
(item-names (mapcar #'car items))
(items (butlast items (- (length items) max)))
;; Emacs. You should never even notice that this package is active
;; (except that your buffers will be reverted, of course).
;;
+;; If the file exists, Auto-Revert Mode updates the buffer based on
+;; its (possibly empty) contents. If the file no longer exists, then
+;; there is nothing to revert, so it does not modify the buffer. Once
+;; a deleted file corresponding to a buffer in Auto-Revert Mode
+;; reappears, Auto-Revert Mode continues to work.
+;;
;; If Emacs is compiled with file notification support, notifications
;; are used instead of checking the time stamp of the files. You can
;; disable this by setting the user option `auto-revert-use-notify' to
;; excluded from file notifications can be specified by
;; `auto-revert-notify-exclude-dir-regexp'.
;;
-;; After reverting a file buffer, Auto Revert Mode normally puts point
+;; After reverting a file buffer, Auto-Revert Mode normally puts point
;; at the same position that a regular manual revert would. However,
;; there is one exception to this rule. If point is at the end of the
;; buffer before reverting, it stays at the end. Similarly if point
;; is displayed at the end of a file buffer in any window, it will stay
;; at the end of the buffer in that window, even if the window is not
-;; selected. This way, you can use Auto Revert Mode to `tail' a file.
+;; selected. This way, you can use Auto-Revert Mode to `tail' a file.
;; Just put point at the end of the buffer and it will stay there.
;; These rules apply to file buffers. For non-file buffers, the
;; behavior may be mode dependent.
;;
-;; While you can use Auto Revert Mode to tail a file, this package
-;; contains a third minor mode, Auto Revert Tail Mode, which does so
+;; While you can use Auto-Revert Mode to tail a file, this package
+;; contains a third minor mode, Auto-Revert Tail Mode, which does so
;; more efficiently, as long as you are sure that the file will only
;; change by growing at the end. It only appends the new output,
;; instead of reverting the entire buffer. It does so even if the
(defgroup auto-revert nil
"Revert individual buffers when files on disk change.
-Auto-Revert mode enables auto-revert in individual buffers.
-Global Auto-Revert mode does so in all buffers."
+Auto-Revert Mode enables auto-revert in individual buffers.
+Global Auto-Revert Mode does so in all buffers."
:group 'files
:group 'convenience)
that the new value will take effect immediately. You can set
this variable through Custom or you can call the command
`auto-revert-set-timer' after setting the variable. Otherwise,
-the new value will take effect the first time Auto Revert Mode
+the new value will take effect the first time Auto-Revert Mode
calls `auto-revert-set-timer' for internal reasons or in your
next editing session."
:group 'auto-revert
"String to display in the mode line when Auto-Revert Mode is active.
\(When the string is not empty, make sure that it has a leading space.)"
- :tag "Auto Revert Mode Text" ; To separate it from `global-...'
+ :tag "Auto-Revert Mode Text" ; To separate it from `global-...'
:group 'auto-revert
:type 'string)
(defcustom auto-revert-mode-hook nil
"Functions to run when Auto-Revert Mode is activated."
- :tag "Auto Revert Mode Hook" ; To separate it from `global-...'
+ :tag "Auto-Revert Mode Hook" ; To separate it from `global-...'
:group 'auto-revert
:type 'hook)
:type 'hook)
(defcustom global-auto-revert-non-file-buffers nil
- "When nil, Global Auto-Revert mode operates only on file-visiting buffers.
+ "When nil, Global Auto-Revert Mode operates only on file-visiting buffers.
When non-nil, both file buffers and buffers with a custom
`revert-buffer-function' and a `buffer-stale-function' are
-reverted by Global Auto-Revert mode. These include the Buffer
+reverted by Global Auto-Revert Mode. These include the Buffer
List buffer displayed by `buffer-menu', and Dired buffers showing
complete local directories. The Buffer List buffer reverts every
`auto-revert-interval' seconds; Dired buffers when the file list of
:type 'hook)
(defcustom auto-revert-check-vc-info nil
- "If non-nil Auto Revert Mode reliably updates version control info.
-Auto Revert Mode updates version control info whenever the buffer
+ "If non-nil Auto-Revert Mode reliably updates version control info.
+Auto-Revert Mode updates version control info whenever the buffer
needs reverting, regardless of the value of this variable.
However, the version control state can change without changes to
the work file. If the change is made from the current Emacs
:version "24.4")
(defcustom auto-revert-use-notify t
- "If non-nil Auto Revert Mode uses file notification functions.
+ "If non-nil Auto-Revert Mode uses file notification functions.
You should set this variable through Custom."
:group 'auto-revert
:type 'boolean
;;;###autoload
(define-minor-mode auto-revert-mode
- "Toggle reverting buffer when the file changes (Auto Revert mode).
-With a prefix argument ARG, enable Auto Revert mode if ARG is
+ "Toggle reverting buffer when the file changes (Auto-Revert Mode).
+With a prefix argument ARG, enable Auto-Revert Mode if ARG is
positive, and disable it otherwise. If called from Lisp, enable
the mode if ARG is omitted or nil.
-Auto Revert mode is a minor mode that affects only the current
+Auto-Revert Mode is a minor mode that affects only the current
buffer. When enabled, it reverts the buffer when the file on
disk changes.
without being changed in the part that is already in the buffer."
:group 'auto-revert :lighter auto-revert-mode-text
(if auto-revert-mode
- (if (not (memq (current-buffer) auto-revert-buffer-list))
- (push (current-buffer) auto-revert-buffer-list))
+ (when (not (memq (current-buffer) auto-revert-buffer-list))
+ (push (current-buffer) auto-revert-buffer-list)
+ (add-hook
+ 'kill-buffer-hook
+ (lambda ()
+ (setq auto-revert-buffer-list
+ (delq (current-buffer) auto-revert-buffer-list)))
+ nil t))
(when auto-revert-use-notify (auto-revert-notify-rm-watch))
(setq auto-revert-buffer-list
(delq (current-buffer) auto-revert-buffer-list)))
;;;###autoload
(define-minor-mode auto-revert-tail-mode
"Toggle reverting tail of buffer when the file grows.
-With a prefix argument ARG, enable Auto-Revert Tail mode if ARG
+With a prefix argument ARG, enable Auto-Revert Tail Mode if ARG
is positive, and disable it otherwise. If called from Lisp,
enable the mode if ARG is omitted or nil.
-When Auto Revert Tail mode is enabled, the tail of the file is
+When Auto-Revert Tail Mode is enabled, the tail of the file is
constantly followed, as with the shell command `tail -f'. This
means that whenever the file grows on disk (presumably because
some background process is appending to it from time to time),
;;;###autoload
(defun turn-on-auto-revert-tail-mode ()
- "Turn on Auto-Revert Tail mode.
+ "Turn on Auto-Revert Tail Mode.
This function is designed to be added to hooks, for example:
(add-hook \\='my-logfile-mode-hook #\\='turn-on-auto-revert-tail-mode)"
;;;###autoload
(define-minor-mode global-auto-revert-mode
- "Toggle Global Auto Revert mode.
-With a prefix argument ARG, enable Global Auto Revert mode if ARG
+ "Toggle Global Auto-Revert Mode.
+With a prefix argument ARG, enable Global Auto-Revert Mode if ARG
is positive, and disable it otherwise. If called from Lisp,
enable the mode if ARG is omitted or nil.
-Global Auto Revert mode is a global minor mode that reverts any
+Global Auto-Revert Mode is a global minor mode that reverts any
buffer associated with a file when the file changes on disk. Use
`auto-revert-mode' to revert a particular buffer.
:global t :group 'auto-revert :lighter global-auto-revert-mode-text
(auto-revert-set-timer)
(if global-auto-revert-mode
- (progn
- ;; Disable file notification because it could use too many resources.
- ;; See Bug#22814.
- (setq auto-revert-use-notify nil)
- (auto-revert-buffers))
+ (auto-revert-buffers)
(dolist (buf (buffer-list))
(with-current-buffer buf
(when auto-revert-use-notify
(if (eq action 'stopped)
;; File notification has stopped. Continue with polling.
- (cl-dolist (buffer buffers)
+ (cl-dolist (buffer
+ (if global-auto-revert-mode
+ (buffer-list) auto-revert-buffer-list))
(with-current-buffer buffer
- (when (or
- ;; A buffer associated with a file.
- (and (stringp buffer-file-name)
- (string-equal
- (file-name-nondirectory file)
- (file-name-nondirectory buffer-file-name)))
- ;; A buffer w/o a file, like dired.
- (null buffer-file-name))
+ (when (and (equal descriptor auto-revert-notify-watch-descriptor)
+ (or
+ ;; A buffer associated with a file.
+ (and (stringp buffer-file-name)
+ (string-equal
+ (file-name-nondirectory file)
+ (file-name-nondirectory buffer-file-name)))
+ ;; A buffer w/o a file, like dired.
+ (null buffer-file-name)))
(auto-revert-notify-rm-watch)
(setq-local auto-revert-use-notify nil))))
are checked first the next time this function is called.
This function is also responsible for removing buffers no longer in
-Auto-Revert mode from `auto-revert-buffer-list', and for canceling
+Auto-Revert Mode from `auto-revert-buffer-list', and for canceling
the timer when no buffers need to be checked."
(setq auto-revert-buffers-counter
:prefix "battery-"
:group 'hardware)
-;; Either BATn or yeeloong-bat, basically.
-(defconst battery--linux-sysfs-regexp "[bB][aA][tT][0-9]?$")
+(defcustom battery-linux-sysfs-regexp "[bB][aA][tT][0-9]?$"
+ "Regexp for folder names to be searched under
+ /sys/class/power_supply/ that contain battery information."
+ :version "25.2"
+ :type 'regexp
+ :group 'battery)
(defcustom battery-status-function
(cond ((and (eq system-type 'gnu/linux)
((and (eq system-type 'gnu/linux)
(file-directory-p "/sys/class/power_supply/")
(directory-files "/sys/class/power_supply/" nil
- battery--linux-sysfs-regexp))
+ battery-linux-sysfs-regexp))
#'battery-linux-sysfs)
((and (eq system-type 'berkeley-unix)
(file-executable-p "/usr/sbin/apm"))
(dolist (dir (ignore-errors
(directory-files
"/sys/class/power_supply/" t
- battery--linux-sysfs-regexp)))
+ battery-linux-sysfs-regexp)))
(erase-buffer)
(ignore-errors (insert-file-contents
(expand-file-name "uevent" dir)))
(defvar mode-line-column-line-number-mode-map
(let ((map (make-sparse-keymap))
(menu-map (make-sparse-keymap "Toggle Line and Column Number Display")))
+ (bindings--define-key menu-map [size-indication-mode]
+ '(menu-item "Display Size Indication" size-indication-mode
+ :help "Toggle displaying a size indication in the mode-line"
+ :button (:toggle . size-indication-mode)))
(bindings--define-key menu-map [line-number-mode]
'(menu-item "Display Line Numbers" line-number-mode
:help "Toggle displaying line numbers in the mode-line"
(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) "-%-"))
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
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)
(\"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
(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;
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.")
(list (cons ?e float-e) (cons ?p float-pi)))
"The association list of calculator register values.")
-(defvar calculator-saved-global-map nil
- "Saved global key map.")
-
(defvar calculator-restart-other-mode nil
"Used to hack restarting with the electric mode changed.")
;;;---------------------------------------------------------------------
;;; Key bindings
+(defun calculator-define-key (key cmd map)
+ ;; Arranges for unbound alphabetic keys to be used as their un/shifted
+ ;; versions if those are bound (mimics the usual Emacs global bindings).
+ ;; FIXME: We should adjust Emacs's native "fallback to unshifted binding"
+ ;; such that it can also be used here, rather than having to use a hack like
+ ;; this one.
+ (let* ((key (if (stringp key) (kbd key) key))
+ (omap (keymap-parent map)))
+ (define-key map key cmd)
+ ;; "other" map, used for case-flipped bindings
+ (unless omap
+ (setq omap (make-sparse-keymap))
+ (suppress-keymap omap t)
+ (set-keymap-parent map omap))
+ (let ((m omap))
+ ;; Bind all case-flipped versions.
+ (dotimes (i (length key))
+ (let* ((c (aref key i))
+ (k (vector c))
+ (b (lookup-key m k))
+ (defkey (lambda (x)
+ (define-key m k x)
+ (when (and (characterp c)
+ (or (<= ?A c ?Z) (<= ?a c ?z)))
+ (define-key m (vector (logxor 32 c)) x)))))
+ (cond ((= i (1- (length key)))
+ ;; Prefer longer sequences.
+ (unless (keymapp b) (funcall defkey cmd)))
+ ((keymapp b) (setq m b))
+ (t (let ((sub (make-sparse-keymap)))
+ (funcall defkey sub)
+ (setq m sub)))))))))
+
(defvar calculator-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map t)
- (define-key map "i" nil)
- (define-key map "o" nil)
- (let ((p
- '((calculator-open-paren "[")
- (calculator-close-paren "]")
- (calculator-op-or-exp "+" "-" [kp-add] [kp-subtract])
- (calculator-digit "0" "1" "2" "3" "4" "5" "6" "7" "8"
- "9" "a" "b" "c" "d" "f"
- [kp-0] [kp-1] [kp-2] [kp-3] [kp-4]
- [kp-5] [kp-6] [kp-7] [kp-8] [kp-9])
- (calculator-op [kp-divide] [kp-multiply])
- (calculator-decimal "." [kp-decimal])
- (calculator-exp "e" "E")
- (calculator-dec/deg-mode "D")
- (calculator-set-register "s")
- (calculator-get-register "g")
- (calculator-radix-mode "H" "X" "O" "B")
- (calculator-radix-input-mode "id" "ih" "ix" "io" "ib"
- "iD" "iH" "iX" "iO" "iB")
- (calculator-radix-output-mode "od" "oh" "ox" "oo" "ob"
- "oD" "oH" "oX" "oO" "oB")
- (calculator-rotate-displayer "'")
- (calculator-rotate-displayer-back "\"")
- (calculator-displayer-prev "{")
- (calculator-displayer-next "}")
- (calculator-saved-up [up] [?\C-p])
- (calculator-saved-down [down] [?\C-n])
- (calculator-quit "q" [?\C-g])
- (calculator-enter [enter] [linefeed] [kp-enter]
- [return] [?\r] [?\n])
- (calculator-save-on-list " " [space])
- (calculator-clear-saved [?\C-c] [(control delete)])
- (calculator-save-and-quit [(control return)]
- [(control kp-enter)])
- (calculator-paste [insert] [(shift insert)]
- [paste] [mouse-2] [?\C-y])
- (calculator-clear [delete] [?\C-?] [?\C-d])
- (calculator-help [?h] [??] [f1] [help])
- (calculator-copy [(control insert)] [copy])
- (calculator-backspace [backspace])
- )))
- (while p
- ;; reverse the keys so earlier definitions come last -- makes
- ;; the more sensible bindings visible in the menu
- (let ((func (caar p)) (keys (reverse (cdar p))))
- (while keys
- (define-key map (car keys) func)
- (setq keys (cdr keys))))
- (setq p (cdr p))))
+ (dolist (x '((calculator-digit
+ "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c"
+ "d" "f" "<kp-0>" "<kp-1>" "<kp-2>" "<kp-3>" "<kp-4>"
+ "<kp-5>" "<kp-6>" "<kp-7>" "<kp-8>" "<kp-9>")
+ (calculator-open-paren "[")
+ (calculator-close-paren "]")
+ (calculator-op-or-exp "+" "-"
+ "<kp-add>" "<kp-subtract>")
+ (calculator-op "<kp-divide>" "<kp-multiply>")
+ (calculator-decimal "." "<kp-decimal>")
+ (calculator-exp "e")
+ (calculator-dec/deg-mode "D")
+ (calculator-set-register "s")
+ (calculator-get-register "g")
+ (calculator-radix-mode "H" "X" "O" "B")
+ (calculator-radix-input-mode "iD" "iH" "iX" "iO" "iB")
+ (calculator-radix-output-mode "oD" "oH" "oX" "oO" "oB")
+ (calculator-rotate-displayer "'")
+ (calculator-rotate-displayer-back "\"")
+ (calculator-displayer-prev "{")
+ (calculator-displayer-next "}")
+ (calculator-saved-up "<up>" "C-p")
+ (calculator-saved-down "<down>" "C-n")
+ (calculator-quit "q" "C-g")
+ (calculator-enter "<enter>" "<linefeed>"
+ "<kp-enter>" "<return>"
+ "RET" "LFD")
+ (calculator-save-on-list "SPC" "<space>")
+ (calculator-clear-saved "C-c" "<C-delete>")
+ (calculator-save-and-quit "<C-return>" "<C-kp-enter>")
+ (calculator-paste "<insert>" "<S-insert>"
+ "<paste>" "<mouse-2>" "C-y")
+ (calculator-clear "<delete>" "DEL" "C-d")
+ (calculator-help "h" "?" "<f1>" "<help>")
+ (calculator-copy "<C-insert>" "<copy>")
+ (calculator-backspace "<backspace>")
+ ))
+ ;; reverse the keys so earlier definitions come last -- makes the
+ ;; more sensible bindings visible in the menu
+ (dolist (k (reverse (cdr x)))
+ (calculator-define-key k (car x) map)))
(if calculator-bind-escape
- (progn (define-key map [?\e] 'calculator-quit)
- (define-key map [escape] 'calculator-quit))
- (define-key map [?\e ?\e ?\e] 'calculator-quit))
+ (progn (calculator-define-key "ESC" 'calculator-quit map)
+ (calculator-define-key "<escape>" 'calculator-quit map))
+ (calculator-define-key "ESC ESC ESC" 'calculator-quit map))
;; make C-h work in text-mode
- (or window-system (define-key map [?\C-h] 'calculator-backspace))
+ (unless window-system
+ (calculator-define-key "C-h" 'calculator-backspace map))
;; set up a menu
(when (and calculator-use-menu (not (boundp 'calculator-menu)))
(let ((radix-selectors
("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
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
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
(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
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))
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))))
(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))
(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
"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."
(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)
(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.
(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.
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))
(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
(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))
;;; Input interaction
(defun calculator-last-input (&optional keys)
- "Last char (or event or event sequence) that was read.
-Use KEYS if given, otherwise use `this-command-keys'."
- (let ((inp (or keys (this-command-keys))))
- (if (or (stringp inp) (not (arrayp inp)) (member inp '([f1] [help])))
+ "Return the last key sequence that was used to invoke this command, or
+the input KEYS. Uses the `function-key-map' translate keypad numbers to
+plain ones."
+ (let* ((inp (or keys (this-command-keys)))
+ (inp (or (and (arrayp inp) (not (stringp inp))
+ (lookup-key function-key-map inp))
+ inp)))
+ (if (or (not inp) (stringp inp) (not (arrayp inp))
+ (catch 'done ; any non-chars?
+ (dotimes (i (length inp))
+ (unless (characterp (aref inp i)) (throw 'done t)))
+ nil))
inp
- ;; Translates kp-x to x and [tries to] create a string to lookup
- ;; operators; assume all symbols are translatable via
- ;; `function-key-map'. This is needed because we have key
- ;; bindings for kp-* (which might be the wrong thing to do) so
- ;; they don't get translated in `this-command-keys'.
- (concat (mapcar (lambda (k)
- (if (numberp k) k (error "??bad key?? (%S)" k)))
- (or (lookup-key function-key-map inp) inp))))))
+ (concat inp))))
(defun calculator-clear-fragile (&optional op)
"Clear the fragile flag if it was set, then maybe reset all.
(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))
(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 ()
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)
(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))
(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)
(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'."
(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" ())
+ - * / \\(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
(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))
(and window
(or (eq window (frame-root-window (window-frame window)))
(delete-window window))))
- (kill-buffer appt-buffer-name)
+ (let ((buffer (get-buffer appt-buffer-name)))
+ (when buffer
+ (kill-buffer buffer)))
(if appt-audible
(beep 1)))
of the Hebrew calendar entries, except that the Hebrew month
names cannot be abbreviated. The Hebrew months are numbered
from 1 to 13 with Nisan being 1, 12 being Adar I and 13 being
-Adar II; you must use `Adar I' if you want Adar of a common
+Adar II; you must use \"Adar I\" if you want Adar of a common
Hebrew year. If a Hebrew date diary entry begins with
`diary-nonmarking-symbol', the entry will appear in the diary
listing, but will not be marked in the calendar. This function
(defun calendar-iso-to-absolute (date)
"The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.
-The `ISO year' corresponds approximately to the Gregorian year, but
+The \"ISO year\" corresponds approximately to the Gregorian year, but
weeks start on Monday and end on Sunday. The first week of the ISO year is
the first such week in which at least 4 days are in a year. The ISO
commercial DATE has the form (week day year) in which week is in the range
;;;###cal-autoload
(defun calendar-iso-from-absolute (date)
- "Compute the `ISO commercial date' corresponding to the absolute DATE.
+ "Compute the \"ISO commercial date\" corresponding to the absolute DATE.
The ISO year corresponds approximately to the Gregorian year, but weeks
start on Monday and end on Sunday. The first week of the ISO year is the
first such week in which at least 4 days are in a year. The ISO commercial
(cal-tex-cmd "\\hspace*" space))
(defun cal-tex-comment (&optional comment)
- "Insert `% ', followed by optional string COMMENT, followed by newline.
-COMMENT may contain newlines, which are prefixed by `% ' in the output."
+ "Insert \"% \", followed by optional string COMMENT, followed by newline.
+COMMENT may contain newlines, which are prefixed by \"% \" in the output."
(insert (format "%% %s\n"
(if comment
(replace-regexp-in-string "\n" "\n% " comment)
((eq char ?:) ?d)))
(defun parse-time-tokenize (string)
- "Tokenize STRING into substrings."
+ "Tokenize STRING into substrings.
+Each substring is a run of \"valid\" characters, i.e., lowercase
+letters, digits, plus or minus signs or colons."
(let ((start nil)
(end (length string))
(all-digits nil)
(while (and (< index end) ;Skip invalid characters.
(not (setq c (parse-time-string-chars (aref string index)))))
(cl-incf index))
- (setq start index all-digits (eq c ?0))
+ (setq start index
+ all-digits (eq c ?0))
(while (and (< (cl-incf index) end) ;Scan valid characters.
(setq c (parse-time-string-chars (aref string index))))
(setq all-digits (and all-digits (eq c ?0))))
;;;###autoload
(defun parse-time-string (string)
"Parse the time-string STRING into (SEC MIN HOUR DAY MON YEAR DOW DST TZ).
-The values are identical to those of `decode-time', but any values that are
-unknown are returned as nil."
+STRING should be on something resembling an RFC2822 string, a la
+\"Fri, 25 Mar 2016 16:24:56 +0100\", but this function is
+somewhat liberal in what format it accepts, and will attempt to
+return a \"likely\" value even for somewhat malformed strings.
+The values returned are identical to those of `decode-time', but
+any values that are unknown are returned as nil."
(let ((time (list nil nil nil nil nil nil nil nil nil))
(temp (parse-time-tokenize (downcase string))))
(while temp
For example, the form
- '(24-hours \":\" minutes
+ (24-hours \":\" minutes
(if time-zone \" (\") time-zone (if time-zone \")\"))
-would give military-style times like `21:07 (UTC)'."
+would give military-style times like \"21:07 (UTC)\"."
:type 'sexp
:risky t
:group 'calendar)
(regexp-opt
'("Enter" "enter" "Enter same" "enter same" "Enter the" "enter the"
"Old" "old" "New" "new" "'s" "login"
- "Kerberos" "CVS" "UNIX" " SMB" "LDAP" "[sudo]" "Repeat" "Bad") t)
+ "Kerberos" "CVS" "UNIX" " SMB" "LDAP" "[sudo]" "Repeat" "Bad" "Retype")
+ t)
" +\\)"
"\\(?:" (regexp-opt password-word-equivalents) "\\|Response\\)"
"\\(?:\\(?:, try\\)? *again\\| (empty for no passphrase)\\| (again)\\)?\
\\(?: for [^::៖]+\\)?[::៖]\\s *\\'")
"Regexp matching prompts for passwords in the inferior process.
This is used by `comint-watch-for-password-prompt'."
- :version "24.4"
+ :version "25.2"
:type 'regexp
:group 'comint)
(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.
buf))))
;;;###autoload
-(defun custom-buffer-create (options &optional name description)
+(defun custom-buffer-create (options &optional name _description)
"Create a buffer containing OPTIONS.
Optional NAME is the name of the buffer.
OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
SYMBOL is a customization option, and WIDGET is a widget for editing
that option.
DESCRIPTION is unused."
- (pop-to-buffer-same-window (custom-get-fresh-buffer (or name "*Customization*")))
- (custom-buffer-create-internal options description))
+ (pop-to-buffer-same-window
+ (custom-get-fresh-buffer (or name "*Customization*")))
+ (custom-buffer-create-internal options))
;;;###autoload
-(defun custom-buffer-create-other-window (options &optional name description)
+(defun custom-buffer-create-other-window (options &optional name _description)
"Create a buffer containing OPTIONS, and display it in another window.
The result includes selecting that window.
Optional NAME is the name of the buffer.
OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
SYMBOL is a customization option, and WIDGET is a widget for editing
-that option."
+that option.
+DESCRIPTION is unused."
(unless name (setq name "*Customization*"))
(switch-to-buffer-other-window (custom-get-fresh-buffer name))
- (custom-buffer-create-internal options description))
+ (custom-buffer-create-internal options))
(defcustom custom-reset-button-menu t
"If non-nil, only show a single reset button in customize buffers.
(const :tag "Always" t)
(repeat (symbol :tag "Parameter")))
"25.1")
+ (tooltip-reuse-hidden-frame tooltip boolean "26.1")
;; fringe.c
(overflow-newline-into-fringe fringe boolean)
;; image.c
;; We need macros in dired.el to compile properly,
;; and we call subroutines in it too.
(require 'dired)
+(require 'cl-lib) ; for cl-mapcan
(defvar dired-create-files-failures nil
"Variable where `dired-create-files' records failing file names.
(command (if sequentially
(substring command 0 (match-beginning 0))
command))
+ (parallel-in-background
+ (and in-background (not sequentially) (not (eq system-type 'ms-dos))))
+ (w32-shell (and (fboundp 'w32-shell-dos-semantics)
+ (w32-shell-dos-semantics)))
+ ;; The way to run a command in background in Windows shells
+ ;; is to use the START command. The /B switch means not to
+ ;; create a new window for the command.
+ (cmd-prefix (if w32-shell "start /b " ""))
+ ;; Windows shells don't support chaining with ";", they use
+ ;; "&" instead.
+ (cmd-sep (if (and (not w32-shell) (not parallel-in-background))
+ ";"
+ "&"))
(stuff-it
(if (or (string-match-p dired-star-subst-regexp command)
(string-match-p dired-quark-subst-regexp command))
(lambda (x)
- (let ((retval command))
+ (let ((retval (concat cmd-prefix command)))
(while (string-match
"\\(^\\|[ \t]\\)\\([*?]\\)\\([ \t]\\|$\\)" retval)
(setq retval (replace-match x t t retval 2)))
retval))
- (lambda (x) (concat command dired-mark-separator x)))))
+ (lambda (x) (concat cmd-prefix command dired-mark-separator x)))))
(concat
- (if on-each
- (mapconcat stuff-it (mapcar 'shell-quote-argument file-list)
- (if (and in-background (not sequentially)) "&" ";"))
- (let ((files (mapconcat 'shell-quote-argument
- file-list dired-mark-separator)))
- (if (> (length file-list) 1)
- (setq files (concat dired-mark-prefix files dired-mark-postfix)))
- (funcall stuff-it files)))
- (if in-background "&" ""))))
+ (cond (on-each
+ (format "%s%s"
+ (mapconcat stuff-it (mapcar 'shell-quote-argument file-list)
+ cmd-sep)
+ ;; POSIX shells running a list of commands in the background
+ ;; (LIST = cmd_1 & [cmd_2 & ... cmd_i & ... cmd_N &])
+ ;; return once cmd_N ends, i.e., the shell does not
+ ;; wait for cmd_i to finish before executing cmd_i+1.
+ ;; That means, running (shell-command LIST) may not show
+ ;; the output of all the commands (Bug#23206).
+ ;; Add 'wait' to force those POSIX shells to wait until
+ ;; all commands finish.
+ (or (and parallel-in-background (not w32-shell)
+ "&wait")
+ "")))
+ (t
+ (let ((files (mapconcat 'shell-quote-argument
+ file-list dired-mark-separator)))
+ (when (cdr file-list)
+ (setq files (concat dired-mark-prefix files dired-mark-postfix)))
+ (funcall stuff-it files))))
+ (or (and in-background "&") ""))))
;; This is an extra function so that it can be redefined by ange-ftp.
;;;###autoload
("\\.bz2\\'" "" "bunzip2")
("\\.xz\\'" "" "unxz")
("\\.zip\\'" "" "unzip -o -d %o %i")
+ ("\\.7z\\'" "" "7z x -aoa -o%o %i")
;; This item controls naming for compression.
("\\.tar\\'" ".tgz" nil)
;; This item controls the compression of directories
;; Local Variables:
;; byte-compile-dynamic: t
-;; generated-autoload-file: "dired.el"
+;; generated-autoload-file: "dired-loaddefs.el"
;; End:
;;; dired-aux.el ends here
;; Local Variables:
;; byte-compile-dynamic: t
-;; generated-autoload-file: "dired.el"
+;; generated-autoload-file: "dired-loaddefs.el"
;; End:
;;; dired-x.el ends here
;;; 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))
(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)
(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" "8346506b9ef7167fd55b5eac7e6617a1")
-;;; Generated autoloads from dired-aux.el
-
-(autoload 'dired-diff "dired-aux" "\
-Compare file at point with file FILE using `diff'.
-If called interactively, prompt for FILE. If the file at point
-has a backup file, use that as the default. If the file at point
-is a backup file, use its original. If the mark is active
-in Transient Mark mode, use the file at the mark as the default.
-\(That's the mark set by \\[set-mark-command], not by Dired's
-\\[dired-mark] command.)
-
-FILE is the first file given to `diff'. The file at point
-is the second file given to `diff'.
-
-With prefix arg, prompt for second argument SWITCHES, which is
-the string of command switches for the third argument of `diff'.
-
-\(fn FILE &optional SWITCHES)" t nil)
-
-(autoload 'dired-backup-diff "dired-aux" "\
-Diff this file with its backup file or vice versa.
-Uses the latest backup, if there are several numerical backups.
-If this file is a backup, diff it with its original.
-The backup file is the first file given to `diff'.
-With prefix arg, prompt for argument SWITCHES which is options for `diff'.
-
-\(fn &optional SWITCHES)" t nil)
-
-(autoload 'dired-compare-directories "dired-aux" "\
-Mark files with different file attributes in two dired buffers.
-Compare file attributes of files in the current directory
-with file attributes in directory DIR2 using PREDICATE on pairs of files
-with the same name. Mark files for which PREDICATE returns non-nil.
-Mark files with different names if PREDICATE is nil (or interactively
-with empty input at the predicate prompt).
-
-PREDICATE is a Lisp expression that can refer to the following variables:
-
- size1, size2 - file size in bytes
- mtime1, mtime2 - last modification time in seconds, as a float
- fa1, fa2 - list of file attributes
- returned by function `file-attributes'
-
- where 1 refers to attribute of file in the current dired buffer
- and 2 to attribute of file in second dired buffer.
-
-Examples of PREDICATE:
-
- (> mtime1 mtime2) - mark newer files
- (not (= size1 size2)) - mark files with different sizes
- (not (string= (nth 8 fa1) (nth 8 fa2))) - mark files with different modes
- (not (and (= (nth 2 fa1) (nth 2 fa2)) - mark files with different UID
- (= (nth 3 fa1) (nth 3 fa2)))) and GID.
-
-\(fn DIR2 PREDICATE)" t nil)
-
-(autoload 'dired-do-chmod "dired-aux" "\
-Change the mode of the marked (or next ARG) files.
-Symbolic modes like `g+w' are allowed.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chgrp "dired-aux" "\
-Change the group of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chown "dired-aux" "\
-Change the owner of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-touch "dired-aux" "\
-Change the timestamp of the marked (or next ARG) files.
-This calls touch.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-print "dired-aux" "\
-Print the marked (or next ARG) files.
-Uses the shell command coming from variables `lpr-command' and
-`lpr-switches' as default.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-clean-directory "dired-aux" "\
-Flag numerical backups for deletion.
-Spares `dired-kept-versions' latest versions, and `kept-old-versions' oldest.
-Positive prefix arg KEEP overrides `dired-kept-versions';
-Negative prefix arg KEEP overrides `kept-old-versions' with KEEP made positive.
-
-To clear the flags on these files, you can use \\[dired-flag-backup-files]
-with a prefix argument.
-
-\(fn KEEP)" t nil)
-
-(autoload 'dired-do-async-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files asynchronously.
-
-Like `dired-do-shell-command', but adds `&' at the end of COMMAND
-to execute it asynchronously.
-
-When operating on multiple files, asynchronous commands
-are executed in the background on each file in parallel.
-In shell syntax this means separating the individual commands
-with `&'. However, when COMMAND ends in `;' or `;&' then commands
-are executed in the background on each file sequentially waiting
-for each command to terminate before running the next command.
-In shell syntax this means separating the individual commands with `;'.
-
-The output appears in the buffer `*Async Shell Command*'.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-do-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files.
-If no files are marked or a numeric prefix arg is given,
-the next ARG files are used. Just \\[universal-argument] means the current file.
-The prompt mentions the file(s) or the marker, as appropriate.
-
-If there is a `*' in COMMAND, surrounded by whitespace, this runs
-COMMAND just once with the entire file list substituted there.
-
-If there is no `*', but there is a `?' in COMMAND, surrounded by
-whitespace, this runs COMMAND on each file individually with the
-file name substituted for `?'.
-
-Otherwise, this runs COMMAND on each file individually with the
-file name added at the end of COMMAND (separated by a space).
-
-`*' and `?' when not surrounded by whitespace have no special
-significance for `dired-do-shell-command', and are passed through
-normally to the shell, but you must confirm first.
-
-If you want to use `*' as a shell wildcard with whitespace around
-it, write `*\"\"' in place of just `*'. This is equivalent to just
-`*' in the shell, but avoids Dired's special handling.
-
-If COMMAND ends in `&', `;', or `;&', it is executed in the
-background asynchronously, and the output appears in the buffer
-`*Async Shell Command*'. When operating on multiple files and COMMAND
-ends in `&', the shell command is executed on each file in parallel.
-However, when COMMAND ends in `;' or `;&' then commands are executed
-in the background on each file sequentially waiting for each command
-to terminate before running the next command. You can also use
-`dired-do-async-shell-command' that automatically adds `&'.
-
-Otherwise, COMMAND is executed synchronously, and the output
-appears in the buffer `*Shell Command Output*'.
-
-This feature does not try to redisplay Dired buffers afterward, as
-there's no telling what files COMMAND may have changed.
-Type \\[dired-do-redisplay] to redisplay the marked files.
-
-When COMMAND runs, its working directory is the top-level directory
-of the Dired buffer, so output files usually are created there
-instead of in a subdir.
-
-In a noninteractive call (from Lisp code), you must specify
-the list of file names explicitly with the FILE-LIST argument, which
-can be produced by `dired-get-marked-files', for example.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-run-shell-command "dired-aux" "\
-
-
-\(fn COMMAND)" nil nil)
-
-(autoload 'dired-do-kill-lines "dired-aux" "\
-Kill all marked lines (not the files).
-With a prefix argument, kill that many lines starting with the current line.
-\(A negative argument kills backward.)
-If you use this command with a prefix argument to kill the line
-for a file that is a directory, which you have inserted in the
-Dired buffer as a subdirectory, then it deletes that subdirectory
-from the buffer as well.
-To kill an entire subdirectory (without killing its line in the
-parent directory), go to its directory header line and use this
-command with a prefix argument (the value does not matter).
-
-\(fn &optional ARG FMT)" t nil)
-
-(autoload 'dired-do-compress-to "dired-aux" "\
-Compress selected files and directories to an archive.
-You are prompted for the archive name.
-The archiving command is chosen based on the archive name extension and
-`dired-compress-files-alist'.
-
-\(fn)" t nil)
-
-(autoload 'dired-compress-file "dired-aux" "\
-Compress or uncompress FILE.
-Return the name of the compressed or uncompressed file.
-Return nil if no change in files.
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-query "dired-aux" "\
-Format PROMPT with ARGS, query user, and store the result in SYM.
-The return value is either nil or t.
-
-The user may type y or SPC to accept once; n or DEL to skip once;
-! to accept this and subsequent queries; or q or ESC to decline
-this and subsequent queries.
-
-If SYM is already bound to a non-nil value, this function may
-return automatically without querying the user. If SYM is !,
-return t; if SYM is q or ESC, return nil.
-
-\(fn SYM PROMPT &rest ARGS)" nil nil)
-
-(autoload 'dired-do-compress "dired-aux" "\
-Compress or uncompress marked (or next ARG) files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-byte-compile "dired-aux" "\
-Byte compile marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-load "dired-aux" "\
-Load the marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-redisplay "dired-aux" "\
-Redisplay all marked (or next ARG) files.
-If on a subdir line, redisplay that subdirectory. In that case,
-a prefix arg lets you edit the `ls' switches used for the new listing.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them. However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery. Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn &optional ARG TEST-FOR-SUBDIR)" t nil)
-
-(autoload 'dired-add-file "dired-aux" "\
-
-
-\(fn FILENAME &optional MARKER-CHAR)" nil nil)
-
-(autoload 'dired-remove-file "dired-aux" "\
-
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-relist-file "dired-aux" "\
-Create or update the line for FILE in all Dired buffers it would belong in.
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-copy-file "dired-aux" "\
-
-
-\(fn FROM TO OK-FLAG)" nil nil)
-
-(autoload 'dired-rename-file "dired-aux" "\
-
-
-\(fn FILE NEWNAME OK-IF-ALREADY-EXISTS)" nil nil)
-
-(autoload 'dired-create-directory "dired-aux" "\
-Create a directory called DIRECTORY.
-If DIRECTORY already exists, signal an error.
-
-\(fn DIRECTORY)" t nil)
-
-(autoload 'dired-do-copy "dired-aux" "\
-Copy all marked (or next ARG) files, or copy the current file.
-When operating on just the current file, prompt for the new name.
-
-When operating on multiple or marked files, prompt for a target
-directory, and make the new copies in that directory, with the
-same names as the original files. The initial suggestion for the
-target directory is the Dired buffer's current directory (or, if
-`dired-dwim-target' is non-nil, the current directory of a
-neighboring Dired window).
-
-If `dired-copy-preserve-time' is non-nil, this command preserves
-the modification time of each old file in the copy, similar to
-the \"-p\" option for the \"cp\" shell command.
-
-This command copies symbolic links by creating new ones, similar
-to the \"-d\" option for the \"cp\" shell command.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-symlink "dired-aux" "\
-Make symbolic links to current file or all marked (or next ARG) files.
-When operating on just the current file, you specify the new name.
-When operating on multiple or marked files, you specify a directory
-and new symbolic links are made in that directory
-with the same names that the files currently have. The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-For relative symlinks, use \\[dired-do-relsymlink].
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-hardlink "dired-aux" "\
-Add names (hard links) current file or all marked (or next ARG) files.
-When operating on just the current file, you specify the new name.
-When operating on multiple or marked files, you specify a directory
-and new hard links are made in that directory
-with the same names that the files currently have. The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-rename "dired-aux" "\
-Rename current file or all marked (or next ARG) files.
-When renaming just the current file, you specify the new name.
-When renaming multiple or marked files, you specify a directory.
-This command also renames any buffers that are visiting the files.
-The default suggested for the target directory depends on the value
-of `dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-rename-regexp "dired-aux" "\
-Rename selected files whose names match REGEXP to NEWNAME.
-
-With non-zero prefix argument ARG, the command operates on the next ARG
-files. Otherwise, it operates on all the marked files, or the current
-file if none are marked.
-
-As each match is found, the user must type a character saying
- what to do with it. For directions, type \\[help-command] at that time.
-NEWNAME may contain \\=\\<n> or \\& as in `query-replace-regexp'.
-REGEXP defaults to the last regexp used.
-
-With a zero prefix arg, renaming by regexp affects the absolute file name.
-Normally, only the non-directory part of the file name is used and changed.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-copy-regexp "dired-aux" "\
-Copy selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-hardlink-regexp "dired-aux" "\
-Hardlink selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-symlink-regexp "dired-aux" "\
-Symlink selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-upcase "dired-aux" "\
-Rename all marked (or next ARG) files to upper case.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-downcase "dired-aux" "\
-Rename all marked (or next ARG) files to lower case.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-maybe-insert-subdir "dired-aux" "\
-Insert this subdirectory into the same dired buffer.
-If it is already present, just move to it (type \\[dired-do-redisplay] to refresh),
- else inserts it at its natural place (as `ls -lR' would have done).
-With a prefix arg, you may edit the ls switches used for this listing.
- You can add `R' to the switches to expand the whole tree starting at
- this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them. However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery. Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(autoload 'dired-insert-subdir "dired-aux" "\
-Insert this subdirectory into the same Dired buffer.
-If it is already present, overwrite the previous entry;
- otherwise, insert it at its natural place (as `ls -lR' would
- have done).
-With a prefix arg, you may edit the `ls' switches used for this listing.
- You can add `R' to the switches to expand the whole tree starting at
- this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(autoload 'dired-prev-subdir "dired-aux" "\
-Go to previous subdirectory, regardless of level.
-When called interactively and not on a subdir line, go to this subdir's line.
-
-\(fn ARG &optional NO-ERROR-IF-NOT-FOUND NO-SKIP)" t nil)
-
-(autoload 'dired-goto-subdir "dired-aux" "\
-Go to end of header line of DIR in this dired buffer.
-Return value of point on success, otherwise return nil.
-The next char is either \\n, or \\r if DIR is hidden.
-
-\(fn DIR)" t nil)
-
-(autoload 'dired-mark-subdir-files "dired-aux" "\
-Mark all files except `.' and `..' in current subdirectory.
-If the Dired buffer shows multiple directories, this command
-marks the files listed in the subdirectory that point is in.
-
-\(fn)" t nil)
-
-(autoload 'dired-kill-subdir "dired-aux" "\
-Remove all lines of current subdirectory.
-Lower levels are unaffected.
-
-\(fn &optional REMEMBER-MARKS)" t nil)
-
-(autoload 'dired-tree-up "dired-aux" "\
-Go up ARG levels in the dired tree.
-
-\(fn ARG)" t nil)
-
-(autoload 'dired-tree-down "dired-aux" "\
-Go down in the dired tree.
-
-\(fn)" t nil)
-
-(autoload 'dired-hide-subdir "dired-aux" "\
-Hide or unhide the current subdirectory and move to next directory.
-Optional prefix arg is a repeat factor.
-Use \\[dired-hide-all] to (un)hide all directories.
-
-\(fn ARG)" t nil)
-
-(autoload 'dired-hide-all "dired-aux" "\
-Hide all subdirectories, leaving only their header lines.
-If there is already something hidden, make everything visible again.
-Use \\[dired-hide-subdir] to (un)hide a particular subdirectory.
-
-\(fn &optional IGNORED)" t nil)
-
-(autoload 'dired-isearch-filenames-setup "dired-aux" "\
-Set up isearch to search in Dired file names.
-Intended to be added to `isearch-mode-hook'.
-
-\(fn)" nil nil)
-
-(autoload 'dired-isearch-filenames "dired-aux" "\
-Search for a string using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-isearch-filenames-regexp "dired-aux" "\
-Search for a regexp using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch "dired-aux" "\
-Search for a string through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch-regexp "dired-aux" "\
-Search for a regexp through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-search "dired-aux" "\
-Search through all marked files for a match for REGEXP.
-Stops when a match is found.
-To continue searching for next match, use command \\[tags-loop-continue].
-
-\(fn REGEXP)" t nil)
-
-(autoload 'dired-do-query-replace-regexp "dired-aux" "\
-Do `query-replace-regexp' of FROM with TO, on all marked files.
-Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-
-\(fn FROM TO &optional DELIMITED)" t nil)
-
-(autoload 'dired-do-find-regexp "dired-aux" "\
-Find all matches for REGEXP in all marked files.
-For any marked directory, all of its files are searched recursively.
-However, files matching `grep-find-ignored-files' and subdirectories
-matching `grep-find-ignored-directories' are skipped in the marked
-directories.
-
-REGEXP should use constructs supported by your local `grep' command.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'dired-do-find-regexp-and-replace "dired-aux" "\
-Replace matches of FROM with TO, in all marked files.
-For any marked directory, matches in all of its files are replaced,
-recursively. However, files matching `grep-find-ignored-files'
-and subdirectories matching `grep-find-ignored-directories' are skipped
-in the marked directories.
-
-REGEXP should use constructs supported by your local `grep' command.
-
-\(fn FROM TO)" t nil)
-
-(autoload 'dired-show-file-type "dired-aux" "\
-Print the type of FILE, according to the `file' command.
-If you give a prefix to this command, and FILE is a symbolic
-link, then the type of the file linked to by FILE is printed
-instead.
-
-\(fn FILE &optional DEREF-SYMLINKS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "dired-x" "dired-x.el" "f00ad5ec7383d017263855ad8add60a3")
-;;; Generated autoloads from dired-x.el
-
-(autoload 'dired-jump "dired-x" "\
-Jump to Dired buffer corresponding to current buffer.
-If in a file, Dired the current directory and move to file's line.
-If in Dired already, pop up a level and goto old directory's line.
-In case the proper Dired file line cannot be found, refresh the dired
-buffer and try again.
-When OTHER-WINDOW is non-nil, jump to Dired buffer in other window.
-Interactively with prefix argument, read FILE-NAME and
-move to its line in dired.
-
-\(fn &optional OTHER-WINDOW FILE-NAME)" t nil)
-
-(autoload 'dired-jump-other-window "dired-x" "\
-Like \\[dired-jump] (`dired-jump') but in other window.
-
-\(fn &optional FILE-NAME)" t nil)
-
-(autoload 'dired-do-relsymlink "dired-x" "\
-Relative symlink all marked (or next ARG) files into a directory.
-Otherwise make a relative symbolic link to the current file.
-This creates relative symbolic links like
-
- foo -> ../bar/foo
-
-not absolute ones like
-
- foo -> /ugly/file/name/that/may/change/any/day/bar/foo
-
-For absolute symlinks, use \\[dired-do-symlink].
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
(provide 'dired)
(run-hooks 'dired-load-hook) ; for your customizations
(eval-when-compile
(require 'cl))
-(eval-when-compile
- (when (featurep 'xemacs)
- ;; The `kbd' macro requires that the `read-kbd-macro' macro is available.
- (require 'edmacro)))
-
(defgroup ecomplete nil
"Electric completion of email addresses and the like."
:group 'mail)
(defun ecomplete-add-item (type key text)
(let ((elems (assq type ecomplete-database))
- (now (string-to-number
- (format "%.0f" (if (featurep 'emacs)
- (float-time)
- (require 'gnus-util)
- (gnus-float-time)))))
+ (now (string-to-number (format "%.0f" (float-time))))
entry)
(unless elems
(push (setq elems (list type)) ecomplete-database))
(defconst generate-autoload-section-continuation ";;;;;; "
"String to add on each continuation of the section header form.")
+;; In some ways it would be nicer to use a value that is recognizably
+;; not a time-value, eg t, but that can cause issues if an older Emacs
+;; that does not expect non-time-values loads the file.
+(defconst autoload--non-timestamp '(0 0 0 0)
+ "Value to insert when `autoload-timestamps' is nil.")
+
+(defvar autoload-timestamps nil ; experimental, see bug#22213
+ "Non-nil means insert a timestamp for each input file into the output.
+We use these in incremental updates of the output file to decide
+if we need to rescan an input file. If you set this to nil,
+then we use the timestamp of the output file instead. As a result:
+ - for fixed inputs, the output will be the same every time
+ - incremental updates of the output file might not be correct if:
+ i) the timestamp of the output file cannot be trusted (at least
+ relative to that of the input files)
+ ii) any of the input files can be modified during the time it takes
+ to create the output
+ iii) only a subset of the input files are scanned
+ These issues are unlikely to happen in practice, and would arguably
+ represent bugs in the build system. Item iii) will happen if you
+ use a command like `update-file-autoloads', though, since it only
+ checks a single input file.")
+
(defvar autoload-modified-buffers) ;Dynamically scoped var.
(defun make-autoload (form file &optional expansion)
(enable-local-eval nil))
;; We used to use `raw-text' to read this file, but this causes
;; problems when the file contains non-ASCII characters.
- (let ((delay-mode-hooks t))
- (find-file-noselect
- (autoload-ensure-default-file (autoload-generated-file))))))
+ (let* ((delay-mode-hooks t)
+ (file (autoload-generated-file))
+ (file-missing (not (file-exists-p file))))
+ (when file-missing
+ (autoload-ensure-default-file file))
+ (with-current-buffer
+ (find-file-noselect
+ (autoload-ensure-file-writeable
+ file))
+ ;; block backups when the file has just been created, since
+ ;; the backups will just be the auto-generated headers.
+ ;; bug#23203
+ (when file-missing
+ (setq buffer-backed-up t)
+ (save-buffer))
+ (current-buffer)))))
(defun autoload-generated-file ()
(expand-file-name generated-autoload-file
;;;###autoload
(put 'autoload-ensure-writable 'risky-local-variable t)
+(defun autoload-ensure-file-writeable (file)
+ ;; Probably pointless, but replaces the old AUTOGEN_VCS in lisp/Makefile,
+ ;; which was designed to handle CVSREAD=1 and equivalent.
+ (and autoload-ensure-writable
+ (let ((modes (file-modes file)))
+ (if (zerop (logand modes #o0200))
+ ;; Ignore any errors here, and let subsequent attempts
+ ;; to write the file raise any real error.
+ (ignore-errors (set-file-modes file (logior modes #o0200))))))
+ file)
+
(defun autoload-ensure-default-file (file)
"Make sure that the autoload file FILE exists, creating it if needed.
If the file already exists and `autoload-ensure-writable' is non-nil,
make it writable."
- (if (file-exists-p file)
- ;; Probably pointless, but replaces the old AUTOGEN_VCS in lisp/Makefile,
- ;; which was designed to handle CVSREAD=1 and equivalent.
- (and autoload-ensure-writable
- (let ((modes (file-modes file)))
- (if (zerop (logand modes #o0200))
- ;; Ignore any errors here, and let subsequent attempts
- ;; to write the file raise any real error.
- (ignore-errors (set-file-modes file (logior modes #o0200))))))
- (write-region (autoload-rubric file) nil file))
- file)
+ (write-region (autoload-rubric file) nil file))
(defun autoload-insert-section-header (outbuf autoloads load-name file time)
"Insert the section-header line,
;; We'd really want to just use
;; `emacs-internal' instead.
nil nil 'emacs-mule-unix)
- (nth 5 (file-attributes relfile))))
+ (if autoload-timestamps
+ (nth 5 (file-attributes relfile))
+ autoload--non-timestamp)))
(insert ";;; Generated autoloads from " relfile "\n")))
(insert generate-autoload-section-trailer))))
(or noninteractive
(let ((version-control 'never))
(save-buffer)))))
+;; FIXME This command should be deprecated.
+;; See http://debbugs.gnu.org/22213#41
;;;###autoload
(defun update-file-autoloads (file &optional save-after outfile)
"Update the autoloads for FILE.
(read-file-name "Write autoload definitions to file: ")))
(let* ((generated-autoload-file (or outfile generated-autoload-file))
(autoload-modified-buffers nil)
+ ;; We need this only if the output file handles more than one input.
+ ;; See http://debbugs.gnu.org/22213#38 and subsequent.
+ (autoload-timestamps t)
(no-autoloads (autoload-generate-file-autoloads file)))
(if autoload-modified-buffers
(if save-after (autoload-save-buffers))
(catch 'up-to-date
(let* ((buf (current-buffer))
(existing-buffer (if buffer-file-name buf))
+ (output-file (autoload-generated-file))
+ (output-time (if (file-exists-p output-file)
+ (nth 5 (file-attributes output-file))))
(found nil))
(with-current-buffer (autoload-find-generated-file)
;; This is to make generated-autoload-file have Unix EOLs, so
(file-time (nth 5 (file-attributes file))))
(if (and (or (null existing-buffer)
(not (buffer-modified-p existing-buffer)))
- (or
+ (cond
+ ;; FIXME? Arguably we should throw a
+ ;; user error, or some kind of warning,
+ ;; if we were called from update-file-autoloads,
+ ;; which can update only a single input file.
+ ;; It's not appropriate to use the output
+ ;; file modtime in such a case,
+ ;; if there are multiple input files
+ ;; contributing to the output.
+ ((and output-time
+ (member last-time
+ (list t autoload--non-timestamp)))
+ (not (time-less-p output-time file-time)))
;; last-time is the time-stamp (specifying
;; the last time we looked at the file) and
;; the file hasn't been changed since.
- (and (listp last-time)
- (not (time-less-p last-time file-time)))
+ ((listp last-time)
+ (not (time-less-p last-time file-time)))
;; last-time is an MD5 checksum instead.
- (and (stringp last-time)
- (equal last-time
- (md5 buf nil nil 'emacs-mule)))))
+ ((stringp last-time)
+ (equal last-time
+ (md5 buf nil nil 'emacs-mule)))))
(throw 'up-to-date nil)
(autoload-remove-section begin)
(setq found t))))
(generated-autoload-file
(if (called-interactively-p 'interactive)
(read-file-name "Write autoload definitions to file: ")
- generated-autoload-file)))
+ generated-autoload-file))
+ (output-time
+ (if (file-exists-p generated-autoload-file)
+ (nth 5 (file-attributes generated-autoload-file)))))
(with-current-buffer (autoload-find-generated-file)
(save-excursion
;; Remove the obsolete section.
(autoload-remove-section (match-beginning 0))
(setq last-time (nth 4 form))
- (when (listp last-time)
- (dolist (file file)
- (let ((file-time (nth 5 (file-attributes file))))
- (when (and file-time
- (not (time-less-p last-time file-time)))
- ;; file unchanged
- (push file no-autoloads)
- (setq files (delete file files)))))))
+ (if (member last-time (list t autoload--non-timestamp))
+ (setq last-time output-time))
+ (dolist (file file)
+ (let ((file-time (nth 5 (file-attributes file))))
+ (when (and file-time
+ (not (time-less-p last-time file-time)))
+ ;; file unchanged
+ (push file no-autoloads)
+ (setq files (delete file files))))))
((not (stringp file)))
((or (not (file-exists-p file))
;; Remove duplicates as well, just in case.
(member (expand-file-name file) autoload-excludes))
;; Remove the obsolete section.
(autoload-remove-section (match-beginning 0)))
- ((and (listp (nth 4 form))
- (not (time-less-p (nth 4 form)
- (nth 5 (file-attributes file)))))
+ ((not (time-less-p (let ((oldtime (nth 4 form)))
+ (if (member oldtime
+ (list
+ t autoload--non-timestamp))
+ output-time
+ oldtime))
+ (nth 5 (file-attributes file))))
;; File hasn't changed.
nil)
(t
(goto-char (point-max))
(search-backward "\f" nil t)
(autoload-insert-section-header
- (current-buffer) nil nil no-autoloads no-autoloads-time)
+ (current-buffer) nil nil no-autoloads (if autoload-timestamps
+ no-autoloads-time
+ autoload--non-timestamp))
(insert generate-autoload-section-trailer)))
(let ((version-control 'never))
radians-to-degrees rassq rassoc read-from-string regexp-quote
region-beginning region-end reverse round
sin sqrt string string< string= string-equal string-lessp string-to-char
- string-to-int string-to-number substring sxhash symbol-function
- symbol-name symbol-plist symbol-value string-make-unibyte
+ string-to-int string-to-number substring
+ sxhash sxhash-equal sxhash-eq sxhash-eql
+ symbol-function symbol-name symbol-plist symbol-value string-make-unibyte
string-make-multibyte string-as-multibyte string-as-unibyte
string-to-multibyte
tan truncate
(dolist (elt '(format message error))
(put elt 'byte-compile-format-like t))
-;; Warn if a custom definition fails to specify :group.
+;; Warn if a custom definition fails to specify :group, or :type.
(defun byte-compile-nogroup-warn (form)
- (if (and (memq (car form) '(custom-declare-face custom-declare-variable))
- byte-compile-current-group)
- ;; The group will be provided implicitly.
- nil
- (let ((keyword-args (cdr (cdr (cdr (cdr form)))))
- (name (cadr form)))
- (or (not (eq (car-safe name) 'quote))
- (and (eq (car form) 'custom-declare-group)
- (equal name ''emacs))
- (plist-get keyword-args :group)
- (not (and (consp name) (eq (car name) 'quote)))
- (byte-compile-warn
- "%s for `%s' fails to specify containing group"
- (cdr (assq (car form)
- '((custom-declare-group . defgroup)
- (custom-declare-face . defface)
- (custom-declare-variable . defcustom))))
- (cadr name)))
- ;; Update the current group, if needed.
- (if (and byte-compile-current-file ;Only when compiling a whole file.
- (eq (car form) 'custom-declare-group)
- (eq (car-safe name) 'quote))
- (setq byte-compile-current-group (cadr name))))))
+ (let ((keyword-args (cdr (cdr (cdr (cdr form)))))
+ (name (cadr form)))
+ (when (eq (car-safe name) 'quote)
+ (or (not (eq (car form) 'custom-declare-variable))
+ (plist-get keyword-args :type)
+ (byte-compile-warn
+ "defcustom for `%s' fails to specify type" (cadr name)))
+ (if (and (memq (car form) '(custom-declare-face custom-declare-variable))
+ byte-compile-current-group)
+ ;; The group will be provided implicitly.
+ nil
+ (or (and (eq (car form) 'custom-declare-group)
+ (equal name ''emacs))
+ (plist-get keyword-args :group)
+ (byte-compile-warn
+ "%s for `%s' fails to specify containing group"
+ (cdr (assq (car form)
+ '((custom-declare-group . defgroup)
+ (custom-declare-face . defface)
+ (custom-declare-variable . defcustom))))
+ (cadr name)))
+ ;; Update the current group, if needed.
+ (if (and byte-compile-current-file ;Only when compiling a whole file.
+ (eq (car form) 'custom-declare-group))
+ (setq byte-compile-current-group (cadr name)))))))
;; Warn if the function or macro is being redefined with a different
;; number of arguments.
;; * If a user option variable records a true-or-false
;; condition, give it a name that ends in `-flag'.
+ ;; "True ..." should be "Non-nil ..."
+ (when (looking-at "\"\\*?\\(True\\)\\b")
+ (if (checkdoc-autofix-ask-replace
+ (match-beginning 1) (match-end 1)
+ "Say \"Non-nil\" instead of \"True\"? "
+ "Non-nil")
+ nil
+ (checkdoc-create-error
+ "\"True\" should usually be \"Non-nil\""
+ (match-beginning 1) (match-end 1))))
+
;; If the variable has -flag in the name, make sure
(if (and (string-match "-flag$" (car fp))
(not (looking-at "\"\\*?Non-nil\\s-+means\\s-+")))
"Probably \"%s\" should be imperative \"%s\""
original replace)
(match-beginning 1) (match-end 1))))))
+ ;; "Return true ..." should be "Return non-nil ..."
+ (when (looking-at "\"Return \\(true\\)\\b")
+ (if (checkdoc-autofix-ask-replace
+ (match-beginning 1) (match-end 1)
+ "Say \"non-nil\" instead of \"true\"? "
+ "non-nil")
+ nil
+ (checkdoc-create-error
+ "\"true\" should usually be \"non-nil\""
+ (match-beginning 1) (match-end 1))))
;; Done with functions
)))
;;* When a documentation string refers to a Lisp symbol, write it as
Optional KEYMAP is the default keymap bound to the mode keymap.
If non-nil, it should be a variable name (whose value is a keymap),
or an expression that returns either a keymap or a list of
- arguments for `easy-mmode-define-keymap'. If you supply a KEYMAP
- argument that is not a symbol, this macro defines the variable
- MODE-map and gives it the value that KEYMAP specifies.
+ (KEY . BINDING) pairs where KEY and BINDING are suitable for
+ `define-key'. If you supply a KEYMAP argument that is not a
+ symbol, this macro defines the variable MODE-map and gives it
+ the value that KEYMAP specifies.
BODY contains code to execute each time the mode is enabled or disabled.
It is executed after toggling the mode, and before running MODE-hook.
;; Local Variables:
-;; generated-autoload-file: "eieio-core.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
;; End:
(provide 'eieio-compat)
(require 'cl-lib)
(require 'pcase)
+(require 'eieio-loaddefs)
;;;
;; A few functions that are better in the official EIEIO src, but
;; 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))))
;; 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)
(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))))
(cl-defmethod cl-generic-generalizers ((_specializer (head subclass)))
(list eieio--generic-subclass-generalizer))
-\f
-;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "6aca3c1b5f751a01331761da45fc4f5c")
-;;; Generated autoloads from eieio-compat.el
-
-(autoload 'eieio--defalias "eieio-compat" "\
-Like `defalias', but with less side-effects.
-More specifically, it has no side-effects at all when the new function
-definition is the same (`eq') as the old one.
-
-\(fn NAME BODY)" nil nil)
-
-(autoload 'defgeneric "eieio-compat" "\
-Create a generic function METHOD.
-DOC-STRING is the base documentation for this class. A generic
-function has no body, as its purpose is to decide which method body
-is appropriate to use. Uses `defmethod' to create methods, and calls
-`defgeneric' for you. With this implementation the ARGS are
-currently ignored. You can use `defgeneric' to apply specialized
-top level documentation to a method.
-
-\(fn METHOD ARGS &optional DOC-STRING)" nil t)
-
-(function-put 'defgeneric 'doc-string-elt '3)
-
-(make-obsolete 'defgeneric 'cl-defgeneric '"25.1")
-
-(autoload 'defmethod "eieio-compat" "\
-Create a new METHOD through `defgeneric' with ARGS.
-
-The optional second argument KEY is a specifier that
-modifies how the method is called, including:
- :before - Method will be called before the :primary
- :primary - The default if not specified
- :after - Method will be called after the :primary
- :static - First arg could be an object or class
-The next argument is the ARGLIST. The ARGLIST specifies the arguments
-to the method as with `defun'. The first argument can have a type
-specifier, such as:
- ((VARNAME CLASS) ARG2 ...)
-where VARNAME is the name of the local variable for the method being
-created. The CLASS is a class symbol for a class made with `defclass'.
-A DOCSTRING comes after the ARGLIST, and is optional.
-All the rest of the args are the BODY of the method. A method will
-return the value of the last form in the BODY.
-
-Summary:
-
- (defmethod mymethod [:before | :primary | :after | :static]
- ((typearg class-name) arg2 &optional opt &rest rest)
- \"doc-string\"
- body)
-
-\(fn METHOD &rest ARGS)" nil t)
-
-(function-put 'defmethod 'doc-string-elt '3)
-
-(make-obsolete 'defmethod 'cl-defmethod '"25.1")
-
-(autoload 'eieio--defgeneric-init-form "eieio-compat" "\
-
-
-\(fn METHOD DOC-STRING)" nil nil)
-
-(autoload 'eieio--defmethod "eieio-compat" "\
-
-
-\(fn METHOD KIND ARGCLASS CODE)" nil nil)
-
-(autoload 'eieio-defmethod "eieio-compat" "\
-Obsolete work part of an old version of the `defmethod' macro.
-
-\(fn METHOD ARGS)" nil nil)
-
-(make-obsolete 'eieio-defmethod 'cl-defmethod '"24.1")
-
-(autoload 'eieio-defgeneric "eieio-compat" "\
-Obsolete work part of an old version of the `defgeneric' macro.
-
-\(fn METHOD DOC-STRING)" nil nil)
-
-(make-obsolete 'eieio-defgeneric 'cl-defgeneric '"24.1")
-
-(autoload 'eieio-defclass "eieio-compat" "\
-
-
-\(fn CNAME SUPERCLASSES SLOTS OPTIONS)" nil nil)
-
-(make-obsolete 'eieio-defclass 'eieio-defclass-internal '"25.1")
-
-;;;***
-\f
-
(provide 'eieio-core)
;;; eieio-core.el ends here
(provide 'eieio-custom)
;; Local variables:
-;; generated-autoload-file: "eieio.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
;; End:
;;; eieio-custom.el ends here
(provide 'eieio-opt)
;; Local variables:
-;; generated-autoload-file: "eieio.el"
+;; generated-autoload-file: "eieio-loaddefs.el"
;; End:
;;; eieio-opt.el ends here
(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.
;; 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
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.")
(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.
\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
(advice-add 'edebug-prin1-to-string
:around #'eieio-edebug-prin1-to-string)
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "e8d466f8eee341f3da967c2931b28043")
-;;; Generated autoloads from eieio-custom.el
-
-(autoload 'customize-object "eieio-custom" "\
-Customize OBJ in a custom buffer.
-Optional argument GROUP is the sub-group of slots to display.
-
-\(fn OBJ &optional GROUP)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "5bd32f1033d0e2eee7c32c0ad28330fc")
-;;; Generated autoloads from eieio-opt.el
-
-(autoload 'eieio-browse "eieio-opt" "\
-Create an object browser window to show all objects.
-If optional ROOT-CLASS, then start with that, otherwise start with
-variable `eieio-default-superclass'.
-
-\(fn &optional ROOT-CLASS)" t nil)
-
-(define-obsolete-function-alias 'eieio-help-class 'cl--describe-class "25.1")
-
-(autoload 'eieio-help-constructor "eieio-opt" "\
-Describe CTR if it is a class constructor.
-
-\(fn CTR)" nil nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
(provide 'eieio)
;;; eieio ends here
(t
(kill-local-variable 'eldoc-message-commands)
(remove-hook 'post-command-hook 'eldoc-schedule-timer t)
- (remove-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area t))))
+ (remove-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area t)
+ (when eldoc-timer
+ (cancel-timer eldoc-timer)
+ (setq eldoc-timer nil)))))
;;;###autoload
(define-minor-mode global-eldoc-mode
(kill-buffer clone)))))))
+(defmacro ert-with-function-mocked (name mock &rest body)
+ "Mocks function NAME with MOCK and run BODY.
+
+Once BODY finishes (be it normally by returning a value or
+abnormally by throwing or signaling), the old definition of
+function NAME is restored.
+
+BODY may further change the mock with `fset'.
+
+If MOCK is nil, the function NAME is mocked with a function
+`ert-fail'ing when called.
+
+For example:
+
+ ;; Regular use, function is mocked inside the BODY:
+ (should (eq 2 (+ 1 1)))
+ (ert-with-function-mocked ((+ (lambda (a b) (- a b))))
+ (should (eq 0 (+ 1 1))))
+ (should (eq 2 (+ 1 1)))
+
+ ;; Macro correctly recovers from a throw or signal:
+ (should
+ (catch 'done
+ (ert-with-function-mocked ((+ (lambda (a b) (- a b))))
+ (should (eq 0 (+ 1 1))))
+ (throw 'done t)))
+ (should (eq 2 (+ 1 1)))
+"
+ (declare (indent 2))
+ (let ((old-var (make-symbol "old-var"))
+ (mock-var (make-symbol "mock-var")))
+ `(let ((,old-var (symbol-function (quote ,name))) (,mock-var ,mock))
+ (fset (quote ,name)
+ (or ,mock-var (lambda (&rest _)
+ (ert-fail (concat "`" ,(symbol-name name)
+ "' unexpectedly called.")))))
+ (unwind-protect
+ (progn ,@body)
+ (fset (quote ,name) ,old-var)))))
+
(provide 'ert-x)
;;; ert-x.el ends here
LIBRARY should be a string (the name of the library)."
;; If the library is byte-compiled, try to find a source library by
;; the same name.
- (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
- (setq library (replace-match "" t t library)))
+ (when (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
+ (setq library (replace-match "" t t library)))
(or
(locate-file library
- (or find-function-source-path load-path)
- (find-library-suffixes))
+ (or find-function-source-path load-path)
+ (find-library-suffixes))
(locate-file library
- (or find-function-source-path load-path)
- load-file-rep-suffixes)
+ (or find-function-source-path load-path)
+ load-file-rep-suffixes)
(when (file-name-absolute-p library)
(let ((rel (find-library--load-name library)))
(when rel
(locate-file rel
(or find-function-source-path load-path)
load-file-rep-suffixes)))))
+ (find-library--from-load-path library)
(error "Can't find library %s" library)))
+(defun find-library--from-load-path (library)
+ ;; In `load-history', the file may be ".elc", ".el", ".el.gz", and
+ ;; LIBRARY may be "foo.el" or "foo", so make sure that we get all
+ ;; potential matches, and then see whether any of them lead us to an
+ ;; ".el" or an ".el.gz" file.
+ (let* ((elc-regexp "\\.el\\(c\\(\\..*\\)?\\)\\'")
+ (suffix-regexp
+ (concat "\\("
+ (mapconcat 'regexp-quote (find-library-suffixes) "\\'\\|")
+ "\\|" elc-regexp "\\)\\'"))
+ (potentials
+ (mapcar
+ (lambda (entry)
+ (if (string-match suffix-regexp (car entry))
+ (replace-match "" t t (car entry))
+ (car entry)))
+ (seq-filter
+ (lambda (entry)
+ (string-match
+ (concat "\\`"
+ (regexp-quote
+ (replace-regexp-in-string suffix-regexp "" library))
+ suffix-regexp)
+ (file-name-nondirectory (car entry))))
+ load-history)))
+ result)
+ (dolist (file potentials)
+ (dolist (suffix (find-library-suffixes))
+ (when (not result)
+ (cond ((file-exists-p file)
+ (setq result file))
+ ((file-exists-p (concat file suffix))
+ (setq result (concat file suffix)))))))
+ result))
+
(defvar find-function-C-source-directory
(let ((dir (expand-file-name "src" source-directory)))
(if (file-accessible-directory-p dir) dir))
(cons (current-buffer) (match-beginning 0))))
;;;###autoload
-(defun find-library (library)
+(defun find-library (library &optional other-window)
"Find the Emacs Lisp source of LIBRARY.
-LIBRARY should be a string (the name of the library)."
+LIBRARY should be a string (the name of the library). If the
+optional OTHER-WINDOW argument (i.e., the command argument) is
+specified, pop to a different window before displaying the
+buffer."
(interactive
(let* ((dirs (or find-function-source-path load-path))
(suffixes (find-library-suffixes))
(when (and def (not (test-completion def table)))
(setq def nil))
(list
- (completing-read (if def (format "Library name (default %s): " def)
+ (completing-read (if def
+ (format "Library name (default %s): " def)
"Library name: ")
- table nil nil nil nil def))))
- (let ((buf (find-file-noselect (find-library-name library))))
- (condition-case nil (switch-to-buffer buf) (error (pop-to-buffer buf)))))
+ table nil nil nil nil def)
+ current-prefix-arg)))
+ (prog1
+ (funcall (if other-window
+ 'pop-to-buffer
+ 'pop-to-buffer-same-window)
+ (find-file-noselect (find-library-name library)))
+ (run-hooks 'find-function-after-hook)))
;;;###autoload
(defun find-function-search-for-symbol (symbol type library)
;; Copyright (C) 2014-2016 Free Software Foundation, Inc.
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; Maintainer: Artur Malabarba <bruce.connor.am@gmail.com>
+;; Author: Artur Malabarba <emacs@endlessparentheses.com>
+;; Package-Requires: ((emacs "24.1"))
;; Version: 1.0.4
;; Keywords: extensions lisp
;; Prefix: let-alist
;; Separator: -
+;; This is an Elpa :core package. Don't use functionality that is not
+;; compatible with Emacs 24.1.
+
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
(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)
(defvar lisp-doc-string-elt-property 'doc-string-elt
"The symbol property that holds the docstring position info.")
+(defconst lisp-prettify-symbols-alist '(("lambda" . ?λ))
+ "Alist of symbol/\"pretty\" characters to be displayed.")
;;;; Font-lock support.
(font-lock-extra-managed-props help-echo)
(font-lock-syntactic-face-function
. lisp-font-lock-syntactic-face-function)))
- (setq-local prettify-symbols-alist lisp--prettify-symbols-alist)
+ (setq-local prettify-symbols-alist lisp-prettify-symbols-alist)
(setq-local electric-pair-skip-whitespace 'chomp)
(setq-local electric-pair-open-newline-between-pairs nil))
:type 'hook
:group 'lisp)
-(defconst lisp--prettify-symbols-alist
- '(("lambda" . ?λ)))
-
;;; Generic Lisp mode.
(defvar lisp-mode-map
;;
;; The `fill-column' is temporarily bound to
;; `emacs-lisp-docstring-fill-column' if that value is an integer.
- (let ((paragraph-start (concat paragraph-start
- "\\|\\s-*\\([(;:\"]\\|`(\\|#'(\\)"))
+ (let ((paragraph-start
+ (concat paragraph-start
+ (format "\\|\\s-*\\([(;%s\"]\\|`(\\|#'(\\)"
+ ;; If we're inside a string (like the doc
+ ;; string), don't consider a colon to be
+ ;; a paragraph-start character.
+ (if (nth 3 (syntax-ppss))
+ ""
+ ":"))))
(paragraph-separate
(concat paragraph-separate "\\|\\s-*\".*[,\\.]$"))
(fill-column (if (and (integerp emacs-lisp-docstring-fill-column)
(require 'tabulated-list)
(require 'macroexp)
+(require 'url-handlers)
(defgroup package nil
"Manager for Emacs Lisp packages."
file)
(defvar generated-autoload-file)
+(defvar autoload-timestamps)
(defvar version-control)
(defun package-generate-autoloads (name pkg-dir)
(let* ((auto-name (format "%s-autoloads.el" name))
;;(ignore-name (concat name "-pkg.el"))
(generated-autoload-file (expand-file-name auto-name pkg-dir))
+ ;; We don't need 'em, and this makes the output reproducible.
+ (autoload-timestamps nil)
;; Silence `autoload-generate-file-autoloads'.
(noninteractive inhibit-message)
(backup-inhibited t)
(insert "\n")
(unless (and pkg-dir (not archive)) ; Installed pkgs don't have archive.
(package--print-help-section "Archive"
- (or archive "n/a") "\n"))
+ (or archive "n/a")))
(and version
(package--print-help-section "Version"
(package-version-join version)))
;; Author: Nicolas Petton <nicolas@petton.fr>
;; Keywords: sequences
-;; Version: 2.3
+;; Version: 2.14
;; Package: seq
;; Maintainer: emacs-devel@gnu.org
sequence)
(nreverse result)))
+(defun seq-map-indexed (function sequence)
+ "Return the result of applying FUNCTION to each element of SEQUENCE.
+Unlike `seq-map', FUNCTION takes two arguments: the element of
+the sequence, and its index within the sequence."
+ (let ((index 0))
+ (seq-map (lambda (elt)
+ (prog1
+ (funcall function elt index)
+ (setq index (1+ index))))
+ sequence)))
+
+
;; faster implementation for sequences (sequencep)
(cl-defmethod seq-map (function (sequence sequence))
(mapcar function sequence))
(cl-defmethod seq-sort (pred (list list))
(sort (seq-copy list) pred))
+(defun seq-sort-by (function pred sequence)
+ "Sort SEQUENCE using PRED as a comparison function.
+Elements of SEQUENCE are transformed by FUNCTION before being
+sorted. FUNCTION must be a function of one argument."
+ (seq-sort (lambda (a b)
+ (funcall pred
+ (funcall function a)
+ (funcall function b)))
+ sequence))
+
(cl-defgeneric seq-reverse (sequence)
"Return a sequence with elements of SEQUENCE in reverse order."
(let ((result '()))
(error nil)))
syntax-ppss-stats))
+(defvar-local syntax-ppss-table nil
+ "Syntax-table to use during `syntax-ppss', if any.")
+
(defun syntax-ppss (&optional pos)
"Parse-Partial-Sexp State at POS, defaulting to point.
The returned value is the same as that of `parse-partial-sexp'
(unless pos (setq pos (point)))
(syntax-propertize pos)
;;
+ (with-syntax-table (or syntax-ppss-table (syntax-table))
(let ((old-ppss (cdr syntax-ppss-last))
(old-pos (car syntax-ppss-last))
(ppss nil)
;; we may end up calling parse-partial-sexp with a position before
;; point-min. In that case, just parse from point-min assuming
;; a nil state.
- (parse-partial-sexp (point-min) pos)))))
+ (parse-partial-sexp (point-min) pos))))))
;; Debugging functions
--- /dev/null
+;;; timer-list.el --- list active timers in a buffer
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Maintainer: emacs-devel@gnu.org
+;; Package: emacs
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+;;;###autoload
+(defun timer-list (&optional _ignore-auto _nonconfirm)
+ "List all timers in a buffer."
+ (interactive)
+ (pop-to-buffer-same-window (get-buffer-create "*timer-list*"))
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (timer-list-mode)
+ (dolist (timer (append timer-list timer-idle-list))
+ (insert (format "%4s %10s %8s %s"
+ ;; Idle.
+ (if (aref timer 7)
+ "*"
+ " ")
+ ;; Next time.
+ (let ((time (float-time (list (aref timer 1)
+ (aref timer 2)
+ (aref timer 3)))))
+ (format "%.2f"
+ (if (aref timer 7)
+ time
+ (- (float-time (list (aref timer 1)
+ (aref timer 2)
+ (aref timer 3)))
+ (float-time)))))
+ ;; Repeat.
+ (let ((repeat (aref timer 4)))
+ (cond
+ ((numberp repeat)
+ (format "%.2f" (/ repeat 60)))
+ ((null repeat)
+ "-")
+ (t
+ (format "%s" repeat))))
+ ;; Function.
+ (let ((function (aref timer 5)))
+ (replace-regexp-in-string
+ "\n" " "
+ (cond
+ ((byte-code-function-p function)
+ (replace-regexp-in-string
+ "[^-A-Za-z0-9 ]" ""
+ (format "%s" function)))
+ (t
+ (format "%s" function)))))))
+ (put-text-property (line-beginning-position)
+ (1+ (line-beginning-position))
+ 'timer timer)
+ (insert "\n")))
+ (goto-char (point-min)))
+;; This command can be destructive if they don't know what they are
+;; doing. Kids, don't try this at home!
+;;;###autoload (put 'timer-list 'disabled "Beware: manually canceling timers can ruin your Emacs session.")
+
+(defvar timer-list-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "c" 'timer-list-cancel)
+ (easy-menu-define nil map ""
+ '("Timers"
+ ["Cancel" timer-list-cancel t]))
+ map))
+
+(define-derived-mode timer-list-mode special-mode "timer-list"
+ "Mode for listing and controlling timers."
+ (setq truncate-lines t)
+ (buffer-disable-undo)
+ (setq-local revert-buffer-function 'timer-list)
+ (setq buffer-read-only t)
+ (setq header-line-format
+ (format "%4s %10s %8s %s"
+ "Idle" "Next" "Repeat" "Function")))
+
+(defun timer-list-cancel ()
+ "Cancel the timer on the line under point."
+ (interactive)
+ (let ((timer (get-text-property (line-beginning-position) 'timer))
+ (inhibit-read-only t))
+ (unless timer
+ (error "No timer on the current line"))
+ (cancel-timer timer)
+ (delete-region (line-beginning-position)
+ (line-beginning-position 2))))
+
+(provide 'timer-list)
+
+;;; timer-list.el ends here
-;;; viper-cmd.el --- Vi command support for Viper
+;;; viper-cmd.el --- Vi command support for Viper -*- lexical-binding:t -*-
;; Copyright (C) 1997-2016 Free Software Foundation, Inc.
(defvar quail-mode)
(defvar quail-current-str)
(defvar mark-even-if-inactive)
-(defvar init-message)
+(defvar viper--init-message)
(defvar viper-initial)
(defvar undo-beg-posn)
(defvar undo-end-posn)
(eval-and-compile
- (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
+ (unless (fboundp 'declare-function) (defmacro declare-function (&rest _))))
;; end pacifier
;; This also takes care of the annoying incomplete lines in files.
;; Also, this fixes `undo' to work vi-style for complex commands.
-(defun viper-change-state-to-vi ()
+(defun viper-change-state-to-vi (&rest _)
"Change Viper state to Vi."
(interactive)
(if (and viper-first-time (not (viper-is-in-minibuffer)))
)
-(defun viper-change-state-to-emacs ()
+(defun viper-change-state-to-emacs (&rest _)
"Change Viper state to Emacs."
(interactive)
(or (viper-overlay-p viper-replace-overlay)
;; define functions to be executed
;; invoked by the `C' command
-(defun viper-exec-change (m-com com)
+(defun viper-exec-change (m-com _com)
(or (and (markerp viper-com-point) (marker-position viper-com-point))
(set-marker viper-com-point (point) (current-buffer)))
;; handle C cmd at the eol and at eob.
(viper-change (mark t) (point))))
;; this is invoked by viper-substitute-line
-(defun viper-exec-Change (m-com com)
+(defun viper-exec-Change (_m-com _com)
(save-excursion
(set-mark viper-com-point)
(viper-enlarge-region (mark t) (point))
(viper-change-state-to-insert)
))
-(defun viper-exec-delete (m-com com)
+(defun viper-exec-delete (_m-com _com)
(or (and (markerp viper-com-point) (marker-position viper-com-point))
(set-marker viper-com-point (point) (current-buffer)))
(let (chars-deleted)
(if viper-ex-style-motion
(if (and (eolp) (not (bolp))) (backward-char 1)))))
-(defun viper-exec-Delete (m-com com)
+(defun viper-exec-Delete (m-com _com)
(save-excursion
(set-mark viper-com-point)
(viper-enlarge-region (mark t) (point))
(back-to-indentation)))
;; save region
-(defun viper-exec-yank (m-com com)
+(defun viper-exec-yank (_m-com _com)
(or (and (markerp viper-com-point) (marker-position viper-com-point))
(set-marker viper-com-point (point) (current-buffer)))
(let (chars-saved)
(goto-char viper-com-point)))
;; save lines
-(defun viper-exec-Yank (m-com com)
+(defun viper-exec-Yank (_m-com _com)
(save-excursion
(set-mark viper-com-point)
(viper-enlarge-region (mark t) (point))
(viper-deactivate-mark)
(goto-char viper-com-point))
-(defun viper-exec-bang (m-com com)
+(defun viper-exec-bang (_m-com com)
(save-excursion
(set-mark viper-com-point)
(viper-enlarge-region (mark t) (point))
viper-last-shell-com)
t t)))
-(defun viper-exec-equals (m-com com)
+(defun viper-exec-equals (_m-com _com)
(save-excursion
(set-mark viper-com-point)
(viper-enlarge-region (mark t) (point))
(if (> (mark t) (point)) (exchange-point-and-mark))
(indent-region (mark t) (point) nil)))
-(defun viper-exec-shift (m-com com)
+(defun viper-exec-shift (_m-com com)
(save-excursion
(set-mark viper-com-point)
(viper-enlarge-region (mark t) (point))
;; this is needed because some commands fake com by setting it to ?r, which
;; denotes repeated insert command.
-(defsubst viper-exec-dummy (m-com com)
+(defsubst viper-exec-dummy (_m-com _com)
nil)
-(defun viper-exec-buffer-search (m-com com)
+(defun viper-exec-buffer-search (_m-com _com)
(setq viper-s-string
(regexp-quote (buffer-substring (point) viper-com-point)))
(setq viper-s-forward t)
(add-hook 'after-change-functions 'viper-undo-sentinel)
;; Hook used in viper-undo
-(defun viper-after-change-undo-hook (beg end len)
+(defun viper-after-change-undo-hook (beg end _len)
(if (and (boundp 'undo-in-progress) undo-in-progress)
(setq undo-beg-posn beg
undo-end-posn (or end beg))
"Undo previous change."
(interactive)
(message "undo!")
- (let ((modified (buffer-modified-p))
- (before-undo-pt (point-marker))
+ (let ((before-undo-pt (point-marker))
undo-beg-posn undo-end-posn)
;; the viper-after-change-undo-hook removes itself after the 1st invocation
"Quote string: "
nil
'viper-quote-region-history
+ ;; FIXME: Use comment-region.
(cond ((string-match "tex.*-mode" (symbol-name major-mode)) "%%")
((string-match "java.*-mode" (symbol-name major-mode)) "//")
((string-match "perl.*-mode" (symbol-name major-mode)) "#")
(funcall hook)
))
-;; This is a temp hook that uses free variables init-message and viper-initial.
+;; This is a temp hook that uses free variables viper--init-message and viper-initial.
;; A dirty feature, but it is the simplest way to have it do the right thing.
-;; The INIT-MESSAGE and VIPER-INITIAL vars come from the scope set by
+;; The VIPER--INIT-MESSAGE and VIPER-INITIAL vars come from the scope set by
;; viper-read-string-with-history
(defun viper-minibuffer-standard-hook ()
- (if (stringp init-message)
- (viper-tmp-insert-at-eob init-message))
+ (if (stringp viper--init-message)
+ (viper-tmp-insert-at-eob viper--init-message))
(when (stringp viper-initial)
;; don't wait if we have unread events or in kbd macro
(or unread-command-events
(viper-minibuffer-real-start) (point-max)))
found key cmd suff)
(goto-char (point-max))
- (if (and viper-smart-suffix-list (string-match "\\.$" file))
+ (if (and viper-smart-suffix-list (string-match "\\.\\'" file))
(progn
(while (and (not found) (< count len))
(setq suff (nth count viper-smart-suffix-list)
\f
;;; Reading string with history
-(defun viper-read-string-with-history (prompt &optional viper-initial
+(defun viper-read-string-with-history (prompt &optional initial
history-var default keymap
init-message)
- ;; Read string, prompting with PROMPT and inserting the VIPER-INITIAL
+ ;; Read string, prompting with PROMPT and inserting the INITIAL
;; value. Uses HISTORY-VAR. DEFAULT is the default value to accept if the
;; input is an empty string.
;; Default value is displayed until the user types something in the
;; KEYMAP is used, if given, instead of minibuffer-local-map.
;; INIT-MESSAGE is the message temporarily displayed after entering the
;; minibuffer.
- (let ((minibuffer-setup-hook
+ (let ((viper-initial initial)
+ (viper--init-message init-message)
+ (minibuffer-setup-hook
;; stolen from add-hook
(let ((old
(if (boundp 'minibuffer-setup-hook)
minibuffer-setup-hook
nil)))
(cons
- 'viper-minibuffer-standard-hook
+ #'viper-minibuffer-standard-hook
(if (or (not (listp old)) (eq (car old) 'lambda))
(list old) old))))
(val "")
temp-msg)
(setq keymap (or keymap minibuffer-local-map)
- viper-initial (or viper-initial "")
+ initial (or initial "")
temp-msg (if default
(format "(default %s) " default)
""))
(setq viper-incomplete-ex-cmd nil)
(setq val (read-from-minibuffer prompt
- (concat temp-msg viper-initial val padding)
+ (concat temp-msg initial val padding)
keymap nil history-var))
(setq minibuffer-setup-hook nil
padding (viper-array-to-string (this-command-keys))
(viper-looking-at-alphasep))))))
-(defun viper-end-of-word (arg &optional careful)
+(defun viper-end-of-word (arg &optional _careful)
"Move point to end of current word."
(interactive "P")
(viper-leave-region-active)
(setq msg "Search style remains unchanged")))
(princ msg t)))
-(defun viper-set-searchstyle-toggling-macros (unset &optional major-mode)
+(defun viper-set-searchstyle-toggling-macros (unset &optional mode)
"Set the macros for toggling the search style in Viper's vi-state.
The macro that toggles case sensitivity is bound to `//', and the one that
toggles regexp search is bound to `///'.
With a prefix argument, this function unsets the macros.
-If MAJOR-MODE is set, set the macros only in that major mode."
+If MODE is set, set the macros only in that major mode."
(interactive "P")
- (let (scope)
- (if (and major-mode (symbolp major-mode))
- (setq scope major-mode)
- (setq scope 't))
+ (let ((scope (if (and mode (symbolp mode)) mode t)))
(or noninteractive
(if (not unset)
(progn
\f
;;; Bug Report
+(defvar reporter-prompt-for-summary-p)
+
(defun viper-submit-report ()
"Submit bug report on Viper."
(interactive)
+ (defvar viper-device-type)
+ (defvar viper-color-display-p)
+ (defvar viper-frame-parameters)
+ (defvar viper-minibuffer-emacs-face)
+ (defvar viper-minibuffer-vi-face)
+ (defvar viper-minibuffer-insert-face)
(let ((reporter-prompt-for-summary-p t)
(viper-device-type (viper-device-type))
- color-display-p frame-parameters
- minibuffer-emacs-face minibuffer-vi-face minibuffer-insert-face
- varlist salutation window-config)
-
- ;; If mode info is needed, add variable to `let' and then set it below,
- ;; like we did with color-display-p.
- (setq color-display-p (if (viper-window-display-p)
+ (viper-color-display-p (if (viper-window-display-p)
(viper-color-display-p)
- 'non-x)
- minibuffer-vi-face (if (viper-has-face-support-p)
- (viper-get-face viper-minibuffer-vi-face)
- 'non-x)
- minibuffer-insert-face (if (viper-has-face-support-p)
- (viper-get-face
- viper-minibuffer-insert-face)
- 'non-x)
- minibuffer-emacs-face (if (viper-has-face-support-p)
- (viper-get-face
- viper-minibuffer-emacs-face)
- 'non-x)
- frame-parameters (if (fboundp 'frame-parameters)
- (frame-parameters (selected-frame))))
+ 'non-x))
+ (viper-frame-parameters (if (fboundp 'frame-parameters)
+ (frame-parameters (selected-frame))))
+ (viper-minibuffer-emacs-face (if (viper-has-face-support-p)
+ (viper-get-face
+ viper-minibuffer-emacs-face)
+ 'non-x))
+ (viper-minibuffer-vi-face (if (viper-has-face-support-p)
+ (viper-get-face viper-minibuffer-vi-face)
+ 'non-x))
+ (viper-minibuffer-insert-face (if (viper-has-face-support-p)
+ (viper-get-face
+ viper-minibuffer-insert-face)
+ 'non-x))
+ varlist salutation window-config)
(setq varlist (list 'viper-vi-minibuffer-minor-mode
'viper-insert-minibuffer-minor-mode
'viper-expert-level
'major-mode
'viper-device-type
- 'color-display-p
- 'frame-parameters
- 'minibuffer-vi-face
- 'minibuffer-insert-face
- 'minibuffer-emacs-face
+ 'viper-color-display-p
+ 'viper-frame-parameters
+ 'viper-minibuffer-vi-face
+ 'viper-minibuffer-insert-face
+ 'viper-minibuffer-emacs-face
))
(setq salutation "
Congratulations! You may have unearthed a bug in Viper!
-;;; viper.el --- A full-featured Vi emulator for Emacs and XEmacs,
+;;; viper.el --- A full-featured Vi emulator for Emacs and XEmacs, -*-lexical-binding:t -*-
;; a VI Plan for Emacs Rescue,
;; and a venomous VI PERil.
;; Viper Is also a Package for Emacs Rebels.
;; As an immediate solution, you can hit C-z to bring about the right mode.
;; An interim solution is to add an appropriate hook to the mode like this:
;;
-;; (add-hook 'your-favorite-mode 'viper-mode)
+;; (add-hook 'your-favorite-mode #'viper-mode)
;; or
-;; (add-hook 'your-favorite-mode 'viper-change-state-to-emacs)
+;; (add-hook 'your-favorite-mode #'viper-change-state-to-emacs)
;;
;; whichever applies. The right thing to do, however, is to complain to the
;; author of the respective package. (Sometimes they also neglect to equip
(defvar viper-major-mode-modifier-list)
;; end pacifier
-(require 'advice)
(require 'viper-init)
(require 'viper-keym)
whether to use Viper in the first place, while `viper-always', if nil, lets
user decide when to invoke Viper in a major mode."
:type 'boolean
- :tag "Always Invoke Viper"
- :group 'viper-misc)
+ :tag "Always Invoke Viper")
;; Non-viper variables that need to be saved in case the user decides to
;; de-viperize emacs.
DO NOT set this variable interactively, unless you are using the customization
widget."
:type '(choice (const nil) (const t) (const ask))
- :tag "Set Viper Mode on Loading"
- :group 'viper-misc)
+ :tag "Set Viper Mode on Loading")
(defcustom viper-vi-state-mode-list
'(fundamental-mode
mh-show-mode
)
"Major modes that require Vi command state."
- :type '(repeat symbol)
- :group 'viper-misc)
+ :type '(repeat symbol))
(defcustom viper-emacs-state-mode-list
'(Custom-mode
major mode has been placed on `viper-vi-state-mode-list' or
`viper-insert-state-mode-list'. So, don't place a new mode on this list,
unless it is coming up in a wrong Viper state."
- :type '(repeat symbol)
- :group 'viper-misc)
+ :type '(repeat symbol))
(defcustom viper-insert-state-mode-list
'(internal-ange-ftp-mode
eshell-mode
shell-mode)
"A list of major modes that should come up in Vi Insert state."
- :type '(repeat symbol)
- :group 'viper-misc)
+ :type '(repeat symbol))
;; used to set viper-major-mode-modifier-list in defcustom
(defun viper-apply-major-mode-modifiers (&optional symbol value)
(if symbol
(set symbol value))
- (mapcar (lambda (triple)
- (viper-modify-major-mode
- (nth 0 triple) (nth 1 triple) (eval (nth 2 triple))))
- viper-major-mode-modifier-list))
+ (mapc (lambda (triple)
+ (viper-modify-major-mode
+ (nth 0 triple) (nth 1 triple) (symbol-value (nth 2 triple))))
+ viper-major-mode-modifier-list))
;; We change standard bindings in some major modes, making them slightly
;; different than in "normal" vi/insert/emacs states
(const vi-state)
(const insert-state))
symbol))
- :set 'viper-apply-major-mode-modifiers
- :group 'viper-misc)
-
-
+ :set #'viper-apply-major-mode-modifiers)
\f
;; remove viper hooks from SYMBOL
(defun viper-remove-hooks (symbol)
(cond ((not (boundp symbol)) nil)
- ((not (listp (eval symbol))) nil)
+ ((not (listp (symbol-value symbol))) nil)
((string-match "-hook" (symbol-name symbol))
- (remove-hook symbol 'viper-mode)
- (remove-hook symbol 'viper-change-state-to-emacs)
- (remove-hook symbol 'viper-change-state-to-insert)
- (remove-hook symbol 'viper-change-state-to-vi)
- (remove-hook symbol 'viper-minibuffer-post-command-hook)
- (remove-hook symbol 'viper-minibuffer-setup-sentinel)
- (remove-hook symbol 'viper-major-mode-change-sentinel)
- (remove-hook symbol 'set-viper-state-in-major-mode)
- (remove-hook symbol 'viper-post-command-sentinel)
+ (remove-hook symbol #'viper-mode)
+ (remove-hook symbol #'viper-change-state-to-emacs)
+ (remove-hook symbol #'viper-change-state-to-insert)
+ (remove-hook symbol #'viper-change-state-to-vi)
+ (remove-hook symbol #'viper-minibuffer-post-command-hook)
+ (remove-hook symbol #'viper-minibuffer-setup-sentinel)
+ (remove-hook symbol #'viper-major-mode-change-sentinel)
+ (remove-hook symbol #'set-viper-state-in-major-mode)
+ (remove-hook symbol #'viper-post-command-sentinel)
)))
;; Remove local value in all existing buffers
(with-current-buffer buf
(kill-local-variable symbol))))
+(defvar viper--advice-list nil)
+
+(defun viper--advice-add (function where advice)
+ (advice-add function where advice)
+ (push (list function advice) viper--advice-list))
+
+(defun viper--deactivate-advice-list ()
+ (mapc #'advice-remove viper--advice-list)
+ (setq viper--advice-list nil))
(defun viper-go-away ()
"De-Viperize Emacs.
;; deactivate all advices done by Viper.
- (ad-deactivate-regexp "viper-")
+ (viper--deactivate-advice-list)
(setq viper-mode nil)
)
;; remove all hooks set by viper
- (mapatoms 'viper-remove-hooks)
- (remove-hook 'comint-mode-hook 'viper-comint-mode-hook)
- (remove-hook 'erc-mode-hook 'viper-comint-mode-hook)
- (remove-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel)
+ (mapatoms #'viper-remove-hooks)
+ (remove-hook 'comint-mode-hook #'viper-comint-mode-hook)
+ (remove-hook 'erc-mode-hook #'viper-comint-mode-hook)
+ (remove-hook 'change-major-mode-hook #'viper-major-mode-change-sentinel)
;; unbind Viper mouse bindings
(viper-unbind-mouse-search-key)
;; This advice is undone earlier, when all advices matching "viper-" are
;; deactivated.
(if (featurep 'xemacs)
- (remove-hook 'mouse-leave-frame-hook 'viper-remember-current-frame))
+ (remove-hook 'mouse-leave-frame-hook #'viper-remember-current-frame))
) ; end viper-go-away
;; clear the list of bufs that changed major mode
(setq viper-new-major-mode-buffer-list nil)
;; change the global value of hook
- (remove-hook 'viper-post-command-hooks 'set-viper-state-in-major-mode))
+ (remove-hook 'viper-post-command-hooks #'set-viper-state-in-major-mode))
;; sets up post-command-hook to turn viper-mode, if the current mode is
;; fundamental
(setq viper-new-major-mode-buffer-list
(cons (current-buffer) viper-new-major-mode-buffer-list))))
;; change the global value of hook
- (add-hook 'viper-post-command-hooks 'set-viper-state-in-major-mode t))
+ (add-hook 'viper-post-command-hooks #'set-viper-state-in-major-mode t))
;;; Handling of tty's ESC event
(defun viper-setup-ESC-to-escape (enable)
(if enable
- (add-hook 'tty-setup-hook 'viper-catch-tty-ESC)
- (remove-hook 'tty-setup-hook 'viper-catch-tty-ESC))
+ (add-hook 'tty-setup-hook #'viper-catch-tty-ESC)
+ (remove-hook 'tty-setup-hook #'viper-catch-tty-ESC))
(let ((seen ()))
(dolist (frame (frame-list))
(let ((terminal (frame-terminal frame)))
;; in Fundamental Mode and Vi state.
;; When viper-mode is executed in such a case, it will set the major mode
;; back to fundamental-mode.
- (if (eq (default-value 'major-mode) 'fundamental-mode)
+ (if (eq (default-value 'major-mode) #'fundamental-mode)
;; FIXME: We should use after-change-major-mode-hook instead!
- (setq-default major-mode 'viper-mode))
+ (setq-default major-mode #'viper-mode))
(viper-setup-ESC-to-escape t)
- (add-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel)
- (add-hook 'find-file-hooks 'set-viper-state-in-major-mode)
+ (add-hook 'change-major-mode-hook #'viper-major-mode-change-sentinel)
+ (add-hook 'find-file-hooks #'set-viper-state-in-major-mode)
;; keep this because many modes we don't know about use this hook
(defvar text-mode-hook)
- (add-hook 'text-mode-hook 'viper-mode)
+ (add-hook 'text-mode-hook #'viper-mode)
(defvar emerge-startup-hook)
- (add-hook 'emerge-startup-hook 'viper-change-state-to-emacs)
+ (add-hook 'emerge-startup-hook #'viper-change-state-to-emacs)
;; if viper is started from .emacs, it might be impossible to get certain
;; info about the display and windows until emacs initialization is complete
))
;; Tell vc-diff to put *vc* in Vi mode
- (eval-after-load
- "vc"
- '(defadvice vc-diff (after viper-vc-ad activate)
- "Force Vi state in VC diff buffer."
- (viper-change-state-to-vi)))
-
- (eval-after-load
- "emerge"
- '(defadvice emerge-quit (after viper-emerge-advice activate)
- "Run `viper-change-state-to-vi' after quitting emerge."
- (viper-change-state-to-vi)))
+ (viper--advice-add 'vc-diff :after #'viper-change-state-to-vi)
+ (viper--advice-add 'emerge-quit :after #'viper-change-state-to-vi)
;; passwd.el sets up its own buffer, which turns up in Vi mode,
;; thus overriding the local map. We don't need Vi mode here.
- (eval-after-load
- "passwd"
- '(defadvice read-passwd-1 (before viper-passwd-ad activate)
- "Switch to Emacs state while reading password."
- (viper-change-state-to-emacs)))
-
- (defadvice self-insert-command (around viper-self-insert-ad activate)
- "Ignore all self-inserting keys in the vi-state."
+ (viper--advice-add 'read-passwd-1 :before #'viper-change-state-to-emacs)
+
+ (viper--advice-add 'self-insert-command :around
+ (lambda (orig-fun &rest args)
;; FIXME: Use remapping?
(if (and (eq viper-current-state 'vi-state)
;; Do not use called-interactively-p here. XEmacs does not have it
;; (called-interactively-p 'interactive))
(interactive-p))
(beep 1)
- ad-do-it
- ))
+ (apply orig-fun args))))
- (defadvice set-cursor-color (after viper-set-cursor-color-ad activate)
+ (viper--advice-add 'set-cursor-color :after
+ (lambda (color-name)
"Change cursor color in VI state."
(modify-frame-parameters
- (selected-frame)
- (list (cons 'viper-vi-state-cursor-color (ad-get-arg 0))))
- (setq viper-vi-state-cursor-color (ad-get-arg 0))
- )
+ (selected-frame)
+ (list (cons 'viper-vi-state-cursor-color color-name)))
+ (setq viper-vi-state-cursor-color color-name)))
+
(when (and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
;; needs to be as early as possible
)
;; Emacs shell, ange-ftp, and comint-based modes
- (add-hook 'comint-mode-hook 'viper-comint-mode-hook) ; comint
- (add-hook 'erc-mode-hook 'viper-comint-mode-hook) ; ERC
+ (add-hook 'comint-mode-hook #'viper-comint-mode-hook) ; comint
+ (add-hook 'erc-mode-hook #'viper-comint-mode-hook) ; ERC
(add-hook 'eshell-mode-hook
(lambda () (setq viper-auto-indent nil)))
;; For RMAIL users.
;; Put buf in Emacs state after edit.
- (eval-after-load
- "rmailedit"
- '(defadvice rmail-cease-edit (after viper-rmail-advice activate)
- "Switch to Emacs state when done editing message."
- (viper-change-state-to-emacs)))
-
- ;; ISO accents
- ;; Need to do it after loading iso-acc, or else this loading will wipe out
- ;; the advice.
- (eval-after-load
- "iso-acc"
- '(defadvice iso-accents-mode (around viper-iso-accents-advice activate)
+ (viper--advice-add 'rmail-cease-edit :after #'viper-change-state-to-emacs)
+
+ ;; ISO accents.
+ (viper--advice-add 'iso-accents-mode :after
+ (lambda (arg &rest _)
"Set viper-automatic-iso-accents to iso-accents-mode."
- (let ((arg (ad-get-arg 0)))
- ad-do-it
- (setq viper-automatic-iso-accents
+ (defvar iso-accents-mode)
+ (setq viper-automatic-iso-accents
(if (eq viper-current-state 'vi-state)
(if arg
;; if iso-accents-mode was called with positive arg, turn
(if (memq viper-current-state '(vi-state insert-state replace-state))
(message "Viper ISO accents mode: %s"
(if viper-automatic-iso-accents "on" "off")))
- )))
+ ))
;; International input methods
- (if (featurep 'emacs)
- (eval-after-load "mule-cmds"
- '(progn
- (defadvice deactivate-input-method (after viper-mule-advice activate)
- "Set viper-special-input-method to disable intl. input methods."
- (viper-deactivate-input-method-action))
- (defadvice activate-input-method (after viper-mule-advice activate)
- "Set viper-special-input-method to enable intl. input methods."
- (viper-activate-input-method-action))
- ))
+ (if nil ;; (featurep 'emacs) ;;The hooks should now work!
+ (progn
+ (viper--advice-add 'deactivate-input-method :after
+ #'viper-deactivate-input-method-action)
+ (viper--advice-add 'activate-input-method :after
+ #'viper-activate-input-method-action))
;; XEmacs Although these hooks exist in Emacs, they don't seem to be always
;; called on input-method activation/deactivation, so we the above advise
;; functions instead.
(eval-after-load "mule-cmds"
'(progn
(add-hook 'input-method-activate-hook
- 'viper-activate-input-method-action t)
+ #'viper-activate-input-method-action t)
(add-hook 'input-method-deactivate-hook
- 'viper-deactivate-input-method-action t)))
+ #'viper-deactivate-input-method-action t)))
)
- (eval-after-load "mule-cmds"
- '(defadvice toggle-input-method (around viper-mule-advice activate)
+ (viper--advice-add 'toggle-input-method :around
+ (lambda (orig-fun &rest args)
"Adjust input-method toggling in vi-state."
(if (and viper-special-input-method (eq viper-current-state 'vi-state))
- (viper-deactivate-input-method)
- ad-do-it)))
+ (viper-deactivate-input-method)
+ (apply orig-fun args))))
) ; viper-set-hooks
"Force to read key via `viper-read-key-sequence'."
(interactive (list (viper-read-key-sequence "Describe key: "))))
;; Emacs
- (defadvice describe-key (before viper-describe-key-ad protect activate)
+ (viper--advice-add 'describe-key :before
+ (lambda (&rest _)
"Force to read key via `viper-read-key-sequence'."
- (interactive (let (key)
- (setq key (viper-read-key-sequence
- "Describe key (or click or menu item): "))
+ (interactive (let ((key (viper-read-key-sequence
+ "Describe key (or click or menu item): ")))
(list key
(prefix-numeric-value current-prefix-arg)
;; If KEY is a down-event, read also the
(and (> (length key) 1)
(eventp (aref key 1))
(memq 'down (event-modifiers (aref key 1)))))
- (read-event))))))
+ (read-event)))))
+ nil))
+
) ; (if (featurep 'xemacs)
(if (featurep 'xemacs)
"Force to read key via `viper-read-key-sequence'."
(interactive (list (viper-read-key-sequence "Describe key briefly: "))))
;; Emacs
- (defadvice describe-key-briefly
- (before viper-describe-key-briefly-ad protect activate)
+ (viper--advice-add 'describe-key-briefly :before
+ (lambda (&rest _)
"Force to read key via `viper-read-key-sequence'."
- (interactive (let (key)
- (setq key (viper-read-key-sequence
- "Describe key (or click or menu item): "))
+ (interactive (let ((key (viper-read-key-sequence
+ "Describe key (or click or menu item): ")))
;; If KEY is a down-event, read and discard the
;; corresponding up-event.
(and (vectorp key)
(list key
(if current-prefix-arg
(prefix-numeric-value current-prefix-arg))
- 1))))
+ 1)))
+ nil))
) ; (if (featurep 'xemacs)
- (defadvice find-file (before viper-add-suffix-advice activate)
- "Use `read-file-name' for reading arguments."
- (interactive (cons (read-file-name "Find file: " nil default-directory)
- ;; XEmacs: if Mule & prefix arg, ask for coding system
- (cond ((and (featurep 'xemacs) (featurep 'mule))
- (list
- (and current-prefix-arg
- (read-coding-system "Coding-system: "))))
- ;; Emacs: do wildcards
- ((and (featurep 'emacs) (boundp 'find-file-wildcards))
- (list find-file-wildcards))))
- ))
-
- (defadvice find-file-other-window (before viper-add-suffix-advice activate)
- "Use `read-file-name' for reading arguments."
- (interactive (cons (read-file-name "Find file in other window: "
- nil default-directory)
- ;; XEmacs: if Mule & prefix arg, ask for coding system
- (cond ((and (featurep 'xemacs) (featurep 'mule))
- (list
- (and current-prefix-arg
- (read-coding-system "Coding-system: "))))
- ;; Emacs: do wildcards
- ((and (featurep 'emacs) (boundp 'find-file-wildcards))
- (list find-file-wildcards))))
- ))
-
-
- (defadvice find-file-other-frame (before viper-add-suffix-advice activate)
- "Use `read-file-name' for reading arguments."
- (interactive (cons (read-file-name "Find file in other frame: "
- nil default-directory)
- ;; XEmacs: if Mule & prefix arg, ask for coding system
- (cond ((and (featurep 'xemacs) (featurep 'mule))
- (list
- (and current-prefix-arg
- (read-coding-system "Coding-system: "))))
- ;; Emacs: do wildcards
- ((and (featurep 'emacs) (boundp 'find-file-wildcards))
- (list find-file-wildcards))))
- ))
-
-
- (defadvice read-file-name (around viper-suffix-advice activate)
+ ;; FIXME: The default already uses read-file-name, so it looks like this
+ ;; advice is not needed any more.
+ ;; (defadvice find-file (before viper-add-suffix-advice activate)
+ ;; "Use `read-file-name' for reading arguments."
+ ;; (interactive (cons (read-file-name "Find file: " nil default-directory)
+ ;; ;; XEmacs: if Mule & prefix arg, ask for coding system
+ ;; (cond ((and (featurep 'xemacs) (featurep 'mule))
+ ;; (list
+ ;; (and current-prefix-arg
+ ;; (read-coding-system "Coding-system: "))))
+ ;; ;; Emacs: do wildcards
+ ;; ((and (featurep 'emacs) (boundp 'find-file-wildcards))
+ ;; (list find-file-wildcards))))
+ ;; ))
+ ;; (defadvice find-file-other-window (before viper-add-suffix-advice activate)
+ ;; "Use `read-file-name' for reading arguments."
+ ;; (interactive (cons (read-file-name "Find file in other window: "
+ ;; nil default-directory)
+ ;; ;; XEmacs: if Mule & prefix arg, ask for coding system
+ ;; (cond ((and (featurep 'xemacs) (featurep 'mule))
+ ;; (list
+ ;; (and current-prefix-arg
+ ;; (read-coding-system "Coding-system: "))))
+ ;; ;; Emacs: do wildcards
+ ;; ((and (featurep 'emacs) (boundp 'find-file-wildcards))
+ ;; (list find-file-wildcards))))
+ ;; ))
+ ;; (defadvice find-file-other-frame (before viper-add-suffix-advice activate)
+ ;; "Use `read-file-name' for reading arguments."
+ ;; (interactive (cons (read-file-name "Find file in other frame: "
+ ;; nil default-directory)
+ ;; ;; XEmacs: if Mule & prefix arg, ask for coding system
+ ;; (cond ((and (featurep 'xemacs) (featurep 'mule))
+ ;; (list
+ ;; (and current-prefix-arg
+ ;; (read-coding-system "Coding-system: "))))
+ ;; ;; Emacs: do wildcards
+ ;; ((and (featurep 'emacs) (boundp 'find-file-wildcards))
+ ;; (list find-file-wildcards))))
+ ;; ))
+
+
+ (viper--advice-add 'read-file-name :around
+ (lambda (orig-fun &rest args)
"Tell `exit-minibuffer' to run `viper-file-add-suffix' as a hook."
(let ((viper-minibuffer-exit-hook
(append viper-minibuffer-exit-hook
'(viper-minibuffer-trim-tail viper-file-add-suffix))))
- ad-do-it))
+ (apply orig-fun args))))
- (defadvice start-kbd-macro (after viper-kbd-advice activate)
+ (viper--advice-add 'start-kbd-macro :after
+ (lambda (&rest _)
"Remove Viper's intercepting bindings for C-x ).
- This may be needed if the previous `:map' command terminated abnormally."
+This may be needed if the previous `:map' command terminated abnormally."
(define-key viper-vi-intercept-map "\C-x)" nil)
(define-key viper-insert-intercept-map "\C-x)" nil)
- (define-key viper-emacs-intercept-map "\C-x)" nil))
+ (define-key viper-emacs-intercept-map "\C-x)" nil)))
- (defadvice add-minor-mode (after
- viper-advice-add-minor-mode
- (toggle name &optional keymap after toggle-fun)
- activate)
+ (viper--advice-add 'add-minor-mode :after
+ (lambda (&rest _)
"Run viper-normalize-minor-mode-map-alist after adding a minor mode."
(viper-normalize-minor-mode-map-alist)
(unless
(and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
- (setq-default minor-mode-map-alist minor-mode-map-alist)))
+ (setq-default minor-mode-map-alist minor-mode-map-alist))))
;; catch frame switching event
(if (viper-window-display-p)
(if (featurep 'xemacs)
- (add-hook 'mouse-leave-frame-hook
- 'viper-remember-current-frame)
- (defadvice handle-switch-frame (before viper-frame-advice activate)
- "Remember the selected frame before the switch-frame event."
- (viper-remember-current-frame (selected-frame)))) )
+ (add-hook 'mouse-leave-frame-hook
+ #'viper-remember-current-frame)
+ (viper--advice-add 'handle-switch-frame :before
+ (lambda (&rest _)
+ "Remember the selected frame before the switch-frame event."
+ (viper-remember-current-frame (selected-frame))))))
) ; end viper-non-hook-settings
(cons 'viper-re-search (list viper-re-search)))))
-(if viper-mode
- (progn
- (viper-set-minibuffer-style)
- (if viper-buffer-search-char
- (viper-buffer-search-enable))
- (viper-update-syntax-classes 'set-default)
- ))
-
\f
-;;; Familiarize Viper with some minor modes that have their own keymaps
-(if viper-mode
- (progn
- (viper-harness-minor-mode "compile")
- (viper-harness-minor-mode "outline")
- (viper-harness-minor-mode "allout")
- (viper-harness-minor-mode "xref")
- (viper-harness-minor-mode "lmenu")
- (viper-harness-minor-mode "vc")
- (viper-harness-minor-mode "ltx-math") ; LaTeX-math-mode in AUC-TeX, which
- (viper-harness-minor-mode "latex") ; sits in one of these two files
- (viper-harness-minor-mode "cyrillic")
- (viper-harness-minor-mode "russian")
- (viper-harness-minor-mode "view-less")
- (viper-harness-minor-mode "view")
- (viper-harness-minor-mode "reftex")
- (viper-harness-minor-mode "flyspell")
- ))
-
-
;; Intercept maps could go in viper-keym.el
;; We keep them here in case someone redefines them in viper-custom-file-name
-(define-key viper-vi-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
-(define-key viper-insert-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
+(define-key viper-vi-intercept-map viper-ESC-key #'viper-intercept-ESC-key)
+(define-key viper-insert-intercept-map viper-ESC-key #'viper-intercept-ESC-key)
;; This is taken care of by viper-insert-global-user-map.
-;;(define-key viper-replace-map viper-ESC-key 'viper-intercept-ESC-key)
+;;(define-key viper-replace-map viper-ESC-key #'viper-intercept-ESC-key)
;; The default viper-toggle-key is \C-z; for the novice, it suspends or
;; iconifies Emacs
(define-key viper-vi-intercept-map viper-toggle-key 'viper-toggle-key-action)
(define-key
- viper-emacs-intercept-map viper-toggle-key 'viper-change-state-to-vi)
+ viper-emacs-intercept-map viper-toggle-key #'viper-change-state-to-vi)
-;;; Removed to avoid bad interaction with cua-mode.
-;;; Escape from Emacs and Insert modes to Vi for one command
+;; Removed to avoid bad interaction with cua-mode.
+;; Escape from Emacs and Insert modes to Vi for one command
;;(define-key viper-emacs-intercept-map "\C-c\\" 'viper-escape-to-vi)
;;(define-key viper-insert-intercept-map "\C-c\\" 'viper-escape-to-vi)
-(if viper-mode
- (setq-default viper-emacs-intercept-minor-mode t
- viper-emacs-local-user-minor-mode t
- viper-emacs-global-user-minor-mode t
- viper-emacs-kbd-minor-mode t
- viper-emacs-state-modifier-minor-mode t))
-(if (and viper-mode (eq viper-current-state 'emacs-state))
- (setq viper-emacs-intercept-minor-mode t
- viper-emacs-local-user-minor-mode t
- viper-emacs-global-user-minor-mode t
- viper-emacs-kbd-minor-mode t
- viper-emacs-state-modifier-minor-mode t))
-
-
-(if (and viper-mode
- (or viper-always
- (and (< viper-expert-level 5) (> viper-expert-level 0))))
- (viper-set-hooks))
-
-;; Let all minor modes take effect after loading.
-;; This may not be enough, so we also set default minor-mode-alist.
-;; Without setting the default, new buffers that come up in emacs mode have
-;; minor-mode-map-alist = nil, unless we call viper-change-state-*
-(if (and viper-mode (eq viper-current-state 'emacs-state))
- (progn
- (viper-change-state-to-emacs)
- (unless
- (and (fboundp 'add-to-ordered-list)
- (boundp 'emulation-mode-map-alists))
- (setq-default minor-mode-map-alist minor-mode-map-alist))
- ))
+(when viper-mode
+ (viper-set-minibuffer-style)
+ (if viper-buffer-search-char
+ (viper-buffer-search-enable))
+ (viper-update-syntax-classes 'set-default)
+
+ ;; Familiarize Viper with some minor modes that have their own keymaps
+ (viper-harness-minor-mode "compile")
+ (viper-harness-minor-mode "outline")
+ (viper-harness-minor-mode "allout")
+ (viper-harness-minor-mode "xref")
+ (viper-harness-minor-mode "lmenu")
+ (viper-harness-minor-mode "vc")
+ (viper-harness-minor-mode "ltx-math") ; LaTeX-math-mode in AUC-TeX, which
+ (viper-harness-minor-mode "latex") ; sits in one of these two files
+ (viper-harness-minor-mode "cyrillic")
+ (viper-harness-minor-mode "russian")
+ (viper-harness-minor-mode "view-less")
+ (viper-harness-minor-mode "view")
+ (viper-harness-minor-mode "reftex")
+ (viper-harness-minor-mode "flyspell")
+
+ (setq-default viper-emacs-intercept-minor-mode t
+ viper-emacs-local-user-minor-mode t
+ viper-emacs-global-user-minor-mode t
+ viper-emacs-kbd-minor-mode t
+ viper-emacs-state-modifier-minor-mode t)
+ (if (eq viper-current-state 'emacs-state)
+ (setq viper-emacs-intercept-minor-mode t
+ viper-emacs-local-user-minor-mode t
+ viper-emacs-global-user-minor-mode t
+ viper-emacs-kbd-minor-mode t
+ viper-emacs-state-modifier-minor-mode t))
+
+
+ (if (or viper-always
+ (and (< viper-expert-level 5) (> viper-expert-level 0)))
+ (viper-set-hooks))
+
+ ;; Let all minor modes take effect after loading.
+ ;; This may not be enough, so we also set default minor-mode-alist.
+ ;; Without setting the default, new buffers that come up in emacs mode have
+ ;; minor-mode-map-alist = nil, unless we call viper-change-state-*
+ (when (eq viper-current-state 'emacs-state)
+ (viper-change-state-to-emacs)
+ (unless
+ (and (fboundp 'add-to-ordered-list)
+ (boundp 'emulation-mode-map-alists))
+ (setq-default minor-mode-map-alist minor-mode-map-alist))
+ )
-(if (and viper-mode (this-major-mode-requires-vi-state major-mode))
- (viper-mode))
+ (if (this-major-mode-requires-vi-state major-mode)
+ (viper-mode))
-(if viper-mode
- (setq initial-major-mode
- `(lambda ()
- (funcall (quote ,initial-major-mode))
- (set-viper-state-in-major-mode))
- ))
+ (add-function :after initial-major-mode #'set-viper-state-in-major-mode))
: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
(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)
(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)
-;;; erc-backend.el --- Backend network communication for ERC
+;;; erc-backend.el --- Backend network communication for ERC -*- lexical-binding:t -*-
;; Copyright (C) 2004-2016 Free Software Foundation, Inc.
:type '(repeat (cons (string :tag "Target")
coding-system)))
-(defcustom erc-server-connect-function 'erc-open-network-stream
+(defcustom erc-server-connect-function #'erc-open-network-stream
"Function used to initiate a connection.
It should take same arguments as `open-network-stream' does."
:group 'erc-server
(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.
(setq erc-server-last-sent-time 0)
(setq erc-server-lines-sent 0)
(let ((erc-server-connect-function (or erc-session-connector
- 'erc-open-network-stream)))
+ #'erc-open-network-stream)))
(erc-open erc-session-server erc-session-port erc-server-current-nick
erc-session-user-full-name t erc-session-password)))))
-(defun erc-server-delayed-reconnect (event buffer)
+(defun erc-server-delayed-reconnect (buffer)
(if (buffer-live-p buffer)
(with-current-buffer buffer
(erc-server-reconnect))))
(or erc-server-reconnecting
(and erc-server-auto-reconnect
(not erc-server-banned)
- (not erc-server-error-occurred)
;; make sure we don't infinitely try to reconnect, unless the
;; user wants that
(or (eq erc-server-reconnect-attempts t)
(erc-update-mode-line)
(set-buffer-modified-p nil))
;; reconnect
- (condition-case err
+ (condition-case nil
(progn
(setq erc-server-reconnecting nil
erc-server-reconnect-count (1+ erc-server-reconnect-count))
(setq delay erc-server-reconnect-timeout)
(run-at-time delay nil
- #'erc-server-delayed-reconnect event buffer))
+ #'erc-server-delayed-reconnect buffer))
(error (unless (integerp erc-server-reconnect-attempts)
(message "%s ... %s"
"Reconnecting until we succeed"
"kill the ERC server buffer to stop"))
- (erc-server-delayed-reconnect event buffer))))))))
+ (erc-server-delayed-reconnect buffer))))))))
(defun erc-process-sentinel-1 (event buffer)
"Called when `erc-process-sentinel' has decided that we're disconnecting.
(+ erc-server-flood-penalty
erc-server-flood-last-message))
(erc-log-irc-protocol str 'outbound)
- (condition-case err
+ (condition-case nil
(progn
;; Set encoding just before sending the string
(when (fboundp 'set-process-coding-system)
(erc-log (concat "erc-server-send-queue: "
msg "(" (buffer-name buffer) ")"))
(when (erc-server-process-alive)
- (condition-case err
+ (condition-case nil
;; Set encoding just before sending the string
(progn
(when (fboundp 'set-process-coding-system)
(erc-with-server-buffer
(run-hook-with-args 'erc-timer-hook (erc-current-time)))))
-(add-hook 'erc-default-server-functions 'erc-handle-unknown-server-response)
+(add-hook 'erc-default-server-functions #'erc-handle-unknown-server-response)
(defun erc-handle-unknown-server-response (proc parsed)
"Display unknown server response's message."
" "
(erc-response.command parsed)
" "
- (mapconcat 'identity (erc-response.command-args parsed)
+ (mapconcat #'identity (erc-response.command-args parsed)
" "))))
(erc-display-message parsed 'notice proc line)))
;; value at this point, so I default to nil, and (add-hook)
;; unconditionally
(defvar ,hook-name nil ,(format hook-doc name))
- (add-to-list ',hook-name ',fn-name)
+ (add-hook ',hook-name #',fn-name)
;; Handler function
(defun ,fn-name (proc parsed)
,fn-doc
+ (ignore proc parsed)
,@fn-body)
;; Make find-function and find-variable find them
(define-erc-response-handler (MODE)
"Handle server mode changes." nil
(let ((tgt (car (erc-response.command-args parsed)))
- (mode (mapconcat 'identity (cdr (erc-response.command-args parsed))
+ (mode (mapconcat #'identity (cdr (erc-response.command-args parsed))
" ")))
(pcase-let ((`(,nick ,login ,host)
(erc-parse-user (erc-response.sender parsed))))
(cons nn (cdr erc-default-recipients)))
(rename-buffer nn t) ; bug#12002
(erc-update-mode-line)
- (add-to-list 'bufs (current-buffer)))))
+ (cl-pushnew (current-buffer) bufs))))
(erc-update-user-nick nick nn host nil nil login)
(cond
((string= nick (erc-current-nick))
- (add-to-list 'bufs (erc-server-buffer))
+ (cl-pushnew (erc-server-buffer) bufs)
(erc-set-current-nick nn)
(erc-update-mode-line)
(setq erc-nick-change-attempt-count 0)
;; FIXME: need clean way of specifying extra hooks in
;; define-erc-response-handler.
-(add-hook 'erc-server-PRIVMSG-functions 'erc-auto-query)
+(add-hook 'erc-server-PRIVMSG-functions #'erc-auto-query)
(define-erc-response-handler (QUIT)
"Another user has quit IRC." nil
(define-erc-response-handler (WALLOPS)
"Display a WALLOPS message." nil
(let ((message (erc-response.contents parsed)))
- (pcase-let ((`(,nick ,login ,host)
+ (pcase-let ((`(,nick ,_login ,_host)
(erc-parse-user (erc-response.sender parsed))))
(erc-display-message
parsed 'notice nil
A server may send more than one 005 message."
nil
- (let ((line (mapconcat 'identity
+ (let ((line (mapconcat #'identity
(setf (erc-response.command-args parsed)
(cdr (erc-response.command-args parsed)))
" ")))
(define-erc-response-handler (221)
"Display the current user modes." nil
(let* ((nick (car (erc-response.command-args parsed)))
- (modes (mapconcat 'identity
+ (modes (mapconcat #'identity
(cdr (erc-response.command-args parsed)) " ")))
(erc-set-modes nick modes)
(erc-display-message parsed 'notice 'active 's221 ?n nick ?m modes)))
(define-erc-response-handler (275)
"Display secure connection message." nil
- (pcase-let ((`(,nick ,user ,message)
+ (pcase-let ((`(,nick ,_user ,_message)
(cdr (erc-response.command-args parsed))))
(erc-display-message
parsed 'notice 'active 's275
?n nick
- ?m (mapconcat 'identity (cddr (erc-response.command-args parsed))
+ ?m (mapconcat #'identity (cddr (erc-response.command-args parsed))
" "))))
(define-erc-response-handler (290)
(define-erc-response-handler (307)
"Display nick-identified message." nil
- (pcase-let ((`(,nick ,user ,message)
+ (pcase-let ((`(,nick ,_user ,_message)
(cdr (erc-response.command-args parsed))))
(erc-display-message
parsed 'notice 'active 's307
?n nick
- ?m (mapconcat 'identity (cddr (erc-response.command-args parsed))
+ ?m (mapconcat #'identity (cddr (erc-response.command-args parsed))
" "))))
(define-erc-response-handler (311 314)
"Display a message for the 321 event."
(erc-display-message parsed 'notice proc 's321)
nil)
-(add-hook 'erc-server-321-functions 'erc-server-321-message t)
+(add-hook 'erc-server-321-functions #'erc-server-321-message t)
(define-erc-response-handler (322)
"LIST notice." nil
(let ((topic (erc-response.contents parsed)))
- (pcase-let ((`(,channel ,num-users)
+ (pcase-let ((`(,channel ,_num-users)
(cdr (erc-response.command-args parsed))))
(add-to-list 'erc-channel-list (list channel))
(erc-update-channel-topic channel topic))))
(erc-display-message
parsed 'notice proc 's322
?c channel ?u num-users ?t (or topic "")))))
-(add-hook 'erc-server-322-functions 'erc-server-322-message t)
+(add-hook 'erc-server-322-functions #'erc-server-322-message t)
(define-erc-response-handler (324)
"Channel or nick modes." nil
(let ((channel (cadr (erc-response.command-args parsed)))
- (modes (mapconcat 'identity (cddr (erc-response.command-args parsed))
+ (modes (mapconcat #'identity (cddr (erc-response.command-args parsed))
" ")))
(erc-set-modes channel modes)
(erc-display-message
(define-erc-response-handler (331)
"No topic set for channel." nil
- (let ((channel (cadr (erc-response.command-args parsed)))
- (topic (erc-response.contents parsed)))
+ (let ((channel (cadr (erc-response.command-args parsed))))
(erc-display-message parsed 'notice (erc-get-buffer channel proc)
's331 ?c channel)))
(define-erc-response-handler (352)
"WHO notice." nil
- (pcase-let ((`(,channel ,user ,host ,server ,nick ,away-flag)
+ (pcase-let ((`(,channel ,user ,host ,_server ,nick ,away-flag)
(cdr (erc-response.command-args parsed))))
- (let ((full-name (erc-response.contents parsed))
- hopcount)
+ (let ((full-name (erc-response.contents parsed)))
(when (string-match "\\(^[0-9]+ \\)\\(.*\\)$" full-name)
- (setq hopcount (match-string 1 full-name))
(setq full-name (match-string 2 full-name)))
(erc-update-channel-member channel nick nick nil nil nil nil nil nil host user full-name)
(erc-display-message parsed 'notice 'active 's352
;; merged correctly. If we use overlays, then redisplay will be
;; very slow with lots of buttons. This is why we manually merge
;; face text properties.
- (let ((old (erc-list (get-text-property from 'face)))
+ (let ((old (erc-list (get-text-property from 'font-lock-face)))
(pos from)
- (end (next-single-property-change from 'face nil to))
+ (end (next-single-property-change from 'font-lock-face nil to))
new)
;; old is the face at pos, in list form. It is nil if there is no
;; face at pos. If nil, the new face is FACE. If not nil, the
;; where this face changes.
(while (< pos to)
(setq new (if old (cons face old) face))
- (put-text-property pos end 'face new)
+ (put-text-property pos end 'font-lock-face new)
(setq pos end
- old (erc-list (get-text-property pos 'face))
- end (next-single-property-change pos 'face nil to)))))
+ old (erc-list (get-text-property pos 'font-lock-face))
+ end (next-single-property-change pos 'font-lock-face nil to)))))
;; widget-button-click calls with two args, we ignore the first.
;; Since Emacs runs this directly, rather than with
(re-search-forward (regexp-quote nickname) nil t))
(goto-char (match-beginning 0))
(insert (erc-propertize erc-capab-identify-prefix
- 'face 'erc-capab-identify-unidentified))))))
+ 'font-lock-face
+ 'erc-capab-identify-unidentified))))))
(defun erc-capab-identify-get-unidentified-nickname (parsed)
"Return the nickname of the user if unidentified.
(set (make-local-variable 'write-file-functions) new-val))
(defvar erc-emacs-build-time
- (if (stringp emacs-build-time)
+ (if (or (stringp emacs-build-time) (not emacs-build-time))
emacs-build-time
(format-time-string "%Y-%m-%d" emacs-build-time))
- "Time at which Emacs was dumped out.")
+ "Time at which Emacs was dumped out, or nil if not available.")
;; Emacs 21 and XEmacs do not have user-emacs-directory, but XEmacs
;; has user-init-directory.
;; indent-tabs-mode: t
;; tab-width: 8
;; End:
-
(setq posn (match-end 0))
(erc-display-message
nil nil proc
- 'dcc-chat-privmsg ?n (erc-propertize erc-dcc-from 'face
+ 'dcc-chat-privmsg ?n (erc-propertize erc-dcc-from 'font-lock-face
'erc-nick-default-face) ?m line))
(setq erc-dcc-unprocessed-output (substring str posn)))))
(font-lock-prepend-text-property
from
to
- 'face
+ 'font-lock-face
(append (if boldp
'(erc-bold-face)
nil)
nick-end)
(erc-put-text-property
nick-beg nick-end
- 'face match-face (current-buffer)))
+ 'font-lock-face match-face (current-buffer)))
;; Highlight the nick of the message, or the current
;; nick if there's no nick in the message (e.g. /NAMES
;; output)
(if nick-end
(erc-put-text-property
nick-beg nick-end
- 'face match-face (current-buffer))
+ 'font-lock-face match-face (current-buffer))
(goto-char (+ 2 (or nick-end
(point-min))))
(while (re-search-forward match-regex nil t)
(erc-put-text-property (match-beginning 0) (match-end 0)
- 'face match-face))))
+ 'font-lock-face match-face))))
;; Highlight the whole message
((eq match-htype 'all)
(erc-put-text-property
(point-min) (point-max)
- 'face match-face (current-buffer)))
+ 'font-lock-face match-face (current-buffer)))
;; Highlight all occurrences of the word to be
;; highlighted.
((and (string= match-type "keyword")
(while (re-search-forward regex nil t)
(erc-put-text-property
(match-beginning 0) (match-end 0)
- 'face face))))
+ 'font-lock-face face))))
match-regex))
;; Highlight all occurrences of our nick.
((and (string= match-type "current-nick")
(point-min))))
(while (re-search-forward match-regex nil t)
(erc-put-text-property (match-beginning 0) (match-end 0)
- 'face match-face)))
+ 'font-lock-face match-face)))
;; Else twiddle your thumbs.
(t nil))
(run-hook-with-args
Return the empty string if FORMAT is nil."
(if format
(let ((ts (format-time-string format time)))
- (erc-put-text-property 0 (length ts) 'face 'erc-timestamp-face ts)
+ (erc-put-text-property 0 (length ts)
+ 'font-lock-face 'erc-timestamp-face ts)
(erc-put-text-property 0 (length ts) 'invisible 'timestamp ts)
(erc-put-text-property 0 (length ts)
'isearch-open-invisible 'timestamp ts)
(setq result other)))
result))
-;;; Test:
-
-(cl-assert
- (and
- ;; verify examples from the doc strings
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-channel-names
- '("#emacs" "#vi" "#electronica" "#folk")
- '("#emacs" "#vi")))
- '("#em" "#vi")) ; emacs is different from electronica
- (equal (let ((erc-track-shorten-aggressively t))
- (erc-unique-channel-names
- '("#emacs" "#vi" "#electronica" "#folk")
- '("#emacs" "#vi")))
- '("#em" "#v")) ; vi is shortened by one letter
- (equal (let ((erc-track-shorten-aggressively 'max))
- (erc-unique-channel-names
- '("#emacs" "#vi" "#electronica" "#folk")
- '("#emacs" "#vi")))
- '("#e" "#v")) ; emacs need not be different from electronica
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-channel-names
- '("#linux-de" "#linux-fr")
- '("#linux-de" "#linux-fr")))
- '("#linux-de" "#linux-fr")) ; shortening by one letter is too aggressive
- (equal (let ((erc-track-shorten-aggressively t))
- (erc-unique-channel-names
- '("#linux-de" "#linux-fr")
- '("#linux-de" "#linux-fr")))
- '("#linux-d" "#linux-f")); now we want to be aggressive
- ;; specific problems
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-channel-names
- '("#dunnet" "#lisp" "#sawfish" "#fsf" "#guile"
- "#testgnome" "#gnu" "#fsbot" "#hurd" "#hurd-bunny"
- "#emacs")
- '("#hurd-bunny" "#hurd" "#sawfish" "#lisp")))
- '("#hurd-" "#hurd" "#s" "#l"))
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-substrings
- '("#emacs" "#vi" "#electronica" "#folk")))
- '("#em" "#vi" "#el" "#f"))
- (equal (let ((erc-track-shorten-aggressively t))
- (erc-unique-substrings
- '("#emacs" "#vi" "#electronica" "#folk")))
- '("#em" "#v" "#el" "#f"))
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-channel-names
- '("#emacs" "#burse" "+linux.de" "#starwars"
- "#bitlbee" "+burse" "#ratpoison")
- '("+linux.de" "#starwars" "#burse")))
- '("+l" "#s" "#bu"))
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-channel-names
- '("fsbot" "#emacs" "deego")
- '("fsbot")))
- '("fs"))
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-channel-names
- '("fsbot" "#emacs" "deego")
- '("fsbot")
- (lambda (s)
- (> (length s) 4))
- 1))
- '("f"))
- (equal (let ((erc-track-shorten-aggressively nil))
- (erc-unique-channel-names
- '("fsbot" "#emacs" "deego")
- '("fsbot")
- (lambda (s)
- (> (length s) 4))
- 2))
- '("fs"))
- (let ((erc-track-shorten-aggressively nil))
- (equal (erc-unique-channel-names '("deego" "#hurd" "#hurd-bunny" "#emacs")
- '("#hurd" "#hurd-bunny"))
- '("#hurd" "#hurd-")))
- ;; general examples
- (let ((erc-track-shorten-aggressively t))
- (and (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
- (not (erc-unique-substring-1 "a" '("xyz" "xab")))
- (equal (erc-unique-substrings '("abc" "xyz" "xab"))
- '("ab" "xy" "xa"))
- (equal (erc-unique-substrings '("abc" "abcdefg"))
- '("abc" "abcd"))))
- (let ((erc-track-shorten-aggressively nil))
- (and (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
- (not (erc-unique-substring-1 "a" '("xyz" "xab")))
- (equal (erc-unique-substrings '("abc" "xyz" "xab"))
- '("abc" "xyz" "xab"))
- (equal (erc-unique-substrings '("abc" "abcdefg"))
- '("abc" "abcd"))))))
-
;;; Minor mode
;; Play nice with other IRC clients (and Emacs development rules) by
(push cur faces)))
faces))
-(cl-assert
- (let ((str "is bold"))
- (put-text-property 3 (length str)
- 'face '(bold erc-current-nick-face)
- str)
- (erc-faces-in str)))
-
;;; Buffer switching
(defvar erc-track-last-non-erc-buffer nil
(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.
(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)))
(aref string
(1- (length string))))
"\n"))
- 'face 'erc-input-face)))))
+ 'font-lock-face 'erc-input-face)))))
(let ((orig-win (selected-window))
(debug-buffer-window (get-buffer-window (current-buffer) t)))
(when debug-buffer-window
(t
(erc-put-text-property
0 (length string)
- 'face (or (intern-soft
- (concat "erc-" (symbol-name type) "-face"))
- "erc-default-face")
+ 'font-lock-face (or (intern-soft
+ (concat "erc-" (symbol-name type) "-face"))
+ "erc-default-face")
string)
string)))
(defun erc-cmd-SV ()
"Say the current ERC and Emacs version into channel."
- (erc-send-message (format "I'm using ERC with %s %s (%s%s) of %s."
+ (erc-send-message (format "I'm using ERC with %s %s (%s%s)%s."
(if (featurep 'xemacs) "XEmacs" "GNU Emacs")
emacs-version
system-configuration
x-toolkit-scroll-bars)))
"")
(if (featurep 'multi-tty) ", multi-tty" ""))
- erc-emacs-build-time))
+ (if erc-emacs-build-time
+ (concat " of " erc-emacs-build-time)
+ "")))
t)
(defun erc-cmd-SM ()
'front-sticky t
'read-only t))
(erc-put-text-property 0 (1- (length prompt))
- 'face (or face 'erc-prompt-face)
+ 'font-lock-face (or face 'erc-prompt-face)
prompt)
(insert prompt))
;; Set the input marker
(nick-face (if privp 'erc-nick-msg-face 'erc-nick-default-face))
(msg-face (if privp 'erc-direct-msg-face 'erc-default-face)))
;; add text properties to text before the nick, the nick and after the nick
- (erc-put-text-property 0 (length mark-s) 'face msg-face str)
+ (erc-put-text-property 0 (length mark-s) 'font-lock-face msg-face str)
(erc-put-text-property (length mark-s) (+ (length mark-s) (length nick))
- 'face nick-face str)
+ 'font-lock-face nick-face str)
(erc-put-text-property (+ (length mark-s) (length nick)) (length str)
- 'face msg-face str)
+ 'font-lock-face msg-face str)
str))
(defcustom erc-format-nick-function 'erc-format-nick
(let ((nick (erc-server-user-nickname user)))
(concat (erc-propertize
(erc-get-user-mode-prefix nick)
- 'face 'erc-nick-prefix-face)
+ 'font-lock-face 'erc-nick-prefix-face)
nick))))
(defun erc-format-my-nick ()
(nick (erc-current-nick))
(mode (erc-get-user-mode-prefix nick)))
(concat
- (erc-propertize open 'face 'erc-default-face)
- (erc-propertize mode 'face 'erc-my-nick-prefix-face)
- (erc-propertize nick 'face 'erc-my-nick-face)
- (erc-propertize close 'face 'erc-default-face)))
+ (erc-propertize open 'font-lock-face 'erc-default-face)
+ (erc-propertize mode 'font-lock-face 'erc-my-nick-prefix-face)
+ (erc-propertize nick 'font-lock-face 'erc-my-nick-face)
+ (erc-propertize close 'font-lock-face 'erc-default-face)))
(let ((prefix "> "))
- (erc-propertize prefix 'face 'erc-default-face))))
+ (erc-propertize prefix 'font-lock-face 'erc-default-face))))
(defun erc-echo-notice-in-default-buffer (s parsed buffer _sender)
"Echos a private notice in the default buffer, namely the
(cond
((eq erc-notice-highlight-type 'prefix)
(erc-put-text-property 0 (length erc-notice-prefix)
- 'face 'erc-notice-face s)
+ 'font-lock-face 'erc-notice-face s)
s)
((eq erc-notice-highlight-type 'all)
- (erc-put-text-property 0 (length s) 'face 'erc-notice-face s)
+ (erc-put-text-property 0 (length s) 'font-lock-face 'erc-notice-face s)
s)
(t s)))
(defun erc-highlight-error (s)
"Highlight error message S and return it."
- (erc-put-text-property 0 (length s) 'face 'erc-error-face s)
+ (erc-put-text-property 0 (length s) 'font-lock-face 'erc-error-face s)
s)
(defun erc-put-text-property (start end property value &optional object)
(let ((beg (point)))
(insert line)
(erc-put-text-property beg (point)
- 'face 'erc-command-indicator-face)
+ 'font-lock-face 'erc-command-indicator-face)
(insert "\n"))
(when (processp erc-server-process)
(set-marker (process-mark erc-server-process) (point)))
(let ((beg (point)))
(insert line)
(erc-put-text-property beg (point)
- 'face 'erc-input-face))
+ 'font-lock-face 'erc-input-face))
(insert "\n")
(when (processp erc-server-process)
(set-marker (process-mark erc-server-process) (point)))
(setq args (substring args 1)))
;; prepare the prompt string for echo
(erc-put-text-property 0 (length sp)
- 'face 'erc-command-indicator-face sp)
+ 'font-lock-face 'erc-command-indicator-face sp)
(while lines
(setq s (car lines))
(erc-log (concat "erc-load-script: CMD: " s))
erc-script-echo)
(progn
(erc-put-text-property 0 (length line)
- 'face 'erc-input-face line)
+ 'font-lock-face 'erc-input-face line)
(erc-display-line (concat sp line) cb)))))
(setq lines (cdr lines)))))
(run-hooks 'eshell-exit-hook))
;;;###autoload
-(define-derived-mode eshell-mode fundamental-mode "EShell"
+(define-derived-mode eshell-mode fundamental-mode "Eshell"
"Emacs shell interactive mode."
(setq-local eshell-mode t)
(eshell-parse-command command))))
intr
(bufname (if (and proc (listp proc))
- "*EShell Async Command Output*"
+ "*Eshell Async Command Output*"
(setq intr t)
- "*EShell Command Output*")))
+ "*Eshell Command Output*")))
(if (buffer-live-p (get-buffer bufname))
(kill-buffer bufname))
(rename-buffer bufname)
"Read one or more face names, prompting with PROMPT.
PROMPT should not end in a space or a colon.
-Return DEFAULT if the user enters the empty string.
-If DEFAULT is non-nil, it should be a single face or a list of face names
-\(symbols or strings). In the latter case, return the `car' of DEFAULT
-\(if MULTIPLE is nil, see below), or DEFAULT (if MULTIPLE is non-nil).
-
-If MULTIPLE is non-nil, this function uses `completing-read-multiple'
-to read multiple faces with \"[ \\t]*,[ \\t]*\" as the separator regexp
-and it returns a list of face names. Otherwise, it reads and returns
-a single face name."
- (if (and default (not (stringp default)))
- (setq default
- (cond ((symbolp default)
- (symbol-name default))
- (multiple
- (mapconcat (lambda (f) (if (symbolp f) (symbol-name f) f))
- default ", "))
- ;; If we only want one, and the default is more than one,
- ;; discard the unwanted ones.
- (t (symbol-name (car default))))))
+If DEFAULT is non-nil, it should be a face (a symbol) or a face
+name (a string). It can also be a list of faces or face names.
+
+If MULTIPLE is non-nil, the return value from this function is a
+list of faces. Otherwise a single face is returned.
+
+If the user enter the empty string at the prompt, DEFAULT is
+returned after a possible transformation according to MULTIPLE.
+That is, if DEFAULT is a list and MULTIPLE is nil, the first
+element of DEFAULT is returned. If DEFAULT isn't a list, but
+MULTIPLE is non-nil, a one-element list containing DEFAULT is
+returned. Otherwise, DEFAULT is returned verbatim."
+ (unless (listp default)
+ (setq default (list default)))
+ (when default
+ (setq default
+ (if multiple
+ (mapconcat (lambda (f) (if (symbolp f) (symbol-name f) f))
+ default ", ")
+ ;; If we only want one, and the default is more than one,
+ ;; discard the unwanted ones.
+ (setq default (car default))
+ (if (symbolp default)
+ (symbol-name default)
+ default))))
(when (and default (not multiple))
(require 'crm)
;; For compatibility with `completing-read-multiple' use `crm-separator'
;; to define DEFAULT if MULTIPLE is nil.
(setq default (car (split-string default crm-separator t))))
+ ;; Older versions of `read-face-name' did not append ": " to the
+ ;; prompt, so there are third party libraries that have that in the
+ ;; prompt. If so, remove it.
+ (setq prompt (replace-regexp-in-string ": ?\\'" "" prompt))
(let ((prompt (if default
(format-message "%s (default `%s'): " prompt default)
(format "%s: " prompt)))
(mapcar 'car (tty-color-alist frame))))
(defalias 'x-defined-colors 'defined-colors)
+(defun defined-colors-with-face-attributes (&optional frame)
+ "Return a list of colors supported for a particular frame.
+See `defined-colors' for arguments and return value. In contrast
+to `define-colors' the elements of the returned list are color
+strings with text properties, that make the color names render
+with the color they represent as background color."
+ (mapcar
+ (lambda (color-name)
+ (let ((foreground (readable-foreground-color color-name))
+ (color (copy-sequence color-name)))
+ (propertize color 'face (list :foreground foreground
+ :background color))))
+ (defined-colors frame)))
+
+(defun readable-foreground-color (color)
+ "Return a readable foreground color for background COLOR."
+ (let* ((rgb (color-values color))
+ (max (apply #'max rgb))
+ (black (car (color-values "black")))
+ (white (car (color-values "white"))))
+ ;; Select black or white depending on which one is less similar to
+ ;; the brightest component.
+ (if (> (abs (- max black)) (abs (- max white)))
+ "black"
+ "white")))
+
(declare-function xw-color-defined-p "xfns.c" (color &optional frame))
(defun color-defined-p (color &optional frame)
(colors (or facemenu-color-alist
(append '("foreground at point" "background at point")
(if allow-empty-name '(""))
- (defined-colors))))
+ (if (display-color-p)
+ (defined-colors-with-face-attributes)
+ (defined-colors)))))
(color (completing-read
(or prompt "Color (name or #RGB triplet): ")
;; Completing function for reading colors, accepting
;; both color names and RGB triplets.
(lambda (string pred flag)
(cond
- ((null flag) ; Try completion.
+ ((null flag) ; Try completion.
(or (try-completion string colors pred)
(if (color-defined-p string)
string)))
- ((eq flag t) ; List all completions.
+ ((eq flag t) ; List all completions.
(or (all-completions string colors pred)
(if (color-defined-p string)
(list string))))
- ((eq flag 'lambda) ; Test completion.
+ ((eq flag 'lambda) ; Test completion.
(or (member string colors)
(color-defined-p string)))))
nil t)))
:group 'basic-faces
:version "22.1")
+(defface nobreak-hyphen
+ '((((background dark)) :foreground "cyan")
+ (((type pc)) :foreground "magenta")
+ (t :foreground "brown"))
+ "Face for displaying nobreak hyphens."
+ :group 'basic-faces
+ :version "25.2")
+
(defgroup mode-line-faces nil
"Faces used in the mode line."
:group 'mode-line
:version "24.1"
:group 'basic-faces)
+(defface read-multiple-choice-face
+ '((t (:inherit underline
+ :weight bold)))
+ "Face for the symbol name in Apropos output."
+ :group 'basic-faces
+ :version "25.2")
+
;; Faces for TTY menus.
(defface tty-menu-enabled-face
'((t
(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)
(catch 'exit
(unless enable-local-variables
(throw 'exit (message "Directory-local variables are disabled")))
- (let ((variables-file (or (and (buffer-file-name)
- (not (file-remote-p (buffer-file-name)))
- (dir-locals-find-file (buffer-file-name)))
- dir-locals-file))
- variables)
- (if (consp variables-file) ; result from cache
- ;; If cache element has an mtime, assume it came from a file.
- ;; Otherwise, assume it was set directly.
- (setq variables-file (if (nth 2 variables-file)
- (expand-file-name dir-locals-file
- (car variables-file))
- (cadr variables-file))))
+ (let* ((dir-or-cache (and (buffer-file-name)
+ (not (file-remote-p (buffer-file-name)))
+ (dir-locals-find-file (buffer-file-name))))
+ (variables-file
+ ;; If there are several .dir-locals, the user probably
+ ;; wants to edit the last one (the highest priority).
+ (cond ((stringp dir-or-cache)
+ (car (last (dir-locals--all-files dir-or-cache))))
+ ((consp dir-or-cache) ; result from cache
+ ;; If cache element has an mtime, assume it came
+ ;; from a file. Otherwise, assume it was set
+ ;; directly.
+ (if (nth 2 dir-or-cache)
+ (car (last (dir-locals--all-files (car dir-or-cache))))
+ (cadr dir-or-cache)))
+ ;; Try to make a proper file-name.
+ (t (expand-file-name dir-locals-file))))
+ variables)
;; I can't be bothered to handle this case right now.
;; Dir locals were set directly from a class. You need to
;; directly modify the class in dir-locals-class-alist.
;; s-a-m and h-l-v may parse the same regions, looking for "mode:".
(with-demoted-errors "File mode specification error: %s"
(set-auto-mode))
- (with-demoted-errors "File local-variables error: %s"
- (hack-local-variables)))
+ ;; `delay-mode-hooks' being non-nil will have prevented the major
+ ;; mode's call to `run-mode-hooks' from calling
+ ;; `hack-local-variables'. In that case, call it now.
+ (when delay-mode-hooks
+ (with-demoted-errors "File local-variables error: %s"
+ (hack-local-variables 'no-mode))))
;; Turn font lock off and on, to make sure it takes account of
;; whatever file local variables are relevant to it.
(when (and font-lock-mode
;; TODO? Warn once per file rather than once per session?
(defvar hack-local-variables--warned-lexical nil)
-(defun hack-local-variables (&optional mode-only)
+(defun hack-local-variables (&optional handle-mode)
"Parse and put into effect this buffer's local variables spec.
Uses `hack-local-variables-apply' to apply the variables.
-If MODE-ONLY is non-nil, all we do is check whether a \"mode:\"
+If HANDLE-MODE is nil, we apply all the specified local
+variables. If HANDLE-MODE is neither nil nor t, we do the same,
+except that any settings of `mode' are ignored.
+
+If HANDLE-MODE is t, all we do is check whether a \"mode:\"
is specified, and return the corresponding mode symbol, or nil.
In this case, we try to ignore minor-modes, and only return a
major-mode.
(let ((enable-local-variables
(and local-enable-local-variables enable-local-variables))
result)
- (unless mode-only
+ (unless (eq handle-mode t)
(setq file-local-variables-alist nil)
(with-demoted-errors "Directory-local variables error: %s"
;; Note this is a no-op if enable-local-variables is nil.
;; This entire function is basically a no-op if enable-local-variables
;; is nil. All it does is set file-local-variables-alist to nil.
(when enable-local-variables
- ;; This part used to ignore enable-local-variables when mode-only
- ;; was non-nil. That was inappropriate, eg consider the
+ ;; This part used to ignore enable-local-variables when handle-mode
+ ;; was t. That was inappropriate, eg consider the
;; (artificial) example of:
;; (setq local-enable-local-variables nil)
;; Open a file foo.txt that contains "mode: sh".
;; It correctly opens in text-mode.
;; M-x set-visited-file name foo.c, and it incorrectly stays in text-mode.
(unless (or (inhibit-local-variables-p)
- ;; If MODE-ONLY is non-nil, and the prop line specifies a
+ ;; If HANDLE-MODE is t, and the prop line specifies a
;; mode, then we're done, and have no need to scan further.
- (and (setq result (hack-local-variables-prop-line mode-only))
- mode-only))
+ (and (setq result (hack-local-variables-prop-line
+ (eq handle-mode t)))
+ (eq handle-mode t)))
;; Look for "Local variables:" line in last page.
(save-excursion
(goto-char (point-max))
(goto-char (point-min))
(while (not (or (eobp)
- (and mode-only result)))
+ (and (eq handle-mode t) result)))
;; Find the variable name;
(unless (looking-at hack-local-variable-regexp)
(error "Malformed local variable line: %S"
(forward-char 1)
(let ((read-circle nil))
(setq val (read (current-buffer))))
- (if mode-only
+ (if (eq handle-mode t)
(and (eq var 'mode)
;; Specifying minor-modes via mode: is
;; deprecated, but try to reject them anyway.
;; to use 'thisbuf's name in the
;; warning message.
(or (buffer-file-name thisbuf) ""))))))
+ ((and (eq var 'mode) handle-mode))
(t
(ignore-errors
(push (cons (if (eq var 'eval)
val) result))))))
(forward-line 1))))))))
;; Now we've read all the local variables.
- ;; If MODE-ONLY is non-nil, return whether the mode was specified.
- (if mode-only result
+ ;; If HANDLE-MODE is t, return whether the mode was specified.
+ (if (eq handle-mode t) result
;; Otherwise, set the variables.
(hack-local-variables-filter result nil)
(hack-local-variables-apply)))))
(error
;; The file's content might be invalid (e.g. have a merge conflict), but
;; that shouldn't prevent the user from opening the file.
- (message ".dir-locals error: %s" (error-message-string err))
+ (message "%s error: %s" dir-locals-file (error-message-string err))
nil))))
(defun dir-locals-set-directory-class (directory class &optional mtime)
(defconst dir-locals-file ".dir-locals.el"
"File that contains directory-local variables.
-It has to be constant to enforce uniform values
-across different environments and users.")
+It has to be constant to enforce uniform values across different
+environments and users.
+See also `dir-locals-file-2', whose values override this one's.
+See Info node `(elisp)Directory Local Variables' for details.")
+
+(defconst dir-locals-file-2 ".dir-locals-2.el"
+ "File that contains directory-local variables.
+This essentially a second file that can be used like
+`dir-locals-file', so that users can have specify their personal
+dir-local variables even if the current directory already has a
+`dir-locals-file' that is shared with other users (such as in a
+git repository).
+See Info node `(elisp)Directory Local Variables' for details.")
+
+(defun dir-locals--all-files (directory)
+ "Return a list of all readable dir-locals files in DIRECTORY.
+The returned list is sorted by increasing priority. That is,
+values specified in the last file should take precedence over
+those in the first."
+ (when (file-readable-p directory)
+ (let* ((file-1 (expand-file-name (if (eq system-type 'ms-dos)
+ (dosified-file-name dir-locals-file)
+ dir-locals-file)
+ directory))
+ (file-2 (when (string-match "\\.el\\'" file-1)
+ (replace-match "-2.el" t nil file-1)))
+ (out nil))
+ ;; The order here is important.
+ (dolist (f (list file-2 file-1))
+ (when (and f
+ (file-readable-p f)
+ (file-regular-p f)
+ (not (file-directory-p f)))
+ (push f out)))
+ out)))
(defun dir-locals-find-file (file)
"Find the directory-local variables for FILE.
time stored in the cache matches the current file modification time.
If not, the cache entry is cleared so that the file will be re-read.
-This function returns either nil (no directory local variables found),
-or the matching entry from `dir-locals-directory-cache' (a list),
-or the full path to the `dir-locals-file' (a string) in the case
-of no valid cache entry."
+This function returns either:
+ - nil (no directory local variables found),
+ - the matching entry from `dir-locals-directory-cache' (a list),
+ - or the full path to the directory (a string) containing at
+ least one `dir-locals-file' in the case of no valid cache
+ entry."
(setq file (expand-file-name file))
- (let* ((dir-locals-file-name
- (if (eq system-type 'ms-dos)
- (dosified-file-name dir-locals-file)
- dir-locals-file))
- (locals-file (locate-dominating-file file dir-locals-file-name))
- (dir-elt nil))
+ (let* ((locals-dir (locate-dominating-file (file-name-directory file)
+ #'dir-locals--all-files))
+ dir-elt)
;; `locate-dominating-file' may have abbreviated the name.
- (and locals-file
- (setq locals-file (expand-file-name dir-locals-file-name locals-file)))
- ;; Let dir-locals-read-from-file inform us via demoted-errors
- ;; about unreadable files, etc.
- ;; Maybe we'd want to keep searching though - that is
- ;; a locate-dominating-file issue.
-;;; (or (not (file-readable-p locals-file))
-;;; (not (file-regular-p locals-file)))
-;;; (setq locals-file nil))
+ (when locals-dir
+ (setq locals-dir (expand-file-name locals-dir)))
;; Find the best cached value in `dir-locals-directory-cache'.
(dolist (elt dir-locals-directory-cache)
(when (and (string-prefix-p (car elt) file
- (memq system-type
- '(windows-nt cygwin ms-dos)))
- (> (length (car elt)) (length (car dir-elt))))
- (setq dir-elt elt)))
+ (memq system-type
+ '(windows-nt cygwin ms-dos)))
+ (> (length (car elt)) (length (car dir-elt))))
+ (setq dir-elt elt)))
(if (and dir-elt
- (or (null locals-file)
- (<= (length (file-name-directory locals-file))
- (length (car dir-elt)))))
- ;; Found a potential cache entry. Check validity.
- ;; A cache entry with no MTIME is assumed to always be valid
- ;; (ie, set directly, not from a dir-locals file).
- ;; Note, we don't bother to check that there is a matching class
- ;; element in dir-locals-class-alist, since that's done by
- ;; dir-locals-set-directory-class.
- (if (or (null (nth 2 dir-elt))
- (let ((cached-file (expand-file-name dir-locals-file-name
- (car dir-elt))))
- (and (file-readable-p cached-file)
- (equal (nth 2 dir-elt)
- (nth 5 (file-attributes cached-file))))))
- ;; This cache entry is OK.
- dir-elt
- ;; This cache entry is invalid; clear it.
- (setq dir-locals-directory-cache
- (delq dir-elt dir-locals-directory-cache))
- ;; Return the first existing dir-locals file. Might be the same
- ;; as dir-elt's, might not (eg latter might have been deleted).
- locals-file)
+ (or (null locals-dir)
+ (<= (length locals-dir)
+ (length (car dir-elt)))))
+ ;; Found a potential cache entry. Check validity.
+ ;; A cache entry with no MTIME is assumed to always be valid
+ ;; (ie, set directly, not from a dir-locals file).
+ ;; Note, we don't bother to check that there is a matching class
+ ;; element in dir-locals-class-alist, since that's done by
+ ;; dir-locals-set-directory-class.
+ (if (or (null (nth 2 dir-elt))
+ (let ((cached-files (dir-locals--all-files (car dir-elt))))
+ ;; The entry MTIME should match the most recent
+ ;; MTIME among matching files.
+ (and cached-files
+ (= (time-to-seconds (nth 2 dir-elt))
+ (apply #'max (mapcar (lambda (f) (time-to-seconds (nth 5 (file-attributes f))))
+ cached-files))))))
+ ;; This cache entry is OK.
+ dir-elt
+ ;; This cache entry is invalid; clear it.
+ (setq dir-locals-directory-cache
+ (delq dir-elt dir-locals-directory-cache))
+ ;; Return the first existing dir-locals file. Might be the same
+ ;; as dir-elt's, might not (eg latter might have been deleted).
+ locals-dir)
;; No cache entry.
- locals-file)))
-
-(defun dir-locals-read-from-file (file)
- "Load a variables FILE and register a new class and instance.
-FILE is the name of the file holding the variables to apply.
-The new class name is the same as the directory in which FILE
-is found. Returns the new class name."
- (with-temp-buffer
+ locals-dir)))
+
+(defun dir-locals-read-from-dir (dir)
+ "Load all variables files in DIR and register a new class and instance.
+DIR is the absolute name of a directory which must contain at
+least one dir-local file (which is a file holding variables to
+apply).
+Return the new class name, which is a symbol named DIR."
+ (require 'map)
+ (let* ((class-name (intern dir))
+ (files (dir-locals--all-files dir))
+ (read-circle nil)
+ (success nil)
+ (variables))
(with-demoted-errors "Error reading dir-locals: %S"
- (insert-file-contents file)
- (unless (zerop (buffer-size))
- (let* ((dir-name (file-name-directory file))
- (class-name (intern dir-name))
- (variables (let ((read-circle nil))
- (read (current-buffer)))))
- (dir-locals-set-class-variables class-name variables)
- (dir-locals-set-directory-class dir-name class-name
- (nth 5 (file-attributes file)))
- class-name)))))
+ (dolist (file files)
+ (with-temp-buffer
+ (insert-file-contents file)
+ (condition-case-unless-debug nil
+ (setq variables
+ (map-merge-with 'list (lambda (a b) (map-merge 'list a b))
+ variables
+ (read (current-buffer))))
+ (end-of-file nil))))
+ (setq success t))
+ (dir-locals-set-class-variables class-name variables)
+ (dir-locals-set-directory-class
+ dir class-name
+ (seconds-to-time
+ (if success
+ (apply #'max (mapcar (lambda (file)
+ (time-to-seconds (nth 5 (file-attributes file))))
+ files))
+ ;; If there was a problem, use the values we could get but
+ ;; don't let the cache prevent future reads.
+ 0)))
+ class-name))
+
+(define-obsolete-function-alias 'dir-locals-read-from-file
+ 'dir-locals-read-from-dir "25.1")
(defcustom enable-remote-dir-locals nil
"Non-nil means dir-local variables will be applied to remote files."
(not (file-remote-p (or (buffer-file-name)
default-directory)))))
;; Find the variables file.
- (let ((variables-file (dir-locals-find-file
- (or (buffer-file-name) default-directory)))
+ (let ((dir-or-cache (dir-locals-find-file
+ (or (buffer-file-name) default-directory)))
(class nil)
(dir-name nil))
(cond
- ((stringp variables-file)
- (setq dir-name (file-name-directory variables-file)
- class (dir-locals-read-from-file variables-file)))
- ((consp variables-file)
- (setq dir-name (nth 0 variables-file))
- (setq class (nth 1 variables-file))))
+ ((stringp dir-or-cache)
+ (setq dir-name dir-or-cache
+ class (dir-locals-read-from-dir dir-or-cache)))
+ ((consp dir-or-cache)
+ (setq dir-name (nth 0 dir-or-cache))
+ (setq class (nth 1 dir-or-cache))))
(when class
(let ((variables
(dir-locals-collect-variables
;; Simulate the message printed by `ls'.
(insert (format "%s: No such file or directory\n" file))))
-(defvar kill-emacs-query-functions nil
+(defcustom kill-emacs-query-functions nil
"Functions to call with no arguments to query about killing Emacs.
If any of these functions returns nil, killing Emacs is canceled.
`save-buffers-kill-emacs' calls these functions, but `kill-emacs',
-the low level primitive, does not. See also `kill-emacs-hook'.")
+the low level primitive, does not. See also `kill-emacs-hook'."
+ :type 'hook
+ :version "25.2"
+ :group 'convenience)
(defcustom confirm-kill-emacs nil
"How to ask for confirmation when leaving Emacs.
(defun save-buffers-kill-terminal (&optional arg)
"Offer to save each buffer, then kill the current connection.
-If the current frame has no client, kill Emacs itself.
+If the current frame has no client, kill Emacs itself using
+`save-buffers-kill-emacs'.
With prefix ARG, silently save all file-visiting buffers, then kill.
(let ((delete-by-moving-to-trash nil))
(rename-file fn new-fn)))))))))
+(defsubst file-attribute-type (attributes)
+ "The type field in ATTRIBUTES returned by `file-attribute'.
+The value is either t for directory, string (name linked to) for
+symbolic link, or nil."
+ (nth 0 attributes))
+
+(defsubst file-attribute-link-number (attributes)
+ "Return the number of links in ATTRIBUTES returned by `file-attribute'."
+ (nth 1 attributes))
+
+(defsubst file-attribute-user-id (attributes)
+ "The UID field in ATTRIBUTES returned by `file-attribute'.
+This is either a string or a number. If a string value cannot be
+looked up, a numeric value, either an integer or a float, is
+returned."
+ (nth 2 attributes))
+
+(defsubst file-attribute-group-id (attributes)
+ "The GID field in ATTRIBUTES returned by `file-attribute'.
+This is either a string or a number. If a string value cannot be
+looked up, a numeric value, either an integer or a float, is
+returned."
+ (nth 3 attributes))
+
+(defsubst file-attribute-access-time (attributes)
+ "The last access time in ATTRIBUTES returned by `file-attribute'.
+This a list of integers (HIGH LOW USEC PSEC) in the same style
+as (current-time)."
+ (nth 4 attributes))
+
+(defsubst file-attribute-modification-time (attributes)
+ "The modification time in ATTRIBUTES returned by `file-attribute'.
+This is the time of the last change to the file's contents, and
+is a list of integers (HIGH LOW USEC PSEC) in the same style
+as (current-time)."
+ (nth 5 attributes))
+
+(defsubst file-attribute-status-change-time (attributes)
+ "The status modification time in ATTRIBUTES returned by `file-attribute'.
+This is the time of last change to the file's attributes: owner
+and group, access mode bits, etc, and is a list of integers (HIGH
+LOW USEC PSEC) in the same style as (current-time)."
+ (nth 6 attributes))
+
+(defsubst file-attribute-size (attributes)
+ "The size (in bytes) in ATTRIBUTES returned by `file-attribute'.
+This is a floating point number if the size is too large for an integer."
+ (nth 7 attributes))
+
+(defsubst file-attribute-modes (attributes)
+ "The file modes in ATTRIBUTES returned by `file-attribute'.
+This is a string of ten letters or dashes as in ls -l."
+ (nth 8 attributes))
+
+(defsubst file-attribute-inode-number (attributes)
+ "The inode number in ATTRIBUTES returned by `file-attribute'.
+If it is larger than what an Emacs integer can hold, this is of
+the form (HIGH . LOW): first the high bits, then the low 16 bits.
+If even HIGH is too large for an Emacs integer, this is instead
+of the form (HIGH MIDDLE . LOW): first the high bits, then the
+middle 24 bits, and finally the low 16 bits."
+ (nth 10 attributes))
+
+(defsubst file-attribute-device-number (attributes)
+ "The file system device number in ATTRIBUTES returned by `file-attribute'.
+If it is larger than what an Emacs integer can hold, this is of
+the form (HIGH . LOW): first the high bits, then the low 16 bits.
+If even HIGH is too large for an Emacs integer, this is instead
+of the form (HIGH MIDDLE . LOW): first the high bits, then the
+middle 24 bits, and finally the low 16 bits."
+ (nth 11 attributes))
+
\f
(define-key ctl-x-map "\C-f" 'find-file)
(define-key ctl-x-map "\C-r" 'find-file-read-only)
(defcustom find-grep-options
(if (or (eq system-type 'berkeley-unix)
- (string-match "solaris2\\|irix" system-configuration))
+ (string-match "solaris2" system-configuration))
"-s" "-q")
"Option to grep to be as silent as possible.
On Berkeley systems, this is `-s'; on Posix, and with GNU grep, `-q' does it.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Support functions
+(defun ff-buffer-file-name (&optional buf)
+ "Like `buffer-file-name' but works with indirect buffers as well.
+If BUF is nil, uses the current buffer."
+ (unless buf
+ (setq buf (current-buffer)))
+ (or (buffer-file-name buf)
+ (when (buffer-base-buffer buf)
+ (buffer-file-name (buffer-base-buffer buf)))))
+
(defun ff-find-the-other-file (&optional in-other-window)
"Find the header or source file corresponding to the current file.
Being on a `#include' line pulls in that file, but see the help on
(setq alist (if (symbolp ff-other-file-alist)
(symbol-value ff-other-file-alist)
ff-other-file-alist)
- pathname (if (buffer-file-name)
- (buffer-file-name)
- "/none.none"))
+ pathname (or (ff-buffer-file-name) "/none.none"))
(setq fname (file-name-nondirectory pathname)
no-match nil
;; invoke it with the name of the current file
(if (and (atom action) (fboundp action))
(progn
- (setq suffixes (funcall action (buffer-file-name))
+ (setq suffixes (funcall action (ff-buffer-file-name))
match (cons (car match) (list suffixes))
stub nil
default-name (car suffixes)))
(setq alist (if (symbolp ff-other-file-alist)
(symbol-value ff-other-file-alist)
ff-other-file-alist)
- pathname (if (buffer-file-name)
- (buffer-file-name)
- "/none.none"))
+ pathname (or (ff-buffer-file-name) "/none.none"))
(setq fname (file-name-nondirectory pathname)
match (car alist))
;; invoke it with the name of the current file
(if (and (atom action) (fboundp action))
(progn
- (setq suffixes (funcall action (buffer-file-name))
+ (setq suffixes (funcall action (ff-buffer-file-name))
match (cons (car match) (list suffixes))
stub nil))
(message "Finding buffer %s..." filename))
(if (bufferp (get-file-buffer filename))
- (setq found (buffer-file-name (get-file-buffer filename))))
+ (setq found (ff-buffer-file-name (get-file-buffer filename))))
(setq blist (buffer-list))
(setq buf (buffer-name (car blist)))
(while (and blist (not found))
(if (string-match-p (concat filename "<[0-9]+>") buf)
- (setq found (buffer-file-name (car blist))))
+ (setq found (ff-buffer-file-name (car blist))))
(setq blist (cdr blist))
(setq buf (buffer-name (car blist))))
;;
;; To turn Font Lock mode on automatically, add this to your init file:
;;
-;; (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
+;; (add-hook 'emacs-lisp-mode-hook #'turn-on-font-lock)
;;
;; Or if you want to turn Font Lock mode on in many modes:
;;
enclosing textual block and mark at the end.
This is normally set via `font-lock-defaults'.")
-(defvar font-lock-fontify-buffer-function 'font-lock-default-fontify-buffer
+(defvar font-lock-fontify-buffer-function #'font-lock-default-fontify-buffer
"Function to use for fontifying the buffer.
This is normally set via `font-lock-defaults'.")
-(defvar font-lock-unfontify-buffer-function 'font-lock-default-unfontify-buffer
+(defvar font-lock-unfontify-buffer-function #'font-lock-default-unfontify-buffer
"Function to use for unfontifying the buffer.
This is used when turning off Font Lock mode.
This is normally set via `font-lock-defaults'.")
\(jit-lock-bounds BEG . END) indicating the bounds of the region actually
fontified.")
-(defvar font-lock-unfontify-region-function 'font-lock-default-unfontify-region
+(defvar font-lock-unfontify-region-function #'font-lock-default-unfontify-region
"Function to use for unfontifying a region.
It should take two args, the beginning and end of the region.
This is normally set via `font-lock-defaults'.")
(defun font-lock-mode-internal (arg)
;; Turn on Font Lock mode.
(when arg
- (add-hook 'after-change-functions 'font-lock-after-change-function t t)
+ (add-hook 'after-change-functions #'font-lock-after-change-function t t)
(font-lock-set-defaults)
(font-lock-turn-on-thing-lock))
;; Turn off Font Lock mode.
(unless font-lock-mode
- (remove-hook 'after-change-functions 'font-lock-after-change-function t)
+ (remove-hook 'after-change-functions #'font-lock-after-change-function t)
(font-lock-unfontify-buffer)
(font-lock-turn-off-thing-lock)))
(`jit-lock-mode
;; Prepare for jit-lock
(remove-hook 'after-change-functions
- 'font-lock-after-change-function t)
+ #'font-lock-after-change-function t)
(set (make-local-variable 'font-lock-flush-function)
- 'jit-lock-refontify)
+ #'jit-lock-refontify)
(set (make-local-variable 'font-lock-ensure-function)
- 'jit-lock-fontify-now)
+ #'jit-lock-fontify-now)
;; Prevent font-lock-fontify-buffer from fontifying eagerly the whole
;; buffer. This is important for things like CWarn mode which
;; adds/removes a few keywords and does a refontify (which takes ages on
;; large files).
(set (make-local-variable 'font-lock-fontify-buffer-function)
- 'jit-lock-refontify)
+ #'jit-lock-refontify)
;; Don't fontify eagerly (and don't abort if the buffer is large).
(set (make-local-variable 'font-lock-fontified) t)
;; Use jit-lock.
(not font-lock-keywords-only))
;; Tell jit-lock how we extend the region to refontify.
(add-hook 'jit-lock-after-change-extend-region-functions
- 'font-lock-extend-jit-lock-region-after-change
+ #'font-lock-extend-jit-lock-region-after-change
nil t))))
(defun font-lock-turn-off-thing-lock ()
"Put proper face on each string and comment between START and END.
START should be at the beginning of a line."
(syntax-propertize end) ; Apply any needed syntax-table properties.
+ (with-syntax-table (or syntax-ppss-table (syntax-table))
(let ((comment-end-regexp
(or font-lock-comment-end-skip
(regexp-quote
font-lock-comment-delimiter-face))))
(< (point) end))
(setq state (parse-partial-sexp (point) end nil nil state
- 'syntax-table)))))
+ 'syntax-table))))))
;;; End of Syntactic fontification functions.
\f
(mapcar #'font-lock-compile-keyword keywords))))
(if (and (not syntactic-keywords)
(let ((beg-function syntax-begin-function))
- (or (eq beg-function 'beginning-of-defun)
+ (or (eq beg-function #'beginning-of-defun)
(if (symbolp beg-function)
(get beg-function 'font-lock-syntax-paren-check))))
(not beginning-of-defun-function))
(let ((syntax (cdr selem)))
(dolist (char (if (numberp (car selem))
(list (car selem))
- (mapcar 'identity (car selem))))
+ (mapcar #'identity (car selem))))
(modify-syntax-entry char syntax font-lock-syntax-table)))))
;; (nth 4 defaults) used to hold `font-lock-beginning-of-syntax-function',
;; but that was removed in 25.1, so if it's a cons cell, we assume that
;; ;; The default level is usually, but not necessarily, level 1.
;; (setq level (- (length keywords)
;; (length (member (eval (car keywords))
-;; (mapcar 'eval (cdr keywords))))))))
+;; (mapcar #'eval (cdr keywords))))))))
;; (setq font-lock-fontify-level (list level (> level 1)
;; (< level (1- (length keywords))))))))
;;
* gnus-picon.el (gnus-picons-display-pairs): Don't add two bars.
(gnus-picons-try-face): Set the foreground color on the bar.
- (gnus-picons-group-exluded-groups): New variable.
+ (gnus-picons-group-excluded-groups): New variable.
(gnus-group-display-picons): Use it.
1997-10-13 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
illegible and invisible text.
* gnus-util.el (gnus-multiple-choice): Separate choices with
- ", ". Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
+ ", ". Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
2003-02-18 Jesper Harder <harder@ifa.au.dk>
(shr-kinsoku-shorten): New internal variable.
(shr-find-fill-point): Make kinsoku shorten text line if
shr-kinsoku-shorten is bound to non-nil.
- (shr-tag-table): Bild shr-kinsoku-shorten to t; refer to
+ (shr-tag-table): Bind shr-kinsoku-shorten to t; refer to
shr-indentation too when testing if table is wider than frame width.
(shr-insert-table): Use `string-width' instead of `length' to measure
text width.
:type 'boolean
:group 'canlock)
-(eval-when-compile
- (defmacro canlock-string-as-unibyte (string)
- "Return a unibyte string with the same individual bytes as STRING."
- (if (fboundp 'string-as-unibyte)
- (list 'string-as-unibyte string)
- string)))
-
(defun canlock-sha1 (message)
"Make a SHA-1 digest of MESSAGE as a unibyte string of length 20 bytes."
(let (sha1-maximum-internal-length)
(canlock-sha1
(concat opad
(canlock-sha1
- (concat ipad (canlock-string-as-unibyte message-id))))))))
+ (concat ipad (string-as-unibyte message-id))))))))
(defun canlock-narrow-to-header ()
"Narrow the buffer to the head of the message."
(autoload 'widget-convert "wid-edit")
(autoload 'widget-default-get "wid-edit")
-;; Copy of the `nnmail-lazy' code from `nnmail.el':
-(define-widget 'gmm-lazy 'default
- "Base widget for recursive data structures.
-
-This is a copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
- :format "%{%t%}: %v"
- :convert-widget 'widget-value-convert-widget
- :value-create (lambda (widget)
- (let ((value (widget-get widget :value))
- (type (widget-get widget :type)))
- (widget-put widget :children
- (list (widget-create-child-value
- widget (widget-convert type) value)))))
- :value-delete 'widget-children-value-delete
- :value-get (lambda (widget)
- (widget-value (car (widget-get widget :children))))
- :value-inline (lambda (widget)
- (widget-apply (car (widget-get widget :children))
- :value-inline))
- :default-get (lambda (widget)
- (widget-default-get
- (widget-convert (widget-get widget :type))))
- :match (lambda (widget value)
- (widget-apply (widget-convert (widget-get widget :type))
- :match value))
- :validate (lambda (widget)
- (widget-apply (car (widget-get widget :children)) :validate)))
-
;; Note: The format of `gmm-tool-bar-item' may change if some future Emacs
;; version will provide customizable tool bar buttons using a different
;; interface.
;;
;; Then use (plist-get rs-command :none), (plist-get rs-command :shift)
-(define-widget 'gmm-tool-bar-item (if (gmm-widget-p 'lazy) 'lazy 'gmm-lazy)
+(define-widget 'gmm-tool-bar-item 'lazy
"Tool bar list item."
:tag "Tool bar item"
:type '(choice
(const :tag "No map")
(plist :inline t :tag "Properties"))))
-(define-widget 'gmm-tool-bar-zap-list (if (gmm-widget-p 'lazy) 'lazy 'gmm-lazy)
+(define-widget 'gmm-tool-bar-zap-list 'lazy
"Tool bar zap list."
:tag "Tool bar zap list"
:type '(choice (const :tag "Zap all" t)
:tag "Other"
(symbol :tag "Icon item")))))
-;; (defun gmm-color-cells (&optional display)
-;; "Return the number of color cells supported by DISPLAY.
-;; Compatibility function."
-;; ;; `display-color-cells' doesn't return more than 256 even if color depth is
-;; ;; > 8 in Emacs 21.
-;; ;;
-;; ;; Feel free to add proper XEmacs support.
-;; (let* ((cells (and (fboundp 'display-color-cells)
-;; (display-color-cells display)))
-;; (plane (and (fboundp 'x-display-planes)
-;; (ash 1 (x-display-planes))))
-;; (none -1))
-;; (max (if (integerp cells) cells none)
-;; (if (integerp plane) plane none))))
-
(defcustom gmm-tool-bar-style
(if (and (boundp 'tool-bar-mode)
tool-bar-mode
- (and (fboundp 'display-visual-class)
- (not (memq (display-visual-class)
- (list 'static-gray 'gray-scale
- 'static-color 'pseudo-color)))))
+ (memq (display-visual-class)
+ (list 'static-gray 'gray-scale
+ 'static-color 'pseudo-color)))
'gnome
'retro)
"Preferred tool bar style."
runs the command find-file\", then use `new-file' in ZAP-LIST.
DEFAULT-MAP specifies the default key map for ICON-LIST."
- (let (;; For Emacs 21, we must let-bind `tool-bar-map'. In Emacs 22, we
- ;; could use some other local variable.
- (tool-bar-map (if (eq zap-list t)
- (make-sparse-keymap)
- (copy-keymap tool-bar-map))))
+ (let ((map (if (eq zap-list t)
+ (make-sparse-keymap)
+ (copy-keymap tool-bar-map))))
(when (listp zap-list)
;; Zap some items which aren't relevant for this mode and take up space.
(dolist (key zap-list)
- (define-key tool-bar-map (vector key) nil)))
+ (define-key map (vector key) nil)))
(mapc (lambda (el)
(let ((command (car el))
(icon (nth 1 el))
;; widget. Suppress tooltip by adding `:enable nil'.
(if (fboundp 'tool-bar-local-item)
(apply 'tool-bar-local-item icon nil nil
- tool-bar-map :enable nil props)
+ map :enable nil props)
;; (tool-bar-local-item ICON DEF KEY MAP &rest PROPS)
;; (tool-bar-add-item ICON DEF KEY &rest PROPS)
(apply 'tool-bar-add-item icon nil nil :enable nil props)))
(apply 'tool-bar-local-item
icon command
(intern icon) ;; reuse icon or fmap here?
- tool-bar-map props))
+ map props))
(t ;; A menu command
(apply 'tool-bar-local-item-from-menu
;; (apply 'tool-bar-local-item icon def key
;; tool-bar-map props)
- command icon tool-bar-map (symbol-value fmap)
+ command icon map (symbol-value fmap)
props)))
t))
(if (symbolp icon-list)
(eval icon-list)
icon-list))
- tool-bar-map))
+ map))
(defmacro defun-gmm (name function arg-list &rest body)
"Create function NAME.
`(defalias ',name ',function)
`(defun ,name ,arg-list ,@body))))
-(defun-gmm gmm-image-search-load-path
- image-search-load-path (file &optional path)
- "Emacs 21 and XEmacs don't have `image-search-load-path'.
-This function returns nil on those systems."
- nil)
-
-;; Cf. `mh-image-load-path-for-library' in `mh-compat.el'.
-
-(defun-gmm gmm-image-load-path-for-library
- image-load-path-for-library (library image &optional path no-error)
- "Return a suitable search path for images used by LIBRARY.
-
-It searches for IMAGE in `image-load-path' (excluding
-\"`data-directory'/images\") and `load-path', followed by a path
-suitable for LIBRARY, which includes \"../../etc/images\" and
-\"../etc/images\" relative to the library file itself, and then
-in \"`data-directory'/images\".
-
-Then this function returns a list of directories which contains
-first the directory in which IMAGE was found, followed by the
-value of `load-path'. If PATH is given, it is used instead of
-`load-path'.
-
-If NO-ERROR is non-nil and a suitable path can't be found, don't
-signal an error. Instead, return a list of directories as before,
-except that nil appears in place of the image directory.
-
-Here is an example that uses a common idiom to provide
-compatibility with versions of Emacs that lack the variable
-`image-load-path':
-
- ;; Shush compiler.
- (defvar image-load-path)
-
- (let* ((load-path (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\"))
- (image-load-path (cons (car load-path)
- (when (boundp \\='image-load-path)
- image-load-path))))
- (mh-tool-bar-folder-buttons-init))"
- (unless library (error "No library specified"))
- (unless image (error "No image specified"))
- (let (image-directory image-directory-load-path)
- ;; Check for images in image-load-path or load-path.
- (let ((img image)
- (dir (or
- ;; Images in image-load-path.
- (gmm-image-search-load-path image) ;; "gmm-" prefix!
- ;; Images in load-path.
- (locate-library image)))
- parent)
- ;; Since the image might be in a nested directory (for
- ;; example, mail/attach.pbm), adjust `image-directory'
- ;; accordingly.
- (when dir
- (setq dir (file-name-directory dir))
- (while (setq parent (file-name-directory img))
- (setq img (directory-file-name parent)
- dir (expand-file-name "../" dir))))
- (setq image-directory-load-path dir))
-
- ;; If `image-directory-load-path' isn't Emacs's image directory,
- ;; it's probably a user preference, so use it. Then use a
- ;; relative setting if possible; otherwise, use
- ;; `image-directory-load-path'.
- (cond
- ;; User-modified image-load-path?
- ((and image-directory-load-path
- (not (equal image-directory-load-path
- (file-name-as-directory
- (expand-file-name "images" data-directory)))))
- (setq image-directory image-directory-load-path))
- ;; Try relative setting.
- ((let (library-name d1ei d2ei)
- ;; First, find library in the load-path.
- (setq library-name (locate-library library))
- (if (not library-name)
- (error "Cannot find library %s in load-path" library))
- ;; And then set image-directory relative to that.
- (setq
- ;; Go down 2 levels.
- d2ei (file-name-as-directory
- (expand-file-name
- (concat (file-name-directory library-name) "../../etc/images")))
- ;; Go down 1 level.
- d1ei (file-name-as-directory
- (expand-file-name
- (concat (file-name-directory library-name) "../etc/images"))))
- (setq image-directory
- ;; Set it to nil if image is not found.
- (cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
- ((file-exists-p (expand-file-name image d1ei)) d1ei)))))
- ;; Use Emacs's image directory.
- (image-directory-load-path
- (setq image-directory image-directory-load-path))
- (no-error
- (message "Could not find image %s for library %s" image library))
- (t
- (error "Could not find image %s for library %s" image library)))
-
- ;; Return an augmented `path' or `load-path'.
- (nconc (list image-directory)
- (delete image-directory (copy-sequence (or path load-path))))))
-
(defun gmm-customize-mode (&optional mode)
"Customize customization group for MODE.
If mode is nil, use `major-mode' of the current buffer."
(string-match "^\\(.+\\)-mode$" mode)
(match-string 1 mode))))))
-(defun gmm-write-region (start end filename &optional append visit
- lockname mustbenew)
- "Compatibility function for `write-region'.
-
-In XEmacs, the seventh argument of `write-region' specifies the
-coding-system."
- (if (and mustbenew (featurep 'xemacs))
- (if (file-exists-p filename)
- (signal 'file-already-exists (list "File exists" filename))
- (write-region start end filename append visit lockname))
- (write-region start end filename append visit lockname mustbenew)))
-
-;; `interactive-p' is obsolete since Emacs 23.2.
-(defmacro gmm-called-interactively-p (kind)
- (condition-case nil
- (progn
- (eval '(called-interactively-p 'any))
- ;; Emacs >=23.2
- `(called-interactively-p ,kind))
- ;; Emacs <23.2
- (wrong-number-of-arguments '(called-interactively-p))
- ;; XEmacs
- (void-function '(interactive-p))))
-
-;; `labels' is obsolete since Emacs 24.3.
-(defmacro gmm-labels (bindings &rest body)
- "Make temporary function bindings.
-The bindings can be recursive and the scoping is lexical, but capturing
-them in closures will only work if `lexical-binding' is in use. But in
-Emacs 24.2 and older, the lexical scoping is handled via `lexical-let'
-rather than relying on `lexical-binding'.
-
-\(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
- `(,(progn (require 'cl) (if (fboundp 'cl-labels) 'cl-labels 'labels))
- ,bindings ,@body))
-(put 'gmm-labels 'lisp-indent-function 1)
-(put 'gmm-labels 'edebug-form-spec '((&rest (sexp sexp &rest form)) &rest form))
-
-(defun gmm-format-time-string (format-string &optional time tz)
- "Use FORMAT-STRING to format the time TIME, or now if omitted.
-The optional TZ specifies the time zone in a number of seconds; any
-other non-nil value will be treated as 0. Note that both the format
-specifiers `%Z' and `%z' will be replaced with a numeric form. "
-;; FIXME: is there a smart way to replace %Z with a time zone name?
- (if (and (numberp tz) (not (zerop tz)))
- (let ((st 0)
- (case-fold-search t)
- ls nd rest)
- (setq time (if time
- (copy-sequence time)
- (current-time)))
- (if (>= (setq ls (- (cadr time) (car (current-time-zone)) (- tz))) 0)
- (setcar (cdr time) ls)
- (setcar (cdr time) (+ ls 65536))
- (setcar time (1- (car time))))
- (setq tz (format "%s%02d%02d"
- (if (>= tz 0) "+" "-")
- (/ (abs tz) 3600)
- (/ (% (abs tz) 3600) 60)))
- (while (string-match "%+z" format-string st)
- (if (zerop (% (- (setq nd (match-end 0)) (match-beginning 0)) 2))
- (progn
- (push (substring format-string st (- nd 2)) rest)
- (push tz rest))
- (push (substring format-string st nd) rest))
- (setq st nd))
- (push (substring format-string st) rest)
- (format-time-string (apply 'concat (nreverse rest)) time))
- (format-time-string format-string time t)))
+(define-obsolete-function-alias 'gmm-format-time-string 'format-time-string
+ "25.2")
(provide 'gmm-utils)
(require 'gnus-score)
(require 'gnus-srvr)
(require 'gnus-util)
+(require 'timer)
(eval-when-compile
- (if (featurep 'xemacs)
- (require 'itimer)
- (require 'timer))
(require 'cl))
(autoload 'gnus-server-update-server "gnus-srvr")
:group 'gnus-agent
:type 'hook)
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
- (add-hook 'gnus-agent-group-mode-hook 'gnus-xmas-agent-group-menu-add))
-
(defcustom gnus-agent-summary-mode-hook nil
"Hook run in Agent summary minor modes."
:group 'gnus-agent
:type 'hook)
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
- (add-hook 'gnus-agent-summary-mode-hook 'gnus-xmas-agent-summary-menu-add))
-
(defcustom gnus-agent-server-mode-hook nil
"Hook run in Agent summary minor modes."
:group 'gnus-agent
:type 'hook)
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
- (add-hook 'gnus-agent-server-mode-hook 'gnus-xmas-agent-server-menu-add))
-
(defcustom gnus-agent-confirmation-function 'y-or-n-p
"Function to confirm when error happens."
:version "21.1"
(defvar gnus-headers)
(defvar gnus-score)
-;; Added to support XEmacs
-(eval-and-compile
- (unless (fboundp 'directory-files-and-attributes)
- (defun directory-files-and-attributes (directory
- &optional full match nosort)
- (let (result)
- (dolist (file (directory-files directory full match nosort))
- (push (cons file (file-attributes file)) result))
- (nreverse result)))))
-
;;;
;;; Setup
;;;
["Remove" gnus-agent-remove-server t]))))
(defun gnus-agent-make-mode-line-string (string mouse-button mouse-func)
- (if (and (fboundp 'propertize)
- (fboundp 'make-mode-line-mouse-map))
- (propertize string 'local-map
- (make-mode-line-mouse-map mouse-button mouse-func)
- 'mouse-face
- (if (and (featurep 'xemacs)
- ;; XEmacs's `facep' only checks for a face
- ;; object, not for a face name, so it's useless
- ;; to check with `facep'.
- (find-face 'modeline))
- 'modeline
- 'mode-line-highlight))
- string))
+ (propertize string 'local-map
+ (make-mode-line-mouse-map mouse-button mouse-func)
+ 'mouse-face 'mode-line-highlight))
(defun gnus-agent-toggle-plugged (set-to)
"Toggle whether Gnus is unplugged or not."
(not (eq gnus-agent-synchronize-flags 'ask)))
(and (eq gnus-agent-synchronize-flags 'ask)
(gnus-y-or-n-p
- (gnus-format-message
+ (format-message
"Synchronize flags on server `%s'? "
(cadr method))))))
(gnus-agent-synchronize-flags-server method)))
(let* ((gnus-tmp-name (format "%s" (car category)))
(gnus-tmp-groups (length (gnus-agent-cat-groups category))))
(beginning-of-line)
- (gnus-add-text-properties
+ (add-text-properties
(point)
(prog1 (1+ (point))
;; Insert the text.
;; Fixme: This isn't the right thing for mixed graphical and non-graphical
;; frames in a session.
(defcustom gnus-article-x-face-command
- (if (featurep 'xemacs)
- (if (or (gnus-image-type-available-p 'xface)
- (gnus-image-type-available-p 'pbm))
- 'gnus-display-x-face-in-from
- "{ echo \
+ (if (gnus-image-type-available-p 'pbm)
+ 'gnus-display-x-face-in-from
+ "{ echo \
'/* Format_version=1, Width=48, Height=48, Depth=1, Valid_bits_per_item=16 */'\
-; uncompface; } | icontopbm | ee -")
- (if (gnus-image-type-available-p 'pbm)
- 'gnus-display-x-face-in-from
- "{ echo \
-'/* Format_version=1, Width=48, Height=48, Depth=1, Valid_bits_per_item=16 */'\
-; uncompface; } | icontopbm | display -"))
+; uncompface; } | icontopbm | display -")
"*String or function to be executed to display an X-Face header.
If it is a string, the command will be executed in a sub-shell
asynchronously. The compressed face will be piped to this command."
Example: (_/*word*/_)."
:group 'gnus-article-emphasis)
-(defface gnus-emphasis-strikethru (if (featurep 'xemacs)
- '((t (:strikethru t)))
- '((t (:strike-through t))))
+(defface gnus-emphasis-strikethru '((t (:strike-through t)))
"Face used for displaying strike-through text (-word-)."
:group 'gnus-article-emphasis)
:type 'hook
:group 'gnus-article-various)
-(when (featurep 'xemacs)
- ;; Extracted from gnus-xmas-define in order to preserve user settings
- (when (fboundp 'turn-off-scroll-in-place)
- (add-hook 'gnus-article-mode-hook 'turn-off-scroll-in-place))
- ;; Extracted from gnus-xmas-redefine in order to preserve user settings
- (add-hook 'gnus-article-mode-hook 'gnus-xmas-article-menu-add))
-
(defcustom gnus-article-menu-hook nil
"*Hook run after the creation of the article mode menu."
:type 'hook
(item :tag "skip" nil)
(face :value default)))))
-(defcustom gnus-face-properties-alist (if (featurep 'xemacs)
- '((xface . (:face gnus-x-face)))
- '((pbm . (:face gnus-x-face))
- (png . nil)))
+(defcustom gnus-face-properties-alist '((pbm . (:face gnus-x-face))
+ (png . nil))
"Alist of image types and properties applied to Face and X-Face images.
Here are examples:
See the manual for the valid properties for various image types.
Currently, `pbm' is used for X-Face images and `png' is used for Face
-images in Emacs. Only the `:face' property is effective on the `xface'
-image type in XEmacs if it is built with the libcompface library."
+images in Emacs."
:version "23.1" ;; No Gnus
:group 'gnus-article-headers
:type '(repeat (cons :format "%v" (symbol :tag "Image type") plist)))
:type gnus-article-treat-custom)
(put 'gnus-treat-overstrike 'highlight t)
-(defcustom gnus-treat-ansi-sequences (if (locate-library "ansi-color") t)
+(defcustom gnus-treat-ansi-sequences t
"Treat ANSI SGR control sequences.
Valid values are nil, t, `head', `first', `last', an integer or a
predicate. See Info node `(gnus)Customizing Articles'."
(defcustom gnus-treat-display-x-face
(and (not noninteractive)
(gnus-image-type-available-p 'xbm)
- (if (featurep 'xemacs)
- (featurep 'xface)
- (condition-case nil
- (and (string-match "^0x" (shell-command-to-string "uncompface"))
- (executable-find "icontopbm"))
- ;; shell-command-to-string may signal an error, e.g. if
- ;; shell-file-name is not found.
- (error nil)))
+ (condition-case nil
+ (and (string-match "^0x" (shell-command-to-string "uncompface"))
+ (executable-find "icontopbm"))
+ ;; shell-command-to-string may signal an error, e.g. if
+ ;; shell-file-name is not found.
+ (error nil))
'head)
"Display X-Face headers.
Valid values are nil and `head'.
:type 'string
:group 'mime-security)
-(defvar idna-program)
-
-(defcustom gnus-use-idna (and (mm-coding-system-p 'utf-8)
- (condition-case nil
- (require 'idna)
- (file-error)
- (invalid-operation))
- idna-program
- (executable-find idna-program))
- "Whether IDNA decoding of headers is used when viewing messages.
-This requires GNU Libidn, and by default only enabled if it is found."
- :version "22.1"
+(defcustom gnus-use-idna t
+ "Whether IDNA decoding of headers is used when viewing messages."
+ :version "25.2"
:group 'gnus-article-headers
:type 'boolean)
(- gnus-article-normalized-header-length column)
? )))
((> column gnus-article-normalized-header-length)
- (gnus-put-text-property
+ (put-text-property
(progn
(forward-char gnus-article-normalized-header-length)
(point))
"Translate many Unicode characters into their ASCII equivalents."
(interactive)
(require 'org-entities)
- (let ((table (make-char-table (if (featurep 'xemacs) 'generic))))
+ (let ((table (make-char-table nil)))
(dolist (elem org-entities)
(when (and (listp elem)
(= (length (nth 6 elem)) 1))
- (if (featurep 'xemacs)
- (put-char-table (aref (nth 6 elem) 0) (nth 4 elem) table)
- (set-char-table-range table (aref (nth 6 elem) 0) (nth 4 elem)))))
+ (set-char-table-range table (aref (nth 6 elem) 0) (nth 4 elem))))
(save-excursion
(when (article-goto-body)
(let ((inhibit-read-only t)
replace props)
(while (not (eobp))
- (if (not (setq replace (if (featurep 'xemacs)
- (get-char-table (following-char) table)
- (aref table (following-char)))))
+ (if (not (setq replace (aref table (following-char))))
(forward-char 1)
(if (prog1
(setq props (text-properties-at (point)))
(setq truncate-lines nil))
((numberp arg)
(setq truncate-lines t)))
- ;; In versions of Emacs 22 (CVS) before 2006-05-26,
- ;; `toggle-truncate-lines' needs an argument.
(toggle-truncate-lines)))
(defun gnus-article-treat-body-boundary ()
(goto-char (point-max))
(let ((start (point)))
(insert "X-Boundary: ")
- (gnus-add-text-properties start (point) gnus-hidden-properties)
+ (add-text-properties start (point) gnus-hidden-properties)
(insert (let (str (max (window-width)))
- (if (featurep 'xemacs)
- (setq max (1- max)))
(while (>= max (length str))
(setq str (concat str gnus-body-boundary-delimiter)))
(substring str 0 max))
"\n")
- (gnus-put-text-property start (point) 'gnus-decoration 'header)))))
+ (put-text-property start (point) 'gnus-decoration 'header)))))
(defun article-fill-long-lines ()
"Fill lines that are wider than the window width."
;; The command is a string, so we interpret the command
;; as a, well, command, and fork it off.
(let ((process-connection-type nil))
- (gnus-set-process-query-on-exit-flag
+ (set-process-query-on-exit-flag
(start-process
"article-x-face" nil shell-file-name
shell-command-switch gnus-article-x-face-command)
ctl (and ct (mail-header-parse-content-type ct))
charset (cond
(prompt
- (mm-read-coding-system "Charset to decode: "))
+ (read-coding-system "Charset to decode: "))
(ctl
(mail-content-type-get ctl 'charset)))
format (and ctl (mail-content-type-get ctl 'format)))
t t nil 1))
(goto-char (point-min)))))))
-(autoload 'idna-to-unicode "idna")
-
(defun article-decode-idna-rhs ()
"Decode IDNA strings in RHS in various headers in current buffer.
The following headers are decoded: From:, To:, Cc:, Reply-To:,
(save-excursion
(and (re-search-backward "^[^ \t]" nil t)
(looking-at "From\\|To\\|Cc\\|Reply-To\\|Mail-Reply-To\\|Mail-Followup-To")))
- (setq unicode (idna-to-unicode ace))))
+ (setq unicode (puny-decode-domain ace))))
(unless (string= ace unicode)
(replace-match unicode nil nil nil 1)))))))))
(if (stringp charset)
(setq charset (intern (downcase charset)))))))
(if read-charset
- (setq charset (mm-read-coding-system "Charset: " charset)))
+ (setq charset (read-coding-system "Charset: " charset)))
(unless charset
(setq charset gnus-newsgroup-charset))
(when (or force
(if (stringp charset)
(setq charset (intern (downcase charset)))))))
(if read-charset
- (setq charset (mm-read-coding-system "Charset: " charset)))
+ (setq charset (read-coding-system "Charset: " charset)))
(unless charset
(setq charset gnus-newsgroup-charset))
(when (or force
(save-restriction
(narrow-to-region (point) (point-max))
(base64-decode-region (point-min) (point-max))
- (mm-decode-coding-region
+ (decode-coding-region
(point-min) (point-max)
(mm-charset-to-coding-system charset nil t)))))))
-(eval-when-compile
- (require 'rfc1843))
+(declare-function rfc1843-decode-region "rfc1843" (from to))
(defun article-decode-HZ ()
"Translate a HZ-encoded article."
(while (re-search-forward
"\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t)
(replace-match "\\1\\3" t)))
- (when (gmm-called-interactively-p 'any)
+ (when (called-interactively-p 'any)
(gnus-treat-article nil))))
(defun article-wash-html ()
(cond ((file-directory-p file)
(when (or (not (eq how 'file))
(gnus-y-or-n-p
- (gnus-format-message
+ (format-message
"Delete temporary HTML file(s) in directory `%s'? "
(file-name-as-directory file))))
(gnus-delete-directory file)))
<img[\t\n ]+\\(?:[^\t\n >]+[\t\n ]+\\)*src=\"\\(cid:\\([^\"]+\\)\\)\""
nil t)
(unless cid-dir
- (setq cid-dir (mm-make-temp-file "cid" t))
+ (setq cid-dir (make-temp-file "cid" t))
(add-to-list 'gnus-article-browse-html-temp-list cid-dir))
(setq file nil
content nil)
(replace-match cid-file nil nil nil 1))))
(unless content (setq content (buffer-string))))
(when (or charset header (not file))
- (setq tmp-file (mm-make-temp-file
+ (setq tmp-file (make-temp-file
;; Do we need to care for 8.3 filenames?
"mm-" nil ".html")))
;; Add a meta html tag to specify charset and a header.
;; charset specified in parts might be different.
(if (eq charset 'gnus-decoded)
(setq charset 'utf-8
- eheader (mm-encode-coding-string (buffer-string)
- charset)
+ eheader (encode-coding-string (buffer-string)
+ charset)
title (when title
- (mm-encode-coding-string title charset))
- body (mm-encode-coding-string content charset))
+ (encode-coding-string title charset))
+ body (encode-coding-string content charset))
(setq hcharset (mm-find-mime-charset-region (point-min)
(point-max)))
(cond ((= (length hcharset) 1)
(mm-charset-to-coding-system charset
nil t))
(if (eq coding body)
- (setq eheader (mm-encode-coding-string
+ (setq eheader (encode-coding-string
(buffer-string) coding)
title (when title
- (mm-encode-coding-string
+ (encode-coding-string
title coding))
body content)
(setq charset 'utf-8
- eheader (mm-encode-coding-string
+ eheader (encode-coding-string
(buffer-string) charset)
title (when title
- (mm-encode-coding-string
+ (encode-coding-string
title charset))
- body (mm-encode-coding-string
- (mm-decode-coding-string
+ body (encode-coding-string
+ (decode-coding-string
content body)
charset))))
(setq charset hcharset
- eheader (mm-encode-coding-string
+ eheader (encode-coding-string
(buffer-string) coding)
title (when title
- (mm-encode-coding-string
+ (encode-coding-string
title coding))
body content))
- (setq eheader (mm-string-as-unibyte (buffer-string))
+ (setq eheader (string-as-unibyte (buffer-string))
body content)))
(erase-buffer)
(mm-disable-multibyte)
(charset
(mm-with-unibyte-buffer
(insert (if (eq charset 'gnus-decoded)
- (mm-encode-coding-string content
- (setq charset 'utf-8))
+ (encode-coding-string content
+ (setq charset 'utf-8))
content))
(if (or (mm-add-meta-html-tag handle charset)
(not file))
(setq command
(if (and (eq command 'default) default)
default
- (gnus-read-shell-command "Shell command on this article: "
- default))))
+ (read-shell-command "Shell command on this article: " default))))
(when (string-equal command "")
(if default
(setq command default)
(put-text-property (match-end 0) (point-max)
'face eface)))))))))
-(autoload 'canlock-verify "canlock" nil t) ;; for XEmacs.
-
(defun article-verify-cancel-lock ()
"Verify Cancel-Lock header."
(interactive)
'undefined 'gnus-article-read-summary-keys gnus-article-mode-map)
(defvar gnus-article-send-map)
-
(gnus-define-keys (gnus-article-send-map "S" gnus-article-mode-map)
- "W" gnus-article-wide-reply-with-original)
-(if (featurep 'xemacs)
- (set-keymap-default-binding gnus-article-send-map
- 'gnus-article-read-summary-send-keys)
- (define-key gnus-article-send-map [t] 'gnus-article-read-summary-send-keys))
+ "W" gnus-article-wide-reply-with-original
+ [t] 'gnus-article-read-summary-send-keys)
(defun gnus-article-make-menu-bar ()
(unless (boundp 'gnus-article-commands-menu)
(make-local-variable 'gnus-article-ignored-charsets)
(set (make-local-variable 'bookmark-make-record-function)
'gnus-summary-bookmark-make-record)
- ;; Prevent Emacs 22 from displaying non-break space with `nobreak-space'
- ;; face.
+ ;; Prevent Emacs from displaying non-break space with
+ ;; `nobreak-space' face.
(set (make-local-variable 'nobreak-char-display) nil)
;; Enable `gnus-article-remove-images' to delete images shr.el renders.
(set (make-local-variable 'shr-put-image-function) 'gnus-shr-put-image)
(defun gnus-article-stop-animations ()
(dolist (timer (and (boundp 'timer-list)
timer-list))
- (when (eq (gnus-timer--function timer) 'image-animate-timeout)
+ (when (eq (timer--function timer) 'image-animate-timeout)
(cancel-timer timer))))
(defun gnus-stop-downloads ()
(gnus-article-setup-buffer)
(set-buffer gnus-article-buffer)
;; Deactivate active regions.
- (when (and (boundp 'transient-mark-mode)
- transient-mark-mode)
+ (when transient-mark-mode
(setq mark-active nil))
(if (not (setq result (let ((inhibit-read-only t))
(gnus-request-article-this-buffer
(defvar gnus-mime-button-map
(let ((map (make-sparse-keymap)))
- (define-key map gnus-mouse-2 'gnus-article-push-button)
- (define-key map gnus-down-mouse-3 'gnus-mime-button-menu)
+ (define-key map [mouse-2] 'gnus-article-push-button)
+ (define-key map [down-mouse-3] 'gnus-mime-button-menu)
(dolist (c gnus-mime-button-commands)
(define-key map (cadr c) (car c)))
map))
(let ((mbl1 mml-buffer-list))
(setq mml-buffer-list mbl)
(set (make-local-variable 'mml-buffer-list) mbl1))
- (gnus-make-local-hook 'kill-buffer-hook)
(add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))
`(lambda (no-highlight)
(let ((mail-parse-charset (or gnus-article-charset
((numberp arg)
(setq charset (or (cdr (assq arg
gnus-summary-show-article-charset-alist))
- (mm-read-coding-system "Charset: ")))))
+ (read-coding-system "Charset: ")))))
(switch-to-buffer (generate-new-buffer filename))
(if (or coding-system
(and charset
(not (eq coding-system 'ascii))))
(progn
(mm-enable-multibyte)
- (insert (mm-decode-coding-string contents coding-system))
- (setq buffer-file-coding-system
- (if (boundp 'last-coding-system-used)
- (symbol-value 'last-coding-system-used)
- coding-system)))
+ (insert (decode-coding-string contents coding-system))
+ (setq buffer-file-coding-system last-coding-system-used))
(mm-disable-multibyte)
(insert contents)
(setq buffer-file-coding-system mm-binary-coding-system))
(gnus-article-check-buffer)
(let* ((handle (or handle (get-text-property (point) 'gnus-data)))
(contents (and handle (mm-get-part handle)))
- (file (mm-make-temp-file (expand-file-name "mm." mm-tmp-directory)))
+ (file (make-temp-file (expand-file-name "mm." mm-tmp-directory)))
(printer (mailcap-mime-info (mm-handle-media-type handle) "print")))
(when contents
(if printer
(let ((displayed-p (mm-handle-displayed-p handle)))
(gnus-insert-mime-button handle (get-text-property btn 'gnus-part)
(list displayed-p))
- (if (featurep 'emacs)
- (delete-region
- (point)
- (next-single-property-change (point) 'gnus-data nil (point-max)))
- (let* ((end (next-single-property-change (point) 'gnus-data))
- (annots (annotations-at (or end (point-max)))))
- (delete-region (point)
- (if end
- (if annots (1+ end) end)
- (point-max)))
- (dolist (annot annots)
- (set-extent-endpoints annot (point) (point)))))
+ (delete-region
+ (point)
+ (next-single-property-change (point) 'gnus-data nil (point-max)))
(setq start (point))
(if (search-backward "\n\n" nil t)
(progn
(or (cdr (assq
arg
gnus-summary-show-article-charset-alist))
- (mm-read-coding-system "Charset: "))))
+ (read-coding-system "Charset: "))))
(if (mm-handle-undisplayer handle)
(mm-remove-part handle)))
(gnus-mime-set-charset-parameters handle charset)
window
(setq window (selected-window))
;; Article may be displayed in the other frame.
- (gnus-select-frame-set-input-focus
+ (select-frame-set-input-focus
(prog1
frame
(setq frame (selected-frame))))))
(get-text-property (point) 'gnus-data))))
(set-marker overlay-arrow-position nil)
(unless gnus-auto-select-part
- (gnus-select-frame-set-input-focus frame)
+ (select-frame-set-input-focus frame)
(select-window window))))
t))
(if gnus-inhibit-mime-unbuttonizing
;; Toggle the button appearance between `[button]...' and `[button]'.
(let ((displayed-p (mm-handle-displayed-p handle)))
(gnus-insert-mime-button handle id (list displayed-p))
- (if (featurep 'emacs)
- (delete-region
- (point)
- (next-single-property-change (point) 'gnus-data nil (point-max)))
- (let* ((end (next-single-property-change (point) 'gnus-data))
- (annots (annotations-at (or end (point-max)))))
- (delete-region (point)
- (if end
- (if annots (1+ end) end)
- (point-max)))
- (dolist (annot annots)
- (set-extent-endpoints annot (point) (point)))))
+ (delete-region
+ (point)
+ (next-single-property-change (point) 'gnus-data nil (point-max)))
(setq start (point))
(if (search-backward "\n\n" nil t)
(progn
:button-keymap gnus-mime-button-map
:help-echo
(lambda (widget)
- ;; Needed to properly clear the message due to a bug in
- ;; wid-edit (XEmacs only).
- (if (boundp 'help-echo-owns-message)
- (setq help-echo-owns-message t))
(format
"%S: %s the MIME part; %S: more options"
- (aref gnus-mouse-2 0)
+ 'mouse-2
(if (mm-handle-displayed-p (widget-get widget :mime-handle))
"hide" "show")
- (aref gnus-down-mouse-3 0))))))
+ 'down-mouse-3)))))
(defun gnus-widget-press-button (elems _el)
(goto-char (widget-get elems :from))
(defun gnus-article-insert-newline ()
"Insert a newline, but mark it as undeletable."
- (gnus-put-text-property
- (point) (progn (insert "\n") (point)) 'gnus-undeletable t))
+ (put-text-property (point) (progn (insert "\n") (point)) 'gnus-undeletable t))
(defun gnus-mime-display-alternative (handles &optional preferred ibegend id)
(let* ((preferred (or preferred (mm-preferred-alternative handles)))
(not preferred)
(not (gnus-unbuttonized-mime-type-p
"multipart/alternative")))
- (gnus-add-text-properties
+ (add-text-properties
(setq from (point))
(progn
(insert (format "%d. " id))
(gnus-mime-display-alternative
',ihandles ',not-pref ',begend ,id))
keymap ,gnus-mime-button-map
- ,gnus-mouse-face-prop ,gnus-article-mouse-face
+ mouse-face ,gnus-article-mouse-face
face ,gnus-article-button-face
gnus-part ,id
article-type multipart
rear-nonsticky t))
(widget-convert-button 'link from (point)
- :action 'gnus-widget-press-button
- :button-keymap gnus-widget-button-keymap)
+ :action 'gnus-widget-press-button)
;; Do the handles
(while (setq handle (pop handles))
- (gnus-add-text-properties
+ (add-text-properties
(setq from (point))
(progn
(insert (format "(%c) %-18s"
(gnus-mime-display-alternative
',ihandles ',handle ',begend ,id))
keymap ,gnus-mime-button-map
- ,gnus-mouse-face-prop ,gnus-article-mouse-face
+ mouse-face ,gnus-article-mouse-face
face ,gnus-article-button-face
gnus-part ,id
gnus-data ,handle
rear-nonsticky t))
(widget-convert-button 'link from (point)
- :action 'gnus-widget-press-button
- :button-keymap gnus-widget-button-keymap)
+ :action 'gnus-widget-press-button)
(insert " "))
(insert "\n\n"))
(when preferred
(not (with-current-buffer gnus-summary-buffer
gnus-have-all-headers)))
(not gnus-inhibit-hiding))
- (gnus-article-hide-headers)))
+ (article-hide-headers)))
(declare-function shr-put-image "shr" (data alt &optional flags))
(when coding
;; If the coding system is not suitable to encode the text,
;; ask a user for a proper one.
- (when (fboundp 'select-safe-coding-system)
- (setq coding (coding-system-base
- (save-window-excursion
- (select-safe-coding-system (point-min) (point-max)
- coding))))
- (setq coding-system-for-write
- (or (cdr (assq coding '((mule-utf-8 . utf-8))))
- coding)))
+ (setq coding (coding-system-base
+ (save-window-excursion
+ (select-safe-coding-system (point-min) (point-max)
+ coding))))
+ (setq coding-system-for-write
+ (or (cdr (assq coding '((mule-utf-8 . utf-8))))
+ coding))
(goto-char (point-min))
;; Add the coding cookie.
(insert (format "X-Gnus-Coding-System: -*- coding: %s; -*-\n\n"
(interactive)
(when (gnus-article-next-page)
(goto-char (point-min))
- (gnus-article-read-summary-keys nil (gnus-character-to-event ?n))))
+ (gnus-article-read-summary-keys nil ?n)))
(defun gnus-article-goto-prev-page ()
"Show the previous page of the article."
(interactive)
(if (save-restriction (widen) (bobp)) ;; Real beginning-of-buffer?
- (gnus-article-read-summary-keys nil (gnus-character-to-event ?p))
+ (gnus-article-read-summary-keys nil ?p)
(gnus-article-prev-page nil)))
;; This is cleaner but currently breaks `gnus-pick-mode':
If end of article, return non-nil. Otherwise return nil.
Argument LINES specifies lines to be scrolled up."
(interactive "p")
- (move-to-window-line (if (featurep 'xemacs) -1 (- -1 scroll-margin)))
+ (move-to-window-line (- -1 scroll-margin))
(if (and (not (and gnus-article-over-scroll
(> (count-lines (window-start) (point-max))
- (if (featurep 'xemacs)
- (or lines (1- (window-height)))
- (+ (or lines (1- (window-height))) scroll-margin)))))
+ (+ (or lines (1- (window-height))) scroll-margin))))
(save-excursion
(end-of-line)
(and (pos-visible-in-window-p) ;Not continuation line.
(defun gnus-article-beginning-of-window ()
"Move point to the beginning of the window.
-In Emacs, the point is placed at the line number which `scroll-margin'
+The point is placed at the line number which `scroll-margin'
specifies."
- (if (featurep 'xemacs)
- (move-to-window-line 0)
- ;; There is an obscure bug in Emacs that makes it impossible to
- ;; scroll past big pictures in the article buffer. Try to fix
- ;; this by adding a sanity check by counting the lines visible.
- (when (> (count-lines (window-start) (window-end)) 30)
- (move-to-window-line
- (min (max 0 scroll-margin)
- (max 1 (- (window-height)
- (if mode-line-format 1 0)
- (if header-line-format 1 0)
- 2)))))))
+ ;; There is an obscure bug in Emacs that makes it impossible to
+ ;; scroll past big pictures in the article buffer. Try to fix
+ ;; this by adding a sanity check by counting the lines visible.
+ (when (> (count-lines (window-start) (window-end)) 30)
+ (move-to-window-line
+ (min (max 0 scroll-margin)
+ (max 1 (- (window-height)
+ (if mode-line-format 1 0)
+ (if header-line-format 1 0)
+ 2))))))
(defvar scroll-in-place)
(goto-char (point-max))
(recenter (if gnus-article-over-scroll
(if lines
- (max (if (featurep 'xemacs)
- lines
- (+ lines scroll-margin))
- 3)
+ (max (+ lines scroll-margin) 3)
(- (window-height) 2))
-1)))
(prog1
(let (gnus-pick-mode)
(setq unread-command-events (nconc unread-command-events
(list (or key last-command-event)))
- keys (if (featurep 'xemacs)
- (events-to-keys (read-key-sequence nil t))
- (read-key-sequence nil t)))))
+ keys (read-key-sequence nil t))))
(message "")
(article 1.0)))))))
(gnus-configure-windows 'article))
(setq win (get-buffer-window summary-buffer 'visible)))
- (gnus-select-frame-set-input-focus (window-frame win))
+ (select-frame-set-input-focus (window-frame win))
(select-window win))))
(setq in-buffer (current-buffer))
;; We disable the pick minor mode commands.
(defun gnus-article-read-summary-send-keys ()
(interactive)
- (let ((unread-command-events (list (gnus-character-to-event ?S))))
+ (let ((unread-command-events (list ?S)))
(gnus-article-read-summary-keys)))
(defun gnus-article-describe-key (key)
"Display documentation of the function invoked by KEY.
KEY is a string or a vector."
- (interactive (list (let ((cursor-in-echo-area t)) ;; better for XEmacs.
+ (interactive (list (let ((cursor-in-echo-area t))
(read-key-sequence "Describe key: "))))
(gnus-article-check-buffer)
(if (memq (key-binding key t) '(gnus-article-read-summary-keys
gnus-article-read-summary-send-keys))
(with-current-buffer gnus-article-current-summary
(setq unread-command-events
- (if (featurep 'xemacs)
- (append key unread-command-events)
- (nconc
- (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
- (list 'meta (- x 128))
- x))
- key)
- unread-command-events)))
+ (nconc
+ (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
+ (list 'meta (- x 128))
+ x))
+ key)
+ unread-command-events))
(let ((cursor-in-echo-area t)
gnus-pick-mode)
(describe-key (read-key-sequence nil t))))
(defun gnus-article-describe-key-briefly (key &optional insert)
"Display documentation of the function invoked by KEY.
KEY is a string or a vector."
- (interactive (list (let ((cursor-in-echo-area t)) ;; better for XEmacs.
+ (interactive (list (let ((cursor-in-echo-area t))
(read-key-sequence "Describe key: "))
current-prefix-arg))
(gnus-article-check-buffer)
gnus-article-read-summary-send-keys))
(with-current-buffer gnus-article-current-summary
(setq unread-command-events
- (if (featurep 'xemacs)
- (append key unread-command-events)
- (nconc
- (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
- (list 'meta (- x 128))
- x))
- key)
- unread-command-events)))
+ (nconc
+ (mapcar (lambda (x) (if (and (integerp x) (>= x 128))
+ (list 'meta (- x 128))
+ x))
+ key)
+ unread-command-events))
(let ((cursor-in-echo-area t)
gnus-pick-mode)
(describe-key-briefly (read-key-sequence nil t) insert)))
(interactive)
(let ((article (cdr gnus-article-current))
contents)
- (if (not (gnus-region-active-p))
+ (if (not (and transient-mark-mode mark-active))
(with-current-buffer gnus-summary-buffer
(gnus-summary-reply (list (list article)) wide))
(setq contents (buffer-substring (point) (mark t)))
;; Deactivate active regions.
- (when (and (boundp 'transient-mark-mode)
- transient-mark-mode)
+ (when transient-mark-mode
(setq mark-active nil))
(with-current-buffer gnus-summary-buffer
(gnus-summary-reply
(interactive)
(let ((article (cdr gnus-article-current))
contents)
- (if (not (gnus-region-active-p))
+ (if (not (and transient-mark-mode mark-active))
(with-current-buffer gnus-summary-buffer
(gnus-summary-followup (list (list article))))
(setq contents (buffer-substring (point) (mark t)))
;; Deactivate active regions.
- (when (and (boundp 'transient-mark-mode)
- transient-mark-mode)
+ (when transient-mark-mode
(setq mark-active nil))
(with-current-buffer gnus-summary-buffer
(gnus-summary-followup
hidden.
If given a prefix, show the hidden text instead."
(interactive (append (gnus-article-hidden-arg) (list 'force)))
- (gnus-article-hide-headers arg)
- (gnus-article-hide-list-identifiers arg)
- (gnus-article-hide-citation-maybe arg force)
- (gnus-article-hide-signature arg))
+ (gnus-with-article-buffer
+ (article-hide-headers arg)
+ (article-hide-list-identifiers)
+ (gnus-article-hide-citation-maybe arg force)
+ (article-hide-signature arg)))
(defun gnus-check-group-server ()
;; Make sure the connection to the server is alive.
;; equivalent of string-make-multibyte which amount to decoding
;; with locale-coding-system, causing failure of
;; subsequent decoding.
- (insert (mm-string-to-multibyte
+ (insert (string-to-multibyte
(with-current-buffer gnus-original-article-buffer
(buffer-substring (point-min) (point-max)))))
'article)
(when (and (not force)
(gnus-group-read-only-p))
(error "The current newsgroup does not support article editing"))
- (gnus-article-date-original)
+ (gnus-with-article-buffer
+ (article-date-original))
(gnus-article-edit-article
'ignore
`(lambda (no-highlight)
"\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|"
"nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)"
"\\(//[-a-z0-9_.]+:[0-9]*\\)?"
- (if (string-match "[[:digit:]]" "1") ;; Support POSIX?
- (let ((chars "-a-z0-9_=#$@~%&*+\\/[:word:]")
- (punct "!?:;.,"))
- (concat
- "\\(?:"
- ;; Match paired parentheses, e.g. in Wikipedia URLs:
- ;; http://thread.gmane.org/47B4E3B2.3050402@gmail.com
- "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)"
- "\\(?:" "[" chars punct "]+" "[" chars "]" "\\)?"
- "\\|"
- "[" chars punct "]+" "[" chars "]"
- "\\)"))
- (concat ;; XEmacs 21.4 doesn't support POSIX.
- "\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+"
- "\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)"))
+ (let ((chars "-a-z0-9_=#$@~%&*+\\/[:word:]")
+ (punct "!?:;.,"))
+ (concat
+ "\\(?:"
+ ;; Match paired parentheses, e.g. in Wikipedia URLs:
+ ;; http://thread.gmane.org/47B4E3B2.3050402@gmail.com
+ "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)"
+ "\\(?:" "[" chars punct "]+" "[" chars "]" "\\)?"
+ "\\|"
+ "[" chars punct "]+" "[" chars "]"
+ "\\)"))
"\\)")
"Regular expression that matches URLs."
:version "24.4"
:group 'gnus-article-buttons
:type 'regexp)
-(defcustom gnus-button-valid-fqdn-regexp
- message-valid-fqdn-regexp
+(defcustom gnus-button-valid-fqdn-regexp "\\([-A-Za-z0-9]+\\.\\)+[A-Za-z]+"
"Regular expression that matches a valid FQDN."
- :version "22.1"
+ :version "25.2"
:group 'gnus-article-buttons
:type 'regexp)
(list gnus-button-mid-or-mail-heuristic-alist)
(result 0) rate regexp lpartlen elem)
(setq lpartlen
- (length (gnus-replace-in-string mid-or-mail "^\\(.*\\)@.*$" "\\1")))
+ (length (replace-regexp-in-string "^\\(.*\\)@.*$" "\\1" mid-or-mail)))
(gnus-message 8 "`%s', length of local part=`%s'." mid-or-mail lpartlen)
;; Certain special cases...
(when (string-match
(setq guessed
;; get rid of surrounding angles...
(funcall pref
- (gnus-replace-in-string mid-or-mail "^<\\|>$" "")))
+ (replace-regexp-in-string "^<\\|>$" "" mid-or-mail)))
(if (or (eq 'mid guessed) (eq 'mail guessed))
(setq pref guessed)
(setq pref 'ask)))
"Call `describe-function' when pushing the corresponding URL button."
(describe-function
(intern
- (gnus-replace-in-string url gnus-button-handle-describe-prefix ""))))
+ (replace-regexp-in-string gnus-button-handle-describe-prefix "" url))))
(defun gnus-button-handle-describe-variable (url)
"Call `describe-variable' when pushing the corresponding URL button."
(describe-variable
(intern
- (gnus-replace-in-string url gnus-button-handle-describe-prefix ""))))
+ (replace-regexp-in-string gnus-button-handle-describe-prefix "" url))))
(defun gnus-button-handle-symbol (url)
"Display help on variable or function.
(defun gnus-button-handle-describe-key (url)
"Call `describe-key' when pushing the corresponding URL button."
(let* ((key-string
- (gnus-replace-in-string url gnus-button-handle-describe-prefix ""))
+ (replace-regexp-in-string gnus-button-handle-describe-prefix "" url))
(keys (ignore-errors (eval `(kbd ,key-string)))))
(if keys
(describe-key keys)
(defun gnus-button-handle-apropos (url)
"Call `apropos' when pushing the corresponding URL button."
- (apropos (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+ (apropos (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
(defun gnus-button-handle-apropos-command (url)
"Call `apropos' when pushing the corresponding URL button."
(apropos-command
- (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+ (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
(defun gnus-button-handle-apropos-variable (url)
"Call `apropos' when pushing the corresponding URL button."
- (funcall
- (if (fboundp 'apropos-variable) 'apropos-variable 'apropos)
- (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+ (apropos-variable
+ (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
(defun gnus-button-handle-apropos-documentation (url)
"Call `apropos' when pushing the corresponding URL button."
- (funcall
- (if (fboundp 'apropos-documentation) 'apropos-documentation 'apropos)
- (gnus-replace-in-string url gnus-button-handle-describe-prefix "")))
+ (apropos-documentation
+ (replace-regexp-in-string gnus-button-handle-describe-prefix "" url)))
(defun gnus-button-handle-library (url)
"Call `locate-library' when pushing the corresponding URL button."
(gnus-message 9 "url=`%s'" url)
(let* ((lib (locate-library url))
- (file (gnus-replace-in-string (or lib "") "\\.elc" ".el")))
+ (file (replace-regexp-in-string "\\.elc" ".el" (or lib ""))))
(if (not lib)
(gnus-message 1 "Cannot locale library `%s'." url)
(find-file-read-only file))))
(when (and header-face
(not (memq (point) hpoints)))
(push (point) hpoints)
- (gnus-put-text-property from (point) 'face header-face))
+ (put-text-property from (point) 'face header-face))
(when (and field-face
(not (memq (setq from (point)) fpoints)))
(push from fpoints)
(if (re-search-forward "^[^ \t]" nil t)
(forward-char -2)
(goto-char (point-max)))
- (gnus-put-text-property from (point) 'face field-face)))))))
+ (put-text-property from (point) 'face field-face)))))))
(defun gnus-article-highlight-signature ()
"Highlight the signature in an article.
(gnus-article-extend-url-button from start end))
(gnus-article-add-button start end
'gnus-button-push (list from entry))
- (gnus-put-text-property
+ (put-text-property
start end
'gnus-string (buffer-substring-no-properties
start end))))))))))
(when gnus-article-button-face
(overlay-put (make-overlay from to nil t)
'face gnus-article-button-face))
- (gnus-add-text-properties
+ (add-text-properties
from to
(nconc (and gnus-article-mouse-face
- (list gnus-mouse-face-prop gnus-article-mouse-face))
+ (list 'mouse-face gnus-article-mouse-face))
(list 'gnus-callback fun)
(and data (list 'gnus-data data))))
(widget-convert-button 'link from to :action 'gnus-widget-press-button
:help-echo (or text "Follow the link")
- :keymap gnus-url-button-map
- :button-keymap gnus-widget-button-keymap))
+ :keymap gnus-url-button-map))
(defun gnus-article-copy-string ()
"Copy the string in the button to the kill ring."
"Fetch a man page."
(gnus-message 9 "`%s' `%s'" gnus-button-man-handler url)
(when (eq gnus-button-man-handler 'woman)
- (setq url (gnus-replace-in-string url "([1-9][X1a-z]*).*\\'" "")))
+ (setq url (replace-regexp-in-string "([1-9][X1a-z]*).*\\'" "" url)))
(gnus-message 9 "`%s' `%s'" gnus-button-man-handler url)
(funcall gnus-button-man-handler url))
(defun gnus-button-handle-info-url (url)
"Fetch an info URL."
- (setq url (mm-subst-char-in-string ?+ ?\ url))
+ (setq url (subst-char-in-string ?+ ?\ url))
(cond
((string-match "^\\([^:/]+\\)?/\\(.*\\)" url)
(gnus-info-find-node
")" (gnus-url-unhex-string (match-string 2 url)))))
((string-match "([^)\"]+)[^\"]+" url)
(setq url
- (gnus-replace-in-string
- (gnus-replace-in-string url "[\n\t ]+" " ") "\"" ""))
+ (replace-regexp-in-string
+ "\"" "" (replace-regexp-in-string "[\n\t ]+" " " url)))
(gnus-info-find-node url))
(t (error "Can't parse %s" url))))
(defun gnus-button-handle-info-url-gnome (url)
"Fetch GNOME style info URL."
- (setq url (mm-subst-char-in-string ?_ ?\ url))
+ (setq url (subst-char-in-string ?_ ?\ url))
(if (string-match "\\([^#]+\\)#?\\(.*\\)" url)
(gnus-info-find-node
(concat "("
(if (fboundp func)
(funcall func)
(message-position-on-field (caar args)))
- (insert (gnus-replace-in-string
- (mapconcat 'identity (reverse (cdar args)) ", ")
- "\r\n" "\n" t))
+ (insert (replace-regexp-in-string
+ "\r\n" "\n"
+ (mapconcat 'identity (reverse (cdar args)) ", ") nil t))
(setq args (cdr args)))
(if subject
(message-goto-body)
(defvar gnus-prev-page-map
(let ((map (make-sparse-keymap)))
- (define-key map gnus-mouse-2 'gnus-button-prev-page)
+ (define-key map [mouse-2] 'gnus-button-prev-page)
(define-key map "\r" 'gnus-button-prev-page)
map))
(defvar gnus-next-page-map
(let ((map (make-sparse-keymap)))
- (define-key map gnus-mouse-2 'gnus-button-next-page)
+ (define-key map [mouse-2] 'gnus-button-next-page)
(define-key map "\r" 'gnus-button-next-page)
map))
(defvar gnus-mime-security-button-map
(let ((map (make-sparse-keymap)))
- (define-key map gnus-mouse-2 'gnus-article-push-button)
- (define-key map gnus-down-mouse-3 'gnus-mime-security-button-menu)
+ (define-key map [mouse-2] 'gnus-article-push-button)
+ (define-key map [down-mouse-3] 'gnus-mime-security-button-menu)
(dolist (c gnus-mime-security-button-commands)
(define-key map (cadr c) (car c)))
map))
:button-keymap gnus-mime-security-button-map
:help-echo
(lambda (_widget)
- ;; Needed to properly clear the message due to a bug in
- ;; wid-edit (XEmacs only).
- (when (boundp 'help-echo-owns-message)
- (setq help-echo-owns-message t))
(format
"%S: show detail; %S: more options"
- (aref gnus-mouse-2 0)
- (aref gnus-down-mouse-3 0))))))
+ 'mouse-2
+ 'down-mouse-3)))))
(defun gnus-mime-display-security (handle)
(save-restriction
(interactive)
(gnus-mime-security-run-function 'mm-pipe-part))
-(gnus-ems-redefine)
-
(provide 'gnus-art)
(run-hooks 'gnus-art-load-hook)
(with-current-buffer gnus-summary-buffer
(let ((next (caadr (gnus-data-find-list article))))
(when next
- (if (not (fboundp 'run-with-idle-timer))
- ;; This is either an older Emacs or XEmacs, so we
- ;; do this, which leads to slightly slower article
- ;; buffer display.
- (gnus-async-prefetch-article group next summary)
- (when gnus-async-timer
- (ignore-errors
- (nnheader-cancel-timer 'gnus-async-timer)))
- (setq gnus-async-timer
- (run-with-idle-timer
- 0.1 nil 'gnus-async-prefetch-article
- group next summary))))))))
+ (when gnus-async-timer
+ (ignore-errors
+ (nnheader-cancel-timer 'gnus-async-timer)))
+ (setq gnus-async-timer
+ (run-with-idle-timer
+ 0.1 nil 'gnus-async-prefetch-article
+ group next summary)))))))
(defun gnus-async-prefetch-article (group article summary &optional next)
"Possibly prefetch several articles starting with ARTICLE."
(insert-buffer-substring buffer)
;; Tag the beginning of the article with the ident.
(if (> (point-max) b)
- (gnus-put-text-property b (1+ b) 'gnus-backlog ident)
+ (put-text-property b (1+ b) 'gnus-backlog ident)
(gnus-error 3 "Article %d is blank" number))))))))
(defun gnus-backlog-remove-oldest-article ()
So the cdr of each bookmark is an alist too.")
-(defmacro gnus-bookmark-mouse-available-p ()
- "Return non-nil if a mouse is available."
- (if (featurep 'xemacs)
- '(device-on-window-system-p)
- '(display-mouse-p)))
-
-(defun gnus-bookmark-remove-properties (string)
- "Remove all text properties from STRING."
- (set-text-properties 0 (length string) nil string)
- string)
-
;;;###autoload
(defun gnus-bookmark-set ()
"Set a bookmark for this article."
;; Set the bookmark list
(setq gnus-bookmark-alist
(cons
- (list (gnus-bookmark-remove-properties bmk-name)
+ (list (substring-no-properties bmk-name)
(gnus-bookmark-make-record
group message-id author date subject annotation))
gnus-bookmark-alist))))
(group message-id author date subject annotation)
"Return the record part of a new bookmark, given GROUP MESSAGE-ID AUTHOR DATE SUBJECT and ANNOTATION."
(let ((the-record
- `((group . ,(gnus-bookmark-remove-properties group))
- (message-id . ,(gnus-bookmark-remove-properties message-id))
- (author . ,(gnus-bookmark-remove-properties author))
- (date . ,(gnus-bookmark-remove-properties date))
- (subject . ,(gnus-bookmark-remove-properties subject))
- (annotation . ,(gnus-bookmark-remove-properties annotation)))))
+ `((group . ,(substring-no-properties group))
+ (message-id . ,(substring-no-properties message-id))
+ (author . ,(substring-no-properties author))
+ (date . ,(substring-no-properties date))
+ (subject . ,(substring-no-properties subject))
+ (annotation . ,(substring-no-properties annotation)))))
the-record))
(defun gnus-bookmark-set-bookmark-name (group author subject)
"-" (car subject) "-" (cadr subject)))
(default-name-1
;; Strip "[]" chars from the bookmark name:
- (gnus-replace-in-string default-name-0 "[]_[]" ""))
+ (replace-regexp-in-string "[]_[]" "" default-name-0))
(name (read-from-minibuffer
(format "Set bookmark (%s): " default-name-1)
nil nil nil nil
deletion, or > if it is flagged for displaying."
(interactive)
(gnus-bookmark-maybe-load-default-file)
- (if (gmm-called-interactively-p 'any)
+ (if (called-interactively-p 'any)
(switch-to-buffer (get-buffer-create "*Gnus Bookmark List*"))
(set-buffer (get-buffer-create "*Gnus Bookmark List*")))
(let ((inhibit-read-only t)
(insert (if (member (gnus-bookmark-get-annotation name) (list nil ""))
" "
" *"))
- (if (gnus-bookmark-mouse-available-p)
+ (if (display-mouse-p)
(add-text-properties
(prog1
(point)
(insert "\n")))
`(mouse-face highlight follow-link t
help-echo ,(format "%s: go to this article"
- (aref gnus-mouse-2 0))))
+ 'mouse-2)))
(insert name "\n")))
(goto-char (point-min))
(forward-line 2)
nil
(setq gnus-bookmark-bmenu-mode-map (make-keymap))
(suppress-keymap gnus-bookmark-bmenu-mode-map t)
- (define-key gnus-bookmark-bmenu-mode-map "q" (if (fboundp 'quit-window)
- 'quit-window
- 'bury-buffer))
+ (define-key gnus-bookmark-bmenu-mode-map "q" 'quit-window)
(define-key gnus-bookmark-bmenu-mode-map "\C-m" 'gnus-bookmark-bmenu-select)
(define-key gnus-bookmark-bmenu-mode-map "v" 'gnus-bookmark-bmenu-select)
(define-key gnus-bookmark-bmenu-mode-map "d" 'gnus-bookmark-bmenu-delete)
(define-key gnus-bookmark-bmenu-mode-map "s" 'gnus-bookmark-bmenu-save)
(define-key gnus-bookmark-bmenu-mode-map "t" 'gnus-bookmark-bmenu-toggle-infos)
(define-key gnus-bookmark-bmenu-mode-map "a" 'gnus-bookmark-bmenu-show-details)
- (define-key gnus-bookmark-bmenu-mode-map gnus-mouse-2
+ (define-key gnus-bookmark-bmenu-mode-map [mouse-2]
'gnus-bookmark-bmenu-select-by-mouse))
;; Bookmark Buffer Menu mode is suitable only for specially formatted
(let ((start (point-at-eol)))
(move-to-column gnus-bookmark-bmenu-file-column t)
;; Strip off `mouse-face' from the white spaces region.
- (if (gnus-bookmark-mouse-available-p)
+ (if (display-mouse-p)
(remove-text-properties start (point)
'(mouse-face nil help-echo nil))))
(delete-region (point) (progn (end-of-line) (point)))
(insert (gnus-bookmark-get-details
bmk-name
gnus-bookmark-bookmark-inline-details))
- (if (gnus-bookmark-mouse-available-p)
+ (if (display-mouse-p)
(add-text-properties
start
(save-excursion (re-search-backward
`(mouse-face highlight
follow-link t
help-echo ,(format "%s: go to this article"
- (aref gnus-mouse-2 0))))))))
+ 'mouse-2)))))))
(defun gnus-bookmark-kill-line (&optional newline-too)
"Kill from point to end of line.
(gnus-bookmark-kill-line)
(let ((start (point)))
(insert (car gnus-bookmark-bmenu-hidden-bookmarks))
- (if (gnus-bookmark-mouse-available-p)
+ (if (display-mouse-p)
(add-text-properties
start
(save-excursion (re-search-backward
follow-link t
help-echo
,(format "%s: go to this bookmark in other window"
- (aref gnus-mouse-2 0))))))
+ 'mouse-2)))))
(setq gnus-bookmark-bmenu-hidden-bookmarks
(cdr gnus-bookmark-bmenu-hidden-bookmarks))
(forward-line 1))))))))
(or (cdr (assoc group gnus-cache-decoded-group-names))
(let ((decoded (gnus-group-decoded-name group))
(coding (or nnmail-pathname-coding-system
- (and (boundp 'file-name-coding-system)
- file-name-coding-system)
- (and (boundp 'default-file-name-coding-system)
- default-file-name-coding-system))))
+ file-name-coding-system
+ default-file-name-coding-system)))
(push (cons group decoded) gnus-cache-decoded-group-names)
- (push (cons (mm-decode-coding-string
- (mm-encode-coding-string decoded coding)
+ (push (cons (decode-coding-string
+ (encode-coding-string decoded coding)
coding)
group)
gnus-cache-unified-group-names)
;;; Code:
(eval-when-compile (require 'cl))
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
(require 'gnus)
(require 'gnus-range)
(inhibit-point-motion-hooks t)
(marks (gnus-dissect-cited-text))
(adaptive-fill-mode nil)
- (filladapt-mode nil)
(fill-column (if width (prefix-numeric-value width) fill-column)))
(save-restriction
(while (cdr marks)
((assq number gnus-cite-attribution-alist))
(t
(gnus-add-wash-type 'cite)
- (gnus-add-text-properties
+ (add-text-properties
(point) (progn (forward-line 1) (point))
(nconc (list 'article-type 'cite)
gnus-hidden-properties))))
(defvar font-lock-keywords)
(defvar font-lock-set-defaults)
-(eval-and-compile
- (unless (featurep 'xemacs)
- (autoload 'font-lock-set-defaults "font-lock")))
+(autoload 'font-lock-set-defaults "font-lock")
(define-minor-mode gnus-message-citation-mode
"Minor mode providing more font-lock support for nested citations.
nil ;; keymap
(when (eq major-mode 'message-mode) ;FIXME: Use derived-mode-p.
;; FIXME: Use font-lock-add-keywords!
- (let ((defaults (car (if (featurep 'xemacs)
- (get 'message-mode 'font-lock-defaults)
- font-lock-defaults)))
+ (let ((defaults (car font-lock-defaults))
default keywords)
(while defaults
(setq default (if (consp defaults)
gnus-message-citation-keywords))
(kill-local-variable default))))
;; Force `font-lock-set-defaults' to update `font-lock-keywords'.
- (if (featurep 'xemacs)
- (progn
- (require 'font-lock)
- (setq font-lock-defaults-computed nil
- font-lock-keywords nil))
- (setq font-lock-set-defaults nil))
+ (setq font-lock-set-defaults nil)
(font-lock-set-defaults)
- (cond (font-lock-mode
- (if (fboundp 'font-lock-flush)
- (font-lock-flush)
- (font-lock-fontify-buffer)))
- (gnus-message-citation-mode
- (font-lock-mode 1)))))
+ (if font-lock-mode
+ (font-lock-flush)
+ (gnus-message-citation-mode (font-lock-mode 1)))))
(defun turn-on-gnus-message-citation-mode ()
"Turn on `gnus-message-citation-mode'."
"Turn off `gnus-message-citation-mode'."
(gnus-message-citation-mode -1))
-(gnus-ems-redefine)
-
(provide 'gnus-cite)
;; Local Variables:
;; Decode values posting-style holds.
(dolist (style (cdr (assq 'posting-style values)))
(when (stringp (cadr style))
- (setcdr style (list (mm-decode-coding-string (cadr style) 'utf-8)))))
+ (setcdr style (list (decode-coding-string (cadr style) 'utf-8)))))
(setq gnus-custom-params
(apply 'widget-create 'group
;; Encode values posting-style holds.
(dolist (style (cdr (assq 'posting-style params)))
(when (stringp (cadr style))
- (setcdr style (list (mm-encode-coding-string (cadr style) 'utf-8)))))
+ (setcdr style (list (encode-coding-string (cadr style) 'utf-8)))))
(if gnus-custom-topic
(gnus-topic-set-parameters gnus-custom-topic params)
(gnus-group-edit-group-done 'params gnus-custom-group params)
(aset deadline 1 minute)
(aset deadline 2 hour)
;; Convert to seconds.
- (setq deadline (gnus-float-time (apply 'encode-time
- (append deadline nil))))
+ (setq deadline (float-time (apply 'encode-time
+ (append deadline nil))))
;; If this time has passed already, add a day.
- (when (< deadline (gnus-float-time))
+ (when (< deadline (float-time))
(setq deadline (+ 86400 deadline))) ; 86400 secs/day
;; Convert seconds to date header.
(setq deadline (message-make-date
(t
(setq delay (* num 60))))
(setq deadline (message-make-date
- (seconds-to-time (+ (gnus-float-time) delay)))))
+ (seconds-to-time (+ (float-time) delay)))))
(t (error "Malformed delay `%s'" delay)))
(message-add-header (format "%s: %s" gnus-delay-header deadline)))
(set-buffer-modified-p t)
(defun gnus-demon-idle-since ()
"Return the number of seconds since when Emacs is idle."
- (if (featurep 'xemacs)
- (itimer-time-difference (current-time) last-command-event-time)
- (float-time (or (current-idle-time)
- '(0 0 0)))))
+ (float-time (or (current-idle-time) '(0 0 0))))
(defun gnus-demon-run-callback (func &optional idle time special)
"Run FUNC if Emacs has been idle for longer than IDLE seconds.
;; Compatibility functions ==================================================
-(eval-and-compile
- (if (fboundp 'kill-entire-line)
- (defalias 'gnus-diary-kill-entire-line 'kill-entire-line)
- (defun gnus-diary-kill-entire-line ()
- (beginning-of-line)
- (let ((kill-whole-line t))
- (kill-line)))))
+(defun gnus-diary-kill-entire-line ()
+ (beginning-of-line)
+ (let ((kill-whole-line t))
+ (kill-line)))
;; Summary line format ======================================================
;;; Code:
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
(require 'dired)
(autoload 'mml-attach-file "mml")
(autoload 'mm-default-file-encoding "mm-decode");; Shift this to `mailcap.el'?
gnus-user-agent)
(function :tag "Other")))
-(eval-when-compile
- (when (featurep 'xemacs)
- (defvar gnus-dired-mode-hook)
- (defvar gnus-dired-mode-on-hook)
- (defvar gnus-dired-mode-off-hook)))
-
(define-minor-mode gnus-dired-mode
"Minor mode for intersections of gnus and dired.
(mapcar
;; don't attach directories
(lambda (f) (if (file-directory-p f) nil f))
- (nreverse
- (let ((arg nil)) ;; Silence XEmacs 21.5 when compiling.
- (dired-map-over-marks (dired-get-filename) arg)))))))
+ (nreverse (dired-map-over-marks (dired-get-filename) nil))))))
(let ((destination nil)
(files-str nil)
(bufs nil))
(require 'nndraft)
(require 'gnus-agent)
(eval-when-compile (require 'cl))
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
;;; Draft minor mode
(let* ((window (get-buffer-window buff t))
(frame (and window (window-frame window))))
(if frame
- (gnus-select-frame-set-input-focus frame)
+ (select-frame-set-input-focus frame)
(pop-to-buffer buff t)))
(error "The draft %s is under edit" file)))))
+++ /dev/null
-;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
-
-;; Copyright (C) 1995-2016 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(eval-when-compile
- (require 'cl)
- (require 'ring))
-
-;;; Function aliases later to be redefined for XEmacs usage.
-
-(defvar gnus-mouse-2 [mouse-2])
-(defvar gnus-down-mouse-3 [down-mouse-3])
-(defvar gnus-down-mouse-2 [down-mouse-2])
-(defvar gnus-widget-button-keymap nil)
-(defvar gnus-mode-line-modified
- (if (featurep 'xemacs)
- '("--**-" . "-----")
- '("**" "--")))
-
-(eval-and-compile
- (autoload 'gnus-xmas-define "gnus-xmas")
- (autoload 'gnus-xmas-redefine "gnus-xmas"))
-
-(autoload 'gnus-get-buffer-create "gnus")
-(autoload 'nnheader-find-etc-directory "nnheader")
-(autoload 'smiley-region "smiley")
-
-(defun gnus-kill-all-overlays ()
- "Delete all overlays in the current buffer."
- (let* ((overlayss (overlay-lists))
- (buffer-read-only nil)
- (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
- (while overlays
- (delete-overlay (pop overlays)))))
-
-;;; Mule functions.
-
-(defun gnus-mule-max-width-function (el max-width)
- `(let* ((val (eval (, el)))
- (valstr (if (numberp val)
- (int-to-string val) val)))
- (if (> (length valstr) ,max-width)
- (truncate-string-to-width valstr ,max-width)
- valstr)))
-
-(eval-and-compile
- (if (featurep 'xemacs)
- (gnus-xmas-define)
- (defvar gnus-mouse-face-prop 'mouse-face
- "Property used for highlighting mouse regions.")))
-
-(defvar gnus-tmp-unread)
-(defvar gnus-tmp-replied)
-(defvar gnus-tmp-score-char)
-(defvar gnus-tmp-indentation)
-(defvar gnus-tmp-opening-bracket)
-(defvar gnus-tmp-lines)
-(defvar gnus-tmp-name)
-(defvar gnus-tmp-closing-bracket)
-(defvar gnus-tmp-subject-or-nil)
-(defvar gnus-check-before-posting)
-(defvar gnus-mouse-face)
-(defvar gnus-group-buffer)
-
-(defun gnus-ems-redefine ()
- (cond
- ((featurep 'xemacs)
- (gnus-xmas-redefine))
-
- ((featurep 'mule)
- ;; Mule and new Emacs definitions
-
- ;; [Note] Now there are three kinds of mule implementations,
- ;; original MULE, XEmacs/mule and Emacs 20+ including
- ;; MULE features. Unfortunately these APIs are different. In
- ;; particular, Emacs (including original Mule) and XEmacs are
- ;; quite different. However, this version of Gnus doesn't support
- ;; anything other than XEmacs 20+ and Emacs 20.3+.
-
- ;; Predicates to check are following:
- ;; (boundp 'MULE) is t only if Mule (original; anything older than
- ;; Mule 2.3) is running.
- ;; (featurep 'mule) is t when other mule variants are running.
-
- ;; It is possible to detect XEmacs/mule by (featurep 'mule) and
- ;; (featurep 'xemacs). In this case, the implementation for
- ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule.
-
- (defvar gnus-summary-display-table nil
- "Display table used in summary mode buffers.")
- (defalias 'gnus-max-width-function 'gnus-mule-max-width-function)
-
- (when (boundp 'gnus-check-before-posting)
- (setq gnus-check-before-posting
- (delq 'long-lines
- (delq 'control-chars gnus-check-before-posting))))
-
- (defun gnus-summary-line-format-spec ()
- (insert gnus-tmp-unread gnus-tmp-replied
- gnus-tmp-score-char gnus-tmp-indentation)
- (put-text-property
- (point)
- (progn
- (insert
- gnus-tmp-opening-bracket
- (format "%4d: %-20s"
- gnus-tmp-lines
- (if (> (length gnus-tmp-name) 20)
- (truncate-string-to-width gnus-tmp-name 20)
- gnus-tmp-name))
- gnus-tmp-closing-bracket)
- (point))
- gnus-mouse-face-prop gnus-mouse-face)
- (insert " " gnus-tmp-subject-or-nil "\n")))))
-
-;; Clone of `appt-select-lowest-window' in appt.el.
-(defun gnus-select-lowest-window ()
-"Select the lowest window on the frame."
- (let ((lowest-window (selected-window))
- (bottom-edge (nth 3 (window-edges))))
- (walk-windows (lambda (w)
- (let ((next-bottom-edge (nth 3 (window-edges w))))
- (when (< bottom-edge next-bottom-edge)
- (setq bottom-edge next-bottom-edge
- lowest-window w)))))
- (select-window lowest-window)))
-
-(defun gnus-region-active-p ()
- "Say whether the region is active."
- (and (boundp 'transient-mark-mode)
- transient-mark-mode
- (boundp 'mark-active)
- mark-active))
-
-(defun gnus-mark-active-p ()
- "Non-nil means the mark and region are currently active in this buffer."
- mark-active) ; aliased to region-exists-p in XEmacs.
-
-(autoload 'gnus-alive-p "gnus-util")
-(autoload 'mm-disable-multibyte "mm-util")
-
-;;; Image functions.
-
-(defun gnus-image-type-available-p (type)
- (and (fboundp 'image-type-available-p)
- (if (fboundp 'display-images-p)
- (display-images-p)
- t)
- (image-type-available-p type)))
-
-(defun gnus-create-image (file &optional type data-p &rest props)
- (let ((face (plist-get props :face)))
- (when face
- (setq props (plist-put props :foreground (face-foreground face)))
- (setq props (plist-put props :background (face-background face))))
- (ignore-errors
- (apply 'create-image file type data-p props))))
-
-(defun gnus-put-image (glyph &optional string category)
- (let ((point (point)))
- (insert-image glyph (or string " "))
- (put-text-property point (point) 'gnus-image-category category)
- (unless string
- (put-text-property (1- (point)) (point)
- 'gnus-image-text-deletable t))
- glyph))
-
-(defun gnus-remove-image (image &optional category)
- "Remove the image matching IMAGE and CATEGORY found first."
- (let ((start (point-min))
- val end)
- (while (and (not end)
- (or (setq val (get-text-property start 'display))
- (and (setq start
- (next-single-property-change start 'display))
- (setq val (get-text-property start 'display)))))
- (setq end (or (next-single-property-change start 'display)
- (point-max)))
- (if (and (equal val image)
- (equal (get-text-property start 'gnus-image-category)
- category))
- (progn
- (put-text-property start end 'display nil)
- (when (get-text-property start 'gnus-image-text-deletable)
- (delete-region start end)))
- (unless (= end (point-max))
- (setq start end
- end nil))))))
-
-(defmacro gnus-string-mark-left-to-right (string)
- (if (fboundp 'bidi-string-mark-left-to-right)
- `(bidi-string-mark-left-to-right ,string)
- string))
-
-(eval-and-compile
- ;; XEmacs does not have window-inside-pixel-edges
- (defalias 'gnus-window-inside-pixel-edges
- (if (fboundp 'window-inside-pixel-edges)
- 'window-inside-pixel-edges
- 'window-pixel-edges))
-
- (if (or (featurep 'emacs) (fboundp 'set-process-plist))
- (progn ; these exist since Emacs 22.1
- (defalias 'gnus-set-process-plist 'set-process-plist)
- (defalias 'gnus-process-plist 'process-plist)
- (defalias 'gnus-process-get 'process-get)
- (defalias 'gnus-process-put 'process-put))
- (defun gnus-set-process-plist (process plist)
- "Replace the plist of PROCESS with PLIST. Returns PLIST."
- (put 'gnus-process-plist-internal process plist))
-
- (defun gnus-process-plist (process)
- "Return the plist of PROCESS."
- ;; This form works but can't prevent the plist data from
- ;; growing infinitely.
- ;;(get 'gnus-process-plist-internal process)
- (let* ((plist (symbol-plist 'gnus-process-plist-internal))
- (tem (memq process plist)))
- (prog1
- (cadr tem)
- ;; Remove it from the plist data.
- (when tem
- (if (eq plist tem)
- (progn
- (setcar plist (caddr plist))
- (setcdr plist (or (cdddr plist) '(nil))))
- (setcdr (nthcdr (- (length plist) (length tem) 1) plist)
- (cddr tem)))))))
-
- (defun gnus-process-get (process propname)
- "Return the value of PROCESS' PROPNAME property.
-This is the last value stored with `(gnus-process-put PROCESS PROPNAME VALUE)'."
- (plist-get (gnus-process-plist process) propname))
-
- (defun gnus-process-put (process propname value)
- "Change PROCESS' PROPNAME property to VALUE.
-It can be retrieved with `(gnus-process-get PROCESS PROPNAME)'."
- (gnus-set-process-plist process
- (plist-put (gnus-process-plist process)
- propname value)))))
-
-(provide 'gnus-ems)
-
-;;; gnus-ems.el ends here
(require 'cl))
(require 'mm-util)
-(require 'gnus-ems)
(require 'gnus-util)
(require 'gnus)
(mail-address (cadr address)))
(when (if real-name
(re-search-forward
- (concat (gnus-replace-in-string
- (regexp-quote real-name) "[\t ]+" "[\t\n ]+")
+ (concat (replace-regexp-in-string
+ "[\t ]+" "[\t\n ]+"
+ (regexp-quote real-name))
"\\|"
(regexp-quote mail-address))
nil t)
;; another mail with the same someaddress.
(unless (memq 'gnus-gravatar (text-properties-at (point)))
(let ((point (point)))
- (unless (featurep 'xemacs)
- (setq gravatar (append gravatar gnus-gravatar-properties)))
+ (setq gravatar (append gravatar gnus-gravatar-properties))
(gnus-put-image gravatar (buffer-substring (point) (1+ point)) category)
(put-text-property point (point) 'gnus-gravatar address)
(gnus-add-wash-type category)
(require 'gnus-undo)
(require 'gmm-utils)
(require 'time-date)
-(require 'gnus-ems)
(eval-when-compile
(require 'mm-url)
:group 'gnus-group-visual
:type 'string)
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
- (add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
- (add-hook 'gnus-group-mode-hook 'gnus-xmas-setup-group-toolbar))
-
(defcustom gnus-group-menu-hook nil
"Hook run after the creation of the group mode menu."
:group 'gnus-group-various
:type '(repeat (cons (sexp :tag "Method") (symbol :tag "Charset"))))
(defcustom gnus-group-name-charset-group-alist
- (if (or (and (fboundp 'find-coding-system) (find-coding-system 'utf-8))
- (mm-coding-system-p 'utf-8))
+ (if (mm-coding-system-p 'utf-8)
'((".*" . utf-8))
nil)
"Alist of group regexp and the charset for group names.
(?O gnus-tmp-moderated-string ?s)
(?p gnus-tmp-process-marked ?c)
(?s gnus-tmp-news-server ?s)
- (?n ,(if (featurep 'xemacs)
- '(symbol-name gnus-tmp-news-method)
- 'gnus-tmp-news-method)
- ?s)
+ (?n gnus-tmp-news-method ?s)
(?P gnus-group-indentation ?s)
(?E gnus-tmp-group-icon ?s)
(?B gnus-tmp-summary-live ?c)
"\C-c\C-i" gnus-info-find-node
"\M-e" gnus-group-edit-group-method
"^" gnus-group-enter-server-mode
- gnus-mouse-2 gnus-mouse-pick-group
- [follow-link] mouse-face
+ [mouse-2] gnus-mouse-pick-group
+ [follow-link] 'mouse-face
"<" beginning-of-buffer
">" end-of-buffer
"\C-c\C-b" gnus-bug
["Catch up" gnus-group-catchup-current
:included (not (gnus-topic-mode-p))
:active (gnus-group-group-name)
- ,@(if (featurep 'xemacs) nil
- '(:help "Mark unread articles in the current group as read"))]
+ :help "Mark unread articles in the current group as read"]
["Catch up " gnus-topic-catchup-articles
:included (gnus-topic-mode-p)
- ,@(if (featurep 'xemacs) nil
- '(:help "Mark unread articles in the current group or topic as read"))]
+ :help "Mark unread articles in the current group or topic as read"]
["Catch up all articles" gnus-group-catchup-current-all
(gnus-group-group-name)]
["Check for new articles" gnus-group-get-new-news-this-group
:included (not (gnus-topic-mode-p))
:active (gnus-group-group-name)
- ,@(if (featurep 'xemacs) nil
- '(:help "Check for new messages in current group"))]
+ :help "Check for new messages in current group"]
["Check for new articles " gnus-topic-get-new-news-this-topic
:included (gnus-topic-mode-p)
- ,@(if (featurep 'xemacs) nil
- '(:help "Check for new messages in current group or topic"))]
+ :help "Check for new messages in current group or topic"]
["Toggle subscription" gnus-group-unsubscribe-current-group
(gnus-group-group-name)]
["Kill" gnus-group-kill-group :active (gnus-group-group-name)
- ,@(if (featurep 'xemacs) nil
- '(:help "Kill (remove) current group"))]
+ :help "Kill (remove) current group"]
["Yank" gnus-group-yank-group gnus-list-of-killed-groups]
["Describe" gnus-group-describe-group :active (gnus-group-group-name)
- ,@(if (featurep 'xemacs) nil
- '(:help "Display description of the current group"))]
+ :help "Display description of the current group"]
;; Actually one should check, if any of the marked groups gives t for
;; (gnus-check-backend-function 'request-expire-articles ...)
["Expire articles" gnus-group-expire-articles
(memq (gnus-group-group-name) gnus-group-marked))]
["Unmark all" gnus-group-unmark-all-groups gnus-group-marked]
["Mark regexp..." gnus-group-mark-regexp t]
- ["Mark region" gnus-group-mark-region :active (gnus-mark-active-p)]
+ ["Mark region" gnus-group-mark-region :active mark-active]
["Mark buffer" gnus-group-mark-buffer t]
["Execute command" gnus-group-universal-argument
(or gnus-group-marked (gnus-group-group-name))])
("Subscribe"
["Subscribe to a group..." gnus-group-unsubscribe-group t]
["Kill all newsgroups in region" gnus-group-kill-region
- :active (gnus-mark-active-p)]
+ :active mark-active]
["Kill all zombie groups" gnus-group-kill-all-zombies
gnus-zombie-list]
["Kill all groups on level..." gnus-group-kill-level t])
["Send a message (mail or news)" gnus-group-post-news t]
["Create a local message" gnus-group-news t]
["Check for new news" gnus-group-get-new-news
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Get newly arrived articles"))
- ]
+ :help "Get newly arrived articles"]
["Send queued messages" gnus-delay-send-queue
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Send all messages that are scheduled to be sent now"))
- ]
+ :help "Send all messages that are scheduled to be sent now"]
["Activate all groups" gnus-activate-all-groups t]
["Restart Gnus" gnus-group-restart t]
["Read init file" gnus-group-read-init-file t]
["Flush score cache" gnus-score-flush-cache t]
["Toggle topics" gnus-topic-mode t]
["Send a bug report" gnus-bug t]
- ["Exit from Gnus" gnus-group-exit
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Quit reading news"))]
+ ["Exit from Gnus" gnus-group-exit :help "Quit reading news"]
["Exit without saving" gnus-group-quit t]))
(gnus-run-hooks 'gnus-group-menu-hook)))
(defun gnus-group-make-tool-bar (&optional force)
"Make a group mode tool bar from `gnus-group-tool-bar'.
When FORCE, rebuild the tool bar."
- (when (and (not (featurep 'xemacs))
- (boundp 'tool-bar-mode)
+ (when (and (boundp 'tool-bar-mode)
tool-bar-mode
(display-graphic-p)
(or (not gnus-group-tool-bar-map) force))
(let* ((load-path
- (gmm-image-load-path-for-library "gnus"
- "gnus/toggle-subscription.xpm"
- nil t))
- (image-load-path (cons (car load-path)
- (when (boundp 'image-load-path)
- image-load-path)))
+ (image-load-path-for-library
+ "gnus" "gnus/toggle-subscription.xpm" nil t))
+ (image-load-path (cons (car load-path) image-load-path))
(map (gmm-tool-bar-from-list gnus-group-tool-bar
gnus-group-tool-bar-zap-list
'gnus-group-mode-map)))
(goto-char (point-min))
(setq gnus-group-mark-positions
(list (cons 'process (and (search-forward
- (mm-string-to-multibyte "\200") nil t)
+ (string-to-multibyte "\200") nil t)
(- (point) (point-min) 1))))))))
(defun gnus-mouse-pick-group (e)
(defun gnus-group-name-decode (string charset)
;; Fixme: Don't decode in unibyte mode.
- (if (and string charset (featurep 'mule))
- (mm-decode-coding-string string charset)
+ (if (and string charset)
+ (decode-coding-string string charset)
string))
(defun gnus-group-decoded-name (string)
(when (or gnus-group-listed-groups
(and (>= level gnus-level-killed) (<= lowest gnus-level-killed)))
(gnus-group-prepare-flat-list-dead
- (gnus-union
+ (cl-union
not-in-list
(setq gnus-killed-list (sort gnus-killed-list 'string<))
:test 'equal)
(or (not regexp)
(and (stringp regexp) (string-match regexp group))
(and (functionp regexp) (funcall regexp group))))
- (gnus-add-text-properties
+ (add-text-properties
(point) (prog1 (1+ (point))
(insert " " mark " *: "
(gnus-group-decoded-name group)
;; Date: Mon, 23 Jan 2006 19:59:13 +0100
;; Message-ID: <v9acdmrcse.fsf@marauder.physik.uni-ulm.de>
-(defcustom gnus-group-update-tool-bar
- (and (not (featurep 'xemacs))
- (boundp 'tool-bar-mode)
- tool-bar-mode
- ;; Using `redraw-frame' (see `gnus-tool-bar-update') in Emacs might
- ;; be confusing, so maybe we shouldn't call it by default.
- (fboundp 'force-window-update))
+;; Using `redraw-frame' (see `gnus-tool-bar-update') in Emacs might
+;; be confusing, so maybe we shouldn't call it by default.
+(defcustom gnus-group-update-tool-bar (and (boundp 'tool-bar-mode)
+ tool-bar-mode)
"Force updating the group buffer tool bar."
:group 'gnus-group
:version "22.1"
gnus-tmp-header) ; passed as parameter to user-funcs.
(beginning-of-line)
(setq beg (point))
- (gnus-add-text-properties
+ (add-text-properties
(point)
(prog1 (1+ (point))
;; Insert the text.
(progn
(unless (bound-and-true-p cursor-sensor-mode)
(cursor-sensor-mode 1))
- (gnus-put-text-property beg end 'cursor-sensor-functions
+ (put-text-property beg end 'cursor-sensor-functions
'(gnus-tool-bar-update)))
- (gnus-put-text-property beg end 'point-entered
+ (put-text-property beg end 'point-entered
#'gnus-tool-bar-update)
- (gnus-put-text-property beg end 'point-left
+ (put-text-property beg end 'point-left
#'gnus-tool-bar-update))))
(defun gnus-group-update-eval-form (group list)
"Eval `car' of each element of LIST, and return the first that return t.
Some value are bound so the form can use them."
- (defvar group-age) (defvar ticked) (defvar score) (defvar level)
- (defvar mailp) (defvar total) (defvar unread)
(when list
(let* ((entry (gnus-group-entry group))
- (unread (if (numberp (car entry)) (car entry) 0))
(active (gnus-active group))
- (total (if active (1+ (- (cdr active) (car active))) 0))
(info (nth 2 entry))
- (method (inline (gnus-server-get-method group (gnus-info-method info))))
+ (method (inline (gnus-server-get-method
+ group (gnus-info-method info))))
(marked (gnus-info-marks info))
- (mailp (apply 'append
- (mapcar
- (lambda (x)
- (memq x (assoc (symbol-name
- (car (or method gnus-select-method)))
- gnus-valid-select-methods)))
- '(mail post-mail))))
- (level (or (gnus-info-level info) gnus-level-killed))
- (score (or (gnus-info-score info) 0))
- (ticked (gnus-range-length (cdr (assq 'tick marked))))
- (group-age (gnus-group-timestamp-delta group)))
- ;; FIXME: http://thread.gmane.org/gmane.emacs.gnus.general/65451/focus=65465
- ;; ======================================================================
- ;; From: Richard Stallman
- ;; Subject: Re: Rewriting gnus-group-highlight-line (was: [...])
- ;; Cc: ding@gnus.org
- ;; Date: Sat, 27 Oct 2007 19:41:20 -0400
- ;; Message-ID: <E1IlvHM-0006TS-7t@fencepost.gnu.org>
- ;;
- ;; [...]
- ;; The kludge is that the alist elements contain expressions that refer
- ;; to local variables with short names. Perhaps write your own tiny
- ;; evaluator that handles just `and', `or', and numeric comparisons
- ;; and just a few specific variables.
- ;; ======================================================================
- ;;
- ;; Similar for other evaluated variables. Grep for risky-local-variable
- ;; to find them! -- rsteib
- ;;
- ;; Eval the cars of the lists until we find a match.
+ (env
+ (list
+ (cons 'unread (if (numberp (car entry)) (car entry) 0))
+ (cons 'total (if active (1+ (- (cdr active) (car active))) 0))
+ (cons 'mailp (apply
+ 'append
+ (mapcar
+ (lambda (x)
+ (memq x (assoc
+ (symbol-name
+ (car (or method gnus-select-method)))
+ gnus-valid-select-methods)))
+ '(mail post-mail))))
+ (cons 'level (or (gnus-info-level info) gnus-level-killed))
+ (cons 'score (or (gnus-info-score info) 0))
+ (cons 'ticked (gnus-range-length (cdr (assq 'tick marked))))
+ (cons 'group-age (gnus-group-timestamp-delta group)))))
(while (and list
- (not (eval (caar list))))
+ (not (eval (caar list) env)))
(setq list (cdr list)))
list)))
(let ((face (cdar (gnus-group-update-eval-form
group
gnus-group-highlight))))
- (unless (eq face (gnus-get-text-property-excluding-characters-with-faces beg 'face))
+ (unless (eq face (gnus-get-text-property-excluding-characters-with-faces
+ beg 'face))
(let ((inhibit-read-only t))
(gnus-put-text-property-excluding-characters-with-faces
beg end 'face
- (if (boundp face) (symbol-value face) face)))
- (gnus-extent-start-open beg))))
+ (if (boundp face) (symbol-value face) face))))))
(defun gnus-group-get-icon (group)
"Return an icon for GROUP according to `gnus-group-icon-list'."
(mode-string (eval gformat)))
;; Say whether the dribble buffer has been modified.
(setq mode-line-modified
- (if modified (car gnus-mode-line-modified)
- (cdr gnus-mode-line-modified)))
+ (if modified "**" "--"))
;; If the line is too long, we chop it off.
(when (> (length mode-string) max-len)
(setq mode-string (substring mode-string 0 (- max-len 4))))
(setq n (1- n))
(gnus-group-next-group way)))
(nreverse groups)))
- ((and (gnus-region-active-p) (mark))
+ ((and transient-mark-mode mark-active (mark))
;; Work on the region between point and mark.
(let ((max (max (point) (mark)))
groups)
(member group (mapcar 'symbol-name collection))
(symbol-value (intern-soft group collection)))
(setq group
- (mm-encode-coding-string
+ (encode-coding-string
group (gnus-group-name-charset nil group))))
- (gnus-replace-in-string group "\n" "")))
+ (replace-regexp-in-string "\n" "" group)))
;;;###autoload
(defun gnus-fetch-group (group &optional articles)
(unless range (setq range 500))
(when (< range 1)
(error "Invalid range: %s" range))
- (let ((tmpfile (mm-make-temp-file
+ (let ((tmpfile (make-temp-file
(format "%s.start-%s.range-%s." group start range)))
(gnus-thread-sort-functions '(gnus-thread-sort-by-number)))
(with-temp-file tmpfile
(setq ids (string-to-number ids)))
(unless (listp ids)
(setq ids (list ids)))
- (let ((tmpfile (mm-make-temp-file "gnus-temp-group-")))
+ (let ((tmpfile (make-temp-file "gnus-temp-group-")))
(let ((coding-system-for-write 'binary)
(coding-system-for-read 'binary))
(with-temp-file tmpfile
(mm-disable-multibyte)
(dolist (id ids)
- (url-insert-file-contents (format mbox-url id)))
+ (let ((file (format "~/.emacs.d/debbugs-cache/%s" id)))
+ (if (and (not gnus-plugged)
+ (file-exists-p file))
+ (insert-file-contents file)
+ (url-insert-file-contents (format mbox-url id)))))
(goto-char (point-min))
;; Add the debbugs address so that we can respond to reports easily.
(while (re-search-forward "^To: " nil t)
(end-of-line)
(insert (format ", %s@%s" (car ids)
- (gnus-replace-in-string
- (gnus-replace-in-string mbox-url "^http://" "")
- "/.*$" ""))))))
+ (replace-regexp-in-string
+ "/.*$" ""
+ (replace-regexp-in-string "^http://" "" mbox-url)))))))
(gnus-group-read-ephemeral-group
(format "nndoc+ephemeral:bug#%s"
(mapconcat 'number-to-string ids ","))
(when (stringp method)
(setq method (or (gnus-server-to-method method) method)))
(unless encoded
- (setq name (mm-encode-coding-string
+ (setq name (encode-coding-string
name
(gnus-group-name-charset method name))))
(let* ((meth (gnus-method-simplify
"Rename group to: "
(gnus-group-real-name (gnus-group-decoded-name group)))
method (gnus-info-method (gnus-get-info group)))
- (list group (mm-encode-coding-string
+ (list group (encode-coding-string
new-name
(gnus-group-name-charset
method
(gnus-info-params info))
(t info))
;; The proper documentation.
- (gnus-format-message
+ (format-message
"Editing the %s for `%s'."
(cond
((eq part 'method) "select method")
(list 'nndoc-address file)
(list 'nndoc-article-type (or type 'guess))))
(coding (gnus-group-name-charset method name)))
- (setcar (cdr method) (mm-encode-coding-string file coding))
+ (setcar (cdr method) (encode-coding-string file coding))
(gnus-group-make-group
- (mm-encode-coding-string (gnus-group-real-name name) coding)
+ (encode-coding-string (gnus-group-real-name name) coding)
method nil nil t)))
(defvar nnweb-type-definition)
(coding (gnus-group-name-charset '(nnrss "") title)))
(when coding
;; Unify non-ASCII text.
- (setq title (mm-decode-coding-string
- (mm-encode-coding-string title coding)
+ (setq title (decode-coding-string
+ (encode-coding-string title coding)
coding)))
(gnus-group-make-group title '(nnrss ""))
(push (list title href desc) nnrss-group-alist)
(error "%s is not an nnimap group" group))
(unless (setq acl (nnimap-acl-get mailbox (cadr method)))
(error "Server does not support ACL's"))
- (gnus-edit-form acl (gnus-format-message "\
+ (gnus-edit-form acl (format-message "\
Editing the access control list for `%s'.
An access control list is a list of (identifier . rights) elements.
(erase-buffer)
(while groups
(setq group (pop groups))
- (gnus-add-text-properties
+ (add-text-properties
(point) (prog1 (1+ (point))
(insert " *: "
(gnus-group-decoded-name group)
(gnus-read-all-descriptions-files)))
(error "Couldn't request descriptions file"))
(let ((buffer-read-only nil)
- b)
- (erase-buffer)
+ b groups)
(mapatoms
(lambda (group)
- (setq b (point))
- (let ((charset (gnus-group-name-charset nil (symbol-name group))))
- (insert (format " *: %-20s %s\n"
- (gnus-group-name-decode
- (symbol-name group) charset)
- (gnus-group-name-decode
- (symbol-value group) charset))))
- (gnus-add-text-properties
- b (1+ b) (list 'gnus-group group
- 'gnus-unread t 'gnus-marked nil
- 'gnus-level (1+ gnus-level-subscribed))))
+ (push (symbol-name group) groups))
gnus-description-hashtb)
+ (setq groups (sort groups 'string<))
+ (erase-buffer)
+ (dolist (group groups)
+ (setq b (point))
+ (let ((charset (gnus-group-name-charset nil group)))
+ (insert (format " *: %-20s %s\n"
+ (gnus-group-name-decode group charset)
+ (gnus-group-name-decode group charset))))
+ (add-text-properties
+ b (1+ b) (list 'gnus-group (intern group gnus-description-hashtb)
+ 'gnus-unread t 'gnus-marked nil
+ 'gnus-level (1+ gnus-level-subscribed))))
(goto-char (point-min))
(gnus-group-position-point)))
(if force
(if (null articles)
(setcar (nthcdr 3 info)
- (gnus-delete-alist type (car marked)))
+ (assq-delete-all type (car marked)))
(setcdr m (gnus-compress-sequence articles t)))
(setcdr m (gnus-compress-sequence
(sort (nconc (gnus-uncompress-range (cdr m))
(gnus-group-list-mode gnus-group-list-mode) ;; Save it.
func)
(push last-command-event unread-command-events)
- (if (featurep 'xemacs)
- (push (make-event 'key-press '(key ?A)) unread-command-events)
- (push ?A unread-command-events))
+ (push ?A unread-command-events)
(let (gnus-pick-mode keys)
- (setq keys (if (featurep 'xemacs)
- (events-to-keys (read-key-sequence nil))
- (read-key-sequence nil)))
- (setq func (lookup-key (current-local-map) keys)))
+ (setq keys (read-key-sequence nil)
+ func (lookup-key (current-local-map) keys)))
(if (or (not func)
(numberp func))
(ding)
(require 'xml)
(require 'browse-url)
(require 'mm-util)
-(eval-and-compile (unless (featurep 'xemacs) (require 'help-fns)))
+(require 'help-fns)
+(require 'url-queue)
(defcustom gnus-html-image-cache-ttl (days-to-time 7)
"Time used to determine if we should use images from the cache."
(define-key map [tab] 'widget-forward)
map))
-(eval-and-compile
- (defalias 'gnus-html-encode-url-chars
- (if (fboundp 'browse-url-url-encode-chars)
- 'browse-url-url-encode-chars
- (lambda (text chars)
- "URL-encode the chars in TEXT that match CHARS.
-CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
- (let ((encoded-text (copy-sequence text))
- (s 0))
- (while (setq s (string-match chars encoded-text s))
- (setq encoded-text
- (replace-match (format "%%%x"
- (string-to-char
- (match-string 0 encoded-text)))
- t t encoded-text)
- s (1+ s)))
- encoded-text)))))
-
(defun gnus-html-encode-url (url)
"Encode URL."
- (gnus-html-encode-url-chars url "[)$ ]"))
+ (browse-url-url-encode-chars url "[)$ ]"))
(defun gnus-html-cache-expired (url ttl)
"Check if URL is cached for more than TTL."
charset nil t))
(not (eq charset 'ascii)))
(insert (prog1
- (mm-decode-coding-string (buffer-string) charset)
+ (decode-coding-string (buffer-string) charset)
(erase-buffer)
(mm-enable-multibyte))))
(call-process-region (point-min) (point-max)
alt-text (when (string-match "\\(alt\\|title\\)=\"\\([^\"]+\\)"
parameters)
(xml-substitute-special (match-string 2 parameters))))
- (gnus-add-text-properties
+ (add-text-properties
start end
(list 'image-url url
'image-displayer `(lambda (url start end)
(let ((overlay (make-overlay start end)))
(overlay-put overlay 'evaporate t)
(overlay-put overlay 'gnus-button-url url)
- (gnus-put-text-property start end 'gnus-string url)
+ (put-text-property start end 'gnus-string url)
(when gnus-article-mouse-face
(overlay-put overlay 'mouse-face gnus-article-mouse-face)))))
;; The upper-case IMG_ALT is apparently just an artifact that
"Retrieve IMAGE, and place it into BUFFER on arrival."
(gnus-message 8 "gnus-html-schedule-image-fetching: buffer %s, image %s"
buffer image)
- (if (fboundp 'url-queue-retrieve)
- (url-queue-retrieve (car image)
- 'gnus-html-image-fetched
- (list buffer image) t t)
- (ignore-errors
- (url-retrieve (car image)
- 'gnus-html-image-fetched
- (list buffer image)))))
+ (url-queue-retrieve (car image)
+ 'gnus-html-image-fetched
+ (list buffer image) t t))
(defun gnus-html-image-fetched (status buffer image)
"Callback function called when image has been fetched."
(defun gnus-html-maximum-image-size ()
"Return the maximum size of an image according to `gnus-max-image-proportion'."
- (let ((edges (gnus-window-inside-pixel-edges
+ (let ((edges (window-inside-pixel-edges
(get-buffer-window (current-buffer)))))
;; (width . height)
(cons
(defun gnus-html-put-image (data url &optional alt-text)
"Put an image with DATA from URL and optional ALT-TEXT."
- (when (gnus-graphic-display-p)
+ (when (display-graphic-p)
(let* ((start (text-property-any (point-min) (point-max)
'image-url url))
(end (when start
(let* ((image
(ignore-errors
(gnus-create-image data nil t)))
- (size (and image
- (if (featurep 'xemacs)
- (cons (glyph-width image) (glyph-height image))
- (image-size image t)))))
+ (size (and image (image-size image t))))
(save-excursion
(goto-char start)
(let ((alt-text (or alt-text
(if (and image
;; Kludge to avoid displaying 30x30 gif images, which
;; seems to be a signal of a broken image.
- (not (and (if (featurep 'xemacs)
- (glyphp image)
- (listp image))
- (eq (if (featurep 'xemacs)
- (let ((d (cdadar
- (specifier-spec-list
- (glyph-image image)))))
- (and (vectorp d)
- (aref d 0)))
- (plist-get (cdr image) :type))
+ (not (and (listp image)
+ (eq (plist-get (cdr image) :type)
'gif)
(= (car size) 30)
(= (cdr size) 30))))
:help-echo alt-text
:keymap gnus-html-displayed-image-map
url)
- (gnus-put-text-property start (point)
- 'gnus-alt-text alt-text)
+ (put-text-property start (point) 'gnus-alt-text alt-text)
(when url
- (gnus-add-text-properties
+ (add-text-properties
start (point)
`(image-url
,url
nil
"iCalendar class for REPLY events")
-(defmethod gnus-icalendar-event:recurring-p ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:recurring-p ((event gnus-icalendar-event))
"Return t if EVENT is recurring."
(not (null (gnus-icalendar-event:recur event))))
-(defmethod gnus-icalendar-event:recurring-freq ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:recurring-freq ((event gnus-icalendar-event))
"Return recurring frequency of EVENT."
(let ((rrule (gnus-icalendar-event:recur event)))
(string-match "FREQ=\\([[:alpha:]]+\\)" rrule)
(match-string 1 rrule)))
-(defmethod gnus-icalendar-event:recurring-interval ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:recurring-interval ((event gnus-icalendar-event))
"Return recurring interval of EVENT."
(let ((rrule (gnus-icalendar-event:recur event))
(default-interval 1))
(or (match-string 1 rrule)
default-interval)))
-(defmethod gnus-icalendar-event:start ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:start ((event gnus-icalendar-event))
(format-time-string "%Y-%m-%d %H:%M" (gnus-icalendar-event:start-time event)))
(defun gnus-icalendar-event--decode-datefield (event field zone-map)
(defun gnus-icalendar-event--find-attendee (ical name-or-email)
(let* ((event (car (icalendar--all-events ical)))
(event-props (caddr event)))
- (gmm-labels ((attendee-name (att) (plist-get (cadr att) 'CN))
- (attendee-email (att)
- (replace-regexp-in-string "^.*MAILTO:" "" (caddr att)))
- (attendee-prop-matches-p (prop)
- (and (eq (car prop) 'ATTENDEE)
- (or (member (attendee-name prop) name-or-email)
- (let ((att-email (attendee-email prop)))
- (gnus-icalendar-find-if (lambda (email)
- (string-match email att-email))
- name-or-email))))))
-
+ (cl-labels ((attendee-name (att) (plist-get (cadr att) 'CN))
+ (attendee-email
+ (att)
+ (replace-regexp-in-string "^.*MAILTO:" "" (caddr att)))
+ (attendee-prop-matches-p
+ (prop)
+ (and (eq (car prop) 'ATTENDEE)
+ (or (member (attendee-name prop) name-or-email)
+ (let ((att-email (attendee-email prop)))
+ (gnus-icalendar-find-if
+ (lambda (email)
+ (string-match email att-email))
+ name-or-email))))))
(gnus-icalendar-find-if #'attendee-prop-matches-p event-props))))
(defun gnus-icalendar-event--get-attendee-names (ical)
(lambda (p) (eq (car p) 'ATTENDEE))
(caddr event))))
- (gmm-labels ((attendee-role (prop) (plist-get (cadr prop) 'ROLE))
- (attendee-name (prop)
- (or (plist-get (cadr prop) 'CN)
- (replace-regexp-in-string "^.*MAILTO:" "" (caddr prop))))
- (attendees-by-type (type)
- (gnus-remove-if-not
- (lambda (p) (string= (attendee-role p) type))
- attendee-props))
- (attendee-names-by-type (type)
- (mapcar #'attendee-name (attendees-by-type type))))
-
+ (cl-labels
+ ((attendee-role (prop) (plist-get (cadr prop) 'ROLE))
+ (attendee-name
+ (prop)
+ (or (plist-get (cadr prop) 'CN)
+ (replace-regexp-in-string "^.*MAILTO:" "" (caddr prop))))
+ (attendees-by-type (type)
+ (gnus-remove-if-not
+ (lambda (p) (string= (attendee-role p) type))
+ attendee-props))
+ (attendee-names-by-type
+ (type)
+ (mapcar #'attendee-name (attendees-by-type type))))
(list
(attendee-names-by-type "REQ-PARTICIPANT")
(attendee-names-by-type "OPT-PARTICIPANT")))))
((string= method "REPLY") 'gnus-icalendar-event-reply)
(t 'gnus-icalendar-event))))
- (gmm-labels ((map-property (prop)
- (let ((value (icalendar--get-event-property event prop)))
- (when value
- ;; ugly, but cannot get
- ;;replace-regexp-in-string work with "\\" as
- ;;REP, plus we should also handle "\\;"
- (replace-regexp-in-string
- "\\\\," ","
- (replace-regexp-in-string
- "\\\\n" "\n" (substring-no-properties value))))))
- (accumulate-args (mapping)
- (destructuring-bind (slot . ical-property) mapping
- (setq args (append (list
- (intern (concat ":" (symbol-name slot)))
- (map-property ical-property))
- args)))))
-
+ (cl-labels
+ ((map-property
+ (prop)
+ (let ((value (icalendar--get-event-property event prop)))
+ (when value
+ ;; ugly, but cannot get
+ ;;replace-regexp-in-string work with "\\" as
+ ;;REP, plus we should also handle "\\;"
+ (replace-regexp-in-string
+ "\\\\," ","
+ (replace-regexp-in-string
+ "\\\\n" "\n" (substring-no-properties value))))))
+ (accumulate-args
+ (mapping)
+ (destructuring-bind (slot . ical-property) mapping
+ (setq args (append (list
+ (intern (concat ":" (symbol-name slot)))
+ (map-property ical-property))
+ args)))))
(mapc #'accumulate-args prop-map)
(apply 'make-instance event-class args))))
(let ((summary-status (capitalize (symbol-name status)))
(attendee-status (upcase (symbol-name status)))
reply-event-lines)
- (gmm-labels ((update-summary (line)
- (if (string-match "^[^:]+:" line)
- (replace-match (format "\\&%s: " summary-status) t nil line)
- line))
- (update-dtstamp ()
- (format-time-string "DTSTAMP:%Y%m%dT%H%M%SZ" nil t))
- (attendee-matches-identity (line)
- (gnus-icalendar-find-if (lambda (name) (string-match-p name line))
- identities))
- (update-attendee-status (line)
- (when (and (attendee-matches-identity line)
- (string-match "\\(PARTSTAT=\\)[^;]+" line))
- (replace-match (format "\\1%s" attendee-status) t nil line)))
- (process-event-line (line)
- (when (string-match "^\\([^;:]+\\)" line)
- (let* ((key (match-string 0 line))
- ;; NOTE: not all of the below fields are mandatory,
- ;; but they are often present in other clients'
- ;; replies. Can be helpful for debugging, too.
- (new-line
- (cond
- ((string= key "ATTENDEE") (update-attendee-status line))
- ((string= key "SUMMARY") (update-summary line))
- ((string= key "DTSTAMP") (update-dtstamp))
- ((member key '("ORGANIZER" "DTSTART" "DTEND"
- "LOCATION" "DURATION" "SEQUENCE"
- "RECURRENCE-ID" "UID")) line)
- (t nil))))
- (when new-line
- (push new-line reply-event-lines))))))
+ (cl-labels
+ ((update-summary
+ (line)
+ (if (string-match "^[^:]+:" line)
+ (replace-match (format "\\&%s: " summary-status) t nil line)
+ line))
+ (update-dtstamp ()
+ (format-time-string "DTSTAMP:%Y%m%dT%H%M%SZ" nil t))
+ (attendee-matches-identity
+ (line)
+ (gnus-icalendar-find-if (lambda (name) (string-match-p name line))
+ identities))
+ (update-attendee-status
+ (line)
+ (when (and (attendee-matches-identity line)
+ (string-match "\\(PARTSTAT=\\)[^;]+" line))
+ (replace-match (format "\\1%s" attendee-status) t nil line)))
+ (process-event-line
+ (line)
+ (when (string-match "^\\([^;:]+\\)" line)
+ (let* ((key (match-string 0 line))
+ ;; NOTE: not all of the below fields are mandatory,
+ ;; but they are often present in other clients'
+ ;; replies. Can be helpful for debugging, too.
+ (new-line
+ (cond
+ ((string= key "ATTENDEE") (update-attendee-status line))
+ ((string= key "SUMMARY") (update-summary line))
+ ((string= key "DTSTAMP") (update-dtstamp))
+ ((member key '("ORGANIZER" "DTSTART" "DTEND"
+ "LOCATION" "DURATION" "SEQUENCE"
+ "RECURRENCE-ID" "UID")) line)
+ (t nil))))
+ (when new-line
+ (push new-line reply-event-lines))))))
(mapc #'process-event-line (split-string ical-request "\n"))
(unless (gnus-icalendar-find-if (lambda (x) (string-match "^ATTENDEE" x))
- reply-event-lines)
+ reply-event-lines)
(error "Could not find an event attendee matching given identity"))
(mapconcat #'identity `("BEGIN:VEVENT"
The reply will have STATUS (`accepted', `tentative' or `declined').
The reply will be composed for attendees matching any entry
on the IDENTITIES list."
- (gmm-labels ((extract-block (blockname)
- (save-excursion
- (let ((block-start-re (format "^BEGIN:%s" blockname))
- (block-end-re (format "^END:%s" blockname))
- start)
- (when (re-search-forward block-start-re nil t)
- (setq start (line-beginning-position))
- (re-search-forward block-end-re)
- (buffer-substring-no-properties start (line-end-position)))))))
-
+ (cl-labels
+ ((extract-block
+ (blockname)
+ (save-excursion
+ (let ((block-start-re (format "^BEGIN:%s" blockname))
+ (block-end-re (format "^END:%s" blockname))
+ start)
+ (when (re-search-forward block-start-re nil t)
+ (setq start (line-beginning-position))
+ (re-search-forward block-end-re)
+ (buffer-substring-no-properties start (line-end-position)))))))
(let (zone event)
(with-current-buffer (icalendar--get-unfolded-buffer (get-buffer buf))
(goto-char (point-min))
(defvar gnus-icalendar-org-enabled-p nil)
-(defmethod gnus-icalendar-event:org-repeat ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:org-repeat ((event gnus-icalendar-event))
"Return `org-mode' timestamp repeater string for recurring EVENT.
Return nil for non-recurring EVENT."
(when (gnus-icalendar-event:recurring-p event)
(when org-freq
(format "+%s%s" (gnus-icalendar-event:recurring-interval event) org-freq)))))
-(defmethod gnus-icalendar-event:org-timestamp ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:org-timestamp ((event gnus-icalendar-event))
"Build `org-mode' timestamp from EVENT start/end dates and recurrence info."
(let* ((start (gnus-icalendar-event:start-time event))
(end (gnus-icalendar-event:end-time event))
- (start-date (format-time-string "%Y-%m-%d %a" start))
+ (start-date (format-time-string "%Y-%m-%d" start))
(start-time (format-time-string "%H:%M" start))
(start-at-midnight (string= start-time "00:00"))
- (end-date (format-time-string "%Y-%m-%d %a" end))
+ (end-date (format-time-string "%Y-%m-%d" end))
(end-time (format-time-string "%H:%M" end))
(end-at-midnight (string= end-time "00:00"))
(start-end-date-diff
;; A 0:0 - A+1 0:0 -> A
;; A 0:0 - A+n 0:0 -> A - A+n-1
((and start-at-midnight end-at-midnight) (if (> start-end-date-diff 1)
- (let ((end-ts (format-time-string "%Y-%m-%d %a" (time-subtract end time-1-day))))
+ (let ((end-ts (format-time-string "%Y-%m-%d" (time-subtract end time-1-day))))
(format "<%s>--<%s>" start-date end-ts))
(format "<%s%s>" start-date repeat)))
;; end midnight
;; A .:. - A+n 0:0 -> A .:. - A_n-1
(end-at-midnight (if (= start-end-date-diff 1)
(format "<%s %s-23:59%s>" start-date start-time repeat)
- (let ((end-ts (format-time-string "%Y-%m-%d %a" (time-subtract end time-1-day))))
+ (let ((end-ts (format-time-string "%Y-%m-%d" (time-subtract end time-1-day))))
(format "<%s %s>--<%s>" start-date start-time end-ts))))
;; start midnight
;; A 0:0 - A .:. -> A 0:0-.:. (default 1)
(mapconcat #'identity participants ", "))
;; TODO: make the template customizable
-(defmethod gnus-icalendar-event->org-entry ((event gnus-icalendar-event) reply-status)
+(cl-defmethod gnus-icalendar-event->org-entry ((event gnus-icalendar-event) reply-status)
"Return string with new `org-mode' entry describing EVENT."
(with-temp-buffer
(org-mode)
is searched."
(let ((uid (gnus-icalendar-event:uid event))
(files (or org-file (org-agenda-files t 'ifmode))))
- (gmm-labels
- ((find-event-in (file)
- (org-check-agenda-file file)
- (with-current-buffer (find-file-noselect file)
- (let ((event-pos (org-find-entry-with-id uid)))
- (when (and event-pos
- (string= (cdr (assoc "ICAL_EVENT" (org-entry-properties event-pos)))
- "t"))
- (throw 'found file))))))
-
+ (cl-labels
+ ((find-event-in
+ (file)
+ (org-check-agenda-file file)
+ (with-current-buffer (find-file-noselect file)
+ (let ((event-pos (org-find-entry-with-id uid)))
+ (when (and event-pos
+ (string= (cdr (assoc "ICAL_EVENT"
+ (org-entry-properties event-pos)))
+ "t"))
+ (throw 'found file))))))
(gnus-icalendar-find-if #'find-event-in files))))
(fill-region (point-min) (point-max))))
;; update entry properties
- (gmm-labels
- ((update-org-entry (position property value)
- (if (or (null value)
- (string= value ""))
- (org-entry-delete position property)
- (org-entry-put position property value))))
+ (cl-labels
+ ((update-org-entry
+ (position property value)
+ (if (or (null value)
+ (string= value ""))
+ (org-entry-delete position property)
+ (org-entry-put position property value))))
(update-org-entry event-pos "ORGANIZER" organizer)
(update-org-entry event-pos "LOCATION" location)
- (update-org-entry event-pos "PARTICIPATION_TYPE" (symbol-name participation-type))
- (update-org-entry event-pos "REQ_PARTICIPANTS" (gnus-icalendar--format-participant-list req-participants))
- (update-org-entry event-pos "OPT_PARTICIPANTS" (gnus-icalendar--format-participant-list opt-participants))
+ (update-org-entry event-pos "PARTICIPATION_TYPE"
+ (symbol-name participation-type))
+ (update-org-entry event-pos "REQ_PARTICIPANTS"
+ (gnus-icalendar--format-participant-list
+ req-participants))
+ (update-org-entry event-pos "OPT_PARTICIPANTS"
+ (gnus-icalendar--format-participant-list
+ opt-participants))
(update-org-entry event-pos "RRULE" recur)
- (update-org-entry event-pos "REPLY"
- (if reply-status (capitalize (symbol-name reply-status))
- "Not replied yet")))
+ (update-org-entry
+ event-pos "REPLY"
+ (if reply-status (capitalize (symbol-name reply-status))
+ "Not replied yet")))
(save-buffer)))))))))
(org-agenda-list nil (gnus-icalendar-event:start event) duration-days)))
-(defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-request) reply-status)
+(cl-defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-request) reply-status)
(if (gnus-icalendar-find-org-event-file event)
(gnus-icalendar--update-org-event event reply-status)
(gnus-icalendar:org-event-save event reply-status)))
-(defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-cancel) reply-status)
+(cl-defmethod gnus-icalendar-event:sync-to-org ((event gnus-icalendar-event-cancel) reply-status)
(when (gnus-icalendar-find-org-event-file event)
(gnus-icalendar--cancel-org-event event)))
These will be used to retrieve the RSVP information from ical events."
(apply #'append
- (mapcar (lambda (x) (if (listp x) x (list x)))
- (list user-full-name (regexp-quote user-mail-address)
- ; NOTE: these can be lists
- gnus-ignored-from-addresses ; already regexp-quoted
- message-alternative-emails ;
- (mapcar #'regexp-quote gnus-icalendar-additional-identities)))))
+ (mapcar
+ (lambda (x) (if (listp x) x (list x)))
+ (list user-full-name (regexp-quote user-mail-address)
+ ;; NOTE: these can be lists
+ gnus-ignored-from-addresses ; already regexp-quoted
+ (unless (functionp message-alternative-emails) ; String or function.
+ message-alternative-emails)
+ (mapcar #'regexp-quote gnus-icalendar-additional-identities)))))
;; TODO: make the template customizable
-(defmethod gnus-icalendar-event->gnus-calendar ((event gnus-icalendar-event) &optional reply-status)
+(cl-defmethod gnus-icalendar-event->gnus-calendar ((event gnus-icalendar-event) &optional reply-status)
"Format an overview of EVENT details."
- (gmm-labels ((format-header (x)
- (format "%-12s%s"
- (propertize (concat (car x) ":") 'face 'bold)
- (cadr x))))
+ (cl-labels
+ ((format-header (x)
+ (format "%-12s%s"
+ (propertize (concat (car x) ":") 'face 'bold)
+ (cadr x))))
(with-slots (organizer summary description location recur uid
method rsvp participation-type) event
(let ((headers `(("Summary" ,summary)
- ("Location" ,(or location ""))
- ("Time" ,(gnus-icalendar-event:org-timestamp event))
- ("Organizer" ,organizer)
- ("Attendance" ,(if (eq participation-type 'non-participant)
- "You are not listed as an attendee"
- (capitalize (symbol-name participation-type))))
- ("Method" ,method))))
-
- (when (and (not (gnus-icalendar-event-reply-p event)) rsvp)
- (setq headers (append headers
- `(("Status" ,(or reply-status "Not replied yet"))))))
-
- (concat
- (mapconcat #'format-header headers "\n")
- "\n\n"
- description)))))
+ ("Location" ,(or location ""))
+ ("Time" ,(gnus-icalendar-event:org-timestamp event))
+ ("Organizer" ,organizer)
+ ("Attendance" ,(if (eq participation-type 'non-participant)
+ "You are not listed as an attendee"
+ (capitalize (symbol-name participation-type))))
+ ("Method" ,method))))
+
+ (when (and (not (gnus-icalendar-event-reply-p event)) rsvp)
+ (setq headers (append headers
+ `(("Status" ,(or reply-status "Not replied yet"))))))
+
+ (concat
+ (mapconcat #'format-header headers "\n")
+ "\n\n"
+ description)))))
(defmacro gnus-icalendar-with-decoded-handle (handle &rest body)
"Execute BODY in buffer containing the decoded contents of HANDLE."
(with-temp-buffer
(mm-insert-part ,handle)
(when (string= ,charset "utf-8")
- (mm-decode-coding-region (point-min) (point-max) 'utf-8))
-
+ (decode-coding-region (point-min) (point-max) 'utf-8))
,@body))))
;; FIXME: the gnus-mime-button-map keymap does not make sense for this kind
;; of button.
(let ((start (point)))
- (gnus-add-text-properties
+ (add-text-properties
start
(progn
(insert "[ " text " ]")
face ,gnus-article-button-face
gnus-data ,data))
(widget-convert-button 'link start (point)
- :action 'gnus-widget-press-button
- :button-keymap gnus-widget-button-keymap)))
+ :action 'gnus-widget-press-button)))
(defun gnus-icalendar-send-buffer-by-mail (buffer-name subject)
(let ((message-signature nil))
(current-buffer) status (gnus-icalendar-identities)))))
(when reply
- (gmm-labels ((fold-icalendar-buffer ()
- (goto-char (point-min))
- (while (re-search-forward "^\\(.\\{72\\}\\)\\(.+\\)$" nil t)
- (replace-match "\\1\n \\2")
- (goto-char (line-beginning-position)))))
+ (cl-labels
+ ((fold-icalendar-buffer
+ ()
+ (goto-char (point-min))
+ (while (re-search-forward "^\\(.\\{72\\}\\)\\(.+\\)$" nil t)
+ (replace-match "\\1\n \\2")
+ (goto-char (line-beginning-position)))))
(let ((subject (concat (capitalize (symbol-name status))
": " (gnus-icalendar-event:summary event))))
(defun gnus-icalendar-sync-event-to-org (event)
(gnus-icalendar-event:sync-to-org event gnus-icalendar-reply-status))
-(defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event) handle)
+(cl-defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event) handle)
(when (gnus-icalendar-event:rsvp event)
`(("Accept" gnus-icalendar-reply (,handle accepted ,event))
("Tentative" gnus-icalendar-reply (,handle tentative ,event))
("Decline" gnus-icalendar-reply (,handle declined ,event)))))
-(defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event-reply) handle)
+(cl-defmethod gnus-icalendar-event:inline-reply-buttons ((event gnus-icalendar-event-reply) handle)
"No buttons for REPLY events."
nil)
-(defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event))
(or (when gnus-icalendar-org-enabled-p
(gnus-icalendar--get-org-event-reply-status event))
"Not replied yet"))
-(defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event-reply))
+(cl-defmethod gnus-icalendar-event:inline-reply-status ((event gnus-icalendar-event-reply))
"No reply status for REPLY events."
nil)
-(defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event))
+(cl-defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event))
(let* ((org-entry-exists-p (gnus-icalendar-find-org-event-file event))
(export-button-text (if org-entry-exists-p "Update Org Entry" "Export to Org")))
`("Show Org Entry" gnus-icalendar--show-org-event ,event))))))
-(defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event-cancel))
+(cl-defmethod gnus-icalendar-event:inline-org-buttons ((event gnus-icalendar-event-cancel))
(let ((org-entry-exists-p (gnus-icalendar-find-org-event-file event)))
(delq nil (list
(setq gnus-icalendar-reply-status nil)
(when event
- (gmm-labels ((insert-button-group (buttons)
- (when buttons
- (mapc (lambda (x)
- (apply 'gnus-icalendar-insert-button x)
- (insert " "))
- buttons)
- (insert "\n\n"))))
+ (cl-labels
+ ((insert-button-group
+ (buttons)
+ (when buttons
+ (mapc (lambda (x)
+ (apply 'gnus-icalendar-insert-button x)
+ (insert " "))
+ buttons)
+ (insert "\n\n"))))
(insert-button-group
(gnus-icalendar-event:inline-reply-buttons event handle))
(gnus-open-server gnus-select-method)
gnus-batch-mode
(gnus-y-or-n-p
- (gnus-format-message
+ (format-message
"%s (%s) open error: `%s'. Continue? "
(car gnus-select-method) (cadr gnus-select-method)
(gnus-status-message gnus-select-method)))
(message-options-set-recipient)
(save-restriction
(message-narrow-to-head)
- (let ((mail-parse-charset message-default-charset))
- (mail-encode-encoded-word-buffer)))
+ (mail-encode-encoded-word-buffer))
(message-encode-message-body)))
(let ((gnus-command-method (or gnus-command-method
(gnus-find-method-for-group group)))
(message-options-set-recipient)
(save-restriction
(message-narrow-to-head)
- (let ((mail-parse-charset message-default-charset))
- (mail-encode-encoded-word-buffer)))
+ (mail-encode-encoded-word-buffer))
(message-encode-message-body)))
(let* ((func (car (gnus-group-name-to-method group)))
(result (funcall (intern (format "%s-request-replace-article" func))
(require 'gnus)
(require 'gnus-msg)
(eval-when-compile (require 'cl))
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
;;; Mailing list minor mode
(gnus-mailing-list-mode 1))
(gnus-message 1 "no list-post in this message."))))
-(eval-when-compile
- (when (featurep 'xemacs)
- (defvar gnus-mailing-list-mode-hook)
- (defvar gnus-mailing-list-mode-on-hook)
- (defvar gnus-mailing-list-mode-off-hook)))
-
;;;###autoload
(define-minor-mode gnus-mailing-list-mode
"Minor mode for providing mailing-list commands.
(eval-when-compile (require 'cl))
(require 'gnus)
-(require 'gnus-ems)
(require 'message)
(require 'gnus-art)
(require 'gnus-util)
(let ((mbl1 mml-buffer-list))
(setq mml-buffer-list mbl) ;; Global value
(set (make-local-variable 'mml-buffer-list) mbl1);; Local value
- (gnus-make-local-hook 'kill-buffer-hook)
- (gnus-make-local-hook 'change-major-mode-hook)
(add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t)
(add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))
(mml-destroy-buffers)
(defun gnus-inews-add-send-actions (winconf buffer article
&optional config yanked
winconf-name)
- (gnus-make-local-hook 'message-sent-hook)
(add-hook 'message-sent-hook (if gnus-agent 'gnus-agent-possibly-do-gcc
'gnus-inews-do-gcc) nil t)
(when gnus-agent
- (gnus-make-local-hook 'message-header-hook)
(add-hook 'message-header-hook 'gnus-agent-possibly-save-gcc nil t))
(setq message-post-method
`(lambda (&optional arg)
(gnus-v
(when (memq 'gnus gnus-user-agent)
(concat "Gnus/"
- (gnus-replace-in-string
- (format "%1.8f" (gnus-continuum-version gnus-version))
- "0+\\'" "")
+ (replace-regexp-in-string
+ "0+\\'" ""
+ (format "%1.8f" (gnus-continuum-version gnus-version)))
" (" gnus-version ")")))
(emacs-v (gnus-emacs-version)))
(concat gnus-v (when (and gnus-v emacs-v) " ")
(gnus-inews-insert-gcc)
(let ((gcc (mapcar
(lambda (group)
- (mm-encode-coding-string
+ (encode-coding-string
group
(gnus-group-name-charset (gnus-inews-group-method group)
group)))
(insert "Gcc: \"" gnus-newsgroup-name "\"\n"))
((stringp self)
(insert "Gcc: "
- (mm-encode-coding-string
+ (encode-coding-string
(if (string-match " " self)
(concat "\"" self "\"")
self)
tem)
(dolist (style styles)
(when (stringp (cadr style))
- (setcdr style (list (mm-decode-coding-string (cadr style) 'utf-8)))))
+ (setcdr style (list (decode-coding-string (cadr style) 'utf-8)))))
(dolist (style (if styles
(append gnus-posting-styles (list (cons ".*" styles)))
gnus-posting-styles))
(message-goto-subject)
(re-search-forward " *$")
(replace-match " (crosspost notification)" t t)
- (gnus-deactivate-mark)
+ (deactivate-mark)
(when (gnus-y-or-n-p "Send this complaint? ")
(message-send-and-exit))))))
;; Copy the article over to some group(s).
(while (setq group (pop groups))
(setq method (gnus-inews-group-method group)
- group (mm-encode-coding-string
+ group (encode-coding-string
group
(gnus-group-name-charset method group)))
(unless (gnus-check-server method)
(run-hooks 'gnus-gcc-post-body-encode-hook)
(save-restriction
(message-narrow-to-headers)
- (let* ((mail-parse-charset message-default-charset)
- (newsgroups-field (save-restriction
+ (let* ((newsgroups-field (save-restriction
(message-narrow-to-headers-or-head)
(message-fetch-field "Newsgroups")))
(followup-field (save-restriction
(when tmp-style
(dolist (style tmp-style)
(when (stringp (cadr style))
- (setcdr style (list (mm-decode-coding-string (cadr style)
- 'utf-8)))))
+ (setcdr style (list (decode-coding-string (cadr style)
+ 'utf-8)))))
(setq styles (append styles (list (cons ".*" tmp-style)))))))
;; Go through all styles and look for matches.
(dolist (style styles)
(cond
((stringp value)
(if (and matched-string
- (gnus-string-match-p "\\\\[&[:digit:]]" value)
+ (string-match-p "\\\\[&[:digit:]]" value)
(match-beginning 1))
- (gnus-match-substitute-replacement value nil nil
- matched-string)
+ (match-substitute-replacement value nil nil
+ matched-string)
value))
((or (symbolp value)
(functionp value))
(setq name (assq 'name results)
address (assq 'address results))
(setq results (delq name (delq address results)))
- (gnus-make-local-hook 'message-setup-hook)
(setq results (sort results (lambda (x y)
(string-lessp (car x) (car y)))))
(dolist (result results)
(insert "From: " (message-make-from) "\n"))))
nil 'local)))))
-;;; Allow redefinition of functions.
-
-(gnus-ems-redefine)
-
(provide 'gnus-msg)
;;; gnus-msg.el ends here
(article (nth 2 group-article)))
(cond ((string= key "read")
(gnus-fetch-group group (list article))
- (gnus-select-frame-set-input-focus (selected-frame)))
+ (select-frame-set-input-focus (selected-frame)))
((string= key "mark-read")
(gnus-update-read-articles
group
;; Ignore mails from ourselves
(unless (and gnus-ignored-from-addresses
address
- (gnus-string-match-p gnus-ignored-from-addresses
- address))
+ (cond ((functionp gnus-ignored-from-addresses)
+ (funcall gnus-ignored-from-addresses address))
+ (t (string-match-p
+ (gnus-ignored-from-addresses)
+ address))))
(let* ((photo-file (gnus-notifications-get-photo-file address))
(notification-id (gnus-notifications-notify
(or (car address-components) address)
"How should picons be displayed.
If `inline', the textual representation is replaced. If `right', picons are
added right to the textual representation."
- ;; FIXME: `right' needs improvement for XEmacs.
:type '(choice (const inline)
(const right))
:group 'gnus-picon)
(require 'easymenu)
(require 'registry)
-;; Silence XEmacs byte compiler, which will otherwise complain about
-;; call to `eieio-persistent-read'.
-(when (featurep 'xemacs)
- (byte-compiler-options
- (warnings (- callargs))))
-
(defvar gnus-adaptive-word-syntax-table)
(defvar gnus-registry-dirty t
(let* ((article (last articles))
(id (gnus-registry-fetch-message-id-fast article))
(marks (when id (gnus-registry-get-id-key id 'mark))))
- (when (gmm-called-interactively-p 'any)
+ (when (called-interactively-p 'any)
(gnus-message 1 "Marks are %S" marks))
marks))
--- /dev/null
+;;; gnus-rfc1843.el --- HZ (rfc1843) decoding interface functions for Gnus
+
+;; Copyright (C) 1998-2016 Free Software Foundation, Inc.
+
+;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Keywords: news HZ HZ+ mail i18n
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Usage:
+;; (require 'gnus-rfc1843)
+;; (rfc1843-gnus-setup)
+
+;;; Code:
+
+(require 'rfc1843)
+(require 'gnus-sum)
+(require 'gnus-art)
+(require 'message)
+
+(defun rfc1843-decode-article-body ()
+ "Decode HZ encoded text in the article body."
+ (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
+ (or gnus-newsgroup-name ""))
+ (save-excursion
+ (save-restriction
+ (message-narrow-to-head)
+ (let* ((inhibit-point-motion-hooks t)
+ (case-fold-search t)
+ (ct (message-fetch-field "Content-Type" t))
+ (ctl (and ct (mail-header-parse-content-type ct))))
+ (if (and ctl (not (string-match "/" (car ctl))))
+ (setq ctl nil))
+ (goto-char (point-max))
+ (widen)
+ (forward-line 1)
+ (narrow-to-region (point) (point-max))
+ (when (or (not ctl)
+ (equal (car ctl) "text/plain"))
+ (rfc1843-decode-region (point) (point-max))))))))
+
+(defun rfc1843-gnus-setup ()
+ "Setup HZ decoding for Gnus."
+ (add-hook 'gnus-article-decode-hook 'rfc1843-decode-article-body t)
+ (setq gnus-decode-encoded-word-function
+ 'gnus-multi-decode-encoded-word-string
+ gnus-decode-header-function
+ 'gnus-multi-decode-header
+ gnus-decode-encoded-word-methods
+ (nconc gnus-decode-encoded-word-methods
+ (list
+ (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
+ 'rfc1843-decode-string)))
+ gnus-decode-header-methods
+ (nconc gnus-decode-header-methods
+ (list
+ (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
+ 'rfc1843-decode-region)))))
+
+(provide 'gnus-rfc1843)
+
+;;; gnus-rfc1843.el ends here
;;; Code:
(eval-when-compile (require 'cl))
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
(require 'gnus)
(require 'gnus-sum)
:type 'hook
:group 'gnus-summary-pick)
-(when (featurep 'xemacs)
- (add-hook 'gnus-pick-mode-hook 'gnus-xmas-pick-menu-add))
-
(defcustom gnus-mark-unpicked-articles-as-read nil
"*If non-nil, mark all unpicked articles as read."
:type 'boolean
" " gnus-pick-next-page
"u" gnus-pick-unmark-article-or-thread
"." gnus-pick-article-or-thread
- gnus-down-mouse-2 gnus-pick-mouse-pick-region
+ [down-mouse-2] gnus-pick-mouse-pick-region
"\r" gnus-pick-start-reading)
map))
["Start reading" gnus-pick-start-reading t]
["Switch pick mode off" gnus-pick-mode gnus-pick-mode]))))
-(eval-when-compile
- (when (featurep 'xemacs)
- (defvar gnus-pick-mode-on-hook)
- (defvar gnus-pick-mode-off-hook)))
-
(define-minor-mode gnus-pick-mode
"Minor mode for providing a pick-and-read interface in Gnus summary buffers.
(start-point (posn-point start-posn))
(start-line (1+ (count-lines (point-min) start-point)))
(start-window (posn-window start-posn))
- (bounds (gnus-window-edges start-window))
+ (bounds (window-edges start-window))
(top (nth 1 bounds))
(bottom (if (window-minibuffer-p start-window)
(nth 3 bounds)
'("Pick"
["Switch binary mode off" gnus-binary-mode t]))))
-(eval-when-compile
- (when (featurep 'xemacs)
- (defvar gnus-binary-mode-on-hook)
- (defvar gnus-binary-mode-off-hook)))
-
(define-minor-mode gnus-binary-mode
"Minor mode for providing a binary group interface in Gnus summary buffers."
:lighter " Binary" :keymap gnus-binary-mode-map
:type 'hook
:group 'gnus-summary-tree)
-(when (featurep 'xemacs)
- (add-hook 'gnus-tree-mode-hook 'gnus-xmas-tree-menu-add)
- (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off))
-
-
;;; Internal variables.
(defvar gnus-tmp-name)
(gnus-define-keys
map
"\r" gnus-tree-select-article
- gnus-mouse-2 gnus-tree-pick-article
+ [mouse-2] gnus-tree-pick-article
"\C-?" gnus-tree-read-summary-keys
"h" gnus-tree-show-summary
(t (cdar gnus-tree-brackets))))
(buffer-read-only nil)
beg end)
- (gnus-add-text-properties
+ (add-text-properties
(setq beg (point))
(setq end (progn (eval gnus-tree-line-format-spec) (point)))
(list 'gnus-number gnus-tmp-number))
region)
(set-buffer gnus-tree-buffer)
(when (setq region (gnus-tree-article-region article))
- (when (or (not gnus-selected-tree-overlay)
- (gnus-extent-detached-p gnus-selected-tree-overlay))
+ (when (not gnus-selected-tree-overlay)
;; Create a new overlay.
(overlay-put
(setq gnus-selected-tree-overlay
(with-current-buffer (gnus-get-tree-buffer)
(let (region)
(when (setq region (gnus-tree-article-region article))
- (gnus-put-text-property (car region) (cdr region) 'face face)
+ (put-text-property (car region) (cdr region) 'face face)
(set-window-point
(gnus-get-buffer-window (current-buffer) t) (cdr region)))))))
-;;; Allow redefinition of functions.
-(gnus-ems-redefine)
-
(provide 'gnus-salt)
;;; gnus-salt.el ends here
(require 'gnus)
(require 'gnus-sum)
+(require 'gnus-art)
(require 'gnus-range)
(require 'gnus-win)
(require 'message)
(with-current-buffer gnus-summary-buffer
(gnus-score-load-file current-score-file)))))
+(autoload 'appt-select-lowest-window "appt")
+
(defun gnus-score-insert-help (string alist idx)
(setq gnus-score-help-winconf (current-window-configuration))
(with-current-buffer (gnus-get-buffer-create "*Score Help*")
(setq i (1+ i))))
(goto-char (point-min))
;; display ourselves in a small window at the bottom
- (gnus-select-lowest-window)
+ (appt-select-lowest-window)
(if (< (/ (window-height) 2) window-min-height)
(switch-to-buffer "*Score Help*")
(split-window)
(and (file-exists-p file)
(not (file-writable-p file))))
()
- (setq score (setcdr entry (gnus-delete-alist 'touched score)))
+ (setq score (setcdr entry (assq-delete-all 'touched score)))
(erase-buffer)
(let (emacs-lisp-mode-hook)
(if (and (not gnus-adaptive-pretty-print)
nil)
(defun gnus-score-decode-text-parts ()
- (gmm-labels
+ (cl-labels
((mm-text-parts
(handle)
(cond ((stringp (car handle))
(mm-display-inline handle)
(goto-char (point-max))))))
- (let (;(mm-text-html-renderer 'w3m-standalone)
+ (let ( ;(mm-text-html-renderer 'w3m-standalone)
(handles (mm-dissect-buffer t)))
(save-excursion
(article-goto-body)
(defun gnus-decay-score (score)
"Decay SCORE according to `gnus-score-decay-constant' and `gnus-score-decay-scale'."
- (let ((n (- score
- (* (if (< score 0) -1 1)
- (min (abs score)
- (max gnus-score-decay-constant
- (* (abs score)
- gnus-score-decay-scale)))))))
- (if (and (featurep 'xemacs)
- ;; XEmacs's floor can handle only the floating point
- ;; number below the half of the maximum integer.
- (> (abs n) (lsh -1 -2)))
- (string-to-number
- (car (split-string (number-to-string n) "\\.")))
- (floor n))))
+ (floor (- score
+ (* (if (< score 0) -1 1)
+ (min (abs score)
+ (max gnus-score-decay-constant
+ (* (abs score)
+ gnus-score-decay-scale)))))))
(defun gnus-decay-scores (alist day)
"Decay non-permanent scores in ALIST."
(require 'gnus)
-(defcustom gnus-use-correct-string-widths (featurep 'xemacs)
- "*If non-nil, use correct functions for dealing with wide characters."
- :version "22.1"
- :group 'gnus-format
- :type 'boolean)
-
-(defcustom gnus-make-format-preserve-properties (featurep 'xemacs)
- "*If non-nil, use a replacement `format' function which preserves
-text properties. This is only needed on XEmacs, as Emacs does this anyway."
- :version "22.1"
- :group 'gnus-format
- :type 'boolean)
-
;;; Internal variables.
(defvar gnus-summary-mark-positions nil)
(defvar gnus-tmp-news-method)
(defvar gnus-tmp-news-server)
(defvar gnus-mouse-face)
-(defvar gnus-mouse-face-prop)
(defvar gnus-tmp-header)
(defvar gnus-tmp-from)
(header gnus-tmp-from))
(defmacro gnus-lrm-string-p (string)
- (if (fboundp 'bidi-string-mark-left-to-right)
- ;; LRM, RLM, PDF characters as integers to avoid breaking Emacs
- ;; 23.
- `(memq (aref ,string (1- (length ,string))) '(8206 8207 8236))
- nil))
+ ;; LRM, RLM, PDF characters as integers to avoid breaking Emacs
+ ;; 23.
+ `(memq (aref ,string (1- (length ,string))) '(8206 8207 8236)))
(defvar gnus-lrm-string (if (ignore-errors (string 8206))
(propertize (string 8206) 'invisible t)
:type 'face)
(defun gnus-mouse-face-function (form type)
- `(gnus-put-text-property
+ `(put-text-property
(point) (progn ,@form (point))
- gnus-mouse-face-prop
+ 'mouse-face
,(if (equal type 0)
'gnus-mouse-face
`(quote ,(symbol-value (intern (format "gnus-mouse-face-%d" type)))))))
:type 'face)
(defun gnus-face-face-function (form type)
- `(gnus-add-text-properties
+ `(add-text-properties
(point) (progn ,@form (point))
(cons 'face
(cons
;; Delay consing the value of the `face' property until
- ;; `gnus-add-text-properties' runs, since it will be modified
- ;; by `gnus-put-text-property-excluding-characters-with-faces'.
+ ;; `add-text-properties' runs, since it will be modified
+ ;; by `put-text-property-excluding-characters-with-faces'.
(list ',(symbol-value (intern (format "gnus-face-%d" type))) 'default)
;; Redundant now, but still convenient.
'(gnus-face t)))))
(defun gnus-balloon-face-function (form type)
- `(gnus-put-text-property
- (point) (progn ,@form (point))
- ,(if (fboundp 'balloon-help-mode)
- ''balloon-help
- ''help-echo)
+ `(put-text-property
+ (point) (progn ,@form (point)) 'help-echo
,(intern (format "gnus-balloon-face-%d" type))))
(defun gnus-spec-tab (column)
(setq wend seek)
(substring string wstart (1- wend))))
-(defun gnus-string-width-function ()
- (cond
- (gnus-use-correct-string-widths
- 'gnus-correct-length)
- ((fboundp 'string-width)
- 'string-width)
- (t
- 'length)))
-
-(defun gnus-substring-function ()
- (cond
- (gnus-use-correct-string-widths
- 'gnus-correct-substring)
- ((fboundp 'string-width)
- 'gnus-correct-substring)
- (t
- 'substring)))
-
(defun gnus-tilde-max-form (el max-width)
"Return a form that limits EL to MAX-WIDTH."
- (let ((max (abs max-width))
- (length-fun (gnus-string-width-function))
- (substring-fun (gnus-substring-function)))
+ (let ((max (abs max-width)))
(if (symbolp el)
- `(if (> (,length-fun ,el) ,max)
+ `(if (> (string-width ,el) ,max)
,(if (< max-width 0)
- `(,substring-fun ,el (- (,length-fun ,el) ,max))
+ `(gnus-correct-substring ,el (- (string-width ,el) ,max))
`(if (gnus-lrm-string-p ,el)
- (concat (,substring-fun ,el 0 ,max) ,gnus-lrm-string)
- (,substring-fun ,el 0 ,max)))
+ (concat (gnus-correct-substring ,el 0 ,max)
+ ,gnus-lrm-string)
+ (gnus-correct-substring ,el 0 ,max)))
,el)
`(let ((val (eval ,el)))
- (if (> (,length-fun val) ,max)
+ (if (> (string-width val) ,max)
,(if (< max-width 0)
- `(,substring-fun val (- (,length-fun val) ,max))
+ `(gnus-correct-substring val (- (string-width val) ,max))
`(if (gnus-lrm-string-p val)
- (concat (,substring-fun val 0 ,max) ,gnus-lrm-string)
- (,substring-fun val 0 ,max)))
+ (concat (gnus-correct-substring val 0 ,max)
+ ,gnus-lrm-string)
+ (gnus-correct-substring val 0 ,max)))
val)))))
(defun gnus-tilde-cut-form (el cut-width)
"Return a form that cuts CUT-WIDTH off of EL."
- (let ((cut (abs cut-width))
- (length-fun (gnus-string-width-function))
- (substring-fun (gnus-substring-function)))
+ (let ((cut (abs cut-width)))
(if (symbolp el)
- `(if (> (,length-fun ,el) ,cut)
+ `(if (> (string-width ,el) ,cut)
,(if (< cut-width 0)
- `(,substring-fun ,el 0 (- (,length-fun ,el) ,cut))
- `(,substring-fun ,el ,cut))
+ `(gnus-correct-substring ,el 0 (- (string-width ,el) ,cut))
+ `(gnus-correct-substring ,el ,cut))
,el)
`(let ((val (eval ,el)))
- (if (> (,length-fun val) ,cut)
+ (if (> (string-width val) ,cut)
,(if (< cut-width 0)
- `(,substring-fun val 0 (- (,length-fun val) ,cut))
- `(,substring-fun val ,cut))
+ `(gnus-correct-substring val 0 (- (string-width val) ,cut))
+ `(gnus-correct-substring val ,cut))
val)))))
(defun gnus-tilde-ignore-form (el ignore-value)
characters correctly. This is because `format' may pad to columns or to
characters when given a pad value."
(let ((pad (abs pad-width))
- (side (< 0 pad-width))
- (length-fun (gnus-string-width-function)))
+ (side (< 0 pad-width)))
(if (symbolp el)
- `(let ((need (- ,pad (,length-fun ,el))))
+ `(let ((need (- ,pad (string-width ,el))))
(if (> need 0)
(concat ,(when side '(make-string need ?\ ))
,el
,(when (not side) '(make-string need ?\ )))
,el))
`(let* ((val (eval ,el))
- (need (- ,pad (,length-fun val))))
+ (need (- ,pad (string-width val))))
(if (> need 0)
(concat ,(when side '(make-string need ?\ ))
val
`(let (gnus-position)
,@(gnus-complex-form-to-spec form spec-alist)
(if gnus-position
- (gnus-put-text-property gnus-position (1+ gnus-position)
+ (put-text-property gnus-position (1+ gnus-position)
'gnus-position t)))
`(progn
,@(gnus-complex-form-to-spec form spec-alist)))))))
(nth 1 sform)))))
form)))
-
-(defun gnus-xmas-format (fstring &rest args)
- "A version of `format' which preserves text properties.
-
-Required for XEmacs, where the built in `format' function strips all text
-properties from both the format string and any inserted strings.
-
-Only supports the format sequence %s, and %% for inserting
-literal % characters. A pad width and an optional - (to right pad)
-are supported for %s."
- (let ((re "%%\\|%\\(-\\)?\\([1-9][0-9]*\\)?s")
- (n (length args)))
- (with-temp-buffer
- (insert fstring)
- (goto-char (point-min))
- (while (re-search-forward re nil t)
- (goto-char (match-end 0))
- (cond
- ((string= (match-string 0) "%%")
- (delete-char -1))
- (t
- (if (null args)
- (signal 'wrong-number-of-arguments
- (list #'gnus-xmas-format n fstring)))
- (let* ((minlen (string-to-number (or (match-string 2) "")))
- (arg (car args))
- (str (if (stringp arg) arg (format "%s" arg)))
- (lpad (null (match-string 1)))
- (padlen (max 0 (- minlen (length str)))))
- (replace-match "")
- (if lpad (insert-char ?\ padlen))
- (insert str)
- (unless lpad (insert-char ?\ padlen))
- (setq args (cdr args))))))
- (buffer-string))))
-
(defun gnus-parse-simple-format (format spec-alist &optional insert)
;; This function parses the FORMAT string with the help of the
;; SPEC-ALIST and returns a list that can be eval'ed to return a
(setq elem '("*" ?s))))
(setq elem-type (cadr elem))
;; Insert the new format elements.
- (when (and pad-width
- (not (and (featurep 'xemacs)
- gnus-use-correct-string-widths)))
+ (when pad-width
(insert (number-to-string pad-width)))
;; Create the form to be evalled.
- (if (or max-width cut-width ignore-value
- (and (featurep 'xemacs)
- gnus-use-correct-string-widths))
+ (if (or max-width cut-width ignore-value)
(progn
(insert ?s)
(let ((el (car elem)))
;; A single string spec in the end of the spec.
((string-match "\\`\\([^%]+\\)%[sc]\\'" fstring)
(list (match-string 1 fstring) (car flist)))
- ;; Only string (and %) specs (XEmacs only!)
- ((and (featurep 'xemacs)
- gnus-make-format-preserve-properties
- (string-match
- "\\`\\([^%]*\\(%%\\|%-?\\([1-9][0-9]*\\)?s\\)\\)*[^%]*\\'"
- fstring))
- (list (cons 'gnus-xmas-format (cons fstring (nreverse flist)))))
;; A more complex spec.
(t
(list (cons 'format (cons fstring (nreverse flist)))))))
If PROPS, insert the result."
(let ((form (gnus-parse-format format alist props)))
(if props
- (gnus-add-text-properties (point) (progn (eval form) (point)) props)
+ (add-text-properties (point) (progn (eval form) (point)) props)
(eval form))))
(defun gnus-set-format (type &optional insertable)
(symbol-value (intern (format "gnus-%s-line-format-alist" type)))
insertable)))
+
+ (defun gnus-summary-line-format-spec ()
+ (insert gnus-tmp-unread gnus-tmp-replied
+ gnus-tmp-score-char gnus-tmp-indentation)
+ (put-text-property
+ (point)
+ (progn
+ (insert
+ gnus-tmp-opening-bracket
+ (format "%4d: %-20s"
+ gnus-tmp-lines
+ (if (> (length gnus-tmp-name) 20)
+ (truncate-string-to-width gnus-tmp-name 20)
+ gnus-tmp-name))
+ gnus-tmp-closing-bracket)
+ (point))
+ 'mouse-face gnus-mouse-face)
+ (insert " " gnus-tmp-subject-or-nil "\n"))
+
(provide 'gnus-spec)
;; Local Variables:
(gnus-define-keys gnus-server-mode-map
" " gnus-server-read-server-in-server-buffer
"\r" gnus-server-read-server
- gnus-mouse-2 gnus-server-pick-server
+ [mouse-2] gnus-server-pick-server
"q" gnus-server-exit
"l" gnus-server-list-servers
"k" gnus-server-kill-server
(buffer-disable-undo)
(setq truncate-lines t)
(setq buffer-read-only t)
- (if (featurep 'xemacs)
- (put 'gnus-server-mode 'font-lock-defaults '(gnus-server-font-lock-keywords t))
- (set (make-local-variable 'font-lock-defaults)
- '(gnus-server-font-lock-keywords t)))
+ (set (make-local-variable 'font-lock-defaults)
+ '(gnus-server-font-lock-keywords t))
(gnus-run-mode-hooks 'gnus-server-mode-hook))
(defun gnus-server-insert-server-line (name method)
" (cloud)"
"")))
(beginning-of-line)
- (gnus-add-text-properties
+ (add-text-properties
(point)
(prog1 (1+ (point))
;; Insert the text.
(while (not (eobp))
(ignore-errors
(push (cons
- (mm-string-as-unibyte
+ (string-as-unibyte
(buffer-substring
(point)
(progn
(while (not (eobp))
(ignore-errors
(push (cons
- (mm-string-as-unibyte
+ (string-as-unibyte
(if (eq (char-after) ?\")
(read cur)
(let ((p (point)) (name ""))
(prefix (let ((gnus-select-method orig-select-method))
(gnus-group-prefixed-name "" method))))
(while (setq group (pop groups))
- (gnus-add-text-properties
+ (add-text-properties
(point)
(prog1 (1+ (point))
(insert
(t ?K)))
(max 0 (- (1+ (cddr group)) (cadr group)))
;; Don't decode if name is ASCII
- (if (and (fboundp 'detect-coding-string)
- (eq (detect-coding-string name t) 'undecided))
+ (if (eq (detect-coding-string name t) 'undecided)
name
- (mm-decode-coding-string
+ (decode-coding-string
name
(inline (gnus-group-name-charset method name)))))))
(list 'gnus-group name)
;; Make sure that each dribble entry is a single line, so that
;; the "remove" code above works.
(insert (replace-regexp-in-string "\n" "\\\\n" string) "\n")
- ;; This has been commented by Josh Huber <huber@alum.wpi.edu>
- ;; It causes problems with both XEmacs and Emacs 21, and doesn't
- ;; seem to be of much value. (FIXME: remove this after we make sure
- ;; it's not needed).
- ;; (set-window-point (get-buffer-window (current-buffer)) (point-max))
(bury-buffer gnus-dribble-buffer)
(with-current-buffer gnus-group-buffer
(gnus-group-set-mode-line))
(setq buffer-file-name dribble-file)
;; The buffer may be shrunk a lot when deleting old entries.
;; It caused the auto-saving to stop.
- (if (featurep 'emacs)
- (set (make-local-variable 'auto-save-include-big-deletions) t)
- (set (make-local-variable 'disable-auto-save-when-buffer-shrinks) nil))
+ (set (make-local-variable 'auto-save-include-big-deletions) t)
(auto-save-mode t)
(buffer-disable-undo)
(bury-buffer (current-buffer))
type-cache))
;; Only add groups that need updating.
(if (or (and foreign-level (null (numberp foreign-level)))
- (funcall (if one-level #'= #'<=) (gnus-info-level info)
- (if (eq (cadr method-group-list) 'foreign)
- foreign-level
- alevel)))
+ (funcall (if one-level #'= #'<=) (gnus-info-level info)
+ (if (eq (cadr method-group-list) 'foreign)
+ foreign-level
+ alevel)))
(setcar (nthcdr 2 method-group-list)
(cons info (nth 2 method-group-list)))
;; The group is inactive, so we nix out the number of unread articles.
(while lists
(setq killed (car lists))
(while killed
- (gnus-sethash (mm-string-as-unibyte (car killed)) nil hashtb)
+ (gnus-sethash (string-as-unibyte (car killed)) nil hashtb)
(setq killed (cdr killed)))
(setq lists (cdr lists)))))
(funcall func convert-to)))
(gnus-dribble-enter
- (gnus-format-message ";Converted gnus from version `%s' to `%s'."
- gnus-newsrc-file-version gnus-version)))))))
+ (format-message ";Converted gnus from version `%s' to `%s'."
+ gnus-newsrc-file-version gnus-version)))))))
(defun gnus-convert-mark-converter-prompt (converter no-prompt)
"Indicate whether CONVERTER requires gnus-convert-old-newsrc to
(dolist (elem gnus-newsrc-alist)
;; Protect against broken .newsrc.el files.
(when (car elem)
- (setcar elem (mm-string-as-unibyte (car elem)))))
+ (setcar elem (string-as-unibyte (car elem)))))
(gnus-make-hashtable-from-newsrc-alist)
(when (file-newer-than-file-p file ding-file)
;; Old format quick file
(defun gnus-slave-save-newsrc ()
(with-current-buffer gnus-dribble-buffer
(let ((slave-name
- (mm-make-temp-file (concat gnus-current-startup-file "-slave-")))
+ (make-temp-file (concat gnus-current-startup-file "-slave-")))
(modes (ignore-errors
(file-modes (concat gnus-current-startup-file ".eld")))))
(let ((coding-system-for-write gnus-ding-file-coding-system))
(gnus-parameter-charset name)
gnus-default-charset)))
;; Fixme: Don't decode in unibyte mode.
- (when (and str charset (featurep 'mule))
- (setq str (mm-decode-coding-string str charset)))
+ (when (and str charset)
+ (setq str (decode-coding-string str charset)))
(set group str)))
(forward-line 1))))
(gnus-message 5 "Reading descriptions file...done")
(defun gnus-check-reasonable-setup ()
;; Check whether nnml and nnfolder share a directory.
- (let ((display-warn
- (if (fboundp 'display-warning)
- 'display-warning
- (lambda (type message)
- (if noninteractive
- (message "Warning (%s): %s" type message)
- (let (window)
- (with-current-buffer (get-buffer-create "*Warnings*")
- (goto-char (point-max))
- (unless (bolp)
- (insert "\n"))
- (insert (format "Warning (%s): %s\n" type message))
- (setq window (display-buffer (current-buffer)))
- (set-window-start
- window
- (prog2
- (forward-line (- 1 (window-height window)))
- (point)
- (goto-char (point-max))))))))))
- method active actives match)
+ (let (method active actives match)
(dolist (server gnus-server-alist)
(setq method (gnus-server-to-method server)
active (intern (format "%s-active-file" (car method))))
(gnus-server-opened method)
(boundp active))
(when (setq match (assoc (symbol-value active) actives))
- (funcall display-warn 'gnus-server
- (format "%s and %s share the same active file %s"
- (car method)
- (cadr match)
- (car match))))
+ (display-warning 'gnus-server
+ (format "%s and %s share the same active file %s"
+ (car method)
+ (cadr match)
+ (car match))))
(push (list (symbol-value active) method) actives)))))
(provide 'gnus-start)
;;; Code:
-(eval-when-compile
- (require 'cl))
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
+(eval-when-compile (require 'cl))
(defvar tool-bar-mode)
(defvar gnus-tmp-header)
:group 'gnus-summary-various
:type 'hook)
-;; Extracted from gnus-xmas-redefine in order to preserve user settings
-(when (featurep 'xemacs)
- (add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
- (add-hook 'gnus-summary-mode-hook 'gnus-xmas-setup-summary-toolbar)
- (add-hook 'gnus-summary-mode-hook
- 'gnus-xmas-switch-horizontal-scrollbar-off))
-
(defcustom gnus-summary-menu-hook nil
"*Hook run after the creation of the summary mode menu."
:group 'gnus-summary-visual
:group 'gnus-summary
:type 'hook)
-(defcustom gnus-summary-display-arrow
- (and (fboundp 'display-graphic-p)
- (display-graphic-p))
+(defcustom gnus-summary-display-arrow (display-graphic-p)
"*If non-nil, display an arrow highlighting the current article."
:version "22.1"
:group 'gnus-summary
(not (string= user-mail-address ""))
(regexp-quote user-mail-address))
"*From headers that may be suppressed in favor of To headers.
-This can be a regexp or a list of regexps."
+This can be a regexp, a list of regexps or a function.
+
+If a function, an email string is passed as the argument."
:version "21.1"
:group 'gnus-summary
:type '(choice regexp
- (repeat :tag "Regexp List" regexp)))
+ (repeat :tag "Regexp List" regexp)
+ function))
(defsubst gnus-ignored-from-addresses ()
- (gmm-regexp-concat gnus-ignored-from-addresses))
+ (cond ((functionp gnus-ignored-from-addresses)
+ gnus-ignored-from-addresses)
+ (t (gmm-regexp-concat gnus-ignored-from-addresses))))
(defcustom gnus-summary-to-prefix "-> "
"*String prefixed to the To field in the summary line when
"q" gnus-summary-exit
"Q" gnus-summary-exit-no-update
"\C-c\C-i" gnus-info-find-node
- gnus-mouse-2 gnus-mouse-pick-article
+ [mouse-2] gnus-mouse-pick-article
[follow-link] mouse-face
"m" gnus-summary-mail-other-window
"a" gnus-summary-post-news
["Verify and Decrypt" gnus-summary-force-verify-and-decrypt t]
["Encrypt body" gnus-article-encrypt-body
:active (not (gnus-group-read-only-p))
- ,@(if (featurep 'xemacs) nil
- '(:help "Encrypt the message body on disk"))]
+ :help "Encrypt the message body on disk"]
["Extract all parts..." gnus-summary-save-parts t]
("Multipart"
["Repair multipart" gnus-summary-repair-multipart t]
["View part as type..." gnus-article-view-part-as-type t]
["Encrypt body" gnus-article-encrypt-body
:active (not (gnus-group-read-only-p))
- ,@(if (featurep 'xemacs) nil
- '(:help "Encrypt the message body on disk"))]
+ :help "Encrypt the message body on disk"]
["View part externally" gnus-article-view-part-externally t]
["View HTML parts in browser" gnus-article-browse-html-article t]
["View part with charset..." gnus-article-view-part-as-charset t]
'((1 . ,cs))))
(gnus-summary-show-article 1))))
`[,(symbol-name cs) ,command t]))
- (sort (if (fboundp 'coding-system-list)
- (coding-system-list)
- (mapcar 'car mm-mime-mule-charset-alist))
- 'string<)))))
+ (sort (coding-system-list) 'string<)))))
("Washing"
("Remove Blanks"
["Leading" gnus-article-strip-leading-blank-lines t]
["Quoted-Printable" gnus-article-de-quoted-unreadable t]
["Base64" gnus-article-de-base64-unreadable t]
["Rot 13" gnus-summary-caesar-message
- ,@(if (featurep 'xemacs) '(t)
- '(:help "\"Caesar rotate\" article by 13"))]
+ :help "\"Caesar rotate\" article by 13"]
["De-IDNA" gnus-summary-idna-message t]
["Morse decode" gnus-summary-morse-message t]
["Unix pipe..." gnus-summary-pipe-message t]
)
("Output"
["Save in default format..." gnus-summary-save-article
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Save article using default method"))]
+ :help "Save article using default method"]
["Save in file..." gnus-summary-save-article-file
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Save article in file"))]
+ :help "Save article in file"]
["Save in Unix mail format..." gnus-summary-save-article-mail t]
["Save in MH folder..." gnus-summary-save-article-folder t]
["Save in VM folder..." gnus-summary-save-article-vm t]
["Pipe through a filter..." gnus-summary-pipe-output t]
["Print with Muttprint..." gnus-summary-muttprint t]
["Print" gnus-summary-print-article
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Generate and print a PostScript image"))])
+ :help "Generate and print a PostScript image"])
("Copy, move,... (Backend)"
- ,@(if (featurep 'xemacs) nil
- '(:help "Copying, moving, expiring articles..."))
+ :help "Copying, moving, expiring articles..."
["Respool article..." gnus-summary-respool-article t]
["Move article..." gnus-summary-move-article
(gnus-check-backend-function
(gnus-check-backend-function
'request-expire-articles gnus-newsgroup-name)])
("Extract"
- ["Uudecode" gnus-uu-decode-uu
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Decode uuencoded article(s)"))]
+ ["Uudecode" gnus-uu-decode-uu :help "Decode uuencoded article(s)"]
["Uudecode and save" gnus-uu-decode-uu-and-save t]
["Unshar" gnus-uu-decode-unshar t]
["Unshar and save" gnus-uu-decode-unshar-and-save t]
(easy-menu-define
gnus-article-commands-menu gnus-article-mode-map ""
(cons "Commands" innards))
- ;; in Emacs, don't share menu.
+ ;; Don't share the menu.
(setq gnus-article-commands-menu
(copy-keymap gnus-summary-article-menu))
(define-key gnus-article-mode-map [menu-bar commands]
gnus-summary-post-menu gnus-summary-mode-map ""
`("Post"
["Send a message (mail or news)" gnus-summary-post-news
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Compose a new message (mail or news)"))]
+ :help "Compose a new message (mail or news)"]
["Followup" gnus-summary-followup
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Post followup to this article"))]
+ :help "Post followup to this article"]
["Followup and yank" gnus-summary-followup-with-original
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Post followup to this article, quoting its contents"))]
+ :help "Post followup to this article, quoting its contents"]
["Supersede article" gnus-summary-supersede-article t]
["Cancel article" gnus-summary-cancel-article
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Cancel an article you posted"))]
+ :help "Cancel an article you posted"]
["Reply" gnus-summary-reply t]
["Reply and yank" gnus-summary-reply-with-original t]
["Wide reply" gnus-summary-wide-reply t]
["Wide reply and yank" gnus-summary-wide-reply-with-original
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Mail a reply, quoting this article"))]
+ :help "Mail a reply, quoting this article"]
["Very wide reply" gnus-summary-very-wide-reply t]
["Very wide reply and yank" gnus-summary-very-wide-reply-with-original
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Mail a very wide reply, quoting this article"))]
+ :help "Mail a very wide reply, quoting this article"]
["Mail forward" gnus-summary-mail-forward t]
["Post forward" gnus-summary-post-forward t]
["Digest and mail" gnus-uu-digest-mail-forward t]
["Send a mail" gnus-summary-mail-other-window t]
["Create a local message" gnus-summary-news-other-window t]
["Uuencode and post" gnus-uu-post-news
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Post a uuencoded article"))]
+ :help "Post a uuencoded article"]
["Followup via news" gnus-summary-followup-to-mail t]
["Followup via news and yank"
gnus-summary-followup-to-mail-with-original t]
["Strip signature on reply"
(lambda ()
(interactive)
- (if (not (memq message-cite-function
- '(message-cite-original-without-signature
- message-cite-original)))
- ;; Stupid workaround for XEmacs not honoring :visible.
- (message "Can't toggle this value of `message-cite-function'")
- (setq message-cite-function
- (if (eq message-cite-function
- 'message-cite-original-without-signature)
- 'message-cite-original
- 'message-cite-original-without-signature))))
- ;; XEmacs barfs on :visible.
- ,@(if (featurep 'xemacs) nil
- '(:visible (memq message-cite-function
- '(message-cite-original-without-signature
- message-cite-original))))
+ (setq message-cite-function
+ (if (eq message-cite-function
+ 'message-cite-original-without-signature)
+ 'message-cite-original
+ 'message-cite-original-without-signature)))
+ :visible (memq message-cite-function
+ '(message-cite-original-without-signature
+ message-cite-original))
:style toggle
:selected (eq message-cite-function
'message-cite-original-without-signature)
- ,@(if (featurep 'xemacs) nil
- '(:help "Strip signature from cited article when replying."))]
- ;;("Draft"
- ;;["Send" gnus-summary-send-draft t]
- ;;["Send bounced" gnus-resend-bounced-mail t])
- ))
+ :help "Strip signature from cited article when replying."]))
(cond
((not (keymapp gnus-summary-post-menu))
gnus-summary-kill-same-subject-and-select t]
["Mark same subject" gnus-summary-kill-same-subject t]
["Catchup" gnus-summary-catchup
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Mark unread articles in this group as read"))]
+ :help "Mark unread articles in this group as read"]
["Catchup all" gnus-summary-catchup-all t]
["Catchup to here" gnus-summary-catchup-to-here t]
["Catchup from here" gnus-summary-catchup-from-here t]
- ["Catchup region" gnus-summary-mark-region-as-read
- (gnus-mark-active-p)]
+ ["Catchup region" gnus-summary-mark-region-as-read mark-active]
["Mark excluded" gnus-summary-limit-mark-excluded-as-read t])
("Mark Various"
["Tick" gnus-summary-tick-article-forward t]
["Invert marks" gnus-uu-invert-processable t]
["Mark above" gnus-uu-mark-over t]
["Mark series" gnus-uu-mark-series t]
- ["Mark region" gnus-uu-mark-region (gnus-mark-active-p)]
- ["Unmark region" gnus-uu-unmark-region (gnus-mark-active-p)]
+ ["Mark region" gnus-uu-mark-region mark-active]
+ ["Unmark region" gnus-uu-unmark-region mark-active]
["Mark by regexp..." gnus-uu-mark-by-regexp t]
["Unmark by regexp..." gnus-uu-unmark-by-regexp t]
["Mark all" gnus-uu-mark-all t]
("Registry Marks")
("Scroll article"
["Page forward" gnus-summary-next-page
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Show next page of article"))]
+ :help "Show next page of article"]
["Page backward" gnus-summary-prev-page
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Show previous page of article"))]
+ :help "Show previous page of article"]
["Line forward" gnus-summary-scroll-up t])
("Move"
["Next unread article" gnus-summary-next-unread-article t]
["Send a bug report" gnus-bug t]
("Exit"
["Catchup and exit" gnus-summary-catchup-and-exit
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Mark unread articles in this group as read, then exit"))]
+ :help "Mark unread articles in this group as read, then exit"]
["Catchup all and exit" gnus-summary-catchup-all-and-exit t]
["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t]
["Catchup and goto prev" gnus-summary-catchup-and-goto-prev-group t]
["Exit group" gnus-summary-exit
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Exit current group, return to group selection mode"))]
+ :help "Exit current group, return to group selection mode"]
["Exit group without updating" gnus-summary-exit-no-update t]
["Exit and goto next group" gnus-summary-next-group t]
["Exit and goto prev group" gnus-summary-prev-group t]
(defun gnus-summary-make-tool-bar (&optional force)
"Make a summary mode tool bar from `gnus-summary-tool-bar'.
When FORCE, rebuild the tool bar."
- (when (and (not (featurep 'xemacs))
- (boundp 'tool-bar-mode)
+ (when (and (boundp 'tool-bar-mode)
tool-bar-mode
(or (not gnus-summary-tool-bar-map) force))
(let* ((load-path
- (gmm-image-load-path-for-library "gnus"
- "mail/save.xpm"
- nil t))
- (image-load-path (cons (car load-path)
- (when (boundp 'image-load-path)
- image-load-path)))
+ (image-load-path-for-library "gnus" "mail/save.xpm" nil t))
+ (image-load-path (cons (car load-path) image-load-path))
(map (gmm-tool-bar-from-list gnus-summary-tool-bar
gnus-summary-tool-bar-zap-list
'gnus-summary-mode-map)))
(setq mode-name "Summary")
(use-local-map gnus-summary-mode-map)
(buffer-disable-undo)
- (setq buffer-read-only t ;Disable modification
- show-trailing-whitespace nil)
- (setq truncate-lines t)
- ;; Force paragraph direction to be left-to-right. Don't make it
- ;; bound globally in old Emacsen and XEmacsen.
- (set (make-local-variable 'bidi-paragraph-direction) 'left-to-right)
+ (setq buffer-read-only t
+ show-trailing-whitespace nil
+ truncate-lines t
+ bidi-paragraph-direction 'left-to-right)
(add-to-invisibility-spec '(gnus-sum . t))
(gnus-summary-set-display-table)
(gnus-set-default-directory)
(make-local-variable 'gnus-summary-dummy-line-format)
(make-local-variable 'gnus-summary-dummy-line-format-spec)
(make-local-variable 'gnus-summary-mark-positions)
- (gnus-make-local-hook 'pre-command-hook)
(add-hook 'pre-command-hook 'gnus-set-global-variables nil t)
(gnus-run-mode-hooks 'gnus-summary-mode-hook)
(turn-on-gnus-mailing-list-mode)
(i 32))
;; Nix out all the control chars...
(while (>= (setq i (1- i)) 0)
- (gnus-put-display-table i [??] table))
+ (aset table i [??]))
;; ... but not newline and cr, of course. (cr is necessary for the
;; selective display).
- (gnus-put-display-table ?\n nil table)
- (gnus-put-display-table ?\r nil table)
+ (aset table ?\n nil)
+ (aset table ?\r nil)
;; We keep TAB as well.
- (gnus-put-display-table ?\t nil table)
+ (aset table ?\t nil)
;; We nix out any glyphs 127 through 255, or 127 through 159 in
;; Emacs 23 (unicode), that are not set already.
(let ((i (if (ignore-errors (= (make-char 'latin-iso8859-1 160) 160))
256)))
(while (>= (setq i (1- i)) 127)
;; Only modify if the entry is nil.
- (unless (gnus-get-display-table i table)
- (gnus-put-display-table i [??] table))))
+ (unless (aref table i)
+ (aset table i [??]))))
(setq buffer-display-table table)))
(defun gnus-summary-set-article-display-arrow (pos)
(defun gnus-summary-insert-dummy-line (gnus-tmp-subject gnus-tmp-number)
"Insert a dummy root in the summary buffer."
(beginning-of-line)
- (gnus-add-text-properties
+ (add-text-properties
(point) (progn (eval gnus-summary-dummy-line-format-spec) (point))
(list 'gnus-number gnus-tmp-number 'gnus-intangible gnus-tmp-number)))
(defun gnus-summary-from-or-to-or-newsgroups (header gnus-tmp-from)
(let ((mail-parse-charset gnus-newsgroup-charset)
- (ignored-from-addresses (gnus-ignored-from-addresses))
;; Is it really necessary to do this next part for each summary line?
;; Luckily, doesn't seem to slow things down much.
(mail-parse-ignored-charsets
(with-current-buffer gnus-summary-buffer
gnus-newsgroup-ignored-charsets)))
(or
- (and ignored-from-addresses
- (string-match ignored-from-addresses gnus-tmp-from)
+ (and gnus-ignored-from-addresses
+ (cond ((functionp gnus-ignored-from-addresses)
+ (funcall gnus-ignored-from-addresses
+ (mail-strip-quoted-names gnus-tmp-from)))
+ (t (string-match (gnus-ignored-from-addresses) gnus-tmp-from)))
(let ((extra-headers (mail-header-extra header))
to
newsgroups)
gnus-newsgroup-name)) 'nntp)
(gnus-group-real-name gnus-newsgroup-name))))
(concat gnus-summary-newsgroup-prefix newsgroups)))))
- (gnus-string-mark-left-to-right
+ (bidi-string-mark-left-to-right
(inline
(gnus-summary-extract-address-component gnus-tmp-from))))))
(setq gnus-tmp-lines "?")
(setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
(condition-case ()
- (gnus-put-text-property
+ (put-text-property
(point)
(progn (eval gnus-summary-line-format-spec) (point))
'gnus-number gnus-tmp-number)
Returns \" ? \" if there's bad input or if another error occurs.
Input should look like this: \"Sun, 14 Oct 2001 13:34:39 +0200\"."
(condition-case ()
- (let* ((messy-date (gnus-float-time (gnus-date-get-time messy-date)))
- (now (gnus-float-time))
+ (let* ((messy-date (float-time (gnus-date-get-time messy-date)))
+ (now (float-time))
;;If we don't find something suitable we'll use this one
(my-format "%b %d '%y"))
(let* ((difference (- now messy-date))
(defsubst gnus-remove-odd-characters (string)
"Translate STRING into something that doesn't contain weird characters."
- (mm-subst-char-in-string
+ (subst-char-in-string
?\r ?\-
- (mm-subst-char-in-string ?\n ?\- string t) t))
+ (subst-char-in-string ?\n ?\- string t) t))
;; This function has to be called with point after the article number
;; on the beginning of the line.
(defun gnus-thread-latest-date (thread)
"Return the highest article date in THREAD."
(apply 'max
- (mapcar (lambda (header) (gnus-float-time
+ (mapcar (lambda (header) (float-time
(gnus-date-get-time
(mail-header-date header))))
(message-flatten-list thread))))
(if (= gnus-tmp-lines -1)
(setq gnus-tmp-lines "?")
(setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
- (gnus-put-text-property
+ (put-text-property
(point)
(progn (eval gnus-summary-line-format-spec) (point))
'gnus-number number)
(gnus-kill-buffer (current-buffer)))
(error
"Couldn't activate group %s: %s"
- (mm-decode-coding-string group charset)
- (mm-decode-coding-string (gnus-status-message group) charset))))
+ (decode-coding-string group charset)
+ (decode-coding-string (gnus-status-message group) charset))))
(unless (gnus-request-group group t nil (gnus-get-info group))
(when (derived-mode-p 'gnus-summary-mode)
(gnus-kill-buffer (current-buffer)))
(error "Couldn't request group %s: %s"
- (mm-decode-coding-string group charset)
- (mm-decode-coding-string (gnus-status-message group) charset)))
+ (decode-coding-string group charset)
+ (decode-coding-string (gnus-status-message group) charset)))
(when (and gnus-agent
(gnus-active group))
(setq arts (cdr arts)))
(setq list (cdr all)))))
+ ;; When exiting the group, everything that's previously been
+ ;; unseen is now seen.
(when (eq (cdr type) 'seen)
(setq list (gnus-range-add list gnus-newsgroup-unseen)))
(gnus-summary-find-next nil article)))
(decf n)))
(nreverse articles)))
- ((and (gnus-region-active-p) (mark))
+ ((and (and transient-mark-mode mark-active) (mark))
(message "region active")
;; Work on the region between point and mark.
(let ((max (max (point) (mark)))
(when (and gnus-auto-center-summary
(not (eq gnus-auto-center-summary 'vertical)))
(gnus-horizontal-recenter))
- (if (fboundp 'recenter-top-bottom)
- (recenter-top-bottom n)
- (recenter n)))
+ (recenter-top-bottom n))
(put 'gnus-recenter 'isearch-scroll t)
(while (and (> n 0) (not done))
;; If the following character is currently invisible,
;; skip all characters with that same `invisible' property value.
- (while (gnus-invisible-p (point))
- (goto-char (gnus-next-char-property-change (point))))
+ (while (invisible-p (point))
+ (goto-char (next-char-property-change (point))))
(forward-line 1)
(if (eobp)
(setq done t)
(forward-line -1)
(if (bobp) (setq done t)
(setq n (1+ n))
- (while (and (not (bobp)) (gnus-invisible-p (1- (point))))
- (goto-char (gnus-previous-char-property-change (point))))))))
+ (while (and (not (bobp)) (invisible-p (1- (point))))
+ (goto-char (previous-char-property-change (point))))))))
(defun gnus-summary-recenter ()
"Center point in the summary window.
(t
(unless (gnus-ephemeral-group-p gnus-newsgroup-name)
(gnus-summary-jump-to-group gnus-newsgroup-name))
- (let ((cmd (if (featurep 'xemacs)
- last-command-char
- last-command-event))
+ (let ((cmd last-command-event)
(point
(with-current-buffer gnus-group-buffer
(point)))
"exiting"))
(gnus-summary-next-group nil group backward)))
(t
- (when (gnus-key-press-event-p last-input-event)
+ (when (numberp last-input-event)
;; Somehow or other, we may now have selected a different
;; window. Make point go back to the summary buffer.
(when (eq current-summary (current-buffer))
(gnus-summary-position-point))))
(defun gnus-summary-limit-strange-charsets-predicate (header)
- (when (fboundp 'char-charset)
- (let ((string (concat (mail-header-subject header)
- (mail-header-from header)))
- charset found)
- (dotimes (i (1- (length string)))
- (setq charset (format "%s" (char-charset (aref string (1+ i)))))
- (when (string-match "unicode\\|big\\|japanese" charset)
- (setq found t)))
- found)))
+ (let ((string (concat (mail-header-subject header)
+ (mail-header-from header)))
+ charset found)
+ (dotimes (i (1- (length string)))
+ (setq charset (format "%s" (char-charset (aref string (1+ i)))))
+ (when (string-match "unicode\\|big\\|japanese" charset)
+ (setq found t)))
+ found))
(defun gnus-summary-limit-to-predicate (predicate)
"Limit to articles where PREDICATE returns non-nil.
(gnus-agent nil)
(gnus-read-all-available-headers t))
(setq gnus-newsgroup-headers
- (gnus-merge
+ (cl-merge
'list gnus-newsgroup-headers
(gnus-fetch-headers articles nil t)
'gnus-article-sort-by-number))
(gnus-sorted-nunion gnus-newsgroup-unreads new-unreads))
(setq gnus-newsgroup-headers
(gnus-delete-duplicate-headers
- (gnus-merge
+ (cl-merge
'list gnus-newsgroup-headers new-headers
'gnus-article-sort-by-number)))
(setq gnus-newsgroup-articles
(gnus-warp-to-article)
(when (and (stringp message-id)
(not (zerop (length message-id))))
- (setq message-id (gnus-replace-in-string message-id " " ""))
+ (setq message-id (replace-regexp-in-string " " "" message-id))
;; Construct the correct Message-ID if necessary.
;; Suggested by tale@pawl.rpi.edu.
(unless (string-match "^<" message-id)
(gnus-article-prepare-hook nil)
(gnus-mark-article-hook nil) ;Inhibit marking as read.
(gnus-use-article-prefetch nil)
- (gnus-xmas-force-redisplay nil) ;Inhibit XEmacs redisplay.
(gnus-use-trees nil) ;Inhibit updating tree buffer.
(gnus-visual nil)
(gnus-keep-backlog nil)
(defun gnus-summary-print-truncate-and-quote (string &optional len)
"Truncate to LEN and quote all \"(\"'s in STRING."
- (gnus-replace-in-string (if (and len (> (length string) len))
- (substring string 0 len)
- string)
- "[()]" "\\\\\\&"))
+ (replace-regexp-in-string "[()]" "\\\\\\&"
+ (if (and len (> (length string) len))
+ (substring string 0 len)
+ string)))
(defun gnus-summary-print-article (&optional filename n)
"Generate and print a PostScript image of the process-marked (mail) articles.
(gnus-summary-show-article t)
(let ((gnus-newsgroup-charset
(or (cdr (assq arg gnus-summary-show-article-charset-alist))
- (mm-read-coding-system
+ (read-coding-system
"View as charset: " ;; actually it is coding system.
(with-current-buffer gnus-article-buffer
(mm-detect-coding-region (point) (point-max))))))
;; Create buttons and stuff...
(gnus-treat-article nil))
-(declare-function idna-to-unicode "ext:idna" (str))
-
(defun gnus-summary-idna-message (&optional arg)
"Decode IDNA encoded domain names in the current articles.
IDNA encoded domain names looks like `xn--bar'. If a string
You must have GNU Libidn (URL `http://www.gnu.org/software/libidn/')
installed for this command to work."
(interactive "P")
- (if (not (and (mm-coding-system-p 'utf-8)
- (condition-case nil
- (require 'idna)
- (file-error)
- (invalid-operation))
- (symbol-value 'idna-program)
- (executable-find (symbol-value 'idna-program))))
- (gnus-message
- 5 "GNU Libidn not installed properly (`idn' or `idna.el' missing)")
- (gnus-summary-select-article)
- (let ((mail-header-separator ""))
- (gnus-eval-in-buffer-window gnus-article-buffer
- (save-restriction
- (widen)
- (let ((start (window-start))
- buffer-read-only)
- (while (re-search-forward "\\(xn--[-0-9a-z]+\\)" nil t)
- (replace-match (idna-to-unicode (match-string 1))))
- (set-window-start (get-buffer-window (current-buffer)) start)))))))
+ (gnus-summary-select-article)
+ (let ((mail-header-separator ""))
+ (gnus-eval-in-buffer-window gnus-article-buffer
+ (save-restriction
+ (widen)
+ (let ((start (window-start))
+ buffer-read-only)
+ (while (re-search-forward "\\(xn--[-0-9a-z]+\\)" nil t)
+ (replace-match (puny-decode-domain (match-string 1))))
+ (set-window-start (get-buffer-window (current-buffer)) start))))))
(defun gnus-summary-morse-message (&optional arg)
"Morse decode the current article."
encoded to-newsgroup
to-method (gnus-server-to-method (gnus-group-method to-newsgroup)))
(set (intern (format "gnus-current-%s-group" action))
- (mm-decode-coding-string
+ (decode-coding-string
to-newsgroup
(gnus-group-name-charset to-method to-newsgroup))))
(unless to-method
(setq to-newsgroup
(or encoded
(and to-newsgroup
- (mm-encode-coding-string
+ (encode-coding-string
to-newsgroup
(gnus-group-name-charset to-method to-newsgroup)))))
;; Check the method we are to move this article to...
(let ((mbl1 mml-buffer-list))
(setq mml-buffer-list mbl)
(set (make-local-variable 'mml-buffer-list) mbl1))
- (gnus-make-local-hook 'kill-buffer-hook)
(add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))))
`(lambda (no-highlight)
(let ((mail-parse-charset ',gnus-newsgroup-charset)
the process mark instead. The difference between N and the actual
number of articles marked is returned."
(interactive "P")
- (if (and (null n) (gnus-region-active-p))
+ (if (and (null n) (and transient-mark-mode mark-active))
(gnus-uu-mark-region (region-beginning) (region-end) unmark)
(setq n (prefix-numeric-value n))
(let ((backward (< n 0))
(goto-char (+ forward (point)))
;; Replace the old mark with the new mark.
(let ((to-insert
- (mm-subst-char-in-string
+ (subst-char-in-string
(char-after) mark
(buffer-substring (point) (1+ (point))))))
(delete-region (point) (1+ (point)))
(end (or (gnus-summary--inv end) (gnus-summary--inv (1- end))))
;; Leave point at bol
(beg (progn (beginning-of-line) (if (bobp) (point) (1- (point)))))
- (eoi (when end
- (if (fboundp 'next-single-char-property-change)
- ;; Note: XEmacs version of n-s-c-p-c may return nil
- (or (next-single-char-property-change end 'invisible)
- (point-max))
- (while (progn
- (end-of-line 2)
- (and (not (eobp))
- (eq (get-char-property (point) 'invisible)
- 'gnus-sum))))
- (point)))))
+ (eoi (and end (next-single-char-property-change end 'invisible))))
(when eoi
(remove-overlays beg eoi 'invisible 'gnus-sum)
(goto-char orig)
command result)
(unless (numberp (car articles))
(error "No article to pipe"))
- (setq command (gnus-read-shell-command
+ (setq command (read-shell-command
(concat "Shell command on "
(if (cdr articles)
(format "these %d articles" (length articles))
(defun gnus-read-move-group-name (prompt default articles prefix)
"Read a group name."
(let* ((split-name (gnus-get-split-value gnus-move-split-methods))
- (minibuffer-confirm-incomplete nil) ; XEmacs
(prom
(format "%s %s to"
prompt
(setq to-newsgroup default))
(unless to-newsgroup
(error "No group name entered"))
- (setq encoded (mm-encode-coding-string
+ (setq encoded (encode-coding-string
to-newsgroup
(gnus-group-name-charset to-method to-newsgroup)))
(or (gnus-active encoded)
": " (or (cdr (assq 'execute (car pslist))) "") "\n")
(setq e (point))
(forward-line -1) ; back to `b'
- (gnus-add-text-properties
+ (add-text-properties
b (1- e) (list 'gnus-number gnus-reffed-article-number
- gnus-mouse-face-prop gnus-mouse-face))
+ 'mouse-face gnus-mouse-face))
(gnus-data-enter
after-article gnus-reffed-article-number
gnus-unread-mark b (car pslist) 0 (- e b))
(let* ((beg (point-at-bol))
(end (point-at-eol))
;; Fix by Mike Dugan <dugan@bucrf16.bu.edu>.
- (from (if (get-text-property beg gnus-mouse-face-prop)
+ (from (if (get-text-property beg 'mouse-face)
beg
(or (next-single-property-change
- beg gnus-mouse-face-prop nil end)
+ beg 'mouse-face nil end)
beg)))
(to
(if (= from end)
(- from 2)
(or (next-single-property-change
- from gnus-mouse-face-prop nil end)
+ from 'mouse-face nil end)
end))))
;; If no mouse-face prop on line we will have to = from = end,
;; so we highlight the entire line instead.
(mail-header-number h))
gnus-newsgroup-headers)))
(setq gnus-newsgroup-headers
- (gnus-merge 'list
- gnus-newsgroup-headers
- (gnus-fetch-headers articles nil t)
- 'gnus-article-sort-by-number))
+ (cl-merge 'list
+ gnus-newsgroup-headers
+ (gnus-fetch-headers articles nil t)
+ 'gnus-article-sort-by-number))
(setq gnus-newsgroup-articles
(gnus-sorted-nunion gnus-newsgroup-articles articles))
;; Suppress duplicates?
(gnus-summary-make-all-marking-commands)
-(gnus-ems-redefine)
-
(provide 'gnus-sum)
(run-hooks 'gnus-sum-load-hook)
(defun gnus-sync-lesync-DELETE (url headers &optional data)
(gnus-sync-lesync-call url "DELETE" headers data))
-;; this is not necessary with newer versions of json.el but 1.2 or older
-;; (which are in Emacs 24.1 and earlier) need it
-(defun gnus-sync-json-alist-p (list)
- "Non-null if and only if LIST is an alist."
- (while (consp list)
- (setq list (if (consp (car list))
- (cdr list)
- 'not-alist)))
- (null list))
-
-;; this is not necessary with newer versions of json.el but 1.2 or older
-;; (which are in Emacs 24.1 and earlier) need it
-(defun gnus-sync-json-plist-p (list)
- "Non-null if and only if LIST is a plist."
- (while (consp list)
- (setq list (if (and (keywordp (car list))
- (consp (cdr list)))
- (cddr list)
- 'not-plist)))
- (null list))
-
; (gnus-sync-lesync-setup "http://lesync.info:5984/tzz" "tzzadmin" "mypassword" "mysalt" t t)
; (gnus-sync-lesync-setup "http://lesync.info:5984/tzz")
:type 'hook
:group 'gnus-topic)
-(when (featurep 'xemacs)
- (add-hook 'gnus-topic-mode-hook 'gnus-xmas-topic-menu-add))
-
(defcustom gnus-topic-line-format "%i[ %(%{%n%}%) -- %A ]%v\n"
"Format of topic lines.
It works along the same lines as a normal formatting string,
(not (zerop unread)) ;Non-empty
tick ;Ticked articles
(/= point-max (point-max)))) ;Inactive groups
- (gnus-extent-start-open (point))
(gnus-topic-insert-topic-line
(car type) visiblep
(not (eq (nth 2 type) 'hidden))
(beginning-of-line)
;; Insert the text.
(if shownp
- (gnus-add-text-properties
+ (add-text-properties
(point)
(prog1 (1+ (point))
(eval gnus-topic-line-format-spec))
[(meta tab)] gnus-topic-unindent
"\C-i" gnus-topic-indent
"\M-\C-i" gnus-topic-unindent
- gnus-mouse-2 gnus-mouse-pick-topic)
+ [mouse-2] gnus-mouse-pick-topic)
;; Define a new submap.
(gnus-define-keys (gnus-group-topic-map "T" gnus-group-mode-map)
'gnus-group-sort-topic)
(setq gnus-group-change-level-function 'gnus-topic-change-level)
(setq gnus-goto-missing-group-function 'gnus-topic-goto-missing-group)
- (gnus-make-local-hook 'gnus-check-bogus-groups-hook)
(add-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist
nil 'local)
(setq gnus-topology-checked-p nil)
(remove-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist)
(setq gnus-group-prepare-function 'gnus-group-prepare-flat)
(setq gnus-group-sort-alist-function 'gnus-group-sort-flat))
- (when (gmm-called-interactively-p 'any)
+ (when (called-interactively-p 'any)
(gnus-group-list-groups))))
(defun gnus-topic-select-group (&optional all)
(list current-prefix-arg
(gnus-completing-read "Move to topic" (mapcar 'car gnus-topic-alist) t
nil 'gnus-topic-history)))
- (let ((use-marked (and (not n) (not (gnus-region-active-p))
+ (let ((use-marked (and (not n) (not (and transient-mark-mode mark-active))
gnus-group-marked t))
(groups (gnus-group-process-prefix n))
(topicl (assoc topic gnus-topic-alist))
(defun gnus-topic-remove-group (&optional n)
"Remove the current group from the topic."
(interactive "P")
- (let ((use-marked (and (not n) (not (gnus-region-active-p))
+ (let ((use-marked (and (not n) (not (and transient-mark-mode mark-active))
gnus-group-marked t))
(groups (gnus-group-process-prefix n)))
(mapc
(let ((topic (gnus-group-topic-name)))
(gnus-edit-form
(gnus-topic-parameters topic)
- (gnus-format-message "Editing the topic parameters for `%s'."
- (or group topic))
+ (format-message "Editing the topic parameters for `%s'."
+ (or group topic))
`(lambda (form)
(gnus-topic-set-parameters ,topic form)))))))
;;; Code:
(eval-when-compile (require 'cl))
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
(require 'gnus-util)
(require 'gnus)
;; Set up the menu.
(when (gnus-visual-p 'undo-menu 'menu)
(gnus-undo-make-menu-bar))
- (gnus-make-local-hook 'post-command-hook)
(add-hook 'post-command-hook 'gnus-undo-boundary nil t)))
;;; Interface functions.
:type `(radio (function-item
:doc "Use Emacs standard `completing-read' function."
gnus-emacs-completing-read)
- ;; iswitchb.el is very old and ido.el is unavailable
- ;; in XEmacs, so we exclude those function items.
- ,@(unless (featurep 'xemacs)
- '((function-item
- :doc "Use `ido-completing-read' function."
- gnus-ido-completing-read)
- (function-item
- :doc "Use iswitchb based completing-read function."
- gnus-iswitchb-completing-read)))))
+ (function-item
+ :doc "Use `ido-completing-read' function."
+ gnus-ido-completing-read)
+ (function-item
+ :doc "Use iswitchb based completing-read function."
+ gnus-iswitchb-completing-read)))
(defcustom gnus-completion-styles
- (if (and (boundp 'completion-styles-alist)
- (boundp 'completion-styles))
- (append (when (and (assq 'substring completion-styles-alist)
- (not (memq 'substring completion-styles)))
- (list 'substring))
- completion-styles)
- nil)
+ (append (when (and (assq 'substring completion-styles-alist)
+ (not (memq 'substring completion-styles)))
+ (list 'substring))
+ completion-styles)
"Value of `completion-styles' to use when completing."
:version "24.1"
:group 'gnus-meta
(autoload 'nnheader-replace-chars-in-string "nnheader")
(autoload 'mail-header-remove-comments "mail-parse")
-(eval-and-compile
- (cond
- ;; Prefer `replace-regexp-in-string' (present in Emacs, XEmacs 21.5,
- ;; SXEmacs 22.1.4) over `replace-in-string'. The latter leads to inf-loops
- ;; on empty matches:
- ;; (replace-in-string "foo" "/*$" "/")
- ;; (replace-in-string "xe" "\\(x\\)?" "")
- ((fboundp 'replace-regexp-in-string)
- (defun gnus-replace-in-string (string regexp newtext &optional literal)
- "Replace all matches for REGEXP with NEWTEXT in STRING.
+(defun gnus-replace-in-string (string regexp newtext &optional literal)
+ "Replace all matches for REGEXP with NEWTEXT in STRING.
If LITERAL is non-nil, insert NEWTEXT literally. Return a new
string containing the replacements.
This is a compatibility function for different Emacsen."
- (replace-regexp-in-string regexp newtext string nil literal)))
- ((fboundp 'replace-in-string)
- (defalias 'gnus-replace-in-string 'replace-in-string))))
+ (declare (obsolete replace-regexp-in-string "25.2"))
+ (replace-regexp-in-string regexp newtext string nil literal))
(defun gnus-boundp (variable)
"Return non-nil if VARIABLE is bound and non-nil."
(funcall (if (stringp buffer) 'get-buffer 'buffer-name)
buffer))))
-;; The LOCAL arg to `add-hook' is interpreted differently in Emacs and
-;; XEmacs. In Emacs we don't need to call `make-local-hook' first.
-;; It's harmless, though, so the main purpose of this alias is to shut
-;; up the byte compiler.
-(defalias 'gnus-make-local-hook (if (featurep 'xemacs)
- 'make-local-hook
- 'ignore))
-
(defun gnus-delete-first (elt list)
"Delete by side effect the first occurrence of ELT as a member of LIST."
(if (equal (car list) elt)
(and (= (car fdate) (car date))
(> (nth 1 fdate) (nth 1 date))))))
-;; Every version of Emacs Gnus supports has built-in float-time.
-;; The featurep test silences an irritating compiler warning.
-(defalias 'gnus-float-time
- (if (or (featurep 'emacs)
- (fboundp 'float-time))
- 'float-time 'time-to-seconds))
-
;;; Keymap macros.
(defmacro gnus-local-set-keys (&rest plist)
(defmacro gnus-define-keys (keymap &rest plist)
"Define all keys in PLIST in KEYMAP."
- ;; Convert the key [?\S-\ ] to [(shift space)] for XEmacs.
- (when (featurep 'xemacs)
- (let ((bindings plist))
- (while bindings
- (when (equal (car bindings) [?\S-\ ])
- (setcar bindings [(shift space)]))
- (setq bindings (cddr bindings)))))
`(gnus-define-keys-1 (quote ,keymap) (quote ,plist)))
(defmacro gnus-define-keys-safe (keymap &rest plist)
(defun gnus-mode-string-quote (string)
"Quote all \"%\"'s in STRING."
- (gnus-replace-in-string string "%" "%%"))
+ (replace-regexp-in-string "%" "%%" string))
;; Make a hash table (default and minimum size is 256).
;; Optional argument HASHSIZE specifies the table size.
(defcustom gnus-add-timestamp-to-message nil
"Non-nil means add timestamps to messages that Gnus issues.
-If it is `log', add timestamps to only the messages that go into the
-\"*Messages*\" buffer (in XEmacs, it is the \" *Message-Log*\" buffer).
-If it is neither nil nor `log', add timestamps not only to log messages
-but also to the ones displayed in the echo area."
+If it is `log', add timestamps to only the messages that go into
+the \"*Messages*\" buffer. If it is neither nil nor `log', add
+timestamps not only to log messages but also to the ones
+displayed in the echo area."
:version "23.1" ;; No Gnus
:group 'gnus-various
:type '(choice :format "%{%t%}:\n %[Value Menu%] %v"
(eval-when-compile
(defmacro gnus-message-with-timestamp-1 (format-string args)
(let ((timestamp '(format-time-string "%Y%m%dT%H%M%S.%3N> " time)))
- (if (featurep 'xemacs)
- `(let (str time)
- (if (or (and (null ,format-string) (null ,args))
- (progn
- (setq str (apply 'format ,format-string ,args))
- (zerop (length str))))
- (prog1
- (and ,format-string str)
- (clear-message nil))
- (cond ((eq gnus-add-timestamp-to-message 'log)
- (setq time (current-time))
- (display-message 'no-log str)
- (log-message 'message (concat ,timestamp str)))
- (gnus-add-timestamp-to-message
- (setq time (current-time))
- (display-message 'message (concat ,timestamp str)))
- (t
- (display-message 'message str))))
- str)
- `(let (str time)
- (cond ((eq gnus-add-timestamp-to-message 'log)
- (setq str (let (message-log-max)
- (apply 'message ,format-string ,args)))
- (when (and message-log-max
- (> message-log-max 0)
- (/= (length str) 0))
- (setq time (current-time))
- (with-current-buffer (if (fboundp 'messages-buffer)
- (messages-buffer)
- (get-buffer-create "*Messages*"))
- (goto-char (point-max))
- (let ((inhibit-read-only t))
- (insert ,timestamp str "\n")
- (forward-line (- message-log-max))
- (delete-region (point-min) (point)))
- (goto-char (point-max))))
- str)
- (gnus-add-timestamp-to-message
- (if (or (and (null ,format-string) (null ,args))
- (progn
- (setq str (apply 'format ,format-string ,args))
- (zerop (length str))))
- (prog1
- (and ,format-string str)
- (message nil))
- (setq time (current-time))
- (message "%s" (concat ,timestamp str))
- str))
- (t
- (apply 'message ,format-string ,args))))))))
+ `(let (str time)
+ (cond ((eq gnus-add-timestamp-to-message 'log)
+ (setq str (let (message-log-max)
+ (apply 'message ,format-string ,args)))
+ (when (and message-log-max
+ (> message-log-max 0)
+ (/= (length str) 0))
+ (setq time (current-time))
+ (with-current-buffer (if (fboundp 'messages-buffer)
+ (messages-buffer)
+ (get-buffer-create "*Messages*"))
+ (goto-char (point-max))
+ (let ((inhibit-read-only t))
+ (insert ,timestamp str "\n")
+ (forward-line (- message-log-max))
+ (delete-region (point-min) (point)))
+ (goto-char (point-max))))
+ str)
+ (gnus-add-timestamp-to-message
+ (if (or (and (null ,format-string) (null ,args))
+ (progn
+ (setq str (apply 'format ,format-string ,args))
+ (zerop (length str))))
+ (prog1
+ (and ,format-string str)
+ (message nil))
+ (setq time (current-time))
+ (message "%s" (concat ,timestamp str))
+ str))
+ (t
+ (apply 'message ,format-string ,args)))))))
(defvar gnus-action-message-log nil)
(defun gnus-read-event-char (&optional prompt)
"Get the next event."
(let ((event (read-event prompt)))
- ;; should be gnus-characterp, but this can't be called in XEmacs anyway
(cons (and (numberp event) event) event)))
(defun gnus-copy-file (file &optional to)
(setq string (replace-match "" t t string)))
string)
-(declare-function gnus-put-text-property "gnus"
- (start end property value &optional object))
-
(defsubst gnus-put-text-property-excluding-newlines (beg end prop val)
"The same as `put-text-property', but don't put this prop on any newlines in the region."
(save-match-data
(save-restriction
(goto-char beg)
(while (re-search-forward gnus-emphasize-whitespace-regexp end 'move)
- (gnus-put-text-property beg (match-beginning 0) prop val)
+ (put-text-property beg (match-beginning 0) prop val)
(setq beg (point)))
- (gnus-put-text-property beg (point) prop val)))))
+ (put-text-property beg (point) prop val)))))
(defsubst gnus-put-overlay-excluding-newlines (beg end prop val)
"The same as `put-text-property', but don't put this prop on any newlines in the region."
(when (eq prop 'face)
(setcar (cdr (get-text-property beg 'face)) (or val 'default)))
(inline
- (gnus-put-text-property beg stop prop val)))
+ (put-text-property beg stop prop val)))
(setq beg stop))))
(defun gnus-get-text-property-excluding-characters-with-faces (pos prop)
(defmacro gnus-faces-at (position)
"Return a list of faces at POSITION."
- (if (featurep 'xemacs)
- `(let ((pos ,position))
- (mapcar-extents 'extent-face
- nil (current-buffer) pos pos nil 'face))
- `(let ((pos ,position))
- (delq nil (cons (get-text-property pos 'face)
- (mapcar
- (lambda (overlay)
- (overlay-get overlay 'face))
- (overlays-at pos)))))))
-
-(if (fboundp 'invisible-p)
- (defalias 'gnus-invisible-p 'invisible-p)
- ;; for Emacs < 22.2, and XEmacs.
- (defun gnus-invisible-p (pos)
- "Return non-nil if the character after POS is currently invisible."
- (let ((prop (get-char-property pos 'invisible)))
- (if (eq buffer-invisibility-spec t)
- prop
- (or (memq prop buffer-invisibility-spec)
- (assq prop buffer-invisibility-spec))))))
-
-;; Note: the optional 2nd argument has a different meaning between
-;; Emacs and XEmacs.
-;; (next-char-property-change POSITION &optional LIMIT)
-;; (next-extent-change POS &optional OBJECT)
-(defalias 'gnus-next-char-property-change
- (if (fboundp 'next-extent-change)
- 'next-extent-change 'next-char-property-change))
-
-(defalias 'gnus-previous-char-property-change
- (if (fboundp 'previous-extent-change)
- 'previous-extent-change 'previous-char-property-change))
+ `(let ((pos ,position))
+ (delq nil (cons (get-text-property pos 'face)
+ (mapcar
+ (lambda (overlay)
+ (overlay-get overlay 'face))
+ (overlays-at pos))))))
;;; Protected and atomic operations. dmoore@ucsd.edu 21.11.1996
;; The primary idea here is to try to protect internal data structures
;;; Functions for saving to babyl/mail files.
-(eval-when-compile
- (if (featurep 'xemacs)
- ;; Don't load tm and apel XEmacs packages that provide some
- ;; Emacs emulating functions and variables.
- (let ((features features))
- (provide 'tm-view)
- (unless (fboundp 'set-alist) (defalias 'set-alist 'ignore))
- (require 'rmail)) ;; It requires tm-view that loads apel.
- (require 'rmail))
- (autoload 'rmail-update-summary "rmailsum"))
+(require 'rmail)
+(autoload 'rmail-update-summary "rmailsum")
(defvar mm-text-coding-system)
(apply 'run-hook-with-args hook args)))
(defun gnus-run-mode-hooks (&rest funcs)
- "Run `run-mode-hooks' if it is available, otherwise `run-hooks'.
-This function saves the current buffer."
- (if (fboundp 'run-mode-hooks)
- (save-current-buffer (apply 'run-mode-hooks funcs))
- (save-current-buffer (apply 'run-hooks funcs))))
+ "Run `run-mode-hooks', saving the current buffer."
+ (save-current-buffer (apply 'run-mode-hooks funcs)))
;;; Various
(setq sequence (cdr sequence))))
(nreverse out)))
-(if (fboundp 'assq-delete-all)
- (defalias 'gnus-delete-alist 'assq-delete-all)
- (defun gnus-delete-alist (key alist)
- "Delete from ALIST all elements whose car is KEY.
-Return the modified alist."
- (let (entry)
- (while (setq entry (assq key alist))
- (setq alist (delq entry alist)))
- alist)))
-
(defun gnus-grep-in-list (word list)
"Find if a WORD matches any regular expression in the given LIST."
(when (and word list)
(put 'gnus-with-output-to-file 'lisp-indent-function 1)
(put 'gnus-with-output-to-file 'edebug-form-spec '(form body))
-(if (fboundp 'union)
- (defalias 'gnus-union 'union)
- (defun gnus-union (l1 l2 &rest keys)
- "Set union of lists L1 and L2.
-If KEYS contains the `:test' and `equal' pair, use `equal' to compare
-items in lists, otherwise use `eq'."
- (cond ((null l1) l2)
- ((null l2) l1)
- ((equal l1 l2) l1)
- (t
- (or (>= (length l1) (length l2))
- (setq l1 (prog1 l2 (setq l2 l1))))
- (if (eq 'equal (plist-get keys :test))
- (while l2
- (or (member (car l2) l1)
- (push (car l2) l1))
- (pop l2))
- (while l2
- (or (memq (car l2) l1)
- (push (car l2) l1))
- (pop l2)))
- l1))))
-
-(declare-function gnus-add-text-properties "gnus"
- (start end properties &optional object))
-
(defun gnus-add-text-properties-when
(property value start end properties &optional object)
- "Like `gnus-add-text-properties', only applied on where PROPERTY is VALUE."
+ "Like `add-text-properties', only applied on where PROPERTY is VALUE."
(let (point)
(while (and start
(< start end) ;; XEmacs will loop for every when start=end.
(setq point (text-property-not-all start end property value)))
- (gnus-add-text-properties start point properties object)
+ (add-text-properties start point properties object)
(setq start (text-property-any point end property value)))
(if start
- (gnus-add-text-properties start end properties object))))
+ (add-text-properties start end properties object))))
(defun gnus-remove-text-properties-when
(property value start end properties &optional object)
"Byte-compile FORM if `gnus-use-byte-compile' is non-nil."
(if gnus-use-byte-compile
(progn
- (condition-case nil
- ;; Work around a bug in XEmacs 21.4
- (require 'byte-optimize)
- (error))
(require 'bytecomp)
(defalias 'gnus-byte-compile
(lambda (form)
initial-input history def)
"Call standard `completing-read-function'."
(let ((completion-styles gnus-completion-styles))
- (completing-read prompt
- (if (featurep 'xemacs)
- ;; Old XEmacs (at least 21.4) expect an alist,
- ;; in which the car of each element is a string,
- ;; for collection.
- (mapcar
- (lambda (elem)
- (list (format "%s" (or (car-safe elem) elem))))
- collection)
- collection)
+ (completing-read prompt collection
nil require-match initial-input history def)))
(autoload 'ido-completing-read "ido")
(or iswitchb-mode
(remove-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)))))
-(defun gnus-graphic-display-p ()
- (if (featurep 'xemacs)
- (device-on-window-system-p)
- (display-graphic-p)))
-
(put 'gnus-parse-without-error 'lisp-indent-function 0)
(put 'gnus-parse-without-error 'edebug-form-spec '(body))
(setq tchar nil)
(setq buf (get-buffer-create "*Gnus Help*"))
(pop-to-buffer buf)
- (fundamental-mode) ; for Emacs 20.4+
+ (fundamental-mode)
(buffer-disable-undo)
(erase-buffer)
(insert prompt ":\n\n")
(kill-buffer buf))
tchar))
-(if (featurep 'emacs)
- (defalias 'gnus-select-frame-set-input-focus 'select-frame-set-input-focus)
- (if (fboundp 'select-frame-set-input-focus)
- (defalias 'gnus-select-frame-set-input-focus 'select-frame-set-input-focus)
- ;; XEmacs 21.4, SXEmacs
- (defun gnus-select-frame-set-input-focus (frame)
- "Select FRAME, raise it, and set input focus, if possible."
- (raise-frame frame)
- (select-frame frame)
- (focus-frame frame))))
-
(defun gnus-frame-or-window-display-name (object)
"Given a frame or window, return the associated display name.
Return nil otherwise."
- (if (featurep 'xemacs)
- (device-connection (dfw-device object))
- (if (or (framep object)
- (and (windowp object)
- (setq object (window-frame object))))
- (let ((display (frame-parameter object 'display)))
- (if (and (stringp display)
- ;; Exclude invalid display names.
- (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'"
- display))
- display)))))
+ (if (or (framep object)
+ (and (windowp object)
+ (setq object (window-frame object))))
+ (let ((display (frame-parameter object 'display)))
+ (if (and (stringp display)
+ ;; Exclude invalid display names.
+ (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'"
+ display))
+ display))))
(defvar tool-bar-mode)
(when (and (boundp 'tool-bar-mode)
tool-bar-mode)
(let* ((args nil)
- (func (cond ((featurep 'xemacs)
- 'ignore)
- ((fboundp 'tool-bar-update)
+ (func (cond ((fboundp 'tool-bar-update)
'tool-bar-update)
((fboundp 'force-window-update)
'force-window-update)
(cdr ,result)))
`(mapcar ,function ,seq1)))
-(if (fboundp 'merge)
- (defalias 'gnus-merge 'merge)
- ;; Adapted from cl-seq.el
- (defun gnus-merge (type list1 list2 pred)
- "Destructively merge lists LIST1 and LIST2 to produce a new list.
-Argument TYPE is for compatibility and ignored.
-Ordering of the elements is preserved according to PRED, a `less-than'
-predicate on the elements."
- (let ((res nil))
- (while (and list1 list2)
- (if (funcall pred (car list2) (car list1))
- (push (pop list2) res)
- (push (pop list1) res)))
- (nconc (nreverse res) list1 list2))))
-
-(defvar xemacs-codename)
-(defvar sxemacs-codename)
-(defvar emacs-program-version)
-
(defun gnus-emacs-version ()
"Stringified Emacs version."
(let* ((lst (if (listp gnus-user-agent)
((memq 'type lst)
(symbol-name system-type))
(t nil)))
- codename emacsname)
- (cond ((featurep 'sxemacs)
- (setq emacsname "SXEmacs"
- codename sxemacs-codename))
- ((featurep 'xemacs)
- (setq emacsname "XEmacs"
- codename xemacs-codename))
- (t
- (setq emacsname "Emacs")))
+ codename)
(cond
((not (memq 'emacs lst))
nil)
((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version)
- ;; Emacs:
(concat "Emacs/" (match-string 1 emacs-version)
(if system-v
(concat " (" system-v ")")
"")))
- ((or (featurep 'sxemacs) (featurep 'xemacs))
- ;; XEmacs or SXEmacs:
- (concat emacsname "/" emacs-program-version
- (let (plst)
- (when (memq 'codename lst)
- (push codename plst))
- (when system-v
- (push system-v plst))
- (unless (featurep 'mule)
- (push "no MULE" plst))
- (when (> (length plst) 0)
- (concat
- " (" (mapconcat 'identity (reverse plst) ", ") ")")))))
(t emacs-version))))
(defun gnus-rename-file (old-path new-path &optional trim)
(ignore-errors
(set-file-modes filename mode)))
-(if (fboundp 'set-process-query-on-exit-flag)
- (defalias 'gnus-set-process-query-on-exit-flag
- 'set-process-query-on-exit-flag)
- (defalias 'gnus-set-process-query-on-exit-flag
- 'process-kill-without-query))
-
-(defalias 'gnus-read-shell-command
- (if (fboundp 'read-shell-command) 'read-shell-command 'read-string))
-
-(defmacro gnus-put-display-table (range value display-table)
- "Set the value for char RANGE to VALUE in DISPLAY-TABLE. "
- (if (featurep 'xemacs)
- (progn
- `(if (fboundp 'put-display-table)
- (put-display-table ,range ,value ,display-table)
- (if (sequencep ,display-table)
- (aset ,display-table ,range ,value)
- (put-char-table ,range ,value ,display-table))))
- `(aset ,display-table ,range ,value)))
-
-(defmacro gnus-get-display-table (character display-table)
- "Find value for CHARACTER in DISPLAY-TABLE. "
- (if (featurep 'xemacs)
- `(if (fboundp 'get-display-table)
- (get-display-table ,character ,display-table)
- (if (sequencep ,display-table)
- (aref ,display-table ,character)
- (get-char-table ,character ,display-table)))
- `(aref ,display-table ,character)))
-
(declare-function image-size "image.c" (spec &optional pixels frame))
(defun gnus-rescale-image (image size)
image)))
image)))
-(eval-when-compile (require 'gmm-utils))
(defun gnus-recursive-directory-files (dir)
"Return all regular files below DIR.
The first found will be returned if a file has hard or symbolic links."
(let (files attr attrs)
- (gmm-labels
+ (cl-labels
((fn (directory)
(dolist (file (directory-files directory t))
(setq attr (file-attributes (file-truename file)))
(memq elem list))))
found))
-(eval-and-compile
- (cond
- ((fboundp 'match-substitute-replacement)
- (defalias 'gnus-match-substitute-replacement 'match-substitute-replacement))
- (t
- (defun gnus-match-substitute-replacement (replacement &optional fixedcase literal string subexp)
- "Return REPLACEMENT as it will be inserted by `replace-match'.
-In other words, all back-references in the form `\\&' and `\\N'
-are substituted with actual strings matched by the last search.
-Optional FIXEDCASE, LITERAL, STRING and SUBEXP have the same
-meaning as for `replace-match'.
-
-This is the definition of match-substitute-replacement in subr.el from GNU Emacs."
- (let ((match (match-string 0 string)))
- (save-match-data
- (set-match-data (mapcar (lambda (x)
- (if (numberp x)
- (- x (match-beginning 0))
- x))
- (match-data t)))
- (replace-match replacement fixedcase literal match subexp)))))))
-
-(if (fboundp 'string-match-p)
- (defalias 'gnus-string-match-p 'string-match-p)
- (defsubst gnus-string-match-p (regexp string &optional start)
- "\
-Same as `string-match' except this function does not change the match data."
- (save-match-data
- (string-match regexp string start))))
-
-(if (fboundp 'string-prefix-p)
- (defalias 'gnus-string-prefix-p 'string-prefix-p)
- (defun gnus-string-prefix-p (str1 str2 &optional ignore-case)
- "Return non-nil if STR1 is a prefix of STR2.
-If IGNORE-CASE is non-nil, the comparison is done without paying attention
-to case differences."
- (and (<= (length str1) (length str2))
- (let ((prefix (substring str2 0 (length str1))))
- (if ignore-case
- (string-equal (downcase str1) (downcase prefix))
- (string-equal str1 prefix))))))
-
-(defalias 'gnus-format-message
- (if (fboundp 'format-message) 'format-message
- ;; for Emacs < 25, and XEmacs, don't worry about quote translation.
- 'format))
-
-;; Simple check: can be a macro but this way, although slow, it's really clear.
-;; We don't use `bound-and-true-p' because it's not in XEmacs.
-(defun gnus-bound-and-true-p (sym)
- (and (boundp sym) (symbol-value sym)))
-
-(if (fboundp 'timer--function)
- (defalias 'gnus-timer--function 'timer--function)
- (defun gnus-timer--function (timer)
- (elt timer 5)))
-
(defun gnus-test-list (list predicate)
"To each element of LIST apply PREDICATE.
Return nil if LIST is no list or is empty or some test returns nil;
(gnus-setdiff (cdr list1) list2)
(cons (car list1) (gnus-setdiff (cdr list1) list2)))))
+;;; Image functions.
+
+(defun gnus-image-type-available-p (type)
+ (and (display-images-p)
+ (image-type-available-p type)))
+
+(defun gnus-create-image (file &optional type data-p &rest props)
+ (let ((face (plist-get props :face)))
+ (when face
+ (setq props (plist-put props :foreground (face-foreground face)))
+ (setq props (plist-put props :background (face-background face))))
+ (ignore-errors
+ (apply 'create-image file type data-p props))))
+
+(defun gnus-put-image (glyph &optional string category)
+ (let ((point (point)))
+ (insert-image glyph (or string " "))
+ (put-text-property point (point) 'gnus-image-category category)
+ (unless string
+ (put-text-property (1- (point)) (point)
+ 'gnus-image-text-deletable t))
+ glyph))
+
+(defun gnus-remove-image (image &optional category)
+ "Remove the image matching IMAGE and CATEGORY found first."
+ (let ((start (point-min))
+ val end)
+ (while (and (not end)
+ (or (setq val (get-text-property start 'display))
+ (and (setq start
+ (next-single-property-change start 'display))
+ (setq val (get-text-property start 'display)))))
+ (setq end (or (next-single-property-change start 'display)
+ (point-max)))
+ (if (and (equal val image)
+ (equal (get-text-property start 'gnus-image-category)
+ category))
+ (progn
+ (put-text-property start end 'display nil)
+ (when (get-text-property start 'gnus-image-text-deletable)
+ (delete-region start end)))
+ (unless (= end (point-max))
+ (setq start end
+ end nil))))))
+
+(defun gnus-kill-all-overlays ()
+ "Delete all overlays in the current buffer."
+ (let* ((overlayss (overlay-lists))
+ (buffer-read-only nil)
+ (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
+ (while overlays
+ (delete-overlay (pop overlays)))))
+
(provide 'gnus-util)
;;; gnus-util.el ends here
;; Various variables users may set
-(defcustom gnus-uu-tmp-dir
- (cond ((fboundp 'temp-directory) (temp-directory))
- ((boundp 'temporary-file-directory) temporary-file-directory)
- ("/tmp/"))
- "*Variable saying where gnus-uu is to do its work.
+(defcustom gnus-uu-tmp-dir temporary-file-directory
+ "Variable saying where gnus-uu is to do its work.
Default is \"/tmp/\"."
:group 'gnus-extract
:type 'directory)
gnus-uu-default-dir))))
(gnus-uu-initialize)
(setq gnus-uu-binhex-article-name
- (mm-make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
+ (make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
(gnus-uu-decode-with-method 'gnus-uu-binhex-article n dir))
(defun gnus-uu-decode-yenc (n dir)
gnus-uu-default-dir gnus-uu-default-dir)))
(gnus-uu-initialize)
(setq gnus-uu-binhex-article-name
- (mm-make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
+ (make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
(let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic)))
(gnus-uu-decode-binhex n file)))
(interactive "P")
(gnus-uu-initialize)
(let ((gnus-uu-save-in-digest t)
- (file (mm-make-temp-file (nnheader-concat gnus-uu-work-dir "forward")))
+ (file (make-temp-file (nnheader-concat gnus-uu-work-dir "forward")))
(message-forward-as-mime message-forward-as-mime)
(mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets)
(with-current-buffer buffer
(save-restriction
(let ((inhibit-read-only t))
- (set-text-properties (point-min) (point-max) nil)
- ;; These two are necessary for XEmacs 19.12 fascism.
- (put-text-property (point-min) (point-max) 'invisible nil)
- (put-text-property (point-min) (point-max) 'intangible nil))
+ (set-text-properties (point-min) (point-max) nil))
(when (and message-forward-as-mime
message-forward-show-mml
gnus-uu-digest-buffer)
gnus-uu-tmp-dir)))
(setq gnus-uu-work-dir
- (mm-make-temp-file (concat gnus-uu-tmp-dir "gnus") 'dir))
+ (make-temp-file (concat gnus-uu-tmp-dir "gnus") 'dir))
(gnus-set-file-modes gnus-uu-work-dir 448)
(setq gnus-uu-work-dir (file-name-as-directory gnus-uu-work-dir))
(push (cons gnus-newsgroup-name gnus-uu-work-dir)
(cond
((eq buf (window-buffer (selected-window)))
(set-buffer buf))
- ((eq t (window-dedicated-p
- ;; XEmacs version of `window-dedicated-p' requires it.
- (selected-window)))
+ ((eq t (window-dedicated-p))
;; If the window is hard-dedicated, we have a problem because
;; we just can't do what we're asked. But signaling an error,
;; like `switch-to-buffer' would do, is not an option because
(gnus-delete-windows-in-gnusey-frames))
;; Just remove some windows.
(gnus-remove-some-windows)
- (if (featurep 'xemacs)
- (switch-to-buffer nntp-server-buffer)
- (set-buffer nntp-server-buffer)))
+ (set-buffer nntp-server-buffer))
(select-frame frame)))
(let (gnus-window-frame-focus)
- (if (featurep 'xemacs)
- (switch-to-buffer nntp-server-buffer)
- (set-buffer nntp-server-buffer))
+ (set-buffer nntp-server-buffer)
(gnus-configure-frame split)
(run-hooks 'gnus-configure-windows-hook)
(when gnus-window-frame-focus
- (gnus-select-frame-set-input-focus
+ (select-frame-set-input-focus
(window-frame gnus-window-frame-focus)))))))))
(defun gnus-delete-windows-in-gnusey-frames ()
lowest-buf buf))))
(when lowest-buf
(pop-to-buffer lowest-buf)
- (if (featurep 'xemacs)
- (switch-to-buffer nntp-server-buffer)
- (set-buffer nntp-server-buffer)))
+ (set-buffer nntp-server-buffer))
(mapcar (lambda (b) (delete-windows-on b t))
(delq lowest-buf bufs)))))
-(eval-and-compile
- (cond
- ((fboundp 'frames-on-display-list)
- (defalias 'gnus-frames-on-display-list 'frames-on-display-list))
- ((and (featurep 'xemacs) (fboundp 'frame-device))
- (defun gnus-frames-on-display-list ()
- (apply 'filtered-frame-list 'identity (list (frame-device nil)))))
- (t
- (defalias 'gnus-frames-on-display-list 'frame-list))))
-
(defun gnus-get-buffer-window (buffer &optional frame)
(cond ((and (null gnus-use-frames-on-any-display)
(memq frame '(t 0 visible)))
(car
- (let ((frames (gnus-frames-on-display-list)))
+ (let ((frames (frames-on-display-list)))
(gnus-remove-if (lambda (win) (not (memq (window-frame win)
frames)))
(get-buffer-window-list buffer nil frame)))))
;;; Code:
-(eval '(run-hooks 'gnus-load-hook))
+(run-hooks 'gnus-load-hook)
(eval-when-compile (require 'cl))
(require 'wid-edit)
:group 'gnus-start
:type 'boolean)
-(unless (featurep 'gnus-xmas)
- (defalias 'gnus-extent-detached-p 'ignore)
- (defalias 'gnus-extent-start-open 'ignore)
- (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
- (defalias 'gnus-character-to-event 'identity)
- (defalias 'gnus-assq-delete-all 'assq-delete-all)
- (defalias 'gnus-add-text-properties 'add-text-properties)
- (defalias 'gnus-put-text-property 'put-text-property)
- (defvar gnus-mode-line-image-cache t)
+(defvar gnus-mode-line-image-cache t)
+
+(eval-and-compile
(if (fboundp 'find-image)
(defun gnus-mode-line-buffer-identification (line)
(let ((str (car-safe line))
str)
(list str))
line)))
- (defalias 'gnus-mode-line-buffer-identification 'identity))
- (defalias 'gnus-deactivate-mark 'deactivate-mark)
- (defalias 'gnus-window-edges 'window-edges)
- (defalias 'gnus-key-press-event-p 'numberp)
- ;;(defalias 'gnus-decode-rfc1522 'ignore)
- )
+ (defalias 'gnus-mode-line-buffer-identification 'identity)))
;; We define these group faces here to avoid the display
;; update forced when creating new faces.
(defun gnus-add-buffer ()
"Add the current buffer to the list of Gnus buffers."
+ (gnus-prune-buffers)
(push (current-buffer) gnus-buffers))
(defmacro gnus-kill-buffer (buffer)
"Kill BUFFER and remove from the list of Gnus buffers."
`(let ((buf ,buffer))
(when (gnus-buffer-exists-p buf)
- (setq gnus-buffers (delete (get-buffer buf) gnus-buffers))
- (kill-buffer buf))))
+ (kill-buffer buf)
+ (gnus-prune-buffers))))
+
+(defun gnus-prune-buffers ()
+ (dolist (buf gnus-buffers)
+ (unless (buffer-live-p buf)
+ (setq gnus-buffers (delete buf gnus-buffers)))))
(defun gnus-buffers ()
"Return a list of live Gnus buffers."
(function-item gnus-slave-no-server)))
(defcustom gnus-other-frame-parameters nil
- "Frame parameters used by `gnus-other-frame' to create a Gnus frame.
-This should be an alist for Emacs, or a plist for XEmacs."
+ "Frame parameters used by `gnus-other-frame' to create a Gnus frame."
:group 'gnus-start
- :type (if (featurep 'xemacs)
- '(repeat (list :inline t :format "%v"
- (symbol :tag "Property")
- (sexp :tag "Value")))
- '(repeat (cons :format "%v"
- (symbol :tag "Parameter")
- (sexp :tag "Value")))))
+ :type '(repeat (cons :format "%v"
+ (symbol :tag "Parameter")
+ (sexp :tag "Value"))))
(defcustom gnus-user-agent '(emacs gnus type)
"Which information should be exposed in the User-Agent header.
(defun gnus-suppress-keymap (keymap)
(suppress-keymap keymap)
- (let ((keys `([delete] "\177" "\M-u"))) ;gnus-mouse-2
+ (let ((keys `([delete] "\177" "\M-u"))) ;[mouse-2]
(while keys
(define-key keymap (pop keys) 'undefined))))
(setcar (nthcdr 2 (gnus-gethash group gnus-newsrc-hashtb))
info))
-;;; Load the compatibility functions.
-
-(require 'gnus-ems)
-
\f
;;;
;;; Shutdown
4.99
(+ 5 (* 0.02
(abs
- (- (mm-char-int (aref (downcase alpha) 0))
- (mm-char-int ?t))))
+ (- (aref (downcase alpha) 0) ?t)))
-0.01))
minor least)
(format "%d.%02d%02d" major minor least))))))
(defun gnus-simplify-mode-line ()
"Make mode lines a bit simpler."
- (setq mode-line-modified (cdr gnus-mode-line-modified))
+ (setq mode-line-modified "--")
(when (listp mode-line-format)
(make-local-variable 'mode-line-format)
(setq mode-line-format (copy-sequence mode-line-format))
(with-current-buffer (window-buffer window)
(string-match "\\`gnus-"
(symbol-name major-mode))))
- (gnus-select-frame-set-input-focus
+ (select-frame-set-input-focus
(setq gnus-other-frame-object (window-frame window)))
(select-window window)
(throw 'found t)))
'ignore t)))
- (gnus-select-frame-set-input-focus
+ (select-frame-set-input-focus
(setq gnus-other-frame-object
(if display
(make-frame-on-display display gnus-other-frame-parameters)
(require 'debbugs-gnu)
(debbugs-gnu nil "gnus"))
-;; Allow redefinition of Gnus functions.
-
-(gnus-ems-redefine)
-
(provide 'gnus)
;;; gnus.el ends here
(gnus-pp gnus-agent-expire-days)
(insert
- (gnus-format-message
+ (format-message
"\nIn order to use version `%s' of gnus, you will need to set\n"
converting-to))
(insert "gnus-agent-expire-days to an integer. If you still wish to set different\n")
(insert "expiration days to individual groups, you must instead set the\n")
- (insert (gnus-format-message
+ (insert (format-message
"`agent-days-until-old' group and/or topic parameter.\n"))
(insert "\n")
(insert "If you would like, gnus can iterate over every group comparing its name to the\n")
(insert "regular expressions that you currently have in gnus-agent-expire-days. When\n")
- (insert (gnus-format-message
+ (insert (format-message
"gnus finds a match, it will update that group's `agent-days-until-old' group\n"))
(insert "parameter to the value associated with the regular expression.\n")
(insert "\n")
currday (+ currday (* low2days (nth 1 (current-time)))))
(while files
(let* ((ffile (car files))
- (bfile (gnus-replace-in-string
- ffile "\\`.*/\\([^/]+\\)\\'" "\\1"))
+ (bfile (replace-regexp-in-string "\\`.*/\\([^/]+\\)\\'" "\\1"
+ ffile))
(filetime (nth 5 (file-attributes ffile)))
(fileday (* (car filetime) high2days))
(fileday (+ fileday (* low2days (nth 1 filetime)))))
(when (and (> (- currday fileday) diff)
(if confirm
(y-or-n-p
- (gnus-format-message "\
+ (format-message "\
Delete old (> %s day(s)) incoming mail file `%s'? " diff bfile))
(gnus-message 8 "\
Deleting old (> %s day(s)) incoming mail file `%s'." diff bfile)
0)
(funcall callback mail-source-crash-box info)))
-(autoload 'gnus-float-time "gnus-util")
-
(defvar mail-source-incoming-last-checked-time nil)
(defun mail-source-delete-crash-box ()
(if (eq mail-source-delete-incoming t)
(delete-file mail-source-crash-box)
(let ((incoming
- (mm-make-temp-file
+ (make-temp-file
(expand-file-name
mail-source-incoming-file-prefix
mail-source-directory))))
;; Don't check for old incoming files more than once per day to
;; save a lot of file accesses.
(when (or (null mail-source-incoming-last-checked-time)
- (> (gnus-float-time
+ (> (float-time
(time-since mail-source-incoming-last-checked-time))
(* 24 60 60)))
(setq mail-source-incoming-last-checked-time (current-time))
(if on
(progn
(require 'time)
- ;; display-time-mail-function is an Emacs feature.
(setq display-time-mail-function #'mail-source-new-mail-p)
;; Set up the main timer.
(setq mail-source-report-new-mail-timer
;; This is apparently necessary even though things are autoloaded.
;; Because we dynamically bind mail-abbrev-mode-regexp, we'd better
;; require mailabbrev here.
-(if (featurep 'xemacs)
- (require 'mail-abbrevs)
- (require 'mailabbrev))
+(require 'mailabbrev)
(require 'mail-parse)
(require 'mml)
(require 'rfc822)
(require 'format-spec)
(require 'dired)
+(require 'mm-util)
+(require 'rfc2047)
+(require 'puny)
-(autoload 'mailclient-send-it "mailclient") ;; Emacs 22 or contrib/
+(autoload 'mailclient-send-it "mailclient")
(defvar gnus-message-group-art)
(defvar gnus-list-identifiers) ; gnus-sum is required where necessary
regexp))
(defcustom message-subject-re-regexp
- "^[ \t]*\\([Rr][Ee]\\(\\[[0-9]*\\]\\)*:[ \t]*\\)*[ \t]*"
+ "^[ \t]*\\([Rr][Ee]\\(\\[[0-9]*\\]\\)* ?:[ \t]*\\)*[ \t]*"
"*Regexp matching \"Re: \" in the subject line."
:group 'message-various
:link '(custom-manual "(message)Message Headers")
(if (and (boundp 'mail-archive-file-name)
(stringp mail-archive-file-name))
(format "FCC: %s\n" mail-archive-file-name))
- ;; Use the value of `mail-default-headers' if available.
- ;; Note: as for XEmacs 21.4 and 21.5, it is unavailable
- ;; unless sendmail.el is loaded.
- (if (boundp 'mail-default-headers)
- mail-default-headers))
+ mail-default-headers)
"*A string of header lines to be inserted in outgoing mails."
:version "23.2"
:group 'message-headers
:link '(custom-manual "(message)Various Message Variables")
:type '(choice directory (const :tag "Don't auto-save" nil)))
-(defcustom message-default-charset
- (and (not (mm-multibyte-p)) 'iso-8859-1)
+(defcustom message-default-charset (and (not (mm-multibyte-p)) 'iso-8859-1)
"Default charset used in non-MULE Emacsen.
If nil, you might be asked to input the charset."
:version "21.1"
:group 'message
:link '(custom-manual "(message)Various Message Variables")
:type 'symbol)
+(make-obsolete-variable
+ 'message-default-charset
+ "The default charset comes from the language environment" "25.2")
-(defcustom message-dont-reply-to-names
- (and (boundp 'mail-dont-reply-to-names) mail-dont-reply-to-names)
- "*Addresses to prune when doing wide replies.
-This can be a regexp or a list of regexps. Also, a value of nil means
-exclude your own user name only."
+(defcustom message-dont-reply-to-names mail-dont-reply-to-names
+ "Addresses to prune when doing wide replies.
+This can be a regexp, a list of regexps or a predicate function.
+Also, a value of nil means exclude your own user name only.
+
+If a function email is passed as the argument."
:version "24.3"
:group 'message
:link '(custom-manual "(message)Wide Reply")
(repeat :tag "Regexp List" regexp)))
(defsubst message-dont-reply-to-names ()
- (gmm-regexp-concat message-dont-reply-to-names))
+ (if (functionp message-dont-reply-to-names)
+ message-dont-reply-to-names
+ (gmm-regexp-concat message-dont-reply-to-names)))
(defvar message-shoot-gnksa-feet nil
"*A list of GNKSA feet you are allowed to shoot.
(0 'message-mml))))
"Additional expressions to highlight in Message mode.")
-
-;; XEmacs does it like this. For Emacs, we have to set the
-;; `font-lock-defaults' buffer-local variable.
-(put 'message-mode 'font-lock-defaults '(message-font-lock-keywords t))
-
(defvar message-face-alist
'((bold . message-bold-region)
(underline . underline-region)
(defvar message-send-coding-system 'binary
"Coding system to encode outgoing mail.")
-(defvar message-draft-coding-system
- mm-auto-save-coding-system
- "*Coding system to compose mail.
-If you'd like to make it possible to share draft files between XEmacs
-and Emacs, you may use `iso-2022-7bit' for this value at your own risk.
-Note that the coding-system `iso-2022-7bit' isn't suitable to all data.")
+(defvar message-draft-coding-system mm-auto-save-coding-system
+ "Coding system to compose mail.")
(defcustom message-send-mail-partially-limit nil
"The limitation of messages sent as message/partial.
(integer 1000000)))
(defcustom message-alternative-emails nil
- "*Regexp matching alternative email addresses.
+ "*Regexp or predicate function matching alternative email addresses.
The first address in the To, Cc or From headers of the original
article matching this variable is used as the From field of
outgoing messages.
+If a function, an email string is passed as the argument.
+
This variable has precedence over posting styles and anything that runs
off `message-setup-hook'."
:group 'message-headers
:link '(custom-manual "(message)Message Headers")
:type '(choice (const :tag "Always use primary" nil)
- regexp))
+ regexp
+ function))
(defcustom message-hierarchical-addresses nil
"A list of hierarchical mail address definitions.
:type '(radio (const :format "%v " nil)
(string :format "FQDN: %v")))
-(defcustom message-use-idna
- (and (or (mm-coding-system-p 'utf-8)
- (condition-case nil
- (let (mucs-ignore-version-incompatibilities)
- (require 'un-define))
- (error)))
- (condition-case nil
- (require 'idna)
- (file-error)
- (invalid-operation))
- idna-program
- (executable-find idna-program)
- (string= (idna-to-ascii "räksmörgås") "xn--rksmrgs-5wao1o")
- t)
- "Whether to encode non-ASCII in domain names into ASCII according to IDNA.
-GNU Libidn, and in particular the elisp package \"idna.el\" and
-the external program \"idn\", must be installed for this
-functionality to work."
- :version "22.1"
+(defcustom message-use-idna t
+ "Whether to encode non-ASCII in domain names into ASCII according to IDNA."
+ :version "25.2"
:group 'message-headers
:link '(custom-manual "(message)IDNA")
:type '(choice (const :tag "Ask" ask)
(defvar message-options nil
"Some saved answers when sending message.")
-;; FIXME: On XEmacs this causes problems since let-binding like:
-;; (let ((message-options message-options)) ...)
-;; as in `message-send' and `mml-preview' loses to buffer-local
-;; variable initialization.
-(unless (featurep 'xemacs)
- (make-variable-buffer-local 'message-options))
+(make-variable-buffer-local 'message-options)
(defvar message-send-mail-real-function nil
"Internal send mail function.")
(defvar message-bogus-system-names "\\`localhost\\.\\|\\.local\\'"
"The regexp of bogus system names.")
-(defcustom message-valid-fqdn-regexp
- (concat "[a-z0-9][-.a-z0-9]+\\." ;; [hostname.subdomain.]domain.
- ;; valid TLDs:
- "\\([a-z][a-z]\\|" ;; two letter country TDLs
- "aero\\|arpa\\|asia\\|bitnet\\|biz\\|bofh\\|"
- "cat\\|com\\|coop\\|edu\\|gov\\|"
- "info\\|int\\|jobs\\|"
- "mil\\|mobi\\|museum\\|name\\|net\\|"
- "org\\|pro\\|tel\\|travel\\|uucp\\|"
- ;; ICANN-era generic top-level domains
- "academy\\|actor\\|agency\\|airforce\\|archi\\|associates\\|axa\\|"
- "bar\\|bargains\\|bayern\\|beer\\|berlin\\|best\\|bid\\|bike\\|"
- "biz\\|black\\|blackfriday\\|blue\\|boutique\\|build\\|builders\\|"
- "buzz\\|cab\\|camera\\|camp\\|capital\\|cards\\|care\\|career\\|"
- "careers\\|cash\\|catering\\|center\\|ceo\\|cheap\\|christmas\\|"
- "church\\|citic\\|cleaning\\|clinic\\|clothing\\|club\\|codes\\|"
- "coffee\\|college\\|cologne\\|com\\|community\\|company\\|computer\\|"
- "construction\\|contractors\\|cooking\\|cool\\|country\\|creditcard\\|"
- "cruises\\|dance\\|dating\\|democrat\\|dental\\|desi\\|design\\|"
- "diamonds\\|directory\\|discount\\|domains\\|education\\|email\\|"
- "engineering\\|enterprises\\|equipment\\|estate\\|eus\\|events\\|"
- "exchange\\|expert\\|exposed\\|fail\\|farm\\|feedback\\|finance\\|"
- "financial\\|fish\\|fishing\\|fitness\\|flights\\|florist\\|foo\\|"
- "foundation\\|frogans\\|fund\\|furniture\\|futbol\\|gal\\|"
- "gallery\\|gift\\|glass\\|globo\\|gmo\\|gop\\|graphics\\|gratis\\|"
- "gripe\\|guide\\|guitars\\|guru\\|hamburg\\|haus\\|hiphop\\|"
- "holdings\\|holiday\\|homes\\|horse\\|house\\|immobilien\\|"
- "industries\\|info\\|ink\\|institute\\|insure\\|international\\|"
- "investments\\|jetzt\\|juegos\\|kaufen\\|kim\\|kitchen\\|kiwi\\|"
- "koeln\\|kred\\|land\\|lat\\|latino\\|lease\\|life\\|lighting\\|"
- "limited\\|limo\\|link\\|loans\\|london\\|luxe\\|luxury\\|"
- "management\\|mango\\|marketing\\|media\\|meet\\|menu\\|miami\\|"
- "moda\\|moe\\|monash\\|moscow\\|motorcycles\\|nagoya\\|name\\|"
- "net\\|neustar\\|ninja\\|nyc\\|okinawa\\|onl\\|org\\|paris\\|"
- "partners\\|parts\\|photo\\|photography\\|photos\\|pics\\|"
- "pictures\\|pink\\|plumbing\\|pro\\|productions\\|properties\\|"
- "pub\\|qpon\\|quebec\\|recipes\\|red\\|reisen\\|ren\\|rentals\\|"
- "repair\\|report\\|rest\\|reviews\\|rich\\|rocks\\|rodeo\\|"
- "ruhr\\|ryukyu\\|saarland\\|schule\\|scot\\|services\\|sexy\\|"
- "shiksha\\|shoes\\|singles\\|social\\|sohu\\|solar\\|solutions\\|"
- "soy\\|supplies\\|supply\\|support\\|surgery\\|systems\\|tattoo\\|"
- "tax\\|technology\\|tienda\\|tips\\|today\\|tokyo\\|tools\\|"
- "town\\|toys\\|trade\\|training\\|university\\|uno\\|vacations\\|"
- "vegas\\|ventures\\|viajes\\|villas\\|vision\\|vodka\\|vote\\|"
- "voting\\|voto\\|voyage\\|wang\\|watch\\|webcam\\|wed\\|wien\\|"
- "wiki\\|works\\|wtc\\|wtf\\|xyz\\|yachts\\|yokohama\\|you\\|"
- "zone\\)")
- ;; http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
- ;; http://en.wikipedia.org/wiki/GTLD
- ;; `approved, but not yet in operation': .xxx
- ;; "dead" nato bitnet uucp
- "Regular expression that matches a valid FQDN."
- ;; see also: gnus-button-valid-fqdn-regexp
- :version "25.1"
- :group 'message-headers
- :type 'regexp)
-
(autoload 'gnus-alive-p "gnus-util")
(autoload 'gnus-delay-article "gnus-delay")
(autoload 'gnus-extract-address-components "gnus-util")
(autoload 'gnus-group-name-charset "gnus-group")
(autoload 'gnus-group-name-decode "gnus-group")
(autoload 'gnus-groups-from-server "gnus")
-(autoload 'gnus-make-local-hook "gnus-util")
(autoload 'gnus-open-server "gnus-int")
(autoload 'gnus-output-to-mail "gnus-util")
(autoload 'gnus-output-to-rmail "gnus-util")
(autoload 'gnus-request-post "gnus-int")
-(autoload 'gnus-select-frame-set-input-focus "gnus-util")
(autoload 'gnus-server-string "gnus")
-(autoload 'idna-to-ascii "idna")
(autoload 'message-setup-toolbar "messagexmas")
(autoload 'mh-new-draft-name "mh-comp")
(autoload 'mh-send-letter "mh-comp")
(autoload 'rmail-msg-is-pruned "rmail")
(autoload 'rmail-output "rmailout")
-;; Emacs < 24.1 do not have mail-dont-reply-to
-(unless (fboundp 'mail-dont-reply-to)
- (defalias 'mail-dont-reply-to 'rmail-dont-reply-to))
-
-(eval-and-compile
- (if (featurep 'emacs)
- (progn
- (defun message-kill-all-overlays ()
- (mapcar #'delete-overlay (overlays-in (point-min) (point-max))))
- (defalias 'message-window-inside-pixel-edges
- 'window-inside-pixel-edges))
- (defun message-kill-all-overlays ()
- (map-extents (lambda (extent ignore) (delete-extent extent))))
- (defalias 'message-window-inside-pixel-edges 'ignore)))
+(defun message-kill-all-overlays ()
+ (mapcar #'delete-overlay (overlays-in (point-min) (point-max))))
\f
;; No double encoded subject? => bogus charset.
(unless cs-coding
(setq cs-coding
- (mm-read-coding-system
- (gnus-format-message "\
+ (read-coding-system
+ (format-message "\
Decoded Subject \"%s\"
contains an encoded word. The charset `%s' is unknown or invalid.
Hit RET to replace non-decodable characters with \"%s\" or enter replacement
"Remove trailing \"(was: <old subject>)\" from SUBJECT lines.
Leading \"Re: \" is not stripped by this function. Use the function
`message-strip-subject-re' for this."
- (let* ((query message-subject-trailing-was-query)
- (new) (found))
- (setq found
- (string-match
- (if (eq query 'ask)
- message-subject-trailing-was-ask-regexp
- message-subject-trailing-was-regexp)
- subject))
- (if found
- (setq new (substring subject 0 (match-beginning 0))))
- (if (or (not found) (eq query nil))
- subject
- (if (eq query 'ask)
- (if (message-y-or-n-p
- "Strip `(was: <old subject>)' in subject? " t
- (concat
- "Strip `(was: <old subject>)' in subject "
- "and use the new one instead?\n\n"
- "Current subject is: \""
- subject "\"\n\n"
- "New subject would be: \""
- new "\"\n\n"
- "See the variable `message-subject-trailing-was-query' "
- "to get rid of this query."
- ))
- new subject)
- new))))
+ (or
+ (let ((query message-subject-trailing-was-query) new)
+ (and query
+ (string-match (if (eq query 'ask)
+ message-subject-trailing-was-ask-regexp
+ message-subject-trailing-was-regexp)
+ subject)
+ (setq new (substring subject 0 (match-beginning 0)))
+ (or (not (eq query 'ask))
+ (message-y-or-n-p
+ "Strip `(was: <old subject>)' in subject? " t
+ (concat
+ "Strip `(was: <old subject>)' in subject "
+ "and use the new one instead?\n\n"
+ "Current subject is: \"" subject "\"\n\n"
+ "New subject would be: \"" new "\"\n\n"
+ "See the variable `message-subject-trailing-was-query' "
+ "to get rid of this query.")))
+ new))
+ subject))
;;; Suggested by Jonas Steverud @ www.dtek.chalmers.se/~d4jonas/
manual. With two \\[universal-argument]'s, display the EasyPG or
PGG manual, depending on the value of `mml2015-use'."
(interactive "p")
- ;; Don't use `info' because support for `(filename)nodename' is not
- ;; available in XEmacs < 21.5.12.
- (Info-goto-node (format "(%s)Top"
- (cond ((eq arg 16)
- (require 'mml2015)
- mml2015-use)
- ((eq arg 4) 'emacs-mime)
- ;; `booleanp' only available in Emacs 22+
- ((and (not (memq arg '(nil t)))
- (symbolp arg))
- arg)
- (t
- 'message)))))
+ (info (format "(%s)Top"
+ (cond ((eq arg 16)
+ (require 'mml2015)
+ mml2015-use)
+ ((eq arg 4) 'emacs-mime)
+ ((and (not (booleanp arg))
+ (symbolp arg))
+ arg)
+ (t
+ 'message)))))
\f
["Caesar (rot13) Region" message-caesar-region (message-mark-active-p)]
["Elide Region" message-elide-region
:active (message-mark-active-p)
- ,@(if (featurep 'xemacs) nil
- '(:help "Replace text in region with an ellipsis"))]
+ :help "Replace text in region with an ellipsis"]
["Delete Outside Region" message-delete-not-region
:active (message-mark-active-p)
- ,@(if (featurep 'xemacs) nil
- '(:help "Delete all quoted text outside region"))]
+ :help "Delete all quoted text outside region"]
["Kill To Signature" message-kill-to-signature t]
["Newline and Reformat" message-newline-and-reformat t]
["Rename buffer" message-rename-buffer t]
- ["Spellcheck" ispell-message
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Spellcheck this message"))]
+ ["Spellcheck" ispell-message :help "Spellcheck this message"]
"----"
["Insert Region Marked" message-mark-inserted-region
- :active (message-mark-active-p)
- ,@(if (featurep 'xemacs) nil
- '(:help "Mark region with enclosing tags"))]
+ :active (message-mark-active-p) :help "Mark region with enclosing tags"]
["Insert File Marked..." message-mark-insert-file
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Insert file at point marked with enclosing tags"))]
+ :help "Insert file at point marked with enclosing tags"]
"----"
- ["Send Message" message-send-and-exit
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Send this message"))]
+ ["Send Message" message-send-and-exit :help "Send this message"]
["Postpone Message" message-dont-send
- ,@(if (featurep 'xemacs) '(t)
- '(:help "File this draft message and exit"))]
+ :help "File this draft message and exit"]
["Send at Specific Time..." gnus-delay-article
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Ask, then arrange to send message at that time"))]
+ :help "Ask, then arrange to send message at that time"]
["Kill Message" message-kill-buffer
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Delete this message without sending"))]
+ :help "Delete this message without sending"]
"----"
- ["Message manual" message-info
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Display the Message manual"))]))
+ ["Message manual" message-info :help "Display the Message manual"]))
(easy-menu-define
message-mode-field-menu message-mode-map ""
["Fcc" message-goto-fcc t]
["Reply-To" message-goto-reply-to t]
["Flag As Important" message-insert-importance-high
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Mark this message as important"))]
+ :help "Mark this message as important"]
["Flag As Unimportant" message-insert-importance-low
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Mark this message as unimportant"))]
+ :help "Mark this message as unimportant"]
["Request Receipt"
message-insert-disposition-notification-to
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Request a receipt notification"))]
+ :help "Request a receipt notification"]
"----"
;; (typical) news stuff
["Summary" message-goto-summary t]
"----"
;; (typical) mailing-lists stuff
["Fetch To" message-insert-to
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Insert a To header that points to the author."))]
+ :help "Insert a To header that points to the author."]
["Fetch To and Cc" message-insert-wide-reply
- ,@(if (featurep 'xemacs) '(t)
- '(:help
- "Insert To and Cc headers as if you were doing a wide reply."))]
+ :help "Insert To and Cc headers as if you were doing a wide reply."]
"----"
["Send to list only" message-to-list-only t]
["Mail-Followup-To" message-goto-mail-followup-to t]
["Unsubscribed list post" message-generate-unsubscribed-mail-followup-to
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Insert a reasonable `Mail-Followup-To:' header."))]
+ :help "Insert a reasonable `Mail-Followup-To:' header."]
["Reduce To: to Cc:" message-reduce-to-to-cc t]
"----"
["Sort Headers" message-sort-headers t]
;; category, face, display: probably doesn't do any harm.
;; fontified: is used by font-lock.
;; syntax-table, local-map: I dunno.
- ;; We need to add XEmacs names to the list.
"Property list of with properties forbidden in message buffers.
The values of the properties are ignored, only the property names are used.")
(inhibit-read-only t))
(remove-text-properties begin end message-forbidden-properties))))
-(autoload 'ecomplete-setup "ecomplete") ;; for Emacs <23.
-
(defvar message-smileys '(":-)" ":)"
":-(" ":("
";-)" ";)")
(set (make-local-variable 'comment-start) message-yank-prefix)
(set (make-local-variable 'comment-start-skip)
(concat "^" (regexp-quote message-yank-prefix) "[ \t]*")))
- (if (featurep 'xemacs)
- (message-setup-toolbar)
- (set (make-local-variable 'font-lock-defaults)
- '(message-font-lock-keywords t))
- (if (boundp 'tool-bar-map)
- (set (make-local-variable 'tool-bar-map) (message-make-tool-bar))))
+ (set (make-local-variable 'font-lock-defaults)
+ '(message-font-lock-keywords t))
+ (if (boundp 'tool-bar-map)
+ (set (make-local-variable 'tool-bar-map) (message-make-tool-bar)))
(easy-menu-add message-mode-menu message-mode-map)
(easy-menu-add message-mode-field-menu message-mode-map)
- (gnus-make-local-hook 'after-change-functions)
;; Mmmm... Forbidden properties...
(add-hook 'after-change-functions 'message-strip-forbidden-properties
nil 'local)
;; Allow mail alias things.
(cond
((message-mail-alias-type-p 'abbrev)
- (if (fboundp 'mail-abbrevs-setup)
- (mail-abbrevs-setup)
- (if (fboundp 'mail-aliases-setup) ; warning avoidance
- (mail-aliases-setup))))
+ (mail-abbrevs-setup))
((message-mail-alias-type-p 'ecomplete)
(ecomplete-setup)))
(add-hook 'completion-at-point-functions 'message-completion-function nil t)
(make-local-variable 'paragraph-separate)
(make-local-variable 'paragraph-start)
(make-local-variable 'adaptive-fill-regexp)
- (unless (boundp 'adaptive-fill-first-line-regexp)
- (setq adaptive-fill-first-line-regexp nil))
(make-local-variable 'adaptive-fill-first-line-regexp)
(let ((quote-prefix-regexp
;; User should change message-cite-prefix-regexp if
(setq adaptive-fill-first-line-regexp
(concat quote-prefix-regexp "\\|"
adaptive-fill-first-line-regexp)))
- (make-local-variable 'auto-fill-inhibit-regexp)
- ;;(setq auto-fill-inhibit-regexp "^[A-Z][^: \n\t]+:")
- (setq auto-fill-inhibit-regexp nil)
- (make-local-variable 'normal-auto-fill-function)
- (setq normal-auto-fill-function 'message-do-auto-fill)
- ;; KLUDGE: auto fill might already be turned on in `text-mode-hook'.
- ;; In that case, ensure that it uses the right function. The real
- ;; solution would be not to use `define-derived-mode', and run
- ;; `text-mode-hook' ourself at the end of the mode.
- ;; -- Per Abrahamsen <abraham@dina.kvl.dk> Date: 2001-10-19.
- ;; This kludge is unneeded in Emacs>=21 since define-derived-mode is
- ;; now careful to run parent hooks after the body. --Stef
- (when auto-fill-function
- (setq auto-fill-function normal-auto-fill-function)))
+ (setq-local auto-fill-inhibit-regexp nil)
+ (setq-local normal-auto-fill-function 'message-do-auto-fill))
\f
(defun message-goto-body ()
"Move point to the beginning of the message body."
(interactive)
- (when (and (gmm-called-interactively-p 'any)
+ (when (and (called-interactively-p 'any)
(looking-at "[ \t]*\n"))
(expand-abbrev))
(push-mark)
This function is used as the value of `fill-paragraph-function' in
Message buffers and is not meant to be called directly."
(interactive (list (if current-prefix-arg 'full)))
- (if (if (boundp 'filladapt-mode) filladapt-mode)
- nil
- (if (message-point-in-header-p)
- (message-fill-field)
- (message-newline-and-reformat arg t))
- t))
+ (if (message-point-in-header-p)
+ (message-fill-field)
+ (message-newline-and-reformat arg t))
+ t)
(defun message-point-in-header-p ()
"Return t if point is in the header."
(save-excursion
- (and
- (not
- (re-search-backward
- (concat "^" (regexp-quote mail-header-separator) "\n") nil t))
- (re-search-forward
- (concat "^" (regexp-quote mail-header-separator) "\n") nil t))))
+ (save-restriction
+ (widen)
+ (let ((bound (+ (point-at-eol) 1)) case-fold-search)
+ (goto-char (point-min))
+ (not (search-forward (concat "\n" mail-header-separator "\n")
+ bound t))))))
(defun message-do-auto-fill ()
"Like `do-auto-fill', but don't fill in message header."
To use this automatically, you may add this function to
`gnus-message-setup-hook'."
(interactive "P")
- (let ((citexp
- (concat
- "^\\("
- (when (boundp 'message-yank-cited-prefix)
- (concat message-yank-cited-prefix "\\|"))
- message-yank-prefix
- "\\)+ *\n"
- )))
- (gnus-message 8 "removing `%s'" citexp)
+ (let ((citexp (concat "^\\("
+ (concat message-yank-cited-prefix "\\|")
+ message-yank-prefix
+ "\\)+ *\n")))
+ (message "Removing `%s'" citexp)
(save-excursion
(message-goto-body)
(while (re-search-forward citexp nil t)
(defun message-insert-formatted-citation-line (&optional from date tz)
"Function that inserts a formatted citation line.
The optional FROM, and DATE are strings containing the contents of
-the From header and the Date header respectively. The optional TZ
-is a number of seconds, overrides the time zone of DATE.
+the From header and the Date header respectively.
+
+The optional TZ is omitted or nil for Emacs local time, t for
+Universal Time, `wall' for system wall clock time, or a string as
+in the TZ environment variable. It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time')
+applied without consideration for daylight saving time.
See `message-citation-line-format'."
;; The optional args are for testing/debugging. They will disappear later.
(>= i ?a)))
(push i lst)
(push (condition-case nil
- (gmm-format-time-string (format "%%%c" i) time tz)
+ (format-time-string (format "%%%c" i) time tz)
(error (format ">%c<" i)))
lst))
(setq i (1+ i)))
(or (eq message-allow-no-recipients 'always)
(and (not (eq message-allow-no-recipients 'never))
(setq dont-barf-on-no-method
- (gnus-y-or-n-p
+ (y-or-n-p
(format "No receiver, perform %s anyway? "
(cond ((and fcc gcc) "Fcc and Gcc")
(fcc "Fcc")
(const "invalid")
(const :tag "duplicate @" "@@")
(const :tag "non-ascii local part" "[^[:ascii:]].*@")
- ;; Already caught by `message-valid-fqdn-regexp'
- ;; (const :tag "`_' in domain part" "@.*_")
+ (const :tag "`_' in domain part" "@.*_")
(const :tag "whitespace" "[ \t]"))
(repeat :inline t
:tag "Other"
(point) 'no-illegible-text)
(point-max))))
(setq char (char-after)))
- (when (or (< (mm-char-int char) 128)
+ (when (or (< char 128)
(and (mm-multibyte-p)
(memq (char-charset char)
'(eight-bit-control eight-bit-graphic
(forward-char))
(when found
(setq choice
- (gnus-multiple-choice
- (if nul-chars
- "NUL characters found, which may cause problems. Continue sending?"
- "Non-printable characters found. Continue sending?")
- `((?d "Remove non-printable characters and send")
- (?r ,(format
- "Replace non-printable characters with \"%s\" and send"
- message-replacement-char))
- (?s "Send as is without removing anything")
- (?e "Continue editing"))))
+ (car
+ (read-multiple-choice
+ (if nul-chars
+ "NUL characters found, which may cause problems. Continue sending?"
+ "Non-printable characters found. Continue sending?")
+ `((?d "delete" "Remove non-printable characters and send")
+ (?r "replace"
+ ,(format
+ "Replace non-printable characters with \"%s\" and send"
+ message-replacement-char))
+ (?s "send" "Send as is without removing anything")
+ (?e "edit" "Continue editing")))))
(if (eq choice ?e)
(error "Non-printable characters"))
(message-goto-body)
(skip-chars-forward mm-7bit-chars)
(while (not (eobp))
(when (let ((char (char-after)))
- (or (< (mm-char-int char) 128)
+ (or (< char 128)
(and (mm-multibyte-p)
;; FIXME: Wrong for Emacs 23 (unicode) and for
;; things like undecodable utf-8 (in Emacs 21?).
RECIPIENTS is a mail header. Return a list of potentially bogus
addresses. If none is found, return nil.
-An address might be bogus if the domain part is not fully
-qualified, see `message-valid-fqdn-regexp', or if there's a
-matching entry in `message-bogus-addresses'."
+An address might be bogus if if there's a matching entry in
+`message-bogus-addresses'."
;; FIXME: How about "foo@subdomain", when the MTA adds ".domain.tld"?
(let (found)
(mapc (lambda (address)
(setq address (or (cadr address) ""))
- (when
- (or (string= "" address)
- (not
- (or
+ (when (or (string= "" address)
(not (string-match "@" address))
- (string-match
- (concat ".@.*\\("
- message-valid-fqdn-regexp "\\)\\'") address)))
- (and message-bogus-addresses
- (let ((re
- (if (listp message-bogus-addresses)
- (mapconcat 'identity
- message-bogus-addresses
- "\\|")
- message-bogus-addresses)))
- (string-match re address))))
+ (string-match "@.*@" address)
+ (and message-bogus-addresses
+ (let ((re
+ (if (listp message-bogus-addresses)
+ (mapconcat 'identity
+ message-bogus-addresses
+ "\\|")
+ message-bogus-addresses)))
+ (string-match re address))))
(push address found)))
- ;;
(mail-extract-address-components recipients t))
found))
(dolist (bog (message-bogus-recipient-p addr))
(and bog
(not (y-or-n-p
- (gnus-format-message
+ (format-message
"Address `%s'%s might be bogus. Continue? "
bog
;; If the encoded version of the email address
;; Check for control characters.
(message-check 'control-chars
(if (re-search-forward
- (mm-string-to-multibyte "[\000-\007\013\015-\032\034-\037\200-\237]")
+ (string-to-multibyte "[\000-\007\013\015-\032\034-\037\200-\237]")
nil t)
(y-or-n-p
"The article contains control characters. Really post? ")
"Make a From header."
(let* ((style message-from-style)
(login (or address (message-make-address)))
- (fullname (or name
- (and (boundp 'user-full-name)
- user-full-name)
- (user-full-name))))
+ (fullname (or name user-full-name (user-full-name))))
(when (string= fullname "&")
(setq fullname (user-login-name)))
(with-temp-buffer
(cond
((and message-user-fqdn
(stringp message-user-fqdn)
- (string-match message-valid-fqdn-regexp message-user-fqdn)
(not (string-match message-bogus-system-names message-user-fqdn)))
;; `message-user-fqdn' seems to be valid
message-user-fqdn)
- ((and (string-match message-valid-fqdn-regexp sysname)
- (not (string-match message-bogus-system-names sysname)))
+ ((and (string-match message-bogus-system-names sysname))
;; `system-name' returned the right result.
sysname)
;; Try `mail-host-address'.
- ((and (boundp 'mail-host-address)
- (stringp mail-host-address)
- (string-match message-valid-fqdn-regexp mail-host-address)
+ ((and (stringp mail-host-address)
(not (string-match message-bogus-system-names mail-host-address)))
mail-host-address)
;; We try `user-mail-address' as a backup.
((and user-domain
(stringp user-domain)
- (string-match message-valid-fqdn-regexp user-domain)
(not (string-match message-bogus-system-names user-domain)))
user-domain)
;; Default to this bogus thing.
ace)
(when field
(dolist (rhs
- (mm-delete-duplicates
+ (delete-dups
(mapcar (lambda (rhs) (or (cadr (split-string rhs "@")) ""))
(mapcar 'downcase
(mapcar
;; the domain part, i.e., if it is a local user's address.
(setq ace (if (string-match "\\`[[:ascii:]]*\\'" rhs)
rhs
- (downcase (idna-to-ascii rhs))))
+ (downcase (puny-encode-domain rhs))))
(when (and (not (equal rhs ace))
(or (not (eq message-use-idna 'ask))
(y-or-n-p (format "Replace %s with %s in %s:? "
(message-idna-to-ascii-rhs-1 "Mail-Followup-To")
(message-idna-to-ascii-rhs-1 "Cc")))))
-(defvar Date)
-(defvar Message-ID)
-(defvar Organization)
-(defvar From)
-(defvar Path)
-(defvar Subject)
-(defvar Newsgroups)
-(defvar In-Reply-To)
-(defvar References)
-(defvar To)
-(defvar Distribution)
-(defvar Lines)
-(defvar User-Agent)
-(defvar Expires)
-
(defun message-generate-headers (headers)
"Prepare article HEADERS.
Headers already prepared in the buffer are not modified."
(setq headers (append headers message-required-headers))
(save-restriction
(message-narrow-to-headers)
- (let* ((Date (message-make-date))
- (Message-ID (message-make-message-id))
- (Organization (message-make-organization))
- (From (message-make-from))
- (Path (message-make-path))
- (Subject nil)
- (Newsgroups nil)
- (In-Reply-To (message-make-in-reply-to))
- (References (message-make-references))
- (To nil)
- (Distribution (message-make-distribution))
- (Lines (message-make-lines))
- (User-Agent message-newsreader)
- (Expires (message-make-expires))
+ (let* ((header-values
+ (list 'Date (message-make-date)
+ 'Message-ID (message-make-message-id)
+ 'Organization (message-make-organization)
+ 'From (message-make-from)
+ 'Path (message-make-path)
+ 'Subject nil
+ 'Newsgroups nil
+ 'In-Reply-To (message-make-in-reply-to)
+ 'References (message-make-references)
+ 'To nil
+ 'Distribution (message-make-distribution)
+ 'Lines (message-make-lines)
+ 'User-Agent message-newsreader
+ 'Expires (message-make-expires)))
(case-fold-search t)
(optionalp nil)
header value elem header-string)
(setq header (cdr elem))
(or (and (functionp (cdr elem))
(funcall (cdr elem)))
- (and (boundp (cdr elem))
- (symbol-value (cdr elem)))))
+ (and (symbolp (cdr elem))
+ (plist-get header-values (cdr elem)))))
((consp elem)
;; The element is a cons. Either the cdr is a
;; string to be inserted verbatim, or it is a
(cdr elem))
(and (functionp (cdr elem))
(funcall (cdr elem)))))
- ((and (boundp header)
- (symbol-value header))
- ;; The element is a symbol. We insert the value
- ;; of this symbol, if any.
- (symbol-value header))
+ ((and (symbolp header)
+ (plist-member header-values header))
+ ;; The element is a symbol. We insert the value of
+ ;; this symbol, if any.
+ (plist-get header-values header))
((not (message-check-element
(intern (downcase (symbol-name header)))))
;; We couldn't generate a value for this header,
"Split current line, moving portion beyond point vertically down.
If the current line has `message-yank-prefix', insert it on the new line."
(interactive "*")
- (condition-case nil
- (split-line message-yank-prefix) ;; Emacs 22.1+ supports arg.
- (error
- (split-line))))
+ (split-line message-yank-prefix))
(defun message-insert-header (header value)
(insert (capitalize (symbol-name header))
(defvar visual-line-mode)
(declare-function beginning-of-visual-line "simple" (&optional n))
+(defun message-beginning-of-header (handle-folded)
+ "Move point to beginning of header’s value.
+
+When point is at the first header line, moves it after the colon
+and spaces separating header name and header value.
+
+When point is in a continuation line of a folded header (i.e. the
+line starts with a space), the behaviour depends on HANDLE-FOLDED
+argument. If it’s nil, function moves the point to the start of
+the header continuation; otherwise, function locates the
+beginning of the header and moves point past the colon as is the
+case of single-line headers.
+
+No check whether point is inside of a header or body of the
+message is performed.
+
+Returns point or nil if beginning of header’s value could not be
+found. In the latter case, the point is still moved to the
+beginning of line (possibly after attempting to move it to the
+beginning of a folded header)."
+ ;; https://www.rfc-editor.org/rfc/rfc2822.txt, section 2.2.3. says that when
+ ;; unfolding a single WSP should be consumed. WSP is defined as a space
+ ;; character or a horizontal tab.
+ (beginning-of-line)
+ (when handle-folded
+ (while (and (> (point) (point-min))
+ (or (eq (char-after) ?\s) (eq (char-after) ?\t)))
+ (beginning-of-line 0)))
+ (when (or (eq (char-after) ?\s) (eq (char-after) ?\t)
+ (search-forward ":" (point-at-eol) t))
+ ;; We are a bit more lacks than the RFC and allow any positive number of WSP
+ ;; characters.
+ (skip-chars-forward " \t" (point-at-eol))
+ (point)))
+
(defun message-beginning-of-line (&optional n)
"Move point to beginning of header value or to beginning of line.
The prefix argument N is passed directly to `beginning-of-line'.
This command is identical to `beginning-of-line' if point is
-outside the message header or if the option `message-beginning-of-line'
-is nil.
-
-If point is in the message header and on a (non-continued) header
-line, move point to the beginning of the header value or the beginning of line,
-whichever is closer. If point is already at beginning of line, move point to
-beginning of header value. Therefore, repeated calls will toggle point
-between beginning of field and beginning of line."
+outside the message header or if the option
+`message-beginning-of-line' is nil.
+
+If point is in the message header and on a header line, move
+point to the beginning of the header value or the beginning of
+line, whichever is closer. If point is already at beginning of
+line, move point to beginning of header value. Therefore,
+repeated calls will toggle point between beginning of field and
+beginning of line.
+
+When called without a prefix argument, header value spanning
+multiple lines is treated as a single line. Otherwise, even if
+N is 1, when point is on a continuation header line, it will be
+moved to the beginning "
(interactive "p")
- (let ((zrs 'zmacs-region-stays))
- (when (and (featurep 'xemacs) (interactive-p) (boundp zrs))
- (set zrs t)))
- (if (and message-beginning-of-line
- (message-point-in-header-p))
- (let* ((here (point))
- (bol (progn (beginning-of-line n) (point)))
- (eol (point-at-eol))
- (eoh (re-search-forward ": *" eol t)))
- (goto-char
- (if (and eoh (or (< eoh here) (= bol here)))
- eoh bol)))
- (if (and (boundp 'visual-line-mode) visual-line-mode)
- (beginning-of-visual-line n)
- (beginning-of-line n))))
+ (cond
+ ;; Go to beginning of header or beginning of line.
+ ((and message-beginning-of-line (message-point-in-header-p))
+ (let* ((point (point))
+ (bol (progn (beginning-of-line n) (point)))
+ (boh (message-beginning-of-header visual-line-mode)))
+ (goto-char (if (and boh (or (< boh point) (= bol point))) boh bol))))
+ ;; Go to beginning of visual line
+ (visual-line-mode
+ (beginning-of-visual-line n))
+ ;; Go to beginning of line.
+ ((beginning-of-line n))))
(defun message-buffer-name (type &optional to group)
"Return a new (unique) buffer name based on TYPE and TO."
(if window
;; Raise the frame already displaying the message buffer.
(progn
- (gnus-select-frame-set-input-focus (window-frame window))
+ (select-frame-set-input-focus (window-frame window))
(select-window window))
(funcall (or switch-function #'pop-to-buffer) buffer)
(set-buffer buffer))
"Message already being composed; erase? ")
(message nil))))
(error "Message being composed")))
- (funcall (or switch-function
- (if (fboundp #'pop-to-buffer-same-window)
- #'pop-to-buffer-same-window
- #'pop-to-buffer))
+ (funcall (or switch-function 'pop-to-buffer-same-window)
name)
(set-buffer name))
(erase-buffer)
;; Squeeze whitespace.
(while (string-match "[ \t][ \t]+" recipients)
(setq recipients (replace-match " " t t recipients)))
- ;; Remove addresses that match `mail-dont-reply-to-names'.
- (let ((mail-dont-reply-to-names (message-dont-reply-to-names)))
- (setq recipients (mail-dont-reply-to recipients)))
+ ;; Remove addresses that match `message-dont-reply-to-names'.
+ (setq recipients
+ (cond ((functionp message-dont-reply-to-names)
+ (mapconcat
+ 'identity
+ (delq nil
+ (mapcar (lambda (mail)
+ (unless (funcall message-dont-reply-to-names
+ (mail-strip-quoted-names mail))
+ mail))
+ (message-tokenize-header recipients)))
+ ", "))
+ (t (let ((mail-dont-reply-to-names (message-dont-reply-to-names)))
+ (mail-dont-reply-to recipients)))))
;; Perhaps "Mail-Copies-To: never" removed the only address?
(if (string-equal recipients "")
(setq recipients author))
If you have added `cancel-messages' to `message-shoot-gnksa-feet', all articles
are yours except those that have Cancel-Lock header not belonging to you.
Instead of shooting GNKSA feet, you should modify `message-alternative-emails'
-regexp to match all of yours addresses."
+to match all of yours addresses."
;; Canlock-logic as suggested by Per Abrahamsen
;; <abraham@dina.kvl.dk>
;;
(downcase (car (mail-header-parse-address
(message-make-from))))))
;; Email address in From field matches
- ;; 'message-alternative-emails' regexp
+ ;; 'message-alternative-emails' regexp or function.
(and from
message-alternative-emails
- (string-match
- message-alternative-emails
- (car (mail-header-parse-address from))))))))))
+ (cond ((functionp message-alternative-emails)
+ (funcall message-alternative-emails
+ (mail-header-parse-address from)))
+ (t (string-match message-alternative-emails
+ (car (mail-header-parse-address from))))))))))))
;;;###autoload
(defun message-cancel-news (&optional arg)
(cond ((save-window-excursion
(with-output-to-temp-buffer "*Directory*"
(with-current-buffer standard-output
- (fundamental-mode)) ; for Emacs 20.4+
+ (fundamental-mode))
(buffer-disable-undo standard-output)
(let ((default-directory "/"))
(call-process
(let ((b (point))
(contents (with-current-buffer forward-buffer (buffer-string)))
e)
- (unless (featurep 'xemacs)
- (unless (mm-multibyte-string-p contents)
- (error "Attempt to insert unibyte string from the buffer \"%s\"\
+ (unless (multibyte-string-p contents)
+ (error "Attempt to insert unibyte string from the buffer \"%s\"\
to the multibyte buffer \"%s\""
- (if (bufferp forward-buffer)
- (buffer-name forward-buffer)
- forward-buffer)
- (buffer-name))))
+ (if (bufferp forward-buffer)
+ (buffer-name forward-buffer)
+ forward-buffer)
+ (buffer-name)))
(insert (mm-with-multibyte-buffer
(insert contents)
(mime-to-mml)
(let ((b (point)) e)
(if (not message-forward-decoded-p)
(let ((contents (with-current-buffer forward-buffer (buffer-string))))
- (unless (featurep 'xemacs)
- (unless (mm-multibyte-string-p contents)
- (error "Attempt to insert unibyte string from the buffer \"%s\"\
+ (unless (multibyte-string-p contents)
+ (error "Attempt to insert unibyte string from the buffer \"%s\"\
to the multibyte buffer \"%s\""
- (if (bufferp forward-buffer)
- (buffer-name forward-buffer)
- forward-buffer)
- (buffer-name))))
+ (if (bufferp forward-buffer)
+ (buffer-name forward-buffer)
+ forward-buffer)
+ (buffer-name)))
(insert (mm-with-multibyte-buffer
(insert contents)
(mime-to-mml)
(defun message-forward-rmail-make-body (forward-buffer)
(save-window-excursion
(set-buffer forward-buffer)
- (if (rmail-msg-is-pruned)
- (if (fboundp 'rmail-msg-restore-non-pruned-header)
- (rmail-msg-restore-non-pruned-header) ; Emacs 22
- (rmail-toggle-header 0)))) ; Emacs 23
+ (when (rmail-msg-is-pruned)
+ (rmail-toggle-header 0)))
(message-forward-make-body forward-buffer))
;; Fixme: Should have defcustom.
(let ((case-fold-search t))
(re-search-forward "^mime-version:" nil t)))
(message-inhibit-ecomplete t)
+ ;; We don't want smtpmail.el to encode anything, either.
+ (sendmail-coding-system 'raw-text)
+ (select-safe-coding-system-function nil)
message-required-mail-headers
message-generate-hashcash
rfc2047-encode-encoded-words)
(defcustom message-tool-bar-gnome
'((ispell-message "spell" nil
:vert-only t
- :visible (or (not (boundp 'flyspell-mode))
- (not flyspell-mode)))
+ :visible (not flyspell-mode))
(flyspell-buffer "spell" t
:vert-only t
- :visible (and (boundp 'flyspell-mode)
- flyspell-mode)
+ :visible flyspell-mode
:help "Flyspell whole buffer")
(message-send-and-exit "mail/send" t :label "Send")
(message-dont-send "mail/save-draft")
(defun message-make-tool-bar (&optional force)
"Make a message mode tool bar from `message-tool-bar-list'.
When FORCE, rebuild the tool bar."
- (when (and (not (featurep 'xemacs))
- (boundp 'tool-bar-mode)
+ (when (and (boundp 'tool-bar-mode)
tool-bar-mode
(or (not message-tool-bar-map) force))
(setq message-tool-bar-map
(let* ((load-path
- (gmm-image-load-path-for-library "message"
- "mail/save-draft.xpm"
- nil t))
- (image-load-path (cons (car load-path)
- (when (boundp 'image-load-path)
- image-load-path))))
+ (image-load-path-for-library
+ "message" "mail/save-draft.xpm" nil t))
+ (image-load-path (cons (car load-path) image-load-path)))
(gmm-tool-bar-from-list message-tool-bar
message-tool-bar-zap-list
'message-mode-map))))
regular text mode tabbing command."
(interactive)
(cond
- ((if (and (boundp 'completion-fail-discreetly)
- (fboundp 'completion-at-point))
- (let ((completion-fail-discreetly t)) (completion-at-point))
- (funcall (or (message-completion-function) #'ignore)))
+ ((let ((completion-fail-discreetly t))
+ (completion-at-point))
;; Completion was performed; nothing else to do.
nil)
(message-tab-body-function (funcall message-tab-body-function))
group)
collection))
gnus-active-hashtb))
- (message-completion-in-region b e collection)))
-
-(defalias 'message-completion-in-region
- (if (fboundp 'completion-in-region)
- 'completion-in-region
- (lambda (b e hashtb)
- (let* ((string (buffer-substring b e))
- (completions (all-completions string hashtb))
- comp)
- (delete-region b (point))
- (cond
- ((= (length completions) 1)
- (if (string= (car completions) string)
- (progn
- (insert string)
- (message "Only matching group"))
- (insert (car completions))))
- ((and (setq comp (try-completion string hashtb))
- (not (string= comp string)))
- (insert comp))
- (t
- (insert string)
- (if (not comp)
- (message "No matching groups")
- (save-selected-window
- (pop-to-buffer "*Completions*")
- (buffer-disable-undo)
- (let ((buffer-read-only nil))
- (erase-buffer)
- (let ((standard-output (current-buffer)))
- (display-completion-list (sort completions 'string<)))
- (setq buffer-read-only nil)
- (goto-char (point-min))
- (delete-region (point)
- (progn (forward-line 3) (point))))))))))))
+ (completion-in-region b e collection)))
(defun message-expand-name ()
(cond ((and (memq 'eudc message-expand-name-databases)
(save-window-excursion
(with-output-to-temp-buffer " *MESSAGE information message*"
(with-current-buffer " *MESSAGE information message*"
- (fundamental-mode) ; for Emacs 20.4+
+ (fundamental-mode)
(mapc 'princ text)
(goto-char (point-min))))
(funcall ask question))
(defun message-read-from-minibuffer (prompt &optional initial-contents)
"Read from the minibuffer while providing abbrev expansion."
- (if (fboundp 'mail-abbrevs-setup)
- (let ((minibuffer-setup-hook 'mail-abbrevs-setup)
- (minibuffer-local-map message-minibuffer-local-map))
- (read-from-minibuffer prompt initial-contents))
- (let ((minibuffer-setup-hook 'mail-abbrev-minibuffer-setup-hook)
- (minibuffer-local-map message-minibuffer-local-map))
- (read-string prompt initial-contents))))
+ (let ((minibuffer-setup-hook 'mail-abbrevs-setup)
+ (minibuffer-local-map message-minibuffer-local-map))
+ (read-from-minibuffer prompt initial-contents)))
(defun message-use-alternative-email-as-from ()
"Set From field of the outgoing message to the first matching
(require 'mail-utils)
(let* ((fields '("To" "Cc" "From"))
(emails
- (split-string
+ (message-tokenize-header
(mail-strip-quoted-names
- (mapconcat 'message-fetch-reply-field fields ","))
- "[ \f\t\n\r\v,]+"))
- email)
- (while emails
- (if (string-match message-alternative-emails (car emails))
- (setq email (car emails)
- emails nil))
- (pop emails))
+ (mapconcat 'message-fetch-reply-field fields ","))))
+ (email (cond ((functionp message-alternative-emails)
+ (car (cl-remove-if-not message-alternative-emails emails)))
+ (t (loop for email in emails
+ if (string-match-p message-alternative-emails email)
+ return email)))))
(unless (or (not email) (equal email user-mail-address))
(message-remove-header "From")
(goto-char (point-max))
(let ((value (message-field-value header)))
(dolist (string (mail-header-parse-addresses value 'raw))
(setq string
- (gnus-replace-in-string
- (gnus-replace-in-string string "^ +\\| +$" "") "\n" ""))
+ (replace-regexp-in-string
+ "\n" ""
+ (replace-regexp-in-string "^ +\\| +$" "" string)))
(ecomplete-add-item 'mail (car (mail-header-parse-address string))
string))))
(ecomplete-save))
(when force
(sit-for message-send-form-letter-delay))
(if (or force
- (y-or-n-p (gnus-format-message "Send message to `%s'? " to)))
+ (y-or-n-p (format-message "Send message to `%s'? " to)))
(progn
(setq sent (1+ sent))
(message-send-and-exit))
(goto-char (point-min))
(while (re-search-forward "<img.*src=\"\\([^\"]+\\)" nil t)
(let ((file (match-string 1))
- (edges (message-window-inside-pixel-edges
+ (edges (window-inside-pixel-edges
(get-buffer-window (current-buffer)))))
(put-image
(create-image
(match-beginning 0)
" ")))))))
-(when (featurep 'xemacs)
- (require 'messagexmas)
- (message-xmas-redefine))
-
(provide 'message)
(run-hooks 'message-load-hook)
(defun mm-dissect-archive (handle)
(let ((decoder (cddr (assoc (car (mm-handle-type handle))
mm-archive-decoders)))
- (dir (mm-make-temp-file
+ (dir (make-temp-file
(expand-file-name "emm." mm-tmp-directory) 'dir)))
(set-file-modes dir #o700)
(unwind-protect
(message-options-get 'mm-body-charset-encoding-alist)
(message-options-set
'mm-body-charset-encoding-alist
- (mm-read-coding-system "Charset used in the article: ")))
+ (read-coding-system "Charset used in the article: ")))
;; The logic in `mml-generate-mime-1' confirms that it's OK
;; to return nil here.
nil)))
(save-excursion
(if charset
(progn
- (mm-encode-coding-region (point-min) (point-max)
- (mm-charset-to-coding-system charset))
+ (encode-coding-region (point-min) (point-max)
+ (mm-charset-to-coding-system charset))
charset)
(goto-char (point-min))
(let ((charsets (mm-find-mime-charset-region (point-min) (point-max)
(t
(prog1
(setq charset (car charsets))
- (mm-encode-coding-region (point-min) (point-max)
- (mm-charset-to-coding-system charset))))
+ (encode-coding-region (point-min) (point-max)
+ (mm-charset-to-coding-system charset))))
))))))
(defun mm-long-lines-p (length)
(save-excursion
(when encoding
(mm-decode-content-transfer-encoding encoding type))
- (when (and (featurep 'mule) ;; Fixme: Wrong test for unibyte session.
- (not (eq charset 'gnus-decoded)))
+ (when (not (eq charset 'gnus-decoded))
(let ((coding-system (mm-charset-to-coding-system
;; Allow overwrite using
;; `mm-charset-override-alist'.
(setq coding-system
(mm-charset-to-coding-system mail-parse-charset)))
(when (and charset coding-system
- ;; buffer-file-coding-system
- ;;Article buffer is nil coding system
- ;;in XEmacs
(mm-multibyte-p)
(or (not (eq coding-system 'ascii))
(setq coding-system mail-parse-charset)))
- (mm-decode-coding-region (point-min) (point-max)
- coding-system))
- (setq buffer-file-coding-system
- (if (boundp 'last-coding-system-used)
- (symbol-value 'last-coding-system-used)
- coding-system))))))
+ (decode-coding-region (point-min) (point-max) coding-system))
+ (setq buffer-file-coding-system last-coding-system-used)))))
(defun mm-decode-string (string charset)
"Decode STRING with CHARSET."
(memq charset mail-parse-ignored-charsets))
(setq charset mail-parse-charset))
(or
- (when (featurep 'mule)
- (let ((coding-system (mm-charset-to-coding-system
- charset
- ;; Allow overwrite using
- ;; `mm-charset-override-alist'.
- nil t)))
- (if (and (not coding-system)
- (listp mail-parse-ignored-charsets)
- (memq 'gnus-unknown mail-parse-ignored-charsets))
- (setq coding-system
- (mm-charset-to-coding-system mail-parse-charset)))
- (when (and charset coding-system
- (mm-multibyte-p)
- (or (not (eq coding-system 'ascii))
- (setq coding-system mail-parse-charset)))
- (mm-decode-coding-string string coding-system))))
+ (let ((coding-system (mm-charset-to-coding-system
+ charset
+ ;; Allow overwrite using
+ ;; `mm-charset-override-alist'.
+ nil t)))
+ (if (and (not coding-system)
+ (listp mail-parse-ignored-charsets)
+ (memq 'gnus-unknown mail-parse-ignored-charsets))
+ (setq coding-system
+ (mm-charset-to-coding-system mail-parse-charset)))
+ (when (and charset coding-system
+ (mm-multibyte-p)
+ (or (not (eq coding-system 'ascii))
+ (setq coding-system mail-parse-charset)))
+ (decode-coding-string string coding-system)))
string))
(provide 'mm-bodies)
(eval-when-compile (require 'cl))
(autoload 'gnus-map-function "gnus-util")
-(autoload 'gnus-replace-in-string "gnus-util")
-(autoload 'gnus-read-shell-command "gnus-util")
-(autoload 'gnus-format-message "gnus-util")
(autoload 'mm-inline-partial "mm-partial")
(autoload 'mm-inline-external-body "mm-extern")
(mm-insert-part handle)
(let ((image
(ignore-errors
- (if (fboundp 'create-image)
- (create-image (buffer-string) 'imagemagick 'data-p)
- (mm-create-image-xemacs
- (mm-handle-media-subtype handle))))))
+ (create-image (buffer-string) 'imagemagick 'data-p))))
(when image
(setcar (cdr handle) (list "image/imagemagick"))
(mm-image-fit-p handle)))))))
:type '(repeat regexp) ;; See `mm-preferred-alternative-precedence'.
:group 'mime-display)
-(defcustom mm-tmp-directory
- (if (fboundp 'temp-directory)
- (temp-directory)
- (if (boundp 'temporary-file-directory)
- temporary-file-directory
- "/tmp/"))
+(defcustom mm-tmp-directory temporary-file-directory
"Where mm will store its temporary files."
:type 'directory
:group 'mime-display)
(with-current-buffer
(generate-new-buffer " *mm*")
;; Preserve the data's unibyteness (for url-insert-file-contents).
- (mm-set-buffer-multibyte mb)
+ (set-buffer-multibyte mb)
(insert-buffer-substring obuf beg)
(current-buffer))))
(concat
"using external program \""
(format method filename) "\"")
- (gnus-format-message
+ (format-message
"by calling `%s' on the contents)" method))
"? "))))))
(if external
(select-window win)))
(switch-to-buffer (generate-new-buffer " *mm*")))
(buffer-disable-undo)
- (mm-set-buffer-file-coding-system mm-binary-coding-system)
+ (set-buffer-file-coding-system mm-binary-coding-system)
(insert-buffer-substring cur)
(goto-char (point-min))
(when method
;; The function is a string to be executed.
(mm-insert-part handle)
(mm-add-meta-html-tag handle)
- (let* ((dir (mm-make-temp-file
+ (let* ((dir (make-temp-file
(expand-file-name "emm." mm-tmp-directory) 'dir))
(filename (or
(mail-content-type-get
;; `mailcap-mime-extensions'.
(setq suffix (car (rassoc (mm-handle-media-type handle)
mailcap-mime-extensions))))
- (setq file (mm-make-temp-file (expand-file-name "mm." dir)
- nil suffix))))
+ (setq file (make-temp-file (expand-file-name "mm." dir)
+ nil suffix))))
(let ((coding-system-for-write mm-binary-coding-system))
(write-region (point-min) (point-max) file nil 'nomesg))
;; The file is deleted after the viewer exists. If the users edits
(ignore-errors
(cond
;; Internally displayed part.
- ((mm-annotationp object)
- (if (featurep 'xemacs)
- (delete-annotation object)))
((or (functionp object)
(and (listp object)
(eq (car object) 'lambda)))
(with-current-buffer (mm-handle-buffer handle)
(buffer-string)))
((mm-multibyte-p)
- (mm-string-to-multibyte (mm-get-part handle no-cache)))
+ (string-to-multibyte (mm-get-part handle no-cache)))
(t
(mm-get-part handle no-cache)))))
(save-restriction
(defun mm-file-name-delete-control (filename)
"Delete control characters from FILENAME."
- (gnus-replace-in-string filename "[\x00-\x1f\x7f]" ""))
+ (replace-regexp-in-string "[\x00-\x1f\x7f]" "" filename))
(defun mm-file-name-delete-gotchas (filename)
"Delete shell gotchas from FILENAME."
- (setq filename (gnus-replace-in-string filename "[<>|]" ""))
- (gnus-replace-in-string filename "^[.-]+" ""))
+ (setq filename (replace-regexp-in-string "[<>|]" "" filename))
+ (replace-regexp-in-string "^[.-]+" "" filename))
(defun mm-save-part (handle &optional prompt)
"Write HANDLE to a file.
Use CMD as the process."
(let ((name (mail-content-type-get (mm-handle-type handle) 'name))
(command (or cmd
- (gnus-read-shell-command
+ (read-shell-command
"Shell command on MIME part: " mm-last-shell-command))))
(mm-with-unibyte-buffer
(mm-insert-part handle)
(prog1
(setq spec
(ignore-errors
- ;; Avoid testing `make-glyph' since W3 may define
- ;; a bogus version of it.
- (if (fboundp 'create-image)
- (create-image (buffer-string)
- (or (mm-image-type-from-buffer)
- (intern type))
- 'data-p)
- (mm-create-image-xemacs type))))
+ (create-image (buffer-string)
+ (or (mm-image-type-from-buffer)
+ (intern type))
+ 'data-p)))
(mm-handle-set-cache handle spec))))))
-(defun mm-create-image-xemacs (type)
- (when (featurep 'xemacs)
- (cond
- ((equal type "xbm")
- ;; xbm images require special handling, since
- ;; the only way to create glyphs from these
- ;; (without a ton of work) is to write them
- ;; out to a file, and then create a file
- ;; specifier.
- (let ((file (mm-make-temp-file
- (expand-file-name "emm" mm-tmp-directory)
- nil ".xbm")))
- (unwind-protect
- (progn
- (write-region (point-min) (point-max) file)
- (make-glyph (list (cons 'x file))))
- (ignore-errors
- (delete-file file)))))
- (t
- (make-glyph
- (vector
- (or (mm-image-type-from-buffer)
- (intern type))
- :data (buffer-string)))))))
-
(declare-function image-size "image.c" (spec &optional pixels frame))
(defun mm-image-fit-p (handle)
"Say whether the image in HANDLE will fit the current window."
(let ((image (mm-get-image handle)))
(or (not image)
- (if (featurep 'xemacs)
- ;; XEmacs's glyphs can actually tell us about their width, so
- ;; let's be nice and smart about them.
- (or mm-inline-large-images
- (and (<= (glyph-width image) (window-pixel-width))
- (<= (glyph-height image) (window-pixel-height))))
- (let* ((size (image-size image))
- (w (car size))
- (h (cdr size)))
- (or mm-inline-large-images
- (and (<= h (1- (window-height))) ; Don't include mode line.
- (<= w (window-width)))))))))
+ (let* ((size (image-size image))
+ (w (car size))
+ (h (cdr size)))
+ (or mm-inline-large-images
+ (and (<= h (1- (window-height))) ; Don't include mode line.
+ (<= w (window-width))))))))
(defun mm-valid-image-format-p (format)
"Say whether FORMAT can be displayed natively by Emacs."
- (cond
- ;; Handle XEmacs
- ((fboundp 'valid-image-instantiator-format-p)
- (valid-image-instantiator-format-p format))
- ;; Handle Emacs
- ((fboundp 'image-type-available-p)
- (and (display-graphic-p)
- (image-type-available-p format)))
- ;; Nobody else can do images yet.
- (t
- nil)))
+ (and (display-graphic-p)
+ (image-type-available-p format)))
(defun mm-valid-and-fit-image-p (format handle)
"Say whether FORMAT can be displayed natively and HANDLE fits the window."
(defun mm-shr (handle)
;; Require since we bind its variables.
(require 'shr)
- (let ((shr-width (if (and (boundp 'shr-use-fonts)
- shr-use-fonts)
+ (let ((shr-width (if shr-use-fonts
nil
fill-column))
(shr-content-function (lambda (id)
(mm-charset-to-coding-system charset
nil t))
(not (eq charset 'ascii)))
- (mm-decode-coding-string (buffer-string) charset)
- (mm-string-as-multibyte (buffer-string)))
+ (decode-coding-string (buffer-string) charset)
+ (string-as-multibyte (buffer-string)))
(erase-buffer)
(mm-enable-multibyte)))
(goto-char (point-min))
,(point-max-marker))))))))
(defvar shr-map)
+(defvar shr-image-map)
(autoload 'widget-convert-button "wid-edit")
(widget-convert-button
'url-link start end
:help-echo (get-text-property start 'help-echo)
- :keymap shr-map
+ ;;; FIXME Should only use the image map on images.
+ :keymap shr-image-map
(get-text-property start 'shr-url))
(put-text-property start end 'local-map nil)
(dolist (overlay (overlays-at start))
handle
`(lambda ()
(let (buffer-read-only)
- (condition-case nil
- ;; This is only valid on XEmacs.
- (mapcar (lambda (prop)
- (remove-specifier
- (face-property 'default prop) (current-buffer)))
- '(background background-pixmap foreground))
- (error nil))
(delete-region ,(point-min-marker) ,(point-max-marker))))))))))
(provide 'mm-partial)
(insert-file-contents (substring url (1- (match-end 0))))
(mm-url-insert-file-contents-external url))
(goto-char (point-min))
- (if (fboundp 'url-generic-parse-url)
- (setq url-current-object
- (url-generic-parse-url url)))
+ (setq url-current-object (url-generic-parse-url url))
(list url (buffer-size)))
(mm-url-load-url)
(let ((name buffer-file-name)
- (url-request-extra-headers
- ;; ISTM setting a Connection header was a workaround for
- ;; older versions of url included with w3, but it does more
- ;; harm than good with the one shipped with Emacs. --ansel
- (if (not (and (boundp 'url-version)
- (equal url-version "Emacs")))
- (list (cons "Connection" "Close"))))
result)
(setq result (url-insert-file-contents url))
(save-excursion
(while (re-search-forward "\r 1000\r ?" nil t)
(replace-match "")))
(setq buffer-file-name name)
- (if (and (fboundp 'url-generic-parse-url)
- (listp result))
- (setq url-current-object (url-generic-parse-url
- (car result))))
+ (when (listp result)
+ (setq url-current-object
+ (url-generic-parse-url (car result))))
result)))
;;;###autoload
(string-to-number (substring entity 1)))))
(setq c (or (cdr (assq c mm-extra-numeric-entities))
(mm-ucs-to-char c)))
- (if (mm-char-or-char-int-p c) c ?#))
+ (if (characterp c) c ?#))
(or (cdr (assq (intern entity)
mm-url-html-entities))
?#))))
((= char ? ) "+")
((memq char mm-url-unreserved-chars) (char-to-string char))
(t (upcase (format "%%%02x" char)))))
- (mm-encode-coding-string chunk
- (if (fboundp 'find-coding-systems-string)
- (car (find-coding-systems-string chunk))
- buffer-file-coding-system))
+ (encode-coding-string chunk (car (find-coding-systems-string chunk)))
"")))
(defun mm-url-encode-www-form-urlencoded (pairs)
(eval-when-compile (require 'cl))
(require 'mail-prsvr)
+(require 'timer)
-(eval-and-compile
- (if (featurep 'xemacs)
- (unless (ignore-errors
- (require 'timer-funcs))
- (require 'timer))
- (require 'timer)))
-
-(defvar mm-mime-mule-charset-alist )
-;; Note this is not presently used on Emacs >= 23, which is good,
-;; since it means standalone message-mode (which requires mml and
-;; hence mml-util) does not load gnus-util.
-(autoload 'gnus-completing-read "gnus-util")
-
-;; Emulate functions that are not available in every (X)Emacs version.
-;; The name of a function is prefixed with mm-, like `mm-char-int' for
-;; `char-int' that is a native XEmacs function, not available in Emacs.
-;; Gnus programs all should use mm- functions, not the original ones.
-(eval-and-compile
- (mapc
- (lambda (elem)
- (let ((nfunc (intern (format "mm-%s" (car elem)))))
- (if (fboundp (car elem))
- (defalias nfunc (car elem))
- (defalias nfunc (cdr elem)))))
- `(;; `coding-system-list' is not available in XEmacs 21.4 built
- ;; without the `file-coding' feature.
- (coding-system-list . ignore)
- ;; `char-int' is an XEmacs function, not available in Emacs.
- (char-int . identity)
- ;; `coding-system-equal' is an Emacs function, not available in XEmacs.
- (coding-system-equal . equal)
- ;; `annotationp' is an XEmacs function, not available in Emacs.
- (annotationp . ignore)
- ;; `set-buffer-file-coding-system' is not available in XEmacs 21.4
- ;; built without the `file-coding' feature.
- (set-buffer-file-coding-system . ignore)
- ;; `read-charset' is an Emacs function, not available in XEmacs.
- (read-charset
- . ,(lambda (prompt)
- "Return a charset."
- (intern
- (gnus-completing-read
- prompt
- (mapcar (lambda (e) (symbol-name (car e)))
- mm-mime-mule-charset-alist)
- t))))
- ;; `subst-char-in-string' is not available in XEmacs 21.4.
- (subst-char-in-string
- . ,(lambda (from to string &optional inplace)
- ;; stolen (and renamed) from nnheader.el
- "Replace characters in STRING from FROM to TO.
- Unless optional argument INPLACE is non-nil, return a new string."
- (let ((string (if inplace string (copy-sequence string)))
- (len (length string))
- (idx 0))
- ;; Replace all occurrences of FROM with TO.
- (while (< idx len)
- (when (= (aref string idx) from)
- (aset string idx to))
- (setq idx (1+ idx)))
- string)))
- ;; `replace-in-string' is an XEmacs function, not available in Emacs.
- (replace-in-string
- . ,(lambda (string regexp rep &optional literal)
- "See `replace-regexp-in-string', only the order of args differs."
- (replace-regexp-in-string regexp rep string nil literal)))
- ;; `string-as-unibyte' is an Emacs function, not available in XEmacs.
- (string-as-unibyte . identity)
- ;; `string-make-unibyte' is an Emacs function, not available in XEmacs.
- (string-make-unibyte . identity)
- ;; string-as-multibyte often doesn't really do what you think it does.
- ;; Example:
- ;; (aref (string-as-multibyte "\201") 0) -> 129 (aka ?\201)
- ;; (aref (string-as-multibyte "\300") 0) -> 192 (aka ?\300)
- ;; (aref (string-as-multibyte "\300\201") 0) -> 192 (aka ?\300)
- ;; (aref (string-as-multibyte "\300\201") 1) -> 129 (aka ?\201)
- ;; but
- ;; (aref (string-as-multibyte "\201\300") 0) -> 2240
- ;; (aref (string-as-multibyte "\201\300") 1) -> <error>
- ;; Better use string-to-multibyte or encode-coding-string.
- ;; If you really need string-as-multibyte somewhere it's usually
- ;; because you're using the internal emacs-mule representation (maybe
- ;; because you're using string-as-unibyte somewhere), which is
- ;; generally a problem in itself.
- ;; Here is an approximate equivalence table to help think about it:
- ;; (string-as-multibyte s) ~= (decode-coding-string s 'emacs-mule)
- ;; (string-to-multibyte s) ~= (decode-coding-string s 'binary)
- ;; (string-make-multibyte s) ~= (decode-coding-string s locale-coding-system)
- ;; `string-as-multibyte' is an Emacs function, not available in XEmacs.
- (string-as-multibyte . identity)
- ;; `multibyte-string-p' is an Emacs function, not available in XEmacs.
- (multibyte-string-p . ignore)
- ;; `insert-byte' is available only in Emacs 23.1 or greater.
- (insert-byte . insert-char)
- ;; `multibyte-char-to-unibyte' is an Emacs function, not available
- ;; in XEmacs.
- (multibyte-char-to-unibyte . identity)
- ;; `set-buffer-multibyte' is an Emacs function, not available in XEmacs.
- (set-buffer-multibyte . ignore)
- ;; `substring-no-properties' is available only in Emacs 22.1 or greater.
- (substring-no-properties
- . ,(lambda (string &optional from to)
- "Return a substring of STRING, without text properties.
-It starts at index FROM and ending before TO.
-TO may be nil or omitted; then the substring runs to the end of STRING.
-If FROM is nil or omitted, the substring starts at the beginning of STRING.
-If FROM or TO is negative, it counts from the end.
-
-With one argument, just copy STRING without its properties."
- (setq string (substring string (or from 0) to))
- (set-text-properties 0 (length string) nil string)
- string))
- ;; `line-number-at-pos' is available only in Emacs 22.1 or greater
- ;; and XEmacs 21.5.
- (line-number-at-pos
- . ,(lambda (&optional pos)
- "Return (narrowed) buffer line number at position POS.
-If POS is nil, use current buffer location.
-Counting starts at (point-min), so the value refers
-to the contents of the accessible portion of the buffer."
- (let ((opoint (or pos (point))) start)
- (save-excursion
- (goto-char (point-min))
- (setq start (point))
- (goto-char opoint)
- (forward-line 0)
- (1+ (count-lines start (point))))))))))
-
-;; `special-display-p' is an Emacs function, not available in XEmacs.
-(defalias 'mm-special-display-p
- (if (featurep 'emacs)
- 'special-display-p
- (lambda (buffer-name)
- "Returns non-nil if a buffer named BUFFER-NAME gets a special frame."
- (and special-display-function
- (or (and (member buffer-name special-display-buffer-names) t)
- (cdr (assoc buffer-name special-display-buffer-names))
- (catch 'return
- (dolist (elem special-display-regexps)
- (and (stringp elem)
- (string-match elem buffer-name)
- (throw 'return t))
- (and (consp elem)
- (stringp (car elem))
- (string-match (car elem) buffer-name)
- (throw 'return (cdr elem))))))))))
-
-;; `decode-coding-string', `encode-coding-string', `decode-coding-region'
-;; and `encode-coding-region' are available in Emacs and XEmacs built with
-;; the `file-coding' feature, but the XEmacs versions treat nil, that is
-;; given as the `coding-system' argument, as the `binary' coding system.
-(eval-and-compile
- (if (featurep 'xemacs)
- (if (featurep 'file-coding)
- (progn
- (defun mm-decode-coding-string (str coding-system)
- (if coding-system
- (decode-coding-string str coding-system)
- str))
- (defun mm-encode-coding-string (str coding-system)
- (if coding-system
- (encode-coding-string str coding-system)
- str))
- (defun mm-decode-coding-region (start end coding-system)
- (if coding-system
- (decode-coding-region start end coding-system)))
- (defun mm-encode-coding-region (start end coding-system)
- (if coding-system
- (encode-coding-region start end coding-system))))
- (defun mm-decode-coding-string (str coding-system) str)
- (defun mm-encode-coding-string (str coding-system) str)
- (defalias 'mm-decode-coding-region 'ignore)
- (defalias 'mm-encode-coding-region 'ignore))
- (defalias 'mm-decode-coding-string 'decode-coding-string)
- (defalias 'mm-encode-coding-string 'encode-coding-string)
- (defalias 'mm-decode-coding-region 'decode-coding-region)
- (defalias 'mm-encode-coding-region 'encode-coding-region)))
-
-;; `string-to-multibyte' is available only in Emacs.
-(defalias 'mm-string-to-multibyte (if (featurep 'xemacs)
- 'identity
- 'string-to-multibyte))
-
-;; `char-or-char-int-p' is an XEmacs function, not available in Emacs.
-(eval-and-compile
- (defalias 'mm-char-or-char-int-p
- (cond
- ((fboundp 'char-or-char-int-p) 'char-or-char-int-p)
- ((fboundp 'char-valid-p) 'char-valid-p)
- (t 'identity))))
-
-;; `ucs-to-char' is a function that Mule-UCS provides.
-(eval-and-compile
- (if (featurep 'xemacs)
- (cond ((and (fboundp 'unicode-to-char) ;; XEmacs 21.5.
- (subrp (symbol-function 'unicode-to-char)))
- (if (featurep 'mule)
- (defalias 'mm-ucs-to-char 'unicode-to-char)
- (defun mm-ucs-to-char (codepoint)
- "Convert Unicode codepoint to character."
- (or (unicode-to-char codepoint) ?#))))
- ((featurep 'mule)
- (defun mm-ucs-to-char (codepoint)
- "Convert Unicode codepoint to character."
- (if (fboundp 'ucs-to-char) ;; Mule-UCS is loaded.
- (progn
- (defalias 'mm-ucs-to-char
- (lambda (codepoint)
- "Convert Unicode codepoint to character."
- (condition-case nil
- (or (ucs-to-char codepoint) ?#)
- (error ?#))))
- (mm-ucs-to-char codepoint))
- (condition-case nil
- (or (int-to-char codepoint) ?#)
- (error ?#)))))
- (t
- (defun mm-ucs-to-char (codepoint)
- "Convert Unicode codepoint to character."
- (condition-case nil
- (or (int-to-char codepoint) ?#)
- (error ?#)))))
- (if (let ((char (make-char 'japanese-jisx0208 36 34)))
- (eq char (decode-char 'ucs char)))
- ;; Emacs 23.
- (defalias 'mm-ucs-to-char 'identity)
- (defun mm-ucs-to-char (codepoint)
- "Convert Unicode codepoint to character."
- (or (decode-char 'ucs codepoint) ?#)))))
-
-;; Fixme: This seems always to be used to read a MIME charset, so it
-;; should be re-named and fixed (in Emacs) to offer completion only on
-;; proper charset names (base coding systems which have a
-;; mime-charset defined). XEmacs doesn't believe in mime-charset;
-;; test with
-;; `(or (coding-system-get 'iso-8859-1 'mime-charset)
-;; (coding-system-get 'iso-8859-1 :mime-charset))'
-;; Actually, there should be an `mm-coding-system-mime-charset'.
-(eval-and-compile
- (defalias 'mm-read-coding-system
- (if (featurep 'emacs) 'read-coding-system
- (cond
- ((fboundp 'read-coding-system)
- (if (and (featurep 'xemacs)
- (<= (string-to-number emacs-version) 21.1))
- (lambda (prompt &optional default-coding-system)
- (read-coding-system prompt))
- 'read-coding-system))
- (t (lambda (prompt &optional default-coding-system)
- "Prompt the user for a coding system."
- (gnus-completing-read
- prompt (mapcar (lambda (s) (symbol-name (car s)))
- mm-mime-mule-charset-alist))))))))
+(defvar mm-mime-mule-charset-alist)
+
+(defun mm-ucs-to-char (codepoint)
+ "Convert Unicode codepoint to character."
+ (or (decode-char 'ucs codepoint) ?#))
(defvar mm-coding-system-list nil)
(defun mm-get-coding-system-list ()
"Get the coding system list."
(or mm-coding-system-list
- (setq mm-coding-system-list (mm-coding-system-list))))
+ (setq mm-coding-system-list (coding-system-list))))
(defun mm-coding-system-p (cs)
- "Return non-nil if CS is a symbol naming a coding system.
-In XEmacs, also return non-nil if CS is a coding system object.
-If CS is available, return CS itself in Emacs, and return a coding
-system object in XEmacs."
- (if (fboundp 'find-coding-system)
- (and cs (find-coding-system cs))
- (if (fboundp 'coding-system-p)
- (when (coding-system-p cs)
- cs)
- ;; no-MULE XEmacs:
- (car (memq cs (mm-get-coding-system-list))))))
+ "Return CS if CS is a coding system."
+ (and (coding-system-p cs)
+ cs))
(defvar mm-charset-synonym-alist
`(
(mm-coding-system-p 'iso-8859-1))
'((iso_8859-1 . iso-8859-1)))
)
- "A mapping from unknown or invalid charset names to the real charset names.
-
-See `mm-codepage-iso-8859-list' and `mm-codepage-ibm-list'.")
-
-(defun mm-codepage-setup (number &optional alias)
- "Create a coding system cpNUMBER.
-The coding system is created using `codepage-setup'. If ALIAS is
-non-nil, an alias is created and added to
-`mm-charset-synonym-alist'. If ALIAS is a string, it's used as
-the alias. Else windows-NUMBER is used."
- (interactive
- (let ((completion-ignore-case t)
- (candidates (if (fboundp 'cp-supported-codepages)
- (cp-supported-codepages)
- ;; Removed in Emacs 23 (unicode), so signal an error:
- (error "`codepage-setup' not present in this Emacs version"))))
- (list (gnus-completing-read "Setup DOS Codepage" candidates
- t nil nil "437"))))
- (when alias
- (setq alias (if (stringp alias)
- (intern alias)
- (intern (format "windows-%s" number)))))
- (let* ((cp (intern (format "cp%s" number))))
- (unless (mm-coding-system-p cp)
- (if (fboundp 'codepage-setup) ; silence compiler
- (codepage-setup number)
- (error "`codepage-setup' not present in this Emacs version")))
- (when (and alias
- ;; Don't add alias if setup of cp failed.
- (mm-coding-system-p cp))
- (add-to-list 'mm-charset-synonym-alist (cons alias cp)))))
-
-(defcustom mm-codepage-iso-8859-list
- (list 1250 ;; Windows-1250 is a variant of Latin-2 heavily used by Microsoft
- ;; Outlook users in Czech republic. Use this to allow reading of
- ;; their e-mails.
- '(1252 . 1) ;; Windows-1252 is a superset of iso-8859-1 (West
- ;; Europe). See also `gnus-article-dumbquotes-map'.
- '(1254 . 9) ;; Windows-1254 is a superset of iso-8859-9 (Turkish).
- '(1255 . 8));; Windows-1255 is a superset of iso-8859-8 (Hebrew).
- "A list of Windows codepage numbers and iso-8859 charset numbers.
-
-If an element is a number corresponding to a supported windows
-codepage, appropriate entries to `mm-charset-synonym-alist' are
-added by `mm-setup-codepage-iso-8859'. An element may also be a
-cons cell where the car is a codepage number and the cdr is the
-corresponding number of an iso-8859 charset."
- :type '(list (set :inline t
- (const 1250 :tag "Central and East European")
- (const (1252 . 1) :tag "West European")
- (const (1254 . 9) :tag "Turkish")
- (const (1255 . 8) :tag "Hebrew"))
- (repeat :inline t
- :tag "Other options"
- (choice
- (integer :tag "Windows codepage number")
- (cons (integer :tag "Windows codepage number")
- (integer :tag "iso-8859 charset number")))))
- :version "22.1" ;; Gnus 5.10.9
- :group 'mime)
-
-(defcustom mm-codepage-ibm-list
- (list 437 ;; (US etc.)
- 860 ;; (Portugal)
- 861 ;; (Iceland)
- 862 ;; (Israel)
- 863 ;; (Canadian French)
- 865 ;; (Nordic)
- 852 ;;
- 850 ;; (Latin 1)
- 855 ;; (Cyrillic)
- 866 ;; (Cyrillic - Russian)
- 857 ;; (Turkish)
- 864 ;; (Arabic)
- 869 ;; (Greek)
- 874);; (Thai)
- ;; In Emacs 23 (unicode), cp... and ibm... are aliases.
- ;; Cf. http://thread.gmane.org/v9lkng5nwy.fsf@marauder.physik.uni-ulm.de
- "List of IBM codepage numbers.
-
-The codepage mappings slightly differ between IBM and other vendors.
-See \"ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/IBM/README.TXT\".
-
-If an element is a number corresponding to a supported windows
-codepage, appropriate entries to `mm-charset-synonym-alist' are
-added by `mm-setup-codepage-ibm'."
- :type '(list (set :inline t
- (const 437 :tag "US etc.")
- (const 860 :tag "Portugal")
- (const 861 :tag "Iceland")
- (const 862 :tag "Israel")
- (const 863 :tag "Canadian French")
- (const 865 :tag "Nordic")
- (const 852)
- (const 850 :tag "Latin 1")
- (const 855 :tag "Cyrillic")
- (const 866 :tag "Cyrillic - Russian")
- (const 857 :tag "Turkish")
- (const 864 :tag "Arabic")
- (const 869 :tag "Greek")
- (const 874 :tag "Thai"))
- (repeat :inline t
- :tag "Other options"
- (integer :tag "Codepage number")))
- :version "22.1" ;; Gnus 5.10.9
- :group 'mime)
-
-(defun mm-setup-codepage-iso-8859 (&optional list)
- "Add appropriate entries to `mm-charset-synonym-alist'.
-Unless LIST is given, `mm-codepage-iso-8859-list' is used."
- (unless list
- (setq list mm-codepage-iso-8859-list))
- (dolist (i list)
- (let (cp windows iso)
- (if (consp i)
- (setq cp (intern (format "cp%d" (car i)))
- windows (intern (format "windows-%d" (car i)))
- iso (intern (format "iso-8859-%d" (cdr i))))
- (setq cp (intern (format "cp%d" i))
- windows (intern (format "windows-%d" i))))
- (unless (mm-coding-system-p windows)
- (if (mm-coding-system-p cp)
- (add-to-list 'mm-charset-synonym-alist (cons windows cp))
- (add-to-list 'mm-charset-synonym-alist (cons windows iso)))))))
-
-(defun mm-setup-codepage-ibm (&optional list)
- "Add appropriate entries to `mm-charset-synonym-alist'.
-Unless LIST is given, `mm-codepage-ibm-list' is used."
- (unless list
- (setq list mm-codepage-ibm-list))
- (dolist (number list)
- (let ((ibm (intern (format "ibm%d" number)))
- (cp (intern (format "cp%d" number))))
- (when (and (not (mm-coding-system-p ibm))
- (mm-coding-system-p cp))
- (add-to-list 'mm-charset-synonym-alist (cons ibm cp))))))
-
-;; Initialize:
-(mm-setup-codepage-iso-8859)
-(mm-setup-codepage-ibm)
+ "A mapping from unknown or invalid charset names to the real charset names.")
;; Note: this has to be defined before `mm-charset-to-coding-system'.
-(defcustom mm-charset-eval-alist
- (if (featurep 'xemacs)
- nil ;; I don't know what would be useful for XEmacs.
- '(;; Emacs 22 provides autoloads for 1250-1258
- ;; (i.e. `mm-codepage-setup' does nothing).
- (windows-1250 . (mm-codepage-setup 1250 t))
- (windows-1251 . (mm-codepage-setup 1251 t))
- (windows-1253 . (mm-codepage-setup 1253 t))
- (windows-1257 . (mm-codepage-setup 1257 t))))
+(defcustom mm-charset-eval-alist nil
"An alist of (CHARSET . FORM) pairs.
If an article is encoded in an unknown CHARSET, FORM is
evaluated. This allows the loading of additional libraries
providing charsets on demand. If supported by your Emacs
version, you could use `autoload-coding-system' here."
:version "22.1" ;; Gnus 5.10.9
- :type '(list (set :inline t
- (const (windows-1250 . (mm-codepage-setup 1250 t)))
- (const (windows-1251 . (mm-codepage-setup 1251 t)))
- (const (windows-1253 . (mm-codepage-setup 1253 t)))
- (const (windows-1257 . (mm-codepage-setup 1257 t)))
- (const (cp850 . (mm-codepage-setup 850 nil))))
- (repeat :inline t
+ :type '(list (repeat :inline t
:tag "Other options"
(cons (symbol :tag "charset")
(symbol :tag "form"))))
;; Fixme: some of the cars here aren't valid MIME charsets. That
;; should only matter with XEmacs, though.
(defvar mm-mime-mule-charset-alist
- `((us-ascii ascii)
+ '((us-ascii ascii)
(iso-8859-1 latin-iso8859-1)
(iso-8859-2 latin-iso8859-2)
(iso-8859-3 latin-iso8859-3)
(iso-2022-jp-3 latin-jisx0201 japanese-jisx0208-1978 japanese-jisx0208
japanese-jisx0213-1 japanese-jisx0213-2)
(shift_jis latin-jisx0201 katakana-jisx0201 japanese-jisx0208)
- ,(cond ((fboundp 'unicode-precedence-list)
- (cons 'utf-8 (delq 'ascii (mapcar 'charset-name
- (unicode-precedence-list)))))
- ((or (not (fboundp 'charsetp)) ;; non-Mule case
- (charsetp 'unicode-a)
- (not (mm-coding-system-p 'mule-utf-8)))
- '(utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e))
- (t ;; If we have utf-8 we're in Mule 5+.
- (append '(utf-8)
- (delete 'ascii
- (coding-system-get 'mule-utf-8 'safe-charsets))))))
+ (utf-8))
"Alist of MIME-charset/MULE-charsets.")
-(defun mm-enrich-utf-8-by-mule-ucs ()
- "Make the `utf-8' MIME charset usable by the Mule-UCS package.
-This function will run when the `un-define' module is loaded under
-XEmacs, and fill the `utf-8' entry in `mm-mime-mule-charset-alist'
-with Mule charsets. It is completely useless for Emacs."
- (when (boundp 'unicode-basic-translation-charset-order-list)
- (condition-case nil
- (let ((val (delq
- 'ascii
- (copy-sequence
- (symbol-value
- 'unicode-basic-translation-charset-order-list))))
- (elem (assq 'utf-8 mm-mime-mule-charset-alist)))
- (if elem
- (setcdr elem val)
- (setq mm-mime-mule-charset-alist
- (nconc mm-mime-mule-charset-alist
- (list (cons 'utf-8 val))))))
- (error))))
-
;; Correct by construction, but should be unnecessary for Emacs:
-(if (featurep 'xemacs)
- (eval-after-load "un-define" '(mm-enrich-utf-8-by-mule-ucs))
- (when (and (fboundp 'coding-system-list)
- (fboundp 'sort-coding-systems))
- (let ((css (sort-coding-systems (coding-system-list 'base-only)))
- cs mime mule alist)
- (while css
- (setq cs (pop css)
- mime (or (coding-system-get cs :mime-charset); Emacs 23 (unicode)
- (coding-system-get cs 'mime-charset)))
- (when (and mime
- (not (eq t (setq mule
- (coding-system-get cs 'safe-charsets))))
- (not (assq mime alist)))
- (push (cons mime (delq 'ascii mule)) alist)))
- (setq mm-mime-mule-charset-alist (nreverse alist)))))
+(when (and (fboundp 'coding-system-list)
+ (fboundp 'sort-coding-systems))
+ (let ((css (sort-coding-systems (coding-system-list 'base-only)))
+ cs mime mule alist)
+ (while css
+ (setq cs (pop css)
+ mime (or (coding-system-get cs :mime-charset) ; Emacs 23 (unicode)
+ (coding-system-get cs 'mime-charset)))
+ (when (and mime
+ (not (eq t (setq mule
+ (coding-system-get cs 'safe-charsets))))
+ (not (assq mime alist)))
+ (push (cons mime (delq 'ascii mule)) alist)))
+ (setq mm-mime-mule-charset-alist (nreverse alist))))
(defvar mm-hack-charsets '(iso-8859-15 iso-2022-jp-2)
"A list of special charsets.
"A table of the difference character between ISO-8859-X and ISO-8859-15.")
(defcustom mm-coding-system-priorities
- (let ((lang (if (boundp 'current-language-environment)
- (symbol-value 'current-language-environment))))
- (cond (;; XEmacs without Mule but with `file-coding'.
- (not lang) nil)
- ;; In XEmacs 21.5 it may be the one like "Japanese (UTF-8)".
- ((string-match "\\`Japanese" lang)
- ;; Japanese users prefer iso-2022-jp to others usually used
- ;; for `buffer-file-coding-system', however iso-8859-1 should
- ;; be used when there are only ASCII and Latin-1 characters.
- '(iso-8859-1 iso-2022-jp utf-8))))
+ (and (string-match "\\`Japanese" current-language-environment)
+ ;; Japanese users prefer iso-2022-jp to others usually used
+ ;; for `buffer-file-coding-system', however iso-8859-1 should
+ ;; be used when there are only ASCII and Latin-1 characters.
+ '(iso-8859-1 iso-2022-jp utf-8))
"Preferred coding systems for encoding outgoing messages.
More than one suitable coding system may be found for some text.
:group 'mime)
;; ??
-(defvar mm-use-find-coding-systems-region
- (fboundp 'find-coding-systems-region)
+(defvar mm-use-find-coding-systems-region t
"Use `find-coding-systems-region' to find proper coding systems.
Setting it to nil is useful on Emacsen supporting Unicode if sending
(defun mm-mule-charset-to-mime-charset (charset)
"Return the MIME charset corresponding to the given Mule CHARSET."
- (if (and (fboundp 'find-coding-systems-for-charsets)
- (fboundp 'sort-coding-systems))
- (let ((css (sort (sort-coding-systems
- (find-coding-systems-for-charsets (list charset)))
- 'mm-sort-coding-systems-predicate))
- cs mime)
- (while (and (not mime)
- css)
- (when (setq cs (pop css))
- (setq mime (or (coding-system-get cs :mime-charset)
- (coding-system-get cs 'mime-charset)))))
- mime)
- (let ((alist (mapcar (lambda (cs)
- (assq cs mm-mime-mule-charset-alist))
- (sort (mapcar 'car mm-mime-mule-charset-alist)
- 'mm-sort-coding-systems-predicate)))
- out)
- (while alist
- (when (memq charset (cdar alist))
- (setq out (caar alist)
- alist nil))
- (pop alist))
- out)))
-
-(eval-and-compile
- (if (featurep 'xemacs)
- (defalias 'mm-enable-multibyte 'ignore)
- (defun mm-enable-multibyte ()
- "Set the multibyte flag of the current buffer.
+ (let ((css (sort (sort-coding-systems
+ (find-coding-systems-for-charsets (list charset)))
+ 'mm-sort-coding-systems-predicate))
+ cs mime)
+ (while (and (not mime)
+ css)
+ (when (setq cs (pop css))
+ (setq mime (or (coding-system-get cs :mime-charset)
+ (coding-system-get cs 'mime-charset)))))
+ mime))
+
+(defun mm-enable-multibyte ()
+ "Set the multibyte flag of the current buffer.
Only do this if the default value of `enable-multibyte-characters' is
-non-nil. This is a no-op in XEmacs."
- (set-buffer-multibyte 'to)))
+non-nil."
+ (set-buffer-multibyte 'to))
- (if (featurep 'xemacs)
- (defalias 'mm-disable-multibyte 'ignore)
- (defun mm-disable-multibyte ()
- "Unset the multibyte flag of in the current buffer.
-This is a no-op in XEmacs."
- (set-buffer-multibyte nil))))
+(defun mm-disable-multibyte ()
+ "Unset the multibyte flag of in the current buffer."
+ (set-buffer-multibyte nil))
(defun mm-preferred-coding-system (charset)
;; A typo in some Emacs versions.
mail-parse-mule-charset ;; cached mule-charset
(progn
(setq mail-parse-mule-charset
- (and (boundp 'current-language-environment)
- (car (last
+ (and (car (last
(assq 'charset
(assoc current-language-environment
language-info-alist))))))
(defun mm-charset-after (&optional pos)
"Return charset of a character in current buffer at position POS.
If POS is nil, it defaults to the current point.
-If POS is out of range, the value is nil.
-If the charset is `composition', return the actual one."
+If POS is out of range, the value is nil."
(let ((char (char-after pos)) charset)
- (if (< (mm-char-int char) 128)
+ (if (< char 128)
(setq charset 'ascii)
- ;; charset-after is fake in some Emacsen.
- (setq charset (and (fboundp 'char-charset) (char-charset char)))
- (if (eq charset 'composition) ; Mule 4
- (let ((p (or pos (point))))
- (cadr (find-charset-region p (1+ p))))
- (if (and charset (not (memq charset '(ascii eight-bit-control
- eight-bit-graphic))))
- charset
- (mm-guess-charset))))))
+ (setq charset (char-charset char))
+ (if (and charset (not (memq charset '(ascii eight-bit-control
+ eight-bit-graphic))))
+ charset
+ (mm-guess-charset)))))
(defun mm-mime-charset (charset)
"Return the MIME charset corresponding to the given Mule CHARSET."
- (if (eq charset 'unknown)
- (error "The message contains non-printable characters, please use attachment"))
- (if (and (fboundp 'coding-system-get) (fboundp 'get-charset-property))
- (or
- (and (mm-preferred-coding-system charset)
- (or (coding-system-get
- (mm-preferred-coding-system charset) :mime-charset)
- (coding-system-get
- (mm-preferred-coding-system charset) 'mime-charset)))
- (and (eq charset 'ascii)
- 'us-ascii)
- (mm-preferred-coding-system charset)
- (mm-mule-charset-to-mime-charset charset))
- ;; This is for XEmacs.
- (mm-mule-charset-to-mime-charset charset)))
-
-;; `delete-dups' is not available in XEmacs 21.4.
-(if (fboundp 'delete-dups)
- (defalias 'mm-delete-duplicates 'delete-dups)
- (defun mm-delete-duplicates (list)
- "Destructively remove `equal' duplicates from LIST.
-Store the result in LIST and return it. LIST must be a proper list.
-Of several `equal' occurrences of an element in LIST, the first
-one is kept.
-
-This is a compatibility function for Emacsen without `delete-dups'."
- ;; Code from `subr.el' in Emacs 22:
- (let ((tail list))
- (while tail
- (setcdr tail (delete (car tail) (cdr tail)))
- (setq tail (cdr tail))))
- list))
+ (when (eq charset 'unknown)
+ (error "The message contains non-printable characters, please use attachment"))
+ (or
+ (and (mm-preferred-coding-system charset)
+ (coding-system-get (mm-preferred-coding-system charset) 'mime-charset))
+ (and (eq charset 'ascii)
+ 'us-ascii)
+ (mm-preferred-coding-system charset)
+ (mm-mule-charset-to-mime-charset charset)))
;; Fixme: This is used in places when it should be testing the
-;; default multibyteness. See mm-default-multibyte-p.
-(eval-and-compile
- (if (and (not (featurep 'xemacs))
- (boundp 'enable-multibyte-characters))
- (defun mm-multibyte-p ()
- "Non-nil if multibyte is enabled in the current buffer."
- enable-multibyte-characters)
- (defun mm-multibyte-p () (featurep 'mule))))
-
-(defun mm-default-multibyte-p ()
- "Return non-nil if the session is multibyte.
-This affects whether coding conversion should be attempted generally."
- (if (featurep 'mule)
- (if (boundp 'enable-multibyte-characters)
- (default-value 'enable-multibyte-characters)
- t)))
+;; default multibyteness.
+(defun mm-multibyte-p ()
+ "Non-nil if multibyte is enabled in the current buffer."
+ enable-multibyte-characters)
(defun mm-iso-8859-x-to-15-region (&optional b e)
- (if (fboundp 'char-charset)
- (let (charset item c inconvertible)
- (save-restriction
- (if e (narrow-to-region b e))
- (goto-char (point-min))
- (skip-chars-forward "\0-\177")
- (while (not (eobp))
- (cond
- ((not (setq item (assq (char-charset (setq c (char-after)))
- mm-iso-8859-x-to-15-table)))
- (forward-char))
- ((memq c (cdr (cdr item)))
- (setq inconvertible t)
- (forward-char))
- (t
- (insert-before-markers (prog1 (+ c (car (cdr item)))
- (delete-char 1)))))
- (skip-chars-forward "\0-\177")))
- (not inconvertible))))
+ (let (charset item c inconvertible)
+ (save-restriction
+ (if e (narrow-to-region b e))
+ (goto-char (point-min))
+ (skip-chars-forward "\0-\177")
+ (while (not (eobp))
+ (cond
+ ((not (setq item (assq (char-charset (setq c (char-after)))
+ mm-iso-8859-x-to-15-table)))
+ (forward-char))
+ ((memq c (cdr (cdr item)))
+ (setq inconvertible t)
+ (forward-char))
+ (t
+ (insert-before-markers (prog1 (+ c (car (cdr item)))
+ (delete-char 1)))))
+ (skip-chars-forward "\0-\177")))
+ (not inconvertible)))
(defun mm-sort-coding-systems-predicate (a b)
(let ((priorities
(length (memq (coding-system-base b) priorities)))
t))))
-(declare-function latin-unity-massage-name "ext:latin-unity")
-(declare-function latin-unity-maybe-remap "ext:latin-unity")
-(declare-function latin-unity-representations-feasible-region "ext:latin-unity")
-(declare-function latin-unity-representations-present-region "ext:latin-unity")
-
-(defvar latin-unity-coding-systems)
-(defvar latin-unity-ucs-list)
-
-(defun mm-xemacs-find-mime-charset-1 (begin end)
- "Determine which MIME charset to use to send region as message.
-This uses the XEmacs-specific latin-unity package to better handle the
-case where identical characters from diverse ISO-8859-? character sets
-can be encoded using a single one of the corresponding coding systems.
-
-It treats `mm-coding-system-priorities' as the list of preferred
-coding systems; a useful example setting for this list in Western
-Europe would be (iso-8859-1 iso-8859-15 utf-8), which would default
-to the very standard Latin 1 coding system, and only move to coding
-systems that are less supported as is necessary to encode the
-characters that exist in the buffer.
-
-Latin Unity doesn't know about those non-ASCII Roman characters that
-are available in various East Asian character sets. As such, its
-behavior if you have a JIS 0212 LATIN SMALL LETTER A WITH ACUTE in a
-buffer and it can otherwise be encoded as Latin 1, won't be ideal.
-But this is very much a corner case, so don't worry about it."
- (let ((systems mm-coding-system-priorities) csets psets curset)
-
- ;; Load the Latin Unity library, if available.
- (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity"))
- (require 'latin-unity))
-
- ;; Now, can we use it?
- (if (featurep 'latin-unity)
- (progn
- (setq csets (latin-unity-representations-feasible-region begin end)
- psets (latin-unity-representations-present-region begin end))
-
- (catch 'done
-
- ;; Pass back the first coding system in the preferred list
- ;; that can encode the whole region.
- (dolist (curset systems)
- (setq curset (latin-unity-massage-name 'buffer-default curset))
-
- ;; If the coding system is a universal coding system, then
- ;; it can certainly encode all the characters in the region.
- (if (memq curset latin-unity-ucs-list)
- (throw 'done (list curset)))
-
- ;; If a coding system isn't universal, and isn't in
- ;; the list that latin unity knows about, we can't
- ;; decide whether to use it here. Leave that until later
- ;; in `mm-find-mime-charset-region' function, whence we
- ;; have been called.
- (unless (memq curset latin-unity-coding-systems)
- (throw 'done nil))
-
- ;; Right, we know about this coding system, and it may
- ;; conceivably be able to encode all the characters in
- ;; the region.
- (if (latin-unity-maybe-remap begin end curset csets psets t)
- (throw 'done (list curset))))
-
- ;; Can't encode using anything from the
- ;; `mm-coding-system-priorities' list.
- ;; Leave `mm-find-mime-charset' to do most of the work.
- nil))
-
- ;; Right, latin unity isn't available; let `mm-find-charset-region'
- ;; take its default action, which equally applies to GNU Emacs.
- nil)))
-
-(defmacro mm-xemacs-find-mime-charset (begin end)
- (when (featurep 'xemacs)
- `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end))))
-
-(declare-function mm-delete-duplicates "mm-util" (list))
-
(defun mm-find-mime-charset-region (b e &optional hack-charsets)
"Return the MIME charsets needed to encode the region between B and E.
nil means ASCII, a single-element list represents an appropriate MIME
(setq systems nil
charsets (list cs))))))
charsets))
- ;; If we're XEmacs, and some coding system is appropriate,
- ;; mm-xemacs-find-mime-charset will return an appropriate list.
- ;; Otherwise, we'll get nil, and the next setq will get invoked.
- (setq charsets (mm-xemacs-find-mime-charset b e))
-
- ;; Fixme: won't work for unibyte Emacs 23:
-
;; We're not multibyte, or a single coding system won't cover it.
(setq charsets
- (mm-delete-duplicates
+ (delete-dups
(mapcar 'mm-mime-charset
(delq 'ascii
(mm-find-charset-region b e))))))
(if (and (memq 'iso-2022-jp-2 charsets)
(memq 'iso-2022-jp-2 hack-charsets))
(setq charsets (delq 'iso-2022-jp charsets)))
- ;; Attempt to reduce the number of charsets if utf-8 is available.
- (if (and (featurep 'xemacs)
- (> (length charsets) 1)
- (mm-coding-system-p 'utf-8))
- (let ((mm-coding-system-priorities
- (cons 'utf-8 mm-coding-system-priorities)))
- (setq charsets
- (mm-delete-duplicates
- (mapcar 'mm-mime-charset
- (delq 'ascii
- (mm-find-charset-region b e)))))))
charsets))
(defmacro mm-with-unibyte-buffer (&rest forms)
(defmacro mm-with-unibyte-current-buffer (&rest forms)
"Evaluate FORMS with current buffer temporarily made unibyte.
-Equivalent to `progn' in XEmacs.
Note: We recommend not using this macro any more; there should be
better ways to do a similar thing. The previous version of this macro
evaluating FORMS but it is no longer done. So, some programs assuming
it if any may malfunction."
(declare (obsolete nil "25.1") (indent 0) (debug t))
- (if (featurep 'xemacs)
- `(progn ,@forms)
- (let ((multibyte (make-symbol "multibyte")))
- `(let ((,multibyte enable-multibyte-characters))
+ (let ((multibyte (make-symbol "multibyte")))
+ `(let ((,multibyte enable-multibyte-characters))
+ (when ,multibyte
+ (set-buffer-multibyte nil))
+ (prog1
+ (progn ,@forms)
(when ,multibyte
- (set-buffer-multibyte nil))
- (prog1
- (progn ,@forms)
- (when ,multibyte
- (set-buffer-multibyte t)))))))
+ (set-buffer-multibyte t))))))
(defun mm-find-charset-region (b e)
"Return a list of Emacs charsets in the region B to E."
(cond
- ((and (mm-multibyte-p)
- (fboundp 'find-charset-region))
+ ((mm-multibyte-p)
;; Remove composition since the base charsets have been included.
;; Remove eight-bit-*, treat them as ascii.
(let ((css (find-charset-region b e)))
- (dolist (cs
- '(composition eight-bit-control eight-bit-graphic control-1)
- css)
- (setq css (delq cs css)))))
+ (dolist (cs '(composition eight-bit-control eight-bit-graphic control-1))
+ (setq css (delq cs css)))
+ css))
(t
- ;; We are in a unibyte buffer or XEmacs non-mule, so we futz around a bit.
+ ;; We are in a unibyte buffer, so we futz around a bit.
(save-excursion
(save-restriction
(narrow-to-region b e)
(if (eobp)
'(ascii)
(let (charset)
- (setq charset
- (and (boundp 'current-language-environment)
- (car (last (assq 'charset
- (assoc current-language-environment
- language-info-alist))))))
+ (setq charset (car (last (assq 'charset
+ (assoc current-language-environment
+ language-info-alist)))))
(if (eq charset 'ascii) (setq charset nil))
(or charset
(setq charset
"Like `insert-file-contents', but only reads in the file.
A buffer may be modified in several ways after reading into the buffer due
to advanced Emacs features, such as file-name-handlers, format decoding,
-`find-file-hooks', etc.
+`find-file-hook', etc.
If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'.
- This function ensures that none of these modifications will take place."
+This function ensures that none of these modifications will take place."
(letf* ((format-alist nil)
(auto-mode-alist (if inhibit nil (mm-auto-mode-alist)))
((default-value 'major-mode) 'fundamental-mode)
(append mm-inhibit-file-name-handlers
inhibit-file-name-handlers)
inhibit-file-name-handlers))
- (ffh (if (boundp 'find-file-hook)
- 'find-file-hook
- 'find-file-hooks))
- (val (symbol-value ffh)))
- (set ffh nil)
- (unwind-protect
- (insert-file-contents filename visit beg end replace)
- (set ffh val))))
+ (find-file-hook nil))
+ (insert-file-contents filename visit beg end replace)))
(defun mm-append-to-file (start end filename &optional codesys inhibit)
"Append the contents of the region to the end of file FILENAME.
inhibit-file-name-handlers)))
(write-region start end filename append visit lockname)))
-(autoload 'gmm-write-region "gmm-utils")
-
-;; It is not a MIME function, but some MIME functions use it.
-(if (and (fboundp 'make-temp-file)
- (ignore-errors
- (let ((def (if (fboundp 'compiled-function-arglist) ;; XEmacs
- (eval (list 'compiled-function-arglist
- (symbol-function 'make-temp-file)))
- (require 'help-fns)
- (help-function-arglist 'make-temp-file t))))
- (and (>= (length def) 4)
- (eq (nth 3 def) 'suffix)))))
- (defalias 'mm-make-temp-file 'make-temp-file)
- ;; Stolen (and modified for XEmacs) from Emacs 22.
- (defun mm-make-temp-file (prefix &optional dir-flag suffix)
- "Create a temporary file.
-The returned file name (created by appending some random characters at the end
-of PREFIX, and expanding against `temporary-file-directory' if necessary),
-is guaranteed to point to a newly created empty file.
-You can then use `write-region' to write new data into the file.
-
-If DIR-FLAG is non-nil, create a new empty directory instead of a file.
-
-If SUFFIX is non-nil, add that at the end of the file name."
- (let ((umask (default-file-modes))
- file)
- (unwind-protect
- (progn
- ;; Create temp files with strict access rights. It's easy to
- ;; loosen them later, whereas it's impossible to close the
- ;; time-window of loose permissions otherwise.
- (set-default-file-modes 448)
- (while (condition-case err
- (progn
- (setq file
- (make-temp-name
- (expand-file-name
- prefix
- (if (fboundp 'temp-directory)
- ;; XEmacs
- (temp-directory)
- temporary-file-directory))))
- (if suffix
- (setq file (concat file suffix)))
- (if dir-flag
- (make-directory file)
- ;; NOTE: This is unsafe if Emacs 20
- ;; users and XEmacs users don't use
- ;; a secure temp directory.
- (gmm-write-region "" nil file nil 'silent
- nil 'excl))
- nil)
- (file-already-exists t)
- ;; The XEmacs version of `make-directory' issues
- ;; `file-error'.
- (file-error (or (and (featurep 'xemacs)
- (file-exists-p file))
- (signal (car err) (cdr err)))))
- ;; the file was somehow created by someone else between
- ;; `make-temp-name' and `write-region', let's try again.
- nil)
- file)
- ;; Reset the umask.
- (set-default-file-modes umask)))))
+(defalias 'mm-make-temp-file 'make-temp-file)
+(define-obsolete-function-alias 'mm-make-temp-file 'make-temp-file "25.2")
(defvar mm-image-load-path-cache nil)
result)))
;; Fixme: This doesn't look useful where it's used.
-(if (fboundp 'detect-coding-region)
- (defun mm-detect-coding-region (start end)
- "Like `detect-coding-region' except returning the best one."
- (let ((coding-systems
- (detect-coding-region start end)))
- (or (car-safe coding-systems)
- coding-systems)))
- (defun mm-detect-coding-region (start end)
- (let ((point (point)))
- (goto-char start)
- (skip-chars-forward "\0-\177" end)
- (prog1
- (if (eq (point) end) 'ascii (mm-guess-charset))
- (goto-char point)))))
+(defun mm-detect-coding-region (start end)
+ "Like `detect-coding-region' except returning the best one."
+ (let ((coding-systems (detect-coding-region start end)))
+ (or (car-safe coding-systems)
+ coding-systems)))
(declare-function mm-detect-coding-region "mm-util" (start end))
-(if (fboundp 'coding-system-get)
- (defun mm-detect-mime-charset-region (start end)
- "Detect MIME charset of the text in the region between START and END."
- (let ((cs (mm-detect-coding-region start end)))
- (or (coding-system-get cs :mime-charset)
- (coding-system-get cs 'mime-charset))))
- (defun mm-detect-mime-charset-region (start end)
- "Detect MIME charset of the text in the region between START and END."
- (let ((cs (mm-detect-coding-region start end)))
- cs)))
-
-(eval-when-compile
- (unless (fboundp 'coding-system-to-mime-charset)
- (defalias 'coding-system-to-mime-charset 'ignore)))
+(defun mm-detect-mime-charset-region (start end)
+ "Detect MIME charset of the text in the region between START and END."
+ (let ((cs (mm-detect-coding-region start end)))
+ (coding-system-get cs 'mime-charset)))
(defun mm-coding-system-to-mime-charset (coding-system)
- "Return the MIME charset corresponding to CODING-SYSTEM.
-To make this function work with XEmacs, the APEL package is required."
- (when coding-system
- (or (and (fboundp 'coding-system-get)
- (or (coding-system-get coding-system :mime-charset)
- (coding-system-get coding-system 'mime-charset)))
- (and (featurep 'xemacs)
- (or (and (fboundp 'coding-system-to-mime-charset)
- (not (eq (symbol-function 'coding-system-to-mime-charset)
- 'ignore)))
- (and (condition-case nil
- (require 'mcharset)
- (error nil))
- (fboundp 'coding-system-to-mime-charset)))
- (coding-system-to-mime-charset coding-system)))))
+ "Return the MIME charset corresponding to CODING-SYSTEM."
+ (and coding-system
+ (coding-system-get coding-system 'mime-charset)))
(defvar jka-compr-acceptable-retval-list)
(declare-function jka-compr-make-temp-name "jka-compr" (&optional local))
(message "%s" (or err-msg (concat msg "done")))
retval)))))
-(eval-when-compile
- (unless (fboundp 'coding-system-name)
- (defalias 'coding-system-name 'ignore))
- (unless (fboundp 'find-file-coding-system-for-read-from-filename)
- (defalias 'find-file-coding-system-for-read-from-filename 'ignore))
- (unless (fboundp 'find-operation-coding-system)
- (defalias 'find-operation-coding-system 'ignore)))
-
(defun mm-find-buffer-file-coding-system (&optional filename)
"Find coding system used to decode the contents of the current buffer.
This function looks for the coding system magic cookie or examines the
(setq filename (file-name-sans-extension filename)))
(goto-char (point-min))
(unwind-protect
- (cond
- ((boundp 'set-auto-coding-function) ;; Emacs
- (if filename
- (or (funcall (symbol-value 'set-auto-coding-function)
- filename (- (point-max) (point-min)))
- (car (find-operation-coding-system 'insert-file-contents
- filename)))
- (let (auto-coding-alist)
- (condition-case nil
- (funcall (symbol-value 'set-auto-coding-function)
- nil (- (point-max) (point-min)))
- (error nil)))))
- ((and (featurep 'xemacs) (featurep 'file-coding)) ;; XEmacs
- (let ((case-fold-search t)
- (end (point-at-eol))
- codesys start)
- (or
- (and (re-search-forward "-\\*-+[\t ]*" end t)
- (progn
- (setq start (match-end 0))
- (re-search-forward "[\t ]*-+\\*-" end t))
- (progn
- (setq end (match-beginning 0))
- (goto-char start)
- (or (looking-at "coding:[\t ]*\\([^\t ;]+\\)")
- (re-search-forward
- "[\t ;]+coding:[\t ]*\\([^\t ;]+\\)"
- end t)))
- (find-coding-system (setq codesys
- (intern (match-string 1))))
- codesys)
- (and (re-search-forward "^[\t ]*;+[\t ]*Local[\t ]+Variables:"
- nil t)
- (progn
- (setq start (match-end 0))
- (re-search-forward "^[\t ]*;+[\t ]*End:" nil t))
- (progn
- (setq end (match-beginning 0))
- (goto-char start)
- (re-search-forward
- "^[\t ]*;+[\t ]*coding:[\t ]*\\([^\t\n\r ]+\\)"
- end t))
- (find-coding-system (setq codesys
- (intern (match-string 1))))
- codesys)
- (and (progn
- (goto-char (point-min))
- (setq case-fold-search nil)
- (re-search-forward "^;;;coding system: "
- ;;(+ (point-min) 3000) t))
- nil t))
- (looking-at "[^\t\n\r ]+")
- (find-coding-system
- (setq codesys (intern (match-string 0))))
- codesys)
- (and filename
- (setq codesys
- (find-file-coding-system-for-read-from-filename
- filename))
- (coding-system-name (coding-system-base codesys)))))))
+ (if filename
+ (or (funcall (symbol-value 'set-auto-coding-function)
+ filename (- (point-max) (point-min)))
+ (car (find-operation-coding-system 'insert-file-contents
+ filename)))
+ (let (auto-coding-alist)
+ (condition-case nil
+ (funcall (symbol-value 'set-auto-coding-function)
+ nil (- (point-max) (point-min)))
+ (error nil))))
(when decomp
(kill-buffer (current-buffer)))))))
(defsubst mm-uu-function-2 (entry)
(nth 5 entry))
-;; In Emacs 22, we could use `min-colors' in the face definition. But Emacs
-;; 21 and XEmacs don't support it.
-(defcustom mm-uu-hide-markers
- (< 16 (or (and (fboundp 'defined-colors)
- (length (defined-colors)))
- (and (fboundp 'device-color-cells)
- (device-color-cells))
- 0))
+(defcustom mm-uu-hide-markers (< 16 (length (defined-colors)))
"If non-nil, hide verbatim markers.
The value should be nil on displays where the face
`mm-uu-extract' isn't distinguishable to the face `default'."
see `set-text-properties'. If PROPERTIES equals t, this means to
apply the face `mm-uu-extract'."
(let ((obuf (current-buffer))
- (multi (and (boundp 'enable-multibyte-characters)
- enable-multibyte-characters))
- (coding-system
- ;; Might not exist in non-MULE XEmacs
- (when (boundp 'buffer-file-coding-system)
- buffer-file-coding-system)))
+ (multi enable-multibyte-characters)
+ (coding-system buffer-file-coding-system))
(with-current-buffer (generate-new-buffer " *mm-uu*")
(if multi (mm-enable-multibyte) (mm-disable-multibyte))
(setq buffer-file-coding-system coding-system)
(interactive)
(if symbol (set-default symbol value))
(setq mm-uu-beginning-regexp nil)
- (mapcar (lambda (entry)
- (if (mm-uu-configure-p (mm-uu-type entry) 'disabled)
+ (mapcar (lambda (mm-uu-entry)
+ (if (mm-uu-configure-p (mm-uu-type mm-uu-entry) 'disabled)
nil
(setq mm-uu-beginning-regexp
(concat mm-uu-beginning-regexp
(if mm-uu-beginning-regexp "\\|")
- (mm-uu-beginning-regexp entry)))))
+ (mm-uu-beginning-regexp mm-uu-entry)))))
mm-uu-type-alist))
(mm-uu-configure)
(defvar file-name)
(defvar start-point)
(defvar end-point)
-(defvar entry)
+(defvar mm-uu-entry)
(defun mm-uu-uu-filename ()
(if (looking-at ".+")
(when (and mml2015-use (null (mml2015-clear-verify-function)))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-details
- (gnus-format-message
+ (format-message
"Clear verification not supported by `%s'.\n" mml2015-use)))
(mml2015-extract-cleartext-signature))
(list (mm-make-handle buf mm-uu-text-plain-type)))))
(not (eq charset 'ascii)))
;; Assume that buffer's multibyteness is turned off.
;; See `mml2015-pgg-clear-decrypt'.
- (insert (mm-decode-coding-string (prog1
- (buffer-string)
- (erase-buffer)
- (mm-enable-multibyte))
- charset))
+ (insert (decode-coding-string (prog1
+ (buffer-string)
+ (erase-buffer)
+ (mm-enable-multibyte))
+ charset))
(mm-enable-multibyte))
(list (mm-make-handle buf mm-uu-text-plain-type)))
(list (mm-make-handle buf '("application/pgp-encrypted")))))))
(defun mm-uu-gpg-key-skip-to-last ()
(let ((point (point))
- (end-regexp (mm-uu-end-regexp entry))
- (beginning-regexp (mm-uu-beginning-regexp entry)))
+ (end-regexp (mm-uu-end-regexp mm-uu-entry))
+ (beginning-regexp (mm-uu-beginning-regexp mm-uu-entry)))
(when (and end-regexp
- (not (mm-uu-configure-p (mm-uu-type entry) 'disabled)))
+ (not (mm-uu-configure-p (mm-uu-type mm-uu-entry) 'disabled)))
(while (re-search-forward end-regexp nil t)
(skip-chars-forward " \t\n\r")
(if (looking-at beginning-regexp)
(require 'mml-smime)
(autoload 'gnus-completing-read "gnus-util")
-(autoload 'gnus-window-inside-pixel-edges "gnus-ems")
(autoload 'gnus-article-prepare-display "gnus-art")
(autoload 'vcard-parse-string "vcard")
(autoload 'vcard-format-string "vcard")
(autoload 'gnus-rescale-image "gnus-util")
-(defun mm-inline-image-emacs (handle)
+(defun mm-inline-image (handle)
(let ((b (point-marker))
(inhibit-read-only t))
(put-image
(if (eq mm-inline-large-images 'resize)
(gnus-rescale-image
image
- (let ((edges (gnus-window-inside-pixel-edges
+ (let ((edges (window-inside-pixel-edges
(get-buffer-window (current-buffer)))))
(cons (truncate (* mm-inline-large-images-proportion
(- (nth 2 edges) (nth 0 edges))))
(remove-images b b)
(delete-region b (1+ b)))))))
-(defun mm-inline-image-xemacs (handle)
- (when (featurep 'xemacs)
- (insert "\n")
- (forward-char -1)
- (let ((annot (make-annotation (mm-get-image handle) nil 'text))
- (inhibit-read-only t))
- (mm-handle-set-undisplayer
- handle
- `(lambda ()
- (let ((b ,(point-marker))
- (inhibit-read-only t))
- (delete-annotation ,annot)
- (delete-region (1- b) b))))
- (set-extent-property annot 'mm t)
- (set-extent-property annot 'duplicable t))))
-
-(eval-and-compile
- (if (featurep 'xemacs)
- (defalias 'mm-inline-image 'mm-inline-image-xemacs)
- (defalias 'mm-inline-image 'mm-inline-image-emacs)))
-
(defvar mm-w3m-setup nil
"Whether gnus-article-mode has been setup to use emacs-w3m.")
(delete-region ,(point-min-marker)
,(point-max-marker)))))))))
-(defvar mm-w3m-standalone-supports-m17n-p (if (featurep 'mule) 'undecided)
+(defvar mm-w3m-standalone-supports-m17n-p 'undecided
"*T means the w3m command supports the m17n feature.")
(defun mm-w3m-standalone-supports-m17n-p ()
"Say whether the w3m command supports the m17n feature."
(cond ((eq mm-w3m-standalone-supports-m17n-p t) t)
((eq mm-w3m-standalone-supports-m17n-p nil) nil)
- ((not (featurep 'mule)) (setq mm-w3m-standalone-supports-m17n-p nil))
((condition-case nil
(let ((coding-system-for-write 'iso-2022-jp)
(coding-system-for-read 'iso-2022-jp)
- (str (mm-decode-coding-string "\
+ (str (decode-coding-string "\
\e$B#D#o#e#s!!#w#3#m!!#s#u#p#p#o#r#t!!#m#1#7#n!)\e(B" 'iso-2022-jp)))
(mm-with-multibyte-buffer
(insert str)
(delete-region (match-beginning 0) (match-end 0))))
(defun mm-inline-wash-with-file (post-func cmd &rest args)
- (let ((file (mm-make-temp-file
+ (let ((file (make-temp-file
(expand-file-name "mm" mm-tmp-directory))))
(let ((coding-system-for-write 'binary))
(write-region (point-min) (point-max) file nil 'silent))
handle
`(lambda ()
(let ((inhibit-read-only t))
- (if (fboundp 'remove-specifier)
- ;; This is only valid on XEmacs.
- (dolist (prop '(background background-pixmap foreground))
- (remove-specifier
- (face-property 'default prop) (current-buffer))))
(delete-region ,(point-min-marker) ,(point-max-marker)))))))))
;; Shut up byte-compiler.
(unless charset
(setq coding-system (mm-find-buffer-file-coding-system)))
(setq text (buffer-string))))
- ;; XEmacs @#$@ version of font-lock refuses to fully turn itself
- ;; on for buffers whose name begins with " ". That's why we use
- ;; `with-current-buffer'/`generate-new-buffer' rather than
- ;; `with-temp-buffer'.
- (with-current-buffer (generate-new-buffer "*fontification*")
+ (with-temp-buffer
(buffer-disable-undo)
(mm-enable-multibyte)
(insert (cond ((eq charset 'gnus-decoded)
(with-current-buffer (mm-handle-buffer handle)
(buffer-string)))
(coding-system
- (mm-decode-coding-string text coding-system))
+ (decode-coding-string text coding-system))
(charset
(mm-decode-string text charset))
(t
;; Do not fontify if the guess mode is fundamental.
(unless (or font-lock-mode
(eq major-mode 'fundamental-mode))
- (if (fboundp 'font-lock-ensure)
- (font-lock-ensure)
- (font-lock-fontify-buffer)))))
- ;; By default, XEmacs font-lock uses non-duplicable text
- ;; properties. This code forces all the text properties
- ;; to be copied along with the text.
- (when (featurep 'xemacs)
- (map-extents (lambda (ext ignored)
- (set-extent-property ext 'duplicable t)
- nil)
- nil nil nil nil nil 'text-prop))
+ (font-lock-ensure))))
(setq text (buffer-string))
;; Set buffer unmodified to avoid confirmation when killing the
;; buffer.
- (set-buffer-modified-p nil)
- (kill-buffer (current-buffer)))
+ (set-buffer-modified-p nil))
(mm-insert-inline handle text)))
;; Shouldn't these functions check whether the user even wants to use
-;; font-lock? At least under XEmacs, this fontification is pretty
-;; much unconditional. Also, it would be nice to change for the size
-;; of the fontified region.
+;; font-lock? Also, it would be nice to change for the size of the
+;; fontified region.
(defun mm-display-patch-inline (handle)
(mm-display-inline-fontify handle 'diff-mode))
(require 'gnus-util)
(require 'epg)
+(require 'epa)
(require 'password-cache)
(require 'mm-encode)
(autoload 'mml-smime-verify "mml-smime")
(autoload 'mml-smime-verify-test "mml-smime")
(autoload 'epa--select-keys "epa")
+(autoload 'message-options-get "message")
+(autoload 'message-options-set "message")
(declare-function message-options-set "message" (symbol value))
(let* ((usage-prefs (mml-secure-cust-usage-lookup context usage))
(curr-fprs (cdr (assoc name (cdr usage-prefs))))
(key-fprs (mapcar 'mml-secure-fingerprint keys))
- (new-fprs (gnus-union curr-fprs key-fprs :test 'equal)))
+ (new-fprs (cl-union curr-fprs key-fprs :test 'equal)))
(if curr-fprs
(setcdr (assoc name (cdr usage-prefs)) new-fprs)
(setcdr usage-prefs (cons (cons name new-fprs) (cdr usage-prefs))))
The passphrase is read and cached."
;; Based on mml2015-epg-passphrase-callback.
(if (eq key-id 'SYM)
- (epg-passphrase-callback-function context key-id nil)
+ (epa-passphrase-callback-function context key-id nil)
(let* ((password-cache-key-id
(if (eq key-id 'PIN)
"PIN"
;; In contrast, signing requires secret key.
(mml-secure-secret-key-exists-p context subkey))
(or (not fingerprint)
- (gnus-string-match-p (concat fingerprint "$") fpr)
- (gnus-string-match-p (concat fingerprint "$")
- (epg-sub-key-fingerprint subkey))))
+ (string-match-p (concat fingerprint "$") fpr)
+ (string-match-p (concat fingerprint "$")
+ (epg-sub-key-fingerprint subkey))))
(throw 'break t)))))))
(defun mml-secure-find-usable-keys (context name usage &optional justone)
cipher signers)
(when sign
(setq signers (mml-secure-signers context signer-names))
- (epg-context-set-signers context signers))
+ (setf (epg-context-signers context) signers))
(when (eq 'OpenPGP protocol)
- (epg-context-set-armor context t)
- (epg-context-set-textmode context t))
+ (setf (epg-context-armor context) t)
+ (setf (epg-context-textmode context) t))
(when (mml-secure-cache-passphrase-p protocol)
(epg-context-set-passphrase-callback
context
(signers (mml-secure-signers context signer-names))
signature micalg)
(when (eq 'OpenPGP protocol)
- (epg-context-set-armor context t)
- (epg-context-set-textmode context t))
- (epg-context-set-signers context signers)
+ (setf (epg-context-armor context) t)
+ (setf (epg-context-textmode context) t))
+ (setf (epg-context-signers context) signers)
(when (mml-secure-cache-passphrase-p protocol)
(epg-context-set-passphrase-callback
context
(if (eq 'OpenPGP protocol)
(epg-sign-string context (buffer-string) mode)
(epg-sign-string context
- (mm-replace-in-string (buffer-string)
- "\n" "\r\n") t))
+ (replace-regexp-in-string
+ "\n" "\r\n" (buffer-string))
+ t))
mml-secure-secret-key-id-list nil)
(error
(mml-secure-clear-secret-key-id-list)
(autoload 'message-narrow-to-headers "message")
(autoload 'message-fetch-field "message")
-;; Prefer epg over openssl if it is available as epg uses GnuPG's gpgsm,
+;; Prefer epg over openssl as epg uses GnuPG's gpgsm,
;; which features full-fledged certificate management, while openssl requires
;; major manual efforts for certificate revocation and expiry and has bugs
;; as documented under man smime(1).
-(ignore-errors (require 'epg))
+(require 'epg)
-(defcustom mml-smime-use (if (featurep 'epg) 'epg 'openssl)
+(defcustom mml-smime-use 'epg
"Whether to use OpenSSL or EasyPG (EPG) to handle S/MIME messages.
-Defaults to EPG if it's available.
-If you think about using OpenSSL, please read the BUGS section in the manual
-for the `smime' command coming with OpenSSL first. EasyPG is recommended."
+If you're thinking about using OpenSSL, please first read the BUGS section
+in the manual for the `smime' command that comes with OpenSSL.
+We recommend EasyPG."
:group 'mime-security
:type '(choice (const :tag "EPG" epg)
(const :tag "OpenSSL" openssl)))
(if (not (and (not (file-exists-p tmp))
(get-buffer tmp)))
(push tmp certfiles)
- (setq file (mm-make-temp-file (expand-file-name "mml."
- mm-tmp-directory)))
+ (setq file (make-temp-file (expand-file-name "mml." mm-tmp-directory)))
(with-current-buffer tmp
(write-region (point-min) (point-max) file))
(push file certfiles)
(list 'keyfile
(if (= (length smime-keys) 1)
(cadar smime-keys)
- (or (let ((from (cadr (funcall (if (boundp
- 'gnus-extract-address-components)
- gnus-extract-address-components
- 'mail-extract-address-components)
- (or (save-excursion
- (save-restriction
- (message-narrow-to-headers)
- (message-fetch-field "from")))
- "")))))
+ (or (let ((from (cadr (mail-extract-address-components
+ (or (save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (message-fetch-field "from")))
+ "")))))
(and from (smime-get-key-by-email from)))
(smime-get-key-by-email
(gnus-completing-read "Sign this part with what signature"
(while (not result)
(setq who (read-from-minibuffer
(format "%sLookup certificate for: " (or bad ""))
- (cadr (funcall (if (boundp
- 'gnus-extract-address-components)
- gnus-extract-address-components
- 'mail-extract-address-components)
- (or (save-excursion
- (save-restriction
- (message-narrow-to-headers)
- (message-fetch-field "to")))
- "")))))
+ (cadr (mail-extract-address-components
+ (or (save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (message-fetch-field "to")))
+ "")))))
(if (setq cert (smime-cert-by-dns who))
(setq result (list 'certfile (buffer-name cert)))
- (setq bad (gnus-format-message "`%s' not found. " who))))
+ (setq bad (format-message "`%s' not found. " who))))
(quit))
result))
"")))))
(if (setq cert (smime-cert-by-ldap who))
(setq result (list 'certfile (buffer-name cert)))
- (setq bad (gnus-format-message "`%s' not found. " who))))
+ (setq bad (format-message "`%s' not found. " who))))
(quit))
result))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info "Corrupted")
(throw 'error handle))
- (setq part (mm-replace-in-string part "\n" "\r\n")
+ (setq part (replace-regexp-in-string "\n" "\r\n" part)
context (epg-make-context 'CMS))
(condition-case error
(setq plain (epg-verify-string context (mm-get-part signature) part))
(require 'mml-sec)
(eval-when-compile (require 'cl))
(eval-when-compile (require 'url))
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'easy-mmode))) ; for `define-minor-mode'
(autoload 'message-make-message-id "message")
(declare-function gnus-setup-posting-charset "gnus-msg" (group))
-(autoload 'gnus-make-local-hook "gnus-util")
(autoload 'gnus-completing-read "gnus-util")
(autoload 'message-fetch-field "message")
(autoload 'message-mark-active-p "message")
(autoload 'message-mail-p "message")
(defvar gnus-article-mime-handles)
-(defvar gnus-mouse-2)
(defvar gnus-newsrc-hashtb)
(defvar message-default-charset)
(defvar message-deletable-headers)
(let ((mm-coding-system-priorities
(cons 'utf-8 mm-coding-system-priorities)))
(setq charset (mm-encode-body))))
+ (mm-disable-multibyte)
(setq encoding (mm-body-encoding
charset (cdr (assq 'encoding cont))))))
(setq coded (buffer-string)))
(mm-with-unibyte-buffer
(cond
((cdr (assq 'buffer cont))
- (insert (mm-string-as-unibyte
+ (insert (string-as-unibyte
(with-current-buffer (cdr (assq 'buffer cont))
(buffer-string)))))
((and filename
filename)))))
(t
(let ((contents (cdr (assq 'contents cont))))
- (if (if (featurep 'xemacs)
- (string-match "[^\000-\377]" contents)
- (mm-multibyte-string-p contents))
+ (if (multibyte-string-p contents)
(progn
(mm-enable-multibyte)
(insert contents)
(if (setq encoding (cdr (assq 'encoding cont)))
(setq encoding (intern (downcase encoding))))
(setq encoding (mm-encode-buffer type encoding)
- coded (mm-string-as-multibyte (buffer-string))))
+ coded (string-as-multibyte (buffer-string))))
(mml-insert-mime-headers cont type charset encoding nil)
(insert "\n" coded))))
((eq (car cont) 'external)
(easy-menu-define
mml-menu mml-mode-map ""
`("Attachments"
- ["Attach File..." mml-attach-file
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Attach a file at point"))]
+ ["Attach File..." mml-attach-file :help "Attach a file at point"]
["Attach Buffer..." mml-attach-buffer
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Attach a buffer to the outgoing message"))]
+ :help "Attach a buffer to the outgoing message"]
["Attach External..." mml-attach-external
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Attach reference to an external file"))]
+ :help "Attach reference to an external file"]
;; FIXME: Is it possible to do this without using
;; `gnus-gcc-externalize-attachments'?
["Externalize Attachments"
(lambda ()
(interactive)
- (if (not (and (boundp 'gnus-gcc-externalize-attachments)
- (memq gnus-gcc-externalize-attachments
- '(all t nil))))
- ;; Stupid workaround for XEmacs not honoring :visible.
- (message "Can't handle this value of `gnus-gcc-externalize-attachments'")
- (setq gnus-gcc-externalize-attachments
- (not gnus-gcc-externalize-attachments))
- (message "gnus-gcc-externalize-attachments is `%s'."
- gnus-gcc-externalize-attachments)))
- ;; XEmacs barfs on :visible.
- ,@(if (featurep 'xemacs) nil
- '(:visible (and (boundp 'gnus-gcc-externalize-attachments)
- (memq gnus-gcc-externalize-attachments
- '(all t nil)))))
+ (setq gnus-gcc-externalize-attachments
+ (not gnus-gcc-externalize-attachments))
+ (message "gnus-gcc-externalize-attachments is `%s'."
+ gnus-gcc-externalize-attachments))
+ :visible (and (boundp 'gnus-gcc-externalize-attachments)
+ (memq gnus-gcc-externalize-attachments
+ '(all t nil)))
:style toggle
:selected gnus-gcc-externalize-attachments
- ,@(if (featurep 'xemacs) nil
- '(:help "Save attachments as external parts in Gcc copies"))]
+ :help "Save attachments as external parts in Gcc copies"]
"----"
;;
("Change Security Method"
["PGP/MIME"
(lambda () (interactive) (setq mml-secure-method "pgpmime"))
- ,@(if (featurep 'xemacs) nil
- '(:help "Set Security Method to PGP/MIME"))
+ :help "Set Security Method to PGP/MIME"
:style radio
:selected (equal mml-secure-method "pgpmime") ]
["S/MIME"
(lambda () (interactive) (setq mml-secure-method "smime"))
- ,@(if (featurep 'xemacs) nil
- '(:help "Set Security Method to S/MIME"))
+ :help "Set Security Method to S/MIME"
:style radio
:selected (equal mml-secure-method "smime") ]
["Inline PGP"
(lambda () (interactive) (setq mml-secure-method "pgp"))
- ,@(if (featurep 'xemacs) nil
- '(:help "Set Security Method to inline PGP"))
+ :help "Set Security Method to inline PGP"
:style radio
:selected (equal mml-secure-method "pgp") ] )
;;
["Encrypt Message" mml-secure-message-encrypt t]
["Sign and Encrypt Message" mml-secure-message-sign-encrypt t]
["Encrypt/Sign off" mml-unsecure-message
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Don't Encrypt/Sign Message"))]
+ :help "Don't Encrypt/Sign Message"]
;; Do we have separate encrypt and encrypt/sign commands for parts?
["Sign Part" mml-secure-sign t]
["Encrypt Part" mml-secure-encrypt t]
;;["Narrow" mml-narrow-to-part t]
["Quote MML in region" mml-quote-region
:active (message-mark-active-p)
- ,@(if (featurep 'xemacs) nil
- '(:help "Quote MML tags in region"))]
+ :help "Quote MML tags in region"]
["Validate MML" mml-validate t]
["Preview" mml-preview t]
"----"
["Emacs MIME manual" (lambda () (interactive) (message-info 4))
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Display the Emacs MIME manual"))]
+ :help "Display the Emacs MIME manual"]
["PGG manual" (lambda () (interactive) (message-info mml2015-use))
- ;; XEmacs barfs on :visible.
- ,@(if (featurep 'xemacs) nil
- '(:visible (and (boundp 'mml2015-use) (equal mml2015-use 'pgg))))
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Display the PGG manual"))]
+ :visible (and (boundp 'mml2015-use) (equal mml2015-use 'pgg))
+ :help "Display the PGG manual"]
["EasyPG manual" (lambda () (interactive) (require 'mml2015) (message-info mml2015-use))
- ;; XEmacs barfs on :visible.
- ,@(if (featurep 'xemacs) nil
- '(:visible (and (boundp 'mml2015-use) (equal mml2015-use 'epg))))
- ,@(if (featurep 'xemacs) '(t)
- '(:help "Display the EasyPG manual"))]))
+ :visible (and (boundp 'mml2015-use) (equal mml2015-use 'epg))
+ :help "Display the EasyPG manual"]))
(define-minor-mode mml-mode
"Minor mode for editing MML.
'type type
;; icicles redefines read-file-name and returns a
;; string w/ text properties :-/
- 'filename (mm-substring-no-properties file)
+ 'filename (substring-no-properties file)
'disposition (or disposition "attachment")
'description description)
;; When using Mail mode, make sure it does the mime encoding
(message-sort-headers)
(mml-to-mime))
(if raw
- (when (fboundp 'set-buffer-multibyte)
- (let ((s (buffer-string)))
- ;; Insert the content into unibyte buffer.
- (erase-buffer)
- (mm-disable-multibyte)
- (insert s)))
+ (let ((s (buffer-string)))
+ ;; Insert the content into unibyte buffer.
+ (erase-buffer)
+ (mm-disable-multibyte)
+ (insert s))
(let ((gnus-newsgroup-charset (car message-posting-charset))
gnus-article-prepare-hook gnus-original-article-buffer
gnus-displaying-mime)
(gnus-article-prepare-display))))
;; Disable article-mode-map.
(use-local-map nil)
- (gnus-make-local-hook 'kill-buffer-hook)
(add-hook 'kill-buffer-hook
(lambda ()
(mm-destroy-parts gnus-article-mime-handles)) nil t)
(lambda ()
(interactive)
(widget-button-press (point))))
- (local-set-key gnus-mouse-2
+ (local-set-key [mouse-2]
(lambda (event)
(interactive "@e")
(widget-button-press (widget-event-point event) event)))
;; FIXME: Buffer is in article mode, but most tool bar commands won't
;; work. Maybe only keep the following icons: search, print, quit
(goto-char (point-min))))
- (if (and (not (mm-special-display-p (buffer-name mml-preview-buffer)))
+ (if (and (not (special-display-p (buffer-name mml-preview-buffer)))
(boundp 'gnus-buffer-configuration)
(assq 'mml-preview gnus-buffer-configuration))
(let ((gnus-message-buffer (current-buffer)))
(pop-to-buffer pgg-errors-buffer)
(error "Encrypt error"))
(delete-region (point-min) (point-max))
- (mm-with-unibyte-current-buffer
- (insert-buffer-substring pgg-output-buffer)
- (goto-char (point-min))
- (while (re-search-forward "\r+$" nil t)
- (replace-match "" t t))
- (when cte
- (mm-encode-content-transfer-encoding cte))
- (goto-char (point-min))
- (when headers
- (insert headers))
- (insert "\n"))
+ (insert
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert-buffer-substring pgg-output-buffer)
+ (goto-char (point-min))
+ (while (re-search-forward "\r+$" nil t)
+ (replace-match "" t t))
+ (when cte
+ (mm-encode-content-transfer-encoding cte))
+ (goto-char (point-min))
+ (when headers
+ (insert headers))
+ (insert "\n")
+ (buffer-string)))
t))
(defun mml1991-pgg-encrypt (cont &optional sign)
(let* ((pair (mml-secure-epg-sign 'OpenPGP 'clear))
(signature (car pair)))
(delete-region (point-min) (point-max))
- (mm-with-unibyte-current-buffer
- (insert signature)
- (goto-char (point-min))
- (while (re-search-forward "\r+$" nil t)
- (replace-match "" t t))
- (when cte
- (mm-encode-content-transfer-encoding cte))
- (goto-char (point-min))
- (when headers
- (insert headers))
- (insert "\n"))
+ (insert
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert signature)
+ (goto-char (point-min))
+ (while (re-search-forward "\r+$" nil t)
+ (replace-match "" t t))
+ (when cte
+ (mm-encode-content-transfer-encoding cte))
+ (goto-char (point-min))
+ (when headers
+ (insert headers))
+ (insert "\n")
+ (buffer-string)))
t)))
(defun mml1991-epg-encrypt (cont &optional sign)
(require 'mm-util)
(require 'mml)
(require 'mml-sec)
+(require 'epg-config)
(defvar mc-pgp-always-sign)
;; Maybe this should be in eg mml-sec.el (and have a different name).
;; Then mml1991 would not need to require mml2015, and mml1991-use
;; could be removed.
-(defvar mml2015-use (or
- (progn
- (ignore-errors (require 'epg-config))
- (and (fboundp 'epg-check-configuration)
- 'epg))
- (progn
- (let ((abs-file (locate-library "pgg")))
- ;; Don't load PGG if it is marked as obsolete
- ;; (Emacs 24).
- (when (and abs-file
- (not (string-match "/obsolete/[^/]*\\'"
- abs-file)))
- (ignore-errors (require 'pgg))
- (and (fboundp 'pgg-sign-region)
- 'pgg))))
- (progn (ignore-errors
- (load "mc-toplev"))
- (and (fboundp 'mc-encrypt-generic)
- (fboundp 'mc-sign-generic)
- (fboundp 'mc-cleanup-recipient-headers)
- 'mailcrypt)))
+(defvar mml2015-use 'epg
"The package used for PGP/MIME.
Valid packages include `epg', `pgg' and `mailcrypt'.")
(or (y-or-n-p "Sign the message? ")
'not))))
'never)))
- (mm-with-unibyte-current-buffer
- (mc-encrypt-generic
- (or (message-options-get 'message-recipients)
- (message-options-set 'message-recipients
- (mc-cleanup-recipient-headers
- (read-string "Recipients: "))))
- nil nil nil
- (message-options-get 'message-sender))))
+ (insert
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (mc-encrypt-generic
+ (or (message-options-get 'message-recipients)
+ (message-options-set 'message-recipients
+ (mc-cleanup-recipient-headers
+ (read-string "Recipients: "))))
+ nil nil nil
+ (message-options-get 'message-sender))
+ (buffer-string))))
(goto-char (point-min))
(unless (looking-at "-----BEGIN PGP MESSAGE-----")
(error "Fail to encrypt the message"))
(insert "\r"))
(forward-line)
(end-of-line))
- (with-temp-file (setq signature-file (mm-make-temp-file "pgg"))
+ (with-temp-file (setq signature-file (make-temp-file "pgg"))
(mm-insert-part signature))
(if (condition-case err
(prog1
(if (condition-case err
(prog1
(mm-with-unibyte-buffer
- (insert (mm-encode-coding-string text coding-system))
+ (insert (encode-coding-string text coding-system))
(pgg-verify-region (point-min) (point-max) nil t))
(goto-char (point-min))
(while (search-forward "\r\n" nil t)
(autoload 'epg-expand-group "epg-config")
(autoload 'epa-select-keys "epa")
-(autoload 'gnus-create-image "gnus-ems")
-
(defun mml2015-epg-key-image (key-id)
"Return the image of a key, if any"
(with-temp-buffer
- (mm-set-buffer-multibyte nil)
+ (set-buffer-multibyte nil)
(let* ((coding-system-for-write 'binary)
(coding-system-for-read 'binary)
(data (shell-command-to-string
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info "Corrupted")
(throw 'error handle))
- (setq part (mm-replace-in-string part "\n" "\r\n")
+ (setq part (replace-regexp-in-string "\n" "\r\n" part)
signature (mm-get-part signature)
context (epg-make-context))
(condition-case error
(defun mml2015-epg-clear-verify ()
(let ((inhibit-redisplay t)
(context (epg-make-context))
- (signature (mm-encode-coding-string (buffer-string)
- coding-system-for-write))
+ (signature (encode-coding-string (buffer-string)
+ coding-system-for-write))
plain)
(condition-case error
(setq plain (epg-verify-string context signature))
(mml2015-epg-verify-result-to-string
(epg-context-result-for context 'verify)))
(delete-region (point-min) (point-max))
- (insert (mm-decode-coding-string plain coding-system-for-read)))
+ (insert (decode-coding-string plain coding-system-for-read)))
(mml2015-extract-cleartext-signature))))
(defun mml2015-epg-sign (cont)
(require 'gnus-start)
(require 'gnus-sum)
-;; Compatibility Functions =================================================
-
-(eval-and-compile
- (if (fboundp 'signal-error)
- (defun nndiary-error (&rest args)
- (apply #'signal-error 'nndiary args))
- (defun nndiary-error (&rest args)
- (apply #'error args))))
-
-
;; Back End behavior customization ===========================================
(defgroup nndiary nil
;; within the specified bounds.
;; Signals are caught by `nndiary-schedule'.
(if (not (string-match "^[ \t]*[0-9]+[ \t]*$" str))
- (nndiary-error "not an integer value")
+ (error "Not an integer value")
;; else
(let ((val (string-to-number str)))
(and (or (< val min)
(and max (> val max)))
- (nndiary-error "value out of range"))
+ (error "Value out of range"))
val)))
(defun nndiary-parse-schedule-value (str min-or-values max)
(match-string 1 str))))
(if (and val (setq val (assoc val min-or-values)))
(list (cadr val))
- (nndiary-error "invalid syntax")))
+ (error "Invalid syntax")))
;; min-or-values is min
(mapcar
(lambda (val)
(t
(cons end beg)))))
(t
- (nndiary-error "invalid syntax")))
+ (error "Invalid syntax")))
))
(split-string str ",")))
))
(let ((header (format "^X-Diary-%s: \\(.*\\)$" head)))
(goto-char (point-min))
(if (not (re-search-forward header nil t))
- (nndiary-error "header missing")
+ (error "Header missing")
;; else
(nndiary-parse-schedule-value (match-string 1) min-or-values max))
))
(looking-at "JMF"))
(defun nndoc-oe-dbx-type-p ()
- (looking-at (mm-string-to-multibyte "\317\255\022\376")))
+ (looking-at (string-to-multibyte "\317\255\022\376")))
(defun nndoc-read-little-endian ()
(+ (prog1 (char-after) (forward-char 1))
(setq buffer-file-name (expand-file-name file)
buffer-auto-save-file-name (make-auto-save-file-name))
(clear-visited-file-modtime)
- (let ((hook (if (boundp 'write-contents-functions)
- 'write-contents-functions
- 'write-contents-hooks)))
- (gnus-make-local-hook hook)
- (add-hook hook 'nndraft-generate-headers nil t))
- (gnus-make-local-hook 'after-save-hook)
+ (add-hook 'write-contents-functions 'nndraft-generate-headers nil t)
(add-hook 'after-save-hook 'nndraft-update-unread-articles nil t)
(message-add-action '(nndraft-update-unread-articles)
'exit 'postpone 'kill)
(defun nneething-encode-file-name (file &optional coding-system)
"Encode the name of the FILE in CODING-SYSTEM."
(let ((pos 0) buf)
- (setq file (mm-encode-coding-string
+ (setq file (encode-coding-string
file (or coding-system nnmail-pathname-coding-system)))
(while (string-match "[^-0-9a-zA-Z_:/.]" file pos)
(setq buf (cons (format "%%%02x" (aref file (match-beginning 0)))
(setq buf (cons (string (string-to-number (match-string 1 file) 16))
(cons (substring file pos (match-beginning 0)) buf))
pos (match-end 0)))
- (mm-decode-coding-string
+ (decode-coding-string
(apply (function concat)
(nreverse (cons (substring file pos) buf)))
(or coding-system nnmail-pathname-coding-system))))
(active (or (cadr (assoc group nnfolder-group-alist))
(cons 1 0)))
(scantime (assoc group nnfolder-scantime-alist))
- (minid (or (and (boundp 'most-positive-fixnum)
- most-positive-fixnum)
- (lsh -1 -1)))
+ (minid most-positive-fixnum)
maxid start end newscantime
novbuf articles newnum
buffer-read-only)
(defun nnfolder-group-pathname (group)
"Make file name for GROUP."
(setq group
- (mm-encode-coding-string group nnmail-pathname-coding-system))
+ (encode-coding-string group nnmail-pathname-coding-system))
(let ((dir (file-name-as-directory (expand-file-name nnfolder-directory))))
;; If this file exists, we use it directly.
(if (or nnmail-use-long-file-names
(require 'mail-utils)
(require 'mm-util)
(require 'gnus-util)
+(require 'subr-x)
(autoload 'gnus-range-add "gnus-range")
(autoload 'gnus-remove-from-range "gnus-range")
;; FIXME none of these are used explicitly in this file.
(< beg nnheader-max-head-length))))
;; Finally decode the contents.
(when (mm-coding-system-p nnheader-file-coding-system)
- (mm-decode-coding-region start (point-max)
- nnheader-file-coding-system))))
+ (decode-coding-region start (point-max)
+ nnheader-file-coding-system))))
t))
(defun nnheader-article-p ()
(string-match nnheader-numerical-short-files file)
(string-to-number (match-string 0 file))))
-(defvar nnheader-directory-files-is-safe
- (or (eq system-type 'windows-nt)
- (not (featurep 'xemacs)))
+(defvar nnheader-directory-files-is-safe (not (eq system-type 'windows-nt))
"If non-nil, Gnus believes `directory-files' is safe.
It has been reported numerous times that `directory-files' fails with
an alarming frequency on NFS mounted file systems. If it is nil,
2 0))
;; We translate -- but only the file name. We leave the directory
;; alone.
- (if (and (featurep 'xemacs)
- (memq system-type '(windows-nt cygwin)))
- ;; This is needed on NT and stuff, because
- ;; file-name-nondirectory is not enough to split
- ;; file names, containing ':', e.g.
- ;; "d:\\Work\\News\\nntp+news.fido7.ru:fido7.ru.gnu.SCORE"
- ;;
- ;; we are trying to correctly split such names:
- ;; "d:file.name" -> "a:" "file.name"
- ;; "aaa:bbb.ccc" -> "" "aaa:bbb.ccc"
- ;; "d:aaa\\bbb:ccc" -> "d:aaa\\" "bbb:ccc"
- ;; etc.
- ;; to translate then only the file name part.
- (progn
- (setq leaf file
- path "")
- (if (string-match "\\(^\\w:\\|[/\\]\\)\\([^/\\]+\\)$" file)
- (setq leaf (substring file (match-beginning 2))
- path (substring file 0 (match-beginning 2)))))
- ;; Emacs DTRT, says andrewi.
- (setq leaf (file-name-nondirectory file)
- path (file-name-directory file))))
+ (setq leaf (file-name-nondirectory file)
+ path (file-name-directory file)))
(setq len (length leaf))
(while (< i len)
(when (setq trans (cdr (assq (aref leaf i)
t))
(defsubst nnheader-replace-chars-in-string (string from to)
- (mm-subst-char-in-string from to string))
+ (subst-char-in-string from to string))
(defun nnheader-replace-duplicate-chars-in-string (string from to)
"Replace characters in STRING from FROM to TO."
(if (file-directory-p (concat dir group))
(expand-file-name group dir)
;; If not, we translate dots into slashes.
- (expand-file-name (mm-encode-coding-string
+ (expand-file-name (encode-coding-string
(nnheader-replace-chars-in-string group ?. ?/)
nnheader-pathname-coding-system)
dir))))
(enable-local-eval nil)
(coding-system-for-read nnheader-file-coding-system)
(version-control 'never)
- (ffh (if (boundp 'find-file-hook)
- 'find-file-hook
- 'find-file-hooks))
- (val (symbol-value ffh)))
- (set ffh nil)
- (unwind-protect
- (apply 'find-file-noselect args)
- (set ffh val))))
+ (find-file-hook nil))
+ (apply 'find-file-noselect args)))
(defun nnheader-directory-regular-files (dir)
"Return a list of all regular files in DIR."
(defmacro nnheader-insert-buffer-substring (buffer &optional start end)
"Copy string from unibyte buffer to multibyte current buffer."
- (if (featurep 'xemacs)
- `(insert-buffer-substring ,buffer ,start ,end)
- `(if enable-multibyte-characters
- (insert (with-current-buffer ,buffer
- (mm-string-to-multibyte
- ,(if (or start end)
- `(buffer-substring (or ,start (point-min))
- (or ,end (point-max)))
- '(buffer-string)))))
- (insert-buffer-substring ,buffer ,start ,end))))
+ `(if enable-multibyte-characters
+ (insert (with-current-buffer ,buffer
+ (string-to-multibyte
+ ,(if (or start end)
+ `(buffer-substring (or ,start (point-min))
+ (or ,end (point-max)))
+ '(buffer-string)))))
+ (insert-buffer-substring ,buffer ,start ,end)))
(defvar nnheader-last-message-time '(0 0))
(defun nnheader-message-maybe (&rest args)
(setq nnheader-last-message-time now)
(apply 'nnheader-message args))))
-(when (featurep 'xemacs)
- (require 'nnheaderxm))
-
(run-hooks 'nnheader-load-hook)
(provide 'nnheader)
;;; Code:
-(eval-and-compile
- (require 'nnheader)
- ;; In Emacs 24, `open-protocol-stream' is an autoloaded alias for
- ;; `make-network-stream'.
- (unless (fboundp 'open-protocol-stream)
- (require 'proto-stream)))
-
(eval-when-compile
(require 'cl))
(forward "gnus-forward")))
(defvar nnimap-quirks
- '(("QRESYNC" "Zimbra" "QRESYNC ")))
+ '(("QRESYNC" "Zimbra" "QRESYNC ")
+ ("MOVE" "Dovecot" nil)))
(defvar nnimap-inhibit-logging nil)
(delete-region (+ (match-beginning 0) 2) (point))
(setq string (buffer-substring (point) (+ (point) size)))
(delete-region (point) (+ (point) size))
- (insert (format "%S" (mm-subst-char-in-string ?\n ?\s string))))
+ (insert (format "%S" (subst-char-in-string ?\n ?\s string))))
(beginning-of-line)
(setq article
(and (re-search-forward "UID \\([0-9]+\\)" (line-end-position)
(with-current-buffer buffer
(when (and nnimap-object
(nnimap-last-command-time nnimap-object)
- (> (gnus-float-time
+ (> (float-time
(time-subtract
now
(nnimap-last-command-time nnimap-object)))
(when nnimap-server-port
(push nnimap-server-port ports))
(let* ((stream-list
- (open-protocol-stream
+ (open-network-stream
"*nnimap*" (current-buffer) nnimap-address
(nnimap-map-port (car ports))
:type nnimap-stream
:success " OK "
:starttls-function
(lambda (capabilities)
- (when (gnus-string-match-p "STARTTLS" capabilities)
+ (when (string-match-p "STARTTLS" capabilities)
"1 STARTTLS\r\n"))))
(stream (car stream-list))
(props (cdr stream-list))
(when (and stream (not (memq (process-status stream) '(open run))))
(setq stream nil))
- (when (and (fboundp 'set-network-process-option) ;; Not in XEmacs.
- (fboundp 'process-type) ;; Emacs 22 doesn't provide it.
- (eq (process-type stream) 'network))
+ (when (eq (process-type stream) 'network)
;; Use TCP-keepalive so that connections that pass through a NAT
;; router don't hang when left idle.
(set-network-process-option stream :keepalive t))
(nnheader-report 'nnimap "Unable to contact %s:%s via %s"
nnimap-address (car ports) nnimap-stream)
'no-connect)
- (gnus-set-process-query-on-exit-flag stream nil)
- (if (not (gnus-string-match-p "[*.] \\(OK\\|PREAUTH\\)" greeting))
+ (set-process-query-on-exit-flag stream nil)
+ (if (not (string-match-p "[*.] \\(OK\\|PREAUTH\\)" greeting))
(nnheader-report 'nnimap "%s" greeting)
;; Store the greeting (for debugging purposes).
(setf (nnimap-greeting nnimap-object) greeting)
(setf (nnimap-capabilities nnimap-object)
(mapcar #'upcase
(split-string capabilities)))
- (unless (gnus-string-match-p "[*.] PREAUTH" greeting)
+ (unless (string-match-p "[*.] PREAUTH" greeting)
(if (not (setq credentials
(if (eq nnimap-authenticator 'anonymous)
(list "anonymous"
t)
(deffoo nnimap-request-move-article (article group server accept-form
- &optional _last internal-move-group)
+ &optional _last
+ internal-move-group)
(setq group (nnimap-decode-gnus-group group))
(when internal-move-group
(setq internal-move-group (nnimap-decode-gnus-group internal-move-group)))
'nnimap-request-head
'nnimap-request-article)
article group server (current-buffer))
- ;; If the move is internal (on the same server), just do it the easy
- ;; way.
+ ;; If the move is internal (on the same server), just do it the
+ ;; easy way.
(let ((message-id (message-field-value "message-id")))
(if internal-move-group
(with-current-buffer (nnimap-buffer)
- (let* ((can-move (nnimap-capability "MOVE"))
- (command (if can-move
- "UID MOVE %d %S"
- "UID COPY %d %S"))
- (result (nnimap-command command article
- (utf7-encode internal-move-group t))))
+ (let* ((can-move (and (nnimap-capability "MOVE")
+ (equal (nnimap-quirk "MOVE") "MOVE")))
+ (command (if can-move
+ "UID MOVE %d %S"
+ "UID COPY %d %S"))
+ (result (nnimap-command
+ command article
+ (utf7-encode internal-move-group t))))
(when (and (car result) (not can-move))
(nnimap-delete-article article))
(cons internal-move-group
internal-move-group server message-id
nnimap-request-articles-find-limit)))))
;; Move the article to a different method.
- (let ((result (eval accept-form)))
- (when result
- (nnimap-change-group group server)
- (nnimap-delete-article article)
- result)))))))
+ (when-let ((result (eval accept-form)))
+ (nnimap-change-group group server)
+ (nnimap-delete-article article)
+ result))))))
(deffoo nnimap-request-expire-articles (articles group &optional server force)
(setq group (nnimap-decode-gnus-group group))
(and (nnimap-change-group group server)
(with-current-buffer (nnimap-buffer)
(nnheader-message 7 "Expiring articles from %s: %s" group articles)
- (let ((can-move (nnimap-capability "MOVE")))
+ (let ((can-move (and (nnimap-capability "MOVE")
+ (equal (nnimap-quirk "MOVE") "MOVE"))))
(nnimap-command
(if can-move
"UID MOVE %s %S"
(let ((name "*imap log*"))
(or (get-buffer name)
(with-current-buffer (get-buffer-create name)
- (when (boundp 'window-point-insertion-type)
- (make-local-variable 'window-point-insertion-type)
- (setq window-point-insertion-type t))
+ (setq-local window-point-insertion-type t)
(current-buffer)))))
(defun nnimap-log-command (command)
nnmail-split-fancy))
(nnmail-inhibit-default-split-group t)
(groups (nnimap-get-groups))
- (can-move (nnimap-capability "MOVE"))
+ (can-move (and (nnimap-capability "MOVE")
+ (equal (nnimap-quirk "MOVE") "MOVE")))
new-articles)
(erase-buffer)
(nnimap-command "SELECT %S" nnimap-inbox)
;; Set group to dirnam without any leading dots or slashes,
;; and with all subsequent slashes replaced by dots
- (let ((group (gnus-replace-in-string
- (gnus-replace-in-string dirnam "^[./\\]" "" t)
- "[/\\]" "." t)))
+ (let ((group (replace-regexp-in-string
+ "[/\\]" "."
+ (replace-regexp-in-string "^[./\\]" "" dirnam nil t)
+ nil t)))
(vector (gnus-group-full-name group server)
(if (string-match "\\`nnmaildir:" (gnus-group-server server))
;; eliminate all ".", "/", "\" from beginning. Always matches.
(string-match "^[./\\]*\\(.*\\)$" dirnam)
;; "/" -> "."
- (setq group (gnus-replace-in-string (match-string 1 dirnam) "/" "."))
+ (setq group (replace-regexp-in-string
+ "/" "." (match-string 1 dirnam)))
;; Windows "\\" -> "."
- (setq group (gnus-replace-in-string group "\\\\" "."))
+ (setq group (replace-regexp-in-string "\\\\" "." group))
(push (vector (gnus-group-full-name group server)
(string-to-number artno)
(when (string-match prefix dirnam)
(setq dirnam (replace-match "" t t dirnam)))
(push (vector (gnus-group-full-name
- (gnus-replace-in-string dirnam "/" ".") server)
+ (replace-regexp-in-string "/" "." dirnam) server)
(string-to-number artno)
(string-to-number score))
artlist))
group
(if (file-directory-p
(setq group
- (gnus-replace-in-string
- group
- "\\." "/" t)))
+ (replace-regexp-in-string
+ "\\." "/"
+ group nil t)))
group))))))
(unless group
(error "Cannot locate directory for group"))
(server (cadr (gnus-server-to-method srv)))
(groupspec (mapconcat
(lambda (x)
- (if (gnus-string-match-p "gmane" x)
+ (if (string-match-p "gmane" x)
(format "group:%s" (gnus-group-short-name x))
(error "Can't search non-gmane groups: %s" x)))
groups " "))
(mm-url-encode-www-form-urlencoded
`(("query" . ,search)
("HITSPERPAGE" . "999")))))
- (unless (featurep 'xemacs) (set-buffer-multibyte t))
- (mm-decode-coding-region (point-min) (point-max) 'utf-8)
+ (set-buffer-multibyte t)
+ (decode-coding-region (point-min) (point-max) 'utf-8)
(goto-char (point-min))
(forward-line 1)
(while (not (eobp))
(string-to-number (match-string 2 xref)) xscore)
artlist)))))
(forward-line 1)))
- (apply 'vector (nreverse (mm-delete-duplicates artlist)))))
+ (apply 'vector (nreverse (delete-dups artlist)))))
;;; Util Code:
(list (list (gnus-method-to-server
(gnus-find-method-for-group gnus-newsgroup-name)))))
(registry-group (and
- (gnus-bound-and-true-p 'gnus-registry-enabled)
+ (bound-and-true-p gnus-registry-enabled)
(car (gnus-registry-get-id-key
(mail-header-id header) 'group))))
(registry-server
(if (eq (car method) 'nntp)
(while (not (eobp))
(ignore-errors
- (push (mm-string-as-unibyte
+ (push (string-as-unibyte
(gnus-group-full-name
(buffer-substring
(point)
(progn
(skip-chars-forward "^ \t")
- (point))) method))
+ (point)))
+ method))
groups))
(forward-line))
(while (not (eobp))
(ignore-errors
- (push (mm-string-as-unibyte
+ (push (string-as-unibyte
(if (eq (char-after) ?\")
(gnus-group-full-name (read cur) method)
(let ((p (point)) (name ""))
(when (eq (car (gnus-find-method-for-group gnus-newsgroup-name)) 'nnir)
(setq gnus-summary-line-format
(or nnir-summary-line-format gnus-summary-line-format))
- (when (gnus-bound-and-true-p 'gnus-registry-enabled)
+ (when (bound-and-true-p gnus-registry-enabled)
(remove-hook 'gnus-summary-article-delete-hook 'gnus-registry-action t)
(remove-hook 'gnus-summary-article-move-hook 'gnus-registry-action t)
(remove-hook 'gnus-summary-article-expire-hook 'gnus-registry-action t)
:type '(choice (const :tag "infinite" nil)
(number :tag "count")))
-(define-widget 'nnmail-lazy 'default
- "Base widget for recursive data structures.
-
-This is copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
- :format "%{%t%}: %v"
- :convert-widget 'widget-value-convert-widget
- :value-create (lambda (widget)
- (let ((value (widget-get widget :value))
- (type (widget-get widget :type)))
- (widget-put widget :children
- (list (widget-create-child-value
- widget (widget-convert type) value)))))
- :value-delete 'widget-children-value-delete
- :value-get (lambda (widget)
- (widget-value (car (widget-get widget :children))))
- :value-inline (lambda (widget)
- (widget-apply (car (widget-get widget :children))
- :value-inline))
- :default-get (lambda (widget)
- (widget-default-get
- (widget-convert (widget-get widget :type))))
- :match (lambda (widget value)
- (widget-apply (widget-convert (widget-get widget :type))
- :match value))
- :validate (lambda (widget)
- (widget-apply (car (widget-get widget :children)) :validate)))
-
-(define-widget 'nnmail-split-fancy 'nnmail-lazy
+(define-widget 'nnmail-split-fancy 'lazy
"Widget for customizing splits in the variable of the same name."
:tag "Split"
:type '(menu-choice :value (any ".*value.*" "misc")
mm-text-coding-system
"Coding system used in reading inbox")
-(defvar nnmail-pathname-coding-system
- ;; This causes Emacs 22.2 and 22.3 to issue a useless warning.
- ;;(if (and (featurep 'xemacs) (featurep 'file-coding))
- (if (featurep 'xemacs)
- (if (featurep 'file-coding)
- ;; Work around a bug in many XEmacs 21.5 betas.
- ;; Cf. http://thread.gmane.org/gmane.emacs.gnus.general/68134
- (setq file-name-coding-system (coding-system-aliasee 'file-name))))
+(defvar nnmail-pathname-coding-system nil
"*Coding system for file name.")
(defun nnmail-find-file (file)
(setq group (symbol-name group)))
(if (and (numberp (setq max (read buffer)))
(numberp (setq min (read buffer))))
- (push (list (mm-string-as-unibyte group) (cons min max))
+ (push (list (string-as-unibyte group) (cons min max))
group-assoc)))
(error nil))
(widen)
5 "Error in `nnmail-split-methods'; using `bogus' mail group: %S" error-info)
(sit-for 1)
'("bogus")))))
- (setq split (mm-delete-duplicates split))
+ (setq split (delete-dups split))
;; The article may be "cross-posted" to `junk'. What
;; to do? Just remove the `junk' spec. Don't really
;; see anything else to do...
(insert (format "Xref: %s" (system-name)))
(while group-alist
(insert (if (mm-multibyte-p)
- (mm-string-as-multibyte
+ (string-as-multibyte
(format " %s:%d" (caar group-alist) (cdar group-alist)))
- (mm-string-as-unibyte
+ (string-as-unibyte
(format " %s:%d" (caar group-alist) (cdar group-alist)))))
(setq group-alist (cdr group-alist)))
(insert "\n")))
((and (equal header 'to-from)
(or (string-match (cadr regexp-target-pair) from)
(and (string-match (cadr regexp-target-pair) to)
- (let* ((mail-dont-reply-to-names
- (message-dont-reply-to-names))
- (rmail-dont-reply-to-names ; obsolete since 24.1
- mail-dont-reply-to-names))
+ (let ((mail-dont-reply-to-names
+ (message-dont-reply-to-names)))
(equal (if (fboundp 'rmail-dont-reply-to)
(rmail-dont-reply-to from)
(mail-dont-reply-to from)) "")))))
(error "No current split history"))
(with-output-to-temp-buffer "*nnmail split history*"
(with-current-buffer standard-output
- (fundamental-mode)) ; for Emacs 20.4+
- (dolist (elem nnmail-split-history)
- (princ (mapconcat (lambda (ga)
- (concat (car ga) ":" (int-to-string (cdr ga))))
- elem
- ", "))
- (princ "\n"))))
+ (fundamental-mode))
+ (dolist (elem nnmail-split-history)
+ (princ (mapconcat (lambda (ga)
+ (concat (car ga) ":" (int-to-string (cdr ga))))
+ elem
+ ", "))
+ (princ "\n"))))
(defun nnmail-purge-split-history (group)
"Remove all instances of GROUP from `nnmail-split-history'."
(defun nnmaildir--ensure-suffix (filename)
"Ensure that FILENAME contains the suffix \":2,\"."
- (if (gnus-string-match-p ":2," filename)
+ (if (string-match-p ":2," filename)
filename
(concat filename ":2,")))
(defun nnmaildir--add-flag (flag suffix)
"Return a copy of SUFFIX where FLAG is set.
SUFFIX should start with \":2,\"."
- (unless (gnus-string-match-p "^:2," suffix)
+ (unless (string-match-p "^:2," suffix)
(error "Invalid suffix `%s'" suffix))
(let* ((flags (substring suffix 3))
(flags-as-list (append flags nil))
(defun nnmaildir--remove-flag (flag suffix)
"Return a copy of SUFFIX where FLAG is cleared.
SUFFIX should start with \":2,\"."
- (unless (gnus-string-match-p "^:2," suffix)
+ (unless (string-match-p "^:2," suffix)
(error "Invalid suffix `%s'" suffix))
(let* ((flags (substring suffix 3))
(flags-as-list (append flags nil))
(prin1 (vector storage-version num msgid nov) (current-buffer))
(setq file (concat novfile ":"))
(nnmaildir--unlink file)
- (gmm-write-region (point-min) (point-max) file nil 'no-message nil
- 'excl))
+ (write-region (point-min) (point-max) file nil 'no-message nil
+ 'excl))
(rename-file file novfile 'replace)
(setf (nnmaildir--art-msgid article) msgid)
nov)))
(if (zerop n) 1 (1- (lsh 1 (1+ (logb n))))))
(defun nnmaildir--system-name ()
- (gnus-replace-in-string
- (gnus-replace-in-string
- (gnus-replace-in-string
- (system-name)
- "\\\\" "\\134" 'literal)
- "/" "\\057" 'literal)
- ":" "\\072" 'literal))
+ (replace-regexp-in-string
+ ":" "\\072"
+ (replace-regexp-in-string
+ "/" "\\057"
+ (replace-regexp-in-string "\\\\" "\\134" (system-name) nil 'literal)
+ nil 'literal)
+ nil 'literal))
(defun nnmaildir-request-type (_group &optional _article)
'mail)
(when (or
;; first look for marks in suffix, if it's valid...
(when (and (stringp suffix)
- (gnus-string-prefix-p ":2," suffix))
+ (string-prefix-p ":2," suffix))
(or
- (not (gnus-string-match-p
+ (not (string-match-p
(string (nnmaildir--mark-to-flag 'read)) suffix))
- (gnus-string-match-p
+ (string-match-p
(string (nnmaildir--mark-to-flag 'tick)) suffix)))
;; then look in marks directories
(not (file-exists-p (concat cdir prefix)))
pgname (nnmaildir--pgname nnmaildir--cur-server pgname)
group (symbol-value group)
ro (nnmaildir--param pgname 'read-only))
- (insert (gnus-replace-in-string
- (nnmaildir--grp-name group) " " "\\ " t)
+ (insert (replace-regexp-in-string
+ " " "\\ "
+ (nnmaildir--grp-name group) nil t)
" ")
(princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
nntp-server-buffer)
(princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
nntp-server-buffer)
(insert " "
- (gnus-replace-in-string gname " " "\\ " t)
+ (replace-regexp-in-string " " "\\ " gname nil t)
"\n")))))
'group)
(insert " ")
(princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
nntp-server-buffer)
- (insert " " (gnus-replace-in-string gname " " "\\ " t) "\n")
+ (insert " " (replace-regexp-in-string " " "\\ " gname nil t) "\n")
t))))
(defun nnmaildir-request-create-group (gname &optional server _args)
(insert "\t" (nnmaildir--nov-get-beg nov) "\t"
(nnmaildir--art-msgid article) "\t"
(nnmaildir--nov-get-mid nov) "\tXref: nnmaildir "
- (gnus-replace-in-string gname " " "\\ " t) ":")
+ (replace-regexp-in-string " " "\\ " gname nil t) ":")
(princ num nntp-server-buffer)
(insert "\t" (nnmaildir--nov-get-end nov) "\n"))))
(catch 'return
(concat "File exists: " tmpfile))
(throw 'return nil))
(with-current-buffer buffer
- (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
- 'excl))
+ (write-region (point-min) (point-max) tmpfile nil 'no-message nil
+ 'excl))
(unix-sync) ;; no fsync :(
(rename-file tmpfile (concat (nnmaildir--cur dir) file suffix) 'replace)
t)))
(throw 'return nil))))
(condition-case nil (add-name-to-file nnmaildir--file tmpfile)
(error
- (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
- 'excl)
+ (write-region (point-min) (point-max) tmpfile nil 'no-message nil
+ 'excl)
(when (fboundp 'unix-sync)
(unix-sync)))) ;; no fsync :(
(nnheader-cancel-timer 24h)
;;; === Keymaps
-(eval-when-compile
- (when (featurep 'xemacs)
- ;; The `kbd' macro requires that the `read-kbd-macro' macro is available.
- (require 'edmacro)))
-
;; Group mode
(defun nnmairix-group-mode-hook ()
"Nnmairix group mode keymap."
(defun nnmairix-determine-original-group-from-registry (mid)
"Try to determine original group for message-id MID from the registry."
- (when (gnus-bound-and-true-p 'gnus-registry-enabled)
+ (when (bound-and-true-p gnus-registry-enabled)
(unless (string-match "^<" mid)
(set mid (concat "<" mid)))
(unless (string-match ">$" mid)
(file-truename (file-name-as-directory
(expand-file-name nnmh-toplev))))
dir)
- (mm-string-to-multibyte ;Why? Isn't it multibyte already?
- (mm-encode-coding-string
+ (string-to-multibyte ;Why? Isn't it multibyte already?
+ (encode-coding-string
(nnheader-replace-chars-in-string
(substring dir (match-end 0))
?/ ?.)
"Return a decoded group name of GROUP on SERVER-OR-METHOD."
(if nnmail-group-names-not-encoded-p
group
- (mm-decode-coding-string
+ (decode-coding-string
group
(nnml-group-name-charset group server-or-method))))
(defun nnml-encoded-group-name (group &optional server-or-method)
"Return an encoded group name of GROUP on SERVER-OR-METHOD."
- (mm-encode-coding-string
+ (encode-coding-string
group
(nnml-group-name-charset group server-or-method)))
;; 1/ Move the article to a new file:
(let* ((oldfile (nnml-article-to-file old-number))
(newfile
- (gnus-replace-in-string
- oldfile
+ (replace-regexp-in-string
;; nnml-use-compressed-files might be any string, but
;; probably it's sufficient to take into account only
;; "\\.[a-z0-9]+". Note that we can't only use the
;; value.
(concat
"\\(" old-number-string "\\)\\(\\(\\.[a-z0-9]+\\)?\\)$")
- (concat new-number-string "\\2"))))
+ (concat new-number-string "\\2")
+ oldfile)))
(with-current-buffer nntp-server-buffer
(nnmail-find-file oldfile)
;; Update the Xref header in the article itself:
(require 'mm-url)
(require 'rfc2047)
(require 'mml)
-(eval-when-compile
- (ignore-errors
- (require 'xml)))
-(eval '(require 'xml))
+(require 'xml)
(nnoo-declare nnrss)
;;; Interface functions
(defsubst nnrss-format-string (string)
- (gnus-replace-in-string string " *\n *" " "))
+ (replace-regexp-in-string " *\n *" " " string))
(defun nnrss-decode-group-name (group)
(if (and group (mm-coding-system-p 'utf-8))
- (setq group (mm-decode-coding-string group 'utf-8))
+ (setq group (decode-coding-string group 'utf-8))
group))
(deffoo nnrss-retrieve-headers (articles &optional group server fetch-old)
(max 1 (/ (* (window-width window) 7) 8))))
(fill-region (point) (point-max))
(goto-char (point-max))
- ;; XEmacs version of `fill-region' inserts newline.
(unless (bolp)
(insert "\n"))))
(when (or link enclosure)
(let ((rfc2047-encoding-type 'mime)
rfc2047-encode-max-chars)
(rfc2047-encode-string
- (gnus-replace-in-string group "[\t\n ]+" "_")))))
+ (replace-regexp-in-string "[\t\n ]+" "_" group)))))
(when nnrss-content-function
(funcall nnrss-content-function e group article))))
(cond
(nnoo-define-skeleton nnrss)
;;; Internal functions
-(eval-when-compile (defun xml-rpc-method-call (&rest args)))
-
(defun nnrss-get-encoding ()
"Return an encoding attribute specified in the current xml contents.
If `nnrss-compatible-encoding-alist' specifies the compatible encoding,
;; Decode text according to the encoding attribute.
(when (setq cs (nnrss-get-encoding))
(insert (prog1
- (mm-decode-coding-string (buffer-string) cs)
+ (decode-coding-string (buffer-string) cs)
(erase-buffer)
(mm-enable-multibyte))))
(goto-char (point-min))
"")
(defun nnrss-insert (url)
- (mm-with-unibyte-current-buffer
- (condition-case err
- (mm-url-insert url)
- (error (if (or debug-on-quit debug-on-error)
- (signal (car err) (cdr err))
- (message "nnrss: Failed to fetch %s" url))))))
+ (condition-case err
+ (mm-url-insert url)
+ (error (if (or debug-on-quit debug-on-error)
+ (signal (car err) (cdr err))
+ (message "nnrss: Failed to fetch %s" url)))))
(defun nnrss-decode-entities-string (string)
(if string
Export subscriptions to a buffer in OPML Format."
(interactive)
(with-current-buffer (get-buffer-create "*OPML Export*")
- (mm-set-buffer-file-coding-system 'utf-8)
+ (set-buffer-file-coding-system 'utf-8)
(insert "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<!-- OPML generated by Emacs Gnus' nnrss.el -->\n"
"<opml version=\"1.1\">\n"
(nnrss-node-just-text node)
node))
(cleaned-text (if text
- (gnus-replace-in-string
- (gnus-replace-in-string
- text "^[\000-\037\177]+\\|^ +\\| +$" "")
- "\r\n" "\n"))))
+ (replace-regexp-in-string
+ "\r\n" "\n"
+ (replace-regexp-in-string
+ "^[\000-\037\177]+\\|^ +\\| +$" ""
+ text)))))
(if (string-equal "" cleaned-text)
nil
cleaned-text)))
;; 4. check syndic8
(nnrss-find-rss-via-syndic8 url))))))))
+(declare-function xml-rpc-method-call "ext:xml-rpc"
+ (server-url method &rest params))
+
(defun nnrss-find-rss-via-syndic8 (url)
"Query syndic8 for the rss feeds it has for URL."
(if (not (locate-library "xml-rpc"))
"\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] "))
(zerop (forward-line -1))))
;; We require nnheader which requires gnus-util.
- (let ((seconds (gnus-float-time (date-to-time date)))
+ (let ((seconds (float-time (date-to-time date)))
groups)
;; Go through lines and add the latest groups to a list.
(while (and (looking-at "\\([^ ]+\\) +[0-9]+ ")
(save-excursion
(let* ((process-connection-type nil) ; t bugs out on Solaris
(inews-buffer (generate-new-buffer " *nnspool post*"))
+ (buf (current-buffer))
(proc
(condition-case err
(apply 'start-process "*nnspool inews*" inews-buffer
()
(nnheader-report 'nnspool "")
(set-process-sentinel proc 'nnspool-inews-sentinel)
- (mm-with-unibyte-current-buffer
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert-buffer-substring buf)
+ (encode-coding-region (point-min) (point-max)
+ nnspool-file-coding-system)
(process-send-region proc (point-min) (point-max)))
;; We slap a condition-case around this, because the process may
;; have exited already...
;;; Code:
-(eval-and-compile
- ;; In Emacs 24, `open-protocol-stream' is an autoloaded alias for
- ;; `make-network-stream'.
- (unless (fboundp 'open-protocol-stream)
- (require 'proto-stream)))
-
(require 'nnheader)
(require 'nnoo)
(require 'gnus-util)
(defvoo nntp-connection-timeout nil
"*Number of seconds to wait before an nntp connection times out.
-If this variable is nil, which is the default, no timers are set.
-NOTE: This variable is never seen to work in Emacs 20 and XEmacs 21.")
+If this variable is nil, which is the default, no timers are set.")
(defvoo nntp-prepare-post-hook nil
"*Hook run just before posting an article. It is supposed to be used
(defmacro nntp-copy-to-buffer (buffer start end)
"Copy string from unibyte current buffer to multibyte buffer."
- (if (featurep 'xemacs)
- `(copy-to-buffer ,buffer ,start ,end)
- `(let ((string (buffer-substring ,start ,end)))
- (with-current-buffer ,buffer
- (erase-buffer)
- (insert (if enable-multibyte-characters
- (mm-string-to-multibyte string)
- string))
- (goto-char (point-min))
- nil))))
+ `(let ((string (buffer-substring ,start ,end)))
+ (with-current-buffer ,buffer
+ (erase-buffer)
+ (insert (if enable-multibyte-characters
+ (string-to-multibyte string)
+ string))
+ (goto-char (point-min))
+ nil)))
(defsubst nntp-wait-for (process wait-for buffer &optional decode discard)
"Wait for WAIT-FOR to arrive from PROCESS."
(nntp-open-ssl-stream tls)
(nntp-open-tls-stream tls))))
(if (assoc nntp-open-connection-function map)
- (open-protocol-stream
+ (open-network-stream
"nntpd" pbuffer nntp-address nntp-port-number
:type (cadr (assoc nntp-open-connection-function map))
:end-of-command "^\\([2345]\\|[.]\\).*\n"
(nntp-kill-buffer pbuffer))
(when (and (buffer-name pbuffer)
process)
- (when (and (fboundp 'set-network-process-option) ;; Unavailable in XEmacs.
- (fboundp 'process-type) ;; Emacs 22 doesn't provide it.
- (eq (process-type process) 'network))
+ (when (eq (process-type process) 'network)
;; Use TCP-keepalive so that connections that pass through a NAT router
;; don't hang when left idle.
(set-network-process-option process :keepalive t))
- (gnus-set-process-query-on-exit-flag process nil)
+ (set-process-query-on-exit-flag process nil)
(if (and (nntp-wait-for process "^2.*\n" buffer nil t)
(memq (process-status process) '(open run)))
(prog1
(with-current-buffer nntp-server-buffer
(erase-buffer)
(let (article header)
- (mm-with-unibyte-current-buffer
- (while (setq article (pop articles))
- (when (setq header (cadr (assq article nnweb-articles)))
- (nnheader-insert-nov header))))
+ (while (setq article (pop articles))
+ (when (setq header (cadr (assq article nnweb-articles)))
+ (nnheader-insert-nov header)))
'nov)))
(deffoo nnweb-request-scan (&optional group server)
(let* ((header (cadr (assq article nnweb-articles)))
(url (and header (mail-header-xref header))))
(when (or (and url
- (mm-with-unibyte-current-buffer
- (mm-url-insert url)))
+ (mm-url-insert url))
(and (stringp article)
(nnweb-definition 'id t)
(let ((fetch (nnweb-definition 'id))
(when (and fetch art)
(setq url (format fetch
(mm-url-form-encode-xwfu art)))
- (mm-with-unibyte-current-buffer
- (mm-url-insert url))
+ (mm-url-insert url)
(if (nnweb-definition 'reference t)
(setq article
(funcall (nnweb-definition
(defun nnweb-read-overview (group)
"Read the overview of GROUP and build the map."
(when (file-exists-p (nnweb-overview-file group))
- (mm-with-unibyte-buffer
- (nnheader-insert-file-contents (nnweb-overview-file group))
- (goto-char (point-min))
- (let (header)
- (while (not (eobp))
- (setq header (nnheader-parse-nov))
- (forward-line 1)
- (push (list (mail-header-number header)
- header (mail-header-xref header))
- nnweb-articles)
- (nnweb-set-hashtb header (car nnweb-articles)))))))
+ (nnheader-insert-file-contents (nnweb-overview-file group))
+ (goto-char (point-min))
+ (let (header)
+ (while (not (eobp))
+ (setq header (nnheader-parse-nov))
+ (forward-line 1)
+ (push (list (mail-header-number header)
+ header (mail-header-xref header))
+ nnweb-articles)
+ (nnweb-set-hashtb header (car nnweb-articles))))))
(defun nnweb-write-overview (group)
"Write the overview file for GROUP."
(setq nnweb-articles
(nconc nnweb-articles map))
(when (setq header (cadar map))
- (mm-with-unibyte-current-buffer
- (mm-url-insert (mail-header-xref header)))
+ (mm-url-insert (mail-header-xref header))
(caar map))))
(defun nnweb-google-create-mapping ()
;;("TOPDOC" . "1000")
))))
(setq buffer-file-name nil)
- (unless (featurep 'xemacs) (set-buffer-multibyte t))
- (mm-decode-coding-region (point-min) (point-max) 'utf-8)
+ (set-buffer-multibyte t)
+ (decode-coding-region (point-min) (point-max) 'utf-8)
t)
(defun nnweb-gmane-identity (url)
(defvar smiley-data-directory)
(defcustom smiley-style
- (if (or (and (fboundp 'face-attribute)
- ;; In batch mode, attributes can be unspecified.
- (condition-case nil
- (>= (face-attribute 'default :height) 160)
- (error nil)))
- (and (fboundp 'face-height)
- (>= (face-height 'default) 14)))
+ (if (and (fboundp 'face-attribute)
+ ;; In batch mode, attributes can be unspecified.
+ (condition-case nil
+ (>= (face-attribute 'default :height) 160)
+ (error nil)))
'medium
'low-color)
"Smiley style."
- :type '(choice (const :tag "small, 3 colors" low-color) ;; 13x14
- (const :tag "medium, ~10 colors" medium) ;; 16x16
- (const :tag "dull, grayscale" grayscale));; 14x14
+ :type '(choice (const :tag "small, 3 colors" low-color) ;; 13x14
+ (const :tag "medium, ~10 colors" medium) ;; 16x16
+ (const :tag "dull, grayscale" grayscale)) ;; 14x14
:set (lambda (symbol value)
(set-default symbol value)
(setq smiley-data-directory (smiley-directory))
"Replace in the region `smiley-regexp-alist' matches with corresponding images.
A list of images is returned."
(interactive "r")
- (when (gnus-graphic-display-p)
+ (when (display-graphic-p)
(unless smiley-cached-regexp-alist
(smiley-update-cache))
(save-excursion
(require 'dig)
-(if (locate-library "password-cache")
- (require 'password-cache)
- (require 'password))
+(require 'password-cache)
(eval-when-compile (require 'cl))
-(eval-and-compile
- (cond
- ((fboundp 'replace-in-string)
- (defalias 'smime-replace-in-string 'replace-in-string))
- ((fboundp 'replace-regexp-in-string)
- (defun smime-replace-in-string (string regexp newtext &optional literal)
- "Replace all matches for REGEXP with NEWTEXT in STRING.
-If LITERAL is non-nil, insert NEWTEXT literally. Return a new
-string containing the replacements.
-
-This is a compatibility function for different Emacsen."
- (replace-regexp-in-string regexp newtext string nil literal)))))
-
(defgroup smime nil
"S/MIME configuration."
:group 'mime)
(defvar smime-details-buffer "*OpenSSL output*")
-;; Use mm-util?
-(eval-and-compile
- (defalias 'smime-make-temp-file
- (if (fboundp 'make-temp-file)
- 'make-temp-file
- (lambda (prefix &optional dir-flag) ;; Simple implementation
- (expand-file-name
- (make-temp-name prefix)
- (if (fboundp 'temp-directory)
- (temp-directory)
- temporary-file-directory))))))
-
-;; Password dialog function
-(declare-function password-read-and-add "password-cache" (prompt &optional key))
-
(defun smime-ask-passphrase (&optional cache-key)
"Asks the passphrase to unlock the secret key.
If `cache-key' and `password-cache' is non-nil then cache the
(keyfile (or (car-safe keyfile) keyfile))
(buffer (generate-new-buffer " *smime*"))
(passphrase (smime-ask-passphrase (expand-file-name keyfile)))
- (tmpfile (smime-make-temp-file "smime")))
+ (tmpfile (make-temp-file "smime")))
(if passphrase
(setenv "GNUS_SMIME_PASSPHRASE" passphrase))
(prog1
is expected to contain of a PEM encoded certificate."
(smime-new-details-buffer)
(let ((buffer (generate-new-buffer " *smime*"))
- (tmpfile (smime-make-temp-file "smime")))
+ (tmpfile (make-temp-file "smime")))
(prog1
(when (prog1
(apply 'smime-call-openssl-region b e (list buffer tmpfile)
(smime-new-details-buffer)
(let ((buffer (generate-new-buffer " *smime*"))
CAs (passphrase (smime-ask-passphrase (expand-file-name keyfile)))
- (tmpfile (smime-make-temp-file "smime")))
+ (tmpfile (make-temp-file "smime")))
(if passphrase
(setenv "GNUS_SMIME_PASSPHRASE" passphrase))
(if (prog1
"Get certificate for MAIL from the ldap server at HOST."
(let ((ldapresult
(funcall
- (if (featurep 'xemacs)
- (progn
- (require 'smime-ldap)
- 'smime-ldap-search)
- (progn
- (require 'ldap)
- 'ldap-search))
+ (progn
+ (require 'ldap)
+ 'ldap-search)
(concat "mail=" mail)
host '("userCertificate") nil))
(retbuf (generate-new-buffer (format "*certificate for %s*" mail)))
(string= (substring (cadaar ldapresult) 0 3)
"MII"))
(setq cert
- (smime-replace-in-string
- (cadaar ldapresult)
+ (replace-regexp-in-string
(concat "\\(\n\\|\r\\|-----BEGIN CERTIFICATE-----\\|"
"-----END CERTIFICATE-----\\)")
- "" t))
+ ""
+ (cadaar ldapresult) nil t))
(setq cert (base64-encode-string (cadaar ldapresult) t)))
(insert "-----BEGIN CERTIFICATE-----\n")
(let ((i 0) (len (length cert)))
rpt-host
(concat
"/"
- (gnus-replace-in-string
- (gnus-replace-in-string
- (gnus-replace-in-string
- (mail-header-xref (gnus-summary-article-header article))
- "/raw" ":silent")
- "^.*article.gmane.org/" "")
- "/" ":"))))
+ (replace-regexp-in-string
+ "/" ":"
+ (replace-regexp-in-string
+ "^.*article.gmane.org/" ""
+ (replace-regexp-in-string
+ "/raw" ":silent"
+ (mail-header-xref (gnus-summary-article-header article))))))))
(spam-report-gmane-use-article-number
(spam-report-url-ping
rpt-host
(when host
(when (string-equal "permalink.gmane.org" host)
(setq host rpt-host)
- (setq report (gnus-replace-in-string
- report "/\\([0-9]+\\)$" ":\\1")))
+ (setq report (replace-regexp-in-string "/\\([0-9]+\\)$" ":\\1"
+ report)))
(setq url (format "http://%s%s" host report)))
(if (not (and host report url))
(gnus-message
(defcustom spam-report-user-mail-address
(and (stringp user-mail-address)
- (gnus-replace-in-string user-mail-address "@" "<at>"))
+ (replace-regexp-in-string "@" "<at>" user-mail-address))
"Mail address of this user used for spam reports to Gmane.
This is initialized based on `user-mail-address'."
:type '(choice string
80))
(error "Could not open connection to %s" host))
(set-marker (process-mark tcp-connection) (point-min))
- (gnus-set-process-query-on-exit-flag tcp-connection nil)
+ (set-process-query-on-exit-flag tcp-connection nil)
(process-send-string
tcp-connection
(format "GET %s HTTP/1.1\nUser-Agent: %s\nHost: %s\n\n"
(re-search-forward
"http://\\([^/]+\\)\\(/.*\\) *$" (point-at-eol) t))
(let ((spam-report-gmane-wait
- (zerop (% (mm-line-number-at-pos)
- spam-report-gmane-max-requests))))
+ (zerop (% (line-number-at-pos) spam-report-gmane-max-requests))))
(gnus-message 6 "Reporting %s%s..."
(match-string 1) (match-string 2))
(funcall spam-report-url-ping-function
(if (or (eq keep nil)
(and (eq keep 'ask)
(y-or-n-p
- (gnus-format-message
+ (format-message
"Flush requests from `%s'? " (current-buffer)))))
(progn
(gnus-message 7 "Flushing request file `%s'"
(setcdr (nthcdr 14 result) nil)
result))
-(eval-when-compile
- (defmacro spam-stat-called-interactively-p (kind)
- (condition-case nil
- (progn
- (eval '(called-interactively-p 'any))
- ;; Emacs >=23.2
- `(called-interactively-p ,kind))
- ;; Emacs <23.2
- (wrong-number-of-arguments '(called-interactively-p))
- ;; XEmacs
- (void-function '(interactive-p)))))
-
(defun spam-stat-score-buffer ()
"Return a score describing the spam-probability for this buffer.
Add user supplied modifications if supplied."
(error nil)))
(ans
(if score1s (+ score0 score1s) score0)))
- (when (spam-stat-called-interactively-p 'any)
+ (when (called-interactively-p 'any)
(message "%S" ans))
ans))
(if header-content
(cond
((eq header 'X-Spam-Status)
- (string-to-number (gnus-replace-in-string
- header-content
+ (string-to-number (replace-regexp-in-string
spam-spamassassin-score-regexp
- "\\1")))
+ "\\1"
+ header-content)))
;; for CRM checking, it's probably faster to just do the string match
((string-match "( pR: \\([0-9.-]+\\)" header-content)
(- (string-to-number (match-string 1 header-content))))
((eq header 'X-Bogosity)
- (string-to-number (gnus-replace-in-string
- (gnus-replace-in-string
- header-content
- ".*spamicity=" "")
- ",.*" "")))
+ (string-to-number (replace-regexp-in-string
+ ",.*" ""
+ (replace-regexp-in-string
+ ".*spamicity=" ""
+ header-content))))
(t nil))
nil)))
;; Avoid asking the user annoying questions if she decides
;; to save the help buffer, when her locale's codeset
;; isn't UTF-8.
- (unless (memq text-quoting-style '(straight grave))
+ (unless (memq text-quoting-style '(leave straight grave))
(set-buffer-file-coding-system 'utf-8))))))))
;; Add defaults to `help-fns-describe-function-functions'.
(interactive
(let ((v (variable-at-point))
(enable-recursive-minibuffers t)
+ (orig-buffer (current-buffer))
val)
- (setq val (completing-read (if (symbolp v)
- (format
- "Describe variable (default %s): " v)
- "Describe variable: ")
- obarray
- (lambda (vv)
- (or (get vv 'variable-documentation)
- (and (boundp vv) (not (keywordp vv)))))
- t nil nil
- (if (symbolp v) (symbol-name v))))
+ (setq val (completing-read
+ (if (symbolp v)
+ (format
+ "Describe variable (default %s): " v)
+ "Describe variable: ")
+ obarray
+ (lambda (vv)
+ ;; In case the variable only exists in the buffer
+ ;; the command we switch back to that buffer before
+ ;; we examine the variable.
+ (with-current-buffer orig-buffer
+ (or (get vv 'variable-documentation)
+ (and (boundp vv) (not (keywordp vv))))))
+ t nil nil
+ (if (symbolp v) (symbol-name v))))
(list (if (equal val "")
v (intern val)))))
(let (file-name)
(unless valvoid
(with-current-buffer standard-output
(setq val-start-pos (point))
- (princ "value is ")
- (let ((from (point))
- (line-beg (line-beginning-position))
+ (princ "value is")
+ (let ((line-beg (line-beginning-position))
(print-rep
(let ((rep
(let ((print-quoted t))
(format-message "`%s'" rep)
rep))))
(if (< (+ (length print-rep) (point) (- line-beg)) 68)
- (insert print-rep)
+ (insert " " print-rep)
(terpri)
(pp val)
- (if (< (point) (+ 68 (line-beginning-position 0)))
- (delete-region from (1+ from))
- (delete-region (1- from) from)))
+ ;; Remove trailing newline.
+ (delete-char -1))
(let* ((sv (get variable 'standard-value))
(origval (and (consp sv)
(condition-case nil
(eval (car sv))
- (error :help-eval-error)))))
+ (error :help-eval-error))))
+ from)
(when (and (consp sv)
(not (equal origval val))
(not (equal origval :help-eval-error)))
(buffer-file-name buffer)))
(dir-locals-find-file
(buffer-file-name buffer))))
- (dir-file t))
+ (is-directory nil))
(princ (substitute-command-keys
" This variable's value is directory-local"))
- (if (null file)
- (princ ".\n")
- (princ ", set ")
- (if (consp file) ; result from cache
- ;; If the cache element has an mtime, we
- ;; assume it came from a file.
- (if (nth 2 file)
- (setq file (expand-file-name
- dir-locals-file (car file)))
- ;; Otherwise, assume it was set directly.
- (setq file (car file)
- dir-file nil)))
- (princ (substitute-command-keys
- (if dir-file
- "by the file\n `"
- "for the directory\n `")))
+ (when (consp file) ; result from cache
+ ;; If the cache element has an mtime, we
+ ;; assume it came from a file.
+ (if (nth 2 file)
+ ;; (car file) is a directory.
+ (setq file (dir-locals--all-files (car file)))
+ ;; Otherwise, assume it was set directly.
+ (setq file (car file)
+ is-directory t)))
+ (if (null file)
+ (princ ".\n")
+ (princ ", set ")
+ (princ (substitute-command-keys
+ (cond
+ (is-directory "for the directory\n `")
+ ;; Many files matched.
+ ((and (consp file) (cdr file))
+ (setq file (file-name-directory (car file)))
+ (format "by one of the\n %s files in the directory\n `"
+ dir-locals-file))
+ (t (setq file (car file))
+ "by the file\n `"))))
(with-current-buffer standard-output
(insert-text-button
file 'type 'help-dir-local-var-def
- 'help-args (list variable file)))
+ 'help-args (list variable file)))
(princ (substitute-command-keys "'.\n"))))
(princ (substitute-command-keys
" This variable's value is file-local.\n"))))
(if (or (not (vectorp docs)) (/= (length docs) 95))
(error "Invalid first extra slot in this category table\n"))
(with-current-buffer standard-output
- (insert "Legend of category mnemonics (see the tail for the longer description)\n")
+ (setq-default help-button-cache (make-marker))
+ (insert "Legend of category mnemonics ")
+ (insert-button "(longer descriptions at the bottom)"
+ 'action help-button-cache
+ 'follow-link t
+ 'help-echo "mouse-2, RET: show full legend")
+ (insert "\n")
(let ((pos (point)) (items 0) lines n)
(dotimes (i 95)
(if (aref docs i) (setq items (1+ items))))
"character(s)\tcategory mnemonics\n"
"------------\t------------------")
(describe-vector table 'help-describe-category-set)
+ (set-marker help-button-cache (point))
(insert "Legend of category mnemonics:\n")
(dotimes (i 95)
(let ((elt (aref docs i)))
(let ((location
(find-function-search-for-symbol fun type file)))
(pop-to-buffer (car location))
+ (run-hooks 'find-function-after-hook)
(if (cdr location)
(goto-char (cdr location))
(message "Unable to find location in file"))))
(setq file (help-C-file-name var 'var)))
(let ((location (find-variable-noselect var file)))
(pop-to-buffer (car location))
+ (run-hooks 'find-function-after-hook)
(if (cdr location)
(goto-char (cdr location))
(message "Unable to find location in file"))))
(when (null (cdr yank-menu))
(setq saved-yank-menu (copy-sequence yank-menu))
(menu-bar-update-yank-menu "(any string)" nil))
- (setq key (read-key-sequence "Describe key (or click or menu item): "))
+ (while
+ (progn
+ (setq key (read-key-sequence "Describe the following key, mouse click, or menu item: "))
+ (and (vectorp key)
+ (consp (aref key 0))
+ (symbolp (car (aref key 0)))
+ (string-match "\\(mouse\\|down\\|click\\|drag\\)"
+ (symbol-name (car (aref key 0))))
+ (not (sit-for (/ double-click-time 1000.0) t)))))
;; Clear the echo area message (Bug#7014).
(message nil)
;; If KEY is a down-event, read and discard the
(when (null (cdr yank-menu))
(setq saved-yank-menu (copy-sequence yank-menu))
(menu-bar-update-yank-menu "(any string)" nil))
- (setq key (read-key-sequence "Describe key (or click or menu item): "))
+ (while
+ (progn
+ (setq key (read-key-sequence "Describe the following key, mouse click, or menu item: "))
+ (and (vectorp key)
+ (consp (aref key 0))
+ (symbolp (car (aref key 0)))
+ (string-match "\\(mouse\\|down\\|click\\|drag\\)"
+ (symbol-name (car (aref key 0))))
+ (not (sit-for (/ double-click-time 1000.0) t)))))
(list
key
(prefix-numeric-value current-prefix-arg)
(let ((mode-function (nth 0 mode))
(pretty-minor-mode (nth 1 mode))
(indicator (nth 2 mode)))
- (add-text-properties 0 (length pretty-minor-mode)
- '(face bold) pretty-minor-mode)
(save-excursion
(goto-char (point-max))
(princ "\n\f\n")
(push (point-marker) help-button-cache)
;; Document the minor modes fully.
- (insert pretty-minor-mode)
+ (insert-text-button
+ pretty-minor-mode 'type 'help-function
+ 'help-args (list mode-function)
+ 'button '(t))
(princ (format " minor mode (%s):\n"
(if (zerop (length indicator))
"no indicator"
(provide 'hfy-cmap)
;; Local Variables:
-;; generated-autoload-file: "htmlfontify.el"
+;; generated-autoload-file: "htmlfontify-loaddefs.el"
;; End:
;;; hfy-cmap.el ends here
;; (`font-lock-fontify-region')
(require 'cus-edit)
+(require 'htmlfontify-loaddefs)
+
(defconst htmlfontify-version 0.21)
(defconst hfy-meta-tags
(let ((file (hfy-initfile)))
(load file 'NOERROR nil nil) ))
-\f
-;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" "e644ddae915ddb98c9b2f16ffa5a74b2")
-;;; Generated autoloads from hfy-cmap.el
-
-(autoload 'htmlfontify-load-rgb-file "hfy-cmap" "\
-Load an X11 style rgb.txt FILE.
-Search `hfy-rgb-load-path' if FILE is not specified.
-Loads the variable `hfy-rgb-txt-colour-map', which is used by
-`hfy-fallback-colour-values'.
-
-\(fn &optional FILE)" t nil)
-
-(autoload 'hfy-fallback-colour-values "hfy-cmap" "\
-Use a fallback method for obtaining the rgb values for a color.
-
-\(fn COLOUR-STRING)" nil nil)
-
-;;;***
-\f
-
(provide 'htmlfontify)
;;; htmlfontify.el ends here
(if (zerop (ibuffer-count-marked-lines))
(message "No buffers marked; use 'm' to mark a buffer")
(let ((ibuffer-copy-filename-as-kill-result "")
- (type (cond ((zerop arg)
+ (type (cond ((or (null arg) (zerop arg))
'full)
((= arg 4)
'relative)
(ibuffer-map-marked-lines
#'(lambda (buf _mark)
(setq ibuffer-copy-filename-as-kill-result
- (concat ibuffer-copy-filename-as-kill-result
- (let ((name (buffer-file-name buf)))
- (if name
- (pcase type
- (`full
- name)
- (`relative
- (file-relative-name
- name (or ibuffer-default-directory
- default-directory)))
- (_
- (file-name-nondirectory name)))
- ""))
- " "))))
+ (concat ibuffer-copy-filename-as-kill-result
+ (let ((name (buffer-file-name buf)))
+ (cond (name
+ (concat
+ (pcase type
+ (`full
+ name)
+ (`relative
+ (file-relative-name
+ name (or ibuffer-default-directory
+ default-directory)))
+ (_
+ (file-name-nondirectory name))) " "))
+ (t "")))))))
+ (when (not (zerop (length ibuffer-copy-filename-as-kill-result)))
+ (setq ibuffer-copy-filename-as-kill-result
+ (substring ibuffer-copy-filename-as-kill-result 0 -1)))
(kill-new ibuffer-copy-filename-as-kill-result))))
(defun ibuffer-mark-on-buffer (func &optional ibuffer-mark-on-buffer-mark group)
(provide 'ibuf-ext)
;; Local Variables:
-;; generated-autoload-file: "ibuffer.el"
+;; generated-autoload-file: "ibuffer-loaddefs.el"
;; End:
;;; ibuf-ext.el ends here
(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)
(define-key-after map [menu-bar view dashes2]
'("--"))
- (define-key-after map [menu-bar view diff-with-file]
- '(menu-item "Diff with file" ibuffer-diff-with-file
- :help "View the differences between this buffer and its file"))
(define-key-after map [menu-bar view auto-mode]
'(menu-item "Auto Mode" ibuffer-auto-mode
:button (:toggle . ibuffer-auto-mode)
:help "Attempt to automatically update the Ibuffer buffer"))
- (define-key-after map [menu-bar view customize]
- '(menu-item "Customize Ibuffer" ibuffer-customize
- :help "Use Custom to customize Ibuffer"))
(define-key-after map [menu-bar mark]
(cons "Mark" (make-sparse-keymap "Mark")))
(define-key-after operate-map [do-view-and-eval]
'(menu-item "Eval (viewing buffer)..." ibuffer-do-view-and-eval
:help "Evaluate a Lisp form in each marked buffer while viewing it"))
+ (define-key-after operate-map [diff-with-file]
+ '(menu-item "Diff with file" ibuffer-diff-with-file
+ :help "View the differences between this buffer and its file"))
operate-map))
(cond ((zerop bufs) "No buffers")
((= 1 bufs) "1 buffer")
(t (format "%s buffers" bufs))))))
- (propertize (buffer-name) 'font-lock-face (ibuffer-buffer-name-face buffer mark)))
+ (let ((string (propertize (buffer-name)
+ 'font-lock-face
+ (ibuffer-buffer-name-face buffer mark))))
+ (if (not (seq-position string ?\n))
+ string
+ (replace-regexp-in-string
+ "\n" (propertize "^J" 'font-lock-face 'escape-glyph) string))))
(define-ibuffer-column size
(:inline t
(setq default-directory ibuffer-default-directory))
(add-hook 'change-major-mode-hook 'font-lock-defontify nil t))
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "9521139d5f2ba7c870e3101fd73bb3ce")
-;;; Generated autoloads from ibuf-ext.el
-
-(autoload 'ibuffer-auto-mode "ibuf-ext" "\
-Toggle use of Ibuffer's auto-update facility (Ibuffer Auto mode).
-With a prefix argument ARG, enable Ibuffer Auto mode if ARG is
-positive, and disable it otherwise. If called from Lisp, enable
-the mode if ARG is omitted or nil.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'ibuffer-mouse-filter-by-mode "ibuf-ext" "\
-Enable or disable filtering by the major mode chosen via mouse.
-
-\(fn EVENT)" t nil)
-
-(autoload 'ibuffer-interactive-filter-by-mode "ibuf-ext" "\
-Enable or disable filtering by the major mode at point.
-
-\(fn EVENT-OR-POINT)" t nil)
-
-(autoload 'ibuffer-mouse-toggle-filter-group "ibuf-ext" "\
-Toggle the display status of the filter group chosen with the mouse.
-
-\(fn EVENT)" t nil)
-
-(autoload 'ibuffer-toggle-filter-group "ibuf-ext" "\
-Toggle the display status of the filter group on this line.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-forward-filter-group "ibuf-ext" "\
-Move point forwards by COUNT filtering groups.
-
-\(fn &optional COUNT)" t nil)
-
-(autoload 'ibuffer-backward-filter-group "ibuf-ext" "\
-Move point backwards by COUNT filtering groups.
-
-\(fn &optional COUNT)" t nil)
- (autoload 'ibuffer-do-shell-command-pipe "ibuf-ext")
- (autoload 'ibuffer-do-shell-command-pipe-replace "ibuf-ext")
- (autoload 'ibuffer-do-shell-command-file "ibuf-ext")
- (autoload 'ibuffer-do-eval "ibuf-ext")
- (autoload 'ibuffer-do-view-and-eval "ibuf-ext")
- (autoload 'ibuffer-do-rename-uniquely "ibuf-ext")
- (autoload 'ibuffer-do-revert "ibuf-ext")
- (autoload 'ibuffer-do-isearch "ibuf-ext")
- (autoload 'ibuffer-do-isearch-regexp "ibuf-ext")
- (autoload 'ibuffer-do-replace-regexp "ibuf-ext")
- (autoload 'ibuffer-do-query-replace "ibuf-ext")
- (autoload 'ibuffer-do-query-replace-regexp "ibuf-ext")
- (autoload 'ibuffer-do-print "ibuf-ext")
-
-(autoload 'ibuffer-included-in-filters-p "ibuf-ext" "\
-
-
-\(fn BUF FILTERS)" nil nil)
-
-(autoload 'ibuffer-filters-to-filter-group "ibuf-ext" "\
-Make the current filters into a filtering group.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-set-filter-groups-by-mode "ibuf-ext" "\
-Set the current filter groups to filter by mode.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-pop-filter-group "ibuf-ext" "\
-Remove the first filter group.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-decompose-filter-group "ibuf-ext" "\
-Decompose the filter group GROUP into active filters.
-
-\(fn GROUP)" t nil)
-
-(autoload 'ibuffer-clear-filter-groups "ibuf-ext" "\
-Remove all filter groups.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-jump-to-filter-group "ibuf-ext" "\
-Move point to the filter group whose name is NAME.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-kill-filter-group "ibuf-ext" "\
-Kill the filter group named NAME.
-The group will be added to `ibuffer-filter-group-kill-ring'.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-kill-line "ibuf-ext" "\
-Kill the filter group at point.
-See also `ibuffer-kill-filter-group'.
-
-\(fn &optional ARG INTERACTIVE-P)" t nil)
-
-(autoload 'ibuffer-yank "ibuf-ext" "\
-Yank the last killed filter group before group at point.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-yank-filter-group "ibuf-ext" "\
-Yank the last killed filter group before group named NAME.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-save-filter-groups "ibuf-ext" "\
-Save all active filter groups GROUPS as NAME.
-They are added to `ibuffer-saved-filter-groups'. Interactively,
-prompt for NAME, and use the current filters.
-
-\(fn NAME GROUPS)" t nil)
-
-(autoload 'ibuffer-delete-saved-filter-groups "ibuf-ext" "\
-Delete saved filter groups with NAME.
-They are removed from `ibuffer-saved-filter-groups'.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-switch-to-saved-filter-groups "ibuf-ext" "\
-Set this buffer's filter groups to saved version with NAME.
-The value from `ibuffer-saved-filter-groups' is used.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-filter-disable "ibuf-ext" "\
-Disable all filters currently in effect in this buffer.
-With optional arg DELETE-FILTER-GROUPS non-nil, delete all filter
-group definitions by setting `ibuffer-filter-groups' to nil.
-
-\(fn &optional DELETE-FILTER-GROUPS)" t nil)
-
-(autoload 'ibuffer-pop-filter "ibuf-ext" "\
-Remove the top filter in this buffer.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-decompose-filter "ibuf-ext" "\
-Separate the top compound filter (OR, NOT, or SAVED) in this buffer.
-
-This means that the topmost filter on the filtering stack, which must
-be a complex filter like (OR [name: foo] [mode: bar-mode]), will be
-turned into two separate filters [name: foo] and [mode: bar-mode].
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-exchange-filters "ibuf-ext" "\
-Exchange the top two filters on the stack in this buffer.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-negate-filter "ibuf-ext" "\
-Negate the sense of the top filter in the current buffer.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-or-filter "ibuf-ext" "\
-Replace the top two filters in this buffer with their logical OR.
-If optional argument REVERSE is non-nil, instead break the top OR
-filter into parts.
-
-\(fn &optional REVERSE)" t nil)
-
-(autoload 'ibuffer-save-filters "ibuf-ext" "\
-Save FILTERS in this buffer with name NAME in `ibuffer-saved-filters'.
-Interactively, prompt for NAME, and use the current filters.
-
-\(fn NAME FILTERS)" t nil)
-
-(autoload 'ibuffer-delete-saved-filters "ibuf-ext" "\
-Delete saved filters with NAME from `ibuffer-saved-filters'.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-add-saved-filters "ibuf-ext" "\
-Add saved filters from `ibuffer-saved-filters' to this buffer's filters.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-switch-to-saved-filters "ibuf-ext" "\
-Set this buffer's filters to filters with NAME from `ibuffer-saved-filters'.
-
-\(fn NAME)" t nil)
- (autoload 'ibuffer-filter-by-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-used-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-derived-mode "ibuf-ext")
- (autoload 'ibuffer-filter-by-name "ibuf-ext")
- (autoload 'ibuffer-filter-by-filename "ibuf-ext")
- (autoload 'ibuffer-filter-by-size-gt "ibuf-ext")
- (autoload 'ibuffer-filter-by-size-lt "ibuf-ext")
- (autoload 'ibuffer-filter-by-content "ibuf-ext")
- (autoload 'ibuffer-filter-by-predicate "ibuf-ext")
-
-(autoload 'ibuffer-toggle-sorting-mode "ibuf-ext" "\
-Toggle the current sorting mode.
-Default sorting modes are:
- Recency - the last time the buffer was viewed
- Name - the name of the buffer
- Major Mode - the name of the major mode of the buffer
- Size - the size of the buffer
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-invert-sorting "ibuf-ext" "\
-Toggle whether or not sorting is in reverse order.
-
-\(fn)" t nil)
- (autoload 'ibuffer-do-sort-by-major-mode "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-mode-name "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-alphabetic "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-size "ibuf-ext")
- (autoload 'ibuffer-do-sort-by-filename/process "ibuf-ext")
-
-(autoload 'ibuffer-bs-show "ibuf-ext" "\
-Emulate `bs-show' from the bs.el package.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-add-to-tmp-hide "ibuf-ext" "\
-Add REGEXP to `ibuffer-tmp-hide-regexps'.
-This means that buffers whose name matches REGEXP will not be shown
-for this Ibuffer session.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-add-to-tmp-show "ibuf-ext" "\
-Add REGEXP to `ibuffer-tmp-show-regexps'.
-This means that buffers whose name matches REGEXP will always be shown
-for this Ibuffer session.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-forward-next-marked "ibuf-ext" "\
-Move forward by COUNT marked buffers (default 1).
-
-If MARK is non-nil, it should be a character denoting the type of mark
-to move by. The default is `ibuffer-marked-char'.
-
-If DIRECTION is non-nil, it should be an integer; negative integers
-mean move backwards, non-negative integers mean move forwards.
-
-\(fn &optional COUNT MARK DIRECTION)" t nil)
-
-(autoload 'ibuffer-backwards-next-marked "ibuf-ext" "\
-Move backwards by COUNT marked buffers (default 1).
-
-If MARK is non-nil, it should be a character denoting the type of mark
-to move by. The default is `ibuffer-marked-char'.
-
-\(fn &optional COUNT MARK)" t nil)
-
-(autoload 'ibuffer-do-kill-lines "ibuf-ext" "\
-Hide all of the currently marked lines.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-jump-to-buffer "ibuf-ext" "\
-Move point to the buffer whose name is NAME.
-
-If called interactively, prompt for a buffer name and go to the
-corresponding line in the Ibuffer buffer. If said buffer is in a
-hidden group filter, open it.
-
-If `ibuffer-jump-offer-only-visible-buffers' is non-nil, only offer
-visible buffers in the completion list. Calling the command with
-a prefix argument reverses the meaning of that variable.
-
-\(fn NAME)" t nil)
-
-(autoload 'ibuffer-diff-with-file "ibuf-ext" "\
-View the differences between marked buffers and their associated files.
-If no buffers are marked, use buffer at point.
-This requires the external program \"diff\" to be in your `exec-path'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-copy-filename-as-kill "ibuf-ext" "\
-Copy filenames of marked buffers into the kill ring.
-
-The names are separated by a space.
-If a buffer has no filename, it is ignored.
-
-With no prefix arg, use the filename sans its directory of each marked file.
-With a zero prefix arg, use the complete filename of each marked file.
-With \\[universal-argument], use the filename of each marked file relative
-to `ibuffer-default-directory' if non-nil, otherwise `default-directory'.
-
-You can then feed the file name(s) to other commands with \\[yank].
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'ibuffer-mark-by-name-regexp "ibuf-ext" "\
-Mark all buffers whose name matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-mode-regexp "ibuf-ext" "\
-Mark all buffers whose major mode matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-file-name-regexp "ibuf-ext" "\
-Mark all buffers whose file name matches REGEXP.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'ibuffer-mark-by-mode "ibuf-ext" "\
-Mark all buffers whose major mode equals MODE.
-
-\(fn MODE)" t nil)
-
-(autoload 'ibuffer-mark-modified-buffers "ibuf-ext" "\
-Mark all modified buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-unsaved-buffers "ibuf-ext" "\
-Mark all modified buffers that have an associated file.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-dissociated-buffers "ibuf-ext" "\
-Mark all buffers whose associated file does not exist.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-help-buffers "ibuf-ext" "\
-Mark buffers whose major mode is in variable `ibuffer-help-buffer-modes'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-compressed-file-buffers "ibuf-ext" "\
-Mark buffers whose associated file is compressed.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-old-buffers "ibuf-ext" "\
-Mark buffers which have not been viewed in `ibuffer-old-time' hours.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-special-buffers "ibuf-ext" "\
-Mark all buffers whose name begins and ends with `*'.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-read-only-buffers "ibuf-ext" "\
-Mark all read-only buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-mark-dired-buffers "ibuf-ext" "\
-Mark all `dired' buffers.
-
-\(fn)" t nil)
-
-(autoload 'ibuffer-do-occur "ibuf-ext" "\
-View lines which match REGEXP in all marked buffers.
-Optional argument NLINES says how many lines of context to display: it
-defaults to one.
-
-\(fn REGEXP &optional NLINES)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
-
(provide 'ibuffer)
(run-hooks 'ibuffer-load-hook)
(progn ;;(debug (format "Candidates=%S field=%S" candidates name))
(format " %sNo matches%s" open-bracket close-bracket))
(if last (setcdr last nil))
+ (when (and minibuffer-completing-file-name
+ icomplete-with-completion-tables)
+ (setq comps (completion-pcm--filename-try-filter comps)))
(let* ((most-try
(if (and base-size (> base-size 0))
(completion-try-completion
(defun image-dired-next-line ()
"Move to next line and display properties."
(interactive)
- (forward-line 1)
+ (let ((goal-column (current-column)))
+ (next-line))
;; If we end up in an empty spot, back up to the next thumbnail.
(if (not (image-dired-image-at-point-p))
(image-dired-backward-image))
(defun image-dired-previous-line ()
"Move to previous line and display properties."
(interactive)
- (forward-line -1)
+ (let ((goal-column (current-column)))
+ (previous-line))
;; If we end up in an empty spot, back up to the next
;; thumbnail. This should only happen if the user deleted a
;; thumbnail and did not refresh, so it is not very common. But we
;;; Commentary:
;; Defines a major mode for visiting image files
-;; that allows conversion between viewing the text of the file
-;; and viewing the file as an image. Viewing the image
+;; that allows conversion between viewing the text of the file,
+;; hex of the file and viewing the file as an image. Viewing the image
;; works by putting a `display' text-property on the
;; image data, with the image-data still present underneath; if the
;; resulting buffer file is saved to another name it will correctly save
(defvar image-mode-map
(let ((map (make-sparse-keymap)))
- (set-keymap-parent map special-mode-map)
(define-key map "\C-c\C-c" 'image-toggle-display)
+ (define-key map "\C-c\C-x" 'image-toggle-hex-display)
(define-key map (kbd "SPC") 'image-scroll-up)
(define-key map (kbd "S-SPC") 'image-scroll-down)
(define-key map (kbd "DEL") 'image-scroll-down)
'("Image"
["Show as Text" image-toggle-display :active t
:help "Show image as text"]
+ ["Show as Hex" image-toggle-hex-display :active t
+ :help "Show image as hex"]
"--"
["Fit to Window Height" image-transform-fit-to-height
:visible (eq image-type 'imagemagick)
["Goto Frame..." image-goto-frame :active image-multi-frame
:help "Show a specific frame of this image"]
))
- map)
+ (make-composed-keymap (list map image-map) special-mode-map))
"Mode keymap for `image-mode'.")
(defvar image-minor-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-c\C-c" 'image-toggle-display)
+ (define-key map "\C-c\C-x" 'image-toggle-hex-display)
map)
"Mode keymap for `image-minor-mode'.")
;;;###autoload
(defun image-mode ()
"Major mode for image files.
-You can use \\<image-mode-map>\\[image-toggle-display]
-to toggle between display as an image and display as text.
+You can use \\<image-mode-map>\\[image-toggle-display] or \\<image-mode-map>\\[image-toggle-hex-display]
+to toggle between display as an image and display as text or hex.
Key bindings:
\\{image-mode-map}"
(run-mode-hooks 'image-mode-hook)
(let ((image (image-get-display-property))
(msg1 (substitute-command-keys
- "Type \\[image-toggle-display] to view the image as "))
+ "Type \\[image-toggle-display] or \\[image-toggle-hex-display] to view the image as "))
animated)
(cond
((null image)
;;; (substitute-command-keys
;;; "\\[image-toggle-animation] to animate."))))
(t
- (message "%s" (concat msg1 "text."))))))
+ (message "%s" (concat msg1 "text or hex."))))))
(error
(image-mode-as-text)
(add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t)))
;;;###autoload
-(defun image-mode-as-text ()
+(defun image-mode-to-text ()
"Set a non-image mode as major mode in combination with image minor mode.
-A non-image major mode found from `auto-mode-alist' or Fundamental mode
-displays an image file as text. `image-minor-mode' provides the key
-\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
-to display an image file as the actual image.
-
-You can use `image-mode-as-text' in `auto-mode-alist' when you want
-to display an image file as text initially.
-
-See commands `image-mode' and `image-minor-mode' for more information
-on these modes."
- (interactive)
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as text."
;; image-mode-as-text = normal-mode + image-minor-mode
(let ((previous-image-type image-type)) ; preserve `image-type'
(if image-mode-previous-major-mode
;; Enable image minor mode with `C-c C-c'.
(image-minor-mode 1)
;; Show the image file as text.
- (image-toggle-display-text)
- (message "%s" (concat
- (substitute-command-keys
- "Type \\[image-toggle-display] to view the image as ")
- (if (image-get-display-property)
- "text" "an image") "."))))
+ (image-toggle-display-text)))
+
+(defun image-mode-as-hex ()
+ "Set a non-image mode as major mode in combination with image minor mode.
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as hex. `image-minor-mode' provides the key
+\\<image-mode-map>\\[image-toggle-hex-display] to switch back to `image-mode'
+to display an image file as the actual image.
+
+You can use `image-mode-as-hex' in `auto-mode-alist' when you want to
+to display an image file as hex initially.
+
+See commands `image-mode' and `image-minor-mode' for more information
+on these modes."
+ (interactive)
+ (image-mode-to-text)
+ ;; Turn on hexl-mode
+ (hexl-mode)
+ (message "%s" (concat
+ (substitute-command-keys
+ "Type \\[image-toggle-hex-display] or \\[image-toggle-display] to view the image as ")
+ (if (image-get-display-property)
+ "hex" "an image or text") ".")))
+
+(defun image-mode-as-text ()
+ "Set a non-image mode as major mode in combination with image minor mode.
+A non-image major mode found from `auto-mode-alist' or Fundamental mode
+displays an image file as text. `image-minor-mode' provides the key
+\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
+to display an image file as the actual image.
+
+You can use `image-mode-as-text' in `auto-mode-alist' when you want
+to display an image file as text initially.
+
+See commands `image-mode' and `image-minor-mode' for more information
+on these modes."
+ (interactive)
+ (image-mode-to-text)
+ (message "%s" (concat
+ (substitute-command-keys
+ "Type \\[image-toggle-display] or \\[image-toggle-hex-display] to view the image as ")
+ (if (image-get-display-property)
+ "text" "an image or hex") ".")))
(define-obsolete-function-alias 'image-mode-maybe 'image-mode "23.2")
(if (called-interactively-p 'any)
(message "Repeat this command to go back to displaying the file as text"))))
+(defun image-toggle-hex-display ()
+ "Toggle between image and hex display."
+ (interactive)
+ (if (image-get-display-property)
+ (image-mode-as-hex)
+ (if (eq major-mode 'fundamental-mode)
+ (image-mode-as-hex)
+ (image-mode))))
+
(defun image-toggle-display ()
"Toggle between image and text display.
+
If the current buffer is displaying an image file as an image,
-call `image-mode-as-text' to switch to text. Otherwise, display
-the image by calling `image-mode'."
+call `image-mode-as-text' to switch to text or hex display.
+Otherwise, display the image by calling `image-mode'"
(interactive)
(if (image-get-display-property)
(image-mode-as-text)
- (image-mode)))
+ (if (eq major-mode 'hexl-mode)
+ (image-mode-as-text)
+ (image-mode))))
(defun image-kill-buffer ()
"Kill the current buffer."
:type '(repeat (choice directory variable))
:initialize 'custom-initialize-delay)
+(defcustom image-scaling-factor 'auto
+ "When displaying images, apply this scaling factor before displaying.
+This is not supported for all image types, and is mostly useful
+when you have a high-resolution monitor.
+The value is either a floating point number (where numbers higher
+than 1 means to increase the size and lower means to shrink the
+size), or the symbol `auto', which will compute a scaling factor
+based on the font pixel size."
+ :type '(choice number
+ (const :tag "Automatically compute" auto))
+ :group 'image
+ :version "25.2")
+
+;; Map put into text properties on images.
+(defvar image-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "-" 'image-decrease-size)
+ (define-key map "+" 'image-increase-size)
+ (define-key map "r" 'image-rotate)
+ (define-key map "o" 'image-save)
+ map))
(defun image-load-path-for-library (library image &optional path no-error)
"Return a suitable search path for images used by LIBRARY.
(setq type (image-type file-or-data type data-p))
(when (image-type-available-p type)
(append (list 'image :type type (if data-p :data :file) file-or-data)
+ (and (not (plist-get props :scale))
+ (list :scale
+ (image-compute-scaling-factor image-scaling-factor)))
props)))
+(defun image--set-property (image property value)
+ "Set PROPERTY in IMAGE to VALUE.
+Internal use only."
+ (if (null value)
+ (while (cdr image)
+ ;; IMAGE starts with the symbol `image', and the rest is a
+ ;; plist. Decouple plist entries where the key matches
+ ;; the property.
+ (if (eq (cadr image) property)
+ (setcdr image (cddr image))
+ (setq image (cddr image))))
+ ;; Just enter the new value.
+ (plist-put (cdr image) property value))
+ value)
+
+(defun image-property (image property)
+ "Return the value of PROPERTY in IMAGE.
+Properties can be set with
+
+ (setf (image-property IMAGE PROPERTY) VALUE)
+If VALUE is nil, PROPERTY is removed from IMAGE."
+ (declare (gv-setter image--set-property))
+ (plist-get (cdr image) property))
+
+(defun image-compute-scaling-factor (scaling)
+ (cond
+ ((numberp image-scaling-factor)
+ image-scaling-factor)
+ ((eq image-scaling-factor 'auto)
+ (let ((width (/ (float (window-width nil t)) (window-width))))
+ ;; If we assume that a typical character is 10 pixels in width,
+ ;; then we should scale all images according to how wide they
+ ;; are. But don't scale images down.
+ (if (< width 10)
+ 1
+ (/ (float width) 10))))
+ (t
+ (error "Invalid scaling factor %s" image-scaling-factor))))
;;;###autoload
(defun put-image (image pos &optional string area)
(put-text-property 0 (length string) 'display prop string)
(overlay-put overlay 'put-image t)
(overlay-put overlay 'before-string string)
+ (overlay-put overlay 'map image-map)
overlay)))
(add-text-properties start (point)
`(display ,(if slice
(list (cons 'slice slice) image)
- image) rear-nonsticky (display)))))
+ image)
+ rear-nonsticky (display)
+ keymap ,image-map))))
;;;###autoload
(insert string)
(add-text-properties start (point)
`(display ,(list (list 'slice x y dx dy) image)
- rear-nonsticky (display)))
+ rear-nonsticky (display)
+ keymap ,image-map))
(setq x (+ x dx))))
(setq x 0.0
y (+ y dy))
(plist-put (cdr image) :animate-buffer (current-buffer))
(run-with-timer 0.2 nil 'image-animate-timeout
image (or index 0) (car animation)
- 0 limit))))
+ 0 limit (+ (float-time) 0.2)))))
(defun image-animate-timer (image)
"Return the animation timer for image IMAGE."
;; hence we need to call image-multi-frame-p to return it.
;; But it also returns count, so why do we bother passing that as an
;; argument?
-(defun image-animate-timeout (image n count time-elapsed limit)
+(defun image-animate-timeout (image n count time-elapsed limit target-time)
"Display animation frame N of IMAGE.
N=0 refers to the initial animation frame.
COUNT is the total number of frames in the animation.
If the image has a non-nil :speed property, it acts as a multiplier
for the animation speed. A negative value means to animate in reverse."
- (when (buffer-live-p (plist-get (cdr image) :animate-buffer))
+ (when (and (buffer-live-p (plist-get (cdr image) :animate-buffer))
+ ;; Delayed more than two seconds more than expected.
+ (when (> (- (float-time) target-time) 2)
+ (message "Stopping animation; animation possibly too big")
+ nil))
(image-show-frame image n t)
(let* ((speed (image-animate-get-speed image))
(time (float-time))
(setq done (>= time-elapsed limit)))
(unless done
(run-with-timer delay nil 'image-animate-timeout
- image n count time-elapsed limit)))))
+ image n count time-elapsed limit
+ (+ (float-time) delay))))))
\f
(defvar imagemagick-types-inhibit)
(imagemagick-register-types)
+(defun image-increase-size (n)
+ "Increase the image size by a factor of N.
+If N is 3, then the image size will be increased by 30%. The
+default is 20%."
+ (interactive "P")
+ (image--change-size (if n
+ (1+ (/ n 10))
+ 1.2)))
+
+(defun image-decrease-size (n)
+ "Decrease the image size by a factor of N.
+If N is 3, then the image size will be decreased by 30%. The
+default is 20%."
+ (interactive "P")
+ (image--change-size (if n
+ (- 1 (/ n 10))
+ 0.8)))
+
+(defun image--get-image ()
+ (let ((image (or (get-text-property (point) 'display)
+ ;; `put-image' uses overlays, so find an image in
+ ;; the overlays.
+ (seq-find (lambda (overlay)
+ (overlay-get overlay 'display))
+ (overlays-at (point))))))
+ (when (or (not (consp image))
+ (not (eq (car image) 'image)))
+ (error "No image under point"))
+ image))
+
+(defun image--get-imagemagick-and-warn ()
+ (unless (fboundp 'imagemagick-types)
+ (error "Can't rescale images without ImageMagick support"))
+ (let ((image (image--get-image)))
+ (image-flush image)
+ (plist-put (cdr image) :type 'imagemagick)
+ image))
+
+(defun image--change-size (factor)
+ (let* ((image (image--get-imagemagick-and-warn))
+ (new-image (image--image-without-parameters image))
+ (scale (image--current-scaling image new-image)))
+ (setcdr image (cdr new-image))
+ (plist-put (cdr image) :scale (* scale factor))))
+
+(defun image--image-without-parameters (image)
+ (cons (pop image)
+ (let ((new nil))
+ (while image
+ (let ((key (pop image))
+ (val (pop image)))
+ (unless (memq key '(:scale :width :height :max-width :max-height))
+ (setq new (nconc new (list key val))))))
+ new)))
+
+(defun image--current-scaling (image new-image)
+ ;; The image may be scaled due to many reasons (:scale, :max-width,
+ ;; etc), so find out what the current scaling is based on the
+ ;; original image size and the displayed size.
+ (let ((image-width (car (image-size new-image t)))
+ (display-width (car (image-size image t))))
+ (/ (float display-width) image-width)))
+
+(defun image-rotate ()
+ "Rotate the image under point by 90 degrees clockwise."
+ (interactive)
+ (let ((image (image--get-imagemagick-and-warn)))
+ (plist-put (cdr image) :rotation
+ (float (+ (or (plist-get (cdr image) :rotation) 0) 90)))))
+
+(defun image-save ()
+ "Save the image under point."
+ (interactive)
+ (let ((image (get-text-property (point) 'display)))
+ (when (or (not (consp image))
+ (not (eq (car image) 'image)))
+ (error "No image under point"))
+ (with-temp-buffer
+ (let ((file (plist-get (cdr image) :file)))
+ (if file
+ (if (not (file-exists-p file))
+ (error "File %s no longer exists" file)
+ (insert-file-contents-literally file))
+ (insert (plist-get (cdr image) :data))))
+ (write-region (point-min) (point-max)
+ (read-file-name "Write image to file: ")))))
+
(provide 'image)
;;; image.el ends here
GNU/Linux system these might be in packages with names like `compface'
or `faces-xface' and `netpbm' or `libgr-progs', for instance."
(with-temp-buffer
- (unless (featurep 'xemacs) (set-buffer-multibyte nil))
+ (set-buffer-multibyte nil)
(insert face)
(let ((coding-system-for-read 'raw-text)
;; At least "icontopbm" doesn't work with Windows because
(goto-char (point-min))
(insert "/* Format_version=1, Width=48, Height=48, Depth=1,\
Valid_bits_per_item=16 */\n")
- ;; I just can't get "icontopbm" to work correctly on its
- ;; own in XEmacs. And Emacs doesn't understand un-raw pbm
- ;; files.
- (if (not (featurep 'xemacs))
- (eq 0 (call-process-region (point-min) (point-max)
- "icontopbm"
- 'delete '(t nil)))
- (shell-command-on-region (point-min) (point-max)
- "icontopbm | pnmnoraw"
- (current-buffer) t)
- t))
+ ;; Emacs doesn't understand un-raw pbm files.
+ (eq 0 (call-process-region (point-min) (point-max)
+ "icontopbm"
+ 'delete '(t nil))))
(buffer-string)))))
(provide 'compface)
(require 'url)
(require 'url-cache)
+(require 'image)
(defgroup gravatar nil
"Gravatar."
(when (search-forward "\n\n" nil t)
(buffer-substring (point) (point-max))))))
-(eval-and-compile
- (cond ((featurep 'xemacs)
- (require 'gnus-xmas)
- (defalias 'gravatar-create-image 'gnus-xmas-create-image))
- ((featurep 'gnus-ems)
- (defalias 'gravatar-create-image 'gnus-create-image))
- (t
- (require 'image)
- (defalias 'gravatar-create-image 'create-image))))
-
(defun gravatar-data->image ()
"Get data of current buffer and return an image.
If no image available, return 'error."
(let ((data (gravatar-get-data)))
(if data
- (gravatar-create-image data nil t)
+ (create-image data nil t)
'error)))
(autoload 'help-function-arglist "help-fns")
(apply #'url-retrieve args))
(apply cb
(with-temp-buffer
- (mm-disable-multibyte)
+ (set-buffer-multibyte nil)
(url-cache-extract (url-cache-create-filename url))
(gravatar-data->image))
cbargs))))
(kill-buffer (current-buffer))
data))
(with-temp-buffer
- (mm-disable-multibyte)
+ (set-buffer-multibyte nil)
(url-cache-extract (url-cache-create-filename url))
(gravatar-data->image)))))
(aset char-acronym-table i (car c0-acronyms))
(setq c0-acronyms (cdr c0-acronyms))))
-(let ((c1-acronyms '("XXX" "XXX" "BPH" "NBH" "IND" "NEL" "SSA" "ESA"
+(let ((c1-acronyms '("PAD" "HOP" "BPH" "NBH" "IND" "NEL" "SSA" "ESA"
"HTS" "HTJ" "VTS" "PLD" "PLU" "R1" "SS2" "SS1"
"DCS" "PU1" "PU2" "STS" "CCH" "MW" "SPA" "EPA"
- "SOS" "XXX" "SC1" "CSI" "ST" "OSC" "PM" "APC")))
+ "SOS" "SGCI" "SC1" "CSI" "ST" "OSC" "PM" "APC")))
(dotimes (i 32)
(aset char-acronym-table (+ #x0080 i) (car c1-acronyms))
(setq c1-acronyms (cdr c1-acronyms))))
("br" . "Latin-1") ; Breton
("bs" . "Latin-2") ; Bosnian
("byn" . "UTF-8") ; Bilin; Blin
- ("ca" . "Latin-1") ; Catalan
+ ("ca" "Catalan" iso-8859-1) ; Catalan
; co Corsican
("cs" "Czech" iso-8859-2)
("cy" "Welsh" iso-8859-14)
(let ((char (assoc name ucs-names)))
(when char (format " (%c)" (cdr char)))))
+(defun char-from-name (string &optional ignore-case)
+ "Return a character as a number from its Unicode name STRING.
+If optional IGNORE-CASE is non-nil, ignore case in STRING.
+Return nil if STRING does not name a character."
+ (or (cdr (assoc-string string (ucs-names) ignore-case))
+ (let ((minus (string-match-p "-[0-9A-F]+\\'" string)))
+ (when minus
+ ;; Parse names like "VARIATION SELECTOR-17" and "CJK
+ ;; COMPATIBILITY IDEOGRAPH-F900" that are not in ucs-names.
+ (ignore-errors
+ (let* ((case-fold-search ignore-case)
+ (vs (string-match-p "\\`VARIATION SELECTOR-" string))
+ (minus-num (string-to-number (substring string minus)
+ (if vs 10 16)))
+ (vs-offset (if vs (if (< minus-num -16) #xE00EF #xFDFF) 0))
+ (code (- vs-offset minus-num))
+ (name (get-char-code-property code 'name)))
+ (when (eq t (compare-strings string nil nil name nil nil
+ ignore-case))
+ code)))))))
+
(defun read-char-by-name (prompt)
"Read a character by its Unicode name or hex number string.
Display PROMPT and read a string that represents a character by its
the characters whose names include that substring, not necessarily
at the beginning of the name.
-This function also accepts a hexadecimal number of Unicode code
-point or a number in hash notation, e.g. #o21430 for octal,
-#x2318 for hex, or #10r8984 for decimal."
+Accept a name like \"CIRCULATION FUNCTION\", a hexadecimal
+number like \"2A10\", or a number in hash notation (e.g.,
+\"#x2a10\" for hex, \"10r10768\" for decimal, or \"#o25020\" for
+octal). Treat otherwise-ambiguous strings like \"BED\" (U+1F6CF)
+as names, not numbers."
(let* ((enable-recursive-minibuffers t)
(completion-ignore-case t)
(input
(category . unicode-name))
(complete-with-action action (ucs-names) string pred)))))
(char
- (cond
- ((string-match-p "\\`[0-9a-fA-F]+\\'" input)
- (string-to-number input 16))
- ((string-match-p "\\`#" input)
- (read input))
- (t
- (cdr (assoc-string input (ucs-names) t))))))
+ (cond
+ ((char-from-name input t))
+ ((string-match-p "\\`[0-9a-fA-F]+\\'" input)
+ (ignore-errors (string-to-number input 16)))
+ ((string-match-p "\\`#\\([bBoOxX]\\|[0-9]+[rR]\\)[0-9a-zA-Z]+\\'"
+ input)
+ (ignore-errors (read input))))))
(unless (characterp char)
(error "Invalid character"))
char))
;;; Commentary:
-;; Usage:
-;; (require 'rfc1843)
-;; (rfc1843-gnus-setup)
-;;
;; Test:
;; (rfc1843-decode-string "~{<:Ky2;S{#,NpJ)l6HK!#~}")
;;; Code:
(eval-when-compile (require 'cl))
-(require 'mm-util)
-
-(defvar gnus-decode-encoded-word-function)
-(defvar gnus-decode-header-function)
-(defvar gnus-newsgroup-name)
(defvar rfc1843-word-regexp
"~\\({\\([\041-\167][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
(while (re-search-forward (if rfc1843-decode-hzp
rfc1843-hzp-word-regexp
rfc1843-word-regexp) (point-max) t)
- ;;; Text with extents may cause XEmacs crash
(setq str (buffer-substring-no-properties
(match-beginning 1)
(match-end 1)))
(setq firstc (aref str 0))
- (insert (mm-decode-coding-string
+ (insert (decode-coding-string
(rfc1843-decode
(prog1
(substring str 1)
(defun rfc1843-decode-string (string)
"Decode HZ STRING and return the results."
- (let ((m (mm-multibyte-p)))
+ (let ((m enable-multibyte-characters))
(with-temp-buffer
(when m
- (mm-enable-multibyte))
+ (set-buffer-multibyte 'to))
(insert string)
(inline
(rfc1843-decode-region (point-min) (point-max)))
(aset s (incf i) (+ v (if (< v 63) 64 98))))))
s))
-(autoload 'mail-header-parse-content-type "mail-parse")
-(autoload 'message-narrow-to-head "message")
-(declare-function message-fetch-field "message" (header &optional not-all))
-
-(defun rfc1843-decode-article-body ()
- "Decode HZ encoded text in the article body."
- (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
- (or gnus-newsgroup-name ""))
- (save-excursion
- (save-restriction
- (message-narrow-to-head)
- (let* ((inhibit-point-motion-hooks t)
- (case-fold-search t)
- (ct (message-fetch-field "Content-Type" t))
- (ctl (and ct (mail-header-parse-content-type ct))))
- (if (and ctl (not (string-match "/" (car ctl))))
- (setq ctl nil))
- (goto-char (point-max))
- (widen)
- (forward-line 1)
- (narrow-to-region (point) (point-max))
- (when (or (not ctl)
- (equal (car ctl) "text/plain"))
- (rfc1843-decode-region (point) (point-max))))))))
-
-(defvar gnus-decode-header-methods)
-(defvar gnus-decode-encoded-word-methods)
-
-(defun rfc1843-gnus-setup ()
- "Setup HZ decoding for Gnus."
- (require 'gnus-art)
- (require 'gnus-sum)
- (add-hook 'gnus-article-decode-hook 'rfc1843-decode-article-body t)
- (setq gnus-decode-encoded-word-function
- 'gnus-multi-decode-encoded-word-string
- gnus-decode-header-function
- 'gnus-multi-decode-header
- gnus-decode-encoded-word-methods
- (nconc gnus-decode-encoded-word-methods
- (list
- (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
- 'rfc1843-decode-string)))
- gnus-decode-header-methods
- (nconc gnus-decode-header-methods
- (list
- (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
- 'rfc1843-decode-region)))))
-
(provide 'rfc1843)
;;; rfc1843.el ends here
"Encode text from START to END in buffer as UTF-7 escape fragment.
Use IMAP modification if FOR-IMAP is non-nil."
(save-restriction
- (narrow-to-region start end)
- (funcall (utf7-get-u16char-converter 'to-utf-16))
- (mm-with-unibyte-current-buffer
- (base64-encode-region start (point-max)))
- (goto-char start)
+ (let* ((buf (current-buffer))
+ (base (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert-buffer-substring buf start end)
+ (funcall (utf7-get-u16char-converter 'to-utf-16))
+ (base64-encode-region (point-min) (point-max))
+ (buffer-string))))
+ (narrow-to-region start end)
+ (delete-region (point-min) (point-max))
+ (insert base))
+ (goto-char (point-min))
(let ((pm (point-max)))
(when for-imap
(while (search-forward "/" nil t)
(defun utf7-latin1-u16-char-converter ()
"Convert latin 1 (ISO-8859.1) characters to 16 bit Unicode.
Characters are converted to raw byte pairs in narrowed buffer."
- (mm-encode-coding-region (point-min) (point-max) 'iso-8859-1)
- (mm-disable-multibyte)
+ (encode-coding-region (point-min) (point-max) 'iso-8859-1)
(goto-char (point-min))
(while (not (eobp))
(insert 0)
(delete-char 1)
(error "Unable to convert from Unicode"))
(forward-char))
- (mm-decode-coding-region (point-min) (point-max) 'iso-8859-1)
+ (decode-coding-region (point-min) (point-max) 'iso-8859-1)
(mm-enable-multibyte))
;;;###autoload
If you need to debug code run from jit-lock, see `jit-lock-debug-mode'."
(setq jit-lock-mode arg)
(cond
- ((buffer-base-buffer)
- ;; We're in an indirect buffer. This doesn't work because jit-lock relies
- ;; on the `fontified' text-property which is shared with the base buffer.
+ ((and (buffer-base-buffer)
+ jit-lock-mode)
+ ;; We're in an indirect buffer, and we're turning the mode on.
+ ;; This doesn't work because jit-lock relies on the `fontified'
+ ;; text-property which is shared with the base buffer.
(setq jit-lock-mode nil)
(message "Not enabling jit-lock: it does not work in indirect buffer"))
"Display the current head of the keyboard macro ring."
(interactive)
(unless (kmacro-ring-empty-p)
- (kmacro-display (car (car kmacro-ring)) "2nd macro")))
+ (kmacro-display (car (car kmacro-ring)) nil "2nd macro")))
(defun kmacro-cycle-ring-next (&optional _arg)
(documentation . "Support for Brazilian Portuguese."))
'("European"))
+(set-language-info-alist
+ "Catalan" '((charset iso-8859-1)
+ (coding-system iso-8859-1 iso-8859-15)
+ (coding-priority iso-8859-1)
+ (input-method . "catalan-prefix")
+ (nonascii-translation . iso-8859-1)
+ (unibyte-display . iso-8859-1)
+ (setup-function
+ . (lambda ()
+ (modify-syntax-entry ?· "w" (standard-syntax-table))))
+ (exit-function
+ . (lambda ()
+ (modify-syntax-entry ?· "_" (standard-syntax-table))))
+ (sample-text . "\
+Catalan (Català) Avui demà i ahir s'esfullarà una rosa.")
+ (documentation . "\
+This language environment uses the ISO-8859-1 character set,
+sets the default input method to \"catalan-prefix\", and sets
+the syntax of the middle dot character `·' to word."))
+ '("European"))
+
+
\f
(define-coding-system 'mac-roman
"Mac Roman Encoding (MIME:MACINTOSH)."
;;; Code:
\f
-;;;### (autoloads nil "5x5" "play/5x5.el" (22150 28228 674072 702000))
+;;;### (autoloads nil "5x5" "play/5x5.el" (0 0 0 0))
;;; Generated autoloads from play/5x5.el
(autoload '5x5 "5x5" "\
;;;***
\f
-;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (22197 58438
-;;;;;; 383460 447000))
+;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ada-mode.el
(autoload 'ada-add-extensions "ada-mode" "\
;;;***
\f
-;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (22150 28228
-;;;;;; 750072 702000))
+;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ada-stmt.el
(autoload 'ada-header "ada-stmt" "\
;;;***
\f
-;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (22150 28228
-;;;;;; 754072 702000))
+;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ada-xref.el
(autoload 'ada-find-file "ada-xref" "\
;;;***
\f
-;;;### (autoloads nil "add-log" "vc/add-log.el" (22284 55604 194845
-;;;;;; 171000))
+;;;### (autoloads nil "add-log" "vc/add-log.el" (0 0 0 0))
;;; Generated autoloads from vc/add-log.el
(put 'change-log-default-name 'safe-local-variable 'string-or-null-p)
If `change-log-default-name' contains a leading directory component, then
simply find it in the current directory. Otherwise, search in the current
-directory and its successive parents for a file so named.
+directory and its successive parents for a file so named. Stop at the first
+such file that exists (or has a buffer visiting it), or the first directory
+that contains any of `change-log-directory-files'. If no match is found,
+use the current directory. To override the choice of this function,
+simply create an empty ChangeLog file first by hand in the desired place.
Once a file is found, `change-log-default-name' is set locally in the
current buffer to the complete file name.
;;;***
\f
-;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (22150 28227
-;;;;;; 338072 702000))
+;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/advice.el
(defvar ad-redefinition-action 'warn "\
;;;***
\f
-;;;### (autoloads nil "align" "align.el" (22154 25280 740828 526000))
+;;;### (autoloads nil "align" "align.el" (0 0 0 0))
;;; Generated autoloads from align.el
(autoload 'align "align" "\
(autoload 'align-newline-and-indent "align" "\
A replacement function for `newline-and-indent', aligning as it goes.
+The alignment is done by calling `align' on the region that was
+indented.
\(fn)" t nil)
;;;***
\f
-;;;### (autoloads nil "allout" "allout.el" (22189 64323 68321 19000))
+;;;### (autoloads nil "allout" "allout.el" (0 0 0 0))
;;; Generated autoloads from allout.el
(push (purecopy '(allout 2 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (22150
-;;;;;; 28226 938072 702000))
+;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from allout-widgets.el
(push (purecopy '(allout-widgets 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (22150 28228 350072
-;;;;;; 702000))
+;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (0 0 0 0))
;;; Generated autoloads from net/ange-ftp.el
(defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir)
;;;***
\f
-;;;### (autoloads nil "animate" "play/animate.el" (22150 28228 674072
-;;;;;; 702000))
+;;;### (autoloads nil "animate" "play/animate.el" (0 0 0 0))
;;; Generated autoloads from play/animate.el
(autoload 'animate-string "animate" "\
;;;***
\f
-;;;### (autoloads nil "ansi-color" "ansi-color.el" (22150 28226 942072
-;;;;;; 702000))
+;;;### (autoloads nil "ansi-color" "ansi-color.el" (0 0 0 0))
;;; Generated autoloads from ansi-color.el
(push (purecopy '(ansi-color 3 4 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (22182
-;;;;;; 44208 579853 279000))
+;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from progmodes/antlr-mode.el
(push (purecopy '(antlr-mode 2 2 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "appt" "calendar/appt.el" (22150 28227 46072
-;;;;;; 702000))
+;;;### (autoloads nil "appt" "calendar/appt.el" (0 0 0 0))
;;; Generated autoloads from calendar/appt.el
(autoload 'appt-add "appt" "\
;;;***
\f
-;;;### (autoloads nil "apropos" "apropos.el" (22224 48490 143402
-;;;;;; 355000))
+;;;### (autoloads nil "apropos" "apropos.el" (0 0 0 0))
;;; Generated autoloads from apropos.el
(autoload 'apropos-read-pattern "apropos" "\
;;;***
\f
-;;;### (autoloads nil "arc-mode" "arc-mode.el" (22150 28226 946072
-;;;;;; 702000))
+;;;### (autoloads nil "arc-mode" "arc-mode.el" (0 0 0 0))
;;; Generated autoloads from arc-mode.el
(autoload 'archive-mode "arc-mode" "\
;;;***
\f
-;;;### (autoloads nil "array" "array.el" (22150 28226 946072 702000))
+;;;### (autoloads nil "array" "array.el" (0 0 0 0))
;;; Generated autoloads from array.el
(autoload 'array-mode "array" "\
;;;***
\f
-;;;### (autoloads nil "artist" "textmodes/artist.el" (22150 28229
-;;;;;; 86072 702000))
+;;;### (autoloads nil "artist" "textmodes/artist.el" (0 0 0 0))
;;; Generated autoloads from textmodes/artist.el
(push (purecopy '(artist 1 2 6)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (22150 28228
-;;;;;; 758072 702000))
+;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (0 0 0 0))
;;; Generated autoloads from progmodes/asm-mode.el
(autoload 'asm-mode "asm-mode" "\
;;;***
\f
-;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (22150
-;;;;;; 28227 658072 702000))
-;;; Generated autoloads from gnus/auth-source.el
+;;;### (autoloads nil "auth-source" "auth-source.el" (0 0 0 0))
+;;; Generated autoloads from auth-source.el
(defvar auth-source-cache-expiry 7200 "\
How many seconds passwords are cached, or nil to disable
;;;***
\f
-;;;### (autoloads nil "autoarg" "autoarg.el" (22150 28226 946072
-;;;;;; 702000))
+;;;### (autoloads nil "autoarg" "autoarg.el" (0 0 0 0))
;;; Generated autoloads from autoarg.el
(defvar autoarg-mode nil "\
Non-nil if Autoarg mode is enabled.
-See the command `autoarg-mode' for a description of this minor mode.")
+See the `autoarg-mode' command
+for a description of this minor mode.")
(custom-autoload 'autoarg-mode "autoarg" nil)
(defvar autoarg-kp-mode nil "\
Non-nil if Autoarg-Kp mode is enabled.
-See the command `autoarg-kp-mode' for a description of this minor mode.
+See the `autoarg-kp-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `autoarg-kp-mode'.")
;;;***
\f
-;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (22150 28228
-;;;;;; 758072 702000))
+;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (0 0 0 0))
;;; Generated autoloads from progmodes/autoconf.el
(autoload 'autoconf-mode "autoconf" "\
;;;***
\f
-;;;### (autoloads nil "autoinsert" "autoinsert.el" (22192 2880 903382
-;;;;;; 391000))
+;;;### (autoloads nil "autoinsert" "autoinsert.el" (0 0 0 0))
;;; Generated autoloads from autoinsert.el
(autoload 'auto-insert "autoinsert" "\
(defvar auto-insert-mode nil "\
Non-nil if Auto-Insert mode is enabled.
-See the command `auto-insert-mode' for a description of this minor mode.
+See the `auto-insert-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `auto-insert-mode'.")
;;;***
\f
-;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (22302
-;;;;;; 35693 265420 723000))
+;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from emacs-lisp/autoload.el
(put 'generated-autoload-file 'safe-local-variable 'stringp)
;;;***
\f
-;;;### (autoloads nil "autorevert" "autorevert.el" (22292 49734 698738
-;;;;;; 351000))
+;;;### (autoloads nil "autorevert" "autorevert.el" (0 0 0 0))
;;; Generated autoloads from autorevert.el
(autoload 'auto-revert-mode "autorevert" "\
-Toggle reverting buffer when the file changes (Auto Revert mode).
-With a prefix argument ARG, enable Auto Revert mode if ARG is
+Toggle reverting buffer when the file changes (Auto-Revert Mode).
+With a prefix argument ARG, enable Auto-Revert Mode if ARG is
positive, and disable it otherwise. If called from Lisp, enable
the mode if ARG is omitted or nil.
-Auto Revert mode is a minor mode that affects only the current
+Auto-Revert Mode is a minor mode that affects only the current
buffer. When enabled, it reverts the buffer when the file on
disk changes.
(autoload 'auto-revert-tail-mode "autorevert" "\
Toggle reverting tail of buffer when the file grows.
-With a prefix argument ARG, enable Auto-Revert Tail mode if ARG
+With a prefix argument ARG, enable Auto-Revert Tail Mode if ARG
is positive, and disable it otherwise. If called from Lisp,
enable the mode if ARG is omitted or nil.
-When Auto Revert Tail mode is enabled, the tail of the file is
+When Auto-Revert Tail Mode is enabled, the tail of the file is
constantly followed, as with the shell command `tail -f'. This
means that whenever the file grows on disk (presumably because
some background process is appending to it from time to time),
\(fn &optional ARG)" t nil)
(autoload 'turn-on-auto-revert-tail-mode "autorevert" "\
-Turn on Auto-Revert Tail mode.
+Turn on Auto-Revert Tail Mode.
This function is designed to be added to hooks, for example:
(add-hook \\='my-logfile-mode-hook #\\='turn-on-auto-revert-tail-mode)
(defvar global-auto-revert-mode nil "\
Non-nil if Global Auto-Revert mode is enabled.
-See the command `global-auto-revert-mode' for a description of this minor mode.
+See the `global-auto-revert-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-auto-revert-mode'.")
(custom-autoload 'global-auto-revert-mode "autorevert" nil)
(autoload 'global-auto-revert-mode "autorevert" "\
-Toggle Global Auto Revert mode.
-With a prefix argument ARG, enable Global Auto Revert mode if ARG
+Toggle Global Auto-Revert Mode.
+With a prefix argument ARG, enable Global Auto-Revert Mode if ARG
is positive, and disable it otherwise. If called from Lisp,
enable the mode if ARG is omitted or nil.
-Global Auto Revert mode is a global minor mode that reverts any
+Global Auto-Revert Mode is a global minor mode that reverts any
buffer associated with a file when the file changes on disk. Use
`auto-revert-mode' to revert a particular buffer.
;;;***
\f
-;;;### (autoloads nil "avoid" "avoid.el" (22150 28226 946072 702000))
+;;;### (autoloads nil "avoid" "avoid.el" (0 0 0 0))
;;; Generated autoloads from avoid.el
(defvar mouse-avoidance-mode nil "\
;;;***
\f
-;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (22150 28228
-;;;;;; 758072 702000))
+;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (0 0 0 0))
;;; Generated autoloads from progmodes/bat-mode.el
(add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . bat-mode))
;;;***
\f
-;;;### (autoloads nil "battery" "battery.el" (22216 22852 972596
-;;;;;; 491000))
+;;;### (autoloads nil "battery" "battery.el" (0 0 0 0))
;;; Generated autoloads from battery.el
(put 'battery-mode-line-string 'risky-local-variable t)
(defvar display-battery-mode nil "\
Non-nil if Display-Battery mode is enabled.
-See the command `display-battery-mode' for a description of this minor mode.
+See the `display-battery-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `display-battery-mode'.")
;;;***
\f
-;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (22150
-;;;;;; 28227 338072 702000))
+;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from emacs-lisp/benchmark.el
(autoload 'benchmark-run "benchmark" "\
;;;***
\f
-;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (22150 28229
-;;;;;; 94072 702000))
+;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (0 0 0 0))
;;; Generated autoloads from textmodes/bibtex.el
(autoload 'bibtex-initialize "bibtex" "\
;;;***
\f
;;;### (autoloads nil "bibtex-style" "textmodes/bibtex-style.el"
-;;;;;; (22150 28229 86072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from textmodes/bibtex-style.el
(autoload 'bibtex-style-mode "bibtex-style" "\
;;;***
\f
-;;;### (autoloads nil "binhex" "mail/binhex.el" (22150 28228 226072
-;;;;;; 702000))
+;;;### (autoloads nil "binhex" "mail/binhex.el" (0 0 0 0))
;;; Generated autoloads from mail/binhex.el
(defconst binhex-begin-line "^:...............................................................$" "\
;;;***
\f
-;;;### (autoloads nil "blackbox" "play/blackbox.el" (22150 28228
-;;;;;; 674072 702000))
+;;;### (autoloads nil "blackbox" "play/blackbox.el" (0 0 0 0))
;;; Generated autoloads from play/blackbox.el
(autoload 'blackbox "blackbox" "\
;;;***
\f
-;;;### (autoloads nil "bookmark" "bookmark.el" (22301 64691 837087
-;;;;;; 484000))
+;;;### (autoloads nil "bookmark" "bookmark.el" (0 0 0 0))
;;; Generated autoloads from bookmark.el
(define-key ctl-x-r-map "b" 'bookmark-jump)
(define-key ctl-x-r-map "m" 'bookmark-set)
If you load a file that doesn't contain a proper bookmark alist, you
will corrupt Emacs's bookmark list. Generally, you should only load
in files that were created with the bookmark functions in the first
-place. Your own personal bookmark file, specified by the variable
-`bookmark-default-file', is maintained automatically by Emacs; you
-shouldn't need to load it explicitly.
+place. Your own personal bookmark file, `~/.emacs.bmk', is
+maintained automatically by Emacs; you shouldn't need to load it
+explicitly.
If you load a file containing bookmarks with the same names as
bookmarks already present in your Emacs, the new bookmarks will get
;;;***
\f
-;;;### (autoloads nil "browse-url" "net/browse-url.el" (22189 64323
-;;;;;; 280321 19000))
+;;;### (autoloads nil "browse-url" "net/browse-url.el" (0 0 0 0))
;;; Generated autoloads from net/browse-url.el
(defvar browse-url-browser-function 'browse-url-default-browser "\
;;;***
\f
-;;;### (autoloads nil "bs" "bs.el" (22150 28226 950072 702000))
+;;;### (autoloads nil "bs" "bs.el" (0 0 0 0))
;;; Generated autoloads from bs.el
(push (purecopy '(bs 1 17)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "bubbles" "play/bubbles.el" (22150 28228 674072
-;;;;;; 702000))
+;;;### (autoloads nil "bubbles" "play/bubbles.el" (0 0 0 0))
;;; Generated autoloads from play/bubbles.el
(autoload 'bubbles "bubbles" "\
;;;***
\f
;;;### (autoloads nil "bug-reference" "progmodes/bug-reference.el"
-;;;;;; (22150 28228 758072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from progmodes/bug-reference.el
(put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format)))))
;;;***
\f
-;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (22195
-;;;;;; 16710 339344 967000))
+;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from emacs-lisp/bytecomp.el
(put 'byte-compile-dynamic 'safe-local-variable 'booleanp)
(put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp)
;;;***
\f
-;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (22192
-;;;;;; 2880 911382 391000))
+;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from calendar/cal-china.el
(put 'calendar-chinese-time-zone 'risky-local-variable t)
;;;***
\f
-;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (22150 28227
-;;;;;; 50072 702000))
+;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (0 0 0 0))
;;; Generated autoloads from calendar/cal-dst.el
(put 'calendar-daylight-savings-starts 'risky-local-variable t)
;;;***
\f
-;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (22150
-;;;;;; 28227 50072 702000))
+;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from calendar/cal-hebrew.el
(autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\
;;;***
\f
-;;;### (autoloads nil "calc" "calc/calc.el" (22150 28227 26072 702000))
+;;;### (autoloads nil "calc" "calc/calc.el" (0 0 0 0))
;;; Generated autoloads from calc/calc.el
(define-key ctl-x-map "*" 'calc-dispatch)
;;;***
\f
-;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (22150 28227
-;;;;;; 22072 702000))
+;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-undo.el
(autoload 'calc-undo "calc-undo" "\
;;;***
\f
-;;;### (autoloads nil "calculator" "calculator.el" (22222 61645 281665
-;;;;;; 355000))
+;;;### (autoloads nil "calculator" "calculator.el" (0 0 0 0))
;;; Generated autoloads from calculator.el
(autoload 'calculator "calculator" "\
;;;***
\f
-;;;### (autoloads nil "calendar" "calendar/calendar.el" (22192 2880
-;;;;;; 919382 391000))
+;;;### (autoloads nil "calendar" "calendar/calendar.el" (0 0 0 0))
;;; Generated autoloads from calendar/calendar.el
(autoload 'calendar "calendar" "\
;;;***
\f
-;;;### (autoloads nil "canlock" "gnus/canlock.el" (22150 28227 658072
-;;;;;; 702000))
+;;;### (autoloads nil "canlock" "gnus/canlock.el" (0 0 0 0))
;;; Generated autoloads from gnus/canlock.el
(autoload 'canlock-insert-header "canlock" "\
;;;***
\f
-;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (22308
-;;;;;; 37947 170422 527000))
+;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/cc-engine.el
(autoload 'c-guess-basic-syntax "cc-engine" "\
;;;***
\f
-;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (22150 28228
-;;;;;; 790072 702000))
+;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-guess.el
(defvar c-guess-guessed-offsets-alist nil "\
;;;***
\f
-;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (22162 19398
-;;;;;; 889892 547000))
+;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-mode.el
(autoload 'c-initialize-cc-mode "cc-mode" "\
;;;***
\f
-;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (22150
-;;;;;; 28228 798072 702000))
+;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/cc-styles.el
(autoload 'c-set-style "cc-styles" "\
;;;***
\f
-;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (22150 28228
-;;;;;; 802072 702000))
+;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-vars.el
(put 'c-basic-offset 'safe-local-variable 'integerp)
(put 'c-backslash-column 'safe-local-variable 'integerp)
;;;***
\f
-;;;### (autoloads nil "ccl" "international/ccl.el" (22150 28228 106072
-;;;;;; 702000))
+;;;### (autoloads nil "ccl" "international/ccl.el" (0 0 0 0))
;;; Generated autoloads from international/ccl.el
(autoload 'ccl-compile "ccl" "\
;;;***
\f
-;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (22150 28227
-;;;;;; 358072 702000))
+;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/cconv.el
(autoload 'cconv-closure-convert "cconv" "\
;;;***
\f
-;;;### (autoloads nil "cedet" "cedet/cedet.el" (22150 28227 146072
-;;;;;; 702000))
+;;;### (autoloads nil "cedet" "cedet/cedet.el" (0 0 0 0))
;;; Generated autoloads from cedet/cedet.el
(push (purecopy '(cedet 2 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (22150 28228
-;;;;;; 802072 702000))
+;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cfengine.el
(push (purecopy '(cfengine 1 4)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "character-fold" "character-fold.el" (22150
-;;;;;; 28227 274072 702000))
+;;;### (autoloads nil "character-fold" "character-fold.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from character-fold.el
(autoload 'character-fold-to-regexp "character-fold" "\
;;;***
\f
-;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (22150 28227
-;;;;;; 358072 702000))
+;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/chart.el
(push (purecopy '(chart 0 2)) package--builtin-versions)
;;;***
\f
;;;### (autoloads nil "check-declare" "emacs-lisp/check-declare.el"
-;;;;;; (22296 46772 428104 103000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/check-declare.el
(autoload 'check-declare-file "check-declare" "\
;;;***
\f
-;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (22197
-;;;;;; 58438 127460 447000))
+;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from emacs-lisp/checkdoc.el
(push (purecopy '(checkdoc 0 6 2)) package--builtin-versions)
(put 'checkdoc-force-docstrings-flag 'safe-local-variable #'booleanp)
;;;***
\f
-;;;### (autoloads nil "china-util" "language/china-util.el" (22150
-;;;;;; 28228 162072 702000))
+;;;### (autoloads nil "china-util" "language/china-util.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from language/china-util.el
(autoload 'decode-hz-region "china-util" "\
;;;***
\f
-;;;### (autoloads nil "chistory" "chistory.el" (22150 28227 274072
-;;;;;; 702000))
+;;;### (autoloads nil "chistory" "chistory.el" (0 0 0 0))
;;; Generated autoloads from chistory.el
(autoload 'repeat-matching-complex-command "chistory" "\
;;;***
\f
-;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (22150
-;;;;;; 28227 366072 702000))
+;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from emacs-lisp/cl-indent.el
(autoload 'common-lisp-indent-function "cl-indent" "\
;;;***
\f
-;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (22220 19926
-;;;;;; 380329 271000))
+;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/cl-lib.el
(push (purecopy '(cl-lib 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (22150 28228
-;;;;;; 802072 702000))
+;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cmacexp.el
(autoload 'c-macro-expand "cmacexp" "\
;;;***
\f
-;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (22150 28227 274072
-;;;;;; 702000))
+;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (0 0 0 0))
;;; Generated autoloads from cmuscheme.el
(autoload 'run-scheme "cmuscheme" "\
;;;***
\f
-;;;### (autoloads nil "color" "color.el" (22150 28227 274072 702000))
+;;;### (autoloads nil "color" "color.el" (0 0 0 0))
;;; Generated autoloads from color.el
(autoload 'color-name-to-rgb "color" "\
;;;***
\f
-;;;### (autoloads nil "comint" "comint.el" (22280 21348 921123 491000))
+;;;### (autoloads nil "comint" "comint.el" (0 0 0 0))
;;; Generated autoloads from comint.el
(defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\
;;;***
\f
-;;;### (autoloads nil "compare-w" "vc/compare-w.el" (22150 28229
-;;;;;; 250072 702000))
+;;;### (autoloads nil "compare-w" "vc/compare-w.el" (0 0 0 0))
;;; Generated autoloads from vc/compare-w.el
(autoload 'compare-windows "compare-w" "\
;;;***
\f
-;;;### (autoloads nil "compile" "progmodes/compile.el" (22308 37947
-;;;;;; 174422 527000))
+;;;### (autoloads nil "compile" "progmodes/compile.el" (0 0 0 0))
;;; Generated autoloads from progmodes/compile.el
(defvar compilation-mode-hook nil "\
;;;***
\f
-;;;### (autoloads nil "completion" "completion.el" (22197 58438 91460
-;;;;;; 447000))
+;;;### (autoloads nil "completion" "completion.el" (0 0 0 0))
;;; Generated autoloads from completion.el
(defvar dynamic-completion-mode nil "\
Non-nil if Dynamic-Completion mode is enabled.
-See the command `dynamic-completion-mode' for a description of this minor mode.
+See the `dynamic-completion-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `dynamic-completion-mode'.")
;;;***
\f
-;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (22150
-;;;;;; 28229 94072 702000))
+;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from textmodes/conf-mode.el
(autoload 'conf-mode "conf-mode" "\
;;;***
\f
-;;;### (autoloads nil "cookie1" "play/cookie1.el" (22150 28228 674072
-;;;;;; 702000))
+;;;### (autoloads nil "cookie1" "play/cookie1.el" (0 0 0 0))
;;; Generated autoloads from play/cookie1.el
(autoload 'cookie "cookie1" "\
;;;***
\f
-;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (22150
-;;;;;; 28227 374072 702000))
+;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from emacs-lisp/copyright.el
(put 'copyright-at-end-flag 'safe-local-variable 'booleanp)
(put 'copyright-names-regexp 'safe-local-variable 'stringp)
;;;***
\f
-;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (22197
-;;;;;; 58438 427460 447000))
+;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from progmodes/cperl-mode.el
(put 'cperl-indent-level 'safe-local-variable 'integerp)
(put 'cperl-brace-offset 'safe-local-variable 'integerp)
;;;***
\f
-;;;### (autoloads nil "cpp" "progmodes/cpp.el" (22150 28228 806072
-;;;;;; 702000))
+;;;### (autoloads nil "cpp" "progmodes/cpp.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cpp.el
(autoload 'cpp-highlight-buffer "cpp" "\
;;;***
\f
-;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (22150 28227 374072
-;;;;;; 702000))
+;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/crm.el
(autoload 'completing-read-multiple "crm" "\
;;;***
\f
-;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (22192 2874
-;;;;;; 475382 391000))
+;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (0 0 0 0))
;;; Generated autoloads from textmodes/css-mode.el
(autoload 'css-mode "css-mode" "\
;;;***
\f
-;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (22150 28227
-;;;;;; 458072 702000))
+;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (0 0 0 0))
;;; Generated autoloads from emulation/cua-base.el
(defvar cua-mode nil "\
Non-nil if Cua mode is enabled.
-See the command `cua-mode' for a description of this minor mode.
+See the `cua-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `cua-mode'.")
;;;***
\f
-;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (22150 28227
-;;;;;; 462072 702000))
+;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (0 0 0 0))
;;; Generated autoloads from emulation/cua-rect.el
(autoload 'cua-rectangle-mark-mode "cua-rect" "\
;;;***
\f
;;;### (autoloads nil "cursor-sensor" "emacs-lisp/cursor-sensor.el"
-;;;;;; (22309 58853 326986 699000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/cursor-sensor.el
-(defvar cursor-sensor-inhibit nil)
-
(autoload 'cursor-intangible-mode "cursor-sensor" "\
Keep cursor outside of any `cursor-intangible' text property.
;;;***
\f
-;;;### (autoloads nil "cus-edit" "cus-edit.el" (22150 28227 290072
-;;;;;; 702000))
+;;;### (autoloads nil "cus-edit" "cus-edit.el" (0 0 0 0))
;;; Generated autoloads from cus-edit.el
(defvar custom-browse-sort-alphabetically nil "\
OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
SYMBOL is a customization option, and WIDGET is a widget for editing
that option.
+DESCRIPTION is unused.
\(fn OPTIONS &optional NAME DESCRIPTION)" nil nil)
;;;***
\f
-;;;### (autoloads nil "cus-theme" "cus-theme.el" (22150 28227 290072
-;;;;;; 702000))
+;;;### (autoloads nil "cus-theme" "cus-theme.el" (0 0 0 0))
;;; Generated autoloads from cus-theme.el
(autoload 'customize-create-theme "cus-theme" "\
;;;***
\f
-;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (22150 28229
-;;;;;; 250072 702000))
+;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (0 0 0 0))
;;; Generated autoloads from vc/cvs-status.el
(autoload 'cvs-status-mode "cvs-status" "\
;;;***
\f
-;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (22150 28228 810072
-;;;;;; 702000))
+;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cwarn.el
(push (purecopy '(cwarn 1 3 1)) package--builtin-versions)
(defvar global-cwarn-mode nil "\
Non-nil if Global Cwarn mode is enabled.
-See the command `global-cwarn-mode' for a description of this minor mode.
+See the `global-cwarn-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-cwarn-mode'.")
;;;***
\f
-;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (22150
-;;;;;; 28228 162072 702000))
+;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from language/cyril-util.el
(autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\
;;;***
\f
-;;;### (autoloads nil "dabbrev" "dabbrev.el" (22232 11079 208267
-;;;;;; 636000))
+;;;### (autoloads nil "dabbrev" "dabbrev.el" (0 0 0 0))
;;; Generated autoloads from dabbrev.el
(put 'dabbrev-case-fold-search 'risky-local-variable t)
(put 'dabbrev-case-replace 'risky-local-variable t)
;;;***
\f
-;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (22150 28227
-;;;;;; 146072 702000))
+;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (0 0 0 0))
;;; Generated autoloads from cedet/data-debug.el
(autoload 'data-debug-new-buffer "data-debug" "\
;;;***
\f
-;;;### (autoloads nil "dbus" "net/dbus.el" (22150 28228 354072 702000))
+;;;### (autoloads nil "dbus" "net/dbus.el" (0 0 0 0))
;;; Generated autoloads from net/dbus.el
(autoload 'dbus-handle-event "dbus" "\
;;;***
\f
-;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (22150 28228
-;;;;;; 810072 702000))
+;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (0 0 0 0))
;;; Generated autoloads from progmodes/dcl-mode.el
(autoload 'dcl-mode "dcl-mode" "\
;;;***
\f
-;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (22150 28227
-;;;;;; 378072 702000))
+;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/debug.el
(setq debugger 'debug)
;;;***
\f
-;;;### (autoloads nil "decipher" "play/decipher.el" (22150 28228
-;;;;;; 674072 702000))
+;;;### (autoloads nil "decipher" "play/decipher.el" (0 0 0 0))
;;; Generated autoloads from play/decipher.el
(autoload 'decipher "decipher" "\
;;;***
\f
-;;;### (autoloads nil "delim-col" "delim-col.el" (22150 28227 290072
-;;;;;; 702000))
+;;;### (autoloads nil "delim-col" "delim-col.el" (0 0 0 0))
;;; Generated autoloads from delim-col.el
(push (purecopy '(delim-col 2 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "delsel" "delsel.el" (22159 43206 893781 63000))
+;;;### (autoloads nil "delsel" "delsel.el" (0 0 0 0))
;;; Generated autoloads from delsel.el
(defalias 'pending-delete-mode 'delete-selection-mode)
(defvar delete-selection-mode nil "\
Non-nil if Delete-Selection mode is enabled.
-See the command `delete-selection-mode' for a description of this minor mode.
+See the `delete-selection-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `delete-selection-mode'.")
;;;***
\f
-;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (22229 34898
-;;;;;; 796051 395000))
+;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/derived.el
(autoload 'define-derived-mode "derived" "\
;;;***
\f
-;;;### (autoloads nil "descr-text" "descr-text.el" (22300 43827 136520
-;;;;;; 15000))
+;;;### (autoloads nil "descr-text" "descr-text.el" (0 0 0 0))
;;; Generated autoloads from descr-text.el
(autoload 'describe-text-properties "descr-text" "\
;;;***
\f
-;;;### (autoloads nil "desktop" "desktop.el" (22189 64323 80321 19000))
+;;;### (autoloads nil "desktop" "desktop.el" (0 0 0 0))
;;; Generated autoloads from desktop.el
(defvar desktop-save-mode nil "\
Non-nil if Desktop-Save mode is enabled.
-See the command `desktop-save-mode' for a description of this minor mode.
+See the `desktop-save-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `desktop-save-mode'.")
;;;***
\f
-;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (22150 28227
-;;;;;; 658072 702000))
+;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (0 0 0 0))
;;; Generated autoloads from gnus/deuglify.el
(autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\
;;;***
\f
-;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (22192
-;;;;;; 2880 939382 391000))
+;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from calendar/diary-lib.el
(autoload 'diary "diary-lib" "\
;;;***
\f
-;;;### (autoloads nil "diff" "vc/diff.el" (22308 37947 246422 527000))
+;;;### (autoloads nil "diff" "vc/diff.el" (0 0 0 0))
;;; Generated autoloads from vc/diff.el
(defvar diff-switches (purecopy "-u") "\
;;;***
\f
-;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (22150 28229
-;;;;;; 250072 702000))
+;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (0 0 0 0))
;;; Generated autoloads from vc/diff-mode.el
(autoload 'diff-mode "diff-mode" "\
;;;***
\f
-;;;### (autoloads nil "dig" "net/dig.el" (22150 28228 354072 702000))
+;;;### (autoloads nil "dig" "net/dig.el" (0 0 0 0))
;;; Generated autoloads from net/dig.el
(autoload 'dig "dig" "\
;;;***
\f
-;;;### (autoloads nil "dired" "dired.el" (22301 64996 17087 484000))
+;;;### (autoloads nil "dired" "dired.el" (0 0 0 0))
;;; Generated autoloads from dired.el
(defvar dired-listing-switches (purecopy "-al") "\
;;;***
\f
-;;;### (autoloads nil "dirtrack" "dirtrack.el" (22150 28227 310072
-;;;;;; 702000))
+;;;### (autoloads nil "dirtrack" "dirtrack.el" (0 0 0 0))
;;; Generated autoloads from dirtrack.el
(autoload 'dirtrack-mode "dirtrack" "\
;;;***
\f
-;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (22270 22707
-;;;;;; 603851 575000))
+;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/disass.el
(autoload 'disassemble "disass" "\
;;;***
\f
-;;;### (autoloads nil "disp-table" "disp-table.el" (22150 28227 310072
-;;;;;; 702000))
+;;;### (autoloads nil "disp-table" "disp-table.el" (0 0 0 0))
;;; Generated autoloads from disp-table.el
(autoload 'make-display-table "disp-table" "\
;;;***
\f
-;;;### (autoloads nil "dissociate" "play/dissociate.el" (22150 28228
-;;;;;; 674072 702000))
+;;;### (autoloads nil "dissociate" "play/dissociate.el" (0 0 0 0))
;;; Generated autoloads from play/dissociate.el
(autoload 'dissociated-press "dissociate" "\
;;;***
\f
-;;;### (autoloads nil "dnd" "dnd.el" (22150 28227 314072 702000))
+;;;### (autoloads nil "dnd" "dnd.el" (0 0 0 0))
;;; Generated autoloads from dnd.el
(defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\
;;;***
\f
-;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (22150 28229
-;;;;;; 98072 702000))
+;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (0 0 0 0))
;;; Generated autoloads from textmodes/dns-mode.el
(autoload 'dns-mode "dns-mode" "\
;;;***
\f
-;;;### (autoloads nil "doc-view" "doc-view.el" (22253 13631 322961
-;;;;;; 36000))
+;;;### (autoloads nil "doc-view" "doc-view.el" (0 0 0 0))
;;; Generated autoloads from doc-view.el
(autoload 'doc-view-mode-p "doc-view" "\
;;;***
\f
-;;;### (autoloads nil "doctor" "play/doctor.el" (22150 28228 678072
-;;;;;; 702000))
+;;;### (autoloads nil "doctor" "play/doctor.el" (0 0 0 0))
;;; Generated autoloads from play/doctor.el
(autoload 'doctor "doctor" "\
;;;***
\f
-;;;### (autoloads nil "double" "double.el" (22150 28227 318072 702000))
+;;;### (autoloads nil "double" "double.el" (0 0 0 0))
;;; Generated autoloads from double.el
(autoload 'double-mode "double" "\
;;;***
\f
-;;;### (autoloads nil "dunnet" "play/dunnet.el" (22160 10656 10679
-;;;;;; 927000))
+;;;### (autoloads nil "dunnet" "play/dunnet.el" (0 0 0 0))
;;; Generated autoloads from play/dunnet.el
(push (purecopy '(dunnet 2 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (22211
-;;;;;; 4933 581358 144000))
+;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from emacs-lisp/easy-mmode.el
(defalias 'easy-mmode-define-minor-mode 'define-minor-mode)
Optional KEYMAP is the default keymap bound to the mode keymap.
If non-nil, it should be a variable name (whose value is a keymap),
or an expression that returns either a keymap or a list of
- arguments for `easy-mmode-define-keymap'. If you supply a KEYMAP
- argument that is not a symbol, this macro defines the variable
- MODE-map and gives it the value that KEYMAP specifies.
+ (KEY . BINDING) pairs where KEY and BINDING are suitable for
+ `define-key'. If you supply a KEYMAP argument that is not a
+ symbol, this macro defines the variable MODE-map and gives it
+ the value that KEYMAP specifies.
BODY contains code to execute each time the mode is enabled or disabled.
It is executed after toggling the mode, and before running MODE-hook.
;;;***
\f
-;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (22150
-;;;;;; 28227 398072 702000))
+;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from emacs-lisp/easymenu.el
(autoload 'easy-menu-define "easymenu" "\
;;;***
\f
-;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (22150 28228
-;;;;;; 814072 702000))
+;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf2ps.el
(push (purecopy '(ebnf2ps 4 4)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (22150 28228
-;;;;;; 814072 702000))
+;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebrowse.el
(autoload 'ebrowse-tree-mode "ebrowse" "\
;;;***
\f
-;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (22150 28227 318072
-;;;;;; 702000))
+;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (0 0 0 0))
;;; Generated autoloads from ebuff-menu.el
(autoload 'electric-buffer-list "ebuff-menu" "\
;;;***
\f
-;;;### (autoloads nil "echistory" "echistory.el" (22150 28227 318072
-;;;;;; 702000))
+;;;### (autoloads nil "echistory" "echistory.el" (0 0 0 0))
;;; Generated autoloads from echistory.el
(autoload 'Electric-command-history-redo-expression "echistory" "\
;;;***
\f
-;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (22150 28227
-;;;;;; 658072 702000))
-;;; Generated autoloads from gnus/ecomplete.el
+;;;### (autoloads nil "ecomplete" "ecomplete.el" (0 0 0 0))
+;;; Generated autoloads from ecomplete.el
(autoload 'ecomplete-setup "ecomplete" "\
;;;***
\f
-;;;### (autoloads nil "ede" "cedet/ede.el" (22189 64323 68321 19000))
+;;;### (autoloads nil "ede" "cedet/ede.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede.el
(push (purecopy '(ede 1 2)) package--builtin-versions)
(defvar global-ede-mode nil "\
Non-nil if Global Ede mode is enabled.
-See the command `global-ede-mode' for a description of this minor mode.
+See the `global-ede-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-ede-mode'.")
;;;***
\f
-;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (22189 64323
-;;;;;; 92321 19000))
+;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/edebug.el
(defvar edebug-all-defs nil "\
;;;***
\f
-;;;### (autoloads nil "ediff" "vc/ediff.el" (22150 28229 274072 702000))
+;;;### (autoloads nil "ediff" "vc/ediff.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff.el
(push (purecopy '(ediff 2 81 4)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (22150 28229
-;;;;;; 254072 702000))
+;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-help.el
(autoload 'ediff-customize "ediff-help" "\
;;;***
\f
-;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (22189 64323
-;;;;;; 332321 19000))
+;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-mult.el
(autoload 'ediff-show-registry "ediff-mult" "\
;;;***
\f
-;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (22150 28229
-;;;;;; 270072 702000))
+;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-util.el
(autoload 'ediff-toggle-multiframe "ediff-util" "\
;;;***
\f
-;;;### (autoloads nil "edmacro" "edmacro.el" (22150 28227 318072
-;;;;;; 702000))
+;;;### (autoloads nil "edmacro" "edmacro.el" (0 0 0 0))
;;; Generated autoloads from edmacro.el
(push (purecopy '(edmacro 2 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "edt" "emulation/edt.el" (22204 31687 809113
-;;;;;; 480000))
+;;;### (autoloads nil "edt" "emulation/edt.el" (0 0 0 0))
;;; Generated autoloads from emulation/edt.el
(autoload 'edt-set-scroll-margins "edt" "\
;;;***
\f
-;;;### (autoloads nil "ehelp" "ehelp.el" (22150 28227 318072 702000))
+;;;### (autoloads nil "ehelp" "ehelp.el" (0 0 0 0))
;;; Generated autoloads from ehelp.el
(autoload 'with-electric-help "ehelp" "\
;;;***
\f
-;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (22308 37947
-;;;;;; 74422 527000))
+;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio.el
(push (purecopy '(eieio 1 4)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (22150
-;;;;;; 28612 762072 702000))
+;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio-core.el
(push (purecopy '(eieio-core 1 4)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "elec-pair" "elec-pair.el" (22150 28227 322072
-;;;;;; 702000))
+;;;### (autoloads nil "elec-pair" "elec-pair.el" (0 0 0 0))
;;; Generated autoloads from elec-pair.el
(defvar electric-pair-text-pairs '((34 . 34)) "\
(defvar electric-pair-mode nil "\
Non-nil if Electric-Pair mode is enabled.
-See the command `electric-pair-mode' for a description of this minor mode.
+See the `electric-pair-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `electric-pair-mode'.")
;;;***
\f
-;;;### (autoloads nil "elide-head" "elide-head.el" (22150 28227 322072
-;;;;;; 702000))
+;;;### (autoloads nil "elide-head" "elide-head.el" (0 0 0 0))
;;; Generated autoloads from elide-head.el
(autoload 'elide-head "elide-head" "\
;;;***
\f
-;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (22150 28227
-;;;;;; 422072 702000))
+;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/elint.el
(autoload 'elint-file "elint" "\
;;;***
\f
-;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (22150 28227 422072
-;;;;;; 702000))
+;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/elp.el
(autoload 'elp-instrument-function "elp" "\
;;;***
\f
-;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (22150 28227 458072
-;;;;;; 702000))
+;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (0 0 0 0))
;;; Generated autoloads from emacs-lock.el
(autoload 'emacs-lock-mode "emacs-lock" "\
;;;***
\f
-;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (22150 28228
-;;;;;; 226072 702000))
+;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (0 0 0 0))
;;; Generated autoloads from mail/emacsbug.el
(autoload 'report-emacs-bug "emacsbug" "\
;;;***
\f
-;;;### (autoloads nil "emerge" "vc/emerge.el" (22086 11930 378062
-;;;;;; 731000))
+;;;### (autoloads nil "emerge" "vc/emerge.el" (0 0 0 0))
;;; Generated autoloads from vc/emerge.el
(autoload 'emerge-files "emerge" "\
;;;***
\f
-;;;### (autoloads nil "enriched" "textmodes/enriched.el" (22150 28229
-;;;;;; 98072 702000))
+;;;### (autoloads nil "enriched" "textmodes/enriched.el" (0 0 0 0))
;;; Generated autoloads from textmodes/enriched.el
(autoload 'enriched-mode "enriched" "\
;;;***
\f
-;;;### (autoloads nil "epa" "epa.el" (22150 28227 482072 702000))
+;;;### (autoloads nil "epa" "epa.el" (0 0 0 0))
;;; Generated autoloads from epa.el
(autoload 'epa-list-keys "epa" "\
;;;***
\f
-;;;### (autoloads nil "epa-dired" "epa-dired.el" (22150 28227 478072
-;;;;;; 702000))
+;;;### (autoloads nil "epa-dired" "epa-dired.el" (0 0 0 0))
;;; Generated autoloads from epa-dired.el
(autoload 'epa-dired-do-decrypt "epa-dired" "\
;;;***
\f
-;;;### (autoloads nil "epa-file" "epa-file.el" (22150 28227 482072
-;;;;;; 702000))
+;;;### (autoloads nil "epa-file" "epa-file.el" (0 0 0 0))
;;; Generated autoloads from epa-file.el
(autoload 'epa-file-handler "epa-file" "\
;;;***
\f
-;;;### (autoloads nil "epa-mail" "epa-mail.el" (22150 28227 482072
-;;;;;; 702000))
+;;;### (autoloads nil "epa-mail" "epa-mail.el" (0 0 0 0))
;;; Generated autoloads from epa-mail.el
(autoload 'epa-mail-mode "epa-mail" "\
(defvar epa-global-mail-mode nil "\
Non-nil if Epa-Global-Mail mode is enabled.
-See the command `epa-global-mail-mode' for a description of this minor mode.
+See the `epa-global-mail-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `epa-global-mail-mode'.")
;;;***
\f
-;;;### (autoloads nil "epg" "epg.el" (22217 43732 468164 355000))
+;;;### (autoloads nil "epg" "epg.el" (0 0 0 0))
;;; Generated autoloads from epg.el
(push (purecopy '(epg 1 0 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "epg-config" "epg-config.el" (22217 43732 444164
-;;;;;; 355000))
+;;;### (autoloads nil "epg-config" "epg-config.el" (0 0 0 0))
;;; Generated autoloads from epg-config.el
(autoload 'epg-find-configuration "epg-config" "\
;;;***
\f
-;;;### (autoloads nil "erc" "erc/erc.el" (22197 58438 151460 447000))
+;;;### (autoloads nil "erc" "erc/erc.el" (0 0 0 0))
;;; Generated autoloads from erc/erc.el
(push (purecopy '(erc 5 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (22150
-;;;;;; 28227 506072 702000))
+;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-autoaway.el
(autoload 'erc-autoaway-mode "erc-autoaway")
;;;***
\f
-;;;### (autoloads nil "erc-button" "erc/erc-button.el" (22195 16710
-;;;;;; 391344 967000))
+;;;### (autoloads nil "erc-button" "erc/erc-button.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-button.el
(autoload 'erc-button-mode "erc-button" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (22150 28227
-;;;;;; 510072 702000))
+;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-capab.el
(autoload 'erc-capab-identify-mode "erc-capab" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (22150 28227
-;;;;;; 510072 702000))
+;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-compat.el
(autoload 'erc-define-minor-mode "erc-compat")
;;;***
\f
-;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (22150 28227 510072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-dcc.el
(autoload 'erc-dcc-mode "erc-dcc")
;;;***
\f
;;;### (autoloads nil "erc-desktop-notifications" "erc/erc-desktop-notifications.el"
-;;;;;; (22150 28227 510072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-desktop-notifications.el
(autoload 'erc-notifications-mode "erc-desktop-notifications" "" t)
;;;***
\f
-;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (22150
-;;;;;; 28227 510072 702000))
+;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-ezbounce.el
(autoload 'erc-cmd-ezb "erc-ezbounce" "\
;;;***
\f
-;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (22150 28227 510072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-fill.el
(autoload 'erc-fill-mode "erc-fill" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (22150 28227
-;;;;;; 510072 702000))
+;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-identd.el
(autoload 'erc-identd-mode "erc-identd")
;;;***
\f
-;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (22150 28227
-;;;;;; 514072 702000))
+;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-imenu.el
(autoload 'erc-create-imenu-index "erc-imenu" "\
;;;***
\f
-;;;### (autoloads nil "erc-join" "erc/erc-join.el" (22150 28227 514072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-join" "erc/erc-join.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-join.el
(autoload 'erc-autojoin-mode "erc-join" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-list" "erc/erc-list.el" (22150 28227 514072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-list" "erc/erc-list.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-list.el
(autoload 'erc-list-mode "erc-list")
;;;***
\f
-;;;### (autoloads nil "erc-log" "erc/erc-log.el" (22150 28227 514072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-log" "erc/erc-log.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-log.el
(autoload 'erc-log-mode "erc-log" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-match" "erc/erc-match.el" (22150 28227
-;;;;;; 514072 702000))
+;;;### (autoloads nil "erc-match" "erc/erc-match.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-match.el
(autoload 'erc-match-mode "erc-match")
;;;***
\f
-;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (22150 28227 514072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-menu.el
(autoload 'erc-menu-mode "erc-menu" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (22150
-;;;;;; 28227 514072 702000))
+;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-netsplit.el
(autoload 'erc-netsplit-mode "erc-netsplit")
;;;***
\f
-;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (22189
-;;;;;; 64323 128321 19000))
+;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-networks.el
(autoload 'erc-determine-network "erc-networks" "\
;;;***
\f
-;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (22150 28227
-;;;;;; 518072 702000))
+;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-notify.el
(autoload 'erc-notify-mode "erc-notify" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-page" "erc/erc-page.el" (22150 28227 518072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-page" "erc/erc-page.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-page.el
(autoload 'erc-page-mode "erc-page")
;;;***
\f
-;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (22195
-;;;;;; 16710 595344 967000))
+;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from erc/erc-pcomplete.el
(autoload 'erc-completion-mode "erc-pcomplete" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (22150 28227
-;;;;;; 518072 702000))
+;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-replace.el
(autoload 'erc-replace-mode "erc-replace")
;;;***
\f
-;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (22150 28227 518072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-ring.el
(autoload 'erc-ring-mode "erc-ring" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-services" "erc/erc-services.el" (22150
-;;;;;; 28227 518072 702000))
+;;;### (autoloads nil "erc-services" "erc/erc-services.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-services.el
(autoload 'erc-services-mode "erc-services" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (22150 28227
-;;;;;; 518072 702000))
+;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-sound.el
(autoload 'erc-sound-mode "erc-sound")
;;;***
\f
-;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (22150
-;;;;;; 28227 518072 702000))
+;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-speedbar.el
(autoload 'erc-speedbar-browser "erc-speedbar" "\
;;;***
\f
-;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (22150
-;;;;;; 28227 518072 702000))
+;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-spelling.el
(autoload 'erc-spelling-mode "erc-spelling" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (22150 28227
-;;;;;; 518072 702000))
+;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-stamp.el
(autoload 'erc-timestamp-mode "erc-stamp" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-track" "erc/erc-track.el" (22195 16710
-;;;;;; 599344 967000))
+;;;### (autoloads nil "erc-track" "erc/erc-track.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-track.el
(defvar erc-track-minor-mode nil "\
Non-nil if Erc-Track minor mode is enabled.
-See the command `erc-track-minor-mode' for a description of this minor mode.")
+See the `erc-track-minor-mode' command
+for a description of this minor mode.")
(custom-autoload 'erc-track-minor-mode "erc-track" nil)
;;;***
\f
-;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (22150
-;;;;;; 28227 522072 702000))
+;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from erc/erc-truncate.el
(autoload 'erc-truncate-mode "erc-truncate" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (22150 28227 522072
-;;;;;; 702000))
+;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-xdcc.el
(autoload 'erc-xdcc-mode "erc-xdcc")
;;;***
\f
-;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (22182 4679 395463
-;;;;;; 499000))
+;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/ert.el
(autoload 'ert-deftest "ert" "\
;;;***
\f
-;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (22150 28227
-;;;;;; 426072 702000))
+;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/ert-x.el
(put 'ert-with-test-buffer 'lisp-indent-function 1)
;;;***
\f
-;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (22150 28227
-;;;;;; 542072 702000))
+;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-mode.el
(autoload 'eshell-mode "esh-mode" "\
;;;***
\f
-;;;### (autoloads nil "eshell" "eshell/eshell.el" (22150 28227 542072
-;;;;;; 702000))
+;;;### (autoloads nil "eshell" "eshell/eshell.el" (0 0 0 0))
;;; Generated autoloads from eshell/eshell.el
(push (purecopy '(eshell 2 4 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "etags" "progmodes/etags.el" (22182 44805 327853
-;;;;;; 279000))
+;;;### (autoloads nil "etags" "progmodes/etags.el" (0 0 0 0))
;;; Generated autoloads from progmodes/etags.el
(defvar tags-file-name nil "\
;;;***
\f
-;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (22150
-;;;;;; 28228 166072 702000))
+;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from language/ethio-util.el
(autoload 'setup-ethiopic-environment-internal "ethio-util" "\
;;;***
\f
-;;;### (autoloads nil "eudc" "net/eudc.el" (22150 28228 354072 702000))
+;;;### (autoloads nil "eudc" "net/eudc.el" (0 0 0 0))
;;; Generated autoloads from net/eudc.el
(autoload 'eudc-set-server "eudc" "\
\(fn)" t nil)
-(cond ((not (featurep 'xemacs)) (defvar eudc-tools-menu (let ((map (make-sparse-keymap "Directory Search"))) (define-key map [phone] `(menu-item ,(purecopy "Get Phone") eudc-get-phone :help ,(purecopy "Get the phone field of name from the directory server"))) (define-key map [email] `(menu-item ,(purecopy "Get Email") eudc-get-email :help ,(purecopy "Get the email field of NAME from the directory server"))) (define-key map [separator-eudc-email] menu-bar-separator) (define-key map [expand-inline] `(menu-item ,(purecopy "Expand Inline Query") eudc-expand-inline :help ,(purecopy "Query the directory server, and expand the query string before point"))) (define-key map [query] `(menu-item ,(purecopy "Query with Form") eudc-query-form :help ,(purecopy "Display a form to query the directory server"))) (define-key map [separator-eudc-query] menu-bar-separator) (define-key map [new] `(menu-item ,(purecopy "New Server") eudc-set-server :help ,(purecopy "Set the directory server to SERVER using PROTOCOL"))) (define-key map [load] `(menu-item ,(purecopy "Load Hotlist of Servers") eudc-load-eudc :help ,(purecopy "Load the Emacs Unified Directory Client"))) map)) (fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu))) (t (let ((menu '("Directory Search" ["Load Hotlist of Servers" eudc-load-eudc t] ["New Server" eudc-set-server t] ["---" nil nil] ["Query with Form" eudc-query-form t] ["Expand Inline Query" eudc-expand-inline t] ["---" nil nil] ["Get Email" eudc-get-email t] ["Get Phone" eudc-get-phone t]))) (if (not (featurep 'eudc-autoloads)) (if (featurep 'xemacs) (if (and (featurep 'menubar) (not (featurep 'infodock))) (add-submenu '("Tools") menu)) (require 'easymenu) (cond ((fboundp 'easy-menu-add-item) (easy-menu-add-item nil '("tools") (easy-menu-create-menu (car menu) (cdr menu)))) ((fboundp 'easy-menu-create-keymaps) (define-key global-map [menu-bar tools eudc] (cons "Directory Search" (easy-menu-create-keymaps "Directory Search" (cdr menu)))))))))))
+(cond ((not (featurep 'xemacs)) (defvar eudc-tools-menu (let ((map (make-sparse-keymap "Directory Servers"))) (define-key map [phone] `(menu-item ,(purecopy "Get Phone") eudc-get-phone :help ,(purecopy "Get the phone field of name from the directory server"))) (define-key map [email] `(menu-item ,(purecopy "Get Email") eudc-get-email :help ,(purecopy "Get the email field of NAME from the directory server"))) (define-key map [separator-eudc-email] menu-bar-separator) (define-key map [expand-inline] `(menu-item ,(purecopy "Expand Inline Query") eudc-expand-inline :help ,(purecopy "Query the directory server, and expand the query string before point"))) (define-key map [query] `(menu-item ,(purecopy "Query with Form") eudc-query-form :help ,(purecopy "Display a form to query the directory server"))) (define-key map [separator-eudc-query] menu-bar-separator) (define-key map [new] `(menu-item ,(purecopy "New Server") eudc-set-server :help ,(purecopy "Set the directory server to SERVER using PROTOCOL"))) (define-key map [load] `(menu-item ,(purecopy "Load Hotlist of Servers") eudc-load-eudc :help ,(purecopy "Load the Emacs Unified Directory Client"))) map)) (fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu))) (t (let ((menu '("Directory Servers" ["Load Hotlist of Servers" eudc-load-eudc t] ["New Server" eudc-set-server t] ["---" nil nil] ["Query with Form" eudc-query-form t] ["Expand Inline Query" eudc-expand-inline t] ["---" nil nil] ["Get Email" eudc-get-email t] ["Get Phone" eudc-get-phone t]))) (if (not (featurep 'eudc-autoloads)) (if (featurep 'xemacs) (if (and (featurep 'menubar) (not (featurep 'infodock))) (add-submenu '("Tools") menu)) (require 'easymenu) (cond ((fboundp 'easy-menu-add-item) (easy-menu-add-item nil '("tools") (easy-menu-create-menu (car menu) (cdr menu)))) ((fboundp 'easy-menu-create-keymaps) (define-key global-map [menu-bar tools eudc] (cons "Directory Servers" (easy-menu-create-keymaps "Directory Servers" (cdr menu)))))))))))
;;;***
\f
-;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (22150 28228 354072
-;;;;;; 702000))
+;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (0 0 0 0))
;;; Generated autoloads from net/eudc-bob.el
(autoload 'eudc-display-generic-binary "eudc-bob" "\
;;;***
\f
-;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (22150 28228
-;;;;;; 354072 702000))
+;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (0 0 0 0))
;;; Generated autoloads from net/eudc-export.el
(autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\
;;;***
\f
-;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (22150
-;;;;;; 28228 354072 702000))
+;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from net/eudc-hotlist.el
(autoload 'eudc-edit-hotlist "eudc-hotlist" "\
;;;***
\f
-;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (22150 28227 430072
-;;;;;; 702000))
+;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/ewoc.el
(autoload 'ewoc-create "ewoc" "\
;;;***
\f
-;;;### (autoloads nil "eww" "net/eww.el" (22229 34898 904051 395000))
+;;;### (autoloads nil "eww" "net/eww.el" (0 0 0 0))
;;; Generated autoloads from net/eww.el
(defvar eww-suggest-uris '(eww-links-at-point url-get-url-at-point eww-current-url) "\
;;;***
\f
-;;;### (autoloads nil "executable" "progmodes/executable.el" (22150
-;;;;;; 28228 818072 702000))
+;;;### (autoloads nil "executable" "progmodes/executable.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from progmodes/executable.el
(autoload 'executable-command-find-posix-p "executable" "\
;;;***
\f
-;;;### (autoloads nil "expand" "expand.el" (22150 28227 542072 702000))
+;;;### (autoloads nil "expand" "expand.el" (0 0 0 0))
;;; Generated autoloads from expand.el
(autoload 'expand-add-abbrevs "expand" "\
;;;***
\f
-;;;### (autoloads nil "f90" "progmodes/f90.el" (22197 58438 431460
-;;;;;; 447000))
+;;;### (autoloads nil "f90" "progmodes/f90.el" (0 0 0 0))
;;; Generated autoloads from progmodes/f90.el
(autoload 'f90-mode "f90" "\
;;;***
\f
-;;;### (autoloads nil "face-remap" "face-remap.el" (22283 34751 141333
-;;;;;; 844000))
+;;;### (autoloads nil "face-remap" "face-remap.el" (0 0 0 0))
;;; Generated autoloads from face-remap.el
(autoload 'face-remap-add-relative "face-remap" "\
;;;***
\f
-;;;### (autoloads nil "feedmail" "mail/feedmail.el" (22092 27717
-;;;;;; 880268 464000))
+;;;### (autoloads nil "feedmail" "mail/feedmail.el" (0 0 0 0))
;;; Generated autoloads from mail/feedmail.el
(push (purecopy '(feedmail 11)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ffap" "ffap.el" (22279 37684 340180 436000))
+;;;### (autoloads nil "ffap" "ffap.el" (0 0 0 0))
;;; Generated autoloads from ffap.el
(autoload 'ffap-next "ffap" "\
;;;***
\f
-;;;### (autoloads nil "filecache" "filecache.el" (22150 28227 554072
-;;;;;; 702000))
+;;;### (autoloads nil "filecache" "filecache.el" (0 0 0 0))
;;; Generated autoloads from filecache.el
(autoload 'file-cache-add-directory "filecache" "\
;;;***
\f
-;;;### (autoloads nil "filenotify" "filenotify.el" (22230 55750 327718
-;;;;;; 91000))
+;;;### (autoloads nil "filenotify" "filenotify.el" (0 0 0 0))
;;; Generated autoloads from filenotify.el
(autoload 'file-notify-handle-event "filenotify" "\
;;;***
\f
-;;;### (autoloads nil "files-x" "files-x.el" (22189 64323 128321
-;;;;;; 19000))
+;;;### (autoloads nil "files-x" "files-x.el" (0 0 0 0))
;;; Generated autoloads from files-x.el
(autoload 'add-file-local-variable "files-x" "\
;;;***
\f
-;;;### (autoloads nil "filesets" "filesets.el" (22150 28227 578072
-;;;;;; 702000))
+;;;### (autoloads nil "filesets" "filesets.el" (0 0 0 0))
;;; Generated autoloads from filesets.el
(autoload 'filesets-init "filesets" "\
;;;***
\f
-;;;### (autoloads nil "find-cmd" "find-cmd.el" (22150 28227 578072
-;;;;;; 702000))
+;;;### (autoloads nil "find-cmd" "find-cmd.el" (0 0 0 0))
;;; Generated autoloads from find-cmd.el
(push (purecopy '(find-cmd 0 6)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "find-dired" "find-dired.el" (22150 28227 578072
-;;;;;; 702000))
+;;;### (autoloads nil "find-dired" "find-dired.el" (0 0 0 0))
;;; Generated autoloads from find-dired.el
(autoload 'find-dired "find-dired" "\
;;;***
\f
-;;;### (autoloads nil "find-file" "find-file.el" (22150 28227 578072
-;;;;;; 702000))
+;;;### (autoloads nil "find-file" "find-file.el" (0 0 0 0))
;;; Generated autoloads from find-file.el
(defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\
;;;***
\f
-;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (22150
-;;;;;; 28227 430072 702000))
+;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from emacs-lisp/find-func.el
(autoload 'find-library "find-func" "\
Find the Emacs Lisp source of LIBRARY.
-LIBRARY should be a string (the name of the library).
+LIBRARY should be a string (the name of the library). If the
+optional OTHER-WINDOW argument (i.e., the command argument) is
+specified, pop to a different window before displaying the
+buffer.
-\(fn LIBRARY)" t nil)
+\(fn LIBRARY &optional OTHER-WINDOW)" t nil)
(autoload 'find-function-search-for-symbol "find-func" "\
Search for SYMBOL's definition of type TYPE in LIBRARY.
;;;***
\f
-;;;### (autoloads nil "find-lisp" "find-lisp.el" (22150 28227 578072
-;;;;;; 702000))
+;;;### (autoloads nil "find-lisp" "find-lisp.el" (0 0 0 0))
;;; Generated autoloads from find-lisp.el
(autoload 'find-lisp-find-dired "find-lisp" "\
;;;***
\f
-;;;### (autoloads nil "finder" "finder.el" (22150 28227 578072 702000))
+;;;### (autoloads nil "finder" "finder.el" (0 0 0 0))
;;; Generated autoloads from finder.el
(push (purecopy '(finder 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (22150 28227 578072
-;;;;;; 702000))
+;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (0 0 0 0))
;;; Generated autoloads from flow-ctrl.el
(autoload 'enable-flow-control "flow-ctrl" "\
;;;***
\f
-;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (22150 28227
-;;;;;; 658072 702000))
-;;; Generated autoloads from gnus/flow-fill.el
+;;;### (autoloads nil "flow-fill" "mail/flow-fill.el" (0 0 0 0))
+;;; Generated autoloads from mail/flow-fill.el
(autoload 'fill-flowed-encode "flow-fill" "\
;;;***
\f
-;;;### (autoloads nil "flymake" "progmodes/flymake.el" (22150 28228
-;;;;;; 818072 702000))
+;;;### (autoloads nil "flymake" "progmodes/flymake.el" (0 0 0 0))
;;; Generated autoloads from progmodes/flymake.el
(push (purecopy '(flymake 0 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (22197 58438
-;;;;;; 711460 447000))
+;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (0 0 0 0))
;;; Generated autoloads from textmodes/flyspell.el
(autoload 'flyspell-prog-mode "flyspell" "\
;;;***
\f
-;;;### (autoloads nil "foldout" "foldout.el" (22150 28227 582072
-;;;;;; 702000))
+;;;### (autoloads nil "foldout" "foldout.el" (0 0 0 0))
;;; Generated autoloads from foldout.el
(push (purecopy '(foldout 1 10)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "follow" "follow.el" (22308 37947 126422 527000))
+;;;### (autoloads nil "follow" "follow.el" (0 0 0 0))
;;; Generated autoloads from follow.el
(autoload 'turn-on-follow-mode "follow" "\
makes it possible to walk between windows using normal cursor
movement commands.
-Follow mode comes to its prime when used on a large screen and two or
-more side-by-side windows are used. The user can, with the help of
-Follow mode, use these full-height windows as though they were one.
-Imagine yourself editing a large function, or section of text, and
-being able to use 144 or 216 lines instead of the normal 72... (your
+Follow mode comes to its prime when used on a large screen and two
+side-by-side windows are used. The user can, with the help of Follow
+mode, use two full-height windows as though they would have been
+one. Imagine yourself editing a large function, or section of text,
+and being able to use 144 lines instead of the normal 72... (your
mileage may vary).
To split one large window into two side-by-side windows, the commands
\(fn &optional ARG)" t nil)
-(autoload 'follow-scroll-up-window "follow" "\
-Scroll text in a Follow mode window up by that window's size.
-The other windows in the window chain will scroll synchronously.
-
-If called with no ARG, the `next-screen-context-lines' last lines of
-the window will be visible after the scroll.
-
-If called with an argument, scroll ARG lines up.
-Negative ARG means scroll downward.
-
-Works like `scroll-up' when not in Follow mode.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'follow-scroll-down-window "follow" "\
-Scroll text in a Follow mode window down by that window's size.
-The other windows in the window chain will scroll synchronously.
-
-If called with no ARG, the `next-screen-context-lines' top lines of
-the window in the chain will be visible after the scroll.
-
-If called with an argument, scroll ARG lines down.
-Negative ARG means scroll upward.
-
-Works like `scroll-down' when not in Follow mode.
-
-\(fn &optional ARG)" t nil)
-
(autoload 'follow-scroll-up "follow" "\
Scroll text in a Follow mode window chain up.
;;;***
\f
-;;;### (autoloads nil "footnote" "mail/footnote.el" (22150 28228
-;;;;;; 226072 702000))
+;;;### (autoloads nil "footnote" "mail/footnote.el" (0 0 0 0))
;;; Generated autoloads from mail/footnote.el
(push (purecopy '(footnote 0 19)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "forms" "forms.el" (22253 13631 334961 36000))
+;;;### (autoloads nil "forms" "forms.el" (0 0 0 0))
;;; Generated autoloads from forms.el
(autoload 'forms-mode "forms" "\
;;;***
\f
-;;;### (autoloads nil "fortran" "progmodes/fortran.el" (22153 4424
-;;;;;; 620360 262000))
+;;;### (autoloads nil "fortran" "progmodes/fortran.el" (0 0 0 0))
;;; Generated autoloads from progmodes/fortran.el
(autoload 'fortran-mode "fortran" "\
;;;***
\f
-;;;### (autoloads nil "fortune" "play/fortune.el" (22150 28228 678072
-;;;;;; 702000))
+;;;### (autoloads nil "fortune" "play/fortune.el" (0 0 0 0))
;;; Generated autoloads from play/fortune.el
(autoload 'fortune-add-fortune "fortune" "\
\(fn &optional FILE)" t nil)
+(autoload 'fortune-message "fortune" "\
+Display a fortune cookie to the mini-buffer.
+If called with a prefix, it has the same behavior as `fortune'.
+Optional FILE is a fortune file from which a cookie will be selected.
+
+\(fn &optional FILE)" t nil)
+
(autoload 'fortune "fortune" "\
Display a fortune cookie.
If called with a prefix asks for the FILE to choose the fortune from,
;;;***
\f
-;;;### (autoloads nil "frameset" "frameset.el" (22182 4679 399463
-;;;;;; 499000))
+;;;### (autoloads nil "frameset" "frameset.el" (0 0 0 0))
;;; Generated autoloads from frameset.el
(defvar frameset-session-filter-alist '((name . :never) (left . frameset-filter-iconified) (minibuffer . frameset-filter-minibuffer) (top . frameset-filter-iconified)) "\
;;;***
\f
-;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (22182 4679 471463
-;;;;;; 499000))
+;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (0 0 0 0))
;;; Generated autoloads from play/gamegrid.el
(push (purecopy '(gamegrid 1 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (22150 28228
-;;;;;; 822072 702000))
+;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (0 0 0 0))
;;; Generated autoloads from progmodes/gdb-mi.el
(defvar gdb-enable-debug nil "\
Non-nil if Gdb-Enable-Debug mode is enabled.
-See the command `gdb-enable-debug' for a description of this minor mode.")
+See the `gdb-enable-debug' command
+for a description of this minor mode.")
(custom-autoload 'gdb-enable-debug "gdb-mi" nil)
;;;***
\f
-;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (22150 28227
-;;;;;; 430072 702000))
+;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/generic.el
(defvar generic-mode-list nil "\
;;;***
\f
-;;;### (autoloads nil "glasses" "progmodes/glasses.el" (22150 28228
-;;;;;; 822072 702000))
+;;;### (autoloads nil "glasses" "progmodes/glasses.el" (0 0 0 0))
;;; Generated autoloads from progmodes/glasses.el
(autoload 'glasses-mode "glasses" "\
;;;***
\f
-;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (22272 64438
-;;;;;; 224671 103000))
+;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (0 0 0 0))
;;; Generated autoloads from gnus/gmm-utils.el
(autoload 'gmm-regexp-concat "gmm-utils" "\
;;;***
\f
-;;;### (autoloads nil "gnus" "gnus/gnus.el" (22165 43181 87854 955000))
+;;;### (autoloads nil "gnus" "gnus/gnus.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus.el
(push (purecopy '(gnus 5 13)) package--builtin-versions)
(when (fboundp 'custom-autoload)
;;;***
\f
-;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (22182 4679
-;;;;;; 403463 499000))
+;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-agent.el
(autoload 'gnus-unplugged "gnus-agent" "\
;;;***
\f
-;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (22284 55604
-;;;;;; 142845 171000))
+;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-art.el
(autoload 'gnus-article-prepare-display "gnus-art" "\
;;;***
\f
-;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (22150
-;;;;;; 28227 674072 702000))
+;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from gnus/gnus-bookmark.el
(autoload 'gnus-bookmark-set "gnus-bookmark" "\
;;;***
\f
-;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (22150 28227
-;;;;;; 678072 702000))
+;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-cache.el
(autoload 'gnus-jog-cache "gnus-cache" "\
;;;***
\f
-;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (22150 28227
-;;;;;; 682072 702000))
+;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-delay.el
(autoload 'gnus-delay-article "gnus-delay" "\
;;;***
\f
-;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (22150 28227
-;;;;;; 686072 702000))
+;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-diary.el
(autoload 'gnus-user-format-function-d "gnus-diary" "\
;;;***
\f
-;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (22150 28227
-;;;;;; 686072 702000))
+;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-dired.el
(autoload 'turn-on-gnus-dired-mode "gnus-dired" "\
;;;***
\f
-;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (22150 28227
-;;;;;; 686072 702000))
+;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-draft.el
(autoload 'gnus-draft-reminder "gnus-draft" "\
;;;***
\f
-;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (22165 43181
-;;;;;; 71854 955000))
+;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-fun.el
(autoload 'gnus--random-face-with-type "gnus-fun" "\
;;;***
\f
-;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (22192
-;;;;;; 2880 975382 391000))
+;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from gnus/gnus-gravatar.el
(autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\
;;;***
\f
-;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (22150 28227
-;;;;;; 694072 702000))
+;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-group.el
(autoload 'gnus-fetch-group "gnus-group" "\
;;;***
\f
-;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (22150 28227
-;;;;;; 694072 702000))
+;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-html.el
(autoload 'gnus-article-html "gnus-html" "\
;;;***
\f
-;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (22189 64323
-;;;;;; 180321 19000))
+;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-kill.el
(defalias 'gnus-batch-kill 'gnus-batch-score)
;;;***
\f
-;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (22150 28227 698072
-;;;;;; 702000))
+;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-ml.el
(autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\
;;;***
\f
-;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (22150 28227
-;;;;;; 698072 702000))
+;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-mlspl.el
(autoload 'gnus-group-split-setup "gnus-mlspl" "\
;;;***
\f
-;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (22150 28227
-;;;;;; 702072 702000))
+;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-msg.el
(autoload 'gnus-msg-mail "gnus-msg" "\
;;;***
\f
;;;### (autoloads nil "gnus-notifications" "gnus/gnus-notifications.el"
-;;;;;; (22150 28227 702072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from gnus/gnus-notifications.el
(autoload 'gnus-notifications "gnus-notifications" "\
;;;***
\f
-;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (22192 2880
-;;;;;; 983382 391000))
+;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-picon.el
(autoload 'gnus-treat-from-picon "gnus-picon" "\
;;;***
\f
-;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (22150 28227
-;;;;;; 702072 702000))
+;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-range.el
(autoload 'gnus-sorted-difference "gnus-range" "\
;;;***
\f
-;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (22150
-;;;;;; 28227 702072 702000))
+;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from gnus/gnus-registry.el
(autoload 'gnus-registry-initialize "gnus-registry" "\
;;;***
\f
-;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (22150 28227
-;;;;;; 806072 702000))
+;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-sieve.el
(autoload 'gnus-sieve-update "gnus-sieve" "\
;;;***
\f
-;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (22150 28227
-;;;;;; 806072 702000))
+;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-spec.el
(autoload 'gnus-update-format "gnus-spec" "\
;;;***
\f
-;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (22197 58438
-;;;;;; 235460 447000))
+;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-start.el
(autoload 'gnus-declare-backend "gnus-start" "\
;;;***
\f
-;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (22199 13769
-;;;;;; 464900 836000))
+;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-sum.el
(autoload 'gnus-summary-bookmark-jump "gnus-sum" "\
;;;***
\f
-;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (22150 28227
-;;;;;; 862072 702000))
+;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-sync.el
(autoload 'gnus-sync-initialize "gnus-sync" "\
;;;***
\f
-;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (22150 28227
-;;;;;; 938072 702000))
+;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-win.el
(autoload 'gnus-add-configuration "gnus-win" "\
;;;***
\f
-;;;### (autoloads nil "gnutls" "net/gnutls.el" (22150 28228 358072
-;;;;;; 702000))
+;;;### (autoloads nil "gnutls" "net/gnutls.el" (0 0 0 0))
;;; Generated autoloads from net/gnutls.el
(defvar gnutls-min-prime-bits 256 "\
;;;***
\f
-;;;### (autoloads nil "gomoku" "play/gomoku.el" (22182 4679 471463
-;;;;;; 499000))
+;;;### (autoloads nil "gomoku" "play/gomoku.el" (0 0 0 0))
;;; Generated autoloads from play/gomoku.el
(autoload 'gomoku "gomoku" "\
;;;***
\f
-;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (22150 28228
-;;;;;; 358072 702000))
+;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (0 0 0 0))
;;; Generated autoloads from net/goto-addr.el
(define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1")
;;;***
\f
-;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (22150 28227
-;;;;;; 942072 702000))
-;;; Generated autoloads from gnus/gravatar.el
+;;;### (autoloads nil "gravatar" "image/gravatar.el" (0 0 0 0))
+;;; Generated autoloads from image/gravatar.el
(autoload 'gravatar-retrieve "gravatar" "\
Retrieve MAIL-ADDRESS gravatar and call CB on retrieval.
;;;***
\f
-;;;### (autoloads nil "grep" "progmodes/grep.el" (22296 46772 464104
-;;;;;; 103000))
+;;;### (autoloads nil "grep" "progmodes/grep.el" (0 0 0 0))
;;; Generated autoloads from progmodes/grep.el
(defvar grep-window-height nil "\
;;;***
\f
-;;;### (autoloads nil "gs" "gs.el" (22150 28228 26072 702000))
+;;;### (autoloads nil "gs" "gs.el" (0 0 0 0))
;;; Generated autoloads from gs.el
(autoload 'gs-load-image "gs" "\
;;;***
\f
-;;;### (autoloads nil "gud" "progmodes/gud.el" (22189 64323 288321
-;;;;;; 19000))
+;;;### (autoloads nil "gud" "progmodes/gud.el" (0 0 0 0))
;;; Generated autoloads from progmodes/gud.el
(autoload 'gud-gdb "gud" "\
(defvar gud-tooltip-mode nil "\
Non-nil if Gud-Tooltip mode is enabled.
-See the command `gud-tooltip-mode' for a description of this minor mode.
+See the `gud-tooltip-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `gud-tooltip-mode'.")
;;;***
\f
-;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (22150 28227 434072
-;;;;;; 702000))
+;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/gv.el
(autoload 'gv-get "gv" "\
;;;***
\f
-;;;### (autoloads nil "handwrite" "play/handwrite.el" (22150 28228
-;;;;;; 678072 702000))
+;;;### (autoloads nil "handwrite" "play/handwrite.el" (0 0 0 0))
;;; Generated autoloads from play/handwrite.el
(autoload 'handwrite "handwrite" "\
;;;***
\f
-;;;### (autoloads nil "hanoi" "play/hanoi.el" (22086 11930 130062
-;;;;;; 731000))
+;;;### (autoloads nil "hanoi" "play/hanoi.el" (0 0 0 0))
;;; Generated autoloads from play/hanoi.el
(autoload 'hanoi "hanoi" "\
;;;***
\f
-;;;### (autoloads nil "hashcash" "mail/hashcash.el" (22150 28228
-;;;;;; 230072 702000))
+;;;### (autoloads nil "hashcash" "mail/hashcash.el" (0 0 0 0))
;;; Generated autoloads from mail/hashcash.el
(autoload 'hashcash-insert-payment "hashcash" "\
;;;***
\f
-;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (22150 28228 26072
-;;;;;; 702000))
+;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (0 0 0 0))
;;; Generated autoloads from help-at-pt.el
(autoload 'help-at-pt-string "help-at-pt" "\
;;;***
\f
-;;;### (autoloads nil "help-fns" "help-fns.el" (22211 4933 601358
-;;;;;; 144000))
+;;;### (autoloads nil "help-fns" "help-fns.el" (0 0 0 0))
;;; Generated autoloads from help-fns.el
(autoload 'describe-function "help-fns" "\
;;;***
\f
-;;;### (autoloads nil "help-macro" "help-macro.el" (22150 28228 26072
-;;;;;; 702000))
+;;;### (autoloads nil "help-macro" "help-macro.el" (0 0 0 0))
;;; Generated autoloads from help-macro.el
(defvar three-step-help nil "\
;;;***
\f
-;;;### (autoloads nil "help-mode" "help-mode.el" (22220 19926 384329
-;;;;;; 271000))
+;;;### (autoloads nil "help-mode" "help-mode.el" (0 0 0 0))
;;; Generated autoloads from help-mode.el
(autoload 'help-mode "help-mode" "\
;;;***
\f
-;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (22150 28227
-;;;;;; 434072 702000))
+;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/helper.el
(autoload 'Helper-describe-bindings "helper" "\
;;;***
\f
-;;;### (autoloads nil "hexl" "hexl.el" (22150 28228 26072 702000))
+;;;### (autoloads nil "hexl" "hexl.el" (0 0 0 0))
;;; Generated autoloads from hexl.el
(autoload 'hexl-mode "hexl" "\
;;;***
\f
-;;;### (autoloads nil "hi-lock" "hi-lock.el" (22150 28228 30072 702000))
+;;;### (autoloads nil "hi-lock" "hi-lock.el" (0 0 0 0))
;;; Generated autoloads from hi-lock.el
(autoload 'hi-lock-mode "hi-lock" "\
(defvar global-hi-lock-mode nil "\
Non-nil if Global Hi-Lock mode is enabled.
-See the command `global-hi-lock-mode' for a description of this minor mode.
+See the `global-hi-lock-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-hi-lock-mode'.")
;;;***
\f
-;;;### (autoloads nil "hideif" "progmodes/hideif.el" (22197 58438
-;;;;;; 447460 447000))
+;;;### (autoloads nil "hideif" "progmodes/hideif.el" (0 0 0 0))
;;; Generated autoloads from progmodes/hideif.el
(autoload 'hide-ifdef-mode "hideif" "\
;;;***
\f
-;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (22150 28228
-;;;;;; 830072 702000))
+;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (0 0 0 0))
;;; Generated autoloads from progmodes/hideshow.el
(defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\
;;;***
\f
-;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (22150 28228 30072
-;;;;;; 702000))
+;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (0 0 0 0))
;;; Generated autoloads from hilit-chg.el
(autoload 'highlight-changes-mode "hilit-chg" "\
(defvar global-highlight-changes-mode nil "\
Non-nil if Global Highlight-Changes mode is enabled.
-See the command `global-highlight-changes-mode' for a description of this minor mode.
+See the `global-highlight-changes-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-highlight-changes-mode'.")
;;;***
\f
-;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (22150 28228 30072
-;;;;;; 702000))
+;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (0 0 0 0))
;;; Generated autoloads from hippie-exp.el
(push (purecopy '(hippie-exp 1 6)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "hl-line" "hl-line.el" (22150 28228 30072 702000))
+;;;### (autoloads nil "hl-line" "hl-line.el" (0 0 0 0))
;;; Generated autoloads from hl-line.el
(autoload 'hl-line-mode "hl-line" "\
(defvar global-hl-line-mode nil "\
Non-nil if Global Hl-Line mode is enabled.
-See the command `global-hl-line-mode' for a description of this minor mode.
+See the `global-hl-line-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-hl-line-mode'.")
;;;***
\f
-;;;### (autoloads nil "holidays" "calendar/holidays.el" (22150 28227
-;;;;;; 78072 702000))
+;;;### (autoloads nil "holidays" "calendar/holidays.el" (0 0 0 0))
;;; Generated autoloads from calendar/holidays.el
(defvar holiday-general-holidays (mapcar 'purecopy '((holiday-fixed 1 1 "New Year's Day") (holiday-float 1 1 3 "Martin Luther King Day") (holiday-fixed 2 2 "Groundhog Day") (holiday-fixed 2 14 "Valentine's Day") (holiday-float 2 1 3 "President's Day") (holiday-fixed 3 17 "St. Patrick's Day") (holiday-fixed 4 1 "April Fools' Day") (holiday-float 5 0 2 "Mother's Day") (holiday-float 5 1 -1 "Memorial Day") (holiday-fixed 6 14 "Flag Day") (holiday-float 6 0 3 "Father's Day") (holiday-fixed 7 4 "Independence Day") (holiday-float 9 1 1 "Labor Day") (holiday-float 10 1 2 "Columbus Day") (holiday-fixed 10 31 "Halloween") (holiday-fixed 11 11 "Veteran's Day") (holiday-float 11 4 4 "Thanksgiving"))) "\
;;;***
\f
-;;;### (autoloads nil "html2text" "gnus/html2text.el" (22150 28227
-;;;;;; 946072 702000))
-;;; Generated autoloads from gnus/html2text.el
+;;;### (autoloads nil "html2text" "net/html2text.el" (0 0 0 0))
+;;; Generated autoloads from net/html2text.el
(autoload 'html2text "html2text" "\
Convert HTML to plain text in the current buffer.
;;;***
\f
-;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (22174 41792
-;;;;;; 975867 435000))
+;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (0 0 0 0))
;;; Generated autoloads from htmlfontify.el
(push (purecopy '(htmlfontify 0 21)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (22150 28228 50072
-;;;;;; 702000))
+;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (0 0 0 0))
;;; Generated autoloads from ibuf-macs.el
(autoload 'define-ibuffer-column "ibuf-macs" "\
;;;***
\f
-;;;### (autoloads nil "ibuffer" "ibuffer.el" (22150 28612 886072
-;;;;;; 702000))
+;;;### (autoloads nil "ibuffer" "ibuffer.el" (0 0 0 0))
;;; Generated autoloads from ibuffer.el
(autoload 'ibuffer-list-buffers "ibuffer" "\
;;;***
\f
-;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (22150
-;;;;;; 28227 78072 702000))
+;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from calendar/icalendar.el
(push (purecopy '(icalendar 0 19)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "icomplete" "icomplete.el" (22150 28228 54072
-;;;;;; 702000))
+;;;### (autoloads nil "icomplete" "icomplete.el" (0 0 0 0))
;;; Generated autoloads from icomplete.el
(defvar icomplete-mode nil "\
Non-nil if Icomplete mode is enabled.
-See the command `icomplete-mode' for a description of this minor mode.
+See the `icomplete-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `icomplete-mode'.")
;;;***
\f
-;;;### (autoloads nil "icon" "progmodes/icon.el" (22197 58438 447460
-;;;;;; 447000))
+;;;### (autoloads nil "icon" "progmodes/icon.el" (0 0 0 0))
;;; Generated autoloads from progmodes/icon.el
(autoload 'icon-mode "icon" "\
;;;***
\f
-;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (22150
-;;;;;; 28228 850072 702000))
+;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from progmodes/idlw-shell.el
(autoload 'idlwave-shell "idlw-shell" "\
;;;***
\f
-;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (22197 58438
-;;;;;; 467460 447000))
+;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (0 0 0 0))
;;; Generated autoloads from progmodes/idlwave.el
(push (purecopy '(idlwave 6 1 22)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ido" "ido.el" (22150 28228 82072 702000))
+;;;### (autoloads nil "ido" "ido.el" (0 0 0 0))
;;; Generated autoloads from ido.el
(defvar ido-mode nil "\
;;;***
\f
-;;;### (autoloads nil "ielm" "ielm.el" (22150 28228 82072 702000))
+;;;### (autoloads nil "ielm" "ielm.el" (0 0 0 0))
;;; Generated autoloads from ielm.el
(autoload 'ielm "ielm" "\
;;;***
\f
-;;;### (autoloads nil "iimage" "iimage.el" (22150 28228 82072 702000))
+;;;### (autoloads nil "iimage" "iimage.el" (0 0 0 0))
;;; Generated autoloads from iimage.el
(define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1")
;;;***
\f
-;;;### (autoloads nil "image" "image.el" (22150 28228 86072 702000))
+;;;### (autoloads nil "image" "image.el" (0 0 0 0))
;;; Generated autoloads from image.el
(autoload 'image-type-from-data "image" "\
;;;***
\f
-;;;### (autoloads nil "image-dired" "image-dired.el" (22150 28228
-;;;;;; 86072 702000))
+;;;### (autoloads nil "image-dired" "image-dired.el" (0 0 0 0))
;;; Generated autoloads from image-dired.el
(push (purecopy '(image-dired 0 4 11)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "image-file" "image-file.el" (22150 28228 86072
-;;;;;; 702000))
+;;;### (autoloads nil "image-file" "image-file.el" (0 0 0 0))
;;; Generated autoloads from image-file.el
(defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\
(defvar auto-image-file-mode nil "\
Non-nil if Auto-Image-File mode is enabled.
-See the command `auto-image-file-mode' for a description of this minor mode.
+See the `auto-image-file-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `auto-image-file-mode'.")
;;;***
\f
-;;;### (autoloads nil "image-mode" "image-mode.el" (22174 53239 753341
-;;;;;; 435000))
+;;;### (autoloads nil "image-mode" "image-mode.el" (0 0 0 0))
;;; Generated autoloads from image-mode.el
(autoload 'image-mode "image-mode" "\
Major mode for image files.
-You can use \\<image-mode-map>\\[image-toggle-display]
-to toggle between display as an image and display as text.
+You can use \\<image-mode-map>\\[image-toggle-display] or \\<image-mode-map>\\[image-toggle-hex-display]
+to toggle between display as an image and display as text or hex.
Key bindings:
\\{image-mode-map}
\(fn &optional ARG)" t nil)
-(autoload 'image-mode-as-text "image-mode" "\
+(autoload 'image-mode-to-text "image-mode" "\
Set a non-image mode as major mode in combination with image minor mode.
-A non-image major mode found from `auto-mode-alist' or Fundamental mode
-displays an image file as text. `image-minor-mode' provides the key
-\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
-to display an image file as the actual image.
-
-You can use `image-mode-as-text' in `auto-mode-alist' when you want
-to display an image file as text initially.
-
-See commands `image-mode' and `image-minor-mode' for more information
-on these modes.
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as text.
-\(fn)" t nil)
+\(fn)" nil nil)
(autoload 'image-bookmark-jump "image-mode" "\
;;;***
\f
-;;;### (autoloads nil "imenu" "imenu.el" (22150 28228 90072 702000))
+;;;### (autoloads nil "imenu" "imenu.el" (0 0 0 0))
;;; Generated autoloads from imenu.el
(defvar imenu-sort-function nil "\
;;;***
\f
-;;;### (autoloads nil "ind-util" "language/ind-util.el" (22150 28228
-;;;;;; 190072 702000))
+;;;### (autoloads nil "ind-util" "language/ind-util.el" (0 0 0 0))
;;; Generated autoloads from language/ind-util.el
(autoload 'indian-compose-region "ind-util" "\
;;;***
\f
-;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (22150 28228
-;;;;;; 862072 702000))
+;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (0 0 0 0))
;;; Generated autoloads from progmodes/inf-lisp.el
(autoload 'inferior-lisp "inf-lisp" "\
;;;***
\f
-;;;### (autoloads nil "info" "info.el" (22150 28228 98072 702000))
+;;;### (autoloads nil "info" "info.el" (0 0 0 0))
;;; Generated autoloads from info.el
(defcustom Info-default-directory-list (let* ((config-dir (file-name-as-directory (or (and (featurep 'ns) (let ((dir (expand-file-name "../info" data-directory))) (if (file-directory-p dir) dir))) configure-info-directory))) (prefixes (prune-directory-list '("/usr/local/" "/usr/" "/opt/" "/"))) (suffixes '("share/" "" "gnu/" "gnu/lib/" "gnu/lib/emacs/" "emacs/" "lib/" "lib/emacs/")) (standard-info-dirs (apply #'nconc (mapcar (lambda (pfx) (let ((dirs (mapcar (lambda (sfx) (concat pfx sfx "info/")) suffixes))) (prune-directory-list dirs))) prefixes))) (dirs (if (member config-dir standard-info-dirs) (nconc standard-info-dirs (list config-dir)) (cons config-dir standard-info-dirs)))) (if (not (eq system-type 'windows-nt)) dirs (let* ((instdir (file-name-directory invocation-directory)) (dir1 (expand-file-name "../info/" instdir)) (dir2 (expand-file-name "../../../info/" instdir))) (cond ((file-exists-p dir1) (append dirs (list dir1))) ((file-exists-p dir2) (append dirs (list dir2))) (t dirs))))) "\
;;;***
\f
-;;;### (autoloads nil "info-look" "info-look.el" (22291 28851 633608
-;;;;;; 847000))
+;;;### (autoloads nil "info-look" "info-look.el" (0 0 0 0))
;;; Generated autoloads from info-look.el
(autoload 'info-lookup-reset "info-look" "\
;;;***
\f
-;;;### (autoloads nil "info-xref" "info-xref.el" (22150 28228 94072
-;;;;;; 702000))
+;;;### (autoloads nil "info-xref" "info-xref.el" (0 0 0 0))
;;; Generated autoloads from info-xref.el
(push (purecopy '(info-xref 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "informat" "informat.el" (22150 28228 102072
-;;;;;; 702000))
+;;;### (autoloads nil "informat" "informat.el" (0 0 0 0))
;;; Generated autoloads from informat.el
(autoload 'Info-tagify "informat" "\
;;;***
\f
-;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (22171 34371
-;;;;;; 930658 796000))
+;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/inline.el
(autoload 'define-inline "inline" "\
;;;***
\f
-;;;### (autoloads nil "inversion" "cedet/inversion.el" (22150 28227
-;;;;;; 218072 702000))
+;;;### (autoloads nil "inversion" "cedet/inversion.el" (0 0 0 0))
;;; Generated autoloads from cedet/inversion.el
(push (purecopy '(inversion 1 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (22150
-;;;;;; 28228 106072 702000))
+;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from international/isearch-x.el
(autoload 'isearch-toggle-specified-input-method "isearch-x" "\
;;;***
\f
-;;;### (autoloads nil "isearchb" "isearchb.el" (22150 28228 154072
-;;;;;; 702000))
+;;;### (autoloads nil "isearchb" "isearchb.el" (0 0 0 0))
;;; Generated autoloads from isearchb.el
(push (purecopy '(isearchb 1 5)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (22150
-;;;;;; 28228 106072 702000))
+;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from international/iso-cvt.el
(autoload 'iso-spanish "iso-cvt" "\
;;;***
\f
;;;### (autoloads nil "iso-transl" "international/iso-transl.el"
-;;;;;; (22150 28228 106072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from international/iso-transl.el
(define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
(autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap)
;;;***
\f
-;;;### (autoloads nil "ispell" "textmodes/ispell.el" (22308 37947
-;;;;;; 230422 527000))
+;;;### (autoloads nil "ispell" "textmodes/ispell.el" (0 0 0 0))
;;; Generated autoloads from textmodes/ispell.el
(put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive))))
(KEY REGEXP) - skip to end of REGEXP. REGEXP must be a string.
(KEY FUNCTION ARGS) - FUNCTION called with ARGS returns end of region.")
-(defvar ispell-tex-skip-alists (purecopy '((("\\\\addcontentsline" ispell-tex-arg-end 2) ("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end) ("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) ("\\\\bibliographystyle" ispell-tex-arg-end) ("\\\\makebox" ispell-tex-arg-end 0) ("\\\\e?psfig" ispell-tex-arg-end) ("\\\\document\\(class\\|style\\)" . "\\\\begin[ \n]*{[ \n]*document[ \n]*}")) (("\\(figure\\|table\\)\\*?" ispell-tex-arg-end 0) ("list" ispell-tex-arg-end 2) ("program" . "\\\\end[ \n]*{[ \n]*program[ \n]*}") ("verbatim\\*?" . "\\\\end[ \n]*{[ \n]*verbatim\\*?[ \n]*}")))) "\
+(defvar ispell-tex-skip-alists (purecopy '((("\\\\addcontentsline" ispell-tex-arg-end 2) ("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end) ("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) ("\\\\cref" ispell-tex-arg-end) ("\\\\bibliographystyle" ispell-tex-arg-end) ("\\\\makebox" ispell-tex-arg-end 0) ("\\\\e?psfig" ispell-tex-arg-end) ("\\\\document\\(class\\|style\\)" . "\\\\begin[ \n]*{[ \n]*document[ \n]*}")) (("\\(figure\\|table\\)\\*?" ispell-tex-arg-end 0) ("list" ispell-tex-arg-end 2) ("program" . "\\\\end[ \n]*{[ \n]*program[ \n]*}") ("verbatim\\*?" . "\\\\end[ \n]*{[ \n]*verbatim\\*?[ \n]*}")))) "\
Lists of regions to be skipped in TeX mode.
First list is used raw.
Second list has key placed inside \\begin{}.
To spell-check whenever a message is sent, include the appropriate lines
in your init file:
- (add-hook \\='message-send-hook \\='ispell-message) ;; GNUS 5
- (add-hook \\='news-inews-hook \\='ispell-message) ;; GNUS 4
- (add-hook \\='mail-send-hook \\='ispell-message)
- (add-hook \\='mh-before-send-letter-hook \\='ispell-message)
+ (add-hook \\='message-send-hook #\\='ispell-message) ;; GNUS 5
+ (add-hook \\='news-inews-hook #\\='ispell-message) ;; GNUS 4
+ (add-hook \\='mail-send-hook #\\='ispell-message)
+ (add-hook \\='mh-before-send-letter-hook #\\='ispell-message)
You can bind this to the key C-c i in GNUS or mail by adding to
`news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
;;;***
\f
-;;;### (autoloads nil "japan-util" "language/japan-util.el" (22150
-;;;;;; 28228 190072 702000))
+;;;### (autoloads nil "japan-util" "language/japan-util.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from language/japan-util.el
(autoload 'setup-japanese-environment-internal "japan-util" "\
;;;***
\f
-;;;### (autoloads nil "jka-compr" "jka-compr.el" (22150 28228 158072
-;;;;;; 702000))
+;;;### (autoloads nil "jka-compr" "jka-compr.el" (0 0 0 0))
;;; Generated autoloads from jka-compr.el
(defvar jka-compr-inhibit nil "\
;;;***
\f
-;;;### (autoloads nil "js" "progmodes/js.el" (22305 18655 595719
-;;;;;; 883000))
+;;;### (autoloads nil "js" "progmodes/js.el" (0 0 0 0))
;;; Generated autoloads from progmodes/js.el
(push (purecopy '(js 9)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "json" "json.el" (22197 58438 339460 447000))
+;;;### (autoloads nil "json" "json.el" (0 0 0 0))
;;; Generated autoloads from json.el
(push (purecopy '(json 1 4)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "keypad" "emulation/keypad.el" (22150 28227
-;;;;;; 462072 702000))
+;;;### (autoloads nil "keypad" "emulation/keypad.el" (0 0 0 0))
;;; Generated autoloads from emulation/keypad.el
(defvar keypad-setup nil "\
;;;***
\f
-;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (22150
-;;;;;; 28228 106072 702000))
+;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from international/kinsoku.el
(autoload 'kinsoku "kinsoku" "\
;;;***
\f
-;;;### (autoloads nil "kkc" "international/kkc.el" (22150 28228 106072
-;;;;;; 702000))
+;;;### (autoloads nil "kkc" "international/kkc.el" (0 0 0 0))
;;; Generated autoloads from international/kkc.el
(defvar kkc-after-update-conversion-functions nil "\
;;;***
\f
-;;;### (autoloads nil "kmacro" "kmacro.el" (22150 28228 162072 702000))
+;;;### (autoloads nil "kmacro" "kmacro.el" (0 0 0 0))
;;; Generated autoloads from kmacro.el
(global-set-key "\C-x(" 'kmacro-start-macro)
(global-set-key "\C-x)" 'kmacro-end-macro)
;;;***
\f
-;;;### (autoloads nil "korea-util" "language/korea-util.el" (22150
-;;;;;; 28228 194072 702000))
+;;;### (autoloads nil "korea-util" "language/korea-util.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from language/korea-util.el
(defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\
;;;***
\f
-;;;### (autoloads nil "lao-util" "language/lao-util.el" (22150 28228
-;;;;;; 194072 702000))
+;;;### (autoloads nil "lao-util" "language/lao-util.el" (0 0 0 0))
;;; Generated autoloads from language/lao-util.el
(autoload 'lao-compose-string "lao-util" "\
;;;***
\f
-;;;### (autoloads nil "latexenc" "international/latexenc.el" (22150
-;;;;;; 28228 106072 702000))
+;;;### (autoloads nil "latexenc" "international/latexenc.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from international/latexenc.el
(defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\
;;;***
\f
;;;### (autoloads nil "latin1-disp" "international/latin1-disp.el"
-;;;;;; (22150 28228 110072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from international/latin1-disp.el
(defvar latin1-display nil "\
;;;***
\f
-;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (22150
-;;;;;; 28228 866072 702000))
+;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/ld-script.el
(autoload 'ld-script-mode "ld-script" "\
;;;***
\f
-;;;### (autoloads nil "let-alist" "emacs-lisp/let-alist.el" (22150
-;;;;;; 28227 434072 702000))
+;;;### (autoloads nil "let-alist" "emacs-lisp/let-alist.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from emacs-lisp/let-alist.el
(push (purecopy '(let-alist 1 0 4)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "life" "play/life.el" (22150 28228 678072 702000))
+;;;### (autoloads nil "life" "play/life.el" (0 0 0 0))
;;; Generated autoloads from play/life.el
(autoload 'life "life" "\
;;;***
\f
-;;;### (autoloads nil "linum" "linum.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "linum" "linum.el" (0 0 0 0))
;;; Generated autoloads from linum.el
(push (purecopy '(linum 0 9 24)) package--builtin-versions)
(defvar global-linum-mode nil "\
Non-nil if Global Linum mode is enabled.
-See the command `global-linum-mode' for a description of this minor mode.
+See the `global-linum-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-linum-mode'.")
;;;***
\f
-;;;### (autoloads nil "loadhist" "loadhist.el" (22150 28228 210072
-;;;;;; 702000))
+;;;### (autoloads nil "loadhist" "loadhist.el" (0 0 0 0))
;;; Generated autoloads from loadhist.el
(autoload 'unload-feature "loadhist" "\
;;;***
\f
-;;;### (autoloads nil "locate" "locate.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "locate" "locate.el" (0 0 0 0))
;;; Generated autoloads from locate.el
(defvar locate-ls-subdir-switches (purecopy "-al") "\
;;;***
\f
-;;;### (autoloads nil "log-edit" "vc/log-edit.el" (22150 28229 278072
-;;;;;; 702000))
+;;;### (autoloads nil "log-edit" "vc/log-edit.el" (0 0 0 0))
;;; Generated autoloads from vc/log-edit.el
(autoload 'log-edit "log-edit" "\
;;;***
\f
-;;;### (autoloads nil "log-view" "vc/log-view.el" (22294 5044 399300
-;;;;;; 64000))
+;;;### (autoloads nil "log-view" "vc/log-view.el" (0 0 0 0))
;;; Generated autoloads from vc/log-view.el
(autoload 'log-view-mode "log-view" "\
;;;***
\f
-;;;### (autoloads nil "lpr" "lpr.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "lpr" "lpr.el" (0 0 0 0))
;;; Generated autoloads from lpr.el
(defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\
Non-nil if running on MS-DOS or MS Windows.")
-(defvar lpr-lp-system (memq system-type '(usg-unix-v hpux irix)) "\
+(defvar lpr-lp-system (memq system-type '(usg-unix-v hpux)) "\
Non-nil if running on a system type that uses the \"lp\" command.")
(defvar printer-name (and (eq system-type 'ms-dos) "PRN") "\
;;;***
\f
-;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (22220 19926 384329
-;;;;;; 271000))
+;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (0 0 0 0))
;;; Generated autoloads from ls-lisp.el
(defvar ls-lisp-support-shell-wildcards t "\
;;;***
\f
-;;;### (autoloads nil "lunar" "calendar/lunar.el" (22150 28227 78072
-;;;;;; 702000))
+;;;### (autoloads nil "lunar" "calendar/lunar.el" (0 0 0 0))
;;; Generated autoloads from calendar/lunar.el
(autoload 'lunar-phases "lunar" "\
;;;***
\f
-;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (22150 28228
-;;;;;; 866072 702000))
+;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (0 0 0 0))
;;; Generated autoloads from progmodes/m4-mode.el
(autoload 'm4-mode "m4-mode" "\
;;;***
\f
-;;;### (autoloads nil "macros" "macros.el" (22150 28228 210072 702000))
+;;;### (autoloads nil "macros" "macros.el" (0 0 0 0))
;;; Generated autoloads from macros.el
(autoload 'name-last-kbd-macro "macros" "\
;;;***
\f
-;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (22197 58438
-;;;;;; 343460 447000))
+;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (0 0 0 0))
;;; Generated autoloads from mail/mail-extr.el
(autoload 'mail-extract-address-components "mail-extr" "\
;;;***
\f
-;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (22150 28228
-;;;;;; 230072 702000))
+;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (0 0 0 0))
;;; Generated autoloads from mail/mail-hist.el
(autoload 'mail-hist-define-keys "mail-hist" "\
;;;***
\f
-;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (22150 28228
-;;;;;; 230072 702000))
+;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (0 0 0 0))
;;; Generated autoloads from mail/mail-utils.el
(defvar mail-use-rfc822 nil "\
;;;***
\f
-;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (22197 58438
-;;;;;; 343460 447000))
+;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (0 0 0 0))
;;; Generated autoloads from mail/mailabbrev.el
(defvar mail-abbrevs-mode nil "\
Non-nil if Mail-Abbrevs mode is enabled.
-See the command `mail-abbrevs-mode' for a description of this minor mode.
+See the `mail-abbrevs-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `mail-abbrevs-mode'.")
;;;***
\f
-;;;### (autoloads nil "mailalias" "mail/mailalias.el" (22189 64323
-;;;;;; 268321 19000))
+;;;### (autoloads nil "mailalias" "mail/mailalias.el" (0 0 0 0))
;;; Generated autoloads from mail/mailalias.el
(defvar mail-complete-style 'angles "\
;;;***
\f
-;;;### (autoloads nil "mailclient" "mail/mailclient.el" (22182 4679
-;;;;;; 423463 499000))
+;;;### (autoloads nil "mailclient" "mail/mailclient.el" (0 0 0 0))
;;; Generated autoloads from mail/mailclient.el
(autoload 'mailclient-send-it "mailclient" "\
;;;***
\f
-;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (22221
-;;;;;; 40772 751009 663000))
+;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/make-mode.el
(autoload 'makefile-mode "make-mode" "\
;;;***
\f
-;;;### (autoloads nil "makesum" "makesum.el" (22150 28228 258072
-;;;;;; 702000))
+;;;### (autoloads nil "makesum" "makesum.el" (0 0 0 0))
;;; Generated autoloads from makesum.el
(autoload 'make-command-summary "makesum" "\
;;;***
\f
-;;;### (autoloads nil "man" "man.el" (22308 37947 138422 527000))
+;;;### (autoloads nil "man" "man.el" (0 0 0 0))
;;; Generated autoloads from man.el
(defalias 'manual-entry 'man)
;;;***
\f
-;;;### (autoloads nil "map" "emacs-lisp/map.el" (22262 28597 583325
-;;;;;; 308000))
+;;;### (autoloads nil "map" "emacs-lisp/map.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/map.el
(push (purecopy '(map 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "master" "master.el" (22150 28228 262072 702000))
+;;;### (autoloads nil "master" "master.el" (0 0 0 0))
;;; Generated autoloads from master.el
(push (purecopy '(master 1 0 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "mb-depth" "mb-depth.el" (22150 28228 262072
-;;;;;; 702000))
+;;;### (autoloads nil "mb-depth" "mb-depth.el" (0 0 0 0))
;;; Generated autoloads from mb-depth.el
(defvar minibuffer-depth-indicate-mode nil "\
Non-nil if Minibuffer-Depth-Indicate mode is enabled.
-See the command `minibuffer-depth-indicate-mode' for a description of this minor mode.
+See the `minibuffer-depth-indicate-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `minibuffer-depth-indicate-mode'.")
;;;***
\f
-;;;### (autoloads nil "md4" "md4.el" (22150 28228 262072 702000))
+;;;### (autoloads nil "md4" "md4.el" (0 0 0 0))
;;; Generated autoloads from md4.el
(push (purecopy '(md4 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "message" "gnus/message.el" (22201 55498 114885
-;;;;;; 567000))
+;;;### (autoloads nil "message" "gnus/message.el" (0 0 0 0))
;;; Generated autoloads from gnus/message.el
(define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook)
;;;***
\f
-;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (22150
-;;;;;; 28228 870072 702000))
+;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/meta-mode.el
(push (purecopy '(meta-mode 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "metamail" "mail/metamail.el" (22150 28228
-;;;;;; 234072 702000))
+;;;### (autoloads nil "metamail" "mail/metamail.el" (0 0 0 0))
;;; Generated autoloads from mail/metamail.el
(autoload 'metamail-interpret-header "metamail" "\
;;;***
\f
-;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (22150 28228 294072
-;;;;;; 702000))
+;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-comp.el
(autoload 'mh-smail "mh-comp" "\
;;;***
\f
-;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (22150 28228 298072 702000))
+;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-e.el
-(push (purecopy '(mh-e 8 6)) package--builtin-versions)
+(push (purecopy '(mh-e 8 6 -4)) package--builtin-versions)
(put 'mh-progs 'risky-local-variable t)
;;;***
\f
-;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (22150 28228
-;;;;;; 302072 702000))
+;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-folder.el
(autoload 'mh-rmail "mh-folder" "\
;;;***
\f
-;;;### (autoloads nil "midnight" "midnight.el" (22265 4790 36806
-;;;;;; 924000))
+;;;### (autoloads nil "midnight" "midnight.el" (0 0 0 0))
;;; Generated autoloads from midnight.el
(defvar midnight-mode nil "\
Non-nil if Midnight mode is enabled.
-See the command `midnight-mode' for a description of this minor mode.
+See the `midnight-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `midnight-mode'.")
;;;***
\f
-;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (22150 28228
-;;;;;; 322072 702000))
+;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (0 0 0 0))
;;; Generated autoloads from minibuf-eldef.el
(defvar minibuffer-electric-default-mode nil "\
Non-nil if Minibuffer-Electric-Default mode is enabled.
-See the command `minibuffer-electric-default-mode' for a description of this minor mode.
+See the `minibuffer-electric-default-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `minibuffer-electric-default-mode'.")
;;;***
\f
-;;;### (autoloads nil "misc" "misc.el" (22150 28228 326072 702000))
+;;;### (autoloads nil "misc" "misc.el" (0 0 0 0))
;;; Generated autoloads from misc.el
(autoload 'butterfly "misc" "\
;;;***
\f
-;;;### (autoloads nil "misearch" "misearch.el" (22150 28228 326072
-;;;;;; 702000))
+;;;### (autoloads nil "misearch" "misearch.el" (0 0 0 0))
;;; Generated autoloads from misearch.el
(add-hook 'isearch-mode-hook 'multi-isearch-setup)
;;;***
\f
-;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (22150
-;;;;;; 28228 874072 702000))
+;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from progmodes/mixal-mode.el
(push (purecopy '(mixal-mode 0 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (22150 28227
-;;;;;; 978072 702000))
+;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-encode.el
(autoload 'mm-default-file-encoding "mm-encode" "\
;;;***
\f
-;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (22150 28227
-;;;;;; 978072 702000))
+;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-extern.el
(autoload 'mm-extern-cache-contents "mm-extern" "\
;;;***
\f
-;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (22150 28227
-;;;;;; 978072 702000))
+;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-partial.el
(autoload 'mm-inline-partial "mm-partial" "\
;;;***
\f
-;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (22150 28227 978072
-;;;;;; 702000))
+;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-url.el
(autoload 'mm-url-insert-file-contents "mm-url" "\
;;;***
\f
-;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (22150 28227 982072
-;;;;;; 702000))
+;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-uu.el
(autoload 'mm-uu-dissect "mm-uu" "\
;;;***
\f
-;;;### (autoloads nil "mml" "gnus/mml.el" (22150 28227 986072 702000))
+;;;### (autoloads nil "mml" "gnus/mml.el" (0 0 0 0))
;;; Generated autoloads from gnus/mml.el
(autoload 'mml-to-mime "mml" "\
;;;***
\f
-;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (22250 23504 507503
-;;;;;; 448000))
+;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (0 0 0 0))
;;; Generated autoloads from gnus/mml1991.el
(autoload 'mml1991-encrypt "mml1991" "\
;;;***
\f
-;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (22250 23504 507503
-;;;;;; 448000))
+;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (0 0 0 0))
;;; Generated autoloads from gnus/mml2015.el
(autoload 'mml2015-decrypt "mml2015" "\
;;;***
\f
-;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (22276 61491
-;;;;;; 202868 4000))
+;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (0 0 0 0))
;;; Generated autoloads from cedet/mode-local.el
(put 'define-overloadable-function 'doc-string-elt 3)
;;;***
\f
-;;;### (autoloads nil "modula2" "progmodes/modula2.el" (22086 11930
-;;;;;; 214062 731000))
+;;;### (autoloads nil "modula2" "progmodes/modula2.el" (0 0 0 0))
;;; Generated autoloads from progmodes/modula2.el
(defalias 'modula-2-mode 'm2-mode)
;;;***
\f
-;;;### (autoloads nil "morse" "play/morse.el" (22150 28228 682072
-;;;;;; 702000))
+;;;### (autoloads nil "morse" "play/morse.el" (0 0 0 0))
;;; Generated autoloads from play/morse.el
(autoload 'morse-region "morse" "\
;;;***
\f
-;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (22150 28228 326072
-;;;;;; 702000))
+;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (0 0 0 0))
;;; Generated autoloads from mouse-drag.el
(autoload 'mouse-drag-throw "mouse-drag" "\
;;;***
\f
-;;;### (autoloads nil "mpc" "mpc.el" (22150 28228 326072 702000))
+;;;### (autoloads nil "mpc" "mpc.el" (0 0 0 0))
;;; Generated autoloads from mpc.el
(autoload 'mpc "mpc" "\
;;;***
\f
-;;;### (autoloads nil "mpuz" "play/mpuz.el" (22150 28228 682072 702000))
+;;;### (autoloads nil "mpuz" "play/mpuz.el" (0 0 0 0))
;;; Generated autoloads from play/mpuz.el
(autoload 'mpuz "mpuz" "\
;;;***
\f
-;;;### (autoloads nil "msb" "msb.el" (22150 28228 338072 702000))
+;;;### (autoloads nil "msb" "msb.el" (0 0 0 0))
;;; Generated autoloads from msb.el
(defvar msb-mode nil "\
Non-nil if Msb mode is enabled.
-See the command `msb-mode' for a description of this minor mode.
+See the `msb-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `msb-mode'.")
;;;***
\f
-;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (22150
-;;;;;; 28228 114072 702000))
+;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from international/mule-diag.el
(autoload 'list-character-sets "mule-diag" "\
;;;***
\f
-;;;### (autoloads nil "mule-util" "international/mule-util.el" (22165
-;;;;;; 44248 411854 955000))
+;;;### (autoloads nil "mule-util" "international/mule-util.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from international/mule-util.el
(defsubst string-to-list (string) "\
;;;***
\f
-;;;### (autoloads nil "net-utils" "net/net-utils.el" (22150 28228
-;;;;;; 378072 702000))
+;;;### (autoloads nil "net-utils" "net/net-utils.el" (0 0 0 0))
;;; Generated autoloads from net/net-utils.el
(autoload 'ifconfig "net-utils" "\
;;;***
\f
-;;;### (autoloads nil "netrc" "net/netrc.el" (22150 28228 378072
-;;;;;; 702000))
+;;;### (autoloads nil "netrc" "net/netrc.el" (0 0 0 0))
;;; Generated autoloads from net/netrc.el
(autoload 'netrc-credentials "netrc" "\
;;;***
\f
-;;;### (autoloads nil "network-stream" "net/network-stream.el" (22150
-;;;;;; 28228 378072 702000))
+;;;### (autoloads nil "network-stream" "net/network-stream.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from net/network-stream.el
(autoload 'open-network-stream "network-stream" "\
Process output goes at end of that buffer. BUFFER may be nil,
meaning that the process is not associated with any buffer.
HOST is the name or IP address of the host to connect to.
-SERVICE is the name of the service desired, or an integer specifying
- a port number to connect to.
+SERVICE is the name of the service desired, or an integer or
+ integer string specifying a port number to connect to.
The remaining PARAMETERS should be a sequence of keywords and
values:
:nogreeting is a boolean that can be used to inhibit waiting for
a greeting from the server.
-:nowait is a boolean that says the connection should be made
+:nowait, if non-nil, says the connection should be made
asynchronously, if possible.
+:tls-parameters is a list that should be supplied if you're
+opening a TLS connection. The first element is the TLS
+type (either `gnutls-x509pki' or `gnutls-anon'), and the
+remaining elements should be a keyword list accepted by
+gnutls-boot (as returned by `gnutls-boot-parameters').
+
\(fn NAME BUFFER HOST SERVICE &rest PARAMETERS)" nil nil)
(defalias 'open-protocol-stream 'open-network-stream)
;;;***
\f
-;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (22150
-;;;;;; 28228 378072 702000))
+;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from net/newst-backend.el
(autoload 'newsticker-running-p "newst-backend" "\
;;;***
\f
;;;### (autoloads nil "newst-plainview" "net/newst-plainview.el"
-;;;;;; (22150 28228 382072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from net/newst-plainview.el
(autoload 'newsticker-plainview "newst-plainview" "\
;;;***
\f
-;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (22165
-;;;;;; 41682 87102 999000))
+;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from net/newst-reader.el
(autoload 'newsticker-show-news "newst-reader" "\
;;;***
\f
-;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (22150
-;;;;;; 28228 382072 702000))
+;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from net/newst-ticker.el
(autoload 'newsticker-ticker-running-p "newst-ticker" "\
;;;***
\f
-;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (22196
-;;;;;; 37575 156683 383000))
+;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from net/newst-treeview.el
(autoload 'newsticker-treeview "newst-treeview" "\
;;;***
\f
-;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (22150 28227 990072
-;;;;;; 702000))
+;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (0 0 0 0))
;;; Generated autoloads from gnus/nndiary.el
(autoload 'nndiary-generate-nov-databases "nndiary" "\
;;;***
\f
-;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (22150 28227 990072
-;;;;;; 702000))
+;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (0 0 0 0))
;;; Generated autoloads from gnus/nndoc.el
(autoload 'nndoc-add-type "nndoc" "\
;;;***
\f
-;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (22150 28227
-;;;;;; 994072 702000))
+;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnfolder.el
(autoload 'nnfolder-generate-active-file "nnfolder" "\
;;;***
\f
-;;;### (autoloads nil "nnml" "gnus/nnml.el" (22150 28228 2072 702000))
+;;;### (autoloads nil "nnml" "gnus/nnml.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnml.el
(autoload 'nnml-generate-nov-databases "nnml" "\
;;;***
\f
-;;;### (autoloads nil "novice" "novice.el" (22150 28228 446072 702000))
+;;;### (autoloads nil "novice" "novice.el" (0 0 0 0))
;;; Generated autoloads from novice.el
(define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1")
;;;***
\f
-;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (22150
-;;;;;; 28229 102072 702000))
+;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from textmodes/nroff-mode.el
(autoload 'nroff-mode "nroff-mode" "\
;;;***
\f
-;;;### (autoloads nil "ntlm" "net/ntlm.el" (22150 28228 386072 702000))
+;;;### (autoloads nil "ntlm" "net/ntlm.el" (0 0 0 0))
;;; Generated autoloads from net/ntlm.el
(push (purecopy '(ntlm 2 0 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (22150 28228
-;;;;;; 450072 702000))
-;;; Generated autoloads from nxml/nxml-glyph.el
-
-(autoload 'nxml-glyph-display-string "nxml-glyph" "\
-Return a string that can display a glyph for Unicode code-point N.
-FACE gives the face that will be used for displaying the string.
-Return nil if the face cannot display a glyph for N.
-
-\(fn N FACE)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (22150 28228
-;;;;;; 450072 702000))
+;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-mode.el
(autoload 'nxml-mode "nxml-mode" "\
;;;***
\f
-;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (22150 28228
-;;;;;; 454072 702000))
-;;; Generated autoloads from nxml/nxml-uchnm.el
-
-(autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\
-Enable the use of Unicode standard names for characters.
-The Unicode blocks for which names are enabled is controlled by
-the variable `nxml-enabled-unicode-blocks'.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "octave" "progmodes/octave.el" (22197 58438
-;;;;;; 503460 447000))
+;;;### (autoloads nil "octave" "progmodes/octave.el" (0 0 0 0))
;;; Generated autoloads from progmodes/octave.el
(autoload 'octave-mode "octave" "\
;;;***
\f
-;;;### (autoloads nil "opascal" "progmodes/opascal.el" (22156 23699
-;;;;;; 542755 538000))
+;;;### (autoloads nil "opascal" "progmodes/opascal.el" (0 0 0 0))
;;; Generated autoloads from progmodes/opascal.el
(define-obsolete-function-alias 'delphi-mode 'opascal-mode "24.4")
;;;***
\f
-;;;### (autoloads nil "org" "org/org.el" (22309 58853 550986 699000))
+;;;### (autoloads nil "org" "org/org.el" (0 0 0 0))
;;; Generated autoloads from org/org.el
(autoload 'org-babel-do-load-languages "org" "\
;;;***
\f
-;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (22150 28228
-;;;;;; 558072 702000))
+;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (0 0 0 0))
;;; Generated autoloads from org/org-agenda.el
(autoload 'org-toggle-sticky-agenda "org-agenda" "\
;;;***
\f
-;;;### (autoloads nil "org-capture" "org/org-capture.el" (22150 28228
-;;;;;; 558072 702000))
+;;;### (autoloads nil "org-capture" "org/org-capture.el" (0 0 0 0))
;;; Generated autoloads from org/org-capture.el
(autoload 'org-capture-string "org-capture" "\
;;;***
\f
-;;;### (autoloads nil "org-colview" "org/org-colview.el" (22150 28228
-;;;;;; 582072 702000))
+;;;### (autoloads nil "org-colview" "org/org-colview.el" (0 0 0 0))
;;; Generated autoloads from org/org-colview.el
(autoload 'org-columns-remove-overlays "org-colview" "\
;;;***
\f
-;;;### (autoloads nil "org-compat" "org/org-compat.el" (22192 2874
-;;;;;; 471382 391000))
+;;;### (autoloads nil "org-compat" "org/org-compat.el" (0 0 0 0))
;;; Generated autoloads from org/org-compat.el
(autoload 'org-check-version "org-compat" "\
;;;***
\f
-;;;### (autoloads nil "org-macs" "org/org-macs.el" (22150 28228 602072
-;;;;;; 702000))
+;;;### (autoloads nil "org-macs" "org/org-macs.el" (0 0 0 0))
;;; Generated autoloads from org/org-macs.el
(autoload 'org-load-noerror-mustsuffix "org-macs" "\
;;;***
\f
-;;;### (autoloads nil "org-version" "org/org-version.el" (22086 11930
-;;;;;; 98062 731000))
+;;;### (autoloads nil "org-version" "org/org-version.el" (0 0 0 0))
;;; Generated autoloads from org/org-version.el
(autoload 'org-release "org-version" "\
;;;***
\f
-;;;### (autoloads nil "outline" "outline.el" (22150 28228 666072
-;;;;;; 702000))
+;;;### (autoloads nil "outline" "outline.el" (0 0 0 0))
;;; Generated autoloads from outline.el
(put 'outline-regexp 'safe-local-variable 'stringp)
(put 'outline-heading-end-regexp 'safe-local-variable 'stringp)
;;;***
\f
-;;;### (autoloads nil "package" "emacs-lisp/package.el" (22278 49710
-;;;;;; 59090 835000))
+;;;### (autoloads nil "package" "emacs-lisp/package.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/package.el
(push (purecopy '(package 1 1 0)) package--builtin-versions)
If called as part of loading `user-init-file', set
`package-enable-at-startup' to nil, to prevent accidentally
loading packages twice.
+It is not necessary to adjust `load-path' or `require' the
+individual packages after calling `package-initialize' -- this is
+taken care of by `package-initialize'.
\(fn &optional NO-ACTIVATE)" t nil)
;;;***
\f
-;;;### (autoloads nil "paren" "paren.el" (22150 28228 666072 702000))
+;;;### (autoloads nil "paren" "paren.el" (0 0 0 0))
;;; Generated autoloads from paren.el
(defvar show-paren-mode nil "\
Non-nil if Show-Paren mode is enabled.
-See the command `show-paren-mode' for a description of this minor mode.
+See the `show-paren-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `show-paren-mode'.")
;;;***
\f
-;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (22226
-;;;;;; 58701 641313 948000))
+;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from calendar/parse-time.el
(put 'parse-time-rules 'risky-local-variable t)
(autoload 'parse-time-string "parse-time" "\
Parse the time-string STRING into (SEC MIN HOUR DAY MON YEAR DOW DST TZ).
-The values are identical to those of `decode-time', but any values that are
-unknown are returned as nil.
+STRING should be on something resembling an RFC2822 string, a la
+\"Fri, 25 Mar 2016 16:24:56 +0100\", but this function is
+somewhat liberal in what format it accepts, and will attempt to
+return a \"likely\" value even for somewhat malformed strings.
+The values returned are identical to those of `decode-time', but
+any values that are unknown are returned as nil.
\(fn STRING)" nil nil)
;;;***
\f
-;;;### (autoloads nil "pascal" "progmodes/pascal.el" (22197 58438
-;;;;;; 503460 447000))
+;;;### (autoloads nil "pascal" "progmodes/pascal.el" (0 0 0 0))
;;; Generated autoloads from progmodes/pascal.el
(autoload 'pascal-mode "pascal" "\
;;;***
\f
-;;;### (autoloads nil "password-cache" "password-cache.el" (22150
-;;;;;; 28228 666072 702000))
+;;;### (autoloads nil "password-cache" "password-cache.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from password-cache.el
(defvar password-cache t "\
;;;***
\f
-;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (22195 16710
-;;;;;; 371344 967000))
+;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/pcase.el
(autoload 'pcase "pcase" "\
;;;***
\f
-;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (22150 28228 666072
-;;;;;; 702000))
+;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (0 0 0 0))
;;; Generated autoloads from pcmpl-cvs.el
(autoload 'pcomplete/cvs "pcmpl-cvs" "\
;;;***
\f
-;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (22150 28228 666072
-;;;;;; 702000))
+;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (0 0 0 0))
;;; Generated autoloads from pcmpl-gnu.el
(autoload 'pcomplete/gzip "pcmpl-gnu" "\
\(fn)" nil nil)
+(autoload 'pcomplete/find "pcmpl-gnu" "\
+Completion for the GNU find utility.
+
+\(fn)" nil nil)
+
(defalias 'pcomplete/gdb 'pcomplete/xargs)
;;;***
\f
-;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (22150 28228
-;;;;;; 670072 702000))
+;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (0 0 0 0))
;;; Generated autoloads from pcmpl-linux.el
(autoload 'pcomplete/kill "pcmpl-linux" "\
;;;***
\f
-;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (22150 28228 670072
-;;;;;; 702000))
+;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (0 0 0 0))
;;; Generated autoloads from pcmpl-rpm.el
(autoload 'pcomplete/rpm "pcmpl-rpm" "\
;;;***
\f
-;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (22150 28228 670072
-;;;;;; 702000))
+;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (0 0 0 0))
;;; Generated autoloads from pcmpl-unix.el
(autoload 'pcomplete/cd "pcmpl-unix" "\
;;;***
\f
-;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (22150 28228 670072
-;;;;;; 702000))
+;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (0 0 0 0))
;;; Generated autoloads from pcmpl-x.el
(autoload 'pcomplete/tlmgr "pcmpl-x" "\
;;;***
\f
-;;;### (autoloads nil "pcomplete" "pcomplete.el" (22150 28228 674072
-;;;;;; 702000))
+;;;### (autoloads nil "pcomplete" "pcomplete.el" (0 0 0 0))
;;; Generated autoloads from pcomplete.el
(autoload 'pcomplete "pcomplete" "\
;;;***
\f
-;;;### (autoloads nil "pcvs" "vc/pcvs.el" (22182 4679 527463 499000))
+;;;### (autoloads nil "pcvs" "vc/pcvs.el" (0 0 0 0))
;;; Generated autoloads from vc/pcvs.el
(autoload 'cvs-checkout "pcvs" "\
;;;***
\f
-;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (22150 28229
-;;;;;; 278072 702000))
+;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (0 0 0 0))
;;; Generated autoloads from vc/pcvs-defs.el
(defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\
;;;***
\f
-;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (22197
-;;;;;; 58438 503460 447000))
+;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/perl-mode.el
(put 'perl-indent-level 'safe-local-variable 'integerp)
(put 'perl-continued-statement-offset 'safe-local-variable 'integerp)
;;;***
\f
-;;;### (autoloads nil "picture" "textmodes/picture.el" (22168 58180
-;;;;;; 311008 971000))
+;;;### (autoloads nil "picture" "textmodes/picture.el" (0 0 0 0))
;;; Generated autoloads from textmodes/picture.el
(autoload 'picture-mode "picture" "\
;;;***
\f
-;;;### (autoloads nil "pinentry" "net/pinentry.el" (22218 64587 997919
-;;;;;; 743000))
+;;;### (autoloads nil "pinentry" "net/pinentry.el" (0 0 0 0))
;;; Generated autoloads from net/pinentry.el
(push (purecopy '(pinentry 0 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "plstore" "gnus/plstore.el" (22150 28228 10072
-;;;;;; 702000))
-;;; Generated autoloads from gnus/plstore.el
+;;;### (autoloads nil "plstore" "plstore.el" (0 0 0 0))
+;;; Generated autoloads from plstore.el
(autoload 'plstore-open "plstore" "\
Create a plstore instance associated with FILE.
;;;***
\f
-;;;### (autoloads nil "po" "textmodes/po.el" (22150 28229 106072
-;;;;;; 702000))
+;;;### (autoloads nil "po" "textmodes/po.el" (0 0 0 0))
;;; Generated autoloads from textmodes/po.el
(autoload 'po-find-file-coding-system "po" "\
;;;***
\f
-;;;### (autoloads nil "pong" "play/pong.el" (22150 28228 682072 702000))
+;;;### (autoloads nil "pong" "play/pong.el" (0 0 0 0))
;;; Generated autoloads from play/pong.el
(autoload 'pong "pong" "\
;;;***
\f
-;;;### (autoloads nil "pop3" "gnus/pop3.el" (22150 28228 14072 702000))
-;;; Generated autoloads from gnus/pop3.el
+;;;### (autoloads nil "pop3" "net/pop3.el" (0 0 0 0))
+;;; Generated autoloads from net/pop3.el
(autoload 'pop3-movemail "pop3" "\
Transfer contents of a maildrop to the specified FILE.
;;;***
\f
-;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (22150 28227 454072
-;;;;;; 702000))
+;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/pp.el
(autoload 'pp-to-string "pp" "\
;;;***
\f
-;;;### (autoloads nil "printing" "printing.el" (22150 28228 698072
-;;;;;; 702000))
+;;;### (autoloads nil "printing" "printing.el" (0 0 0 0))
;;; Generated autoloads from printing.el
(push (purecopy '(printing 6 9 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "proced" "proced.el" (22150 28228 702072 702000))
+;;;### (autoloads nil "proced" "proced.el" (0 0 0 0))
;;; Generated autoloads from proced.el
(autoload 'proced "proced" "\
;;;***
\f
-;;;### (autoloads nil "profiler" "profiler.el" (22150 28228 702072
-;;;;;; 702000))
+;;;### (autoloads nil "profiler" "profiler.el" (0 0 0 0))
;;; Generated autoloads from profiler.el
(autoload 'profiler-start "profiler" "\
;;;***
\f
-;;;### (autoloads nil "project" "progmodes/project.el" (22296 46772
-;;;;;; 488104 103000))
+;;;### (autoloads nil "project" "progmodes/project.el" (0 0 0 0))
;;; Generated autoloads from progmodes/project.el
(autoload 'project-current "project" "\
;;;***
\f
-;;;### (autoloads nil "prolog" "progmodes/prolog.el" (22283 34751
-;;;;;; 181333 844000))
+;;;### (autoloads nil "prolog" "progmodes/prolog.el" (0 0 0 0))
;;; Generated autoloads from progmodes/prolog.el
(autoload 'prolog-mode "prolog" "\
;;;***
\f
-;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (22150 28228 986072 702000))
+;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (0 0 0 0))
;;; Generated autoloads from ps-bdf.el
(defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\
;;;***
\f
-;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (22197 58438
-;;;;;; 507460 447000))
+;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ps-mode.el
(push (purecopy '(ps-mode 1 1 9)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ps-print" "ps-print.el" (22220 19926 440329
-;;;;;; 271000))
+;;;### (autoloads nil "ps-print" "ps-print.el" (0 0 0 0))
;;; Generated autoloads from ps-print.el
(push (purecopy '(ps-print 7 3 5)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "pulse" "cedet/pulse.el" (22150 28227 222072
-;;;;;; 702000))
+;;;### (autoloads nil "pulse" "cedet/pulse.el" (0 0 0 0))
;;; Generated autoloads from cedet/pulse.el
(push (purecopy '(pulse 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "python" "progmodes/python.el" (22304 40885
-;;;;;; 57243 884000))
+;;;### (autoloads nil "python" "progmodes/python.el" (0 0 0 0))
;;; Generated autoloads from progmodes/python.el
(push (purecopy '(python 0 25 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "qp" "gnus/qp.el" (22150 28228 14072 702000))
-;;; Generated autoloads from gnus/qp.el
+;;;### (autoloads nil "qp" "mail/qp.el" (0 0 0 0))
+;;; Generated autoloads from mail/qp.el
(autoload 'quoted-printable-decode-region "qp" "\
Decode quoted-printable in the region between FROM and TO, per RFC 2045.
;;;***
\f
-;;;### (autoloads nil "quail" "international/quail.el" (22174 10581
-;;;;;; 673112 520000))
+;;;### (autoloads nil "quail" "international/quail.el" (0 0 0 0))
;;; Generated autoloads from international/quail.el
(autoload 'quail-title "quail" "\
;;;***
\f
-;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (22150
-;;;;;; 28228 202072 702000))
+;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from leim/quail/hangul.el
(autoload 'hangul-input-method-activate "quail/hangul" "\
;;;***
\f
;;;### (autoloads nil "quail/uni-input" "leim/quail/uni-input.el"
-;;;;;; (22150 28228 210072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from leim/quail/uni-input.el
(autoload 'ucs-input-activate "quail/uni-input" "\
;;;***
\f
-;;;### (autoloads nil "quickurl" "net/quickurl.el" (22197 58438 347460
-;;;;;; 447000))
+;;;### (autoloads nil "quickurl" "net/quickurl.el" (0 0 0 0))
;;; Generated autoloads from net/quickurl.el
(defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\
;;;***
\f
-;;;### (autoloads nil "rcirc" "net/rcirc.el" (22150 28228 390072
-;;;;;; 702000))
+;;;### (autoloads nil "rcirc" "net/rcirc.el" (0 0 0 0))
;;; Generated autoloads from net/rcirc.el
(autoload 'rcirc "rcirc" "\
(autoload 'rcirc-connect "rcirc" "\
-\(fn SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS PASSWORD ENCRYPTION)" nil nil)
+\(fn SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS PASSWORD ENCRYPTION SERVER-ALIAS)" nil nil)
(defvar rcirc-track-minor-mode nil "\
Non-nil if Rcirc-Track minor mode is enabled.
-See the command `rcirc-track-minor-mode' for a description of this minor mode.
+See the `rcirc-track-minor-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `rcirc-track-minor-mode'.")
;;;***
\f
-;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (22150
-;;;;;; 28227 454072 702000))
+;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from emacs-lisp/re-builder.el
(defalias 'regexp-builder 're-builder)
;;;***
\f
-;;;### (autoloads nil "recentf" "recentf.el" (22150 28228 990072
-;;;;;; 702000))
+;;;### (autoloads nil "recentf" "recentf.el" (0 0 0 0))
;;; Generated autoloads from recentf.el
(defvar recentf-mode nil "\
Non-nil if Recentf mode is enabled.
-See the command `recentf-mode' for a description of this minor mode.
+See the `recentf-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `recentf-mode'.")
;;;***
\f
-;;;### (autoloads nil "rect" "rect.el" (22304 40885 81243 884000))
+;;;### (autoloads nil "rect" "rect.el" (0 0 0 0))
;;; Generated autoloads from rect.el
(autoload 'delete-rectangle "rect" "\
Delete all whitespace following a specified column in each line.
The left edge of the rectangle specifies the position in each line
at which whitespace deletion should begin. On each line in the
-rectangle, all continuous whitespace starting at that column is deleted.
+rectangle, all contiguous whitespace starting at that column is deleted.
When called from a program the rectangle's corners are START and END.
With a prefix (or a FILL) argument, also fill too short lines.
;;;***
\f
-;;;### (autoloads nil "refill" "textmodes/refill.el" (22150 28229
-;;;;;; 106072 702000))
+;;;### (autoloads nil "refill" "textmodes/refill.el" (0 0 0 0))
;;; Generated autoloads from textmodes/refill.el
(autoload 'refill-mode "refill" "\
;;;***
\f
-;;;### (autoloads nil "reftex" "textmodes/reftex.el" (22179 28801
-;;;;;; 466001 468000))
+;;;### (autoloads nil "reftex" "textmodes/reftex.el" (0 0 0 0))
;;; Generated autoloads from textmodes/reftex.el
(autoload 'reftex-citation "reftex-cite" nil t)
(autoload 'reftex-all-document-files "reftex-parse")
;;;***
\f
-;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (22182
-;;;;;; 44208 583853 279000))
+;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from textmodes/reftex-vars.el
(put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x))))
(put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x))))
;;;***
\f
-;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (22150
-;;;;;; 28227 454072 702000))
+;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (0
+;;;;;; 0 0 0))
;;; Generated autoloads from emacs-lisp/regexp-opt.el
(autoload 'regexp-opt "regexp-opt" "\
;;;***
\f
-;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (22150 28227 454072
-;;;;;; 702000))
+;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/regi.el
(push (purecopy '(regi 1 8)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "remember" "textmodes/remember.el" (22150 28229
-;;;;;; 130072 702000))
+;;;### (autoloads nil "remember" "textmodes/remember.el" (0 0 0 0))
;;; Generated autoloads from textmodes/remember.el
(push (purecopy '(remember 2 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "repeat" "repeat.el" (22150 28228 994072 702000))
+;;;### (autoloads nil "repeat" "repeat.el" (0 0 0 0))
;;; Generated autoloads from repeat.el
(push (purecopy '(repeat 0 51)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "reporter" "mail/reporter.el" (22150 28228
-;;;;;; 234072 702000))
+;;;### (autoloads nil "reporter" "mail/reporter.el" (0 0 0 0))
;;; Generated autoloads from mail/reporter.el
(autoload 'reporter-submit-bug-report "reporter" "\
;;;***
\f
-;;;### (autoloads nil "reposition" "reposition.el" (22150 28228 994072
-;;;;;; 702000))
+;;;### (autoloads nil "reposition" "reposition.el" (0 0 0 0))
;;; Generated autoloads from reposition.el
(autoload 'reposition-window "reposition" "\
;;;***
\f
-;;;### (autoloads nil "reveal" "reveal.el" (22150 28228 994072 702000))
+;;;### (autoloads nil "reveal" "reveal.el" (0 0 0 0))
;;; Generated autoloads from reveal.el
(autoload 'reveal-mode "reveal" "\
(defvar global-reveal-mode nil "\
Non-nil if Global Reveal mode is enabled.
-See the command `global-reveal-mode' for a description of this minor mode.
+See the `global-reveal-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-reveal-mode'.")
;;;***
\f
-;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (22150 28227 454072
-;;;;;; 702000))
+;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/ring.el
(autoload 'ring-p "ring" "\
;;;***
\f
-;;;### (autoloads nil "rlogin" "net/rlogin.el" (22150 28228 394072
-;;;;;; 702000))
+;;;### (autoloads nil "rlogin" "net/rlogin.el" (0 0 0 0))
;;; Generated autoloads from net/rlogin.el
(autoload 'rlogin "rlogin" "\
;;;***
\f
-;;;### (autoloads nil "rmail" "mail/rmail.el" (22250 56969 841825
-;;;;;; 171000))
+;;;### (autoloads nil "rmail" "mail/rmail.el" (0 0 0 0))
;;; Generated autoloads from mail/rmail.el
(defvar rmail-file-name (purecopy "~/RMAIL") "\
(custom-autoload 'rmail-file-name "rmail" t)
-(put 'rmail-spool-directory 'standard-value '((cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/") (t "/usr/spool/mail/"))))
+(put 'rmail-spool-directory 'standard-value '((cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v)) "/usr/mail/") (t "/usr/spool/mail/"))))
-(defvar rmail-spool-directory (purecopy (cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/") (t "/usr/spool/mail/"))) "\
+(defvar rmail-spool-directory (purecopy (cond ((file-exists-p "/var/mail") "/var/mail/") ((file-exists-p "/var/spool/mail") "/var/spool/mail/") ((memq system-type '(hpux usg-unix-v)) "/usr/mail/") (t "/usr/spool/mail/"))) "\
Name of directory used by system mailer for delivering new mail.
Its name should end with a slash.")
;;;***
\f
-;;;### (autoloads nil "rmailout" "mail/rmailout.el" (22150 28228
-;;;;;; 246072 702000))
+;;;### (autoloads nil "rmailout" "mail/rmailout.el" (0 0 0 0))
;;; Generated autoloads from mail/rmailout.el
(put 'rmail-output-file-alist 'risky-local-variable t)
;;;***
\f
-;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (22150 28228
-;;;;;; 454072 702000))
+;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-cmpct.el
(autoload 'rng-c-load-schema "rng-cmpct" "\
;;;***
\f
-;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (22150 28228
-;;;;;; 458072 702000))
+;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-nxml.el
(autoload 'rng-nxml-mode-init "rng-nxml" "\
;;;***
\f
-;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (22150 28228
-;;;;;; 462072 702000))
+;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-valid.el
(autoload 'rng-validate-mode "rng-valid" "\
;;;***
\f
-;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (22150 28228 462072
-;;;;;; 702000))
+;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-xsd.el
-(put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile)
+(put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile #'rng-xsd-compile)
(autoload 'rng-xsd-compile "rng-xsd" "\
Provides W3C XML Schema as a RELAX NG datatypes library.
NAME is a symbol giving the local name of the datatype. PARAMS is a
list of pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol
giving the name of the parameter and PARAM-VALUE is a string giving
-its value. If NAME or PARAMS are invalid, it calls rng-dt-error
+its value. If NAME or PARAMS are invalid, it calls `rng-dt-error'
passing it arguments in the same style as format; the value from
-rng-dt-error will be returned. Otherwise, it returns a list. The
+`rng-dt-error' will be returned. Otherwise, it returns a list. The
first member of the list is t if any string is a legal value for the
datatype and nil otherwise. The second argument is a symbol; this
symbol will be called as a function passing it a string followed by
;;;***
\f
-;;;### (autoloads nil "robin" "international/robin.el" (22086 11929
-;;;;;; 882062 731000))
+;;;### (autoloads nil "robin" "international/robin.el" (0 0 0 0))
;;; Generated autoloads from international/robin.el
(autoload 'robin-define-package "robin" "\
;;;***
\f
-;;;### (autoloads nil "rot13" "rot13.el" (22150 28228 994072 702000))
+;;;### (autoloads nil "rot13" "rot13.el" (0 0 0 0))
;;; Generated autoloads from rot13.el
(autoload 'rot13 "rot13" "\
;;;***
\f
-;;;### (autoloads nil "rst" "textmodes/rst.el" (22150 28229 146072
-;;;;;; 702000))
+;;;### (autoloads nil "rst" "textmodes/rst.el" (0 0 0 0))
;;; Generated autoloads from textmodes/rst.el
(add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode)))
;;;***
\f
-;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (22253
-;;;;;; 13631 370961 36000))
+;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/ruby-mode.el
(push (purecopy '(ruby-mode 1 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (22150 28228 994072
-;;;;;; 702000))
+;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (0 0 0 0))
;;; Generated autoloads from ruler-mode.el
(push (purecopy '(ruler-mode 1 6)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (22150 28227 454072
-;;;;;; 702000))
+;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/rx.el
(autoload 'rx-to-string "rx" "\
;;;***
\f
-;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (22150 28228
-;;;;;; 394072 702000))
+;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (0 0 0 0))
;;; Generated autoloads from net/sasl-ntlm.el
(push (purecopy '(sasl 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "savehist" "savehist.el" (22150 28228 994072
-;;;;;; 702000))
+;;;### (autoloads nil "savehist" "savehist.el" (0 0 0 0))
;;; Generated autoloads from savehist.el
(push (purecopy '(savehist 24)) package--builtin-versions)
(defvar savehist-mode nil "\
Non-nil if Savehist mode is enabled.
-See the command `savehist-mode' for a description of this minor mode.
+See the `savehist-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `savehist-mode'.")
;;;***
\f
-;;;### (autoloads nil "saveplace" "saveplace.el" (22224 16978 400323
-;;;;;; 324000))
+;;;### (autoloads nil "saveplace" "saveplace.el" (0 0 0 0))
;;; Generated autoloads from saveplace.el
(defvar save-place-mode nil "\
Non-nil if Save-Place mode is enabled.
-See the command `save-place-mode' for a description of this minor mode.
+See the `save-place-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `save-place-mode'.")
;;;***
\f
-;;;### (autoloads nil "scheme" "progmodes/scheme.el" (22150 28228
-;;;;;; 910072 702000))
+;;;### (autoloads nil "scheme" "progmodes/scheme.el" (0 0 0 0))
;;; Generated autoloads from progmodes/scheme.el
(autoload 'scheme-mode "scheme" "\
;;;***
\f
-;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (22150 28228
-;;;;;; 18072 702000))
+;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (0 0 0 0))
;;; Generated autoloads from gnus/score-mode.el
(autoload 'gnus-score-mode "score-mode" "\
;;;***
\f
-;;;### (autoloads nil "scroll-all" "scroll-all.el" (22150 28228 994072
-;;;;;; 702000))
+;;;### (autoloads nil "scroll-all" "scroll-all.el" (0 0 0 0))
;;; Generated autoloads from scroll-all.el
(defvar scroll-all-mode nil "\
Non-nil if Scroll-All mode is enabled.
-See the command `scroll-all-mode' for a description of this minor mode.
+See the `scroll-all-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `scroll-all-mode'.")
;;;***
\f
-;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (22150 28228
-;;;;;; 994072 702000))
+;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (0 0 0 0))
;;; Generated autoloads from scroll-lock.el
(autoload 'scroll-lock-mode "scroll-lock" "\
;;;***
\f
-;;;### (autoloads nil "secrets" "net/secrets.el" (22150 28228 394072
-;;;;;; 702000))
+;;;### (autoloads nil "secrets" "net/secrets.el" (0 0 0 0))
;;; Generated autoloads from net/secrets.el
(when (featurep 'dbusbind)
(autoload 'secrets-show-secrets "secrets" nil t))
;;;***
\f
-;;;### (autoloads nil "semantic" "cedet/semantic.el" (22150 28227
-;;;;;; 222072 702000))
+;;;### (autoloads nil "semantic" "cedet/semantic.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic.el
(push (purecopy '(semantic 2 2)) package--builtin-versions)
(defvar semantic-mode nil "\
Non-nil if Semantic mode is enabled.
-See the command `semantic-mode' for a description of this minor mode.
+See the `semantic-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `semantic-mode'.")
;;;***
\f
;;;### (autoloads nil "semantic/bovine/grammar" "cedet/semantic/bovine/grammar.el"
-;;;;;; (22150 28227 234072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine/grammar.el
(autoload 'bovine-grammar-mode "semantic/bovine/grammar" "\
;;;***
\f
;;;### (autoloads nil "semantic/wisent/grammar" "cedet/semantic/wisent/grammar.el"
-;;;;;; (22150 28227 266072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/wisent/grammar.el
(autoload 'wisent-grammar-mode "semantic/wisent/grammar" "\
;;;***
\f
-;;;### (autoloads nil "sendmail" "mail/sendmail.el" (22224 36171
-;;;;;; 816467 383000))
+;;;### (autoloads nil "sendmail" "mail/sendmail.el" (0 0 0 0))
;;; Generated autoloads from mail/sendmail.el
(defvar mail-from-style 'default "\
;;;***
\f
-;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (22278 49573 67090
-;;;;;; 835000))
+;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/seq.el
-(push (purecopy '(seq 2 3)) package--builtin-versions)
+(push (purecopy '(seq 2 14)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "server" "server.el" (22150 28228 998072 702000))
+;;;### (autoloads nil "server" "server.el" (0 0 0 0))
;;; Generated autoloads from server.el
(put 'server-host 'risky-local-variable t)
(defvar server-mode nil "\
Non-nil if Server mode is enabled.
-See the command `server-mode' for a description of this minor mode.
+See the `server-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `server-mode'.")
;;;***
\f
-;;;### (autoloads nil "ses" "ses.el" (22189 64323 296321 19000))
+;;;### (autoloads nil "ses" "ses.el" (0 0 0 0))
;;; Generated autoloads from ses.el
(autoload 'ses-mode "ses" "\
;;;***
\f
-;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (22150
-;;;;;; 28229 150072 702000))
+;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from textmodes/sgml-mode.el
(autoload 'sgml-mode "sgml-mode" "\
;;;***
\f
-;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (22291
-;;;;;; 28851 657608 847000))
+;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/sh-script.el
(push (purecopy '(sh-script 2 0 6)) package--builtin-versions)
(put 'sh-shell 'safe-local-variable 'symbolp)
;;;***
\f
-;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (22150 28227
-;;;;;; 454072 702000))
+;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/shadow.el
(autoload 'list-load-path-shadows "shadow" "\
;;;***
\f
-;;;### (autoloads nil "shadowfile" "shadowfile.el" (22150 28229 14072
-;;;;;; 702000))
+;;;### (autoloads nil "shadowfile" "shadowfile.el" (0 0 0 0))
;;; Generated autoloads from shadowfile.el
(autoload 'shadow-define-cluster "shadowfile" "\
;;;***
\f
-;;;### (autoloads nil "shell" "shell.el" (22150 28229 14072 702000))
+;;;### (autoloads nil "shell" "shell.el" (0 0 0 0))
;;; Generated autoloads from shell.el
(defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\
;;;***
\f
-;;;### (autoloads nil "shr" "net/shr.el" (22255 55369 13338 944000))
+;;;### (autoloads nil "shr" "net/shr.el" (0 0 0 0))
;;; Generated autoloads from net/shr.el
(autoload 'shr-render-region "shr" "\
;;;***
\f
-;;;### (autoloads nil "sieve" "gnus/sieve.el" (22150 28228 18072
-;;;;;; 702000))
-;;; Generated autoloads from gnus/sieve.el
+;;;### (autoloads nil "sieve" "net/sieve.el" (0 0 0 0))
+;;; Generated autoloads from net/sieve.el
(autoload 'sieve-manage "sieve" "\
;;;***
\f
-;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (22150 28228
-;;;;;; 18072 702000))
-;;; Generated autoloads from gnus/sieve-mode.el
+;;;### (autoloads nil "sieve-mode" "net/sieve-mode.el" (0 0 0 0))
+;;; Generated autoloads from net/sieve-mode.el
(autoload 'sieve-mode "sieve-mode" "\
Major mode for editing Sieve code.
;;;***
\f
-;;;### (autoloads nil "simula" "progmodes/simula.el" (22197 58438
-;;;;;; 563460 447000))
+;;;### (autoloads nil "simula" "progmodes/simula.el" (0 0 0 0))
;;; Generated autoloads from progmodes/simula.el
(autoload 'simula-mode "simula" "\
;;;***
\f
-;;;### (autoloads nil "skeleton" "skeleton.el" (22197 58438 667460
-;;;;;; 447000))
+;;;### (autoloads nil "skeleton" "skeleton.el" (0 0 0 0))
;;; Generated autoloads from skeleton.el
(defvar skeleton-filter-function 'identity "\
;;;***
\f
-;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (22150 28229
-;;;;;; 286072 702000))
+;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (0 0 0 0))
;;; Generated autoloads from vc/smerge-mode.el
(autoload 'smerge-ediff "smerge-mode" "\
Invoke ediff to resolve the conflicts.
-NAME-MINE, NAME-OTHER, and NAME-BASE, if non-nil, are used for the
+NAME-UPPER, NAME-LOWER, and NAME-BASE, if non-nil, are used for the
buffer names.
-\(fn &optional NAME-MINE NAME-OTHER NAME-BASE)" t nil)
+\(fn &optional NAME-UPPER NAME-LOWER NAME-BASE)" t nil)
(autoload 'smerge-mode "smerge-mode" "\
Minor mode to simplify editing output from the diff3 program.
;;;***
\f
-;;;### (autoloads nil "smiley" "gnus/smiley.el" (22150 28228 18072
-;;;;;; 702000))
+;;;### (autoloads nil "smiley" "gnus/smiley.el" (0 0 0 0))
;;; Generated autoloads from gnus/smiley.el
(autoload 'smiley-region "smiley" "\
;;;***
\f
-;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (22150 28228
-;;;;;; 254072 702000))
+;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (0 0 0 0))
;;; Generated autoloads from mail/smtpmail.el
(autoload 'smtpmail-send-it "smtpmail" "\
;;;***
\f
-;;;### (autoloads nil "snake" "play/snake.el" (22150 28228 682072
-;;;;;; 702000))
+;;;### (autoloads nil "snake" "play/snake.el" (0 0 0 0))
;;; Generated autoloads from play/snake.el
(autoload 'snake "snake" "\
;;;***
\f
-;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (22150 28228
-;;;;;; 402072 702000))
+;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (0 0 0 0))
;;; Generated autoloads from net/snmp-mode.el
(autoload 'snmp-mode "snmp-mode" "\
;;;***
\f
-;;;### (autoloads nil "soap-client" "net/soap-client.el" (22249 52871
-;;;;;; 284284 99000))
+;;;### (autoloads nil "soap-client" "net/soap-client.el" (0 0 0 0))
;;; Generated autoloads from net/soap-client.el
-(push (purecopy '(soap-client 3 0 2)) package--builtin-versions)
+(push (purecopy '(soap-client 3 1 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "solar" "calendar/solar.el" (22284 55604 54845
-;;;;;; 171000))
+;;;### (autoloads nil "solar" "calendar/solar.el" (0 0 0 0))
;;; Generated autoloads from calendar/solar.el
(autoload 'sunrise-sunset "solar" "\
;;;***
\f
-;;;### (autoloads nil "solitaire" "play/solitaire.el" (22150 28228
-;;;;;; 682072 702000))
+;;;### (autoloads nil "solitaire" "play/solitaire.el" (0 0 0 0))
;;; Generated autoloads from play/solitaire.el
(autoload 'solitaire "solitaire" "\
;;;***
\f
-;;;### (autoloads nil "sort" "sort.el" (22150 28229 18072 702000))
+;;;### (autoloads nil "sort" "sort.el" (0 0 0 0))
;;; Generated autoloads from sort.el
(put 'sort-fold-case 'safe-local-variable 'booleanp)
;;;***
\f
-;;;### (autoloads nil "spam" "gnus/spam.el" (22150 28228 22072 702000))
+;;;### (autoloads nil "spam" "gnus/spam.el" (0 0 0 0))
;;; Generated autoloads from gnus/spam.el
(autoload 'spam-initialize "spam" "\
;;;***
\f
-;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (22150
-;;;;;; 28228 22072 702000))
+;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from gnus/spam-report.el
(autoload 'spam-report-process-queue "spam-report" "\
;;;***
\f
-;;;### (autoloads nil "speedbar" "speedbar.el" (22189 64323 312321
-;;;;;; 19000))
+;;;### (autoloads nil "speedbar" "speedbar.el" (0 0 0 0))
;;; Generated autoloads from speedbar.el
(defalias 'speedbar 'speedbar-frame-mode)
;;;***
\f
-;;;### (autoloads nil "spook" "play/spook.el" (22150 28228 682072
-;;;;;; 702000))
+;;;### (autoloads nil "spook" "play/spook.el" (0 0 0 0))
;;; Generated autoloads from play/spook.el
(autoload 'spook "spook" "\
;;;***
\f
-;;;### (autoloads nil "sql" "progmodes/sql.el" (22203 10834 812791
-;;;;;; 123000))
+;;;### (autoloads nil "sql" "progmodes/sql.el" (0 0 0 0))
;;; Generated autoloads from progmodes/sql.el
(push (purecopy '(sql 3 5)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "srecode" "cedet/srecode.el" (22150 28227 270072
-;;;;;; 702000))
+;;;### (autoloads nil "srecode" "cedet/srecode.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode.el
(push (purecopy '(srecode 1 2)) package--builtin-versions)
;;;***
\f
;;;### (autoloads nil "srecode/srt-mode" "cedet/srecode/srt-mode.el"
-;;;;;; (22150 28227 274072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/srecode/srt-mode.el
(autoload 'srecode-template-mode "srecode/srt-mode" "\
;;;***
\f
-;;;### (autoloads nil "starttls" "gnus/starttls.el" (22150 28228
-;;;;;; 22072 702000))
-;;; Generated autoloads from gnus/starttls.el
+;;;### (autoloads nil "starttls" "net/starttls.el" (0 0 0 0))
+;;; Generated autoloads from net/starttls.el
(autoload 'starttls-open-stream "starttls" "\
Open a TLS connection for a port to a host.
;;;***
\f
-;;;### (autoloads nil "strokes" "strokes.el" (22182 4679 511463 499000))
+;;;### (autoloads nil "strokes" "strokes.el" (0 0 0 0))
;;; Generated autoloads from strokes.el
(autoload 'strokes-global-set-stroke "strokes" "\
(defvar strokes-mode nil "\
Non-nil if Strokes mode is enabled.
-See the command `strokes-mode' for a description of this minor mode.
+See the `strokes-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `strokes-mode'.")
;;;***
\f
-;;;### (autoloads nil "studly" "play/studly.el" (22279 37684 392180
-;;;;;; 436000))
+;;;### (autoloads nil "studly" "play/studly.el" (0 0 0 0))
;;; Generated autoloads from play/studly.el
(autoload 'studlify-region "studly" "\
;;;***
\f
-;;;### (autoloads nil "subword" "progmodes/subword.el" (22150 28228
-;;;;;; 930072 702000))
+;;;### (autoloads nil "subword" "progmodes/subword.el" (0 0 0 0))
;;; Generated autoloads from progmodes/subword.el
(define-obsolete-function-alias 'capitalized-words-mode 'subword-mode "25.1")
(defvar global-subword-mode nil "\
Non-nil if Global Subword mode is enabled.
-See the command `global-subword-mode' for a description of this minor mode.
+See the `global-subword-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-subword-mode'.")
(defvar global-superword-mode nil "\
Non-nil if Global Superword mode is enabled.
-See the command `global-superword-mode' for a description of this minor mode.
+See the `global-superword-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-superword-mode'.")
;;;***
\f
-;;;### (autoloads nil "supercite" "mail/supercite.el" (22150 28228
-;;;;;; 254072 702000))
+;;;### (autoloads nil "supercite" "mail/supercite.el" (0 0 0 0))
;;; Generated autoloads from mail/supercite.el
(autoload 'sc-cite-original "supercite" "\
;;;***
\f
-;;;### (autoloads nil "t-mouse" "t-mouse.el" (22204 31687 849113
-;;;;;; 480000))
+;;;### (autoloads nil "t-mouse" "t-mouse.el" (0 0 0 0))
;;; Generated autoloads from t-mouse.el
(define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1")
(defvar gpm-mouse-mode t "\
Non-nil if Gpm-Mouse mode is enabled.
-See the command `gpm-mouse-mode' for a description of this minor mode.
+See the `gpm-mouse-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `gpm-mouse-mode'.")
;;;***
\f
-;;;### (autoloads nil "tabify" "tabify.el" (22150 28229 26072 702000))
+;;;### (autoloads nil "tabify" "tabify.el" (0 0 0 0))
;;; Generated autoloads from tabify.el
(autoload 'untabify "tabify" "\
;;;***
\f
-;;;### (autoloads nil "table" "textmodes/table.el" (22186 51800 574004
-;;;;;; 628000))
+;;;### (autoloads nil "table" "textmodes/table.el" (0 0 0 0))
;;; Generated autoloads from textmodes/table.el
(autoload 'table-insert "table" "\
;;;***
\f
-;;;### (autoloads nil "talk" "talk.el" (22150 28229 26072 702000))
+;;;### (autoloads nil "talk" "talk.el" (0 0 0 0))
;;; Generated autoloads from talk.el
(autoload 'talk-connect "talk" "\
;;;***
\f
-;;;### (autoloads nil "tar-mode" "tar-mode.el" (22150 28229 26072
-;;;;;; 702000))
+;;;### (autoloads nil "tar-mode" "tar-mode.el" (0 0 0 0))
;;; Generated autoloads from tar-mode.el
(autoload 'tar-mode "tar-mode" "\
;;;***
\f
-;;;### (autoloads nil "tcl" "progmodes/tcl.el" (22150 28228 934072
-;;;;;; 702000))
+;;;### (autoloads nil "tcl" "progmodes/tcl.el" (0 0 0 0))
;;; Generated autoloads from progmodes/tcl.el
(autoload 'tcl-mode "tcl" "\
;;;***
\f
-;;;### (autoloads nil "telnet" "net/telnet.el" (22150 28228 406072
-;;;;;; 702000))
+;;;### (autoloads nil "telnet" "net/telnet.el" (0 0 0 0))
;;; Generated autoloads from net/telnet.el
(autoload 'telnet "telnet" "\
;;;***
\f
-;;;### (autoloads nil "term" "term.el" (22305 18655 603719 883000))
+;;;### (autoloads nil "term" "term.el" (0 0 0 0))
;;; Generated autoloads from term.el
(autoload 'make-term "term" "\
;;;***
\f
-;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (22150
-;;;;;; 28227 458072 702000))
+;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from emacs-lisp/testcover.el
(autoload 'testcover-this-defun "testcover" "\
;;;***
\f
-;;;### (autoloads nil "tetris" "play/tetris.el" (22189 64323 280321
-;;;;;; 19000))
+;;;### (autoloads nil "tetris" "play/tetris.el" (0 0 0 0))
;;; Generated autoloads from play/tetris.el
(push (purecopy '(tetris 2 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (22197 58438
-;;;;;; 727460 447000))
+;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (0 0 0 0))
;;; Generated autoloads from textmodes/tex-mode.el
(defvar tex-shell-file-name nil "\
;;;***
\f
-;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (22197 58438
-;;;;;; 759460 447000))
+;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (0 0 0 0))
;;; Generated autoloads from textmodes/texinfmt.el
(autoload 'texinfo-format-buffer "texinfmt" "\
;;;***
\f
-;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (22197 58438
-;;;;;; 759460 447000))
+;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (0 0 0 0))
;;; Generated autoloads from textmodes/texinfo.el
(defvar texinfo-open-quote (purecopy "``") "\
;;;***
\f
-;;;### (autoloads nil "thai-util" "language/thai-util.el" (22150
-;;;;;; 28228 198072 702000))
+;;;### (autoloads nil "thai-util" "language/thai-util.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from language/thai-util.el
(autoload 'thai-compose-region "thai-util" "\
;;;***
\f
-;;;### (autoloads nil "thingatpt" "thingatpt.el" (22225 37858 570976
-;;;;;; 240000))
+;;;### (autoloads nil "thingatpt" "thingatpt.el" (0 0 0 0))
;;; Generated autoloads from thingatpt.el
(autoload 'forward-thing "thingatpt" "\
;;;***
\f
-;;;### (autoloads nil "thumbs" "thumbs.el" (22150 28229 198072 702000))
+;;;### (autoloads nil "thumbs" "thumbs.el" (0 0 0 0))
;;; Generated autoloads from thumbs.el
(autoload 'thumbs-find-thumb "thumbs" "\
;;;***
\f
-;;;### (autoloads nil "thunk" "emacs-lisp/thunk.el" (22150 28227
-;;;;;; 458072 702000))
+;;;### (autoloads nil "thunk" "emacs-lisp/thunk.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/thunk.el
(push (purecopy '(thunk 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (22150
-;;;;;; 28228 198072 702000))
+;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from language/tibet-util.el
(autoload 'tibetan-char-p "tibet-util" "\
;;;***
\f
-;;;### (autoloads nil "tildify" "textmodes/tildify.el" (22165 43181
-;;;;;; 139854 955000))
+;;;### (autoloads nil "tildify" "textmodes/tildify.el" (0 0 0 0))
;;; Generated autoloads from textmodes/tildify.el
(push (purecopy '(tildify 4 6 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "time" "time.el" (22150 28229 202072 702000))
+;;;### (autoloads nil "time" "time.el" (0 0 0 0))
;;; Generated autoloads from time.el
(defvar display-time-day-and-date nil "\
(defvar display-time-mode nil "\
Non-nil if Display-Time mode is enabled.
-See the command `display-time-mode' for a description of this minor mode.
+See the `display-time-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `display-time-mode'.")
;;;***
\f
-;;;### (autoloads nil "time-date" "calendar/time-date.el" (22150
-;;;;;; 28227 82072 702000))
+;;;### (autoloads nil "time-date" "calendar/time-date.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from calendar/time-date.el
(autoload 'date-to-time "time-date" "\
;;;***
\f
-;;;### (autoloads nil "time-stamp" "time-stamp.el" (22212 25823 511089
-;;;;;; 159000))
+;;;### (autoloads nil "time-stamp" "time-stamp.el" (0 0 0 0))
;;; Generated autoloads from time-stamp.el
(put 'time-stamp-format 'safe-local-variable 'stringp)
(put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p)
;;;***
\f
-;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (22150
-;;;;;; 28227 82072 702000))
+;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from calendar/timeclock.el
(push (purecopy '(timeclock 2 6 1)) package--builtin-versions)
(defvar timeclock-mode-line-display nil "\
Non-nil if Timeclock-Mode-Line-Display mode is enabled.
-See the command `timeclock-mode-line-display' for a description of this minor mode.
+See the `timeclock-mode-line-display' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `timeclock-mode-line-display'.")
\(fn &optional SHOW-SECONDS TODAY-ONLY)" t nil)
+;;;***
+\f
+;;;### (autoloads nil "timer-list" "emacs-lisp/timer-list.el" (0
+;;;;;; 0 0 0))
+;;; Generated autoloads from emacs-lisp/timer-list.el
+
+(autoload 'timer-list "timer-list" "\
+List all timers in a buffer.
+
+\(fn &optional IGNORE-AUTO NONCONFIRM)" t nil)
+ (put 'timer-list 'disabled "Beware: manually canceling timers can ruin your Emacs session.")
+
;;;***
\f
;;;### (autoloads nil "titdic-cnv" "international/titdic-cnv.el"
-;;;;;; (22150 28228 134072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from international/titdic-cnv.el
(autoload 'titdic-convert "titdic-cnv" "\
;;;***
\f
-;;;### (autoloads nil "tmm" "tmm.el" (22295 25908 202516 451000))
+;;;### (autoloads nil "tmm" "tmm.el" (0 0 0 0))
;;; Generated autoloads from tmm.el
(define-key global-map "\M-`" 'tmm-menubar)
(define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse)
;;;***
\f
-;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (22304
-;;;;;; 40885 29243 884000))
+;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from calendar/todo-mode.el
(autoload 'todo-show "todo-mode" "\
Visit a todo file and display one of its categories.
-When invoked in Todo mode, Todo Archive mode or Todo Filtered
-Items mode, or when invoked anywhere else with a prefix argument,
-prompt for which todo file to visit. When invoked outside of a
-Todo mode buffer without a prefix argument, visit
-`todo-default-todo-file'. Subsequent invocations from outside of
-Todo mode revisit this file or, with option
+When invoked in Todo mode, prompt for which todo file to visit.
+When invoked outside of Todo mode with non-nil prefix argument
+SOLICIT-FILE prompt for which todo file to visit; otherwise visit
+`todo-default-todo-file'. Subsequent invocations from outside
+of Todo mode revisit this file or, with option
`todo-show-current-file' non-nil (the default), whichever todo
file was last visited.
items. With non-nil user option `todo-show-with-done' both todo
and done items are always shown on visiting a category.
+Invoking this command in Todo Archive mode visits the
+corresponding todo file, displaying the corresponding category.
+
\(fn &optional SOLICIT-FILE INTERACTIVE)" t nil)
(autoload 'todo-mode "todo-mode" "\
;;;***
\f
-;;;### (autoloads nil "tool-bar" "tool-bar.el" (22150 28229 202072
-;;;;;; 702000))
+;;;### (autoloads nil "tool-bar" "tool-bar.el" (0 0 0 0))
;;; Generated autoloads from tool-bar.el
(autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\
;;;***
\f
-;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (22150 28227 458072
-;;;;;; 702000))
+;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/tq.el
(autoload 'tq-create "tq" "\
;;;***
\f
-;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (22150 28227
-;;;;;; 458072 702000))
+;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/trace.el
(defvar trace-buffer "*trace-output*" "\
;;;***
\f
-;;;### (autoloads nil "tramp" "net/tramp.el" (22272 64438 268671
-;;;;;; 103000))
+;;;### (autoloads nil "tramp" "net/tramp.el" (0 0 0 0))
;;; Generated autoloads from net/tramp.el
(defvar tramp-mode t "\
(custom-autoload 'tramp-mode "tramp" t)
-(defvar tramp-syntax (if (featurep 'xemacs) 'sep 'ftp) "\
+(defvar tramp-syntax 'ftp "\
Tramp filename syntax to be used.
It can have the following values:
- `ftp' -- Ange-FTP respective EFS like syntax (GNU Emacs default)
- `sep' -- Syntax as defined for XEmacs.")
+ `ftp' -- Ange-FTP like syntax
+ `sep' -- Syntax as defined for XEmacs originally.")
(custom-autoload 'tramp-syntax "tramp" t)
(defconst tramp-file-name-regexp-unified (if (memq system-type '(cygwin windows-nt)) "\\`/\\(\\[.*\\]\\|[^/|:]\\{2,\\}[^/|]*\\):" "\\`/[^/|:][^/|]*:") "\
Value for `tramp-file-name-regexp' for unified remoting.
-Emacs (not XEmacs) uses a unified filename syntax for Ange-FTP and
-Tramp. See `tramp-file-name-structure' for more explanations.
+See `tramp-file-name-structure' for more explanations.
On W32 systems, the volume letter must be ignored.")
(defconst tramp-file-name-regexp-separate "\\`/\\[.*\\]" "\
Value for `tramp-file-name-regexp' for separate remoting.
-XEmacs uses a separate filename syntax for Tramp and EFS.
See `tramp-file-name-structure' for more explanations.")
(defconst tramp-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-file-name-regexp-separate) (t (error "Wrong `tramp-syntax' defined"))) "\
(defconst tramp-completion-file-name-regexp-unified (if (memq system-type '(cygwin windows-nt)) "\\`/[^/]\\{2,\\}\\'" "\\`/[^/]*\\'") "\
Value for `tramp-completion-file-name-regexp' for unified remoting.
-GNU Emacs uses a unified filename syntax for Tramp and Ange-FTP.
See `tramp-file-name-structure' for more explanations.
On W32 systems, the volume letter must be ignored.")
(defconst tramp-completion-file-name-regexp-separate "\\`/\\([[][^]]*\\)?\\'" "\
Value for `tramp-completion-file-name-regexp' for separate remoting.
-XEmacs uses a separate filename syntax for Tramp and EFS.
See `tramp-file-name-structure' for more explanations.")
(defconst tramp-completion-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-completion-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-completion-file-name-regexp-separate) (t (error "Wrong `tramp-syntax' defined"))) "\
(defun tramp-completion-file-name-handler (operation &rest args) "\
Invoke Tramp file name completion handler.
-Falls back to normal file name handler if no Tramp file name handler exists." (let ((directory-sep-char 47) (fn (assoc operation tramp-completion-file-name-handler-alist))) (if (and fn tramp-mode (or (eq tramp-syntax (quote sep)) (featurep (quote tramp)) (and (boundp (quote partial-completion-mode)) (symbol-value (quote partial-completion-mode))) (featurep (quote ido)) (featurep (quote icicles)))) (save-match-data (apply (cdr fn) args)) (tramp-completion-run-real-handler operation args))))
+Falls back to normal file name handler if no Tramp file name handler exists." (let ((fn (assoc operation tramp-completion-file-name-handler-alist))) (if (and fn tramp-mode (or (eq tramp-syntax (quote sep)) (featurep (quote tramp)) (and (boundp (quote partial-completion-mode)) (symbol-value (quote partial-completion-mode))) (featurep (quote ido)) (featurep (quote icicles)))) (save-match-data (apply (cdr fn) args)) (tramp-completion-run-real-handler operation args))))
(defun tramp-autoload-file-name-handler (operation &rest args) "\
-Load Tramp file name handler, and perform OPERATION." (let ((default-directory "/")) (load "tramp" nil t)) (apply operation args))
+Load Tramp file name handler, and perform OPERATION." (let ((default-directory temporary-file-directory)) (load "tramp" nil t)) (apply operation args))
(defun tramp-register-autoload-file-name-handlers nil "\
Add Tramp file name handlers to `file-name-handler-alist' during autoload." (add-to-list (quote file-name-handler-alist) (cons tramp-file-name-regexp (quote tramp-autoload-file-name-handler))) (put (quote tramp-autoload-file-name-handler) (quote safe-magic) t) (add-to-list (quote file-name-handler-alist) (cons tramp-completion-file-name-regexp (quote tramp-completion-file-name-handler))) (put (quote tramp-completion-file-name-handler) (quote safe-magic) t))
;;;***
\f
-;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (22150 28228
-;;;;;; 410072 702000))
+;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-ftp.el
(autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\
;;;***
\f
-;;;### (autoloads nil "trampver" "net/trampver.el" (22150 28228 442072
-;;;;;; 702000))
+;;;### (autoloads nil "trampver" "net/trampver.el" (0 0 0 0))
;;; Generated autoloads from net/trampver.el
-(push (purecopy '(tramp 2 2 13 25 1)) package--builtin-versions)
+(push (purecopy '(tramp 2 3 0 -1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "tutorial" "tutorial.el" (22150 28229 206072
-;;;;;; 702000))
+;;;### (autoloads nil "tutorial" "tutorial.el" (0 0 0 0))
;;; Generated autoloads from tutorial.el
(autoload 'help-with-tutorial "tutorial" "\
;;;***
\f
-;;;### (autoloads nil "tv-util" "language/tv-util.el" (22086 11929
-;;;;;; 906062 731000))
+;;;### (autoloads nil "tv-util" "language/tv-util.el" (0 0 0 0))
;;; Generated autoloads from language/tv-util.el
(autoload 'tai-viet-composition-function "tv-util" "\
;;;***
\f
-;;;### (autoloads nil "two-column" "textmodes/two-column.el" (22150
-;;;;;; 28229 198072 702000))
+;;;### (autoloads nil "two-column" "textmodes/two-column.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from textmodes/two-column.el
(autoload '2C-command "two-column" () t 'keymap)
(global-set-key "\C-x6" '2C-command)
;;;***
\f
-;;;### (autoloads nil "type-break" "type-break.el" (22189 64323 316321
-;;;;;; 19000))
+;;;### (autoloads nil "type-break" "type-break.el" (0 0 0 0))
;;; Generated autoloads from type-break.el
(defvar type-break-mode nil "\
Non-nil if Type-Break mode is enabled.
-See the command `type-break-mode' for a description of this minor mode.
+See the `type-break-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `type-break-mode'.")
;;;***
\f
-;;;### (autoloads nil "uce" "mail/uce.el" (22150 28228 258072 702000))
+;;;### (autoloads nil "uce" "mail/uce.el" (0 0 0 0))
;;; Generated autoloads from mail/uce.el
(autoload 'uce-reply-to-uce "uce" "\
;;;***
\f
;;;### (autoloads nil "ucs-normalize" "international/ucs-normalize.el"
-;;;;;; (22150 28228 134072 702000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from international/ucs-normalize.el
(autoload 'ucs-normalize-NFD-region "ucs-normalize" "\
;;;***
\f
-;;;### (autoloads nil "underline" "textmodes/underline.el" (22150
-;;;;;; 28229 198072 702000))
+;;;### (autoloads nil "underline" "textmodes/underline.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from textmodes/underline.el
(autoload 'underline-region "underline" "\
;;;***
\f
-;;;### (autoloads nil "unrmail" "mail/unrmail.el" (22150 28228 258072
-;;;;;; 702000))
+;;;### (autoloads nil "unrmail" "mail/unrmail.el" (0 0 0 0))
;;; Generated autoloads from mail/unrmail.el
(autoload 'batch-unrmail "unrmail" "\
;;;***
\f
-;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (22150 28227
-;;;;;; 458072 702000))
+;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/unsafep.el
(autoload 'unsafep "unsafep" "\
;;;***
\f
-;;;### (autoloads nil "url" "url/url.el" (22150 28229 234072 702000))
+;;;### (autoloads nil "url" "url/url.el" (0 0 0 0))
;;; Generated autoloads from url/url.el
(autoload 'url-retrieve "url" "\
associated with it (the case for dired, info, or mailto URLs that need
no further processing). URL is either a string or a parsed URL.
-\(fn URL &optional SILENT INHIBIT-COOKIES)" nil nil)
+If SILENT is non-nil, don't do any messaging while retrieving.
+If INHIBIT-COOKIES is non-nil, refuse to store cookies. If
+TIMEOUT is passed, it should be a number that says (in seconds)
+how long to wait for a response before giving up.
+
+\(fn URL &optional SILENT INHIBIT-COOKIES TIMEOUT)" nil nil)
;;;***
\f
-;;;### (autoloads nil "url-auth" "url/url-auth.el" (22150 28229 210072
-;;;;;; 702000))
+;;;### (autoloads nil "url-auth" "url/url-auth.el" (0 0 0 0))
;;; Generated autoloads from url/url-auth.el
(autoload 'url-get-authentication "url-auth" "\
;;;***
\f
-;;;### (autoloads nil "url-cache" "url/url-cache.el" (22150 28229
-;;;;;; 210072 702000))
+;;;### (autoloads nil "url-cache" "url/url-cache.el" (0 0 0 0))
;;; Generated autoloads from url/url-cache.el
(autoload 'url-store-in-cache "url-cache" "\
;;;***
\f
-;;;### (autoloads nil "url-cid" "url/url-cid.el" (22150 28229 210072
-;;;;;; 702000))
+;;;### (autoloads nil "url-cid" "url/url-cid.el" (0 0 0 0))
;;; Generated autoloads from url/url-cid.el
(autoload 'url-cid "url-cid" "\
;;;***
\f
-;;;### (autoloads nil "url-dav" "url/url-dav.el" (22150 28229 214072
-;;;;;; 702000))
+;;;### (autoloads nil "url-dav" "url/url-dav.el" (0 0 0 0))
;;; Generated autoloads from url/url-dav.el
(autoload 'url-dav-supported-p "url-dav" "\
;;;***
\f
-;;;### (autoloads nil "url-file" "url/url-file.el" (22150 28229 214072
-;;;;;; 702000))
+;;;### (autoloads nil "url-file" "url/url-file.el" (0 0 0 0))
;;; Generated autoloads from url/url-file.el
(autoload 'url-file "url-file" "\
;;;***
\f
-;;;### (autoloads nil "url-gw" "url/url-gw.el" (22150 28229 218072
-;;;;;; 702000))
+;;;### (autoloads nil "url-gw" "url/url-gw.el" (0 0 0 0))
;;; Generated autoloads from url/url-gw.el
(autoload 'url-gateway-nslookup-host "url-gw" "\
;;;***
\f
-;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (22150
-;;;;;; 28229 218072 702000))
+;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from url/url-handlers.el
(defvar url-handler-mode nil "\
Non-nil if Url-Handler mode is enabled.
-See the command `url-handler-mode' for a description of this minor mode.
+See the `url-handler-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `url-handler-mode'.")
;;;***
\f
-;;;### (autoloads nil "url-http" "url/url-http.el" (22229 34898 908051
-;;;;;; 395000))
+;;;### (autoloads nil "url-http" "url/url-http.el" (0 0 0 0))
;;; Generated autoloads from url/url-http.el
(autoload 'url-default-expander "url-expand")
;;;***
\f
-;;;### (autoloads nil "url-irc" "url/url-irc.el" (22150 28229 222072
-;;;;;; 702000))
+;;;### (autoloads nil "url-irc" "url/url-irc.el" (0 0 0 0))
;;; Generated autoloads from url/url-irc.el
(autoload 'url-irc "url-irc" "\
;;;***
\f
-;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (22150 28229 222072
-;;;;;; 702000))
+;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (0 0 0 0))
;;; Generated autoloads from url/url-ldap.el
(autoload 'url-ldap "url-ldap" "\
;;;***
\f
-;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (22150 28229
-;;;;;; 222072 702000))
+;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (0 0 0 0))
;;; Generated autoloads from url/url-mailto.el
(autoload 'url-mail "url-mailto" "\
;;;***
\f
-;;;### (autoloads nil "url-misc" "url/url-misc.el" (22150 28229 222072
-;;;;;; 702000))
+;;;### (autoloads nil "url-misc" "url/url-misc.el" (0 0 0 0))
;;; Generated autoloads from url/url-misc.el
(autoload 'url-man "url-misc" "\
;;;***
\f
-;;;### (autoloads nil "url-news" "url/url-news.el" (22150 28229 222072
-;;;;;; 702000))
+;;;### (autoloads nil "url-news" "url/url-news.el" (0 0 0 0))
;;; Generated autoloads from url/url-news.el
(autoload 'url-news "url-news" "\
;;;***
\f
-;;;### (autoloads nil "url-ns" "url/url-ns.el" (22150 28229 222072
-;;;;;; 702000))
+;;;### (autoloads nil "url-ns" "url/url-ns.el" (0 0 0 0))
;;; Generated autoloads from url/url-ns.el
(autoload 'isPlainHostName "url-ns" "\
;;;***
\f
-;;;### (autoloads nil "url-parse" "url/url-parse.el" (22150 28229
-;;;;;; 222072 702000))
+;;;### (autoloads nil "url-parse" "url/url-parse.el" (0 0 0 0))
;;; Generated autoloads from url/url-parse.el
(autoload 'url-recreate-url "url-parse" "\
;;;***
\f
-;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (22150 28229
-;;;;;; 222072 702000))
+;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (0 0 0 0))
;;; Generated autoloads from url/url-privacy.el
(autoload 'url-setup-privacy-info "url-privacy" "\
;;;***
\f
-;;;### (autoloads nil "url-queue" "url/url-queue.el" (22150 28229
-;;;;;; 226072 702000))
+;;;### (autoloads nil "url-queue" "url/url-queue.el" (0 0 0 0))
;;; Generated autoloads from url/url-queue.el
(autoload 'url-queue-retrieve "url-queue" "\
;;;***
\f
-;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (22165 43181
-;;;;;; 143854 955000))
+;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (0 0 0 0))
;;; Generated autoloads from url/url-tramp.el
(defvar url-tramp-protocols '("ftp" "ssh" "scp" "rsync" "telnet") "\
;;;***
\f
-;;;### (autoloads nil "url-util" "url/url-util.el" (22150 28229 234072
-;;;;;; 702000))
+;;;### (autoloads nil "url-util" "url/url-util.el" (0 0 0 0))
;;; Generated autoloads from url/url-util.el
(defvar url-debug nil "\
;;;***
\f
-;;;### (autoloads nil "userlock" "userlock.el" (22150 28229 234072
-;;;;;; 702000))
+;;;### (autoloads nil "userlock" "userlock.el" (0 0 0 0))
;;; Generated autoloads from userlock.el
(autoload 'ask-user-about-lock "userlock" "\
;;;***
\f
-;;;### (autoloads nil "utf-7" "international/utf-7.el" (22150 28228
-;;;;;; 134072 702000))
+;;;### (autoloads nil "utf-7" "international/utf-7.el" (0 0 0 0))
;;; Generated autoloads from international/utf-7.el
(autoload 'utf-7-post-read-conversion "utf-7" "\
;;;***
\f
-;;;### (autoloads nil "utf7" "gnus/utf7.el" (22150 28228 26072 702000))
-;;; Generated autoloads from gnus/utf7.el
+;;;### (autoloads nil "utf7" "international/utf7.el" (0 0 0 0))
+;;; Generated autoloads from international/utf7.el
(autoload 'utf7-encode "utf7" "\
Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil.
;;;***
\f
-;;;### (autoloads nil "uudecode" "mail/uudecode.el" (22150 28228
-;;;;;; 258072 702000))
+;;;### (autoloads nil "uudecode" "mail/uudecode.el" (0 0 0 0))
;;; Generated autoloads from mail/uudecode.el
(autoload 'uudecode-decode-region-external "uudecode" "\
;;;***
\f
-;;;### (autoloads nil "vc" "vc/vc.el" (22150 28229 306072 702000))
+;;;### (autoloads nil "vc" "vc/vc.el" (0 0 0 0))
;;; Generated autoloads from vc/vc.el
(defvar vc-checkout-hook nil "\
;;;***
\f
-;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (22271 43574
-;;;;;; 247751 139000))
+;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-annotate.el
(autoload 'vc-annotate "vc-annotate" "\
;;;***
\f
-;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (22150 28229 290072
-;;;;;; 702000))
+;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-bzr.el
(defconst vc-bzr-admin-dirname ".bzr" "\
;;;***
\f
-;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (22150 28229 290072
-;;;;;; 702000))
+;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-cvs.el
(defun vc-cvs-registered (f)
"Return non-nil if file F is registered with CVS."
;;;***
\f
-;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (22150 28229 294072
-;;;;;; 702000))
+;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-dir.el
(autoload 'vc-dir "vc-dir" "\
;;;***
\f
-;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (22150
-;;;;;; 28229 294072 702000))
+;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from vc/vc-dispatcher.el
(autoload 'vc-do-command "vc-dispatcher" "\
;;;***
\f
-;;;### (autoloads nil "vc-git" "vc/vc-git.el" (22305 18655 607719
-;;;;;; 883000))
+;;;### (autoloads nil "vc-git" "vc/vc-git.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-git.el
(defun vc-git-registered (file)
"Return non-nil if FILE is registered with git."
;;;***
\f
-;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (22188 43494 205543 203000))
+;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-hg.el
(defun vc-hg-registered (file)
"Return non-nil if FILE is registered with hg."
;;;***
\f
-;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (22188 43494 205543
-;;;;;; 203000))
+;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-mtn.el
(defconst vc-mtn-admin-dir "_MTN" "\
;;;***
\f
-;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (22150 28229 302072
-;;;;;; 702000))
+;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-rcs.el
(defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\
;;;***
\f
-;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (22150 28229 302072
-;;;;;; 702000))
+;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-sccs.el
(defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\
;;;***
\f
-;;;### (autoloads nil "vc-src" "vc/vc-src.el" (22150 28229 302072
-;;;;;; 702000))
+;;;### (autoloads nil "vc-src" "vc/vc-src.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-src.el
(defvar vc-src-master-templates (purecopy '("%s.src/%s,v")) "\
;;;***
\f
-;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (22150 28229 302072
-;;;;;; 702000))
+;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-svn.el
(defun vc-svn-registered (f)
(let ((admin-dir (cond ((and (eq system-type 'windows-nt)
;;;***
\f
-;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (22197
-;;;;;; 58438 563460 447000))
+;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/vera-mode.el
(push (purecopy '(vera-mode 2 28)) package--builtin-versions)
(add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'") 'vera-mode))
;;;***
\f
;;;### (autoloads nil "verilog-mode" "progmodes/verilog-mode.el"
-;;;;;; (22197 58438 615460 447000))
+;;;;;; (0 0 0 0))
;;; Generated autoloads from progmodes/verilog-mode.el
(autoload 'verilog-mode "verilog-mode" "\
;;;***
\f
-;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (22292
-;;;;;; 49734 746738 351000))
+;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from progmodes/vhdl-mode.el
(autoload 'vhdl-mode "vhdl-mode" "\
;;;***
\f
-;;;### (autoloads nil "viet-util" "language/viet-util.el" (22150
-;;;;;; 28228 198072 702000))
+;;;### (autoloads nil "viet-util" "language/viet-util.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from language/viet-util.el
(autoload 'viet-encode-viscii-char "viet-util" "\
;;;***
\f
-;;;### (autoloads nil "view" "view.el" (22150 28229 322072 702000))
+;;;### (autoloads nil "view" "view.el" (0 0 0 0))
;;; Generated autoloads from view.el
(defvar view-remove-frame-by-deleting t "\
;;;***
\f
-;;;### (autoloads nil "viper" "emulation/viper.el" (22150 28227 478072
-;;;;;; 702000))
+;;;### (autoloads nil "viper" "emulation/viper.el" (0 0 0 0))
;;; Generated autoloads from emulation/viper.el
(push (purecopy '(viper 3 14 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (22150
-;;;;;; 28227 458072 702000))
+;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (0 0 0
+;;;;;; 0))
;;; Generated autoloads from emacs-lisp/warnings.el
(defvar warning-prefix-function nil "\
;;;***
\f
-;;;### (autoloads nil "wdired" "wdired.el" (22240 5212 92626 379000))
+;;;### (autoloads nil "wdired" "wdired.el" (0 0 0 0))
;;; Generated autoloads from wdired.el
(push (purecopy '(wdired 2 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "webjump" "net/webjump.el" (22150 28228 442072
-;;;;;; 702000))
+;;;### (autoloads nil "webjump" "net/webjump.el" (0 0 0 0))
;;; Generated autoloads from net/webjump.el
(autoload 'webjump "webjump" "\
;;;***
\f
-;;;### (autoloads nil "which-func" "progmodes/which-func.el" (22150
-;;;;;; 28228 986072 702000))
+;;;### (autoloads nil "which-func" "progmodes/which-func.el" (0 0
+;;;;;; 0 0))
;;; Generated autoloads from progmodes/which-func.el
(put 'which-func-format 'risky-local-variable t)
(put 'which-func-current 'risky-local-variable t)
(defvar which-function-mode nil "\
Non-nil if Which-Function mode is enabled.
-See the command `which-function-mode' for a description of this minor mode.
+See the `which-function-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `which-function-mode'.")
;;;***
\f
-;;;### (autoloads nil "whitespace" "whitespace.el" (22150 28229 326072
-;;;;;; 702000))
+;;;### (autoloads nil "whitespace" "whitespace.el" (0 0 0 0))
;;; Generated autoloads from whitespace.el
(push (purecopy '(whitespace 13 2 2)) package--builtin-versions)
(defvar global-whitespace-mode nil "\
Non-nil if Global Whitespace mode is enabled.
-See the command `global-whitespace-mode' for a description of this minor mode.
+See the `global-whitespace-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-whitespace-mode'.")
(defvar global-whitespace-newline-mode nil "\
Non-nil if Global Whitespace-Newline mode is enabled.
-See the command `global-whitespace-newline-mode' for a description of this minor mode.
+See the `global-whitespace-newline-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-whitespace-newline-mode'.")
;;;***
\f
-;;;### (autoloads nil "wid-browse" "wid-browse.el" (22150 28229 326072
-;;;;;; 702000))
+;;;### (autoloads nil "wid-browse" "wid-browse.el" (0 0 0 0))
;;; Generated autoloads from wid-browse.el
(autoload 'widget-browse-at "wid-browse" "\
;;;***
\f
-;;;### (autoloads nil "wid-edit" "wid-edit.el" (22150 28229 330072
-;;;;;; 702000))
+;;;### (autoloads nil "wid-edit" "wid-edit.el" (0 0 0 0))
;;; Generated autoloads from wid-edit.el
(autoload 'widgetp "wid-edit" "\
;;;***
\f
-;;;### (autoloads nil "windmove" "windmove.el" (22150 28229 330072
-;;;;;; 702000))
+;;;### (autoloads nil "windmove" "windmove.el" (0 0 0 0))
;;; Generated autoloads from windmove.el
(autoload 'windmove-left "windmove" "\
;;;***
\f
-;;;### (autoloads nil "winner" "winner.el" (22150 28229 354072 702000))
+;;;### (autoloads nil "winner" "winner.el" (0 0 0 0))
;;; Generated autoloads from winner.el
(defvar winner-mode nil "\
Non-nil if Winner mode is enabled.
-See the command `winner-mode' for a description of this minor mode.
+See the `winner-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `winner-mode'.")
Toggle Winner mode on or off.
With a prefix argument ARG, enable Winner mode if ARG is
positive, and disable it otherwise. If called from Lisp, enable
-the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'.
-\\{winner-mode-map}
+the mode if ARG is omitted or nil, and toggle it if ARG is ‘toggle’.
+
+Winner mode is a global minor mode that records the changes in
+the window configuration (i.e. how the frames are partitioned
+into windows) so that the changes can be \"undone\" using the
+command `winner-undo'. By default this one is bound to the key
+sequence `C-c <left>'. If you change your mind (while undoing),
+you can press `C-c <right>' (calling `winner-redo').
\(fn &optional ARG)" t nil)
;;;***
\f
-;;;### (autoloads nil "woman" "woman.el" (22216 22853 52596 491000))
+;;;### (autoloads nil "woman" "woman.el" (0 0 0 0))
;;; Generated autoloads from woman.el
(push (purecopy '(woman 0 551)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "xml" "xml.el" (22249 52924 872284 99000))
+;;;### (autoloads nil "xml" "xml.el" (0 0 0 0))
;;; Generated autoloads from xml.el
(autoload 'xml-parse-file "xml" "\
;;;***
\f
-;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (22150 28228 462072
-;;;;;; 702000))
+;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (0 0 0 0))
;;; Generated autoloads from nxml/xmltok.el
(autoload 'xmltok-get-declared-encoding-position "xmltok" "\
;;;***
\f
-;;;### (autoloads nil "xref" "progmodes/xref.el" (22286 10932 162198
-;;;;;; 251000))
+;;;### (autoloads nil "xref" "progmodes/xref.el" (0 0 0 0))
;;; Generated autoloads from progmodes/xref.el
(autoload 'xref-find-backend "xref" "\
;;;***
\f
-;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (22290 7990 504790
-;;;;;; 288000))
+;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (0 0 0 0))
;;; Generated autoloads from xt-mouse.el
(defvar xterm-mouse-mode nil "\
Non-nil if Xterm-Mouse mode is enabled.
-See the command `xterm-mouse-mode' for a description of this minor mode.
+See the `xterm-mouse-mode' command
+for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `xterm-mouse-mode'.")
;;;***
\f
-;;;### (autoloads nil "xwidget" "xwidget.el" (22272 64438 424671
-;;;;;; 103000))
+;;;### (autoloads nil "xwidget" "xwidget.el" (0 0 0 0))
;;; Generated autoloads from xwidget.el
(autoload 'xwidget-webkit-browse-url "xwidget" "\
;;;***
\f
-;;;### (autoloads nil "yenc" "gnus/yenc.el" (22150 28228 26072 702000))
-;;; Generated autoloads from gnus/yenc.el
+;;;### (autoloads nil "yenc" "mail/yenc.el" (0 0 0 0))
+;;; Generated autoloads from mail/yenc.el
(autoload 'yenc-decode-region "yenc" "\
Yenc decode region between START and END using an internal decoder.
;;;***
\f
-;;;### (autoloads nil "zone" "play/zone.el" (22150 28228 682072 702000))
+;;;### (autoloads nil "zone" "play/zone.el" (0 0 0 0))
;;; Generated autoloads from play/zone.el
(autoload 'zone "zone" "\
;;;;;; "eshell/esh-io.el" "eshell/esh-module.el" "eshell/esh-opt.el"
;;;;;; "eshell/esh-proc.el" "eshell/esh-util.el" "eshell/esh-var.el"
;;;;;; "ezimage.el" "format-spec.el" "fringe.el" "generic-x.el"
-;;;;;; "gnus/compface.el" "gnus/gnus-async.el" "gnus/gnus-bcklg.el"
-;;;;;; "gnus/gnus-cite.el" "gnus/gnus-cloud.el" "gnus/gnus-cus.el"
-;;;;;; "gnus/gnus-demon.el" "gnus/gnus-dup.el" "gnus/gnus-eform.el"
-;;;;;; "gnus/gnus-ems.el" "gnus/gnus-icalendar.el" "gnus/gnus-int.el"
-;;;;;; "gnus/gnus-logic.el" "gnus/gnus-mh.el" "gnus/gnus-salt.el"
-;;;;;; "gnus/gnus-score.el" "gnus/gnus-srvr.el" "gnus/gnus-topic.el"
-;;;;;; "gnus/gnus-undo.el" "gnus/gnus-util.el" "gnus/gnus-uu.el"
-;;;;;; "gnus/gnus-vm.el" "gnus/gssapi.el" "gnus/ietf-drums.el" "gnus/legacy-gnus-agent.el"
-;;;;;; "gnus/mail-parse.el" "gnus/mail-prsvr.el" "gnus/mail-source.el"
-;;;;;; "gnus/mailcap.el" "gnus/messcompat.el" "gnus/mm-archive.el"
-;;;;;; "gnus/mm-bodies.el" "gnus/mm-decode.el" "gnus/mm-util.el"
-;;;;;; "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" "gnus/nnagent.el"
-;;;;;; "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el" "gnus/nneething.el"
-;;;;;; "gnus/nngateway.el" "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnir.el"
-;;;;;; "gnus/nnmail.el" "gnus/nnmaildir.el" "gnus/nnmairix.el" "gnus/nnmbox.el"
-;;;;;; "gnus/nnmh.el" "gnus/nnnil.el" "gnus/nnoo.el" "gnus/nnregistry.el"
-;;;;;; "gnus/nnrss.el" "gnus/nnspool.el" "gnus/nntp.el" "gnus/nnvirtual.el"
-;;;;;; "gnus/nnweb.el" "gnus/registry.el" "gnus/rfc1843.el" "gnus/rfc2045.el"
-;;;;;; "gnus/rfc2047.el" "gnus/rfc2231.el" "gnus/rtree.el" "gnus/sieve-manage.el"
-;;;;;; "gnus/smime.el" "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el"
-;;;;;; "hfy-cmap.el" "ibuf-ext.el" "international/charscript.el"
+;;;;;; "gnus/gnus-async.el" "gnus/gnus-bcklg.el" "gnus/gnus-cite.el"
+;;;;;; "gnus/gnus-cloud.el" "gnus/gnus-cus.el" "gnus/gnus-demon.el"
+;;;;;; "gnus/gnus-dup.el" "gnus/gnus-eform.el" "gnus/gnus-icalendar.el"
+;;;;;; "gnus/gnus-int.el" "gnus/gnus-logic.el" "gnus/gnus-mh.el"
+;;;;;; "gnus/gnus-rfc1843.el" "gnus/gnus-salt.el" "gnus/gnus-score.el"
+;;;;;; "gnus/gnus-srvr.el" "gnus/gnus-topic.el" "gnus/gnus-undo.el"
+;;;;;; "gnus/gnus-util.el" "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/gssapi.el"
+;;;;;; "gnus/legacy-gnus-agent.el" "gnus/mail-source.el" "gnus/messcompat.el"
+;;;;;; "gnus/mm-archive.el" "gnus/mm-bodies.el" "gnus/mm-decode.el"
+;;;;;; "gnus/mm-util.el" "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el"
+;;;;;; "gnus/nnagent.el" "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el"
+;;;;;; "gnus/nneething.el" "gnus/nngateway.el" "gnus/nnheader.el"
+;;;;;; "gnus/nnimap.el" "gnus/nnir.el" "gnus/nnmail.el" "gnus/nnmaildir.el"
+;;;;;; "gnus/nnmairix.el" "gnus/nnmbox.el" "gnus/nnmh.el" "gnus/nnnil.el"
+;;;;;; "gnus/nnoo.el" "gnus/nnregistry.el" "gnus/nnrss.el" "gnus/nnspool.el"
+;;;;;; "gnus/nntp.el" "gnus/nnvirtual.el" "gnus/nnweb.el" "gnus/smime.el"
+;;;;;; "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el" "hfy-cmap.el"
+;;;;;; "htmlfontify-loaddefs.el" "ibuf-ext.el" "image/compface.el"
+;;;;;; "international/charprop.el" "international/charscript.el"
;;;;;; "international/fontset.el" "international/iso-ascii.el" "international/ja-dic-cnv.el"
-;;;;;; "international/ja-dic-utl.el" "international/ogonek.el" "kermit.el"
-;;;;;; "language/hanja-util.el" "language/thai-word.el" "ldefs-boot.el"
-;;;;;; "leim/quail/arabic.el" "leim/quail/croatian.el" "leim/quail/cyril-jis.el"
-;;;;;; "leim/quail/cyrillic.el" "leim/quail/czech.el" "leim/quail/ethiopic.el"
-;;;;;; "leim/quail/georgian.el" "leim/quail/greek.el" "leim/quail/hanja-jis.el"
-;;;;;; "leim/quail/hanja.el" "leim/quail/hanja3.el" "leim/quail/hebrew.el"
-;;;;;; "leim/quail/indian.el" "leim/quail/ipa-praat.el" "leim/quail/ipa.el"
-;;;;;; "leim/quail/japanese.el" "leim/quail/lao.el" "leim/quail/latin-alt.el"
-;;;;;; "leim/quail/latin-ltx.el" "leim/quail/latin-post.el" "leim/quail/latin-pre.el"
-;;;;;; "leim/quail/lrt.el" "leim/quail/persian.el" "leim/quail/programmer-dvorak.el"
+;;;;;; "international/ja-dic-utl.el" "international/ogonek.el" "international/rfc1843.el"
+;;;;;; "international/uni-bidi.el" "international/uni-brackets.el"
+;;;;;; "international/uni-category.el" "international/uni-combining.el"
+;;;;;; "international/uni-comment.el" "international/uni-decimal.el"
+;;;;;; "international/uni-decomposition.el" "international/uni-digit.el"
+;;;;;; "international/uni-lowercase.el" "international/uni-mirrored.el"
+;;;;;; "international/uni-name.el" "international/uni-numeric.el"
+;;;;;; "international/uni-old-name.el" "international/uni-titlecase.el"
+;;;;;; "international/uni-uppercase.el" "kermit.el" "language/hanja-util.el"
+;;;;;; "language/thai-word.el" "ldefs-boot.el" "leim/quail/arabic.el"
+;;;;;; "leim/quail/croatian.el" "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el"
+;;;;;; "leim/quail/czech.el" "leim/quail/ethiopic.el" "leim/quail/georgian.el"
+;;;;;; "leim/quail/greek.el" "leim/quail/hanja-jis.el" "leim/quail/hanja.el"
+;;;;;; "leim/quail/hanja3.el" "leim/quail/hebrew.el" "leim/quail/indian.el"
+;;;;;; "leim/quail/ipa-praat.el" "leim/quail/ipa.el" "leim/quail/japanese.el"
+;;;;;; "leim/quail/lao.el" "leim/quail/latin-alt.el" "leim/quail/latin-ltx.el"
+;;;;;; "leim/quail/latin-post.el" "leim/quail/latin-pre.el" "leim/quail/lrt.el"
+;;;;;; "leim/quail/persian.el" "leim/quail/programmer-dvorak.el"
;;;;;; "leim/quail/py-punct.el" "leim/quail/pypunct-b5.el" "leim/quail/rfc1345.el"
;;;;;; "leim/quail/sgml-input.el" "leim/quail/sisheng.el" "leim/quail/slovak.el"
;;;;;; "leim/quail/symbol-ksc.el" "leim/quail/tamil-dvorak.el" "leim/quail/thai.el"
;;;;;; "leim/quail/tibetan.el" "leim/quail/viqr.el" "leim/quail/vntelex.el"
;;;;;; "leim/quail/vnvni.el" "leim/quail/welsh.el" "loadup.el" "mail/blessmail.el"
-;;;;;; "mail/mailheader.el" "mail/mspools.el" "mail/rfc2368.el"
-;;;;;; "mail/rfc822.el" "mail/rmail-spam-filter.el" "mail/rmailedit.el"
-;;;;;; "mail/rmailkwd.el" "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el"
+;;;;;; "mail/ietf-drums.el" "mail/mail-parse.el" "mail/mail-prsvr.el"
+;;;;;; "mail/mailheader.el" "mail/mspools.el" "mail/rfc2045.el"
+;;;;;; "mail/rfc2047.el" "mail/rfc2231.el" "mail/rfc2368.el" "mail/rfc822.el"
+;;;;;; "mail/rmail-spam-filter.el" "mail/rmailedit.el" "mail/rmailkwd.el"
+;;;;;; "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el"
;;;;;; "mail/rmailsum.el" "mail/undigest.el" "mh-e/mh-acros.el"
;;;;;; "mh-e/mh-alias.el" "mh-e/mh-buffers.el" "mh-e/mh-compat.el"
;;;;;; "mh-e/mh-funcs.el" "mh-e/mh-gnus.el" "mh-e/mh-identity.el"
;;;;;; "mh-e/mh-utils.el" "mh-e/mh-xface.el" "mouse-copy.el" "mwheel.el"
;;;;;; "net/dns.el" "net/eudc-vars.el" "net/eudcb-bbdb.el" "net/eudcb-ldap.el"
;;;;;; "net/eudcb-mab.el" "net/hmac-def.el" "net/hmac-md5.el" "net/imap.el"
-;;;;;; "net/ldap.el" "net/mairix.el" "net/newsticker.el" "net/nsm.el"
-;;;;;; "net/rfc2104.el" "net/sasl-cram.el" "net/sasl-digest.el"
-;;;;;; "net/sasl-scram-rfc.el" "net/sasl.el" "net/shr-color.el"
-;;;;;; "net/soap-inspect.el" "net/socks.el" "net/tls.el" "net/tramp-adb.el"
-;;;;;; "net/tramp-cache.el" "net/tramp-cmds.el" "net/tramp-compat.el"
-;;;;;; "net/tramp-gvfs.el" "net/tramp-gw.el" "net/tramp-loaddefs.el"
-;;;;;; "net/tramp-sh.el" "net/tramp-smb.el" "net/tramp-uu.el" "net/zeroconf.el"
-;;;;;; "notifications.el" "nxml/nxml-enc.el" "nxml/nxml-maint.el"
-;;;;;; "nxml/nxml-ns.el" "nxml/nxml-outln.el" "nxml/nxml-parse.el"
-;;;;;; "nxml/nxml-rap.el" "nxml/nxml-util.el" "nxml/rng-dt.el" "nxml/rng-loc.el"
-;;;;;; "nxml/rng-maint.el" "nxml/rng-match.el" "nxml/rng-parse.el"
-;;;;;; "nxml/rng-pttrn.el" "nxml/rng-uri.el" "nxml/rng-util.el"
-;;;;;; "nxml/xsd-regexp.el" "obarray.el" "org/ob-C.el" "org/ob-R.el"
-;;;;;; "org/ob-asymptote.el" "org/ob-awk.el" "org/ob-calc.el" "org/ob-clojure.el"
-;;;;;; "org/ob-comint.el" "org/ob-core.el" "org/ob-css.el" "org/ob-ditaa.el"
-;;;;;; "org/ob-dot.el" "org/ob-emacs-lisp.el" "org/ob-eval.el" "org/ob-exp.el"
-;;;;;; "org/ob-fortran.el" "org/ob-gnuplot.el" "org/ob-haskell.el"
-;;;;;; "org/ob-io.el" "org/ob-java.el" "org/ob-js.el" "org/ob-keys.el"
-;;;;;; "org/ob-latex.el" "org/ob-ledger.el" "org/ob-lilypond.el"
+;;;;;; "net/ldap.el" "net/mailcap.el" "net/mairix.el" "net/newsticker.el"
+;;;;;; "net/nsm.el" "net/puny.el" "net/rfc2104.el" "net/sasl-cram.el"
+;;;;;; "net/sasl-digest.el" "net/sasl-scram-rfc.el" "net/sasl.el"
+;;;;;; "net/shr-color.el" "net/sieve-manage.el" "net/soap-inspect.el"
+;;;;;; "net/socks.el" "net/tls.el" "net/tramp-adb.el" "net/tramp-cache.el"
+;;;;;; "net/tramp-cmds.el" "net/tramp-compat.el" "net/tramp-gvfs.el"
+;;;;;; "net/tramp-gw.el" "net/tramp-loaddefs.el" "net/tramp-sh.el"
+;;;;;; "net/tramp-smb.el" "net/tramp-uu.el" "net/zeroconf.el" "notifications.el"
+;;;;;; "nxml/nxml-enc.el" "nxml/nxml-maint.el" "nxml/nxml-ns.el"
+;;;;;; "nxml/nxml-outln.el" "nxml/nxml-parse.el" "nxml/nxml-rap.el"
+;;;;;; "nxml/nxml-util.el" "nxml/rng-dt.el" "nxml/rng-loc.el" "nxml/rng-maint.el"
+;;;;;; "nxml/rng-match.el" "nxml/rng-parse.el" "nxml/rng-pttrn.el"
+;;;;;; "nxml/rng-uri.el" "nxml/rng-util.el" "nxml/xsd-regexp.el"
+;;;;;; "org/ob-C.el" "org/ob-R.el" "org/ob-asymptote.el" "org/ob-awk.el"
+;;;;;; "org/ob-calc.el" "org/ob-clojure.el" "org/ob-comint.el" "org/ob-core.el"
+;;;;;; "org/ob-css.el" "org/ob-ditaa.el" "org/ob-dot.el" "org/ob-emacs-lisp.el"
+;;;;;; "org/ob-eval.el" "org/ob-exp.el" "org/ob-fortran.el" "org/ob-gnuplot.el"
+;;;;;; "org/ob-haskell.el" "org/ob-io.el" "org/ob-java.el" "org/ob-js.el"
+;;;;;; "org/ob-keys.el" "org/ob-latex.el" "org/ob-ledger.el" "org/ob-lilypond.el"
;;;;;; "org/ob-lisp.el" "org/ob-lob.el" "org/ob-makefile.el" "org/ob-matlab.el"
;;;;;; "org/ob-maxima.el" "org/ob-mscgen.el" "org/ob-ocaml.el" "org/ob-octave.el"
;;;;;; "org/ob-org.el" "org/ob-perl.el" "org/ob-picolisp.el" "org/ob-plantuml.el"
;;;;;; "progmodes/ebnf-otz.el" "progmodes/ebnf-yac.el" "progmodes/idlw-complete-structtag.el"
;;;;;; "progmodes/idlw-help.el" "progmodes/idlw-toolbar.el" "progmodes/mantemp.el"
;;;;;; "progmodes/xscheme.el" "ps-def.el" "ps-mule.el" "ps-samp.el"
-;;;;;; "sb-image.el" "scroll-bar.el" "soundex.el" "subdirs.el" "tempo.el"
-;;;;;; "textmodes/bib-mode.el" "textmodes/makeinfo.el" "textmodes/page-ext.el"
-;;;;;; "textmodes/refbib.el" "textmodes/refer.el" "textmodes/reftex-auc.el"
-;;;;;; "textmodes/reftex-cite.el" "textmodes/reftex-dcr.el" "textmodes/reftex-global.el"
-;;;;;; "textmodes/reftex-index.el" "textmodes/reftex-parse.el" "textmodes/reftex-ref.el"
-;;;;;; "textmodes/reftex-sel.el" "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el"
-;;;;;; "timezone.el" "tooltip.el" "tree-widget.el" "url/url-about.el"
-;;;;;; "url/url-cookie.el" "url/url-dired.el" "url/url-domsuf.el"
-;;;;;; "url/url-expand.el" "url/url-ftp.el" "url/url-future.el"
-;;;;;; "url/url-history.el" "url/url-imap.el" "url/url-methods.el"
-;;;;;; "url/url-nfs.el" "url/url-proxy.el" "url/url-vars.el" "vc/ediff-diff.el"
-;;;;;; "vc/ediff-init.el" "vc/ediff-merg.el" "vc/ediff-ptch.el"
-;;;;;; "vc/ediff-vers.el" "vc/ediff-wind.el" "vc/pcvs-info.el" "vc/pcvs-parse.el"
-;;;;;; "vc/pcvs-util.el" "vc/vc-dav.el" "vc/vc-filewise.el" "vcursor.el"
-;;;;;; "vt-control.el" "vt100-led.el" "w32-fns.el" "w32-vars.el"
-;;;;;; "x-dnd.el") (22309 59446 538986 699000))
+;;;;;; "registry.el" "rtree.el" "sb-image.el" "scroll-bar.el" "soundex.el"
+;;;;;; "subdirs.el" "svg.el" "tempo.el" "textmodes/bib-mode.el"
+;;;;;; "textmodes/makeinfo.el" "textmodes/page-ext.el" "textmodes/refbib.el"
+;;;;;; "textmodes/refer.el" "textmodes/reftex-auc.el" "textmodes/reftex-cite.el"
+;;;;;; "textmodes/reftex-dcr.el" "textmodes/reftex-global.el" "textmodes/reftex-index.el"
+;;;;;; "textmodes/reftex-parse.el" "textmodes/reftex-ref.el" "textmodes/reftex-sel.el"
+;;;;;; "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el" "timezone.el"
+;;;;;; "tooltip.el" "tree-widget.el" "url/url-about.el" "url/url-cookie.el"
+;;;;;; "url/url-dired.el" "url/url-domsuf.el" "url/url-expand.el"
+;;;;;; "url/url-ftp.el" "url/url-future.el" "url/url-history.el"
+;;;;;; "url/url-imap.el" "url/url-methods.el" "url/url-nfs.el" "url/url-proxy.el"
+;;;;;; "url/url-vars.el" "vc/ediff-diff.el" "vc/ediff-init.el" "vc/ediff-merg.el"
+;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el"
+;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el"
+;;;;;; "vc/vc-filewise.el" "vcursor.el" "vt-control.el" "vt100-led.el"
+;;;;;; "w32-fns.el" "w32-vars.el" "x-dnd.el") (0 0 0 0))
;;;***
\f
diaeresis | \" | \"i -> ï \"\" -> ¨
tilde | ~ | ~n -> ñ
cedilla | ~ | ~c -> ç
+ middle dot | ~ | ~. -> ·
symbol | ~ | ~> -> » ~< -> « ~! -> ¡ ~? -> ¿
" nil t nil nil nil nil nil nil nil nil t)
("~<" ?\«)
("~!" ?¡)
("~?" ?¿)
+ ("~." ?·)
("~ " ?~)
)
(mapc #'delete-overlay linum-overlays)
(setq linum-overlays nil)
(dolist (w (get-buffer-window-list (current-buffer) nil t))
- (set-window-margins w 0 (cdr (window-margins w)))))
+ ;; restore margins if needed FIXME: This still fails if the
+ ;; "other" mode has incidentally set margins to exactly what linum
+ ;; had: see bug#20674 for a similar workaround in nlinum.el
+ (let ((set-margins (window-parameter w 'linum--set-margins))
+ (current-margins (window-margins w)))
+ (when (and set-margins
+ (equal set-margins current-margins))
+ (set-window-margins w 0 (cdr current-margins))
+ (set-window-parameter w 'linum--set-margins nil)))))
(defun linum-update-current ()
"Update line numbers for the current buffer."
(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)
(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))
(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
(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")
;;;###autoload
(defvar lpr-lp-system
- (memq system-type '(usg-unix-v hpux irix))
+ (memq system-type '(usg-unix-v hpux))
"Non-nil if running on a system type that uses the \"lp\" command.")
(defcustom ls-lisp-emulation
(cond ;; ((eq system-type 'windows-nt) 'MS-Windows)
- ((memq system-type '(hpux usg-unix-v irix berkeley-unix))
+ ((memq system-type '(hpux usg-unix-v berkeley-unix))
'UNIX)) ; very similar to GNU
;; Anything else defaults to nil, meaning GNU.
"Platform to emulate: GNU (default), MacOS, MS-Windows, UNIX.
(condition-case nil
(let ((fill-prefix (when quote (concat quote " ")))
(fill-column (eval fill-flowed-display-column))
- filladapt-mode
adaptive-fill-mode)
(fill-region (point-at-bol)
(min (1+ (point-at-eol))
;;; Code:
(eval-when-compile (require 'cl))
-(require 'mm-util)
(defvar ietf-drums-no-ws-ctl-token "\001-\010\013\014\016-\037\177"
"US-ASCII control characters excluding CR, LF and white space.")
(modify-syntax-entry ?* "_" table)
(modify-syntax-entry ?\; "_" table)
(modify-syntax-entry ?\' "_" table)
- (if (featurep 'xemacs)
- (let ((i 128))
- (while (< i 256)
- (modify-syntax-entry i "w" table)
- (setq i (1+ i)))))
table))
(defun ietf-drums-token-to-list (token)
(let ((i 0)
b e c out range)
(while (< i (length token))
- (setq c (mm-char-int (aref token i)))
+ (setq c (aref token i))
(incf i)
(cond
- ((eq c (mm-char-int ?-))
+ ((eq c ?-)
(if b
(setq range t)
(push c out)))
(insert (upcase mi) ". ")))
;; Nuke name if it is the same as mailbox name.
- (let ((buffer-length (- (point-max) (point-min)))
- (i 0)
- (names-match-flag t))
- (when (and (> buffer-length 0)
- (eq buffer-length (- mbox-end mbox-beg)))
- (goto-char (point-max))
- (insert-buffer-substring canonicalization-buffer
- mbox-beg mbox-end)
- (while (and names-match-flag
- (< i buffer-length))
- (or (eq (downcase (char-after (+ i (point-min))))
- (downcase
- (char-after (+ i buffer-length (point-min)))))
- (setq names-match-flag nil))
- (setq i (1+ i)))
- (delete-region (+ (point-min) buffer-length) (point-max))
- (and names-match-flag
- mail-extr-ignore-realname-equals-mailbox-name
- (narrow-to-region (point) (point)))))
+ (when mail-extr-ignore-single-names
+ (let ((buffer-length (- (point-max) (point-min)))
+ (i 0)
+ (names-match-flag t))
+ (when (and (> buffer-length 0)
+ (eq buffer-length (- mbox-end mbox-beg)))
+ (goto-char (point-max))
+ (insert-buffer-substring canonicalization-buffer
+ mbox-beg mbox-end)
+ (while (and names-match-flag
+ (< i buffer-length))
+ (or (eq (downcase (char-after (+ i (point-min))))
+ (downcase
+ (char-after (+ i buffer-length (point-min)))))
+ (setq names-match-flag nil))
+ (setq i (1+ i)))
+ (delete-region (+ (point-min) buffer-length) (point-max))
+ (and names-match-flag
+ mail-extr-ignore-realname-equals-mailbox-name
+ (narrow-to-region (point) (point))))))
;; Nuke name if it's just one word.
(goto-char (point-min))
;;; Code:
-(require 'mm-util)
-(defvar mm-use-ultra-safe-encoding)
-
;;;###autoload
(defun quoted-printable-decode-region (from to &optional coding-system)
"Decode quoted-printable in the region between FROM and TO, per RFC 2045.
(interactive
;; Let the user determine the coding system with "C-x RET c".
(list (region-beginning) (region-end) coding-system-for-read))
- (unless (mm-coding-system-p coding-system) ; e.g. `ascii' from Gnus
+ (when (and coding-system
+ (not (coding-system-p coding-system))) ; e.g. `ascii' from Gnus
(setq coding-system nil))
(save-excursion
(save-restriction
;; which already contains non-ASCII characters which would
;; then get doubly-decoded below.
(if coding-system
- (mm-encode-coding-region (point-min) (point-max) coding-system))
+ (encode-coding-region (point-min) (point-max) coding-system))
(goto-char (point-min))
(while (and (skip-chars-forward "^=")
(not (eobp)))
(message "Malformed quoted-printable text")
(forward-char)))))
(if coding-system
- (mm-decode-coding-region (point-min) (point-max) coding-system)))))
+ (decode-coding-region (point-min) (point-max) coding-system)))))
(defun quoted-printable-decode-string (string &optional coding-system)
"Decode the quoted-printable encoded STRING and return the result.
If CODING-SYSTEM is non-nil, decode the string with coding-system.
Use of CODING-SYSTEM is deprecated; this function should deal with
raw bytes, and coding conversion should be done separately."
- (mm-with-unibyte-buffer
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
(insert string)
(quoted-printable-decode-region (point-min) (point-max) coding-system)
(buffer-string)))
(setq class "\010-\012\014\040-\074\076-\177"))
(save-excursion
(goto-char from)
- (if (re-search-forward (mm-string-to-multibyte "[^\x0-\x7f\x80-\xff]")
+ (if (re-search-forward (string-to-multibyte "[^\x0-\x7f\x80-\xff]")
to t)
(error "Multibyte character in QP encoding region"))
(save-restriction
(not (eobp)))
(insert
(prog1
- ;; To unibyte in case of Emacs 23 (unicode) eight-bit.
- (format "=%02X" (mm-multibyte-char-to-unibyte (char-after)))
+ (format "=%02X" (char-after))
(delete-char 1))))
;; Encode white space at the end of lines.
(goto-char (point-min))
(prog1
(format "=%02X" (char-after))
(delete-char 1)))))
- (let ((mm-use-ultra-safe-encoding
+ (let ((ultra
(and (boundp 'mm-use-ultra-safe-encoding)
mm-use-ultra-safe-encoding)))
- (when (or fold mm-use-ultra-safe-encoding)
+ (when (or fold ultra)
(let ((tab-width 1) ; HTAB is one character.
(case-fold-search nil))
(goto-char (point-min))
(while (not (eobp))
;; In ultra-safe mode, encode "From " at the beginning
;; of a line.
- (when mm-use-ultra-safe-encoding
+ (when ultra
(if (looking-at "From ")
(replace-match "From=20" nil t)
(if (looking-at "-")
(defun quoted-printable-encode-string (string)
"Encode the STRING as quoted-printable and return the result."
(with-temp-buffer
- (if (mm-multibyte-string-p string)
- (mm-enable-multibyte)
- (mm-disable-multibyte))
+ (if (multibyte-string-p string)
+ (set-buffer-multibyte 'to)
+ (set-buffer-multibyte nil))
(insert string)
(quoted-printable-encode-region (point-min) (point-max))
(buffer-string)))
(mm-coding-system-p
(car message-posting-charset)))
;; 8 bit must be decoded.
- (mm-encode-coding-region
+ (encode-coding-region
(point-min) (point-max)
(mm-charset-to-coding-system
(car message-posting-charset))))
(let ((rfc2047-encoding-type 'mime))
(rfc2047-encode-region (point) (point-max))))
((eq method 'default)
- (if (and (featurep 'mule)
- (if (boundp 'enable-multibyte-characters)
- (default-value 'enable-multibyte-characters))
+ (if (and (default-value 'enable-multibyte-characters)
mail-parse-charset)
- (mm-encode-coding-region (point) (point-max)
- mail-parse-charset)))
+ (encode-coding-region (point) (point-max)
+ mail-parse-charset)))
;; We get this when CC'ing messages to newsgroups with
;; 8-bit names. The group name mail copy just got
;; unconditionally encoded. Previously, it would ask
;;; (rfc2047-encode-region (point-min) (point-max))
;;; (error "Cannot send unencoded text")))
((mm-coding-system-p method)
- (if (or (and (featurep 'mule)
- (if (boundp 'enable-multibyte-characters)
- (default-value 'enable-multibyte-characters)))
- (featurep 'file-coding))
- (mm-encode-coding-region (point) (point-max) method)))
+ (when (default-value 'enable-multibyte-characters)
+ (encode-coding-region (point) (point-max) method)))
;; Hm.
(t)))
(goto-char (point-max))))))))
;; it appears to be the cleanest way.
;; Play safe and don't assume the form of the word syntax entry --
;; copy it from ?a.
- (if (featurep 'xemacs)
- (put-char-table t (get-char-table ?a (standard-syntax-table)) table)
- (set-char-table-range table t (aref (standard-syntax-table) ?a)))
+ (set-char-table-range table t (aref (standard-syntax-table) ?a))
(modify-syntax-entry ?\\ "\\" table)
(modify-syntax-entry ?\" "\"" table)
(modify-syntax-entry ?\( "(" table)
(if (or debug-on-quit debug-on-error)
(signal (car err) (cdr err))
(error "Invalid data for rfc2047 encoding: %s"
- (mm-replace-in-string orig-text "[ \t\n]+" " "))))))))
+ (replace-regexp-in-string "[ \t\n]+" " " orig-text))))))))
(unless dont-fold
(rfc2047-fold-region b (point)))
(goto-char (point-max))))
((not rfc2047-encode-max-chars)
(concat start
(funcall encoder (if cs
- (mm-encode-coding-string string cs)
+ (encode-coding-string string cs)
string))
"?="))
((>= column rfc2047-encode-max-chars)
(setq next (concat start
(funcall encoder
(if cs
- (mm-encode-coding-string
+ (encode-coding-string
(substring string 0 (1+ index))
cs)
(substring string 0 (1+ index))))
(setq crest (buffer-substring-no-properties (point) b)))
(setq eword (rfc2047-encode-1
(- b (point-at-bol))
- (mm-replace-in-string
- (buffer-substring-no-properties b e)
- "\n\\([ \t]?\\)" "\\1")
+ (replace-regexp-in-string
+ "\n\\([ \t]?\\)" "\\1"
+ (buffer-substring-no-properties b e))
cs
(or (cdr (assq encoding
rfc2047-encode-function-alist))
(rfc2047-pad-base64 (nth 2 word)))))
((char-equal ?Q (nth 1 word))
(setq text (quoted-printable-decode-string
- (mm-subst-char-in-string
+ (subst-char-in-string
?_ ? (nth 2 word) t)))))
(error
(message "%s" (error-message-string code))
(setq words (concat
(or (and (setq cs (caar rest))
(condition-case code
- (mm-decode-coding-string (cdar rest) cs)
+ (decode-coding-string (cdar rest) cs)
(error
(message "%s" (error-message-string code))
nil)))
mail-parse-charset
(not (eq mail-parse-charset 'us-ascii))
(not (eq mail-parse-charset 'gnus-decoded)))
- (mm-decode-coding-region b e mail-parse-charset))
+ (decode-coding-region b e mail-parse-charset))
(setq b (point)))
(when (and (mm-multibyte-p)
mail-parse-charset
(not (eq mail-parse-charset 'us-ascii))
(not (eq mail-parse-charset 'gnus-decoded)))
- (mm-decode-coding-region b (point-max) mail-parse-charset))))))
+ (decode-coding-region b (point-max) mail-parse-charset))))))
(defun rfc2047-decode-address-region (start end)
"Decode MIME-encoded words in region between START and END.
"Decode MIME-encoded STRING and return the result.
If ADDRESS-MIME is non-nil, strip backslashes which precede characters
other than `\"' and `\\' in quoted strings."
- ;; (let ((m (mm-multibyte-p)))
- (if (string-match "=\\?" string)
- (with-temp-buffer
- ;; We used to only call mm-enable-multibyte if `m' is non-nil,
- ;; but this can't be the right criterion. Don't just revert this
- ;; change if it encounters a bug. Please help me fix it
- ;; right instead. --Stef
- ;; The string returned should always be multibyte in a multibyte
- ;; session, i.e. the buffer should be multibyte before
- ;; `buffer-string' is called.
- (mm-enable-multibyte)
- (insert string)
- (inline
- (rfc2047-decode-region (point-min) (point-max) address-mime))
- (buffer-string))
- (when address-mime
- (setq string
- (with-temp-buffer
- (when (mm-multibyte-string-p string)
- (mm-enable-multibyte))
- (insert string)
- (rfc2047-strip-backslashes-in-quoted-strings)
- (buffer-string))))
- ;; Fixme: As above, `m' here is inappropriate.
- (if (and ;; m
- mail-parse-charset
- (not (eq mail-parse-charset 'us-ascii))
- (not (eq mail-parse-charset 'gnus-decoded)))
- ;; `decode-coding-string' in Emacs offers a third optional
- ;; arg NOCOPY to avoid consing a new string if the decoding
- ;; is "trivial". Unfortunately it currently doesn't
- ;; consider anything else than a nil coding system
- ;; trivial.
- ;; `rfc2047-decode-string' is called multiple times for each
- ;; article during summary buffer generation, and we really
- ;; want to avoid unnecessary consing. So we bypass
- ;; `decode-coding-string' if the string is purely ASCII.
- (if (and (fboundp 'detect-coding-string)
- ;; string is purely ASCII
- (eq (detect-coding-string string t) 'undecided))
- string
- (mm-decode-coding-string string mail-parse-charset))
- (mm-string-to-multibyte string)))) ;; )
+ (if (string-match "=\\?" string)
+ (with-temp-buffer
+ ;; We used to only call mm-enable-multibyte if `m' is non-nil,
+ ;; but this can't be the right criterion. Don't just revert this
+ ;; change if it encounters a bug. Please help me fix it
+ ;; right instead. --Stef
+ ;; The string returned should always be multibyte in a multibyte
+ ;; session, i.e. the buffer should be multibyte before
+ ;; `buffer-string' is called.
+ (mm-enable-multibyte)
+ (insert string)
+ (inline
+ (rfc2047-decode-region (point-min) (point-max) address-mime))
+ (buffer-string))
+ (when address-mime
+ (setq string
+ (with-temp-buffer
+ (when (multibyte-string-p string)
+ (mm-enable-multibyte))
+ (insert string)
+ (rfc2047-strip-backslashes-in-quoted-strings)
+ (buffer-string))))
+ ;; Fixme: As above, `m' here is inappropriate.
+ (if (and ;; m
+ mail-parse-charset
+ (not (eq mail-parse-charset 'us-ascii))
+ (not (eq mail-parse-charset 'gnus-decoded)))
+ ;; `decode-coding-string' in Emacs offers a third optional
+ ;; arg NOCOPY to avoid consing a new string if the decoding
+ ;; is "trivial". Unfortunately it currently doesn't
+ ;; consider anything else than a nil coding system
+ ;; trivial.
+ ;; `rfc2047-decode-string' is called multiple times for each
+ ;; article during summary buffer generation, and we really
+ ;; want to avoid unnecessary consing. So we bypass
+ ;; `decode-coding-string' if the string is purely ASCII.
+ (if (eq (detect-coding-string string t) 'undecided)
+ ;; string is purely ASCII
+ string
+ (decode-coding-string string mail-parse-charset))
+ (string-to-multibyte string))))
(defun rfc2047-decode-address-string (string)
"Decode MIME-encoded STRING and return the result.
(let (mod)
(when (and (string-match "\\\\\"" string)
(not (string-match "\\`\"\\|[^\\]\"" string)))
- (setq string (mm-replace-in-string string "\\\\\"" "\"")
+ (setq string (replace-regexp-in-string "\\\\\"" "\"" string)
mod t))
(when (and (string-match "\\\\(" string)
(string-match "\\\\)" string)
(not (string-match "\\`(\\|[^\\][()]" string)))
- (setq string (mm-replace-in-string string "\\\\\\([()]\\)" "\\1")
+ (setq string (replace-regexp-in-string
+ "\\\\\\([()]\\)" "\\1" string)
mod t))
(or (and mod
(ignore-errors
;; Decode using the charset, if any.
(if (memq coding-system '(nil ascii))
(buffer-string)
- (mm-decode-coding-string (buffer-string) coding-system)))))
+ (decode-coding-string (buffer-string) coding-system)))))
(defun rfc2231-encode-string (param value)
"Return and PARAM=VALUE string encoded according to RFC2231.
(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))
(put 'rmail-spool-directory 'standard-value
'((cond ((file-exists-p "/var/mail") "/var/mail/")
((file-exists-p "/var/spool/mail") "/var/spool/mail/")
- ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/")
+ ((memq system-type '(hpux usg-unix-v)) "/usr/mail/")
(t "/usr/spool/mail/"))))
;;;###autoload
"/var/mail/")
;; Many GNU/Linux systems use this name.
((file-exists-p "/var/spool/mail") "/var/spool/mail/")
- ((memq system-type '(hpux usg-unix-v irix)) "/usr/mail/")
+ ((memq system-type '(hpux usg-unix-v)) "/usr/mail/")
(t "/usr/spool/mail/")))
"Name of directory used by system mailer for delivering new mail.
Its name should end with a slash."
(declare-function mail-dont-reply-to "mail-utils" (destinations))
(declare-function rmail-update-summary "rmailsum" (&rest ignore))
(declare-function rmail-mime-toggle-hidden "rmailmm" ())
+(declare-function rmail-mime-entity-truncated "rmailmm" (entity))
(defun rmail-probe (prog)
"Determine what flavor of movemail PROG is.
;; There doesn't really seem to be an appropriate menu.
;; Eg the edit command is not in a menu either.
+(defvar rmail-mime-render-html-function) ; defcustom in rmailmm
(defun rmail-epa-decrypt ()
"Decrypt GnuPG or OpenPGP armors in current message."
(interactive)
(setq buffer-file-coding-system rmail-message-encoding))))
(add-hook 'after-save-hook 'rmail-after-save-hook)
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "rmailedit" "rmailedit.el" "03eb8c36b3c57d58eecedb9eeffa623e")
-;;; Generated autoloads from rmailedit.el
-
-(autoload 'rmail-edit-current-message "rmailedit" "\
-Edit the contents of this message.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailkwd" "rmailkwd.el" "4e1b251929961e2b9d3b126301d697d0")
-;;; Generated autoloads from rmailkwd.el
-
-(autoload 'rmail-add-label "rmailkwd" "\
-Add LABEL to labels associated with current RMAIL message.
-Completes (see `rmail-read-label') over known labels when reading.
-LABEL may be a symbol or string. Only one label is allowed.
-
-\(fn LABEL)" t nil)
-
-(autoload 'rmail-kill-label "rmailkwd" "\
-Remove LABEL from labels associated with current RMAIL message.
-Completes (see `rmail-read-label') over known labels when reading.
-LABEL may be a symbol or string. Only one label is allowed.
-
-\(fn LABEL)" t nil)
-
-(autoload 'rmail-read-label "rmailkwd" "\
-Read a label with completion, prompting with PROMPT.
-Completions are chosen from `rmail-label-obarray'. The default
-is `rmail-last-label', if that is non-nil. Updates `rmail-last-label'
-according to the choice made, and returns a symbol.
-
-\(fn PROMPT)" nil nil)
-
-(autoload 'rmail-previous-labeled-message "rmailkwd" "\
-Show previous message with one of the labels LABELS.
-LABELS should be a comma-separated list of label names.
-If LABELS is empty, the last set of labels specified is used.
-With prefix argument N moves backward N messages with these labels.
-
-\(fn N LABELS)" t nil)
-
-(autoload 'rmail-next-labeled-message "rmailkwd" "\
-Show next message with one of the labels LABELS.
-LABELS should be a comma-separated list of label names.
-If LABELS is empty, the last set of labels specified is used.
-With prefix argument N moves forward N messages with these labels.
-
-\(fn N LABELS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailmm" "rmailmm.el" "7ab6ab96dfdeeec6bc8f4620295b7119")
-;;; Generated autoloads from rmailmm.el
-
-(autoload 'rmail-mime "rmailmm" "\
-Toggle the display of a MIME message.
-
-The actual behavior depends on the value of `rmail-enable-mime'.
-
-If `rmail-enable-mime' is non-nil (the default), this command toggles
-the display of a MIME message between decoded presentation form and
-raw data. With optional prefix argument ARG, it toggles the display only
-of the MIME entity at point, if there is one. The optional argument
-STATE forces a particular display state, rather than toggling.
-`raw' forces raw mode, any other non-nil value forces decoded mode.
-
-If `rmail-enable-mime' is nil, this creates a temporary \"*RMAIL*\"
-buffer holding a decoded copy of the message. Inline content-types are
-handled according to `rmail-mime-media-type-handlers-alist'.
-By default, this displays text and multipart messages, and offers to
-download attachments as specified by `rmail-mime-attachment-dirs-alist'.
-The arguments ARG and STATE have no effect in this case.
-
-\(fn &optional ARG STATE)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailmsc" "rmailmsc.el" "471c370ff9f183806c8d749961ec9d79")
-;;; Generated autoloads from rmailmsc.el
-
-(autoload 'set-rmail-inbox-list "rmailmsc" "\
-Set the inbox list of the current RMAIL file to FILE-NAME.
-You can specify one file name, or several names separated by commas.
-If FILE-NAME is empty, remove any existing inbox list.
-
-This applies only to the current session.
-
-\(fn FILE-NAME)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailsort" "rmailsort.el" "2c8e39f7bae6fcc465a83ebccd46c8a4")
-;;; Generated autoloads from rmailsort.el
-
-(autoload 'rmail-sort-by-date "rmailsort" "\
-Sort messages of current Rmail buffer by \"Date\" header.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-subject "rmailsort" "\
-Sort messages of current Rmail buffer by \"Subject\" header.
-Ignores any \"Re: \" prefix. If prefix argument REVERSE is
-non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-author "rmailsort" "\
-Sort messages of current Rmail buffer by author.
-This uses either the \"From\" or \"Sender\" header, downcased.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-recipient "rmailsort" "\
-Sort messages of current Rmail buffer by recipient.
-This uses either the \"To\" or \"Apparently-To\" header, downcased.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-correspondent "rmailsort" "\
-Sort messages of current Rmail buffer by other correspondent.
-This uses either the \"From\", \"Sender\", \"To\", or
-\"Apparently-To\" header, downcased. Uses the first header not
-excluded by `mail-dont-reply-to-names'. If prefix argument
-REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-lines "rmailsort" "\
-Sort messages of current Rmail buffer by the number of lines.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE)" t nil)
-
-(autoload 'rmail-sort-by-labels "rmailsort" "\
-Sort messages of current Rmail buffer by labels.
-LABELS is a comma-separated list of labels. The order of these
-labels specifies the order of messages: messages with the first
-label come first, messages with the second label come second, and
-so on. Messages that have none of these labels come last.
-If prefix argument REVERSE is non-nil, sorts in reverse order.
-
-\(fn REVERSE LABELS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "rmailsum" "rmailsum.el" "8205e67c8188aa5c01715e79e10667c1")
-;;; Generated autoloads from rmailsum.el
-
-(autoload 'rmail-summary "rmailsum" "\
-Display a summary of all messages, one line per message.
-
-\(fn)" t nil)
-
-(autoload 'rmail-summary-by-labels "rmailsum" "\
-Display a summary of all messages with one or more LABELS.
-LABELS should be a string containing the desired labels, separated by commas.
-
-\(fn LABELS)" t nil)
-
-(autoload 'rmail-summary-by-recipients "rmailsum" "\
-Display a summary of all messages with the given RECIPIENTS.
-Normally checks the To, From and Cc fields of headers;
-but if PRIMARY-ONLY is non-nil (prefix arg given),
- only look in the To and From fields.
-RECIPIENTS is a regular expression.
-
-\(fn RECIPIENTS &optional PRIMARY-ONLY)" t nil)
-
-(autoload 'rmail-summary-by-regexp "rmailsum" "\
-Display a summary of all messages according to regexp REGEXP.
-If the regular expression is found in the header of the message
-\(including in the date and other lines, as well as the subject line),
-Emacs will list the message in the summary.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'rmail-summary-by-topic "rmailsum" "\
-Display a summary of all messages with the given SUBJECT.
-Normally checks just the Subject field of headers; but with prefix
-argument WHOLE-MESSAGE is non-nil, looks in the whole message.
-SUBJECT is a regular expression.
-
-\(fn SUBJECT &optional WHOLE-MESSAGE)" t nil)
-
-(autoload 'rmail-summary-by-senders "rmailsum" "\
-Display a summary of all messages whose \"From\" field matches SENDERS.
-SENDERS is a regular expression.
-
-\(fn SENDERS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "undigest" "undigest.el" "20561f083496eb113fa9e501902bfcc3")
-;;; Generated autoloads from undigest.el
-
-(autoload 'undigestify-rmail-message "undigest" "\
-Break up a digest message into its constituent messages.
-Leaves original message, deleted, before the undigestified messages.
-
-\(fn)" t nil)
-
-(autoload 'unforward-rmail-message "undigest" "\
-Extract a forwarded message from the containing message.
-This puts the forwarded message into a separate rmail message following
-the containing message. This command is only useful when messages are
-forwarded with `rmail-enable-mime-composing' set to nil.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
(provide 'rmail)
(provide 'rmailedit)
;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
;; End:
;;; rmailedit.el ends here
(provide 'rmailkwd)
;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
;; End:
;;; rmailkwd.el ends here
(provide 'rmailmm)
;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
;; End:
;;; rmailmm.el ends here
(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
(provide 'rmailsort)
;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
;; End:
;;; rmailsort.el ends here
(provide 'rmailsum)
;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
;; End:
;;; rmailsum.el ends here
;; Send the contents.
(smtpmail-command-or-throw process "DATA")
(smtpmail-send-data process smtpmail-text-buffer)
- ;; DATA end "."
- (smtpmail-command-or-throw process ".")
;; Return success.
nil))
(when (and process
(process-send-string process "\r\n"))
(defun smtpmail-send-data (process buffer)
- (let ((data-continue t) sending-data
+ (let ((data-continue t)
(pr (with-current-buffer buffer
(make-progress-reporter "Sending email "
- (point-min) (point-max)))))
+ (point-min) (point-max))))
+ sending-data)
(with-current-buffer buffer
(goto-char (point-min)))
(while data-continue
(end-of-line 2)
(setq data-continue (not (eobp))))
(smtpmail-send-data-1 process sending-data))
+ ;; DATA end "."
+ (smtpmail-command-or-throw process ".")
(progress-reporter-done pr)))
(defun smtpmail-deduce-address-list (smtpmail-text-buffer header-start header-end)
(provide 'undigest)
;; Local Variables:
-;; generated-autoload-file: "rmail.el"
+;; generated-autoload-file: "rmail-loaddefs.el"
;; End:
;;; undigest.el ends here
(setq last (match-beginning 0))
(setq footer-alist (yenc-parse-line (match-string 0)))
(setq work-buffer (generate-new-buffer " *yenc-work*"))
- (unless (featurep 'xemacs)
- (with-current-buffer work-buffer (set-buffer-multibyte nil)))
+ (with-current-buffer work-buffer
+ (set-buffer-multibyte nil))
(while (< first last)
(setq char (char-after first))
(cond ((or (eq char ?\r)
(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)
If the optional argument REGION is non-nil, the function ignores
BEG and END, and saves the current region instead."
(interactive "r\np")
- (let ((gui-select-enable-clipboard t))
+ (let ((gui-select-enable-clipboard t)
+ (interprogram-cut-function (or interprogram-cut-function
+ #'gui-select-text)))
(kill-ring-save beg end region)))
(defun clipboard-kill-region (beg end &optional region)
If the optional argument REGION is non-nil, the function ignores
BEG and END, and kills the current region instead."
(interactive "r\np")
- (let ((gui-select-enable-clipboard t))
+ (let ((gui-select-enable-clipboard t)
+ (interprogram-cut-function (or interprogram-cut-function
+ #'gui-select-text)))
(kill-region beg end region)))
(defun menu-bar-enable-clipboard ()
(bindings--define-key menu [browse-web]
'(menu-item "Browse the Web..." browse-web))
(bindings--define-key menu [directory-search]
- '(menu-item "Directory Search" eudc-tools-menu))
+ '(menu-item "Directory Servers" eudc-tools-menu))
(bindings--define-key menu [compose-mail]
'(menu-item "Compose New Mail" compose-mail
:visible (and mail-user-agent (not (eq mail-user-agent 'ignore)))
arguments were put in a single string (closes SF #1122655).
(mh-edit-pick-expr): Use it.
- * mh-unit.el (mh-unit): Since 21.4 snuck out but didn't contain
+ * mh-unit.el (mh-unit): Since 21.4 sneaked out but didn't contain
updated lm-verify, don't run lm-verify on versions before 21.5.
(mh-unit-test-pick-args-list): Added.
;; use it as the drafts folder. Then copy the skeleton to a regular
;; temp file, and return the regular temp file.
(let (new
- (temp-folder (mm-make-temp-file
+ (temp-folder (make-temp-file
(concat mh-user-path "draftfolder.") t)))
(mh-exec-cmd "comp" "-nowhatnowproc"
"-draftfolder" (format "+%s"
(file-name-nondirectory temp-folder))
(if (stringp mh-comp-formfile)
(list "-form" mh-comp-formfile)))
- (setq new (mm-make-temp-file "comp."))
+ (setq new (make-temp-file "comp."))
(rename-file (concat temp-folder "/" "1") new t)
(delete-file (concat temp-folder "/" ".mh_sequences"))
(delete-directory temp-folder)
;; Author: Bill Wohler <wohler@newt.com>
;; Maintainer: Bill Wohler <wohler@newt.com>
-;; Version: 8.6
+;; Version: 8.6+git
;; Keywords: mail
;; This file is part of GNU Emacs.
;; Try to keep variables local to a single file. Provide accessors if
;; variables are shared. Use this section as a last resort.
-(defconst mh-version "8.6" "Version number of MH-E.")
+(defconst mh-version "8.6+git" "Version number of MH-E.")
;; Variants
(if (fboundp mm-fun) ; bug#20201
`(keymap
,indicator
- (turn-off menu-item "Turn Off minor mode" ,mm-fun)
+ (turn-off menu-item "Turn off minor mode" ,mm-fun)
(help menu-item "Help for minor mode"
(lambda () (interactive)
(describe-function ',mm-fun)))))))
(let ((v (match-string 3 host)))
(setq host (match-string 2 host))
(when (and (stringp v) (not (string= "" v)))
- (setq port
- (if (string-match "[^[:digit:]]" v)
- (string-to-number v)
- v)))))
+ (setq port v))))
(when (file-name-absolute-p host)
;; Expand file name because `file-name-absolute-p'
;; considers paths beginning with "~" as absolute
(defun eudc-menu ()
(let (command)
- (append '("Directory Search")
+ (append '("Directory Servers")
(list
(append
'("Server")
(define-key
global-map
[menu-bar tools directory-search]
- (cons "Directory Search"
- (easy-menu-create-menu "Directory Search" (cdr (eudc-menu))))))
+ (cons "Directory Servers"
+ (easy-menu-create-menu "Directory Servers" (cdr (eudc-menu))))))
((fboundp 'easy-menu-add-item)
(let ((menu (eudc-menu)))
(easy-menu-add-item nil '("tools") (easy-menu-create-menu (car menu)
(define-key
global-map
[menu-bar tools eudc]
- (cons "Directory Search"
- (easy-menu-create-keymaps "Directory Search" (cdr (eudc-menu))))))
+ (cons "Directory Servers"
+ (easy-menu-create-keymaps "Directory Servers"
+ (cdr (eudc-menu))))))
(t
(error "Unknown version of easymenu"))))
))
(cond
((not (featurep 'xemacs))
(defvar eudc-tools-menu
- (let ((map (make-sparse-keymap "Directory Search")))
+ (let ((map (make-sparse-keymap "Directory Servers")))
(define-key map [phone]
`(menu-item ,(purecopy "Get Phone") eudc-get-phone
:help ,(purecopy "Get the phone field of name from the directory server")))
map))
(fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu)))
(t
- (let ((menu '("Directory Search"
+ (let ((menu '("Directory Servers"
["Load Hotlist of Servers" eudc-load-eudc t]
["New Server" eudc-set-server t]
["---" nil nil]
(define-key
global-map
[menu-bar tools eudc]
- (cons "Directory Search"
- (easy-menu-create-keymaps "Directory Search"
+ (cons "Directory Servers"
+ (easy-menu-create-keymaps "Directory Servers"
(cdr menu)))))))))))
;;}}}
(require 'url-queue)
(require 'url-util) ; for url-get-url-at-point
(require 'mm-url)
+(require 'puny)
(eval-when-compile (require 'subr-x)) ;; for string-trim
(defgroup eww nil
"When this regex is found in the URL, it's not a keyword but an address.")
(defvar eww-link-keymap
- (let ((map (copy-keymap shr-map)))
+ (let ((map (copy-keymap shr-image-map)))
(define-key map "\r" 'eww-follow-link)
map))
(current-buffer)
(get-buffer-create "*eww*")))
(eww-setup-buffer)
+ ;; Check whether the domain only uses "Highly Restricted" Unicode
+ ;; IDNA characters. If not, transform to punycode to indicate that
+ ;; there may be funny business going on.
+ (let ((parsed (url-generic-parse-url url)))
+ (unless (puny-highly-restrictive-domain-p (url-host parsed))
+ (setf (url-host parsed) (puny-encode-domain (url-host parsed)))
+ (setq url (url-recreate-url parsed))))
(plist-put eww-data :url url)
(plist-put eww-data :title "")
(eww-update-header-line-format)
(source (and (null document)
(buffer-substring (point) (point-max)))))
(with-current-buffer buffer
- (setq bidi-paragraph-direction 'left-to-right)
+ (setq bidi-paragraph-direction nil)
(plist-put eww-data :source source)
(plist-put eww-data :dom document)
(let ((inhibit-read-only t)
(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)
(let ((inhibit-read-only t))
(remove-overlays)
(erase-buffer))
- (setq bidi-paragraph-direction 'left-to-right)
+ (setq bidi-paragraph-direction nil)
(unless (eq major-mode 'eww-mode)
(eww-mode)))
(setq score (- (length (split-string (dom-text node))))))
(t
(dolist (elem (dom-children node))
- (if (stringp elem)
- (setq score (+ score (length (split-string elem))))
+ (cond
+ ((stringp elem)
+ (setq score (+ score (length (split-string elem)))))
+ ((consp elem)
(setq score (+ score
(or (cdr (assoc :eww-readability-score (cdr elem)))
- (eww-score-readability elem))))))))
+ (eww-score-readability elem)))))))))
;; Cache the score of the node to avoid recomputing all the time.
(dom-set-attribute node :eww-readability-score score)
score))
(define-key map "R" 'eww-readable)
(define-key map "H" 'eww-list-histories)
(define-key map "E" 'eww-set-character-encoding)
+ (define-key map "s" 'eww-switch-to-buffer)
(define-key map "S" 'eww-list-buffers)
(define-key map "F" 'eww-toggle-fonts)
(define-key map "D" 'eww-toggle-paragraph-direction)
+ (define-key map [(meta C)] 'eww-toggle-colors)
(define-key map "b" 'eww-add-bookmark)
(define-key map "B" 'eww-list-bookmarks)
["View page source" eww-view-source]
["Copy page URL" eww-copy-page-url t]
["List histories" eww-list-histories t]
+ ["Switch to buffer" eww-switch-to-buffer t]
["List buffers" eww-list-buffers t]
["Add bookmark" eww-add-bookmark t]
["List bookmarks" eww-list-bookmarks t]
["List cookies" url-cookie-list t]
+ ["Toggle fonts" eww-toggle-fonts t]
+ ["Toggle colors" eww-toggle-colors t]
["Character Encoding" eww-set-character-encoding]
["Toggle Paragraph Direction" eww-toggle-paragraph-direction]))
map))
(eww-reload nil 'utf-8)
(eww-reload nil charset)))
+(defun eww-switch-to-buffer ()
+ "Prompt for an EWW buffer to display in the selected window."
+ (interactive)
+ (let ((completion-extra-properties
+ '(:annotation-function (lambda (buf)
+ (with-current-buffer buf
+ (format " %s" (eww-current-url)))))))
+ (pop-to-buffer-same-window
+ (read-buffer "Switch to EWW buffer: "
+ (cl-loop for buf in (nreverse (buffer-list))
+ if (with-current-buffer buf (derived-mode-p 'eww-mode))
+ return buf)
+ t
+ (lambda (bufn)
+ (with-current-buffer
+ (if (consp bufn) (cdr bufn) (get-buffer bufn))
+ (derived-mode-p 'eww-mode)))))))
+
(defun eww-toggle-fonts ()
"Toggle whether to use monospaced or font-enabled layouts."
(interactive)
(message "Proportional fonts are now %s"
(if shr-use-fonts "on" "off")))
+(defun eww-toggle-colors ()
+ "Toggle whether to use HTML-specified colors or not."
+ (interactive)
+ (message "Colors are now %s"
+ (if (setq shr-use-colors (not shr-use-colors))
+ "on"
+ "off"))
+ (eww-reload))
+
;;; Bookmarks code
(defvar eww-bookmarks nil)
;; This package provides language bindings for the GnuTLS library
;; using the corresponding core functions in gnutls.c. It should NOT
-;; be used directly, only through open-protocol-stream.
+;; be used directly, only through open-network-stream.
;; Simple test:
;;
(integer :tag "Number of bits" 512))
:group 'gnutls)
-(defun open-gnutls-stream (name buffer host service)
+(defun open-gnutls-stream (name buffer host service &optional nowait)
"Open a SSL/TLS connection for a service to a host.
Returns a subprocess-object to represent the connection.
Input and output work as for subprocesses; `delete-process' closes it.
Third arg is name of the host to connect to, or its IP address.
Fourth arg SERVICE is name of the service desired, or an integer
specifying a port number to connect to.
+Fifth arg NOWAIT (which is optional) means that the socket should
+be opened asynchronously. The connection process will be
+returned to the caller before TLS negotiation has happened.
Usage example:
documentation for the specific parameters you can use to open a
GnuTLS connection, including specifying the credential type,
trust and key files, and priority string."
- (gnutls-negotiate :process (open-network-stream name buffer host service)
- :type 'gnutls-x509pki
- :hostname host))
+ (let ((process (open-network-stream
+ name buffer host service
+ :nowait nowait
+ :tls-parameters
+ (and nowait
+ (cons 'gnutls-x509pki
+ (gnutls-boot-parameters
+ :type 'gnutls-x509pki
+ :hostname host))))))
+ (if nowait
+ process
+ (gnutls-negotiate :process process
+ :type 'gnutls-x509pki
+ :hostname host))))
(define-error 'gnutls-error "GnuTLS error")
&allow-other-keys)
"Negotiate a SSL/TLS connection. Returns proc. Signals gnutls-error.
-Note arguments are passed CL style, :type TYPE instead of just TYPE.
+Note that arguments are passed CL style, :type TYPE instead of just TYPE.
-TYPE is `gnutls-x509pki' (default) or `gnutls-anon'. Use nil for the default.
PROCESS is a process returned by `open-network-stream'.
+For the meaning of the rest of the parameters, see `gnutls-boot-parameters'."
+ (let* ((type (or type 'gnutls-x509pki))
+ ;; The gnutls library doesn't understand files delivered via
+ ;; the special handlers, so ignore all files found via those.
+ (file-name-handler-alist nil)
+ (params (gnutls-boot-parameters
+ :type type
+ :hostname hostname
+ :priority-string priority-string
+ :trustfiles trustfiles
+ :crlfiles crlfiles
+ :keylist keylist
+ :min-prime-bits min-prime-bits
+ :verify-flags verify-flags
+ :verify-error verify-error
+ :verify-hostname-error verify-hostname-error))
+ ret)
+ (gnutls-message-maybe
+ (setq ret (gnutls-boot process type
+ (append (list :complete-negotiation t)
+ params)))
+ "boot: %s" params)
+
+ (when (gnutls-errorp ret)
+ ;; This is a error from the underlying C code.
+ (signal 'gnutls-error (list process ret)))
+
+ process))
+
+(cl-defun gnutls-boot-parameters
+ (&rest spec
+ &key type hostname priority-string
+ trustfiles crlfiles keylist min-prime-bits
+ verify-flags verify-error verify-hostname-error
+ &allow-other-keys)
+ "Return a keyword list of parameters suitable for passing to `gnutls-boot'.
+
+TYPE is `gnutls-x509pki' (default) or `gnutls-anon'. Use nil for the default.
HOSTNAME is the remote hostname. It must be a valid string.
PRIORITY-STRING is as per the GnuTLS docs, default is \"NORMAL\".
TRUSTFILES is a list of CA bundles. It defaults to `gnutls-trustfiles'.
It must be omitted, a number, or nil; if omitted or nil it
defaults to GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT."
- (let* ((type (or type 'gnutls-x509pki))
- ;; The gnutls library doesn't understand files delivered via
- ;; the special handlers, so ignore all files found via those.
- (file-name-handler-alist nil)
- (trustfiles (or trustfiles (gnutls-trustfiles)))
- (priority-string (or priority-string
- (cond
- ((eq type 'gnutls-anon)
- "NORMAL:+ANON-DH:!ARCFOUR-128")
- ((eq type 'gnutls-x509pki)
- (if gnutls-algorithm-priority
- (upcase gnutls-algorithm-priority)
- "NORMAL")))))
- (verify-error (or verify-error
- ;; this uses the value of `gnutls-verify-error'
- (cond
- ;; if t, pass it on
- ((eq gnutls-verify-error t)
- t)
- ;; if a list, look for hostname matches
- ((listp gnutls-verify-error)
- (apply 'append
- (mapcar
- (lambda (check)
- (when (string-match (nth 0 check)
- hostname)
- (nth 1 check)))
- gnutls-verify-error)))
- ;; else it's nil
- (t nil))))
- (min-prime-bits (or min-prime-bits gnutls-min-prime-bits))
- params ret)
+ (let ((trustfiles (or trustfiles (gnutls-trustfiles)))
+ (priority-string (or priority-string
+ (cond
+ ((eq type 'gnutls-anon)
+ "NORMAL:+ANON-DH:!ARCFOUR-128")
+ ((eq type 'gnutls-x509pki)
+ (if gnutls-algorithm-priority
+ (upcase gnutls-algorithm-priority)
+ "NORMAL")))))
+ (verify-error (or verify-error
+ ;; this uses the value of `gnutls-verify-error'
+ (cond
+ ;; if t, pass it on
+ ((eq gnutls-verify-error t)
+ t)
+ ;; if a list, look for hostname matches
+ ((listp gnutls-verify-error)
+ (apply 'append
+ (mapcar
+ (lambda (check)
+ (when (string-match (nth 0 check)
+ hostname)
+ (nth 1 check)))
+ gnutls-verify-error)))
+ ;; else it's nil
+ (t nil))))
+ (min-prime-bits (or min-prime-bits gnutls-min-prime-bits)))
(when verify-hostname-error
(push :hostname verify-error))
- (setq params `(:priority ,priority-string
- :hostname ,hostname
- :loglevel ,gnutls-log-level
- :min-prime-bits ,min-prime-bits
- :trustfiles ,trustfiles
- :crlfiles ,crlfiles
- :keylist ,keylist
- :verify-flags ,verify-flags
- :verify-error ,verify-error
- :callbacks nil))
-
- (gnutls-message-maybe
- (setq ret (gnutls-boot process type params))
- "boot: %s" params)
-
- (when (gnutls-errorp ret)
- ;; This is a error from the underlying C code.
- (signal 'gnutls-error (list process ret)))
-
- process))
+ `(:priority ,priority-string
+ :hostname ,hostname
+ :loglevel ,gnutls-log-level
+ :min-prime-bits ,min-prime-bits
+ :trustfiles ,trustfiles
+ :crlfiles ,crlfiles
+ :keylist ,keylist
+ :verify-flags ,verify-flags
+ :verify-error ,verify-error
+ :callbacks nil)))
(defun gnutls-trustfiles ()
"Return a list of usable trustfiles."
(eval-when-compile (require 'cl))
(autoload 'mail-header-parse-content-type "mail-parse")
-;; `mm-delete-duplicates' is an alias for `delete-dups' in Emacs 22.
-(defalias 'mailcap-delete-duplicates
- (if (fboundp 'delete-dups)
- 'delete-dups
- (autoload 'mm-delete-duplicates "mm-util")
- 'mm-delete-duplicates))
-
-;; `mailcap-replace-in-string' is an alias like `gnus-replace-in-string'.
-(eval-and-compile
- (cond
- ((fboundp 'replace-regexp-in-string)
- (defun mailcap-replace-in-string (string regexp newtext &optional literal)
- "Replace all matches for REGEXP with NEWTEXT in STRING.
-If LITERAL is non-nil, insert NEWTEXT literally. Return a new
-string containing the replacements.
-This is a compatibility function for different Emacsen."
- (replace-regexp-in-string regexp newtext string nil literal)))
- ((fboundp 'replace-in-string)
- (defalias 'mailcap-replace-in-string 'replace-in-string))))
-
(defgroup mailcap nil
"Definition of viewers for MIME types."
:version "21.1"
table)
"A syntax table for parsing SGML attributes.")
-(eval-and-compile
- (when (featurep 'xemacs)
- (condition-case nil
- (require 'lpr)
- (error nil))))
-
(defvar mailcap-print-command
(mapconcat 'identity
(cons (if (boundp 'lpr-command)
" ")
"Shell command (including switches) used to print PostScript files.")
+(defun mailcap--get-user-mime-data (sym)
+ (let ((val (default-value sym))
+ res)
+ (dolist (entry val)
+ (setq res (cons (list (cdr (assq 'viewer entry))
+ (cdr (assq 'type entry))
+ (cdr (assq 'test entry)))
+ res)))
+ (nreverse res)))
+
+(defun mailcap--set-user-mime-data (sym val)
+ (let (res)
+ (dolist (entry val)
+ (setq res (cons `((viewer . ,(car entry))
+ (type . ,(cadr entry))
+ ,@(when (caddr entry)
+ `((test . ,(caddr entry)))))
+ res)))
+ (set-default sym (nreverse res))))
+
+(defcustom mailcap-user-mime-data nil
+ "A list of viewers preferred for different MIME types.
+The elements of the list are alists of the following structure
+
+ ((viewer . VIEWER)
+ (type . MIME-TYPE)
+ (test . TEST))
+
+where VIEWER is either a lisp command, e.g., a major-mode, or a
+string containing a shell command for viewing files of the
+defined MIME-TYPE. In case of a shell command, %s will be
+replaced with the file.
+
+MIME-TYPE is a regular expression being matched against the
+actual MIME type. It is implicitly surrounded with ^ and $.
+
+TEST is an lisp form which is evaluated in order to test if the
+entry should be chosen. The `test' entry is optional.
+
+When selecting a viewer for a given MIME type, the first viewer
+in this list with a matching MIME-TYPE and successful TEST is
+selected. Only if none matches, the standard `mailcap-mime-data'
+is consulted."
+ :type '(repeat
+ (list
+ (choice (function :tag "Function or mode")
+ (string :tag "Shell command"))
+ (regexp :tag "MIME Type")
+ (sexp :tag "Test (optional)")))
+ :get #'mailcap--get-user-mime-data
+ :set #'mailcap--set-user-mime-data
+ :group 'mailcap)
+
;; Postpone using defcustom for this as it's so big and we essentially
;; have to have two copies of the data around then. Perhaps just
;; customize the Lisp viewers and rely on the normal configuration
t)
(t nil))))
+(defun mailcap-select-preferred-viewer (type-info)
+ "Return an applicable viewer entry from `mailcap-user-mime-data'."
+ (let ((info (mapcar (lambda (a) (cons (symbol-name (car a))
+ (cdr a)))
+ (cdr type-info)))
+ viewer)
+ (dolist (entry mailcap-user-mime-data)
+ (when (and (null viewer)
+ (string-match (concat "^" (cdr (assq 'type entry)) "$")
+ (car type-info))
+ (mailcap-viewer-passes-test entry info))
+ (setq viewer entry)))
+ viewer))
+
(defun mailcap-mime-info (string &optional request no-decode)
"Get the MIME viewer command for STRING, return nil if none found.
Expects a complete content-type header line as its argument.
(if no-decode
(list (or string "text/plain"))
(mail-header-parse-content-type (or string "text/plain"))))
- (setq major (split-string (car ctl) "/"))
- (setq minor (cadr major)
- major (car major))
- (when (setq major-info (cdr (assoc major mailcap-mime-data)))
- (when (setq viewers (mailcap-possible-viewers major-info minor))
- (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
- (cdr a)))
- (cdr ctl)))
- (while viewers
- (if (mailcap-viewer-passes-test (car viewers) info)
- (setq passed (cons (car viewers) passed)))
- (setq viewers (cdr viewers)))
- (setq passed (sort passed 'mailcap-viewer-lessp))
- (setq viewer (car passed))))
- (when (and (stringp (cdr (assq 'viewer viewer)))
- passed)
- (setq viewer (car passed)))
+ ;; Check if there's a user-defined viewer from `mailcap-user-mime-data'.
+ (setq viewer (mailcap-select-preferred-viewer ctl))
+ (if viewer
+ (setq passed (list viewer))
+ ;; None found, so heuristically select some applicable viewer
+ ;; from `mailcap-mime-data'.
+ (setq major (split-string (car ctl) "/"))
+ (setq minor (cadr major)
+ major (car major))
+ (when (setq major-info (cdr (assoc major mailcap-mime-data)))
+ (when (setq viewers (mailcap-possible-viewers major-info minor))
+ (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
+ (cdr a)))
+ (cdr ctl)))
+ (while viewers
+ (if (mailcap-viewer-passes-test (car viewers) info)
+ (setq passed (cons (car viewers) passed)))
+ (setq viewers (cdr viewers)))
+ (setq passed (sort passed 'mailcap-viewer-lessp))
+ (setq viewer (car passed))))
+ (when (and (stringp (cdr (assq 'viewer viewer)))
+ passed)
+ (setq viewer (car passed))))
(cond
((and (null viewer) (not (equal major "default")) request)
- (mailcap-mime-info "default" request no-decode))
+ (mailcap-mime-info "default" request no-decode))
((or (null request) (equal request ""))
- (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
+ (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
((stringp request)
- (mailcap-unescape-mime-test
- (cdr-safe (assoc request viewer)) info))
+ (mailcap-unescape-mime-test
+ (cdr-safe (assoc request viewer)) info))
((eq request 'all)
- passed)
+ passed)
(t
- ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
- (setq viewer (copy-sequence viewer))
- (let ((view (assq 'viewer viewer))
- (test (assq 'test viewer)))
- (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
- (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
- viewer)))))
+ ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
+ (setq viewer (copy-sequence viewer))
+ (let ((view (assq 'viewer viewer))
+ (test (assq 'test viewer)))
+ (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
+ (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
+ viewer)))))
;;;
;;; Experimental MIME-types parsing
(defun mailcap-mime-types ()
"Return a list of MIME media types."
(mailcap-parse-mimetypes)
- (mailcap-delete-duplicates
+ (delete-dups
(nconc
(mapcar 'cdr mailcap-mime-extensions)
(apply
(mailcap-parse-mimetypes)
(let* ((all-mime-type
;; All unique MIME types from file extensions
- (mailcap-delete-duplicates
+ (delete-dups
(mapcar (lambda (file)
(mailcap-extension-to-mime
(file-name-extension file t)))
files)))
(all-mime-info
;; All MIME info lists
- (mailcap-delete-duplicates
+ (delete-dups
(mapcar (lambda (mime-type)
(mailcap-mime-info mime-type 'all))
all-mime-type)))
(car all-mime-info)))
(commands
;; Command strings from `viewer' field of the MIME info
- (mailcap-delete-duplicates
- (delq nil (mapcar (lambda (mime-info)
- (let ((command (cdr (assoc 'viewer mime-info))))
- (if (stringp command)
- (mailcap-replace-in-string
- ;; Replace mailcap's `%s' placeholder
- ;; with dired's `?' placeholder
- (mailcap-replace-in-string
- ;; Remove the final filename placeholder
- command "[ \t\n]*\\('\\)?%s\\1?[ \t\n]*\\'" "" t)
- "%s" "?" t))))
+ (delete-dups
+ (delq nil (mapcar
+ (lambda (mime-info)
+ (let ((command (cdr (assoc 'viewer mime-info))))
+ (if (stringp command)
+ (replace-regexp-in-string
+ ;; Replace mailcap's `%s' placeholder
+ ;; with dired's `?' placeholder
+ "%s" "?"
+ (replace-regexp-in-string
+ ;; Remove the final filename placeholder
+ "[ \t\n]*\\('\\)?%s\\1?[ \t\n]*\\'" ""
+ command nil t)
+ nil t))))
common-mime-info)))))
commands))
;; On GNU/Linux and Irix, the system's ping program seems to send packets
;; indefinitely unless told otherwise
(defcustom ping-program-options
- (and (memq system-type '(gnu/linux irix))
+ (and (eq system-type 'gnu/linux)
(list "-c" "4"))
"Options for the ping program.
These options can be used to limit how many ICMP packets are emitted."
(require 'starttls)
(require 'auth-source)
(require 'nsm)
+(require 'puny)
(autoload 'gnutls-negotiate "gnutls")
(autoload 'open-gnutls-stream "gnutls")
Process output goes at end of that buffer. BUFFER may be nil,
meaning that the process is not associated with any buffer.
HOST is the name or IP address of the host to connect to.
-SERVICE is the name of the service desired, or an integer specifying
- a port number to connect to.
+SERVICE is the name of the service desired, or an integer or
+ integer string specifying a port number to connect to.
The remaining PARAMETERS should be a sequence of keywords and
values:
:nogreeting is a boolean that can be used to inhibit waiting for
a greeting from the server.
-:nowait is a boolean that says the connection should be made
-asynchronously, if possible."
+:nowait, if non-nil, says the connection should be made
+asynchronously, if possible.
+
+:tls-parameters is a list that should be supplied if you're
+opening a TLS connection. The first element is the TLS
+type (either `gnutls-x509pki' or `gnutls-anon'), and the
+remaining elements should be a keyword list accepted by
+gnutls-boot (as returned by `gnutls-boot-parameters')."
(unless (featurep 'make-network-process)
(error "Emacs was compiled without networking support"))
(let ((type (plist-get parameters :type))
(plist-get parameters :capability-command))))))
;; The simplest case: wrapper around `make-network-process'.
(make-network-process :name name :buffer buffer
- :host host :service service
- :nowait (plist-get parameters :nowait))
+ :host (puny-encode-domain host) :service service
+ :nowait (plist-get parameters :nowait)
+ :tls-parameters
+ (plist-get parameters :tls-parameters))
(let ((work-buffer (or buffer
(generate-new-buffer " *stream buffer*")))
(fun (cond ((and (eq type 'plain)
;;;###autoload
(defalias 'open-protocol-stream 'open-network-stream)
+(define-obsolete-function-alias 'open-protocol-stream 'open-network-stream
+ "25.2")
(defun network-stream-open-plain (name buffer host service parameters)
(let ((start (with-current-buffer buffer (point)))
(stream (make-network-process :name name :buffer buffer
- :host host :service service
+ :host (puny-encode-domain host)
+ :service service
:nowait (plist-get parameters :nowait))))
(when (plist-get parameters :warn-unless-encrypted)
(setq stream (nsm-verify-connection stream host service nil t)))
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
(unless require-tls
(setq stream
(make-network-process :name name :buffer buffer
- :host host :service service))
+ :host (puny-encode-domain host)
+ :service service))
(network-stream-get-response stream start eoc)))
+ (unless (process-live-p stream)
+ (error "Unable to negotiate a TLS connection with %s/%s"
+ host service))
;; Re-get the capabilities, which may have now changed.
(setq capabilities
(network-stream-command stream capability-command eo-capa))))
(with-current-buffer buffer
(let* ((start (point-max))
(stream
- (funcall (if (gnutls-available-p)
- 'open-gnutls-stream
- 'open-tls-stream)
- name buffer host service))
+ (if (gnutls-available-p)
+ (open-gnutls-stream name buffer host service
+ (plist-get parameters :nowait))
+ (open-tls-stream name buffer host service)))
(eoc (plist-get parameters :end-of-command)))
- ;; Check certificate validity etc.
- (when (and (gnutls-available-p) stream)
- (setq stream (nsm-verify-connection stream host service)))
- (if (null stream)
- (list nil nil nil 'plain)
- ;; If we're using tls.el, we have to delete the output from
- ;; openssl/gnutls-cli.
- (when (and (not (gnutls-available-p))
- eoc)
- (network-stream-get-response stream start eoc)
- (goto-char (point-min))
- (when (re-search-forward eoc nil t)
- (goto-char (match-beginning 0))
- (delete-region (point-min) (line-beginning-position))))
- (let ((capability-command (plist-get parameters :capability-command))
- (eo-capa (or (plist-get parameters :end-of-capability)
- eoc)))
- (list stream
- (network-stream-get-response stream start eoc)
- (network-stream-command stream capability-command eo-capa)
- 'tls))))))
+ (if (plist-get parameters :nowait)
+ (list stream nil nil 'tls)
+ ;; Check certificate validity etc.
+ (when (and (gnutls-available-p) stream)
+ (setq stream (nsm-verify-connection stream host service)))
+ (if (null stream)
+ (list nil nil nil 'plain)
+ ;; If we're using tls.el, we have to delete the output from
+ ;; openssl/gnutls-cli.
+ (when (and (not (gnutls-available-p))
+ eoc)
+ (network-stream-get-response stream start eoc)
+ (goto-char (point-min))
+ (when (re-search-forward eoc nil t)
+ (goto-char (match-beginning 0))
+ (delete-region (point-min) (line-beginning-position))))
+ (let ((capability-command (plist-get parameters :capability-command))
+ (eo-capa (or (plist-get parameters :end-of-capability)
+ eoc)))
+ (list stream
+ (network-stream-get-response stream start eoc)
+ (network-stream-command stream capability-command eo-capa)
+ 'tls)))))))
(defun network-stream-open-shell (name buffer host service parameters)
(require 'format-spec)
nil
(let ((response
(condition-case nil
- (nsm-query-user message args (nsm-format-certificate status))
+ (intern
+ (car (split-string
+ (nsm-query-user message args
+ (nsm-format-certificate status))))
+ obarray)
;; Make sure we manage to close the process if the user hits
;; `C-g'.
(quit 'no)
(error 'no))))
(if (eq response 'no)
- nil
+ (progn
+ (message "Aborting connection to %s:%s" host port)
+ nil)
+ (message (if (eq response 'session)
+ "Accepting certificate for %s:%s this session only"
+ "Permanently accepting certificate for %s:%s")
+ host port)
(nsm-save-host host port status what response)
t))))
(defun nsm-query-user (message args cert)
(let ((buffer (get-buffer-create "*Network Security Manager*")))
(save-window-excursion
+ ;; First format the certificate and warnings.
(with-help-window buffer
(with-current-buffer buffer
(erase-buffer)
;; Fill the first line of the message, which usually
;; contains lots of explanatory text.
(fill-region (point) (line-end-position)))))
- (let ((responses '((?n . no)
- (?s . session)
- (?a . always)))
- (prefix "")
- (cursor-in-echo-area t)
- response)
- (while (not response)
- (setq response
- (cdr
- (assq (downcase
- (read-char
- (concat prefix
- "Continue connecting? (No, Session only, Always) ")))
- responses)))
- (unless response
- (ding)
- (setq prefix "Invalid choice. ")))
- (kill-buffer buffer)
- ;; If called from a callback, `read-char' will insert things
- ;; into the pending input. Clear that.
- (clear-this-command-keys)
- response))))
+ ;; Then ask the user what to do about it.
+ (unwind-protect
+ (cadr
+ (read-multiple-choice
+ "Continue connecting?"
+ '((?a "always" "Accept this certificate this session and for all future sessions.")
+ (?s "session only" "Accept this certificate this session only.")
+ (?n "no" "Refuse to use this certificate, and close the connection."))))
+ (kill-buffer buffer)))))
(defun nsm-save-host (host port status what permanency)
(let* ((id (nsm-id host port))
(eval-when-compile (require 'cl))
-(eval-and-compile
- ;; In Emacs 24, `open-protocol-stream' is an autoloaded alias for
- ;; `make-network-stream'.
- (unless (fboundp 'open-protocol-stream)
- (require 'proto-stream)))
-
(require 'mail-utils)
(defvar parse-time-months)
(const :tag "SSL/TLS" ssl)
(const starttls)))
-(eval-and-compile
- (if (fboundp 'set-process-query-on-exit-flag)
- (defalias 'pop3-set-process-query-on-exit-flag
- 'set-process-query-on-exit-flag)
- (defalias 'pop3-set-process-query-on-exit-flag
- 'process-kill-without-query)))
-
(defun pop3-open-server (mailhost port)
"Open TCP connection to MAILHOST on PORT.
Returns the process associated with the connection."
(erase-buffer)
(setq pop3-read-point (point-min))
(setq result
- (open-protocol-stream
+ (open-network-stream
"POP" (current-buffer) mailhost port
:type (cond
((or (eq pop3-stream-type 'ssl)
(setq pop3-timestamp
(substring response (or (string-match "<" response) 0)
(+ 1 (or (string-match ">" response) -1)))))
- (pop3-set-process-query-on-exit-flag (car result) nil)
+ (set-process-query-on-exit-flag (car result) nil)
(erase-buffer)
(car result)))))
(format " %s "
(capitalize (car (rassoc (nth 4 (decode-time now))
parse-time-months))))
- (format-time-string "%Y %H:%M:%S " now)
- ;; We do all of this because XEmacs doesn't have the %z spec.
- (format "%s%02d%02d" sign (/ zone 3600) (/ (% zone 3600) 60)))))
+ (format-time-string "%Y %H:%M:%S %z" now))))
(defun pop3-munge-message-separator (start end)
"Check to see if a message separator exists. If not, generate one."
--- /dev/null
+;;; puny.el --- translate non-ASCII domain names to ASCII
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: mail, net
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Written by looking at
+;; http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion
+
+;;; Code:
+
+(require 'seq)
+
+(defun puny-encode-domain (domain)
+ "Encode DOMAIN according to the IDNA/punycode algorithm.
+For instance, \"fśf.org\" => \"xn--ff-2sa.org\"."
+ ;; The vast majority of domain names are not IDNA domain names, so
+ ;; add a check first to avoid doing unnecessary work.
+ (if (string-match "\\'[[:ascii:]]+\\'" domain)
+ domain
+ (mapconcat 'puny-encode-string (split-string domain "[.]") ".")))
+
+(defun puny-encode-string (string)
+ "Encode STRING according to the IDNA/punycode algorithm.
+This is used to encode non-ASCII domain names.
+For instance, \"bücher\" => \"xn--bcher-kva\"."
+ (let ((ascii (seq-filter (lambda (char)
+ (< char 128))
+ string)))
+ (if (= (length ascii) (length string))
+ string
+ (concat "xn--"
+ (if (null ascii)
+ ""
+ (concat ascii "-"))
+ (puny-encode-complex (length ascii) string)))))
+
+(defun puny-decode-domain (domain)
+ "Decode DOMAIN according to the IDNA/punycode algorithm.
+For instance, \"xn--ff-2sa.org\" => \"fśf.org\"."
+ (mapconcat 'puny-decode-string (split-string domain "[.]") "."))
+
+(defun puny-decode-string (string)
+ "Decode an IDNA/punycode-encoded string.
+For instance \"xn--bcher-kva\" => \"bücher\"."
+ (if (string-match "\\`xn--" string)
+ (puny-decode-string-internal (substring string 4))
+ string))
+
+(defconst puny-initial-n 128)
+(defconst puny-initial-bias 72)
+(defconst puny-base 36)
+(defconst puny-damp 700)
+(defconst puny-tmin 1)
+(defconst puny-tmax 26)
+(defconst puny-skew 28)
+
+;; 0-25 a-z
+;; 26-36 0-9
+(defun puny-encode-digit (d)
+ (if (< d 26)
+ (+ ?a d)
+ (+ ?0 (- d 26))))
+
+(defun puny-adapt (delta num-points first-time)
+ (let ((delta (if first-time
+ (/ delta puny-damp)
+ (/ delta 2)))
+ (k 0))
+ (setq delta (+ delta (/ delta num-points)))
+ (while (> delta (/ (* (- puny-base puny-tmin)
+ puny-tmax)
+ 2))
+ (setq delta (/ delta (- puny-base puny-tmin))
+ k (+ k puny-base)))
+ (+ k (/ (* (1+ (- puny-base puny-tmin)) delta)
+ (+ delta puny-skew)))))
+
+(defun puny-encode-complex (insertion-points string)
+ (let ((n puny-initial-n)
+ (delta 0)
+ (bias puny-initial-bias)
+ (h insertion-points)
+ result m ijv q)
+ (while (< h (length string))
+ (setq ijv (cl-loop for char across string
+ when (>= char n)
+ minimize char))
+ (setq m ijv)
+ (setq delta (+ delta (* (- m n) (+ h 1)))
+ n m)
+ (cl-loop for char across string
+ when (< char n)
+ do (cl-incf delta)
+ when (= char ijv)
+ do (progn
+ (setq q delta)
+ (cl-loop with k = puny-base
+ for t1 = (cond
+ ((<= k bias)
+ puny-tmin)
+ ((>= k (+ bias puny-tmax))
+ puny-tmax)
+ (t
+ (- k bias)))
+ while (>= q t1)
+ do (push (puny-encode-digit
+ (+ t1 (mod (- q t1)
+ (- puny-base t1))))
+ result)
+ do (setq q (/ (- q t1) (- puny-base t1))
+ k (+ k puny-base)))
+ (push (puny-encode-digit q) result)
+ (setq bias (puny-adapt delta (+ h 1) (= h insertion-points))
+ delta 0
+ h (1+ h))))
+ (cl-incf delta)
+ (cl-incf n))
+ (nreverse result)))
+
+(defun puny-decode-digit (cp)
+ (cond
+ ((<= cp ?9)
+ (+ (- cp ?0) 26))
+ ((<= cp ?Z)
+ (- cp ?A))
+ ((<= cp ?z)
+ (- cp ?a))
+ (t
+ puny-base)))
+
+(defun puny-decode-string-internal (string)
+ (with-temp-buffer
+ (insert string)
+ (goto-char (point-max))
+ (search-backward "-" nil (point-min))
+ ;; The encoded chars are after the final dash.
+ (let ((encoded (buffer-substring (1+ (point)) (point-max)))
+ (ic 0)
+ (i 0)
+ (bias puny-initial-bias)
+ (n puny-initial-n)
+ out)
+ (delete-region (point) (point-max))
+ (while (< ic (length encoded))
+ (let ((old-i i)
+ (w 1)
+ (k puny-base)
+ digit t1)
+ (cl-loop do (progn
+ (setq digit (puny-decode-digit (aref encoded ic)))
+ (cl-incf ic)
+ (cl-incf i (* digit w))
+ (setq t1 (cond
+ ((<= k bias)
+ puny-tmin)
+ ((>= k (+ bias puny-tmax))
+ puny-tmax)
+ (t
+ (- k bias)))))
+ while (>= digit t1)
+ do (setq w (* w (- puny-base t1))
+ k (+ k puny-base)))
+ (setq out (1+ (buffer-size)))
+ (setq bias (puny-adapt (- i old-i) out (= old-i 0))))
+
+ (setq n (+ n (/ i out))
+ i (mod i out))
+ (goto-char (point-min))
+ (forward-char i)
+ (insert (format "%c" n))
+ (cl-incf i)))
+ (buffer-string)))
+
+;; http://www.unicode.org/reports/tr39/#Restriction_Level_Detection
+;; http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Inclusion_in_Identifiers
+
+(defun puny-highly-restrictive-string-p (string)
+ "Say whether STRING is \"highly restrictive\" in the Unicode IDNA sense.
+See http://www.unicode.org/reports/tr39/#Restriction_Level_Detection
+for details. The main idea is that if you're mixing
+scripts (like latin and cyrillic), you may confuse the user by
+using homographs."
+ (let ((scripts
+ (delq
+ t
+ (seq-uniq
+ (seq-map (lambda (char)
+ (if (memq char
+ ;; These characters are always allowed
+ ;; in any string.
+ '(#x0027 ; APOSTROPHE
+ #x002D ; HYPHEN-MINUS
+ #x002E ; FULL STOP
+ #x003A ; COLON
+ #x00B7 ; MIDDLE DOT
+ #x058A ; ARMENIAN HYPHEN
+ #x05F3 ; HEBREW PUNCTUATION GERESH
+ #x05F4 ; HEBREW PUNCTUATION GERSHAYIM
+ #x0F0B ; TIBETAN MARK INTERSYLLABIC TSHEG
+ #x200C ; ZERO WIDTH NON-JOINER*
+ #x200D ; ZERO WIDTH JOINER*
+ #x2010 ; HYPHEN
+ #x2019 ; RIGHT SINGLE QUOTATION MARK
+ #x2027 ; HYPHENATION POINT
+ #x30A0 ; KATAKANA-HIRAGANA DOUBLE HYPHEN
+ #x30FB)) ; KATAKANA MIDDLE DOT
+ t
+ (aref char-script-table char)))
+ string)))))
+ (or
+ ;; Every character uses the same script.
+ (= (length scripts) 1)
+ (seq-some 'identity
+ (mapcar (lambda (list)
+ (seq-every-p (lambda (script)
+ (memq script list))
+ scripts))
+ '((latin han hiragana kana)
+ (latin han bopomofo)
+ (latin han hangul)))))))
+
+(defun puny-highly-restrictive-domain-p (domain)
+ "Say whether DOMAIN is \"highly restrictive\" in the Unicode IDNA sense.
+See `puny-highly-restrictive-string-p' for further details."
+ (seq-every-p 'puny-highly-restrictive-string-p (split-string domain "[.]")))
+
+(provide 'puny)
+
+;;; puny.el ends here
`:encryption'
VALUE must be `plain' (the default) for unencrypted connections, or `tls'
-for connections using SSL/TLS."
+for connections using SSL/TLS.
+
+`:server-alias'
+
+VALUE must be a string that will be used instead of the server name for
+display purposes. If absent, the real server name will be displayed instead."
:type '(alist :key-type string
:value-type (plist :options
((:nick string)
(:full-name string)
(:channels (repeat string))
(:encryption (choice (const tls)
- (const plain))))))
+ (const plain)))
+ (:server-alias string))))
:group 'rcirc)
(defcustom rcirc-default-port 6667
(channels (plist-get (cdr c) :channels))
(password (plist-get (cdr c) :password))
(encryption (plist-get (cdr c) :encryption))
+ (server-alias (plist-get (cdr c) :server-alias))
contact)
(when server
(let (connected)
(dolist (p (rcirc-process-list))
- (when (string= server (process-name p))
+ (when (string= (or server-alias server) (process-name p))
(setq connected p)))
(if (not connected)
(condition-case nil
(rcirc-connect server port nick user-name
- full-name channels password encryption)
- (quit (message "Quit connecting to %s" server)))
+ full-name channels password encryption
+ server-alias)
+ (quit (message "Quit connecting to %s"
+ (or server-alias server))))
(with-current-buffer (process-buffer connected)
(setq contact (process-contact
- (get-buffer-process (current-buffer)) :host))
+ (get-buffer-process (current-buffer)) :name))
(setq connected-servers
- (cons (if (stringp contact) contact server)
+ (cons (if (stringp contact)
+ contact (or server-alias server))
connected-servers))))))))
(when connected-servers
(message "Already connected to %s"
;;;###autoload
(defun rcirc-connect (server &optional port nick user-name
- full-name startup-channels password encryption)
+ full-name startup-channels password encryption
+ server-alias)
(save-excursion
- (message "Connecting to %s..." server)
+ (message "Connecting to %s..." (or server-alias server))
(let* ((inhibit-eol-conversion)
(port-number (if port
(if (stringp port)
(full-name (or full-name rcirc-default-full-name))
(startup-channels startup-channels)
(process (open-network-stream
- server nil server port-number
+ (or server-alias server) nil server port-number
:type (or encryption 'plain))))
;; set up process
(set-process-coding-system process 'raw-text 'raw-text)
password encryption))
(setq-local rcirc-process process)
(setq-local rcirc-server server)
- (setq-local rcirc-server-name server) ; Update when we get 001 response.
+ (setq-local rcirc-server-name
+ (or server-alias server)) ; Update when we get 001 response.
(setq-local rcirc-buffer-alist nil)
(setq-local rcirc-nick-table (make-hash-table :test 'equal))
(setq-local rcirc-nick nick)
(setq rcirc-keepalive-timer
(run-at-time 0 (/ rcirc-timeout-seconds 2) 'rcirc-keepalive)))
- (message "Connecting to %s...done" server)
+ (message "Connecting to %s...done" (or server-alias server))
;; return process object
process)))
(require 'subr-x)
(require 'dom)
(require 'seq)
+(require 'svg)
(defgroup shr nil
"Simple HTML Renderer"
: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."
(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)
(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)
(define-key map "w" 'shr-copy-url)
(define-key map "u" 'shr-copy-url)
(define-key map "v" 'shr-browse-url)
- (define-key map "o" 'shr-save-contents)
+ (define-key map "O" 'shr-save-contents)
(define-key map "\r" 'shr-browse-url)
map))
+(defvar shr-image-map
+ (let ((map (copy-keymap shr-map)))
+ (when (boundp 'image-map)
+ (set-keymap-parent map image-map))
+ map))
+
;; Public functions and commands.
(declare-function libxml-parse-html-region "xml.c"
(start end &optional base-url discard-comments))
(set-window-hscroll nil 0)
(shr-descend dom)
(shr-fill-lines start (point))
- (shr-remove-trailing-whitespace start (point))
+ (shr--remove-blank-lines-at-the-end start (point))
(when shr-warning
(message "%s" shr-warning))))
-(defun shr-remove-trailing-whitespace (start end)
- (let ((width (window-width)))
- (save-restriction
+(defun shr--remove-blank-lines-at-the-end (start end)
+ (save-restriction
+ (save-excursion
(narrow-to-region start end)
- (goto-char start)
- (while (not (eobp))
- (end-of-line)
- (when (> (shr-previous-newline-padding-width (current-column)) width)
- (dolist (overlay (overlays-at (point)))
- (when (overlay-get overlay 'before-string)
- (overlay-put overlay 'before-string nil))))
- (forward-line 1)))))
+ (goto-char end)
+ (when (and (re-search-backward "[^ \n]" nil t)
+ (not (eobp)))
+ (forward-line 1)
+ (delete-region (point) (point-max))))))
(defun shr-copy-url (&optional image-url)
"Copy the URL under point to the kill ring.
(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))
(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
(insert string)
(shr-pixel-column))))
+(defsubst shr--translate-insertion-chars ()
+ ;; Remove soft hyphens.
+ (goto-char (point-min))
+ (while (search-forward "" nil t)
+ (replace-match "" t t))
+ ;; Translate non-breaking spaces into real spaces.
+ (goto-char (point-min))
+ (while (search-forward " " nil t)
+ (replace-match " " t t)))
+
(defun shr-insert (text)
(when (and (not (bolp))
(get-text-property (1- (point)) 'image-url))
(insert text)
(save-restriction
(narrow-to-region start (point))
- ;; Remove soft hyphens.
- (goto-char (point-min))
- (while (search-forward "" nil t)
- (replace-match "" t t))
+ (shr--translate-insertion-chars)
(goto-char (point-max)))))
(t
(let ((font-start (point)))
- (when (and (string-match "\\`[ \t\n\r ]" text)
+ (when (and (string-match "\\`[ \t\n\r]" text)
(not (bolp))
(not (eq (char-after (1- (point))) ? )))
(insert " "))
(save-restriction
(narrow-to-region start (point))
(goto-char start)
- (when (looking-at "[ \t\n\r ]+")
+ (when (looking-at "[ \t\n\r]+")
(replace-match "" t t))
- (while (re-search-forward "[ \t\n\r ]+" nil t)
+ (while (re-search-forward "[ \t\n\r]+" nil t)
(replace-match " " t t))
- ;; Remove soft hyphens.
- (goto-char (point-min))
- (while (search-forward "" nil t)
- (replace-match "" t t))
+ (shr--translate-insertion-chars)
(goto-char (point-max)))
;; We may have removed everything we inserted if if was just
;; spaces.
(create-image data 'svg t :ascent 100))
((eq size 'full)
(ignore-errors
- (shr-rescale-image data content-type)))
+ (shr-rescale-image data content-type
+ (plist-get flags :width)
+ (plist-get flags :height))))
(t
(ignore-errors
- (shr-rescale-image data content-type))))))
+ (shr-rescale-image data content-type
+ (plist-get flags :width)
+ (plist-get flags :height)))))))
(when image
;; When inserting big-ish pictures, put them at the
;; beginning of the line.
image)
(insert (or alt ""))))
-(defun shr-rescale-image (data &optional content-type)
- "Rescale DATA, if too big, to fit the current buffer."
- (if (not (and (fboundp 'imagemagick-types)
- (get-buffer-window (current-buffer))))
+(defun shr-rescale-image (data content-type width height)
+ "Rescale DATA, if too big, to fit the current buffer.
+WIDTH and HEIGHT are the sizes given in the HTML data, if any."
+ (if (or (not (fboundp 'imagemagick-types))
+ (not (get-buffer-window (current-buffer))))
(create-image data nil t :ascent 100)
- (let ((edges (window-inside-pixel-edges
- (get-buffer-window (current-buffer)))))
- (create-image
- data 'imagemagick t
- :ascent 100
- :max-width (truncate (* shr-max-image-proportion
- (- (nth 2 edges) (nth 0 edges))))
- :max-height (truncate (* shr-max-image-proportion
- (- (nth 3 edges) (nth 1 edges))))
- :format content-type))))
+ (let* ((edges (window-inside-pixel-edges
+ (get-buffer-window (current-buffer))))
+ (max-width (truncate (* shr-max-image-proportion
+ (- (nth 2 edges) (nth 0 edges)))))
+ (max-height (truncate (* shr-max-image-proportion
+ (- (nth 3 edges) (nth 1 edges))))))
+ (when (or (and width
+ (> width max-width))
+ (and height
+ (> height max-height)))
+ (setq width nil
+ height nil))
+ (if (and width height)
+ (create-image
+ data 'imagemagick t
+ :ascent 100
+ :width width
+ :height height
+ :format content-type)
+ (create-image
+ data 'imagemagick t
+ :ascent 100
+ :max-width max-width
+ :max-height max-height
+ :format content-type)))))
;; url-cache-extract autoloads url-cache.
(declare-function url-cache-create-filename "url-cache" (url))
url)))
(if title (format "%s (%s)" iri title) iri))
'follow-link t
- 'mouse-face 'highlight
- 'keymap shr-map)))
+ 'mouse-face 'highlight))
+ ;; Don't overwrite any keymaps that are already in the buffer (i.e.,
+ ;; image keymaps).
+ (while (and start
+ (< start (point)))
+ (let ((next (next-single-property-change start 'keymap nil (point))))
+ (if (get-text-property start 'keymap)
+ (setq start next)
+ (put-text-property start (or next (point)) 'keymap shr-map)))))
(defun shr-encode-url (url)
"Encode URL."
(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
t)))
new-colors)))
-(defun shr-previous-newline-padding-width (width)
- (let ((overlays (overlays-at (point)))
- (previous-width 0))
- (if (null overlays)
- width
- (dolist (overlay overlays)
- (setq previous-width
- (+ previous-width
- (length (plist-get (overlay-properties overlay)
- 'before-string)))))
- (+ width previous-width))))
-
;;; Tag-specific rendering rules.
(defun shr-tag-html (dom)
((equal dir "ltr")
(setq bidi-paragraph-direction 'left-to-right))
((equal dir "rtl")
- (setq bidi-paragraph-direction 'right-to-left))))
+ (setq bidi-paragraph-direction 'right-to-left))
+ ((equal dir "auto")
+ (setq bidi-paragraph-direction nil))))
(shr-generic dom))
(defun shr-tag-body (dom)
(defun shr-tag-s (dom)
(shr-fontize-dom dom 'shr-strike-through))
-(defun shr-tag-del (dom)
- (shr-fontize-dom dom 'shr-strike-through))
-
(defun shr-tag-b (dom)
(shr-fontize-dom dom 'bold))
(let ((shr-current-font 'default))
(shr-generic dom)))
+(defun shr-tag-ins (cont)
+ (let* ((start (point))
+ (color "green")
+ (shr-stylesheet (nconc (list (cons 'color color))
+ shr-stylesheet)))
+ (shr-generic cont)
+ (shr-colorize-region start (point) color
+ (cdr (assq 'background-color shr-stylesheet)))))
+
+(defun shr-tag-del (cont)
+ (let* ((start (point))
+ (color "red")
+ (shr-stylesheet (nconc (list (cons 'color color))
+ shr-stylesheet)))
+ (shr-fontize-dom cont 'shr-strike-through)
+ (shr-colorize-region start (point) color
+ (cdr (assq 'background-color shr-stylesheet)))))
+
(defun shr-parse-style (style)
(when style
(save-match-data
(when (> (current-column) 0)
(insert "\n"))
(let ((alt (dom-attr dom 'alt))
+ (width (shr-string-number (dom-attr dom 'width)))
+ (height (shr-string-number (dom-attr dom 'height)))
(url (shr-expand-url (or url (dom-attr dom 'src)))))
(let ((start (point-marker)))
(when (zerop (length alt))
(string-match "\\`data:" url))
(let ((image (shr-image-from-data (substring url (match-end 0)))))
(if image
- (funcall shr-put-image-function image alt)
+ (funcall shr-put-image-function image alt
+ (list :width width :height height))
(insert alt))))
((and (not shr-inhibit-images)
(string-match "\\`cid:" url))
(if (or (not shr-content-function)
(not (setq image (funcall shr-content-function url))))
(insert alt)
- (funcall shr-put-image-function image alt))))
+ (funcall shr-put-image-function image alt
+ (list :width width :height height)))))
((or shr-inhibit-images
(and shr-blocked-images
(string-match shr-blocked-images url)))
(shr-insert alt))
((and (not shr-ignore-cache)
(url-is-cached (shr-encode-url url)))
- (funcall shr-put-image-function (shr-get-image-data url) alt))
+ (funcall shr-put-image-function (shr-get-image-data url) alt
+ (list :width width :height height)))
(t
- (insert alt " ")
(when (and shr-ignore-cache
(url-is-cached (shr-encode-url url)))
(let ((file (url-cache-create-filename (shr-encode-url url))))
(when (file-exists-p file)
(delete-file file))))
+ (when (image-type-available-p 'svg)
+ (insert-image
+ (shr-make-placeholder-image dom)
+ (or alt "")))
+ (insert " ")
(url-queue-retrieve
(shr-encode-url url) 'shr-image-fetched
- (list (current-buffer) start (set-marker (make-marker) (1- (point))))
+ (list (current-buffer) start (set-marker (make-marker) (point))
+ (list :width width :height height))
t t)))
(when (zerop shr-table-depth) ;; We are not in a table.
- (put-text-property start (point) 'keymap shr-map)
+ (put-text-property start (point) 'keymap shr-image-map)
(put-text-property start (point) 'shr-alt alt)
(put-text-property start (point) 'image-url url)
(put-text-property start (point) 'image-displayer
(shr-fill-text
(or (dom-attr dom 'title) alt))))))))
+(defun shr-string-number (string)
+ (if (null string)
+ nil
+ (setq string (replace-regexp-in-string "[^0-9]" "" string))
+ (if (zerop (length string))
+ nil
+ (string-to-number string))))
+
+(defun shr-make-placeholder-image (dom)
+ (let* ((edges (and
+ (get-buffer-window (current-buffer))
+ (window-inside-pixel-edges
+ (get-buffer-window (current-buffer)))))
+ (scaling (image-compute-scaling-factor image-scaling-factor))
+ (width (truncate
+ (* (or (shr-string-number (dom-attr dom 'width)) 100)
+ scaling)))
+ (height (truncate
+ (* (or (shr-string-number (dom-attr dom 'height)) 100)
+ scaling)))
+ (max-width
+ (and edges
+ (truncate (* shr-max-image-proportion
+ (- (nth 2 edges) (nth 0 edges))))))
+ (max-height (and edges
+ (truncate (* shr-max-image-proportion
+ (- (nth 3 edges) (nth 1 edges))))))
+ svg image)
+ (when (and max-width
+ (> width max-width))
+ (setq height (truncate (* (/ (float max-width) width) height))
+ width max-width))
+ (when (and max-height
+ (> height max-height))
+ (setq width (truncate (* (/ (float max-height) height) width))
+ height max-height))
+ (setq svg (svg-create width height))
+ (svg-gradient svg "background" 'linear '((0 . "#b0b0b0") (100 . "#808080")))
+ (svg-rectangle svg 0 0 width height :gradient "background"
+ :stroke-width 2 :stroke-color "black")
+ (let ((image (svg-image svg)))
+ (setf (image-property image :ascent) 100)
+ image)))
+
(defun shr-tag-pre (dom)
(let ((shr-folding-mode 'none)
(shr-current-font 'default))
(put-text-property start (1+ start)
'shr-continuation-indentation shr-indentation)
(put-text-property start (1+ start) 'shr-prefix-length (length bullet))
- (shr-generic dom)))))
+ (shr-generic dom))))
+ (unless (bolp)
+ (insert "\n")))
(defun shr-mark-fill (start)
;; We may not have inserted any text to fill.
(shr-colorize-region start (point) color
(cdr (assq 'background-color shr-stylesheet))))))
+(defun shr-tag-bdo (dom)
+ (let* ((direction (dom-attr dom 'dir))
+ (char (cond
+ ((equal direction "ltr")
+ ?\N{LEFT-TO-RIGHT OVERRIDE})
+ ((equal direction "rtl")
+ ?\N{RIGHT-TO-LEFT OVERRIDE}))))
+ (when char
+ (insert ?\N{FIRST STRONG ISOLATE} char))
+ (shr-generic dom)
+ (when char
+ (insert ?\N{POP DIRECTIONAL FORMATTING} ?\N{POP DIRECTIONAL ISOLATE}))))
+
+(defun shr-tag-bdi (dom)
+ (insert ?\N{FIRST STRONG ISOLATE})
+ (shr-generic dom)
+ (insert ?\N{POP DIRECTIONAL ISOLATE}))
+
;;; Table rendering algorithm.
;; Table rendering is the only complicated thing here. We do this by
(require 'password-cache)
(require 'password))
-(eval-when-compile
- (require 'cl) ; caddr
- (require 'sasl)
- (require 'starttls))
+(eval-when-compile (require 'cl))
+(require 'sasl)
+(require 'starttls)
(autoload 'sasl-find-mechanism "sasl")
(autoload 'auth-source-search "auth-source")
(sieve-manage-erase)
(setq sieve-manage-state 'initial)
(destructuring-bind (proc . props)
- (open-protocol-stream
+ (open-network-stream
"SIEVE" buffer server port
:type stream
:capability-command "CAPABILITY\r\n"
(set (make-local-variable 'comment-end) "")
;;(set (make-local-variable 'comment-start-skip) "\\(^\\|\\s-\\);?#+ *")
(set (make-local-variable 'comment-start-skip) "#+ *")
- (unless (featurep 'xemacs)
- (set (make-local-variable 'font-lock-defaults)
- '(sieve-font-lock-keywords nil nil ((?_ . "w")))))
+ (set (make-local-variable 'font-lock-defaults)
+ '(sieve-font-lock-keywords nil nil ((?_ . "w"))))
(easy-menu-add-item nil nil sieve-mode-menu))
;; Menu
;; Author: Alexandru Harsanyi <AlexHarsanyi@gmail.com>
;; Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
;; Created: December, 2009
-;; Version: 3.0.2
+;; Version: 3.1.1
;; Keywords: soap, web-services, comm, hypermedia
;; Package: soap-client
;; Homepage: https://github.com/alex-hhh/emacs-soap-client
(when messages
(error (mapconcat 'identity (nreverse messages) "; and: "))))
(cl-labels ((fail-with-message (format value)
- (push (format format value) messages)
- (throw 'invalid nil)))
+ (push (format format value) messages)
+ (throw 'invalid nil)))
(catch 'invalid
(let ((enumeration (soap-xs-simple-type-enumeration type)))
(when (and (> (length enumeration) 1)
`soap-xs-complex-type' objects."
(case (soap-xs-complex-type-indicator type)
(array
- (error "soap-encode-xs-complex-type arrays are handled elsewhere"))
+ (error "Arrays of type soap-encode-xs-complex-type are handled elsewhere"))
((sequence choice all nil)
(let ((type-list (list type)))
:type 'boolean
:group 'soap-client)
+(defun soap-find-port (wsdl service)
+ "Return the WSDL port having SERVICE name.
+Signal an error if not found."
+ (or (catch 'found
+ (dolist (p (soap-wsdl-ports wsdl))
+ (when (equal service (soap-element-name p))
+ (throw 'found p))))
+ (error "Unknown SOAP service: %s" service)))
+
+(defun soap-find-operation (port operation-name)
+ "Inside PORT, find OPERATION-NAME, a `soap-port-type'.
+Signal an error if not found."
+ (let* ((binding (soap-port-binding port))
+ (op (gethash operation-name (soap-binding-operations binding))))
+ (or op
+ (error "No operation %s for SOAP service %s"
+ operation-name (soap-element-name port)))))
+
+(defun soap-operation-arity (wsdl service operation-name)
+ "Return the number of arguments required by a soap operation.
+WSDL, SERVICE, OPERATION-NAME and PARAMETERS are as described in
+`soap-invoke'."
+ (let* ((port (soap-find-port wsdl service))
+ (op (soap-find-operation port operation-name))
+ (bop (soap-bound-operation-operation op)))
+ (length (soap-operation-parameter-order bop))))
+
(defun soap-invoke-internal (callback cbargs wsdl service operation-name
&rest parameters)
"Implement `soap-invoke' and `soap-invoke-async'.
CALLBACK RESPONSE CBARGS), where RESPONSE is the SOAP invocation result.
If CALLBACK is nil, operate synchronously. WSDL, SERVICE,
OPERATION-NAME and PARAMETERS are as described in `soap-invoke'."
- (let ((port (catch 'found
- (dolist (p (soap-wsdl-ports wsdl))
- (when (equal service (soap-element-name p))
- (throw 'found p))))))
- (unless port
- (error "Unknown SOAP service: %s" service))
-
- (let* ((binding (soap-port-binding port))
- (operation (gethash operation-name
- (soap-binding-operations binding))))
- (unless operation
- (error "No operation %s for SOAP service %s" operation-name service))
-
- (let ((url-request-method "POST")
- (url-package-name "soap-client.el")
- (url-package-version "1.0")
- (url-request-data
- ;; url-request-data expects a unibyte string already encoded...
- (encode-coding-string
- (soap-create-envelope operation parameters wsdl
- (soap-port-service-url port))
- 'utf-8))
- (url-mime-charset-string "utf-8;q=1, iso-8859-1;q=0.5")
- (url-http-attempt-keepalives t)
- (url-request-extra-headers
- (list
- (cons "SOAPAction"
- (concat "\"" (soap-bound-operation-soap-action
- operation) "\""))
- (cons "Content-Type"
- "text/xml; charset=utf-8"))))
- (if callback
- (url-retrieve
- (soap-port-service-url port)
- (lambda (status)
- (let ((data-buffer (current-buffer)))
- (unwind-protect
- (let ((error-status (plist-get status :error)))
- (if error-status
- (signal (car error-status) (cdr error-status))
- (apply callback
- (soap-parse-envelope
- (soap-parse-server-response)
- operation wsdl)
- cbargs)))
- ;; Ensure the url-retrieve buffer is not leaked.
- (and (buffer-live-p data-buffer)
- (kill-buffer data-buffer))))))
+ (let* ((port (soap-find-port wsdl service))
+ (operation (soap-find-operation port operation-name)))
+ (let ((url-request-method "POST")
+ (url-package-name "soap-client.el")
+ (url-package-version "1.0")
+ (url-request-data
+ ;; url-request-data expects a unibyte string already encoded...
+ (encode-coding-string
+ (soap-create-envelope operation parameters wsdl
+ (soap-port-service-url port))
+ 'utf-8))
+ (url-mime-charset-string "utf-8;q=1, iso-8859-1;q=0.5")
+ (url-http-attempt-keepalives t)
+ (url-request-extra-headers
+ (list
+ (cons "SOAPAction"
+ (concat "\"" (soap-bound-operation-soap-action
+ operation) "\""))
+ (cons "Content-Type"
+ "text/xml; charset=utf-8"))))
+ (if callback
+ (url-retrieve
+ (soap-port-service-url port)
+ (lambda (status)
+ (let ((data-buffer (current-buffer)))
+ (unwind-protect
+ (let ((error-status (plist-get status :error)))
+ (if error-status
+ (signal (car error-status) (cdr error-status))
+ (apply callback
+ (soap-parse-envelope
+ (soap-parse-server-response)
+ operation wsdl)
+ cbargs)))
+ ;; Ensure the url-retrieve buffer is not leaked.
+ (and (buffer-live-p data-buffer)
+ (kill-buffer data-buffer))))))
(let ((buffer (url-retrieve-synchronously
(soap-port-service-url port))))
(condition-case err
(error
(when soap-debug
(pop-to-buffer buffer))
- (error (error-message-string err))))))))))
+ (error (error-message-string err)))))))))
(defun soap-invoke (wsdl service operation-name &rest parameters)
"Invoke a SOAP operation and return the result.
(starttls-negotiate-gnutls process)
(signal-process (process-id process) 'SIGALRM)))
-(eval-and-compile
- (if (fboundp 'set-process-query-on-exit-flag)
- (defalias 'starttls-set-process-query-on-exit-flag
- 'set-process-query-on-exit-flag)
- (defalias 'starttls-set-process-query-on-exit-flag
- 'process-kill-without-query)))
-
(defun starttls-open-stream-gnutls (name buffer host port)
(message "Opening STARTTLS connection to `%s:%s'..." host port)
(let* (done
(int-to-string port)
port)
starttls-extra-arguments)))
- (starttls-set-process-query-on-exit-flag process nil)
+ (set-process-query-on-exit-flag process nil)
(while (and (processp process)
(eq (process-status process) 'run)
(with-current-buffer buffer
name buffer starttls-program
host (format "%s" port)
starttls-extra-args)))
- (starttls-set-process-query-on-exit-flag process nil)
+ (set-process-query-on-exit-flag process nil)
process)))
(defun starttls-available-p ()
(require 'tramp)
-;; Pacify byte-compiler.
-(defvar directory-listing-before-filename-regexp)
-(defvar directory-sep-char)
-
;;;###tramp-autoload
(defcustom tramp-adb-program "adb"
"Name of the Android Debug Bridge program."
(directory-files . tramp-handle-directory-files)
(directory-files-and-attributes
. tramp-adb-handle-directory-files-and-attributes)
- (dired-call-process . ignore)
(dired-compress-file . ignore)
(dired-uncache . tramp-handle-dired-uncache)
(expand-file-name . tramp-adb-handle-expand-file-name)
(shell-command . tramp-adb-handle-shell-command)
(start-file-process . tramp-adb-handle-start-file-process)
(substitute-in-file-name . tramp-handle-substitute-in-file-name)
- (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+ (unhandled-file-name-directory . ignore)
(vc-registered . ignore)
(verify-visited-file-modtime . tramp-handle-verify-visited-file-modtime)
(write-region . tramp-adb-handle-write-region))
tramp-current-host nil nil))
result)
(tramp-message v 6 "%s" (mapconcat 'identity (process-command p) " "))
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
(while (eq 'run (process-status p))
(accept-process-output p 0.1))
(accept-process-output p 0.1)
(lambda (elt)
(setcar
(cdr elt)
- (tramp-compat-replace-regexp-in-string
+ (replace-regexp-in-string
":" tramp-prefix-port-format (car (cdr elt)))))
result)
result))))
(unless (tramp-run-real-handler 'file-name-absolute-p (list localname))
(setq localname (concat "/" localname)))
;; Do normal `expand-file-name' (this does "/./" and "/../").
- ;; We bind `directory-sep-char' here for XEmacs on Windows,
- ;; which would otherwise use backslash. `default-directory' is
- ;; bound, because on Windows there would be problems with UNC
- ;; shares or Cygwin mounts.
- (let ((directory-sep-char ?/)
- (default-directory (tramp-compat-temporary-file-directory)))
+ ;; `default-directory' is bound, because on Windows there would
+ ;; be problems with UNC shares or Cygwin mounts.
+ (let ((default-directory (tramp-compat-temporary-file-directory)))
(tramp-make-tramp-file-name
method user host
(tramp-drop-volume-letter
(with-tramp-file-property v localname "file-truename"
(let ((result nil)) ; result steps in reverse order
(tramp-message v 4 "Finding true name for `%s'" filename)
- (let* ((directory-sep-char ?/)
- (steps (tramp-compat-split-string localname "/"))
+ (let* ((steps (split-string localname "/" 'omit))
(localnamedir (tramp-run-real-handler
'file-name-as-directory (list localname)))
(is-dir (string= localname localnamedir))
"Symlink target `%s' on wrong host" symlink-target))
(setq symlink-target localname))
(setq steps
- (append (tramp-compat-split-string
- symlink-target "/")
+ (append (split-string symlink-target "/" 'omit)
steps)))
(t
;; It's a file.
(split-string
(apply 'concat
(mapcar (lambda (s)
- (tramp-compat-replace-regexp-in-string
- "\\(.\\)" " -\\1"
- (tramp-compat-replace-regexp-in-string "^-" "" s)))
+ (replace-regexp-in-string
+ "\\(.\\)" " -\\1" (replace-regexp-in-string "^-" "" s)))
;; FIXME: Warning about removed switches (long and non-dash).
(delq nil
(mapcar
v 'file-error "Cannot make local copy of file `%s'" filename))
(set-file-modes
tmpfile
- (logior (or (file-modes filename) 0)
- (tramp-compat-octal-to-decimal "0400"))))
+ (logior (or (file-modes filename) 0) (string-to-number "0400" 8))))
tmpfile)))
(defun tramp-adb-handle-file-writable-p (filename)
(copy-file filename tmpfile 'ok)
(set-file-modes
tmpfile
- (logior (or (file-modes tmpfile) 0)
- (tramp-compat-octal-to-decimal "0600"))))
+ (logior (or (file-modes tmpfile) 0) (string-to-number "0600" 8))))
(tramp-run-real-handler
'write-region
(list start end tmpfile append 'no-message lockname confirm))
(with-parsed-tramp-file-name filename nil
(tramp-flush-file-property v (file-name-directory localname))
(tramp-flush-file-property v localname)
- (tramp-adb-send-command-and-check
- v (format "chmod %s %s" (tramp-compat-decimal-to-octal mode) localname))))
+ (tramp-adb-send-command-and-check v (format "chmod %o %s" mode localname))))
(defun tramp-adb-handle-set-file-times (filename &optional time)
"Like `set-file-times' for Tramp files."
(if (and t1 t2
(tramp-equal-remote filename newname)
(not (file-directory-p filename)))
- (let ((l1 (tramp-file-name-handler
- 'file-remote-p filename 'localname))
- (l2 (tramp-file-name-handler
- 'file-remote-p newname 'localname)))
+ (let ((l1 (file-remote-p filename 'localname))
+ (l2 (file-remote-p newname 'localname)))
(when (and (not ok-if-already-exists)
(file-exists-p newname))
(tramp-error v 'file-already-exists newname))
"Error renaming %s to %s" filename newname))
;; Rename by copy.
- (copy-file filename newname ok-if-already-exists t t)
+ (copy-file
+ filename newname ok-if-already-exists 'keep-time 'preserve-uid-gid)
(delete-file filename))))))
(defun tramp-adb-handle-process-file
;; because the remote process could have changed them.
(when tmpinput (delete-file tmpinput))
- ;; `process-file-side-effects' has been introduced with GNU
- ;; Emacs 23.2. If set to nil, no remote file will be changed
- ;; by `program'. If it doesn't exist, we assume its default
- ;; value t.
- (unless (and (boundp 'process-file-side-effects)
- (not (symbol-value 'process-file-side-effects)))
+ (unless process-file-side-effects
(tramp-flush-directory-property v ""))
;; Return exit status.
(current-buffer))))
;; There's some output, display it.
(when (with-current-buffer output-buffer (> (point-max) (point-min)))
- (if (functionp 'display-message-or-buffer)
- (tramp-compat-funcall 'display-message-or-buffer output-buffer)
- (pop-to-buffer output-buffer))))))))
+ (display-message-or-buffer output-buffer)))))))
;; We use BUFFER also as connection buffer during setup. Because of
;; this, its original contents must be saved, and restored once
;; process. We ignore errors, because the process
;; could have finished already.
(ignore-errors
- (tramp-compat-set-process-query-on-exit-flag p t)
+ (set-process-query-on-exit-flag p t)
(set-marker (process-mark p) (point)))
;; Return process.
p))))
(host (tramp-file-name-host vec))
(port (tramp-file-name-port vec))
(devices (mapcar 'cadr (tramp-adb-parse-device-names nil))))
- (tramp-compat-replace-regexp-in-string
+ (replace-regexp-in-string
tramp-prefix-port-format ":"
(cond ((member host devices) host)
;; This is the case when the host is connected to the default port.
(not (zerop (length host)))
(not (tramp-adb-execute-adb-command
vec "connect"
- (tramp-compat-replace-regexp-in-string
+ (replace-regexp-in-string
tramp-prefix-port-format ":" host))))
;; When new device connected, running other adb command (e.g.
;; adb shell) immediately will fail. To get around this
(unless (eq 'run (process-status p))
(tramp-error vec 'file-error "Terminated!"))
(tramp-set-connection-property p "vector" vec)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
;; Check whether the properties have been changed. If
;; yes, this is a strong indication that we must expire all
;; Read the expression.
(goto-char (point-min))
(read (current-buffer)))
- ":" 'omit-nulls))
+ ":" 'omit))
;; Mark it as connected.
(tramp-set-connection-property p "connected" t)))))))
(choice :tag " Value" sexp))))
(defcustom tramp-persistency-file-name
- (cond
- ;; GNU Emacs.
- ((and (fboundp 'locate-user-emacs-file))
- (expand-file-name (tramp-compat-funcall 'locate-user-emacs-file "tramp")))
- ((and (boundp 'user-emacs-directory)
- (stringp (symbol-value 'user-emacs-directory))
- (file-directory-p (symbol-value 'user-emacs-directory)))
- (expand-file-name "tramp" (symbol-value 'user-emacs-directory)))
- ((and (not (featurep 'xemacs)) (file-directory-p "~/.emacs.d/"))
- "~/.emacs.d/tramp")
- ;; XEmacs.
- ((and (boundp 'user-init-directory)
- (stringp (symbol-value 'user-init-directory))
- (file-directory-p (symbol-value 'user-init-directory)))
- (expand-file-name "tramp" (symbol-value 'user-init-directory)))
- ((and (featurep 'xemacs) (file-directory-p "~/.xemacs/"))
- "~/.xemacs/tramp")
- ;; For users without `~/.emacs.d/' or `~/.xemacs/'.
- (t "~/.tramp"))
+ (expand-file-name (locate-user-emacs-file "tramp"))
"File which keeps connection history for Tramp connections."
:group 'tramp
:type 'file)
;;;###tramp-autoload
(defun tramp-get-connection-property (key property default)
"Get the named PROPERTY for the connection.
-KEY identifies the connection, it is either a process or a vector.
-If the value is not set for the connection, returns DEFAULT."
+KEY identifies the connection, it is either a process or a
+vector. A special case is nil, which is used to cache connection
+properties of the local machine. If the value is not set for the
+connection, returns DEFAULT."
;; Unify key by removing localname and hop from vector. Work with a
;; copy in order to avoid side effects.
(when (vectorp key)
;;;###tramp-autoload
(defun tramp-set-connection-property (key property value)
"Set the named PROPERTY of a connection to VALUE.
-KEY identifies the connection, it is either a process or a vector.
-PROPERTY is set persistent when KEY is a vector."
+KEY identifies the connection, it is either a process or a
+vector. A special case is nil, which is used to cache connection
+properties of the local machine. PROPERTY is set persistent when
+KEY is a vector."
;; Unify key by removing localname and hop from vector. Work with a
;; copy in order to avoid side effects.
(when (vectorp key)
;;;###tramp-autoload
(defun tramp-connection-property-p (key property)
"Check whether named PROPERTY of a connection is defined.
-KEY identifies the connection, it is either a process or a vector."
+KEY identifies the connection, it is either a process or a
+vector. A special case is nil, which is used to cache connection
+properties of the local machine."
(not (eq (tramp-get-connection-property key property 'undef) 'undef)))
;;;###tramp-autoload
(defun tramp-flush-connection-property (key)
"Remove all properties identified by KEY.
-KEY identifies the connection, it is either a process or a vector."
+KEY identifies the connection, it is either a process or a
+vector. A special case is nil, which is used to cache connection
+properties of the local machine."
;; Unify key by removing localname and hop from vector. Work with a
;; copy in order to avoid side effects.
(when (vectorp key)
(maphash
(lambda (key value)
;; Remove text properties from KEY and VALUE.
- ;; `substring-no-properties' does not exist in XEmacs.
- (when (functionp 'substring-no-properties)
- (when (vectorp key)
- (dotimes (i (length key))
- (when (stringp (aref key i))
- (aset key i
- (tramp-compat-funcall
- 'substring-no-properties (aref key i))))))
- (when (stringp key)
- (setq key (tramp-compat-funcall 'substring-no-properties key)))
- (when (stringp value)
- (setq value
- (tramp-compat-funcall 'substring-no-properties value))))
+ (when (vectorp key)
+ (dotimes (i (length key))
+ (when (stringp (aref key i))
+ (aset key i (substring-no-properties (aref key i))))))
+ (when (stringp key)
+ (setq key (substring-no-properties key)))
+ (when (stringp value)
+ (setq value (substring-no-properties value)))
;; Dump.
(let ((tmp (format
"(%s %s)"
;; When "emacs -Q" has been called, both variables are nil.
;; We do not load the persistency file then, in order to
;; have a clean test environment.
- (or (and (boundp 'init-file-user) (symbol-value 'init-file-user))
- (and (boundp 'site-run-file) (symbol-value 'site-run-file))))
+ (or init-file-user
+ site-run-file))
(condition-case err
(with-temp-buffer
(insert-file-contents tramp-persistency-file-name)
(require 'tramp)
;; Pacify byte-compiler.
+(declare-function mml-mode "mml")
+(declare-function mml-insert-empty-tag "mml")
+(declare-function reporter-dump-variable "reporter")
(defvar reporter-eval-buffer)
(defvar reporter-prompt-for-summary-p)
(setq tramp-locked nil)
;; Flush password cache.
- (tramp-compat-funcall 'password-reset)
+ (password-reset)
;; Flush file and connection cache.
(clrhash tramp-cache-data)
"Kill all remote buffers."
(interactive)
- ;; Remove all Tramp related buffers.
+ ;; Remove all Tramp related connections.
(tramp-cleanup-all-connections)
;; Remove all buffers with a remote default-directory.
(defun tramp-bug ()
"Submit a bug report to the Tramp developers."
(interactive)
- (require 'reporter)
(catch 'dont-send
(let ((reporter-prompt-for-summary-p t))
(reporter-submit-bug-report
backup-by-copying-when-mismatch
backup-by-copying-when-privileged-mismatch
backup-directory-alist
- bkup-backup-directory-info
password-cache
password-cache-expiry
remote-file-name-inhibit-cache
'tramp-load-report-modules ; pre-hook
'tramp-append-tramp-buffers ; post-hook
- (tramp-compat-funcall
- (if (functionp 'propertize) 'propertize 'progn)
+ (propertize
"\n" 'display "\
Enter your bug report in this message, including as much detail
as you possibly can about the problem, what you did to cause it
(base64-encode-string (encode-coding-string val 'raw-text)))))))
;; Dump variable.
- (tramp-compat-funcall 'reporter-dump-variable varsym mailbuf)
+ (reporter-dump-variable varsym mailbuf)
(unless (hash-table-p val)
;; Remove string quotation.
(defun tramp-load-report-modules ()
"Load needed modules for reporting."
- ;; We load message.el and mml.el from Gnus.
- (if (featurep 'xemacs)
- (progn
- (load "message" 'noerror)
- (load "mml" 'noerror))
- (require 'message nil 'noerror)
- (require 'mml nil 'noerror))
- (tramp-compat-funcall 'message-mode)
- (tramp-compat-funcall 'mml-mode t))
+ (message-mode)
+ (mml-mode t))
(defun tramp-append-tramp-buffers ()
"Append Tramp buffers and buffer local variables into the bug report."
;; Non-tramp variables of interest.
'(default-directory))
'string<))
- (tramp-compat-funcall 'reporter-dump-variable varsym elbuf))
+ (reporter-dump-variable varsym elbuf))
(lisp-indent-line)
(insert ")\n"))
(insert-buffer-substring elbuf)))
(ignore-errors
(mapc
(lambda (x) (when (string-match "tramp" x) (insert x "\n")))
- (split-string (tramp-compat-funcall 'list-load-path-shadows t) "\n")))
+ (split-string (list-load-path-shadows t) "\n")))
;; Append buffers only when we are in message mode.
(when (and
(symbol-value 'mml-mode))
(let ((tramp-buf-regexp "\\*\\(debug \\)?tramp/")
- (buffer-list (tramp-compat-funcall 'tramp-list-tramp-buffers))
+ (buffer-list (tramp-list-tramp-buffers))
(curbuf (current-buffer)))
;; There is at least one Tramp buffer.
(kill-buffer nil)
(switch-to-buffer curbuf)
(goto-char (point-max))
- (insert (tramp-compat-funcall 'propertize "\n" 'display "\n\
+ (insert (propertize "\n" 'display "\n\
This is a special notion of the `gnus/message' package. If you
use another mail agent (by copying the contents of this buffer)
please ensure that the buffers are attached to your email.\n\n"))
(dolist (buffer buffer-list)
- (tramp-compat-funcall
- 'mml-insert-empty-tag 'part 'type "text/plain"
+ (mml-insert-empty-tag
+ 'part 'type "text/plain"
'encoding "base64" 'disposition "attachment" 'buffer buffer
'description buffer))
(set-buffer-modified-p nil))
;;; Commentary:
-;; Tramp's main Emacs version for development is Emacs 24. This
-;; package provides compatibility functions for Emacs 22, Emacs 23,
-;; XEmacs 21.4+ and SXEmacs 22.
+;; Tramp's main Emacs version for development is Emacs 25. This
+;; package provides compatibility functions for Emacs 23 and Emacs 24.
;;; Code:
(eval-when-compile
(require 'cl))
-(eval-and-compile
-
- ;; GNU Emacs 22.
- (unless (fboundp 'ignore-errors)
- (load "cl" 'noerror)
- (load "cl-macs" 'noerror))
-
- ;; Some packages must be required for XEmacs, because we compile
- ;; with -no-autoloads.
- (when (featurep 'xemacs)
- (require 'cus-edit)
- (require 'env)
- (require 'executable)
- (require 'outline)
- (require 'passwd)
- (require 'pp)
- (require 'regexp-opt)
- (require 'time-date))
-
- (require 'advice)
- (require 'custom)
- (require 'format-spec)
- (require 'shell)
- ;; Introduced in Emacs 23.2.
- (require 'ucs-normalize nil 'noerror)
-
- (require 'trampver)
- (require 'tramp-loaddefs)
-
- ;; As long as password.el is not part of (X)Emacs, it shouldn't be
- ;; mandatory.
- (if (featurep 'xemacs)
- (load "password" 'noerror)
- (or (require 'password-cache nil 'noerror)
- (require 'password nil 'noerror))) ; Part of contrib.
-
- ;; auth-source is relatively new.
- (if (featurep 'xemacs)
- (load "auth-source" 'noerror)
- (require 'auth-source nil 'noerror))
-
- ;; Load the appropriate timer package.
- (if (featurep 'xemacs)
- (require 'timer-funcs)
- (require 'timer))
-
- ;; Avoid byte-compiler warnings if the byte-compiler supports this.
- ;; Currently, XEmacs supports this.
- (when (featurep 'xemacs)
- (unless (boundp 'byte-compile-default-warnings)
- (defvar byte-compile-default-warnings nil))
- (delq 'unused-vars byte-compile-default-warnings))
-
- ;; `last-coding-system-used' is unknown in XEmacs.
- (unless (boundp 'last-coding-system-used)
- (defvar last-coding-system-used nil))
-
- ;; `directory-sep-char' is an obsolete variable in Emacs. But it is
- ;; used in XEmacs, so we set it here and there. The following is
- ;; needed to pacify Emacs byte-compiler.
- ;; Note that it was removed altogether in Emacs 24.1.
- (when (boundp 'directory-sep-char)
- (defvar byte-compile-not-obsolete-var nil)
- (setq byte-compile-not-obsolete-var 'directory-sep-char)
- ;; Emacs 23.2.
- (defvar byte-compile-not-obsolete-vars nil)
- (setq byte-compile-not-obsolete-vars '(directory-sep-char)))
-
- ;; `remote-file-name-inhibit-cache' has been introduced with Emacs 24.1.
- ;; Besides t, nil, and integer, we use also timestamps (as
- ;; returned by `current-time') internally.
- (unless (boundp 'remote-file-name-inhibit-cache)
- (defvar remote-file-name-inhibit-cache nil))
-
- ;; For not existing functions, or functions with a changed argument
- ;; list, there are compiler warnings. We want to avoid them in
- ;; cases we know what we do.
- (defmacro tramp-compat-funcall (function &rest arguments)
- (if (featurep 'xemacs)
- `(funcall (symbol-function ,function) ,@arguments)
- `(when (or (subrp ,function) (functionp ,function))
- (with-no-warnings (funcall ,function ,@arguments)))))
-
- ;; `set-buffer-multibyte' comes from Emacs Leim.
- (unless (fboundp 'set-buffer-multibyte)
- (defalias 'set-buffer-multibyte 'ignore))
-
- ;; The following functions cannot be aliases of the corresponding
- ;; `tramp-handle-*' functions, because this would bypass the locking
- ;; mechanism.
-
- ;; `process-file' does not exist in XEmacs.
- (unless (fboundp 'process-file)
- (defalias 'process-file
- (lambda (program &optional infile buffer display &rest args)
- (when (tramp-tramp-file-p default-directory)
- (apply
- 'tramp-file-name-handler
- 'process-file program infile buffer display args)))))
-
- ;; `start-file-process' is new in Emacs 23.
- (unless (fboundp 'start-file-process)
- (defalias 'start-file-process
- (lambda (name buffer program &rest program-args)
- (when (tramp-tramp-file-p default-directory)
- (apply
- 'tramp-file-name-handler
- 'start-file-process name buffer program program-args)))))
-
- ;; `set-file-times' is also new in Emacs 23.
- (unless (fboundp 'set-file-times)
- (defalias 'set-file-times
- (lambda (filename &optional time)
- (when (tramp-tramp-file-p filename)
- (tramp-compat-funcall
- 'tramp-file-name-handler 'set-file-times filename time)))))
-
- ;; We currently use "[" and "]" in the filename format for IPv6
- ;; hosts of GNU Emacs. This means that Emacs wants to expand
- ;; wildcards if `find-file-wildcards' is non-nil, and then barfs
- ;; because no expansion could be found. We detect this situation
- ;; and do something really awful: we have `file-expand-wildcards'
- ;; return the original filename if it can't expand anything. Let's
- ;; just hope that this doesn't break anything else.
- ;; It is not needed anymore since GNU Emacs 23.2.
- (unless (or (featurep 'xemacs)
- ;; `featurep' has only one argument in XEmacs.
- (funcall 'featurep 'files 'remote-wildcards))
- (defadvice file-expand-wildcards
+(require 'auth-source)
+(require 'advice)
+(require 'custom)
+(require 'format-spec)
+(require 'password-cache)
+(require 'shell)
+(require 'timer)
+(require 'ucs-normalize)
+
+(require 'trampver)
+(require 'tramp-loaddefs)
+
+;; `remote-file-name-inhibit-cache' has been introduced with Emacs
+;; 24.1. Besides t, nil, and integer, we use also timestamps (as
+;; returned by `current-time') internally.
+(unless (boundp 'remote-file-name-inhibit-cache)
+ (defvar remote-file-name-inhibit-cache nil))
+
+;; For not existing functions, or functions with a changed argument
+;; list, there are compiler warnings. We want to avoid them in cases
+;; we know what we do.
+(defmacro tramp-compat-funcall (function &rest arguments)
+ `(when (or (subrp ,function) (functionp ,function))
+ (with-no-warnings (funcall ,function ,@arguments))))
+
+;; We currently use "[" and "]" in the filename format for IPv6 hosts
+;; of GNU Emacs. This means that Emacs wants to expand wildcards if
+;; `find-file-wildcards' is non-nil, and then barfs because no
+;; expansion could be found. We detect this situation and do
+;; something really awful: we have `file-expand-wildcards' return the
+;; original filename if it can't expand anything. Let's just hope
+;; that this doesn't break anything else. It is not needed anymore
+;; since GNU Emacs 23.2.
+(unless (featurep 'files 'remote-wildcards)
+ (defadvice file-expand-wildcards
(around tramp-advice-file-expand-wildcards activate)
- (let ((name (ad-get-arg 0)))
- ;; If it's a Tramp file, look if wildcards need to be expanded
- ;; at all.
- (if (and
- (tramp-tramp-file-p name)
- (not (string-match
- "[[*?]" (tramp-compat-funcall
- 'file-remote-p name 'localname))))
- (setq ad-return-value (list name))
- ;; Otherwise, just run the original function.
- ad-do-it)))
- (add-hook
- 'tramp-unload-hook
- (lambda ()
- (ad-remove-advice
- 'file-expand-wildcards 'around 'tramp-advice-file-expand-wildcards)
- (ad-activate 'file-expand-wildcards))))
-
- ;; `redisplay' does not exist in XEmacs.
- (unless (fboundp 'redisplay)
- (defalias 'redisplay 'ignore)))
-
-;; `with-temp-message' does not exist in XEmacs.
-(if (fboundp 'with-temp-message)
- (defalias 'tramp-compat-with-temp-message 'with-temp-message)
- (defmacro tramp-compat-with-temp-message (_message &rest body)
- "Display MESSAGE temporarily if non-nil while BODY is evaluated."
- `(progn ,@body)))
+ (let ((name (ad-get-arg 0)))
+ ;; If it's a Tramp file, look if wildcards need to be expanded
+ ;; at all.
+ (if (and
+ (tramp-tramp-file-p name)
+ (not (string-match "[[*?]" (file-remote-p name 'localname))))
+ (setq ad-return-value (list name))
+ ;; Otherwise, just run the original function.
+ ad-do-it)))
+ (add-hook
+ 'tramp-unload-hook
+ (lambda ()
+ (ad-remove-advice
+ 'file-expand-wildcards 'around 'tramp-advice-file-expand-wildcards)
+ (ad-activate 'file-expand-wildcards))))
;; `condition-case-unless-debug' is introduced with Emacs 24.
(if (fboundp 'condition-case-unless-debug)
(funcall ,bodysym)
,@handlers))))))
-;; `font-lock-add-keywords' does not exist in XEmacs.
-(defun tramp-compat-font-lock-add-keywords (mode keywords &optional how)
- "Add highlighting KEYWORDS for MODE."
- (ignore-errors
- (tramp-compat-funcall 'font-lock-add-keywords mode keywords how)))
-
(defsubst tramp-compat-temporary-file-directory ()
- "Return name of directory for temporary files (compat function).
-For Emacs, this is the variable `temporary-file-directory', for XEmacs
-this is the function `temp-directory'."
- (let (file-name-handler-alist)
- ;; We must return a local directory. If it is remote, we could
- ;; run into an infloop.
- (cond
- ((and (boundp 'temporary-file-directory)
- (eval (car (get 'temporary-file-directory 'standard-value)))))
- ((fboundp 'temp-directory) (tramp-compat-funcall 'temp-directory))
- ((let ((d (getenv "TEMP"))) (and d (file-directory-p d)))
- (file-name-as-directory (getenv "TEMP")))
- ((let ((d (getenv "TMP"))) (and d (file-directory-p d)))
- (file-name-as-directory (getenv "TMP")))
- ((let ((d (getenv "TMPDIR"))) (and d (file-directory-p d)))
- (file-name-as-directory (getenv "TMPDIR")))
- ((file-exists-p "c:/temp") (file-name-as-directory "c:/temp"))
- (t (message (concat "Neither `temporary-file-directory' nor "
- "`temp-directory' is defined -- using /tmp."))
- (file-name-as-directory "/tmp")))))
-
-;; `make-temp-file' exists in Emacs only. On XEmacs, we use our own
-;; implementation with `make-temp-name', creating the temporary file
-;; immediately in order to avoid a security hole.
+ "Return name of directory for temporary files.
+It is the default value of `temporary-file-directory'."
+ ;; We must return a local directory. If it is remote, we could run
+ ;; into an infloop.
+ (eval (car (get 'temporary-file-directory 'standard-value))))
+
(defsubst tramp-compat-make-temp-file (f &optional dir-flag)
- "Create a temporary file (compat function).
+ "Create a local temporary file (compat function).
Add the extension of F, if existing."
(let* (file-name-handler-alist
(prefix (expand-file-name
(symbol-value 'tramp-temp-name-prefix)
(tramp-compat-temporary-file-directory)))
- (extension (file-name-extension f t))
- result)
- (condition-case nil
- (setq result
- (tramp-compat-funcall 'make-temp-file prefix dir-flag extension))
- (error
- ;; We use our own implementation, taken from files.el.
- (while
- (condition-case ()
- (progn
- (setq result (concat (make-temp-name prefix) extension))
- (if dir-flag
- (make-directory result)
- (write-region "" nil result nil 'silent))
- nil)
- (file-already-exists t))
- ;; The file was somehow created by someone else between
- ;; `make-temp-name' and `write-region', let's try again.
- nil)))
- result))
-
-;; `most-positive-fixnum' does not exist in XEmacs.
-(defsubst tramp-compat-most-positive-fixnum ()
- "Return largest positive integer value (compat function)."
- (cond
- ((boundp 'most-positive-fixnum) (symbol-value 'most-positive-fixnum))
- ;; Default value in XEmacs.
- (t 134217727)))
-
-(defun tramp-compat-decimal-to-octal (i)
- "Return a string consisting of the octal digits of I.
-Not actually used. Use `(format \"%o\" i)' instead?"
- (cond ((< i 0) (error "Cannot convert negative number to octal"))
- ((not (integerp i)) (error "Cannot convert non-integer to octal"))
- ((zerop i) "0")
- (t (concat (tramp-compat-decimal-to-octal (/ i 8))
- (number-to-string (% i 8))))))
-
-;; Kudos to Gerd Moellmann for this suggestion.
-(defun tramp-compat-octal-to-decimal (ostr)
- "Given a string of octal digits, return a decimal number."
- (let ((x (or ostr "")))
- ;; `save-match' is in `tramp-mode-string-to-int' which calls this.
- (unless (string-match "\\`[0-7]*\\'" x)
- (error "Non-octal junk in string `%s'" x))
- (string-to-number ostr 8)))
-
-;; ID-FORMAT does not exist in XEmacs.
-(defun tramp-compat-file-attributes (filename &optional id-format)
- "Like `file-attributes' for Tramp files (compat function)."
- (cond
- ((or (null id-format) (eq id-format 'integer))
- (file-attributes filename))
- ((tramp-tramp-file-p filename)
- (tramp-compat-funcall
- 'tramp-file-name-handler 'file-attributes filename id-format))
- (t (condition-case nil
- (tramp-compat-funcall 'file-attributes filename id-format)
- (wrong-number-of-arguments (file-attributes filename))))))
-
-;; PRESERVE-UID-GID does not exist in XEmacs.
+ (extension (file-name-extension f t)))
+ (make-temp-file prefix dir-flag extension)))
+
;; PRESERVE-EXTENDED-ATTRIBUTES has been introduced with Emacs 24.1
;; (as PRESERVE-SELINUX-CONTEXT), and renamed in Emacs 24.3.
(defun tramp-compat-copy-file
'copy-file filename newname ok-if-already-exists keep-date
preserve-uid-gid preserve-extended-attributes)
(wrong-number-of-arguments
- (tramp-compat-copy-file
+ (copy-file
filename newname ok-if-already-exists keep-date preserve-uid-gid))))
- (preserve-uid-gid
- (condition-case nil
- (tramp-compat-funcall
- 'copy-file filename newname ok-if-already-exists keep-date
- preserve-uid-gid)
- (wrong-number-of-arguments
- (tramp-compat-copy-file
- filename newname ok-if-already-exists keep-date))))
(t
- (copy-file filename newname ok-if-already-exists keep-date))))
+ (copy-file
+ filename newname ok-if-already-exists keep-date preserve-uid-gid))))
-;; `copy-directory' is a new function in Emacs 23.2. Implementation
-;; is taken from there.
+;; COPY-CONTENTS has been introduced with Emacs 24.1.
(defun tramp-compat-copy-directory
(directory newname &optional keep-time parents copy-contents)
"Make a copy of DIRECTORY (compat function)."
(cond
(trash
(tramp-compat-funcall 'delete-directory directory recursive trash))
- (recursive
- (tramp-compat-funcall 'delete-directory directory recursive))
(t
- (delete-directory directory)))
- ;; This Emacs version does not support the RECURSIVE or TRASH flag. We
- ;; use the implementation from Emacs 23.2.
+ (delete-directory directory recursive)))
+ ;; This Emacs version does not support the TRASH flag. We use the
+ ;; implementation from Emacs 23.2.
(wrong-number-of-arguments
(setq directory (directory-file-name (expand-file-name directory)))
(if (not (file-symlink-p directory))
directory 'full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*")))
(delete-directory directory))))
-;; MUST-SUFFIX doesn't exist on XEmacs.
-(defun tramp-compat-load (file &optional noerror nomessage nosuffix must-suffix)
- "Like `load' for Tramp files (compat function)."
- (if must-suffix
- (tramp-compat-funcall 'load file noerror nomessage nosuffix must-suffix)
- (load file noerror nomessage nosuffix)))
-
-;; `number-sequence' does not exist in XEmacs. Implementation is
-;; taken from Emacs 23.
-(defun tramp-compat-number-sequence (from &optional to inc)
- "Return a sequence of numbers from FROM to TO as a list (compat function)."
- (if (or (subrp 'number-sequence) (symbol-file 'number-sequence))
- (tramp-compat-funcall 'number-sequence from to inc)
- (if (or (not to) (= from to))
- (list from)
- (or inc (setq inc 1))
- (when (zerop inc) (error "The increment can not be zero"))
- (let (seq (n 0) (next from))
- (if (> inc 0)
- (while (<= next to)
- (setq seq (cons next seq)
- n (1+ n)
- next (+ from (* n inc))))
- (while (>= next to)
- (setq seq (cons next seq)
- n (1+ n)
- next (+ from (* n inc)))))
- (nreverse seq)))))
-
-(defun tramp-compat-split-string (string pattern)
- "Like `split-string' but omit empty strings.
-In Emacs, (split-string \"/foo/bar\" \"/\") returns (\"foo\" \"bar\").
-This is, the first, empty, element is omitted. In XEmacs, the first
-element is not omitted."
- (delete "" (split-string string pattern)))
-
(defun tramp-compat-process-running-p (process-name)
"Returns t if system process PROCESS-NAME is running for `user-login-name'."
(when (stringp process-name)
((and (fboundp 'list-system-processes) (fboundp 'process-attributes))
(let (result)
(dolist (pid (tramp-compat-funcall 'list-system-processes) result)
- (let ((attributes (tramp-compat-funcall 'process-attributes pid)))
+ (let ((attributes (process-attributes pid)))
(when (and (string-equal
(cdr (assoc 'user attributes)) (user-login-name))
(let ((comm (cdr (assoc 'comm attributes))))
(and comm (string-match
(concat "^" (regexp-quote comm))
process-name))))
- (setq result t))))))
-
- ;; Fallback, if there is no Lisp support yet.
- (t (let ((default-directory
- (if (tramp-tramp-file-p default-directory)
- (tramp-compat-temporary-file-directory)
- default-directory))
- (unix95 (getenv "UNIX95"))
- result)
- (setenv "UNIX95" "1")
- (when (member
- (user-login-name)
- (tramp-compat-split-string
- (shell-command-to-string
- (format "ps -C %s -o user=" process-name))
- "[ \f\t\n\r\v]+"))
- (setq result t))
- (setenv "UNIX95" unix95)
- result)))))
-
-;; The following functions do not exist in XEmacs. We ignore this;
-;; they are used for checking a remote tty.
-(defun tramp-compat-process-get (process propname)
- "Return the value of PROCESS' PROPNAME property.
-This is the last value stored with `(process-put PROCESS PROPNAME VALUE)'."
- (ignore-errors (tramp-compat-funcall 'process-get process propname)))
-
-(defun tramp-compat-process-put (process propname value)
- "Change PROCESS' PROPNAME property to VALUE.
-It can be retrieved with `(process-get PROCESS PROPNAME)'."
- (ignore-errors (tramp-compat-funcall 'process-put process propname value)))
-
-(defun tramp-compat-set-process-query-on-exit-flag (process flag)
- "Specify if query is needed for process when Emacs is exited.
-If the second argument flag is non-nil, Emacs will query the user before
-exiting if process is running."
- (if (fboundp 'set-process-query-on-exit-flag)
- (tramp-compat-funcall 'set-process-query-on-exit-flag process flag)
- (tramp-compat-funcall 'process-kill-without-query process flag)))
-
-;; There exist different implementations for this function.
-(defun tramp-compat-coding-system-change-eol-conversion (coding-system eol-type)
- "Return a coding system like CODING-SYSTEM but with given EOL-TYPE.
-EOL-TYPE can be one of `dos', `unix', or `mac'."
- (cond ((fboundp 'coding-system-change-eol-conversion)
- (tramp-compat-funcall
- 'coding-system-change-eol-conversion coding-system eol-type))
- ((fboundp 'subsidiary-coding-system)
- (tramp-compat-funcall
- 'subsidiary-coding-system coding-system
- (cond ((eq eol-type 'dos) 'crlf)
- ((eq eol-type 'unix) 'lf)
- ((eq eol-type 'mac) 'cr)
- (t (error
- "Unknown EOL-TYPE `%s', must be `dos', `unix', or `mac'"
- eol-type)))))
- (t (error "Can't change EOL conversion -- is MULE missing?"))))
-
-;; `replace-regexp-in-string' does not exist in XEmacs.
-;; Implementation is taken from Emacs 24.
-(if (fboundp 'replace-regexp-in-string)
- (defalias 'tramp-compat-replace-regexp-in-string 'replace-regexp-in-string)
- (defun tramp-compat-replace-regexp-in-string
- (regexp rep string &optional fixedcase literal subexp start)
- "Replace all matches for REGEXP with REP in STRING.
-
-Return a new string containing the replacements.
-
-Optional arguments FIXEDCASE, LITERAL and SUBEXP are like the
-arguments with the same names of function `replace-match'. If START
-is non-nil, start replacements at that index in STRING.
-
-REP is either a string used as the NEWTEXT arg of `replace-match' or a
-function. If it is a function, it is called with the actual text of each
-match, and its value is used as the replacement text. When REP is called,
-the match data are the result of matching REGEXP against a substring
-of STRING.
-
-To replace only the first match (if any), make REGEXP match up to \\'
-and replace a sub-expression, e.g.
- (replace-regexp-in-string \"\\\\(foo\\\\).*\\\\'\" \"bar\" \" foo foo\" nil nil 1)
- => \" bar foo\""
-
- (let ((l (length string))
- (start (or start 0))
- matches str mb me)
- (save-match-data
- (while (and (< start l) (string-match regexp string start))
- (setq mb (match-beginning 0)
- me (match-end 0))
- ;; If we matched the empty string, make sure we advance by one char
- (when (= me mb) (setq me (min l (1+ mb))))
- ;; Generate a replacement for the matched substring.
- ;; Operate only on the substring to minimize string consing.
- ;; Set up match data for the substring for replacement;
- ;; presumably this is likely to be faster than munging the
- ;; match data directly in Lisp.
- (string-match regexp (setq str (substring string mb me)))
- (setq matches
- (cons (replace-match (if (stringp rep)
- rep
- (funcall rep (match-string 0 str)))
- fixedcase literal str subexp)
- (cons (substring string start mb) ; unmatched prefix
- matches)))
- (setq start me))
- ;; Reconstruct a string from the pieces.
- (setq matches (cons (substring string start l) matches)) ; leftover
- (apply #'concat (nreverse matches))))))
+ (setq result t)))))))))
;; `default-toplevel-value' has been declared in Emacs 24.
(unless (fboundp 'default-toplevel-value)
(defalias 'default-toplevel-value 'symbol-value))
-;; `format-message' is new in Emacs 25, and does not exist in XEmacs.
+;; `format-message' is new in Emacs 25.
(unless (fboundp 'format-message)
(defalias 'format-message 'format))
-;; `delete-dups' does not exist in XEmacs 21.4.
-(if (fboundp 'delete-dups)
- (defalias 'tramp-compat-delete-dups 'delete-dups)
- (defun tramp-compat-delete-dups (list)
- "Destructively remove `equal' duplicates from LIST.
-Store the result in LIST and return it. LIST must be a proper list.
-Of several `equal' occurrences of an element in LIST, the first
-one is kept."
- (tramp-compat-funcall
- 'cl-delete-duplicates list '(:test equal :from-end) nil)))
-
(add-hook 'tramp-unload-hook
(lambda ()
(unload-feature 'tramp-loaddefs 'force)
(defvar ange-ftp-name-format)
;; Disable Ange-FTP from file-name-handler-alist.
-;; To handle EFS, the following functions need to be dealt with:
-;;
-;; * dired-before-readin-hook contains efs-dired-before-readin
-;; * file-name-handler-alist contains efs-file-handler-function
-;; and efs-root-handler-function and efs-sifn-handler-function
-;; * find-file-hooks contains efs-set-buffer-mode
-;;
-;; But it won't happen for EFS since the XEmacs maintainers
-;; don't want to use a unified filename syntax.
(defun tramp-disable-ange-ftp ()
"Turn Ange-FTP off.
This is useful for unified remoting. See
;; ... and add it to the method list.
;;;###tramp-autoload
-(unless (featurep 'xemacs)
- (add-to-list 'tramp-methods (cons tramp-ftp-method nil))
+(add-to-list 'tramp-methods (cons tramp-ftp-method nil))
- ;; Add some defaults for `tramp-default-method-alist'.
- (add-to-list 'tramp-default-method-alist
- (list "\\`ftp\\." nil tramp-ftp-method))
- (add-to-list 'tramp-default-method-alist
- (list nil "\\`\\(anonymous\\|ftp\\)\\'" tramp-ftp-method)))
+;; Add some defaults for `tramp-default-method-alist'.
+;;;###tramp-autoload
+(add-to-list 'tramp-default-method-alist
+ (list "\\`ftp\\." nil tramp-ftp-method))
+;;;###tramp-autoload
+(add-to-list 'tramp-default-method-alist
+ (list nil "\\`\\(anonymous\\|ftp\\)\\'" tramp-ftp-method))
;; Add completion function for FTP method.
;;;###tramp-autoload
tramp-ftp-method))
;;;###tramp-autoload
-(unless (featurep 'xemacs)
- (add-to-list 'tramp-foreign-file-name-handler-alist
- (cons 'tramp-ftp-file-name-p 'tramp-ftp-file-name-handler)))
+(add-to-list 'tramp-foreign-file-name-handler-alist
+ (cons 'tramp-ftp-file-name-p 'tramp-ftp-file-name-handler))
(add-hook 'tramp-unload-hook
(lambda ()
(directory-files . tramp-handle-directory-files)
(directory-files-and-attributes
. tramp-handle-directory-files-and-attributes)
- (dired-call-process . ignore)
(dired-compress-file . ignore)
(dired-uncache . tramp-handle-dired-uncache)
(expand-file-name . tramp-gvfs-handle-expand-file-name)
(shell-command . ignore)
(start-file-process . ignore)
(substitute-in-file-name . tramp-handle-substitute-in-file-name)
- (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+ (unhandled-file-name-directory . ignore)
(vc-registered . ignore)
(verify-visited-file-modtime . tramp-handle-verify-visited-file-modtime)
(write-region . tramp-gvfs-handle-write-region))
(put 'with-tramp-dbus-call-method 'lisp-indent-function 2)
(put 'with-tramp-dbus-call-method 'edebug-form-spec '(form symbolp body))
-(tramp-compat-font-lock-add-keywords
- 'emacs-lisp-mode '("\\<with-tramp-dbus-call-method\\>"))
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-tramp-dbus-call-method\\>"))
(defvar tramp-gvfs-dbus-event-vector nil
"Current Tramp file name to be used, as vector.
(and t2 (not (tramp-gvfs-file-name-p newname))))
;; We cannot copy or rename directly.
+ ;; PRESERVE-EXTENDED-ATTRIBUTES has been introduced with
+ ;; Emacs 24.1 (as PRESERVE-SELINUX-CONTEXT), and renamed
+ ;; in Emacs 24.3.
(let ((tmpfile (tramp-compat-make-temp-file filename)))
(cond
(preserve-extended-attributes
- (tramp-compat-funcall
+ (funcall
file-operation
filename tmpfile t keep-date preserve-uid-gid
preserve-extended-attributes))
- (preserve-uid-gid
- (tramp-compat-funcall
- file-operation filename tmpfile t keep-date preserve-uid-gid))
(t
- (tramp-compat-funcall
- file-operation filename tmpfile t keep-date)))
+ (funcall
+ file-operation filename tmpfile t keep-date preserve-uid-gid)))
(rename-file tmpfile newname ok-if-already-exists))
;; Direct action.
(tramp-gvfs-do-copy-or-rename-file
'copy filename newname ok-if-already-exists keep-date
preserve-uid-gid preserve-extended-attributes))
- ;; Compat section.
+ ;; Compat section. PRESERVE-EXTENDED-ATTRIBUTES has been
+ ;; introduced with Emacs 24.1 (as PRESERVE-SELINUX-CONTEXT), and
+ ;; renamed in Emacs 24.3.
(preserve-extended-attributes
(tramp-run-real-handler
'copy-file
(list filename newname ok-if-already-exists keep-date
preserve-uid-gid preserve-extended-attributes)))
- (preserve-uid-gid
- (tramp-run-real-handler
- 'copy-file
- (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))
(t
(tramp-run-real-handler
- 'copy-file (list filename newname ok-if-already-exists keep-date)))))
+ 'copy-file
+ (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))))
(defun tramp-gvfs-handle-delete-directory (directory &optional recursive trash)
"Like `delete-directory' for Tramp files."
(tramp-error
v 'file-error
"Cannot make local copy of non-existing file `%s'" filename))
- (copy-file filename tmpfile t t)
+ (copy-file filename tmpfile 'ok-if-already-exists 'keep-time)
tmpfile)))
(defun tramp-gvfs-handle-file-name-all-completions (filename directory)
(when cache-hit (list cache-hit))))
;; We cannot use a length of 0, because file properties
;; for "foo" and "foo/" are identical.
- (tramp-compat-number-sequence (length filename) 1 -1)))))
+ (number-sequence (length filename) 1 -1)))))
;; Cache expired or no matching cache entry found so we need
;; to perform a remote operation.
(tramp-message
v 6 "Run `%s', %S" (mapconcat 'identity (process-command p) " ") p)
(tramp-set-connection-property p "vector" v)
- (tramp-compat-process-put p 'events events)
- (tramp-compat-process-put p 'watch-name localname)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (process-put p 'events events)
+ (process-put p 'watch-name localname)
+ (set-process-query-on-exit-flag p nil)
(set-process-filter p 'tramp-gvfs-monitor-file-process-filter)
;; There might be an error if the monitor is not supported.
;; Give the filter a chance to read the output.
(defun tramp-gvfs-monitor-file-process-filter (proc string)
"Read output from \"gvfs-monitor-file\" and add corresponding \
file-notify events."
- (let* ((rest-string (tramp-compat-process-get proc 'rest-string))
+ (let* ((rest-string (process-get proc 'rest-string))
(dd (with-current-buffer (process-buffer proc) default-directory))
(ddu (regexp-quote (tramp-gvfs-url-file-name dd))))
(when rest-string
(tramp-message proc 6 "%S\n%s" proc string)
(setq string (concat rest-string string)
;; Attribute change is returned in unused wording.
- string (tramp-compat-replace-regexp-in-string
+ string (replace-regexp-in-string
"ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string))
(when (string-match "Monitoring not supported" string)
(delete-process proc))
string)
(let ((file (match-string 1 string))
(action (intern-soft
- (tramp-compat-replace-regexp-in-string
+ (replace-regexp-in-string
"_" "-" (downcase (match-string 2 string))))))
(setq string (replace-match "" nil nil string))
;; File names are returned as URL paths. We must convert them.
;; Save rest of the string.
(when (zerop (length string)) (setq string nil))
(when string (tramp-message proc 10 "Rest string:\n%s" string))
- (tramp-compat-process-put proc 'rest-string string)))
+ (process-put proc 'rest-string string)))
(defun tramp-gvfs-handle-file-readable-p (filename)
"Like `file-readable-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (with-tramp-file-property v localname "file-executable-p"
+ (with-tramp-file-property v localname "file-readable-p"
(tramp-check-cached-permissions v ?r))))
(defun tramp-gvfs-handle-file-writable-p (filename)
(if (or (tramp-tramp-file-p filename)
(tramp-tramp-file-p newname))
(tramp-gvfs-do-copy-or-rename-file
- 'rename filename newname ok-if-already-exists t t)
+ 'rename filename newname ok-if-already-exists
+ 'keep-date 'preserve-uid-gid)
(tramp-run-real-handler
'rename-file (list filename newname ok-if-already-exists))))
(start end filename &optional append visit lockname confirm)
"Like `write-region' for Tramp files."
(with-parsed-tramp-file-name filename nil
- ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
- (when (and (not (featurep 'xemacs)) confirm (file-exists-p filename))
+ (when (and confirm (file-exists-p filename))
(unless (y-or-n-p (format "File %s exists; overwrite anyway? " filename))
(tramp-error v 'file-error "File not overwritten")))
(defun tramp-gvfs-file-name (object-path)
"Retrieve file name from D-Bus OBJECT-PATH."
(dbus-unescape-from-identifier
- (tramp-compat-replace-regexp-in-string
- "^.*/\\([^/]+\\)$" "\\1" object-path)))
+ (replace-regexp-in-string "^.*/\\([^/]+\\)$" "\\1" object-path)))
(defun tramp-bluez-address (device)
"Return bluetooth device address from a given bluetooth DEVICE name."
;; host signature.
(with-temp-buffer
;; Preserve message for `progress-reporter'.
- (tramp-compat-with-temp-message ""
+ (with-temp-message ""
(insert message)
(pop-to-buffer (current-buffer))
(setq choice (if (yes-or-no-p (concat (car choices) " ")) 0 1))
:name (tramp-buffer-name vec)
:buffer (tramp-get-connection-buffer vec)
:server t :host 'local :service t)))
- (tramp-compat-set-process-query-on-exit-flag p nil)))
+ (set-process-query-on-exit-flag p nil)))
(unless (tramp-gvfs-connection-mounted-p vec)
(let* ((method (tramp-file-name-method vec))
'split-string
(shell-command-to-string (format "avahi-browse -trkp %s" service))
"[\n\r]+" 'omit "^\\+;.*$"))))
- (tramp-compat-delete-dups
+ (delete-dups
(mapcar
(lambda (x)
(let* ((list (split-string x ";"))
tramp-gw-vector 4
"Opening auxiliary process `%s', speaking with process `%s'"
proc tramp-gw-gw-proc)
- (tramp-compat-set-process-query-on-exit-flag proc nil)
+ (set-process-query-on-exit-flag proc nil)
;; We don't want debug messages, because the corresponding debug
;; buffer might be undecided.
(let ((tramp-verbose 0))
:name (tramp-buffer-name aux-vec) :buffer nil :host 'local
:server t :noquery t :service t :coding 'binary))
(set-process-sentinel tramp-gw-aux-proc 'tramp-gw-aux-proc-sentinel)
- (tramp-compat-set-process-query-on-exit-flag tramp-gw-aux-proc nil)
+ (set-process-query-on-exit-flag tramp-gw-aux-proc nil)
(tramp-message
vec 4 "Opening auxiliary process `%s', listening on port %d"
tramp-gw-aux-proc (process-contact tramp-gw-aux-proc :service))))
(tramp-file-name-port target-vec)))
(set-process-sentinel tramp-gw-gw-proc 'tramp-gw-gw-proc-sentinel)
(set-process-coding-system tramp-gw-gw-proc 'binary 'binary)
- (tramp-compat-set-process-query-on-exit-flag tramp-gw-gw-proc nil)
+ (set-process-query-on-exit-flag tramp-gw-gw-proc nil)
(tramp-message
vec 4 "Opened %s process `%s'"
(case gw-method ('tunnel "HTTP tunnel") ('socks "SOCKS"))
(setq proc (open-network-stream
name buffer (nth 1 socks-server) (nth 2 socks-server)))
(set-process-coding-system proc 'binary 'binary)
- (tramp-compat-set-process-query-on-exit-flag proc nil)
+ (set-process-query-on-exit-flag proc nil)
;; Send CONNECT command.
(process-send-string proc (format "%s%s\r\n" command authentication))
(tramp-message
tramp-gw-vector 6 "\n%s"
(format
"%s%s\r\n" command
- (tramp-compat-replace-regexp-in-string ;; no password in trace!
+ (replace-regexp-in-string ;; no password in trace!
"Basic [^\r\n]+" "Basic xxxxx" authentication t)))
(with-current-buffer buffer
;; Trap errors to be traced in the right trace buffer. Often,
(eval-when-compile
(require 'cl)
(require 'dired))
-(defvar directory-sep-char)
(defvar tramp-gw-tunnel-method)
(defvar tramp-gw-socks-method)
(defvar vc-handled-backends)
"Which ssh Control* arguments to use.
If it is a string, it should have the form
-\"-o ControlMaster=auto -o ControlPath='tramp.%%r@%%h:%%p'
+\"-o ControlMaster=auto -o ControlPath=\\='tramp.%%r@%%h:%%p\\='
-o ControlPersist=no\". Percent characters in the ControlPath
spec must be doubled, because the string is used as format string.
(tramp-remote-shell-args ("-c"))
(tramp-connection-timeout 10)))
;;;###tramp-autoload
+(add-to-list
+ 'tramp-methods
+ '("sg"
+ (tramp-login-program "sg")
+ (tramp-login-args (("-") ("%u")))
+ (tramp-remote-shell "/bin/sh")
+ (tramp-remote-shell-args ("-c"))
+ (tramp-connection-timeout 10)))
+;;;###tramp-autoload
(add-to-list 'tramp-methods
'("sudo"
(tramp-login-program "sudo")
(tramp-remote-shell-args ("-c"))
(tramp-connection-timeout 10)))
;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("doas"
+ (tramp-login-program "doas")
+ (tramp-login-args (("-u" "%u") ("-s")))
+ (tramp-remote-shell "/bin/sh")
+ (tramp-remote-shell-args ("-c"))
+ (tramp-connection-timeout 10)))
+;;;###tramp-autoload
(add-to-list 'tramp-methods
'("ksu"
(tramp-login-program "ksu")
(tramp-remote-shell-args ("-c"))
(tramp-copy-program "pscp")
(tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp") ("-p" "%k")
- ("-q") ("-r")))
- (tramp-copy-keep-date t)
- (tramp-copy-recursive t)))
+ ("-q")))
+ (tramp-copy-keep-date t)))
;;;###tramp-autoload
(add-to-list 'tramp-methods
'("fcp"
;;;###tramp-autoload
(add-to-list 'tramp-default-user-alist
- `(,(concat "\\`" (regexp-opt '("su" "sudo" "ksu")) "\\'")
+ `(,(concat "\\`" (regexp-opt '("su" "sudo" "doas" "ksu")) "\\'")
nil "root"))
;; Do not add "ssh" based methods, otherwise ~/.ssh/config would be ignored.
;; Do not add "plink" based methods, they ask interactively for the user.
'((tramp-parse-passwd "/etc/passwd"))
"Default list of (FUNCTION FILE) pairs to be examined for su methods.")
+;;;###tramp-autoload
+(defconst tramp-completion-function-alist-sg
+ '((tramp-parse-etc-group "/etc/group"))
+ "Default list of (FUNCTION FILE) pairs to be examined for sg methods.")
+
;;;###tramp-autoload
(defconst tramp-completion-function-alist-putty
`((tramp-parse-putty
,(if (memq system-type '(windows-nt))
"HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions"
"~/.putty/sessions")))
- "Default list of (FUNCTION REGISTRY) pairs to be examined for putty sessions.")
+ "Default list of (FUNCTION REGISTRY) pairs to be examined for putty sessions.")
;;;###tramp-autoload
(eval-after-load 'tramp
(tramp-set-completion-function "nc" tramp-completion-function-alist-telnet)
(tramp-set-completion-function "su" tramp-completion-function-alist-su)
(tramp-set-completion-function "sudo" tramp-completion-function-alist-su)
+ (tramp-set-completion-function "doas" tramp-completion-function-alist-su)
(tramp-set-completion-function "ksu" tramp-completion-function-alist-su)
+ (tramp-set-completion-function "sg" tramp-completion-function-alist-sg)
(tramp-set-completion-function
"krlogin" tramp-completion-function-alist-rsh)
(tramp-set-completion-function "plink" tramp-completion-function-alist-ssh)
;; "getconf PATH" yields:
;; HP-UX: /usr/bin:/usr/ccs/bin:/opt/ansic/bin:/opt/langtools/bin:/opt/fortran/bin
;; Solaris: /usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin
-;; GNU/Linux (Debian, Suse): /bin:/usr/bin
+;; GNU/Linux (Debian, Suse, RHEL): /bin:/usr/bin
;; FreeBSD: /usr/bin:/bin:/usr/sbin:/sbin: - beware trailing ":"!
;; Darwin: /usr/bin:/bin:/usr/sbin:/sbin
;; IRIX64: /usr/bin
(directory-files . tramp-handle-directory-files)
(directory-files-and-attributes
. tramp-sh-handle-directory-files-and-attributes)
- ;; `dired-call-process' performed by default handler.
(dired-compress-file . tramp-sh-handle-dired-compress-file)
- (dired-recursive-delete-directory
- . tramp-sh-handle-dired-recursive-delete-directory)
(dired-uncache . tramp-handle-dired-uncache)
(expand-file-name . tramp-sh-handle-expand-file-name)
(file-accessible-directory-p . tramp-handle-file-accessible-directory-p)
;; `get-file-buffer' performed by default handler.
(insert-directory . tramp-sh-handle-insert-directory)
(insert-file-contents . tramp-handle-insert-file-contents)
- (insert-file-contents-literally
- . tramp-sh-handle-insert-file-contents-literally)
(load . tramp-handle-load)
(make-auto-save-file-name . tramp-handle-make-auto-save-file-name)
(make-directory . tramp-sh-handle-make-directory)
(shell-command . tramp-handle-shell-command)
(start-file-process . tramp-sh-handle-start-file-process)
(substitute-in-file-name . tramp-handle-substitute-in-file-name)
- (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+ (unhandled-file-name-directory . ignore)
(vc-registered . tramp-sh-handle-vc-registered)
(verify-visited-file-modtime . tramp-sh-handle-verify-visited-file-modtime)
(write-region . tramp-sh-handle-write-region))
(format "tramp_perl_file_truename %s"
(tramp-shell-quote-argument localname)))))
- ;; Do it yourself. We bind `directory-sep-char' here for
- ;; XEmacs on Windows, which would otherwise use backslash.
- (t (let ((directory-sep-char ?/)
- (steps (tramp-compat-split-string localname "/"))
+ ;; Do it yourself.
+ (t (let ((steps (split-string localname "/" 'omit))
(thisstep nil)
(numchase 0)
;; Don't make the following value larger than
symlink-target))
(setq symlink-target localname))
(setq steps
- (append (tramp-compat-split-string
- symlink-target "/")
- steps)))
+ (append
+ (split-string symlink-target "/" 'omit) steps)))
(t
;; It's a file.
(setq result (cons thisstep result)))))
res-gid
;; 4. Last access time, as a list of integers. Normally
;; this would be in the same format as `current-time', but
- ;; the subseconds part is not currently implemented, and (0
- ;; 0) denotes an unknown time.
+ ;; the subseconds part is not currently implemented, and
+ ;; (0 0) denotes an unknown time.
;; 5. Last modification time, likewise.
;; 6. Last status change time, likewise.
'(0 0) '(0 0) '(0 0) ;CCC how to find out?
;; 10. Inode number.
res-inode
;; 11. Device number. Will be replaced by a virtual device number.
- -1
- ))))))
+ -1))))))
(defun tramp-do-file-attributes-with-perl
(vec localname &optional id-format)
(attr (file-attributes f))
;; '(-1 65535) means file doesn't exists yet.
(modtime (or (nth 5 attr) '(-1 65535))))
- (when (boundp 'last-coding-system-used)
- (setq coding-system-used (symbol-value 'last-coding-system-used)))
+ (setq coding-system-used last-coding-system-used)
;; We use '(0 0) as a don't-know value. See also
;; `tramp-do-file-attributes-with-ls'.
(if (not (equal modtime '(0 0)))
(setq attr (buffer-substring (point) (point-at-eol))))
(tramp-set-file-property
v localname "visited-file-modtime-ild" attr))
- (when (boundp 'last-coding-system-used)
- (set 'last-coding-system-used coding-system-used))
+ (setq last-coding-system-used coding-system-used)
nil)))))
;; This function makes the same assumption as
;; connection.
(if (or (not f)
(eq (visited-file-modtime) 0)
- (not (tramp-file-name-handler 'file-remote-p f nil 'connected)))
+ (not (file-remote-p f nil 'connected)))
t
(with-parsed-tramp-file-name f nil
(let* ((remote-file-name-inhibit-cache t)
;; FIXME: extract the proper text from chmod's stderr.
(tramp-barf-unless-okay
v
- (format "chmod %s %s"
- (tramp-compat-decimal-to-octal mode)
- (tramp-shell-quote-argument localname))
+ (format "chmod %o %s" mode (tramp-shell-quote-argument localname))
"Error while changing file's mode %s" filename)))
(defun tramp-sh-handle-set-file-times (filename &optional time)
"Like `set-file-times' for Tramp files."
- (if (tramp-tramp-file-p filename)
- (with-parsed-tramp-file-name filename nil
- (when (tramp-get-remote-touch v)
- (tramp-flush-file-property v (file-name-directory localname))
- (tramp-flush-file-property v localname)
- (let ((time (if (or (null time) (equal time '(0 0)))
- (current-time)
- time))
- ;; With GNU Emacs, `format-time-string' has an
- ;; optional parameter ZONE. This is preferred,
- ;; because we could handle the case when the remote
- ;; host is located in a different time zone as the
- ;; local host.
- (utc (not (featurep 'xemacs))))
- (tramp-send-command-and-check
- v (format
- "%s %s %s %s"
- (if utc "env TZ=UTC" "")
- (tramp-get-remote-touch v)
- (if (tramp-get-connection-property v "touch-t" nil)
- (format "-t %s"
- (if utc
- (format-time-string "%Y%m%d%H%M.%S" time t)
- (format-time-string "%Y%m%d%H%M.%S" time)))
- "")
- (tramp-shell-quote-argument localname))))))
-
- ;; We handle also the local part, because in older Emacsen,
- ;; without `set-file-times', this function is an alias for this.
- ;; We are local, so we don't need the UTC settings.
- (zerop
- (tramp-call-process
- nil "touch" nil nil nil "-t"
- (format-time-string "%Y%m%d%H%M.%S" time)
- (tramp-shell-quote-argument filename)))))
+ (with-parsed-tramp-file-name filename nil
+ (when (tramp-get-remote-touch v)
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+ (let ((time (if (or (null time) (equal time '(0 0)))
+ (current-time)
+ time)))
+ (tramp-send-command-and-check
+ v (format
+ "env TZ=UTC %s %s %s"
+ (tramp-get-remote-touch v)
+ (if (tramp-get-connection-property v "touch-t" nil)
+ (format "-t %s" (format-time-string "%Y%m%d%H%M.%S" time t))
+ "")
+ (tramp-shell-quote-argument localname)))))))
(defun tramp-set-file-uid-gid (filename &optional uid gid)
"Set the ownership for FILENAME.
(goto-char (point-max))
(delete-blank-lines)
(when (> (point-max) (point-min))
- (tramp-compat-funcall
- 'substring-no-properties (buffer-string))))))))
+ (substring-no-properties (buffer-string))))))))
(defun tramp-sh-handle-set-file-acl (filename acl-string)
"Like `set-file-acl' for Tramp files."
(when cache-hit (list cache-hit))))
;; We cannot use a length of 0, because file properties
;; for "foo" and "foo/" are identical.
- (tramp-compat-number-sequence (length filename) 1 -1)))))
+ (number-sequence (length filename) 1 -1)))))
;; Cache expired or no matching cache entry found so we need
;; to perform a remote operation.
(format "tramp_perl_file_name_all_completions %s %s %d"
(tramp-shell-quote-argument localname)
(tramp-shell-quote-argument filename)
- (if (symbol-value
- ;; `read-file-name-completion-ignore-case'
- ;; is introduced with Emacs 22.1.
- (if (boundp
- 'read-file-name-completion-ignore-case)
- 'read-file-name-completion-ignore-case
- 'completion-ignore-case))
- 1 0)))
+ (if read-file-name-completion-ignore-case 1 0)))
(format (concat
"(cd %s 2>&1 && (%s -a %s 2>/dev/null"
(tramp-do-copy-or-rename-file
'copy filename newname ok-if-already-exists keep-date
preserve-uid-gid preserve-extended-attributes))
- ;; Compat section.
+ ;; Compat section. PRESERVE-EXTENDED-ATTRIBUTES has been
+ ;; introduced with Emacs 24.1 (as PRESERVE-SELINUX-CONTEXT), and
+ ;; renamed in Emacs 24.3.
(preserve-extended-attributes
(tramp-run-real-handler
'copy-file
(list filename newname ok-if-already-exists keep-date
preserve-uid-gid preserve-extended-attributes)))
- (preserve-uid-gid
- (tramp-run-real-handler
- 'copy-file
- (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))
(t
(tramp-run-real-handler
- 'copy-file (list filename newname ok-if-already-exists keep-date)))))
+ 'copy-file
+ (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))))
(defun tramp-sh-handle-copy-directory
(dirname newname &optional keep-date parents copy-contents)
(if (or (tramp-tramp-file-p filename)
(tramp-tramp-file-p newname))
(tramp-do-copy-or-rename-file
- 'rename filename newname ok-if-already-exists t t)
+ 'rename filename newname ok-if-already-exists
+ 'keep-time 'preserve-uid-gid)
(tramp-run-real-handler
'rename-file (list filename newname ok-if-already-exists))))
op))))
(localname1
(if t1
- (tramp-file-name-handler 'file-remote-p filename 'localname)
+ (file-remote-p filename 'localname)
filename))
(localname2
(if t2
- (tramp-file-name-handler 'file-remote-p newname 'localname)
+ (file-remote-p newname 'localname)
newname))
(prefix (file-remote-p (if t1 filename newname)))
cmd-result)
(zerop
(logand
(file-modes (file-name-directory localname1))
- (tramp-compat-octal-to-decimal "1000"))))
+ (string-to-number "1000" 8))))
(file-writable-p (file-name-directory localname2))
(or (file-directory-p localname2)
(file-writable-p localname2))))
(if (eq op 'copy)
- (tramp-compat-copy-file
+ (copy-file
localname1 localname2 ok-if-already-exists
keep-date preserve-uid-gid)
(tramp-run-real-handler
;; Since this does not work reliable, we also
;; give read permissions.
(set-file-modes
- (concat prefix tmpfile)
- (tramp-compat-octal-to-decimal "0777"))
+ (concat prefix tmpfile) (string-to-number "0777" 8))
(tramp-set-file-uid-gid
(concat prefix tmpfile)
(tramp-get-local-uid 'integer)
(tramp-get-local-gid 'integer)))
(t2
(if (eq op 'copy)
- (tramp-compat-copy-file
+ (copy-file
localname1 tmpfile t
keep-date preserve-uid-gid)
(tramp-run-real-handler
;; We must change the ownership as local user.
;; Since this does not work reliable, we also
;; give read permissions.
- (set-file-modes
- tmpfile (tramp-compat-octal-to-decimal "0777"))
+ (set-file-modes tmpfile (string-to-number "0777" 8))
(tramp-set-file-uid-gid
tmpfile
(tramp-get-remote-uid v 'integer)
;; Save exit.
(ignore-errors
(if dir-flag
- (tramp-compat-delete-directory
+ (delete-directory
(expand-file-name ".." tmpfile) 'recursive)
(delete-file tmpfile)))))
orig-vec 6 "%s"
(mapconcat 'identity (process-command p) " "))
(tramp-set-connection-property p "vector" orig-vec)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
;; We must adapt `tramp-local-end-of-line' for
;; sending the password.
(unless (eq op 'copy)
(if (file-regular-p filename)
(delete-file filename)
- (tramp-compat-delete-directory filename 'recursive))))))
+ (delete-directory filename 'recursive))))))
(defun tramp-sh-handle-make-directory (dir &optional parents)
"Like `make-directory' for Tramp files."
;; Dired.
-;; CCC: This does not seem to be enough. Something dies when
-;; we try and delete two directories under Tramp :/
-(defun tramp-sh-handle-dired-recursive-delete-directory (filename)
- "Recursively delete the directory given.
-This is like `dired-recursive-delete-directory' for Tramp files."
- (with-parsed-tramp-file-name filename nil
- ;; Run a shell command 'rm -r <localname>'.
- ;; Code shamelessly stolen from the dired implementation and, um, hacked :)
- (unless (file-exists-p filename)
- (tramp-error v 'file-error "No such directory: %s" filename))
- ;; Which is better, -r or -R? (-r works for me <daniel@danann.net>).
- (tramp-send-command
- v
- (format "rm -rf %s" (tramp-shell-quote-argument localname))
- ;; Don't read the output, do it explicitly.
- nil t)
- ;; Wait for the remote system to return to us...
- ;; This might take a while, allow it plenty of time.
- (tramp-wait-for-output (tramp-get-connection-process v) 120)
- ;; Make sure that it worked...
- (tramp-flush-file-property v (file-name-directory localname))
- (tramp-flush-directory-property v localname)
- (and (file-exists-p filename)
- (tramp-error
- v 'file-error "Failed to recursively delete %s" filename))))
+(defvar dired-compress-file-suffixes)
+(declare-function dired-remove-file "dired-aux")
-(defun tramp-sh-handle-dired-compress-file (file &rest _ok-flag)
+(defun tramp-sh-handle-dired-compress-file (file)
"Like `dired-compress-file' for Tramp files."
- ;; OK-FLAG is valid for XEmacs only, but not implemented.
;; Code stolen mainly from dired-aux.el.
(with-parsed-tramp-file-name file nil
(tramp-flush-file-property v localname)
(save-excursion
- (let ((suffixes
- (if (not (featurep 'xemacs))
- ;; Emacs case
- (symbol-value 'dired-compress-file-suffixes)
- ;; XEmacs has `dired-compression-method-alist', which is
- ;; transformed into `dired-compress-file-suffixes' structure.
- (mapcar
- (lambda (x)
- (list (concat (regexp-quote (nth 1 x)) "\\'")
- nil
- (mapconcat 'identity (nth 3 x) " ")))
- (symbol-value 'dired-compression-method-alist))))
+ (let ((suffixes dired-compress-file-suffixes)
suffix)
;; See if any suffix rule matches this file name.
(while suffixes
(when (tramp-send-command-and-check
v (concat (nth 2 suffix) " "
(tramp-shell-quote-argument localname)))
- ;; `dired-remove-file' is not defined in XEmacs.
- (tramp-compat-funcall 'dired-remove-file file)
+ (dired-remove-file file)
(string-match (car suffix) file)
(concat (substring file 0 (match-beginning 0))))))
(t
(when (tramp-send-command-and-check
v (concat "gzip -f "
(tramp-shell-quote-argument localname)))
- ;; `dired-remove-file' is not defined in XEmacs.
- (tramp-compat-funcall 'dired-remove-file file)
+ (dired-remove-file file)
(cond ((file-exists-p (concat file ".gz"))
(concat file ".gz"))
((file-exists-p (concat file ".z"))
;; Decode the output, it could be multibyte.
(decode-coding-region
beg (point-max)
- (or file-name-coding-system
- (and (boundp 'default-file-name-coding-system)
- (symbol-value 'default-file-name-coding-system))))
+ (or file-name-coding-system default-file-name-coding-system))
;; The inserted file could be from somewhere else.
(when (and (not wildcard) (not full-directory-p))
;; Unless NAME is absolute, concat DIR and NAME.
(unless (file-name-absolute-p name)
(setq name (concat (file-name-as-directory dir) name)))
- ;; If NAME is not a Tramp file, run the real handler.
+ ;; If connection is not established yet, run the real handler.
(if (not (tramp-connectable-p name))
- (tramp-run-real-handler 'expand-file-name (list name nil))
+ (tramp-drop-volume-letter
+ (tramp-run-real-handler 'expand-file-name (list name nil)))
;; Dissect NAME.
(with-parsed-tramp-file-name name nil
(unless (tramp-run-real-handler 'file-name-absolute-p (list localname))
(while (string-match "//" localname)
(setq localname (replace-match "/" t t localname)))
;; No tilde characters in file name, do normal
- ;; `expand-file-name' (this does "/./" and "/../"). We bind
- ;; `directory-sep-char' here for XEmacs on Windows, which would
- ;; otherwise use backslash. `default-directory' is bound,
- ;; because on Windows there would be problems with UNC shares or
- ;; Cygwin mounts.
- (let ((directory-sep-char ?/)
- (default-directory (tramp-compat-temporary-file-directory)))
+ ;; `expand-file-name' (this does "/./" and "/../").
+ ;; `default-directory' is bound, because on Windows there would
+ ;; be problems with UNC shares or Cygwin mounts.
+ (let ((default-directory (tramp-compat-temporary-file-directory)))
(tramp-make-tramp-file-name
method user host
(tramp-drop-volume-letter
;; Send the command.
(tramp-send-command v command nil t) ; nooutput
;; Check, whether a pty is associated.
- (unless (tramp-compat-process-get
+ (unless (process-get
(tramp-get-connection-process v) 'remote-tty)
(tramp-error
v 'file-error
;; process. We ignore errors, because the process
;; could have finished already.
(ignore-errors
- (tramp-compat-set-process-query-on-exit-flag p t)
+ (set-process-query-on-exit-flag p t)
(set-marker (process-mark p) (point)))
;; Return process.
p))))
;; because the remote process could have changed them.
(when tmpinput (delete-file tmpinput))
- ;; `process-file-side-effects' has been introduced with GNU
- ;; Emacs 23.2. If set to nil, no remote file will be changed
- ;; by `program'. If it doesn't exist, we assume its default
- ;; value t.
- (unless (and (boundp 'process-file-side-effects)
- (not (symbol-value 'process-file-side-effects)))
+ (unless process-file-side-effects
(tramp-flush-directory-property v ""))
;; Return exit status.
;; `copy-file' handles direct copy and out-of-band methods.
((or (tramp-local-host-p v)
(tramp-method-out-of-band-p v size))
- (copy-file filename tmpfile t t))
+ (copy-file filename tmpfile 'ok-if-already-exists 'keep-time))
;; Use inline encoding for file transfer.
(rem-enc
(run-hooks 'tramp-handle-file-local-copy-hook)
tmpfile)))
-;; This is needed for XEmacs only. Code stolen from files.el.
-(defun tramp-sh-handle-insert-file-contents-literally
- (filename &optional visit beg end replace)
- "Like `insert-file-contents-literally' for Tramp files."
- (let ((format-alist nil)
- (after-insert-file-functions nil)
- (coding-system-for-read 'no-conversion)
- (coding-system-for-write 'no-conversion)
- (find-buffer-file-type-function
- (if (fboundp 'find-buffer-file-type)
- (symbol-function 'find-buffer-file-type)
- nil))
- (inhibit-file-name-handlers
- '(epa-file-handler image-file-handler jka-compr-handler))
- (inhibit-file-name-operation 'insert-file-contents))
- (unwind-protect
- (progn
- (fset 'find-buffer-file-type (lambda (_filename) t))
- (insert-file-contents filename visit beg end replace))
- ;; Save exit.
- (if find-buffer-file-type-function
- (fset 'find-buffer-file-type find-buffer-file-type-function)
- (fmakunbound 'find-buffer-file-type)))))
-
;; CCC grok LOCKNAME
(defun tramp-sh-handle-write-region
(start end filename &optional append visit lockname confirm)
;; (error
;; "tramp-sh-handle-write-region: LOCKNAME must be nil or equal FILENAME"))
- ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
- (when (and (not (featurep 'xemacs)) confirm (file-exists-p filename))
+ (when (and confirm (file-exists-p filename))
(unless (y-or-n-p (format "File %s exists; overwrite anyway? " filename))
(tramp-error v 'file-error "File not overwritten")))
- (let ((uid (or (nth 2 (tramp-compat-file-attributes filename 'integer))
+ (let ((uid (or (nth 2 (file-attributes filename 'integer))
(tramp-get-remote-uid v 'integer)))
- (gid (or (nth 3 (tramp-compat-file-attributes filename 'integer))
+ (gid (or (nth 3 (file-attributes filename 'integer))
(tramp-get-remote-gid v 'integer))))
(if (and (tramp-local-host-p v)
(signal (car err) (cdr err))))
;; Now, `last-coding-system-used' has the right value. Remember it.
- (when (boundp 'last-coding-system-used)
- (setq coding-system-used
- (symbol-value 'last-coding-system-used))))
+ (setq coding-system-used last-coding-system-used))
;; The permissions of the temporary file should be set. If
;; FILENAME does not exist (eq modes nil) it has been
(when modes
(set-file-modes
tmpfile
- (logior (or modes 0) (tramp-compat-octal-to-decimal "0400"))))
+ (logior (or modes 0) (string-to-number "0400" 8))))
;; This is a bit lengthy due to the different methods
;; possible for file transfer. First, we check whether the
(let (last-coding-system-used (need-chown t))
;; Set file modification time.
(when (or (eq visit t) (stringp visit))
- (let ((file-attr (tramp-compat-file-attributes filename 'integer)))
+ (let ((file-attr (file-attributes filename 'integer)))
(set-visited-file-modtime
;; We must pass modtime explicitly, because FILENAME can
;; be different from (buffer-file-name), f.e. if
;; any other remote command.
(defun tramp-sh-handle-vc-registered (file)
"Like `vc-registered' for Tramp files."
- (tramp-compat-with-temp-message ""
+ (with-temp-message ""
(with-parsed-tramp-file-name file nil
(with-tramp-progress-reporter
v 3 (format-message "Checking `vc-registered' for %s" file)
(concat "create,modify,move,moved_from,moved_to,move_self,"
"delete,delete_self,ignored"))
((memq 'attribute-change flags) "attrib,ignored"))
- sequence `(,command "-mq" "-e" ,events ,localname)))
+ sequence `(,command "-mq" "-e" ,events ,localname)
+ ;; Make events a list of symbols.
+ events
+ (mapcar
+ (lambda (x) (intern-soft (replace-regexp-in-string "_" "-" x)))
+ (split-string events "," 'omit))))
;; None.
(t (tramp-error
v 'file-notify-error
(mapconcat 'identity sequence " "))
(tramp-message v 6 "Run `%s', %S" (mapconcat 'identity sequence " ") p)
(tramp-set-connection-property p "vector" v)
- ;; Needed for `tramp-sh-gvfs-monitor-dir-process-filter'.
- (tramp-compat-process-put p 'events events)
- (tramp-compat-process-put p 'watch-name localname)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ ;; Needed for process filter.
+ (process-put p 'events events)
+ (process-put p 'watch-name localname)
+ (set-process-query-on-exit-flag p nil)
(set-process-filter p filter)
;; There might be an error if the monitor is not supported.
;; Give the filter a chance to read the output.
(defun tramp-sh-gvfs-monitor-dir-process-filter (proc string)
"Read output from \"gvfs-monitor-dir\" and add corresponding \
file-notify events."
- (let ((remote-prefix
+ (let ((events (process-get proc 'events))
+ (remote-prefix
(with-current-buffer (process-buffer proc)
(file-remote-p default-directory)))
- (rest-string (tramp-compat-process-get proc 'rest-string)))
+ (rest-string (process-get proc 'rest-string)))
(when rest-string
(tramp-message proc 10 "Previous string:\n%s" rest-string))
(tramp-message proc 6 "%S\n%s" proc string)
(setq string (concat rest-string string)
;; Attribute change is returned in unused wording.
- string (tramp-compat-replace-regexp-in-string
+ string (replace-regexp-in-string
"ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string))
(when (string-match "Monitoring not supported" string)
(delete-process proc))
(object
(list
proc
- (intern-soft
- (tramp-compat-replace-regexp-in-string
- "_" "-" (downcase (match-string 4 string))))
+ (list
+ (intern-soft
+ (replace-regexp-in-string
+ "_" "-" (downcase (match-string 4 string)))))
;; File names are returned as absolute paths. We must
;; add the remote prefix.
(concat remote-prefix file)
(when file1 (concat remote-prefix file1)))))
(setq string (replace-match "" nil nil string))
;; Remove watch when file or directory to be watched is deleted.
- (when (and (member (cadr object) '(moved deleted))
- (string-equal
- file (tramp-compat-process-get proc 'watch-name)))
+ (when (and (member (caadr object) '(moved deleted))
+ (string-equal file (process-get proc 'watch-name)))
(delete-process proc))
;; Usually, we would add an Emacs event now. Unfortunately,
;; `unread-command-events' does not accept several events at
- ;; once. Therefore, we apply the callback directly.
- (when (member (cadr object) (tramp-compat-process-get proc 'events))
- (tramp-compat-funcall 'file-notify-callback object))))
+ ;; once. Therefore, we apply the handler directly.
+ (when (member (caadr object) events)
+ (tramp-compat-funcall
+ 'file-notify-handle-event
+ `(file-notify ,object file-notify-callback)))))
;; Save rest of the string.
(when (zerop (length string)) (setq string nil))
(when string (tramp-message proc 10 "Rest string:\n%s" string))
- (tramp-compat-process-put proc 'rest-string string)))
+ (process-put proc 'rest-string string)))
(defun tramp-sh-inotifywait-process-filter (proc string)
"Read output from \"inotifywait\" and add corresponding file-notify events."
- (tramp-message proc 6 "%S\n%s" proc string)
- (dolist (line (split-string string "[\n\r]+" 'omit-nulls))
- ;; Check, whether there is a problem.
- (unless
- (string-match
- (concat "^[^[:blank:]]+"
- "[[:blank:]]+\\([^[:blank:]]+\\)+"
- "\\([[:blank:]]+\\([^\n\r]+\\)\\)?")
- line)
- (tramp-error proc 'file-notify-error "%s" line))
-
- (let ((object
- (list
- proc
- (mapcar
- (lambda (x)
- (intern-soft
- (tramp-compat-replace-regexp-in-string "_" "-" (downcase x))))
- (split-string (match-string 1 line) "," 'omit-nulls))
- (match-string 3 line))))
- ;; Remove watch when file or directory to be watched is deleted.
- (when (equal (cadr object) 'ignored)
- (delete-process proc))
- ;; Usually, we would add an Emacs event now. Unfortunately,
- ;; `unread-command-events' does not accept several events at
- ;; once. Therefore, we apply the callback directly.
- (tramp-compat-funcall 'file-notify-callback object))))
+ (let ((events (process-get proc 'events)))
+ (tramp-message proc 6 "%S\n%s" proc string)
+ (dolist (line (split-string string "[\n\r]+" 'omit))
+ ;; Check, whether there is a problem.
+ (unless
+ (string-match
+ (concat "^[^[:blank:]]+"
+ "[[:blank:]]+\\([^[:blank:]]+\\)+"
+ "\\([[:blank:]]+\\([^\n\r]+\\)\\)?")
+ line)
+ (tramp-error proc 'file-notify-error "%s" line))
+
+ (let ((object
+ (list
+ proc
+ (mapcar
+ (lambda (x)
+ (intern-soft
+ (replace-regexp-in-string "_" "-" (downcase x))))
+ (split-string (match-string 1 line) "," 'omit))
+ (match-string 3 line))))
+ ;; Remove watch when file or directory to be watched is deleted.
+ (when (member (caadr object) '(move-self delete-self ignored))
+ (delete-process proc))
+ ;; Usually, we would add an Emacs event now. Unfortunately,
+ ;; `unread-command-events' does not accept several events at
+ ;; once. Therefore, we apply the handler directly.
+ (when (member (caadr object) events)
+ (tramp-compat-funcall
+ 'file-notify-handle-event
+ `(file-notify ,object file-notify-callback)))))))
;;; Internal Functions:
vec 5 (format-message "Sending script `%s'" name)
;; In bash, leading TABs like in `tramp-vc-registered-read-file-names'
;; could result in unwanted command expansion. Avoid this.
- (setq script (tramp-compat-replace-regexp-in-string
+ (setq script (replace-regexp-in-string
(make-string 1 ?\t) (make-string 8 ? ) script))
;; The script could contain a call of Perl. This is masked with `%s'.
(when (and (string-match "%s" script)
(setq result (concat "\\" progname))))
(unless result
(when ignore-tilde
- ;; Remove all ~/foo directories from dirlist. In XEmacs,
- ;; `remove' is in CL, and we want to avoid CL dependencies.
+ ;; Remove all ~/foo directories from dirlist.
(let (newdl d)
(while dirlist
(setq d (car dirlist))
;; CCC this can't be the right way to do it. Hm.
(tramp-message vec 5 "Determining coding system")
(with-current-buffer (process-buffer proc)
- (if (featurep 'mule)
- ;; Use MULE to select the right EOL convention for communicating
- ;; with the process.
- (let ((cs (or (and (memq 'utf-8 (coding-system-list))
- (string-match "utf-?8" (tramp-get-remote-locale vec))
- (cons 'utf-8 'utf-8))
- (tramp-compat-funcall 'process-coding-system proc)
- (cons 'undecided 'undecided)))
- cs-decode cs-encode)
- (when (symbolp cs) (setq cs (cons cs cs)))
- (setq cs-decode (or (car cs) 'undecided)
- cs-encode (or (cdr cs) 'undecided))
- (setq cs-encode
- (tramp-compat-coding-system-change-eol-conversion
- cs-encode
- (if (string-match
- "^Darwin" (tramp-get-connection-property vec "uname" ""))
- 'mac 'unix)))
- (tramp-send-command vec "echo foo ; echo bar" t)
- (goto-char (point-min))
- (when (search-forward "\r" nil t)
- (setq cs-decode (tramp-compat-coding-system-change-eol-conversion
- cs-decode 'dos)))
- ;; Special setting for Mac OS X.
- (when (and (string-match
- "^Darwin" (tramp-get-connection-property vec "uname" ""))
- (memq 'utf-8-hfs (coding-system-list)))
- (setq cs-decode 'utf-8-hfs
- cs-encode 'utf-8-hfs))
- (tramp-compat-funcall
- 'set-buffer-process-coding-system cs-decode cs-encode)
- (tramp-message
- vec 5 "Setting coding system to `%s' and `%s'" cs-decode cs-encode))
- ;; Look for ^M and do something useful if found.
+ ;; Use MULE to select the right EOL convention for communicating
+ ;; with the process.
+ (let ((cs (or (and (memq 'utf-8 (coding-system-list))
+ (string-match "utf-?8" (tramp-get-remote-locale vec))
+ (cons 'utf-8 'utf-8))
+ (process-coding-system proc)
+ (cons 'undecided 'undecided)))
+ cs-decode cs-encode)
+ (when (symbolp cs) (setq cs (cons cs cs)))
+ (setq cs-decode (or (car cs) 'undecided)
+ cs-encode (or (cdr cs) 'undecided)
+ cs-encode
+ (coding-system-change-eol-conversion
+ cs-encode
+ (if (string-match
+ "^Darwin" (tramp-get-connection-property vec "uname" ""))
+ 'mac 'unix)))
+ (tramp-send-command vec "echo foo ; echo bar" t)
+ (goto-char (point-min))
(when (search-forward "\r" nil t)
- ;; We have found a ^M but cannot frob the process coding system
- ;; because we're running on a non-MULE Emacs. Let's try
- ;; stty, instead.
- (tramp-send-command vec "stty -onlcr" t))))
+ (setq cs-decode (coding-system-change-eol-conversion cs-decode 'dos)))
+ ;; Special setting for Mac OS X.
+ (when (and (string-match
+ "^Darwin" (tramp-get-connection-property vec "uname" ""))
+ (memq 'utf-8-hfs (coding-system-list)))
+ (setq cs-decode 'utf-8-hfs
+ cs-encode 'utf-8-hfs))
+ (set-buffer-process-coding-system cs-decode cs-encode)
+ (tramp-message
+ vec 5 "Setting coding system to `%s' and `%s'" cs-decode cs-encode)))
(tramp-send-command vec "set +o vi +o emacs" t)
;; Set `remote-tty' process property.
(let ((tty (tramp-send-command-and-read vec "echo \\\"`tty`\\\"" 'noerror)))
(unless (zerop (length tty))
- (tramp-compat-process-put proc 'remote-tty tty)))
+ (process-put proc 'remote-tty tty)))
;; Dump stty settings in the traces.
(when (>= tramp-verbose 9)
(copy-sequence tramp-remote-process-environment)))
unset vars item)
(while env
- (setq item (tramp-compat-split-string (car env) "="))
+ (setq item (split-string (car env) "=" 'omit))
(setcdr item (mapconcat 'identity (cdr item) "="))
(if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
(push (format "%s %s" (car item) (cdr item)) vars)
value
(format-spec-make
?t
- (tramp-file-name-handler
- 'file-remote-p tmpfile 'localname)))))
+ (file-remote-p tmpfile 'localname)))))
(tramp-maybe-send-script vec value name)
(setq rem-dec name)))
(tramp-message
(push
(vector
(tramp-file-name-method hop) (tramp-file-name-user hop)
- (tramp-compat-funcall 'tramp-gw-open-connection vec gw hop) nil nil)
+ (tramp-gw-open-connection vec gw hop) nil nil)
target-alist)
;; For the password prompt, we need the correct values.
;; Therefore, we must remember the gateway vector. But we
(unless (and p (processp p) (memq (process-status p) '(run open)))
;; If `non-essential' is non-nil, don't reopen a new connection.
+ ;; This variable has been introduced with Emacs 24.1.
(when (and (boundp 'non-essential) (symbol-value 'non-essential))
(throw 'non-essential 'non-essential))
;; Set sentinel and query flag.
(tramp-set-connection-property p "vector" vec)
(set-process-sentinel p 'tramp-process-sentinel)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
(setq tramp-current-connection
(cons (butlast (append vec nil) 2) (current-time))
tramp-current-host (system-name))
(when (and (numberp (nth 2 attr)) (< (nth 2 attr) 0))
(setcar (nthcdr 2 attr) -1))
(when (and (floatp (nth 2 attr))
- (<= (nth 2 attr) (tramp-compat-most-positive-fixnum)))
+ (<= (nth 2 attr) most-positive-fixnum))
(setcar (nthcdr 2 attr) (round (nth 2 attr))))
(when (and (numberp (nth 3 attr)) (< (nth 3 attr) 0))
(setcar (nthcdr 3 attr) -1))
(when (and (floatp (nth 3 attr))
- (<= (nth 3 attr) (tramp-compat-most-positive-fixnum)))
+ (<= (nth 3 attr) most-positive-fixnum))
(setcar (nthcdr 3 attr) (round (nth 3 attr))))
;; Convert last access time.
(unless (listp (nth 4 attr))
(when (< (nth 7 attr) 0)
(setcar (nthcdr 7 attr) -1))
(when (and (floatp (nth 7 attr))
- (<= (nth 7 attr) (tramp-compat-most-positive-fixnum)))
+ (<= (nth 7 attr) most-positive-fixnum))
(setcar (nthcdr 7 attr) (round (nth 7 attr))))
;; Convert file mode bits to string.
(unless (stringp (nth 8 attr))
(when elt1
(setcdr elt1
(append
- (tramp-compat-split-string (or default-remote-path "") ":")
+ (split-string (or default-remote-path "") ":" 'omit)
(cdr elt1)))
(setq remote-path (delq 'tramp-default-remote-path remote-path)))
(when elt2
(setcdr elt2
(append
- (tramp-compat-split-string (or own-remote-path "") ":")
+ (split-string (or own-remote-path "") ":" 'omit)
(cdr elt2)))
(setq remote-path (delq 'tramp-own-remote-path remote-path)))
vec "stat" (tramp-get-remote-path vec)))
tmp)
;; Check whether stat(1) returns usable syntax. "%s" does not
- ;; work on older AIX systems.
+ ;; work on older AIX systems. Recent GNU stat versions (8.24?)
+ ;; use shell quoted format for "%N", we check the boundaries "`"
+ ;; and "'", therefore. See Bug#23422 in coreutils.
(when result
(setq tmp
(tramp-send-command-and-read
vec (format "%s -c '(\"%%N\" %%s)' /" result) 'noerror))
(unless (and (listp tmp) (stringp (car tmp))
- (string-match "^./.$" (car tmp))
+ (string-match "^`/'$" (car tmp))
(integerp (cadr tmp)))
(setq result nil)))
result)))
"%s -t %s %s"
result
(format-time-string "%Y%m%d%H%M.%S")
- (tramp-file-name-handler 'file-remote-p tmpfile 'localname))))
+ (file-remote-p tmpfile 'localname))))
(delete-file tmpfile))
result)))
(directory-files . tramp-smb-handle-directory-files)
(directory-files-and-attributes
. tramp-handle-directory-files-and-attributes)
- (dired-call-process . ignore)
(dired-compress-file . ignore)
(dired-uncache . tramp-handle-dired-uncache)
(expand-file-name . tramp-smb-handle-expand-file-name)
(shell-command . tramp-handle-shell-command)
(start-file-process . tramp-smb-handle-start-file-process)
(substitute-in-file-name . tramp-smb-handle-substitute-in-file-name)
- (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+ (unhandled-file-name-directory . ignore)
(vc-registered . ignore)
(verify-visited-file-modtime . tramp-handle-verify-visited-file-modtime)
(write-region . tramp-smb-handle-write-region))
(unwind-protect
(progn
(make-directory tmpdir)
- (tramp-compat-copy-directory
- dirname tmpdir keep-date 'parents)
- (tramp-compat-copy-directory
+ (copy-directory dirname tmpdir keep-date 'parents)
+ (copy-directory
(expand-file-name (file-name-nondirectory dirname) tmpdir)
newname keep-date parents))
- (tramp-compat-delete-directory tmpdir 'recursive))))
+ (delete-directory tmpdir 'recursive))))
;; We can copy recursively.
((or t1 t2)
(port (tramp-file-name-port v))
(share (tramp-smb-get-share v))
(localname (file-name-as-directory
- (tramp-compat-replace-regexp-in-string
+ (replace-regexp-in-string
"\\\\" "/" (tramp-smb-get-localname v))))
(tmpdir (make-temp-name
(expand-file-name
(tramp-message
v 6 "%s" (mapconcat 'identity (process-command p) " "))
(tramp-set-connection-property p "vector" v)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
(tramp-process-actions p v nil tramp-smb-actions-with-tar)
(while (memq (process-status p) '(run open))
;; Reset the transfer process properties.
(tramp-set-connection-property v "process-name" nil)
(tramp-set-connection-property v "process-buffer" nil)
- (when t1 (tramp-compat-delete-directory tmpdir 'recurse))))
+ (when t1 (delete-directory tmpdir 'recurse))))
;; Handle KEEP-DATE argument.
(when keep-date
0 (format "Copying %s to %s" filename newname)
(if (file-directory-p filename)
- (tramp-compat-copy-directory filename newname keep-date t t)
+ (tramp-compat-copy-directory
+ filename newname keep-date 'parents 'copy-contents)
(let ((tmpfile (file-local-copy filename)))
(if tmpfile
(mapc
(lambda (file)
(if (file-directory-p file)
- (tramp-compat-delete-directory file recursive)
+ (delete-directory file recursive)
(delete-file file)))
;; We do not want to delete "." and "..".
(directory-files
;; Sort them if necessary.
(unless nosort (setq result (sort result 'string-lessp)))
;; Remove double entries.
- (tramp-compat-delete-dups result)))
+ (delete-dups result)))
(defun tramp-smb-handle-expand-file-name (name &optional dir)
"Like `expand-file-name' for Tramp files."
(domain (tramp-file-name-domain v))
(port (tramp-file-name-port v))
(share (tramp-smb-get-share v))
- (localname (tramp-compat-replace-regexp-in-string
+ (localname (replace-regexp-in-string
"\\\\" "/" (tramp-smb-get-localname v)))
(args (list (concat "//" real-host "/" share) "-E")))
(tramp-message
v 6 "%s" (mapconcat 'identity (process-command p) " "))
(tramp-set-connection-property p "vector" v)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
(tramp-process-actions p v nil tramp-smb-actions-get-acl)
(when (> (point-max) (point-min))
- (tramp-compat-funcall
- 'substring-no-properties (buffer-string)))))
+ (substring-no-properties (buffer-string)))))
;; Reset the transfer process properties.
(tramp-set-connection-property v "process-name" nil)
(tramp-smb-send-command
v
(if (tramp-smb-get-cifs-capabilities v)
- (format
- "posix_mkdir \"%s\" %s"
- file (tramp-compat-decimal-to-octal (default-file-modes)))
+ (format "posix_mkdir \"%s\" %o" file (default-file-modes))
(format "mkdir \"%s\"" file)))
;; We must also flush the cache of the directory, because
;; `file-attributes' reads the values from there.
(unless outbuf
(kill-buffer (tramp-get-connection-property v "process-buffer" nil)))
- ;; `process-file-side-effects' has been introduced with GNU
- ;; Emacs 23.2. If set to nil, no remote file will be changed
- ;; by `program'. If it doesn't exist, we assume its default
- ;; value t.
- (unless (and (boundp 'process-file-side-effects)
- (not (symbol-value 'process-file-side-effects)))
+ (unless process-file-side-effects
(tramp-flush-directory-property v ""))
;; Return exit status.
(tramp-error v2 'file-error "Cannot rename `%s'" filename))))
;; We must rename via copy.
- (tramp-compat-copy-file filename newname ok-if-already-exists t t t)
+ (copy-file
+ filename newname ok-if-already-exists 'keep-time 'preserve-uid-gid)
(if (file-directory-p filename)
- (tramp-compat-delete-directory filename 'recursive)
+ (delete-directory filename 'recursive)
(delete-file filename)))))
(defun tramp-smb-action-set-acl (proc vec)
(domain (tramp-file-name-domain v))
(port (tramp-file-name-port v))
(share (tramp-smb-get-share v))
- (localname (tramp-compat-replace-regexp-in-string
+ (localname (replace-regexp-in-string
"\\\\" "/" (tramp-smb-get-localname v)))
(args (list (concat "//" real-host "/" share) "-E" "-S"
- (tramp-compat-replace-regexp-in-string
+ (replace-regexp-in-string
"\n" "," acl-string))))
(if (not (zerop (length real-user)))
(tramp-message
v 6 "%s" (mapconcat 'identity (process-command p) " "))
(tramp-set-connection-property p "vector" v)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
(tramp-process-actions p v nil tramp-smb-actions-set-acl)
(goto-char (point-max))
(unless (re-search-backward "tramp_exit_status [0-9]+" nil t)
(when (tramp-smb-get-cifs-capabilities v)
(tramp-flush-file-property v localname)
(unless (tramp-smb-send-command
- v (format "chmod \"%s\" %s"
- (tramp-smb-get-localname v)
- (tramp-compat-decimal-to-octal mode)))
+ v (format "chmod \"%s\" %o" (tramp-smb-get-localname v) mode))
(tramp-error
v 'file-error "Error while changing file's mode %s" filename)))))
"Like `write-region' for Tramp files."
(setq filename (expand-file-name filename))
(with-parsed-tramp-file-name filename nil
- ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
- (when (and (not (featurep 'xemacs))
- confirm (file-exists-p filename))
+ (when (and confirm (file-exists-p filename))
(unless (y-or-n-p (format "File %s exists; overwrite anyway? "
filename))
(tramp-error v 'file-error "File not overwritten")))
;; Add directory itself.
(push '("" "drwxrwxrwx" 0 (0 0)) res)
- ;; There's a very strange error (debugged with XEmacs 21.4.14)
- ;; If there's no short delay, it returns nil. No idea about.
- (when (featurep 'xemacs) (sleep-for 0.01))
-
;; Return entries.
(delq nil res))))))
(member
"pathnames"
(split-string
- (buffer-substring (point) (point-at-eol)) nil t)))))))))
+ (buffer-substring (point) (point-at-eol)) nil 'omit)))))))))
(defun tramp-smb-get-stat-capability (vec)
"Check, whether the SMB server supports the STAT command."
(tramp-message
vec 6 "%s" (mapconcat 'identity (process-command p) " "))
(tramp-set-connection-property p "vector" vec)
- (tramp-compat-set-process-query-on-exit-flag p nil)
+ (set-process-query-on-exit-flag p nil)
;; Set variables for computing the prompt for reading password.
(setq tramp-current-method tramp-smb-method
;; Notes:
;; -----
;;
-;; This package only works for Emacs 22.1 and higher, and for XEmacs 21.4
-;; and higher. For XEmacs 21, you need the package `fsf-compat' for
-;; the `with-timeout' macro.
+;; This package only works for Emacs 23.1 and higher.
;;
;; Also see the todo list at the bottom of this file.
;;
;; Pacify byte-compiler.
(eval-when-compile
(require 'cl))
-(defvar bkup-backup-directory-info)
-(defvar directory-sep-char)
(defvar eshell-path-env)
-(defvar ls-lisp-use-insert-directory-program)
-(defvar outline-regexp)
;;; User Customizable Internal Variables:
:group 'tramp
:type 'integer)
-;; Emacs case.
-(eval-and-compile
- (when (boundp 'backup-directory-alist)
- (defcustom tramp-backup-directory-alist nil
- "Alist of filename patterns and backup directory names.
+(defcustom tramp-backup-directory-alist nil
+ "Alist of filename patterns and backup directory names.
Each element looks like (REGEXP . DIRECTORY), with the same meaning like
in `backup-directory-alist'. If a Tramp file is backed up, and DIRECTORY
is a local file name, the backup directory is prepended with Tramp file
gives the same backup policy for Tramp files on their hosts like the
policy for local files."
- :group 'tramp
- :type '(repeat (cons (regexp :tag "Regexp matching filename")
- (directory :tag "Backup directory name"))))))
-
-;; XEmacs case. We cannot check for `bkup-backup-directory-info', because
-;; the package "backup-dir" might not be loaded yet.
-(eval-and-compile
- (when (featurep 'xemacs)
- (defcustom tramp-bkup-backup-directory-info nil
- "Alist of (FILE-REGEXP BACKUP-DIR OPTIONS ...))
-It has the same meaning like `bkup-backup-directory-info' from package
-`backup-dir'. If a Tramp file is backed up, and BACKUP-DIR is a local
-file name, the backup directory is prepended with Tramp file name prefix
-\(method, user, host) of file.
-
-\(setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
-
-gives the same backup policy for Tramp files on their hosts like the
-policy for local files."
- :type '(repeat
- (list (regexp :tag "File regexp")
- (string :tag "Backup Dir")
- (set :inline t
- (const ok-create)
- (const full-path)
- (const prepend-name)
- (const search-upward))))
- :group 'tramp)))
+ :group 'tramp
+ :type '(repeat (cons (regexp :tag "Regexp matching filename")
+ (directory :tag "Backup directory name"))))
(defcustom tramp-auto-save-directory nil
"Put auto-save files in this directory, if set.
(directory :tag "Auto save directory name")))
(defcustom tramp-encoding-shell
- (if (memq system-type '(windows-nt))
- (getenv "COMSPEC")
+ (if (boundp 'w32-shell-name)
+ (symbol-value 'w32-shell-name)
"/bin/sh")
"Use this program for encoding and decoding commands on the local host.
This shell is used to execute the encoding and decoding command on the
:group 'tramp
:type '(file :must-match t))
-(defcustom tramp-encoding-command-switch
- (if (string-match "cmd\\.exe" (or tramp-encoding-shell ""))
- "/c"
- "-c")
+(defcustom tramp-encoding-command-switch (if (boundp 'w32-shell-name) "/c" "-c")
"Use this switch together with `tramp-encoding-shell' for local commands.
See the variable `tramp-encoding-shell' for more information."
:group 'tramp
:type 'string)
(defcustom tramp-encoding-command-interactive
- (unless (string-match "cmd\\.exe" (or tramp-encoding-shell "")) "-i")
+ (unless (boundp 'w32-shell-name) "-i")
"Use this switch together with `tramp-encoding-shell' for interactive shells.
See the variable `tramp-encoding-shell' for more information."
:version "24.1"
;; PuTTY is installed. We don't take it, if it is installed on a
;; non-windows system, or pscp from the pssh (parallel ssh) package
;; is found.
- ((and (eq system-type 'windows-nt)
- (executable-find "pscp"))
- (if (or (fboundp 'password-read)
- (fboundp 'auth-source-user-or-password)
- (fboundp 'auth-source-search)
- ;; Pageant is running.
- (tramp-compat-process-running-p "Pageant"))
- "pscp"
- "plink"))
+ ((and (eq system-type 'windows-nt) (executable-find "pscp")) "pscp")
;; There is an ssh installation.
- ((executable-find "scp")
- (if (or (fboundp 'password-read)
- (fboundp 'auth-source-user-or-password)
- (fboundp 'auth-source-search)
- ;; ssh-agent is running.
- (getenv "SSH_AUTH_SOCK")
- (getenv "SSH_AGENT_PID"))
- "scp"
- "ssh"))
+ ((executable-find "scp") "scp")
;; Fallback.
(t "ftp"))
"Default method to use for transferring files.
* `tramp-parse-sknownhosts' for \"~/.ssh2/knownhosts/*\" like files,
* `tramp-parse-hosts' for \"/etc/hosts\" like files,
* `tramp-parse-passwd' for \"/etc/passwd\" like files.
+ * `tramp-parse-etc-group' for \"/etc/group\" like files.
* `tramp-parse-netrc' for \"~/.netrc\" like files.
* `tramp-parse-putty' for PuTTY registered sessions.
;; regexp works only for GNU Emacs.
;; Allow also [] style prompts. They can appear only during
;; connection initialization; Tramp redefines the prompt afterwards.
- (concat (if (featurep 'xemacs) "" "\\(?:^\\|\r\\)")
+ (concat "\\(?:^\\|\r\\)"
"[^]#$%>\n]*#?[]#$%>] *\\(\e\\[[0-9;]*[a-zA-Z] *\\)*")
"Regexp to match prompts from remote shell.
Normally, Tramp expects you to configure `shell-prompt-pattern'
(defcustom tramp-password-prompt-regexp
(format "^.*\\(%s\\).*:\^@? *"
+ ;; `password-word-equivalents' has been introduced with Emacs 24.4.
(if (boundp 'password-word-equivalents)
(regexp-opt (symbol-value 'password-word-equivalents))
"password\\|passphrase"))
(make-variable-buffer-local 'tramp-temp-buffer-file-name)
(put 'tramp-temp-buffer-file-name 'permanent-local t)
-;; XEmacs is distributed with few Lisp packages. Further packages are
-;; installed using EFS. If we use a unified filename format, then
-;; Tramp is required in addition to EFS. (But why can't Tramp just
-;; disable EFS when Tramp is loaded? Then XEmacs can ship with EFS
-;; just like before.) Another reason for using a separate filename
-;; syntax on XEmacs is that EFS hooks into XEmacs in many places, but
-;; Tramp only knows how to deal with `file-name-handler-alist', not
-;; the other places.
-
-;; Currently, we have the choice between 'ftp and 'sep.
;;;###autoload
-(defcustom tramp-syntax
- (if (featurep 'xemacs) 'sep 'ftp)
+(defcustom tramp-syntax 'ftp
"Tramp filename syntax to be used.
It can have the following values:
- `ftp' -- Ange-FTP respective EFS like syntax (GNU Emacs default)
- `sep' -- Syntax as defined for XEmacs."
+ `ftp' -- Ange-FTP like syntax
+ `sep' -- Syntax as defined for XEmacs originally."
:group 'tramp
:version "24.4"
- :type `(choice (const :tag ,(if (featurep 'xemacs) "EFS" "Ange-FTP") ftp)
+ :type '(choice (const :tag "Ange-FTP" ftp)
(const :tag "XEmacs" sep)))
(defconst tramp-prefix-format
"\\`/\\(\\[.*\\]\\|[^/|:]\\{2,\\}[^/|]*\\):"
"\\`/[^/|:][^/|]*:")
"Value for `tramp-file-name-regexp' for unified remoting.
-Emacs (not XEmacs) uses a unified filename syntax for Ange-FTP and
-Tramp. See `tramp-file-name-structure' for more explanations.
+See `tramp-file-name-structure' for more explanations.
On W32 systems, the volume letter must be ignored.")
;;;###autoload
(defconst tramp-file-name-regexp-separate "\\`/\\[.*\\]"
"Value for `tramp-file-name-regexp' for separate remoting.
-XEmacs uses a separate filename syntax for Tramp and EFS.
See `tramp-file-name-structure' for more explanations.")
;;;###autoload
(if (memq system-type '(cygwin windows-nt))
"\\`/[^/]\\{2,\\}\\'" "\\`/[^/]*\\'")
"Value for `tramp-completion-file-name-regexp' for unified remoting.
-GNU Emacs uses a unified filename syntax for Tramp and Ange-FTP.
See `tramp-file-name-structure' for more explanations.
On W32 systems, the volume letter must be ignored.")
(defconst tramp-completion-file-name-regexp-separate
"\\`/\\([[][^]]*\\)?\\'"
"Value for `tramp-completion-file-name-regexp' for separate remoting.
-XEmacs uses a separate filename syntax for Tramp and EFS.
See `tramp-file-name-structure' for more explanations.")
;;;###autoload
;; to drop bytes when data is sent too quickly. There is also a connection
;; buffer local variable, which is computed depending on remote host properties
;; when `tramp-chunksize' is zero or nil.
-(defcustom tramp-chunksize
- (when (and (not (featurep 'xemacs))
- (memq system-type '(hpux)))
- 500)
+(defcustom tramp-chunksize (when (memq system-type '(hpux)) 500)
;; Parentheses in docstring starting at beginning of line are escaped.
;; Fontification is messed up when
;; `open-paren-in-column-0-is-defun-start' set to t.
Afterwards, check in `tramp-methods'. If the `tramp-methods'
entry does not exist, return nil."
(let ((hash-entry
- (tramp-compat-replace-regexp-in-string
- "^tramp-" "" (symbol-name param))))
+ (replace-regexp-in-string "^tramp-" "" (symbol-name param))))
(if (tramp-connection-property-p vec hash-entry)
;; We use the cached property.
- (tramp-get-connection-property vec hash-entry nil)
+ (tramp-get-connection-property vec hash-entry nil)
;; Use the static value from `tramp-methods'.
(let ((methods-entry
(assoc param (assoc (tramp-file-name-method vec) tramp-methods))))
;; This works with the current set of `tramp-obsolete-methods'.
;; Must be improved, if their are more sophisticated replacements.
(setq result (substring result 0 -1)))
- ;; We must mark, whether a default value has been used. Not
- ;; applicable for XEmacs.
- (if (or method (null result) (null (functionp 'propertize)))
+ ;; We must mark, whether a default value has been used.
+ (if (or method (null result))
result
- (tramp-compat-funcall 'propertize result 'tramp-default t))))
+ (propertize result 'tramp-default t))))
(defun tramp-find-user (method user host)
"Return the right user string to use.
(setq choices nil)))
luser)
tramp-default-user)))
- ;; We must mark, whether a default value has been used. Not
- ;; applicable for XEmacs.
- (if (or user (null result) (null (functionp 'propertize)))
+ ;; We must mark, whether a default value has been used.
+ (if (or user (null result))
result
- (tramp-compat-funcall 'propertize result 'tramp-default t))))
+ (propertize result 'tramp-default t))))
(defun tramp-find-host (method user host)
"Return the right host string to use.
(when (bobp)
(insert
(format
- ";; %sEmacs: %s Tramp: %s -*- mode: outline; -*-"
- (if (featurep 'sxemacs) "SX" (if (featurep 'xemacs) "X" "GNU "))
+ ";; Emacs: %s Tramp: %s -*- mode: outline; -*-"
emacs-version tramp-version))
(when (>= tramp-verbose 10)
(insert
'("tramp-backtrace"
"tramp-compat-condition-case-unless-debug"
"tramp-compat-funcall"
- "tramp-compat-with-temp-message"
"tramp-condition-case-unless-debug"
"tramp-debug-message"
"tramp-error"
(put 'with-parsed-tramp-file-name 'lisp-indent-function 2)
(put 'with-parsed-tramp-file-name 'edebug-form-spec '(form symbolp body))
-(tramp-compat-font-lock-add-keywords
- 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>"))
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>"))
(defun tramp-progress-reporter-update (reporter &optional value)
(let* ((parameters (cdr reporter))
(message (aref parameters 3)))
(when (string-match message (or (current-message) ""))
- (tramp-compat-funcall 'progress-reporter-update reporter value))))
+ (progress-reporter-update reporter value))))
(defmacro with-tramp-progress-reporter (vec level message &rest body)
"Executes BODY, spinning a progress reporter with MESSAGE.
;; Display only when there is a minimum level.
(<= ,level (min tramp-verbose 3)))
(ignore-errors
- (let ((pr (tramp-compat-funcall
- #'make-progress-reporter ,message)))
+ (let ((pr (make-progress-reporter ,message nil nil)))
(when pr
- (run-at-time 3 0.1
- #'tramp-progress-reporter-update pr)))))))
+ (run-at-time
+ 3 0.1 #'tramp-progress-reporter-update pr)))))))
(unwind-protect
;; Execute the body.
(prog1 (progn ,@body) (setq cookie "done"))
;; Stop progress reporter.
- (if tm (tramp-compat-funcall 'cancel-timer tm))
+ (if tm (cancel-timer tm))
(tramp-message ,vec ,level "%s...%s" ,message cookie)))))
-(tramp-compat-font-lock-add-keywords
+(font-lock-add-keywords
'emacs-lisp-mode '("\\<with-tramp-progress-reporter\\>"))
(defmacro with-tramp-file-property (vec file property &rest body)
(put 'with-tramp-file-property 'lisp-indent-function 3)
(put 'with-tramp-file-property 'edebug-form-spec t)
-(tramp-compat-font-lock-add-keywords
- 'emacs-lisp-mode '("\\<with-tramp-file-property\\>"))
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-tramp-file-property\\>"))
(defmacro with-tramp-connection-property (key property &rest body)
"Check in Tramp for property PROPERTY, otherwise executes BODY and set."
(put 'with-tramp-connection-property 'lisp-indent-function 2)
(put 'with-tramp-connection-property 'edebug-form-spec t)
-(tramp-compat-font-lock-add-keywords
+(font-lock-add-keywords
'emacs-lisp-mode '("\\<with-tramp-connection-property\\>"))
(defun tramp-drop-volume-letter (name)
special handling of `substitute-in-file-name'."
(when (symbol-value 'minibuffer-completing-file-name)
(setq tramp-rfn-eshadow-overlay
- (tramp-compat-funcall
- 'make-overlay
- (tramp-compat-funcall 'minibuffer-prompt-end)
- (tramp-compat-funcall 'minibuffer-prompt-end)))
+ (make-overlay (minibuffer-prompt-end) (minibuffer-prompt-end)))
;; Copy rfn-eshadow-overlay properties.
- (let ((props (tramp-compat-funcall
- 'overlay-properties (symbol-value 'rfn-eshadow-overlay))))
+ (let ((props (overlay-properties (symbol-value 'rfn-eshadow-overlay))))
(while props
;; The `field' property prevents correct minibuffer
;; completion; we exclude it.
(if (not (eq (car props) 'field))
- (tramp-compat-funcall
- 'overlay-put tramp-rfn-eshadow-overlay (pop props) (pop props))
+ (overlay-put tramp-rfn-eshadow-overlay (pop props) (pop props))
(pop props) (pop props))))))
-(when (boundp 'rfn-eshadow-setup-minibuffer-hook)
- (add-hook 'rfn-eshadow-setup-minibuffer-hook
- 'tramp-rfn-eshadow-setup-minibuffer)
- (add-hook 'tramp-unload-hook
- (lambda ()
- (remove-hook 'rfn-eshadow-setup-minibuffer-hook
- 'tramp-rfn-eshadow-setup-minibuffer))))
+(add-hook 'rfn-eshadow-setup-minibuffer-hook
+ 'tramp-rfn-eshadow-setup-minibuffer)
+(add-hook 'tramp-unload-hook
+ (lambda ()
+ (remove-hook 'rfn-eshadow-setup-minibuffer-hook
+ 'tramp-rfn-eshadow-setup-minibuffer)))
(defconst tramp-rfn-eshadow-update-overlay-regexp
(format "[^%s/~]*\\(/\\|~\\)" tramp-postfix-host-format))
been set up by `rfn-eshadow-setup-minibuffer'."
;; In remote files name, there is a shadowing just for the local part.
(ignore-errors
- (let ((end (or (tramp-compat-funcall
- 'overlay-end (symbol-value 'rfn-eshadow-overlay))
- (tramp-compat-funcall 'minibuffer-prompt-end)))
+ (let ((end (or (overlay-end (symbol-value 'rfn-eshadow-overlay))
+ (minibuffer-prompt-end)))
;; We do not want to send any remote command.
(non-essential t))
(when
(tramp-tramp-file-p
- (tramp-compat-funcall
- 'buffer-substring-no-properties end (point-max)))
+ (buffer-substring-no-properties end (point-max)))
(save-excursion
(save-restriction
(narrow-to-region
(let ((rfn-eshadow-overlay tramp-rfn-eshadow-overlay)
(rfn-eshadow-update-overlay-hook nil)
file-name-handler-alist)
- (tramp-compat-funcall
- 'move-overlay rfn-eshadow-overlay (point-max) (point-max))
- (tramp-compat-funcall 'rfn-eshadow-update-overlay))))))))
-
-(when (boundp 'rfn-eshadow-update-overlay-hook)
- (add-hook 'rfn-eshadow-update-overlay-hook
- 'tramp-rfn-eshadow-update-overlay)
- (add-hook 'tramp-unload-hook
- (lambda ()
- (remove-hook 'rfn-eshadow-update-overlay-hook
- 'tramp-rfn-eshadow-update-overlay))))
+ (move-overlay rfn-eshadow-overlay (point-max) (point-max))
+ (rfn-eshadow-update-overlay))))))))
+
+(add-hook 'rfn-eshadow-update-overlay-hook
+ 'tramp-rfn-eshadow-update-overlay)
+(add-hook 'tramp-unload-hook
+ (lambda ()
+ (remove-hook 'rfn-eshadow-update-overlay-hook
+ 'tramp-rfn-eshadow-update-overlay)))
;; Inodes don't exist for some file systems. Therefore we must
;; generate virtual ones. Used in `find-buffer-visiting'. The method
If the file modes of FILENAME cannot be determined, return the
value of `default-file-modes', without execute permissions."
(or (file-modes filename)
- (logand (default-file-modes) (tramp-compat-octal-to-decimal "0666"))))
+ (logand (default-file-modes) (string-to-number "0666" 8))))
(defun tramp-replace-environment-variables (filename)
"Replace environment variables in FILENAME.
Return the string with the replaced variables."
(or (ignore-errors
+ ;; Optional arg has been introduced with Emacs 24 (?).
(tramp-compat-funcall 'substitute-env-vars filename 'only-defined))
;; We need an own implementation.
(save-match-data
t nil filename)))
filename))))
-;; In XEmacs, electricity is implemented via a key map for ?/ and ?~,
-;; which calls corresponding functions (see minibuf.el).
-(when (fboundp 'minibuffer-electric-separator)
- (mapc
- (lambda (x)
- (eval
- `(defadvice ,x
- (around ,(intern (format "tramp-advice-%s" x)) activate)
- "Invoke `substitute-in-file-name' for Tramp files."
- (if (and (symbol-value 'minibuffer-electric-file-name-behavior)
- (tramp-tramp-file-p (buffer-substring)))
- ;; We don't need to handle `last-input-event', because
- ;; due to the key map we know it must be ?/ or ?~.
- (let ((s (concat (buffer-substring (point-min) (point))
- (string last-command-char))))
- (delete-region (point-min) (point))
- (insert (substitute-in-file-name s))
- (setq ad-return-value last-command-char))
- ad-do-it)))
- (eval
- `(add-hook
- 'tramp-unload-hook
- (lambda ()
- (ad-remove-advice ',x 'around ',(intern (format "tramp-advice-%s" x)))
- (ad-activate ',x)))))
-
- '(minibuffer-electric-separator
- minibuffer-electric-tilde)))
-
(defun tramp-find-file-name-coding-system-alist (filename tmpname)
"Like `find-operation-coding-system' for Tramp filenames.
Tramp's `insert-file-contents' and `write-region' work over
(cond
;; FILE resp DIRECTORY.
((member operation
- (list 'access-file 'byte-compiler-base-file-name 'delete-directory
- 'delete-file 'diff-latest-backup-file 'directory-file-name
- 'directory-files 'directory-files-and-attributes
- 'dired-compress-file 'dired-uncache
- 'file-accessible-directory-p 'file-attributes
- 'file-directory-p 'file-executable-p 'file-exists-p
- 'file-local-copy 'file-modes
- 'file-name-as-directory 'file-name-directory
- 'file-name-nondirectory 'file-name-sans-versions
- 'file-ownership-preserved-p 'file-readable-p
- 'file-regular-p 'file-remote-p 'file-symlink-p 'file-truename
- 'file-writable-p 'find-backup-file-name 'find-file-noselect
- 'get-file-buffer 'insert-directory 'insert-file-contents
- 'load 'make-directory 'make-directory-internal
- 'set-file-modes 'substitute-in-file-name
- 'unhandled-file-name-directory 'vc-registered
- ;; Emacs 22+ only.
- 'set-file-times
- ;; Emacs 24+ only.
- 'file-acl 'file-notify-add-watch
- 'file-selinux-context 'set-file-acl 'set-file-selinux-context
- ;; XEmacs only.
- 'abbreviate-file-name 'create-file-buffer
- 'dired-file-modtime 'dired-make-compressed-filename
- 'dired-recursive-delete-directory 'dired-set-file-modtime
- 'dired-shell-unhandle-file-name 'dired-uucode-file
- 'insert-file-contents-literally 'make-temp-name 'recover-file
- 'vm-imap-check-mail 'vm-pop-check-mail 'vm-spool-check-mail))
+ '(access-file byte-compiler-base-file-name delete-directory
+ delete-file diff-latest-backup-file directory-file-name
+ directory-files directory-files-and-attributes
+ dired-compress-file dired-uncache
+ file-accessible-directory-p file-attributes
+ file-directory-p file-executable-p file-exists-p
+ file-local-copy file-modes
+ file-name-as-directory file-name-directory
+ file-name-nondirectory file-name-sans-versions
+ file-ownership-preserved-p file-readable-p
+ file-regular-p file-remote-p file-symlink-p file-truename
+ file-writable-p find-backup-file-name find-file-noselect
+ get-file-buffer insert-directory insert-file-contents
+ load make-directory make-directory-internal
+ set-file-modes set-file-times substitute-in-file-name
+ unhandled-file-name-directory vc-registered
+ ;; Emacs 24+ only.
+ file-acl file-notify-add-watch file-selinux-context
+ set-file-acl set-file-selinux-context))
(if (file-name-absolute-p (nth 0 args))
(nth 0 args)
(expand-file-name (nth 0 args))))
;; FILE DIRECTORY resp FILE1 FILE2.
((member operation
- (list 'add-name-to-file 'copy-file 'expand-file-name
- 'file-name-all-completions 'file-name-completion
- 'file-newer-than-file-p 'make-symbolic-link 'rename-file
- ;; Emacs 23+ only.
- 'copy-directory
- ;; Emacs 24+ only.
- 'file-equal-p 'file-in-directory-p
- ;; XEmacs only.
- 'dired-make-relative-symlink
- 'vm-imap-move-mail 'vm-pop-move-mail 'vm-spool-move-mail))
+ '(add-name-to-file copy-directory copy-file expand-file-name
+ file-name-all-completions file-name-completion
+ file-newer-than-file-p make-symbolic-link rename-file
+ ;; Emacs 24+ only.
+ file-equal-p file-in-directory-p))
(save-match-data
(cond
((tramp-tramp-file-p (nth 0 args)) (nth 0 args))
(nth 2 args))
;; BUFFER.
((member operation
- (list 'set-visited-file-modtime 'verify-visited-file-modtime
- ;; Emacs 22+ only.
- 'make-auto-save-file-name
- ;; XEmacs only.
- 'backup-buffer))
+ '(make-auto-save-file-name
+ set-visited-file-modtime verify-visited-file-modtime))
(buffer-file-name
(if (bufferp (nth 0 args)) (nth 0 args) (current-buffer))))
;; COMMAND.
((member operation
- (list ;; not in Emacs 23+.
- 'dired-call-process
- ;; Emacs only.
- 'shell-command
- ;; Emacs 22+ only.
- 'process-file
- ;; Emacs 23+ only.
- 'start-file-process
- ;; XEmacs only.
- 'dired-print-file 'dired-shell-call-process))
+ '(process-file shell-command start-file-process))
default-directory)
;; PROC.
- ((member operation (list 'file-notify-rm-watch 'file-notify-valid-p))
+ ((member operation
+ '(;; Emacs 24+ only.
+ file-notify-rm-watch
+ ;; Emacs 25+ only.
+ file-notify-valid-p))
(when (processp (nth 0 args))
(with-current-buffer (process-buffer (nth 0 args))
default-directory)))
;; Unknown file primitive.
(t (error "unknown file I/O primitive: %s" operation))))
-(defun tramp-find-foreign-file-name-handler (filename)
+(defun tramp-find-foreign-file-name-handler
+ (filename &optional operation completion)
"Return foreign file name handler if exists."
(when (tramp-tramp-file-p filename)
(let ((v (tramp-dissect-file-name filename t))
elt res)
;; When we are not fully sure that filename completion is safe,
;; we should not return a handler.
- (when (or (tramp-file-name-method v) (tramp-file-name-user v)
+ (when (or (not completion)
+ (tramp-file-name-method v) (tramp-file-name-user v)
(and (tramp-file-name-host v)
(not (member (tramp-file-name-host v)
(mapcar 'car tramp-methods))))
- (not (tramp-completion-mode-p)))
+ ;; Some operations are safe by default.
+ (member
+ operation
+ '(file-name-as-directory
+ file-name-directory
+ file-name-nondirectory)))
(while handler
(setq elt (car handler)
handler (cdr handler))
(tramp-replace-environment-variables
(apply 'tramp-file-name-for-operation operation args)))
(completion (tramp-completion-mode-p))
- (foreign (tramp-find-foreign-file-name-handler filename)))
+ (foreign
+ (tramp-find-foreign-file-name-handler
+ filename operation completion))
+ result)
(with-parsed-tramp-file-name filename nil
;; Call the backend function.
(if foreign
(tramp-condition-case-unless-debug err
- (let ((sf (symbol-function foreign))
- result)
+ (let ((sf (symbol-function foreign)))
;; Some packages set the default directory to a
;; remote path, before respective Tramp packages
;; are already loaded. This results in
;; Propagate the error.
(t (signal (car err) (cdr err))))))
- ;; Nothing to do for us.
- (tramp-run-real-handler operation args)))))
+ ;; Nothing to do for us. However, since we are in
+ ;; `tramp-mode', we must suppress the volume letter on
+ ;; MS Windows.
+ (setq result (tramp-run-real-handler operation args))
+ (if (stringp result)
+ (tramp-drop-volume-letter result)
+ result)))))
;; When `tramp-mode' is not enabled, we don't do anything.
(tramp-run-real-handler operation args)))
(progn (defun tramp-completion-file-name-handler (operation &rest args)
"Invoke Tramp file name completion handler.
Falls back to normal file name handler if no Tramp file name handler exists."
- ;; We bind `directory-sep-char' here for XEmacs on Windows, which
- ;; would otherwise use backslash.
- (let ((directory-sep-char ?/)
- (fn (assoc operation tramp-completion-file-name-handler-alist)))
+ (let ((fn (assoc operation tramp-completion-file-name-handler-alist)))
(if (and
;; When `tramp-mode' is not enabled, we don't do anything.
fn tramp-mode
;; indicated his interest in using a fancier completion system.
(or (eq tramp-syntax 'sep)
(featurep 'tramp) ;; If it's loaded, we may as well use it.
- ;; `partial-completion-mode' does not exist in XEmacs.
- ;; It is obsoleted with Emacs 24.1.
+ ;; `partial-completion-mode' is obsoleted with Emacs 24.1.
(and (boundp 'partial-completion-mode)
(symbol-value 'partial-completion-mode))
;; FIXME: These may have been loaded even if the user never
;;;###autoload
(progn (defun tramp-autoload-file-name-handler (operation &rest args)
"Load Tramp file name handler, and perform OPERATION."
- ;; Avoid recursive loading of tramp.el. `temporary-file-directory'
- ;; does not exist in XEmacs, so we must use something else.
- (let ((default-directory "/"))
+ ;; Avoid recursive loading of tramp.el.
+ (let ((default-directory temporary-file-directory))
(load "tramp" nil t))
(apply operation args)))
;; variable. On the other hand, those files shouldn't have partial
;; Tramp file name syntax. Maybe another variable should be introduced
;; overwriting this check in such cases. Or we change Tramp file name
-;; syntax in order to avoid ambiguities, like in XEmacs ...
+;; syntax in order to avoid ambiguities.
;;;###tramp-autoload
(defun tramp-completion-mode-p ()
"Check, whether method / user name / host name completion is active."
;; Signal from outside. `non-essential' has been introduced in Emacs 24.
(and (boundp 'non-essential) (symbol-value 'non-essential))
tramp-completion-mode
- ;; Emacs.
(equal last-input-event 'tab)
(and (natnump last-input-event)
(or
(equal last-input-event ?\t)
(and (not (event-modifiers last-input-event))
(or (equal last-input-event ?\?)
- (equal last-input-event ?\ )))))
- ;; XEmacs.
- (and (featurep 'xemacs)
- ;; `last-input-event' might be nil.
- (not (null last-input-event))
- ;; `last-input-event' may have no character approximation.
- (tramp-compat-funcall 'event-to-character last-input-event)
- (or
- ;; ?\t has event-modifier 'control.
- (equal
- (tramp-compat-funcall 'event-to-character last-input-event) ?\t)
- (and (not (event-modifiers last-input-event))
- (or (equal
- (tramp-compat-funcall 'event-to-character last-input-event)
- ?\?)
- (equal
- (tramp-compat-funcall 'event-to-character last-input-event)
- ?\ )))))))
+ (equal last-input-event ?\ )))))))
(defun tramp-connectable-p (filename)
"Check, whether it is possible to connect the remote host w/o side-effects.
(tramp-parse-group
(concat "^\\(" tramp-ipv6-regexp "\\|" tramp-host-regexp "\\)") 1 " \t"))
-;; For su-alike methods it would be desirable to return "root@localhost"
-;; as default. Unfortunately, we have no information whether any user name
-;; has been typed already. So we use `tramp-current-user' as indication,
-;; assuming it is set in `tramp-completion-handle-file-name-all-completions'.
;;;###tramp-autoload
(defun tramp-parse-passwd (filename)
"Return a list of (user host) tuples allowed to access.
Host is always \"localhost\"."
- (if (zerop (length tramp-current-user))
- '(("root" nil))
- (tramp-parse-file filename 'tramp-parse-passwd-group)))
+ (with-tramp-connection-property nil "parse-passwd"
+ (if (executable-find "getent")
+ (with-temp-buffer
+ (when (zerop (tramp-call-process nil "getent" nil t nil "passwd"))
+ (goto-char (point-min))
+ (loop while (not (eobp)) collect
+ (tramp-parse-etc-group-group))))
+ (tramp-parse-file filename 'tramp-parse-passwd-group))))
(defun tramp-parse-passwd-group ()
"Return a (user host) tuple allowed to access.
(forward-line 1)
result))
+;;;###tramp-autoload
+(defun tramp-parse-etc-group (filename)
+ "Return a list of (group host) tuples allowed to access.
+Host is always \"localhost\"."
+ (with-tramp-connection-property nil "parse-group"
+ (if (executable-find "getent")
+ (with-temp-buffer
+ (when (zerop (tramp-call-process nil "getent" nil t nil "group"))
+ (goto-char (point-min))
+ (loop while (not (eobp)) collect
+ (tramp-parse-etc-group-group))))
+ (tramp-parse-file filename 'tramp-parse-etc-group-group))))
+
+(defun tramp-parse-etc-group-group ()
+ "Return a (group host) tuple allowed to access.
+Host is always \"localhost\"."
+ (let ((result)
+ (split (split-string (buffer-substring (point) (point-at-eol)) ":")))
+ (when (member (user-login-name) (split-string (nth 3 split) "," 'omit))
+ (setq result (list (nth 0 split) "localhost")))
+ (forward-line 1)
+ result))
+
;;;###tramp-autoload
(defun tramp-parse-netrc (filename)
"Return a list of (user host) tuples allowed to access.
"Return a list of (user host) tuples allowed to access.
User is always nil."
(if (memq system-type '(windows-nt))
- (with-temp-buffer
- (when (zerop (tramp-call-process
- nil "reg" nil t nil "query" registry-or-dirname))
- (goto-char (point-min))
- (loop while (not (eobp)) collect
- (tramp-parse-putty-group registry-or-dirname))))
+ (with-tramp-connection-property nil "parse-putty"
+ (with-temp-buffer
+ (when (zerop (tramp-call-process
+ nil "reg" nil t nil "query" registry-or-dirname))
+ (goto-char (point-min))
+ (loop while (not (eobp)) collect
+ (tramp-parse-putty-group registry-or-dirname)))))
;; UNIX case.
(tramp-parse-shostkeys-sknownhosts
registry-or-dirname (concat "^\\(" tramp-host-regexp "\\)$"))))
(substring directory 0 -1)
directory)))
-(defun tramp-handle-directory-files
- (directory &optional full match nosort files-only)
+(defun tramp-handle-directory-files (directory &optional full match nosort)
"Like `directory-files' for Tramp files."
- ;; FILES-ONLY is valid for XEmacs only.
(when (file-directory-p directory)
(setq directory (file-name-as-directory (expand-file-name directory)))
(let ((temp (nreverse (file-name-all-completions "" directory)))
(while temp
(setq item (directory-file-name (pop temp)))
- (when (and (or (null match) (string-match match item))
- (or (null files-only)
- ;; Files only.
- (and (equal files-only t) (file-regular-p item))
- ;; Directories only.
- (file-directory-p item)))
+ (when (or (null match) (string-match match item))
(push (if full (concat directory item) item)
result)))
(if nosort result (sort result 'string<)))))
"Like `directory-files-and-attributes' for Tramp files."
(mapcar
(lambda (x)
- (cons x (tramp-compat-file-attributes
+ (cons x (file-attributes
(if full x (expand-file-name x directory)) id-format)))
(directory-files directory full match nosort)))
-(defun tramp-handle-dired-uncache (dir &optional dir-p)
+(defun tramp-handle-dired-uncache (dir)
"Like `dired-uncache' for Tramp files."
- ;; DIR-P is valid for XEmacs only.
(with-parsed-tramp-file-name
- (if (or dir-p (file-directory-p dir)) dir (file-name-directory dir)) nil
+ (if (file-directory-p dir) dir (file-name-directory dir)) nil
(tramp-flush-directory-property v localname)))
(defun tramp-handle-file-accessible-directory-p (filename)
(defun tramp-handle-find-backup-file-name (filename)
"Like `find-backup-file-name' for Tramp files."
(with-parsed-tramp-file-name filename nil
- ;; We set both variables. It doesn't matter whether it is
- ;; Emacs or XEmacs.
(let ((backup-directory-alist
- ;; Emacs case.
- (when (boundp 'backup-directory-alist)
- (if (symbol-value 'tramp-backup-directory-alist)
- (mapcar
- (lambda (x)
- (cons
- (car x)
- (if (and (stringp (cdr x))
- (file-name-absolute-p (cdr x))
- (not (tramp-file-name-p (cdr x))))
- (tramp-make-tramp-file-name method user host (cdr x))
- (cdr x))))
- (symbol-value 'tramp-backup-directory-alist))
- (symbol-value 'backup-directory-alist))))
-
- (bkup-backup-directory-info
- ;; XEmacs case.
- (when (boundp 'bkup-backup-directory-info)
- (if (symbol-value 'tramp-bkup-backup-directory-info)
- (mapcar
- (lambda (x)
- (nconc
- (list (car x))
- (list
- (if (and (stringp (car (cdr x)))
- (file-name-absolute-p (car (cdr x)))
- (not (tramp-file-name-p (car (cdr x)))))
- (tramp-make-tramp-file-name
- method user host (car (cdr x)))
- (car (cdr x))))
- (cdr (cdr x))))
- (symbol-value 'tramp-bkup-backup-directory-info))
- (symbol-value 'bkup-backup-directory-info)))))
-
+ (if tramp-backup-directory-alist
+ (mapcar
+ (lambda (x)
+ (cons
+ (car x)
+ (if (and (stringp (cdr x))
+ (file-name-absolute-p (cdr x))
+ (not (tramp-file-name-p (cdr x))))
+ (tramp-make-tramp-file-name method user host (cdr x))
+ (cdr x))))
+ tramp-backup-directory-alist)
+ backup-directory-alist)))
(tramp-run-real-handler 'find-backup-file-name (list filename)))))
(defun tramp-handle-insert-directory
;; When the file is not readable for the owner, it
;; cannot be inserted, even if it is readable for the
;; group or for everybody.
- (set-file-modes
- local-copy (tramp-compat-octal-to-decimal "0600"))
+ (set-file-modes local-copy (string-to-number "0600" 8))
(when (and (null remote-copy)
(tramp-get-method-parameter
(setq tramp-temp-buffer-file-name local-copy))
;; We must ensure that `file-coding-system-alist'
- ;; matches `local-copy'. We must also use `visit',
- ;; otherwise there might be an error in the
- ;; `revert-buffer' function under XEmacs.
+ ;; matches `local-copy'.
(let ((file-coding-system-alist
(tramp-find-file-name-coding-system-alist
filename local-copy)))
(with-tramp-progress-reporter v 0 (format "Loading %s" file)
(let ((local-copy (file-local-copy file)))
(unwind-protect
- (tramp-compat-load local-copy noerror t nosuffix must-suffix)
+ (load local-copy noerror t nosuffix must-suffix)
(delete-file local-copy)))))
t)))
(current-buffer))))
;; There's some output, display it.
(when (with-current-buffer output-buffer (> (point-max) (point-min)))
- (if (functionp 'display-message-or-buffer)
- (tramp-compat-funcall 'display-message-or-buffer output-buffer)
- (pop-to-buffer output-buffer))))))))
+ (display-message-or-buffer output-buffer)))))))
(defun tramp-handle-substitute-in-file-name (filename)
"Like `substitute-in-file-name' for Tramp files.
(let (process-environment)
(tramp-run-real-handler 'substitute-in-file-name (list filename)))))
-(defun tramp-handle-unhandled-file-name-directory (_filename)
- "Like `unhandled-file-name-directory' for Tramp files."
- ;; Starting with Emacs 23, we must simply return nil. But we must
- ;; keep backward compatibility, also with XEmacs. "~/" cannot be
- ;; returned, because there might be machines without a HOME
- ;; directory (like hydra).
- (and (< emacs-major-version 23) "/"))
-
(defun tramp-handle-set-visited-file-modtime (&optional time-list)
"Like `set-visited-file-modtime' for Tramp files."
(unless (buffer-file-name)
;; connection.
(if (or (not f)
(eq (visited-file-modtime) 0)
- (not (tramp-file-name-handler 'file-remote-p f nil 'connected)))
+ (not (file-remote-p f nil 'connected)))
t
(with-parsed-tramp-file-name f nil
(let* ((remote-file-name-inhibit-cache t)
(with-current-buffer (process-buffer proc)
(file-exists-p
(concat (file-remote-p default-directory)
- (tramp-compat-process-get proc 'watch-name))))))
+ (process-get proc 'watch-name))))))
;;; Functions for establishing connection:
;; Under Windows XP, accept-process-output doesn't return
;; sometimes. So we add an additional timeout.
(with-timeout ((or timeout 1))
- (if (featurep 'xemacs)
- (accept-process-output p timeout timeout-msecs)
- (accept-process-output p timeout timeout-msecs (and proc t))))
+ (accept-process-output p timeout timeout-msecs (and proc t)))
(tramp-message proc 10 "%s %s %s\n%s"
proc (process-status proc) p (buffer-string)))))
(when (or (not (tramp-get-connection-property proc "check-remote-echo" nil))
;; Sometimes, the echo string is suppressed on the remote side.
(not (string-equal
- (tramp-compat-funcall
- 'substring-no-properties tramp-echo-mark-marker
+ (substring-no-properties
+ tramp-echo-mark-marker
0 (min tramp-echo-mark-marker-length (1- (point-max))))
- (tramp-compat-funcall
- 'buffer-substring-no-properties
+ (buffer-substring-no-properties
(point-min)
(min (+ (point-min) tramp-echo-mark-marker-length)
(point-max))))))
the string that matched, or nil. Waits indefinitely if TIMEOUT is
nil."
(with-current-buffer (process-buffer proc)
- (let ((found (tramp-check-for-regexp proc regexp))
- (start-time (current-time)))
+ (let ((found (tramp-check-for-regexp proc regexp)))
(cond (timeout
- ;; Work around a bug in XEmacs 21, where the timeout
- ;; expires faster than it should. This degenerates
- ;; to polling for buggy XEmacsen, but oh, well.
- (while (and (not found)
- (< (tramp-time-diff (current-time) start-time)
- timeout))
- (with-timeout (timeout)
- (while (not found)
- (tramp-accept-process-output proc 1)
- (unless (memq (process-status proc) '(run open))
- (tramp-error-with-buffer
- nil proc 'file-error "Process has died"))
- (setq found (tramp-check-for-regexp proc regexp))))))
+ (with-timeout (timeout)
+ (while (not found)
+ (tramp-accept-process-output proc 1)
+ (unless (memq (process-status proc) '(run open))
+ (tramp-error-with-buffer
+ nil proc 'file-error "Process has died"))
+ (setq found (tramp-check-for-regexp proc regexp)))))
(t
(while (not found)
(tramp-accept-process-output proc 1)
(let (buffer-read-only) (delete-region (point-min) (point-max)))
;; Replace "\n" by `tramp-rsh-end-of-line'.
(setq string
- (mapconcat 'identity
- (tramp-compat-split-string string "\n")
- tramp-rsh-end-of-line))
+ (mapconcat
+ 'identity (split-string string "\n") tramp-rsh-end-of-line))
(unless (or (string= string "")
(string-equal (substring string -1) tramp-rsh-end-of-line))
(setq string (concat string tramp-rsh-end-of-line)))
(save-match-data
(logior
(cond
- ((char-equal owner-read ?r) (tramp-compat-octal-to-decimal "00400"))
+ ((char-equal owner-read ?r) (string-to-number "00400" 8))
((char-equal owner-read ?-) 0)
(t (error "Second char `%c' must be one of `r-'" owner-read)))
(cond
- ((char-equal owner-write ?w) (tramp-compat-octal-to-decimal "00200"))
+ ((char-equal owner-write ?w) (string-to-number "00200" 8))
((char-equal owner-write ?-) 0)
(t (error "Third char `%c' must be one of `w-'" owner-write)))
(cond
- ((char-equal owner-execute-or-setid ?x)
- (tramp-compat-octal-to-decimal "00100"))
- ((char-equal owner-execute-or-setid ?S)
- (tramp-compat-octal-to-decimal "04000"))
- ((char-equal owner-execute-or-setid ?s)
- (tramp-compat-octal-to-decimal "04100"))
+ ((char-equal owner-execute-or-setid ?x) (string-to-number "00100" 8))
+ ((char-equal owner-execute-or-setid ?S) (string-to-number "04000" 8))
+ ((char-equal owner-execute-or-setid ?s) (string-to-number "04100" 8))
((char-equal owner-execute-or-setid ?-) 0)
(t (error "Fourth char `%c' must be one of `xsS-'"
owner-execute-or-setid)))
(cond
- ((char-equal group-read ?r) (tramp-compat-octal-to-decimal "00040"))
+ ((char-equal group-read ?r) (string-to-number "00040" 8))
((char-equal group-read ?-) 0)
(t (error "Fifth char `%c' must be one of `r-'" group-read)))
(cond
- ((char-equal group-write ?w) (tramp-compat-octal-to-decimal "00020"))
+ ((char-equal group-write ?w) (string-to-number "00020" 8))
((char-equal group-write ?-) 0)
(t (error "Sixth char `%c' must be one of `w-'" group-write)))
(cond
- ((char-equal group-execute-or-setid ?x)
- (tramp-compat-octal-to-decimal "00010"))
- ((char-equal group-execute-or-setid ?S)
- (tramp-compat-octal-to-decimal "02000"))
- ((char-equal group-execute-or-setid ?s)
- (tramp-compat-octal-to-decimal "02010"))
+ ((char-equal group-execute-or-setid ?x) (string-to-number "00010" 8))
+ ((char-equal group-execute-or-setid ?S) (string-to-number "02000" 8))
+ ((char-equal group-execute-or-setid ?s) (string-to-number "02010" 8))
((char-equal group-execute-or-setid ?-) 0)
(t (error "Seventh char `%c' must be one of `xsS-'"
group-execute-or-setid)))
(cond
- ((char-equal other-read ?r)
- (tramp-compat-octal-to-decimal "00004"))
+ ((char-equal other-read ?r) (string-to-number "00004" 8))
((char-equal other-read ?-) 0)
(t (error "Eighth char `%c' must be one of `r-'" other-read)))
(cond
- ((char-equal other-write ?w) (tramp-compat-octal-to-decimal "00002"))
- ((char-equal other-write ?-) 0)
- (t (error "Ninth char `%c' must be one of `w-'" other-write)))
+ ((char-equal other-write ?w) (string-to-number "00002" 8))
+ ((char-equal other-write ?-) 0)
+ (t (error "Ninth char `%c' must be one of `w-'" other-write)))
(cond
- ((char-equal other-execute-or-sticky ?x)
- (tramp-compat-octal-to-decimal "00001"))
- ((char-equal other-execute-or-sticky ?T)
- (tramp-compat-octal-to-decimal "01000"))
- ((char-equal other-execute-or-sticky ?t)
- (tramp-compat-octal-to-decimal "01001"))
+ ((char-equal other-execute-or-sticky ?x) (string-to-number "00001" 8))
+ ((char-equal other-execute-or-sticky ?T) (string-to-number "01000" 8))
+ ((char-equal other-execute-or-sticky ?t) (string-to-number "01001" 8))
((char-equal other-execute-or-sticky ?-) 0)
(t (error "Tenth char `%c' must be one of `xtT-'"
other-execute-or-sticky)))))))
;;;###tramp-autoload
(defun tramp-get-local-gid (id-format)
+ ;; `group-gid' has been introduced with Emacs 24.4.
(if (and (fboundp 'group-gid) (equal id-format 'integer))
(tramp-compat-funcall 'group-gid)
- (nth 3 (tramp-compat-file-attributes "~/" id-format))))
+ (nth 3 (file-attributes "~/" id-format))))
(defun tramp-get-local-locale (&optional vec)
;; We use key nil for local connection properties.
(tramp-get-file-property
vec (tramp-file-name-localname vec)
(concat "file-attributes-" suffix) nil)
- (tramp-compat-file-attributes
+ (file-attributes
(tramp-make-tramp-file-name
(tramp-file-name-method vec)
(tramp-file-name-user vec)
(or (tramp-get-method-parameter vec 'tramp-tmpdir) "/tmp"))))
(with-tramp-connection-property vec "tmpdir"
(or (and (file-directory-p dir) (file-writable-p dir)
- (tramp-file-name-handler 'file-remote-p dir 'localname))
+ (file-remote-p dir 'localname))
(tramp-error vec 'file-error "Directory %s not accessible" dir)))
dir))
(setq result nil)
;; This creates the file by side effect.
(set-file-times result)
- (set-file-modes result (tramp-compat-octal-to-decimal "0700"))))
+ (set-file-modes result (string-to-number "0700" 8))))
;; Return the local part.
(with-parsed-tramp-file-name result nil localname)))
(remove-hook 'kill-buffer-hook
'tramp-delete-temp-file-function)))
-;;; Auto saving to a special directory:
-(defvar auto-save-file-name-transforms)
-
(defun tramp-handle-make-auto-save-file-name ()
"Like `make-auto-save-file-name' for Tramp files.
Returns a file name in `tramp-auto-save-directory' for autosaving
(let ((system-type 'not-windows)
(auto-save-file-name-transforms
- (if (and (null tramp-auto-save-directory)
- (boundp 'auto-save-file-name-transforms))
- (symbol-value 'auto-save-file-name-transforms)))
+ (if (null tramp-auto-save-directory)
+ auto-save-file-name-transforms))
(buffer-file-name
(if (null tramp-auto-save-directory)
buffer-file-name
("]" . "_r"))
(buffer-file-name))
tramp-auto-save-directory))))
- ;; Run plain `make-auto-save-file-name'. There might be an advice when
- ;; it is not a magic file name operation (since Emacs 22).
- ;; We must deactivate it temporarily.
- (if (not (ad-is-active 'make-auto-save-file-name))
- (tramp-run-real-handler 'make-auto-save-file-name nil)
- ;; else
- (ad-deactivate 'make-auto-save-file-name)
- (prog1
- (tramp-run-real-handler 'make-auto-save-file-name nil)
- (ad-activate 'make-auto-save-file-name)))))
-
-(unless (tramp-exists-file-name-handler 'make-auto-save-file-name)
- (defadvice make-auto-save-file-name
- (around tramp-advice-make-auto-save-file-name () activate)
- "Invoke `tramp-*-handle-make-auto-save-file-name' for Tramp files."
- (if (tramp-tramp-file-p (buffer-file-name))
- ;; We cannot call `tramp-handle-make-auto-save-file-name'
- ;; directly, because this would bypass the locking mechanism.
- (setq ad-return-value
- (tramp-file-name-handler 'make-auto-save-file-name))
- ad-do-it))
- (add-hook
- 'tramp-unload-hook
- (lambda ()
- (ad-remove-advice
- 'make-auto-save-file-name
- 'around 'tramp-advice-make-auto-save-file-name)
- (ad-activate 'make-auto-save-file-name))))
-
-;; In XEmacs < 21.5, autosaved remote files have permission 0666 minus
-;; umask. This is a security threat.
-
-(defun tramp-set-auto-save-file-modes ()
- "Set permissions of autosaved remote files to the original permissions."
- (let ((bfn (buffer-file-name)))
- (when (and (tramp-tramp-file-p bfn)
- (buffer-modified-p)
- (stringp buffer-auto-save-file-name)
- (not (equal bfn buffer-auto-save-file-name)))
- (unless (file-exists-p buffer-auto-save-file-name)
- (write-region "" nil buffer-auto-save-file-name))
- ;; Permissions should be set always, because there might be an old
- ;; auto-saved file belonging to another original file. This could
- ;; be a security threat.
- (set-file-modes
- buffer-auto-save-file-name
- (or (file-modes bfn) (tramp-compat-octal-to-decimal "0600"))))))
-
-(unless (and (featurep 'xemacs)
- (= emacs-major-version 21)
- (> emacs-minor-version 4))
- (add-hook 'auto-save-hook 'tramp-set-auto-save-file-modes)
- (add-hook 'tramp-unload-hook
- (lambda ()
- (remove-hook 'auto-save-hook 'tramp-set-auto-save-file-modes))))
+ ;; Run plain `make-auto-save-file-name'.
+ (tramp-run-real-handler 'make-auto-save-file-name nil)))
(defun tramp-subst-strs-in-string (alist string)
"Replace all occurrences of the string FROM with TO in STRING.
(tramp-check-for-regexp proc tramp-password-prompt-regexp)
(format "%s for %s " (capitalize (match-string 1)) key))))
;; We suspend the timers while reading the password.
- (stimers (and (functionp 'with-timeout-suspend)
- (tramp-compat-funcall 'with-timeout-suspend)))
+ (stimers (with-timeout-suspend))
auth-info auth-passwd)
(unwind-protect
(with-parsed-tramp-file-name key nil
(prog1
(or
- ;; See if auth-sources contains something useful, if
- ;; it's bound. `auth-source-user-or-password' is an
- ;; obsoleted function, it has been replaced by
+ ;; See if auth-sources contains something useful.
+ ;; `auth-source-user-or-password' is an obsoleted
+ ;; function since Emacs 24.1, it has been replaced by
;; `auth-source-search'.
(ignore-errors
- (and (boundp 'auth-sources)
- (tramp-get-connection-property
+ (and (tramp-get-connection-property
v "first-password-request" nil)
;; Try with Tramp's current method.
(if (fboundp 'auth-source-search)
(setq auth-info
- (tramp-compat-funcall
- 'auth-source-search
+ (auth-source-search
:max 1
:user (or tramp-current-user t)
:host tramp-current-host
auth-passwd (if (functionp auth-passwd)
(funcall auth-passwd)
auth-passwd))
- (tramp-compat-funcall
- 'auth-source-user-or-password
+ (tramp-compat-funcall 'auth-source-user-or-password
"password" tramp-current-host tramp-current-method))))
;; Try the password cache.
- (when (functionp 'password-read)
- (let ((password
- (tramp-compat-funcall 'password-read pw-prompt key)))
- (tramp-compat-funcall 'password-cache-add key password)
- password))
+ (let ((password (password-read pw-prompt key)))
+ (password-cache-add key password)
+ password)
;; Else, get the password interactively.
(read-passwd pw-prompt))
(tramp-set-connection-property v "first-password-request" nil)))
;; Reenable the timers.
- (and (functionp 'with-timeout-unsuspend)
- (tramp-compat-funcall 'with-timeout-unsuspend stimers)))))
+ (with-timeout-unsuspend stimers))))
;;;###tramp-autoload
(defun tramp-clear-passwd (vec)
(tramp-dissect-file-name
(concat
tramp-prefix-format
- (tramp-compat-replace-regexp-in-string
+ (replace-regexp-in-string
(concat tramp-postfix-hop-regexp "$")
tramp-postfix-host-format hop))))))
- (tramp-compat-funcall
- 'password-cache-remove
+ (password-cache-remove
(tramp-make-tramp-file-name
(tramp-file-name-method vec)
(tramp-file-name-user vec)
(defun tramp-time-diff (t1 t2)
"Return the difference between the two times, in seconds.
T1 and T2 are time values (as returned by `current-time' for example)."
- (cond ((and (fboundp 'subtract-time)
- (fboundp 'float-time))
- (tramp-compat-funcall
- 'float-time (tramp-compat-funcall 'subtract-time t1 t2)))
- ((and (fboundp 'subtract-time)
- (fboundp 'time-to-seconds))
- (tramp-compat-funcall
- 'time-to-seconds (tramp-compat-funcall 'subtract-time t1 t2)))
- ((fboundp 'itimer-time-difference)
- (tramp-compat-funcall
- 'itimer-time-difference
- (if (< (length t1) 3) (append t1 '(0)) t1)
- (if (< (length t2) 3) (append t2 '(0)) t2)))
- (t
- (let ((time (time-subtract t1 t2)))
- (+ (* (car time) 65536.0)
- (cadr time)
- (/ (or (nth 2 time) 0) 1000000.0))))))
+ (float-time (subtract-time t1 t2)))
;; Currently (as of Emacs 20.5), the function `shell-quote-argument'
;; does not deal well with newline characters. Newline is replaced by
;; * In Emacs 21, `insert-directory' shows total number of bytes used
;; by the files in that directory. Add this here.
;; * Avoid screen blanking when hitting `g' in dired. (Eli Tziperman)
-;; * abbreviate-file-name
;; * Better error checking. At least whenever we see something
;; strange when doing zerop, we should kill the process and start
;; again. (Greg Stark)
;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
;; Keywords: comm, processes
;; Package: tramp
-;; Version: 2.2.13.25.1
+;; Version: 2.3.0-pre
;; This file is part of GNU Emacs.
;; In the Tramp GIT repository, the version number and the bug report
;; address are auto-frobbed from configure.ac, so you should edit that
-;; file and run "autoconf && ./configure" to change them. (X)Emacs
+;; file and run "autoconf && ./configure" to change them. Emacs
;; version check is defined in macro AC_EMACS_INFO of aclocal.m4;
;; should be changed only there.
;;;###tramp-autoload
-(defconst tramp-version "2.2.13.25.1"
+(defconst tramp-version "2.3.0-pre"
"This version of Tramp.")
;;;###tramp-autoload
(defconst tramp-bug-report-address "tramp-devel@gnu.org"
"Email address to send bug reports to.")
-;; `locate-dominating-file' does not exist in XEmacs. But it is not used here.
-(autoload 'locate-dominating-file "files")
-(autoload 'tramp-compat-replace-regexp-in-string "tramp-compat")
-
(defun tramp-repository-get-version ()
"Try to return as a string the repository revision of the Tramp sources."
- (unless (featurep 'xemacs)
- (let ((dir (locate-dominating-file (locate-library "tramp") ".git")))
- (when dir
- (with-temp-buffer
- (let ((default-directory (file-name-as-directory dir)))
- (and (zerop
- (ignore-errors
- (call-process "git" nil '(t nil) nil "rev-parse" "HEAD")))
- (not (zerop (buffer-size)))
- (tramp-compat-replace-regexp-in-string
- "\n" "" (buffer-string)))))))))
-
-;; Check for (X)Emacs version.
-(let ((x (if (or (>= emacs-major-version 22)
- (and (featurep 'xemacs)
- (= emacs-major-version 21)
- (>= emacs-minor-version 4)))
- "ok"
- (format "Tramp 2.2.13.25.1 is not fit for %s"
- (when (string-match "^.*$" (emacs-version))
- (match-string 0 (emacs-version)))))))
+ (let ((dir (locate-dominating-file (locate-library "tramp") ".git")))
+ (when dir
+ (with-temp-buffer
+ (let ((default-directory (file-name-as-directory dir)))
+ (and (zerop
+ (ignore-errors
+ (call-process "git" nil '(t nil) nil "rev-parse" "HEAD")))
+ (not (zerop (buffer-size)))
+ (replace-regexp-in-string "\n" "" (buffer-string))))))))
+
+;; Check for Emacs version.
+(let ((x (if (>= emacs-major-version 23)
+ "ok"
+ (format "Tramp 2.3.0-pre is not fit for %s"
+ (when (string-match "^.*$" (emacs-version))
+ (match-string 0 (emacs-version)))))))
(unless (string-match "\\`ok\\'" x) (error "%s" x)))
(add-hook 'tramp-unload-hook
-;;; nxml-enc.el --- XML encoding auto-detection
+;;; nxml-enc.el --- XML encoding auto-detection -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(and nxml-non-xml-set-auto-coding-function
(funcall nxml-non-xml-set-auto-coding-function file-name size))))
-(defun nxml-set-xml-coding (file-name size)
+(defun nxml-set-xml-coding (_file-name size)
"Function to use as `set-auto-coding-function' when file is known to be XML."
(nxml-detect-coding-system (+ (point) (min size 1024))))
+++ /dev/null
-;;; nxml-glyph.el --- glyph-handling for nxml-mode
-
-;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
-
-;; Author: James Clark
-;; Keywords: wp, hypermedia, languages, XML
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; The entry point to this file is `nxml-glyph-display-string'.
-;; The current implementation is heuristic due to a lack of
-;; Emacs primitives necessary to implement it properly. The user
-;; can tweak the heuristics using `nxml-glyph-set-functions'.
-
-;;; Code:
-
-(defconst nxml-ascii-glyph-set
- [(#x0020 . #x007E)])
-
-(defconst nxml-latin1-glyph-set
- [(#x0020 . #x007E)
- (#x00A0 . #x00FF)])
-
-;; These were generated by using nxml-insert-target-repertoire-glyph-set
-;; on the TARGET[123] files in
-;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
-
-(defconst nxml-misc-fixed-1-glyph-set
- [(#x0020 . #x007E)
- (#x00A0 . #x00FF)
- (#x0100 . #x017F)
- #x018F #x0192
- (#x0218 . #x021B)
- #x0259
- (#x02C6 . #x02C7)
- (#x02D8 . #x02DD)
- (#x0374 . #x0375)
- #x037A #x037E
- (#x0384 . #x038A)
- #x038C
- (#x038E . #x03A1)
- (#x03A3 . #x03CE)
- (#x0401 . #x040C)
- (#x040E . #x044F)
- (#x0451 . #x045C)
- (#x045E . #x045F)
- (#x0490 . #x0491)
- (#x05D0 . #x05EA)
- (#x1E02 . #x1E03)
- (#x1E0A . #x1E0B)
- (#x1E1E . #x1E1F)
- (#x1E40 . #x1E41)
- (#x1E56 . #x1E57)
- (#x1E60 . #x1E61)
- (#x1E6A . #x1E6B)
- (#x1E80 . #x1E85)
- (#x1EF2 . #x1EF3)
- (#x2010 . #x2022)
- #x2026 #x2030
- (#x2039 . #x203A)
- #x20AC #x2116 #x2122 #x2126
- (#x215B . #x215E)
- (#x2190 . #x2193)
- #x2260
- (#x2264 . #x2265)
- (#x23BA . #x23BD)
- (#x2409 . #x240D)
- #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C #x2592 #x25C6 #x266A #xFFFD]
- "Glyph set for TARGET1 glyph repertoire of misc-fixed-* font.
-This repertoire is supported for the bold and oblique fonts.")
-
-(defconst nxml-misc-fixed-2-glyph-set
- [(#x0020 . #x007E)
- (#x00A0 . #x00FF)
- (#x0100 . #x017F)
- #x018F #x0192
- (#x01FA . #x01FF)
- (#x0218 . #x021B)
- #x0259
- (#x02C6 . #x02C7)
- #x02C9
- (#x02D8 . #x02DD)
- (#x0300 . #x0311)
- (#x0374 . #x0375)
- #x037A #x037E
- (#x0384 . #x038A)
- #x038C
- (#x038E . #x03A1)
- (#x03A3 . #x03CE)
- #x03D1
- (#x03D5 . #x03D6)
- #x03F1
- (#x0401 . #x040C)
- (#x040E . #x044F)
- (#x0451 . #x045C)
- (#x045E . #x045F)
- (#x0490 . #x0491)
- (#x05D0 . #x05EA)
- (#x1E02 . #x1E03)
- (#x1E0A . #x1E0B)
- (#x1E1E . #x1E1F)
- (#x1E40 . #x1E41)
- (#x1E56 . #x1E57)
- (#x1E60 . #x1E61)
- (#x1E6A . #x1E6B)
- (#x1E80 . #x1E85)
- (#x1EF2 . #x1EF3)
- (#x2010 . #x2022)
- #x2026 #x2030
- (#x2032 . #x2034)
- (#x2039 . #x203A)
- #x203C #x203E #x2044
- (#x2070 . #x2071)
- (#x2074 . #x208E)
- (#x20A3 . #x20A4)
- #x20A7 #x20AC
- (#x20D0 . #x20D7)
- #x2102 #x2105 #x2113
- (#x2115 . #x2116)
- #x211A #x211D #x2122 #x2124 #x2126 #x212E
- (#x215B . #x215E)
- (#x2190 . #x2195)
- (#x21A4 . #x21A8)
- (#x21D0 . #x21D5)
- (#x2200 . #x2209)
- (#x220B . #x220C)
- #x220F
- (#x2211 . #x2213)
- #x2215
- (#x2218 . #x221A)
- (#x221D . #x221F)
- #x2221
- (#x2224 . #x222B)
- #x222E #x223C #x2243 #x2245
- (#x2248 . #x2249)
- #x2259
- (#x225F . #x2262)
- (#x2264 . #x2265)
- (#x226A . #x226B)
- (#x2282 . #x228B)
- #x2295 #x2297
- (#x22A4 . #x22A7)
- (#x22C2 . #x22C3)
- #x22C5 #x2300 #x2302
- (#x2308 . #x230B)
- #x2310
- (#x2320 . #x2321)
- (#x2329 . #x232A)
- (#x23BA . #x23BD)
- (#x2409 . #x240D)
- #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C
- (#x254C . #x2573)
- (#x2580 . #x25A1)
- (#x25AA . #x25AC)
- (#x25B2 . #x25B3)
- #x25BA #x25BC #x25C4 #x25C6
- (#x25CA . #x25CB)
- #x25CF
- (#x25D8 . #x25D9)
- #x25E6
- (#x263A . #x263C)
- #x2640 #x2642 #x2660 #x2663
- (#x2665 . #x2666)
- (#x266A . #x266B)
- (#xFB01 . #xFB02)
- #xFFFD]
- "Glyph set for TARGET2 glyph repertoire of the misc-fixed-* fonts.
-This repertoire is supported for the following fonts:
-5x7.bdf 5x8.bdf 6x9.bdf 6x10.bdf 6x12.bdf 7x13.bdf 7x14.bdf clR6x12.bdf")
-
-(defconst nxml-misc-fixed-3-glyph-set
- [(#x0020 . #x007E)
- (#x00A0 . #x00FF)
- (#x0100 . #x01FF)
- (#x0200 . #x0220)
- (#x0222 . #x0233)
- (#x0250 . #x02AD)
- (#x02B0 . #x02EE)
- (#x0300 . #x034F)
- (#x0360 . #x036F)
- (#x0374 . #x0375)
- #x037A #x037E
- (#x0384 . #x038A)
- #x038C
- (#x038E . #x03A1)
- (#x03A3 . #x03CE)
- (#x03D0 . #x03F6)
- (#x0400 . #x0486)
- (#x0488 . #x04CE)
- (#x04D0 . #x04F5)
- (#x04F8 . #x04F9)
- (#x0500 . #x050F)
- (#x0531 . #x0556)
- (#x0559 . #x055F)
- (#x0561 . #x0587)
- (#x0589 . #x058A)
- (#x05B0 . #x05B9)
- (#x05BB . #x05C4)
- (#x05D0 . #x05EA)
- (#x05F0 . #x05F4)
- (#x10D0 . #x10F8)
- #x10FB
- (#x1E00 . #x1E9B)
- (#x1EA0 . #x1EF9)
- (#x1F00 . #x1F15)
- (#x1F18 . #x1F1D)
- (#x1F20 . #x1F45)
- (#x1F48 . #x1F4D)
- (#x1F50 . #x1F57)
- #x1F59 #x1F5B #x1F5D
- (#x1F5F . #x1F7D)
- (#x1F80 . #x1FB4)
- (#x1FB6 . #x1FC4)
- (#x1FC6 . #x1FD3)
- (#x1FD6 . #x1FDB)
- (#x1FDD . #x1FEF)
- (#x1FF2 . #x1FF4)
- (#x1FF6 . #x1FFE)
- (#x2000 . #x200A)
- (#x2010 . #x2027)
- (#x202F . #x2052)
- #x2057
- (#x205F . #x2063)
- (#x2070 . #x2071)
- (#x2074 . #x208E)
- (#x20A0 . #x20B1)
- (#x20D0 . #x20EA)
- (#x2100 . #x213A)
- (#x213D . #x214B)
- (#x2153 . #x2183)
- (#x2190 . #x21FF)
- (#x2200 . #x22FF)
- (#x2300 . #x23CE)
- (#x2400 . #x2426)
- (#x2440 . #x244A)
- (#x2500 . #x25FF)
- (#x2600 . #x2613)
- (#x2616 . #x2617)
- (#x2619 . #x267D)
- (#x2680 . #x2689)
- (#x27E6 . #x27EB)
- (#x27F5 . #x27FF)
- (#x2A00 . #x2A06)
- #x2A1D #x2A3F #x303F
- (#xFB00 . #xFB06)
- (#xFB13 . #xFB17)
- (#xFB1D . #xFB36)
- (#xFB38 . #xFB3C)
- #xFB3E
- (#xFB40 . #xFB41)
- (#xFB43 . #xFB44)
- (#xFB46 . #xFB4F)
- (#xFE20 . #xFE23)
- (#xFF61 . #xFF9F)
- #xFFFD]
- "Glyph set for TARGET3 glyph repertoire of the misc-fixed-* fonts.
-This repertoire is supported for the following fonts:
-6x13.bdf 8x13.bdf 9x15.bdf 9x18.bdf 10x20.bdf")
-
-(defconst nxml-wgl4-glyph-set
- [(#x0020 . #x007E)
- (#x00A0 . #x017F)
- #x0192
- (#x01FA . #x01FF)
- (#x02C6 . #x02C7)
- #x02C9
- (#x02D8 . #x02DB)
- #x02DD
- (#x0384 . #x038A)
- #x038C
- (#x038E . #x03A1)
- (#x03A3 . #x03CE)
- (#x0401 . #x040C)
- (#x040E . #x044F)
- (#x0451 . #x045C)
- (#x045E . #x045F)
- (#x0490 . #x0491)
- (#x1E80 . #x1E85)
- (#x1EF2 . #x1EF3)
- (#x2013 . #x2015)
- (#x2017 . #x201E)
- (#x2020 . #x2022)
- #x2026 #x2030
- (#x2032 . #x2033)
- (#x2039 . #x203A)
- #x203C #x203E #x2044 #x207F
- (#x20A3 . #x20A4)
- #x20A7 #x20AC #x2105 #x2113 #x2116 #x2122 #x2126 #x212E
- (#x215B . #x215E)
- (#x2190 . #x2195)
- #x21A8 #x2202 #x2206 #x220F
- (#x2211 . #x2212)
- #x2215
- (#x2219 . #x221A)
- (#x221E . #x221F)
- #x2229 #x222B #x2248
- (#x2260 . #x2261)
- (#x2264 . #x2265)
- #x2302 #x2310
- (#x2320 . #x2321)
- #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524
- #x252C #x2534 #x253C
- (#x2550 . #x256C)
- #x2580 #x2584 #x2588 #x258C
- (#x2590 . #x2593)
- (#x25A0 . #x25A1)
- (#x25AA . #x25AC)
- #x25B2 #x25BA #x25BC #x25C4
- (#x25CA . #x25CB)
- #x25CF
- (#x25D8 . #x25D9)
- #x25E6
- (#x263A . #x263C)
- #x2640 #x2642 #x2660 #x2663
- (#x2665 . #x2666)
- (#x266A . #x266B)
- (#xFB01 . #xFB02)]
- "Glyph set corresponding to Windows Glyph List 4.")
-
-(defvar nxml-glyph-set-functions nil
- "Abnormal hook for determining the set of glyphs in a face.
-Each function in this hook is called in turn, unless one of them
-returns non-nil. Each function is called with a single argument
-FACE. If it can determine the set of glyphs representable by
-FACE, it must set the variable `nxml-glyph-set' and return
-non-nil. Otherwise, it must return nil.
-
-The constants `nxml-ascii-glyph-set', `nxml-latin1-glyph-set',
-`nxml-misc-fixed-1-glyph-set', `nxml-misc-fixed-2-glyph-set',
-`nxml-misc-fixed-3-glyph-set' and `nxml-wgl4-glyph-set' are
-predefined for use by `nxml-glyph-set-functions'.")
-
-(define-obsolete-variable-alias 'nxml-glyph-set-hook
- 'nxml-glyph-set-functions "24.3")
-
-(defvar nxml-glyph-set nil
- "Used by `nxml-glyph-set-functions' to return set of glyphs in a FACE.
-This should dynamically bound by any function that runs
-`nxml-glyph-set-functions'. The value must be either nil representing an
-empty set or a vector. Each member of the vector is either a single
-integer or a cons (FIRST . LAST) representing the range of integers
-from FIRST to LAST. An integer represents a glyph with that Unicode
-code-point. The vector must be ordered.")
-
-(defun nxml-x-set-glyph-set (face)
- (setq nxml-glyph-set
- (if (equal (face-attribute face :family) "misc-fixed")
- nxml-misc-fixed-3-glyph-set
- nxml-wgl4-glyph-set)))
-
-(defun nxml-w32-set-glyph-set (face)
- (setq nxml-glyph-set nxml-wgl4-glyph-set))
-
-(defun nxml-window-system-set-glyph-set (face)
- (setq nxml-glyph-set nxml-latin1-glyph-set))
-
-(defun nxml-terminal-set-glyph-set (face)
- (setq nxml-glyph-set nxml-ascii-glyph-set))
-
-(add-hook 'nxml-glyph-set-functions
- (or (cdr (assq window-system
- '((x . nxml-x-set-glyph-set)
- (w32 . nxml-w32-set-glyph-set)
- (nil . nxml-terminal-set-glyph-set))))
- 'nxml-window-system-set-glyph-set)
- t)
-
-;;;###autoload
-(defun nxml-glyph-display-string (n face)
- "Return a string that can display a glyph for Unicode code-point N.
-FACE gives the face that will be used for displaying the string.
-Return nil if the face cannot display a glyph for N."
- (let ((nxml-glyph-set nil))
- (run-hook-with-args-until-success 'nxml-glyph-set-functions face)
- (and nxml-glyph-set
- (nxml-glyph-set-contains-p n nxml-glyph-set)
- (let ((ch (decode-char 'ucs n)))
- (and ch (string ch))))))
-
-(defun nxml-glyph-set-contains-p (n v)
- (let ((start 0)
- (end (length v))
- found mid mid-val mid-start-val mid-end-val)
- (while (> end start)
- (setq mid (+ start
- (/ (- end start) 2)))
- (setq mid-val (aref v mid))
- (if (consp mid-val)
- (setq mid-start-val (car mid-val)
- mid-end-val (cdr mid-val))
- (setq mid-start-val mid-val
- mid-end-val mid-val))
- (cond ((and (<= mid-start-val n)
- (<= n mid-end-val))
- (setq found t)
- (setq start end))
- ((< n mid-start-val)
- (setq end mid))
- (t
- (setq start
- (if (eq start mid)
- end
- mid)))))
- found))
-
-(provide 'nxml-glyph)
-
-;;; nxml-glyph.el ends here
-;;; nxml-maint.el --- commands for maintainers of nxml-*.el
+;;; nxml-maint.el --- commands for maintainers of nxml-*.el -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
;;; Code:
-;;; Generating files with Unicode char names.
-
-(require 'nxml-uchnm)
-
-(defun nxml-create-unicode-char-name-sets (file)
- "Generate files containing char names from Unicode standard."
- (interactive "fUnicodeData file: ")
- (mapc (lambda (block)
- (let ((nameset (nxml-unicode-block-char-name-set (nth 0 block))))
- (save-excursion
- (find-file (concat (get nameset 'nxml-char-name-set-file)
- ".el"))
- (erase-buffer)
- (insert "(nxml-define-char-name-set '")
- (prin1 nameset (current-buffer))
- (insert "\n '())\n")
- (goto-char (- (point) 3)))))
- nxml-unicode-blocks)
- (save-excursion
- (find-file file)
- (goto-char (point-min))
- (let ((blocks nxml-unicode-blocks)
- code name)
- (while (re-search-forward "^\\([0-9A-F]+\\);\\([^<;][^;]*\\);"
- nil
- t)
- (setq code (string-to-number (match-string 1) 16))
- (setq name (match-string 2))
- (while (and blocks
- (> code (nth 2 (car blocks))))
- (setq blocks (cdr blocks)))
- (when (and (<= (nth 1 (car blocks)) code)
- (<= code (nth 2 (car blocks))))
- (save-excursion
- (find-file (concat (get (nxml-unicode-block-char-name-set
- (nth 0 (car blocks)))
- 'nxml-char-name-set-file)
- ".el"))
- (insert "(")
- (prin1 name (current-buffer))
- (insert (format " #x%04X)\n " code))))))))
-
;;; Parsing target repertoire files from ucs-fonts.
;; This is for converting the TARGET? files in
;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
;;; Code:
-(when (featurep 'mucs)
- (error "nxml-mode is not compatible with Mule-UCS"))
-
(eval-when-compile (require 'cl-lib))
(require 'xmltok)
(require 'nxml-enc)
-(require 'nxml-glyph)
(require 'nxml-util)
(require 'nxml-rap)
(require 'nxml-outln)
;; So we might as well just require it and silence the compiler.
(provide 'nxml-mode) ; avoid recursive require
(require 'rng-nxml)
+(require 'sgml-mode)
;;; Customization
(defcustom nxml-char-ref-display-glyph-flag t
"Non-nil means display glyph following character reference.
-The glyph is displayed in face `nxml-glyph'. The abnormal hook
-`nxml-glyph-set-functions' can be used to change the characters
-for which glyphs are displayed."
+The glyph is displayed in face `nxml-glyph'."
:group 'nxml
:type 'boolean)
"Face used to highlight text."
:group 'nxml-faces)
-(defface nxml-comment-content
- '((t (:inherit font-lock-comment-face)))
- "Face used to highlight the content of comments."
- :group 'nxml-faces)
-
-(defface nxml-comment-delimiter
- '((t (:inherit font-lock-comment-delimiter-face)))
- "Face used for the delimiters of comments, i.e., <!-- and -->."
- :group 'nxml-faces)
-
(defface nxml-processing-instruction-delimiter
'((t (:inherit nxml-delimiter)))
"Face used for the delimiters of processing instructions, i.e., <? and ?>."
"Face used for the delimiters of attribute values."
:group 'nxml-faces)
-(defface nxml-namespace-attribute-value
- '((t (:inherit nxml-attribute-value)))
- "Face used for the value of namespace attributes."
- :group 'nxml-faces)
-
-(defface nxml-namespace-attribute-value-delimiter
- '((t (:inherit nxml-attribute-value-delimiter)))
- "Face used for the delimiters of namespace attribute values."
- :group 'nxml-faces)
(defface nxml-prolog-literal-delimiter
'((t (:inherit nxml-delimited-data)))
;;; Global variables
-(defvar nxml-parent-document nil
+(defvar-local nxml-parent-document nil
"The parent document for a part of a modular document.
Use `nxml-parent-document-set' to set it.")
-(make-variable-buffer-local 'nxml-parent-document)
(put 'nxml-parent-document 'safe-local-variable 'stringp)
-(defvar nxml-prolog-regions nil
+(defvar-local nxml-prolog-regions nil
"List of regions in the prolog to be fontified.
See the function `xmltok-forward-prolog' for more information.")
-(make-variable-buffer-local 'nxml-prolog-regions)
-(defvar nxml-degraded nil
+(defvar-local nxml-degraded nil
"Non-nil if currently operating in degraded mode.
Degraded mode is enabled when an internal error is encountered in the
fontification or after-change functions.")
-(make-variable-buffer-local 'nxml-degraded)
(defvar nxml-completion-hook nil
"Hook run by `nxml-complete'.
(defvar nxml-end-tag-indent-scan-distance 4000
"Maximum distance from point to scan backwards when indenting end-tag.")
-(defvar nxml-char-ref-extra-display t
+(defvar-local nxml-char-ref-extra-display t
"Non-nil means display extra information for character references.
The extra information consists of a tooltip with the character name
and, if `nxml-char-ref-display-glyph-flag' is non-nil, a glyph
corresponding to the referenced character following the character
reference.")
-(make-variable-buffer-local 'nxml-char-ref-extra-display)
(defvar nxml-mode-map
(let ((map (make-sparse-keymap)))
(defsubst nxml-set-face (start end face)
(when (and face (< start end))
- (font-lock-append-text-property start end 'face face)))
+ ;; Prepend, so the character reference highlighting takes precedence over
+ ;; the string highlighting applied syntactically.
+ (font-lock-prepend-text-property start end 'face face)))
(defun nxml-parent-document-set (parent-document)
"Set `nxml-parent-document' and inherit the DTD &c."
;; FIXME: Use the fact that we're parsing the document already
;; rather than using regex-based filtering.
(setq-local tildify-foreach-region-function
- (apply-partially 'tildify-foreach-ignore-environments
+ (apply-partially #'tildify-foreach-ignore-environments
'(("<! *--" . "-- *>") ("<" . ">"))))
- (set (make-local-variable 'mode-line-process) '((nxml-degraded "/degraded")))
+ (setq-local mode-line-process '((nxml-degraded "/degraded")))
;; We'll determine the fill prefix ourselves
- (make-local-variable 'adaptive-fill-mode)
- (setq adaptive-fill-mode nil)
- (make-local-variable 'forward-sexp-function)
- (setq forward-sexp-function 'nxml-forward-balanced-item)
- (make-local-variable 'indent-line-function)
- (setq indent-line-function 'nxml-indent-line)
- (make-local-variable 'fill-paragraph-function)
- (setq fill-paragraph-function 'nxml-do-fill-paragraph)
+ (setq-local adaptive-fill-mode nil)
+ (setq-local forward-sexp-function #'nxml-forward-balanced-item)
+ (setq-local indent-line-function #'nxml-indent-line)
+ (setq-local fill-paragraph-function #'nxml-do-fill-paragraph)
;; Comment support
;; This doesn't seem to work too well;
;; I think we should probably roll our own nxml-comment-dwim function.
- (make-local-variable 'comment-indent-function)
- (setq comment-indent-function 'nxml-indent-line)
- (make-local-variable 'comment-start)
- (setq comment-start "<!--")
- (make-local-variable 'comment-start-skip)
- (setq comment-start-skip "<!--[ \t\r\n]*")
- (make-local-variable 'comment-end)
- (setq comment-end "-->")
- (make-local-variable 'comment-end-skip)
- (setq comment-end-skip "[ \t\r\n]*-->")
- (make-local-variable 'comment-line-break-function)
- (setq comment-line-break-function 'nxml-newline-and-indent)
- (setq-local comment-quote-nested-function 'nxml-comment-quote-nested)
- (use-local-map nxml-mode-map)
+ (setq-local comment-indent-function #'nxml-indent-line)
+ (setq-local comment-start "<!--")
+ (setq-local comment-start-skip "<!--[ \t\r\n]*")
+ (setq-local comment-end "-->")
+ (setq-local comment-end-skip "[ \t\r\n]*-->")
+ (setq-local comment-line-break-function #'nxml-newline-and-indent)
+ (setq-local comment-quote-nested-function #'nxml-comment-quote-nested)
(save-excursion
(save-restriction
(widen)
- (setq nxml-scan-end (copy-marker (point-min) nil))
(with-silent-modifications
- (nxml-clear-inside (point-min) (point-max))
(nxml-with-invisible-motion
(nxml-scan-prolog)))))
- (add-hook 'completion-at-point-functions
- #'nxml-completion-at-point-function nil t)
- (setq-local syntax-propertize-function #'nxml-after-change)
- (add-hook 'change-major-mode-hook 'nxml-cleanup nil t)
+ (setq-local syntax-ppss-table sgml-tag-syntax-table)
+ (setq-local syntax-propertize-function sgml-syntax-propertize-function)
+ (add-hook 'change-major-mode-hook #'nxml-cleanup nil t)
;; Emacs 23 handles the encoding attribute on the xml declaration
;; transparently to nxml-mode, so there is no longer a need for the below
;; hook. The hook also had the drawback of overriding explicit user
;; instruction to save as some encoding other than utf-8.
- ;;(add-hook 'write-contents-hooks 'nxml-prepare-to-save)
+ ;;(add-hook 'write-contents-hooks #'nxml-prepare-to-save)
(when (not (and (buffer-file-name) (file-exists-p (buffer-file-name))))
(when (and nxml-default-buffer-file-coding-system
(not (local-variable-p 'buffer-file-coding-system)))
(setq font-lock-defaults
'(nxml-font-lock-keywords
- t ; keywords-only; we highlight comments and strings here
+ nil ; highlight comments and strings based on syntax-tables
nil ; font-lock-keywords-case-fold-search. XML is case sensitive
nil ; no special syntax table
- nil ; no automatic syntactic fontification
(font-lock-extend-region-functions . (nxml-extend-region))
(jit-lock-contextually . t)
(font-lock-unfontify-region-function . nxml-unfontify-region)))
- (rng-nxml-mode-init)
- (nxml-enable-unicode-char-name-sets))
+ (with-demoted-errors (rng-nxml-mode-init)))
(defun nxml-cleanup ()
"Clean up after nxml-mode."
(with-silent-modifications
(nxml-with-invisible-motion
(remove-text-properties (point-min) (point-max) '(face)))))
- (remove-hook 'change-major-mode-hook 'nxml-cleanup t))
+ (remove-hook 'change-major-mode-hook #'nxml-cleanup t))
(defun nxml-degrade (context err)
(message "Internal nXML mode error in %s (%s), degrading"
(error-message-string err))
(ding)
(setq nxml-degraded t)
- (setq nxml-prolog-end 1)
- (save-excursion
- (save-restriction
- (widen)
- (with-silent-modifications
- (nxml-clear-inside (point-min) (point-max))))))
+ (setq nxml-prolog-end 1))
;;; Change management
(goto-char font-lock-beg)
(set-mark font-lock-end)))
-(defun nxml-after-change (start end)
- ;; Called via syntax-propertize-function.
- (unless nxml-degraded
- (nxml-with-degradation-on-error 'nxml-after-change
- (save-restriction
- (widen)
- (nxml-with-invisible-motion
- (nxml-after-change1 start end))))))
-
-(defun nxml-after-change1 (start end)
- "After-change bookkeeping.
-Returns a cons cell containing a possibly-enlarged change region.
-You must call `nxml-extend-region' on this expanded region to obtain
-the full extent of the area needing refontification.
-
-For bookkeeping, call this function even when fontification is
-disabled."
- ;; If the prolog might have changed, rescan the prolog.
- (when (<= start
- ;; Add 2 so as to include the < and following char that
- ;; start the instance (document element), since changing
- ;; these can change where the prolog ends.
- (+ nxml-prolog-end 2))
- (nxml-scan-prolog)
- (setq start (point-min)))
-
- (when (> end nxml-prolog-end)
- (goto-char start)
- (nxml-move-tag-backwards (point-min))
- (setq start (point))
- (setq end (max (nxml-scan-after-change start end)
- end)))
-
- (nxml-debug-change "nxml-after-change1" start end))
-
;;; Encodings
(defun nxml-insert-xml-declaration ()
[1 -1 nxml-entity-ref-name]
[-1 nil nxml-entity-ref-delimiter]))
-(put 'comment
- 'nxml-fontify-rule
- '([nil 4 nxml-comment-delimiter]
- [4 -3 nxml-comment-content]
- [-3 nil nxml-comment-delimiter]))
+;; (put 'comment
+;; 'nxml-fontify-rule
+;; '([nil 4 nxml-comment-delimiter]
+;; [4 -3 nxml-comment-content]
+;; [-3 nil nxml-comment-delimiter]))
(put 'processing-instruction
'nxml-fontify-rule
'nxml-fontify-rule
'([nil nil nxml-attribute-local-name]))
-(put 'xml-declaration-attribute-value
+(put 'xml-declaration-attribute-value ;FIXME: What is this for?
'nxml-fontify-rule
'([nil 1 nxml-attribute-value-delimiter]
[1 -1 nxml-attribute-value]
'nxml-attribute-prefix
'nxml-attribute-colon
'nxml-attribute-local-name))
- (let ((start (xmltok-attribute-value-start att))
- (end (xmltok-attribute-value-end att))
- (refs (xmltok-attribute-refs att))
- (delimiter-face (if namespace-declaration
- 'nxml-namespace-attribute-value-delimiter
- 'nxml-attribute-value-delimiter))
- (value-face (if namespace-declaration
- 'nxml-namespace-attribute-value
- 'nxml-attribute-value)))
- (when start
- (nxml-set-face (1- start) start delimiter-face)
- (nxml-set-face end (1+ end) delimiter-face)
- (while refs
- (let* ((ref (car refs))
- (ref-type (aref ref 0))
- (ref-start (aref ref 1))
- (ref-end (aref ref 2)))
- (nxml-set-face start ref-start value-face)
- (nxml-apply-fontify-rule ref-type ref-start ref-end)
- (setq start ref-end))
- (setq refs (cdr refs)))
- (nxml-set-face start end value-face))))
+ (dolist (ref (xmltok-attribute-refs att))
+ (let* ((ref-type (aref ref 0))
+ (ref-start (aref ref 1))
+ (ref-end (aref ref 2)))
+ (nxml-apply-fontify-rule ref-type ref-start ref-end))))
(defun nxml-fontify-qname (start
colon
(t (back-to-indentation)))
(current-column))
-;;; Completion
-
-(defun nxml-complete ()
- "Perform completion on the symbol preceding point.
-
-Inserts as many characters as can be completed. However, if not even
-one character can be completed, then a buffer with the possibilities
-is popped up and the symbol is read from the minibuffer with
-completion. If the symbol is complete, then any characters that must
-follow the symbol are also inserted.
-
-The name space used for completion and what is treated as a symbol
-depends on the context. The contexts in which completion is performed
-depend on `nxml-completion-hook'."
- (interactive)
- (unless (run-hook-with-args-until-success 'nxml-completion-hook)
- ;; Eventually we will complete on entity names here.
- (ding)
- (message "Cannot complete in this context")))
-
-(defun nxml-completion-at-point-function ()
- "Call `nxml-complete' to perform completion at point."
- (when nxml-bind-meta-tab-to-complete-flag
- #'nxml-complete))
+(define-obsolete-function-alias 'nxml-complete #'completion-at-point "26.1")
;;; Movement
(t end)))))
(nxml-scan-error
(goto-char (cadr err))
- (apply 'error (cddr err)))))
+ (apply #'error (cddr err)))))
(defun nxml-backward-single-balanced-item ()
(condition-case err
(t xmltok-start)))))
(nxml-scan-error
(goto-char (cadr err))
- (apply 'error (cddr err)))))
+ (apply #'error (cddr err)))))
(defun nxml-scan-forward-within (end)
(setq end (- end (nxml-end-delimiter-length xmltok-type)))
(setq arg (1- arg)))
(nxml-scan-error
(goto-char (cadr err))
- (apply 'error (cddr err))))))
+ (apply #'error (cddr err))))))
(defun nxml-backward-up-element (&optional arg)
(interactive "p")
(setq arg (1- arg)))
(nxml-scan-error
(goto-char (cadr err))
- (apply 'error (cddr err))))))
+ (apply #'error (cddr err))))))
(defun nxml-down-element (&optional arg)
"Move forward down into the content of an element.
(setq arg (1- arg)))
(nxml-scan-error
(goto-char (cadr err))
- (apply 'error (cddr err))))))
+ (apply #'error (cddr err))))))
(defun nxml-backward-element (&optional arg)
"Move backward over one element.
(setq arg (1- arg)))
(nxml-scan-error
(goto-char (cadr err))
- (apply 'error (cddr err))))))
+ (apply #'error (cddr err))))))
(defun nxml-mark-token-after ()
(interactive)
;;; Character names
-(defvar nxml-char-name-ignore-case t)
-
-(defvar nxml-char-name-alist nil
- "Alist of character names.
-Each member of the list has the form (NAME CODE . NAMESET),
-where NAME is a string naming a character, NAMESET is a symbol
-identifying a set of names and CODE is an integer specifying the
-Unicode scalar value of the named character.
-The NAME will only be used for completion if NAMESET has
-a non-nil `nxml-char-name-set-enabled' property.
-If NAMESET does does not have `nxml-char-name-set-defined' property,
-then it must have a `nxml-char-name-set-file' property and `load'
-will be applied to the value of this property if the nameset
-is enabled.")
-
-(defvar nxml-char-name-table (make-hash-table :test 'eq)
- "Hash table for mapping char codes to names.
-Each key is a Unicode scalar value.
-Each value is a list of pairs of the form (NAMESET . NAME),
-where NAMESET is a symbol identifying a set of names,
-and NAME is a string naming a character.")
-
-(defvar nxml-autoload-char-name-set-list nil
- "List of char namesets that can be autoloaded.")
-
-(defun nxml-enable-char-name-set (nameset)
- (put nameset 'nxml-char-name-set-enabled t))
-
-(defun nxml-disable-char-name-set (nameset)
- (put nameset 'nxml-char-name-set-enabled nil))
-
-(defun nxml-char-name-set-enabled-p (nameset)
- (get nameset 'nxml-char-name-set-enabled))
-
-(defun nxml-autoload-char-name-set (nameset file)
- (unless (memq nameset nxml-autoload-char-name-set-list)
- (setq nxml-autoload-char-name-set-list
- (cons nameset nxml-autoload-char-name-set-list)))
- (put nameset 'nxml-char-name-set-file file))
-
-(defun nxml-define-char-name-set (nameset alist)
- "Define a set of character names.
-NAMESET is a symbol identifying the set.
-ALIST is a list where each member has the form (NAME CODE),
-where NAME is a string naming a character and code is an
-integer giving the Unicode scalar value of the character."
- (when (get nameset 'nxml-char-name-set-defined)
- (error "Nameset `%s' already defined" nameset))
- (let ((iter alist))
- (while iter
- (let* ((name-code (car iter))
- (name (car name-code))
- (code (cadr name-code)))
- (puthash code
- (cons (cons nameset name)
- (gethash code nxml-char-name-table))
- nxml-char-name-table))
- (setcdr (cdr (car iter)) nameset)
- (setq iter (cdr iter))))
- (setq nxml-char-name-alist
- (nconc alist nxml-char-name-alist))
- (put nameset 'nxml-char-name-set-defined t))
-
-(defun nxml-get-char-name (code)
- (mapc 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list)
- (let ((names (gethash code nxml-char-name-table))
- name)
- (while (and names (not name))
- (if (nxml-char-name-set-enabled-p (caar names))
- (setq name (cdar names))
- (setq names (cdr names))))
- name))
-
-(defvar nxml-named-char-history nil)
-
(defun nxml-insert-named-char (arg)
"Insert a character using its name.
The name is read from the minibuffer.
Normally, inserts the character as a numeric character reference.
With a prefix argument, inserts the character directly."
(interactive "*P")
- (mapc 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list)
- (let ((name
- (let ((completion-ignore-case nxml-char-name-ignore-case))
- (completing-read "Character name: "
- nxml-char-name-alist
- (lambda (member)
- (get (cddr member) 'nxml-char-name-set-enabled))
- t
- nil
- 'nxml-named-char-history)))
- (alist nxml-char-name-alist)
- elt code)
- (while (and alist (not code))
- (setq elt (assoc name alist))
- (if (get (cddr elt) 'nxml-char-name-set-enabled)
- (setq code (cadr elt))
- (setq alist (cdr (member elt alist)))))
+ (let ((code (read-char-by-name "Character name: ")))
(when code
- (insert (if arg
- (or (decode-char 'ucs code)
- (error "Character %x is not supported by Emacs"
- code))
- (format "&#x%X;" code))))))
-
-(defun nxml-maybe-load-char-name-set (sym)
- (when (and (get sym 'nxml-char-name-set-enabled)
- (not (get sym 'nxml-char-name-set-defined))
- (stringp (get sym 'nxml-char-name-set-file)))
- (load (get sym 'nxml-char-name-set-file))))
+ (insert (if arg code (format "&#x%X;" code))))))
(defun nxml-toggle-char-ref-extra-display (arg)
"Toggle the display of extra information for character references."
(defun nxml-char-ref-display-extra (start end n)
(when nxml-char-ref-extra-display
- (let ((name (nxml-get-char-name n))
+ (let ((name (or (get-char-code-property n 'name)
+ (get-char-code-property n 'old-name)))
(glyph-string (and nxml-char-ref-display-glyph-flag
- (nxml-glyph-display-string n 'nxml-glyph)))
+ (char-displayable-p n)
+ (string n)))
ov)
(when (or name glyph-string)
(setq ov (make-overlay start end nil t))
-;;; nxml-outln.el --- outline support for nXML mode
+;;; nxml-outln.el --- outline support for nXML mode -*- lexical-binding:t -*-
;; Copyright (C) 2004, 2007-2016 Free Software Foundation, Inc.
(interactive)
(nxml-transform-subtree-outline '((hide-children . t))))
+;; These variables are dynamically bound. They are use to pass information to
+;; nxml-section-tag-transform-outline-state.
+
+(defvar nxml-outline-state-transform-exceptions nil)
+(defvar nxml-target-section-pos nil)
+(defvar nxml-depth-in-target-section nil)
+(defvar nxml-outline-state-transform-alist nil)
+
+(defvar nxml-outline-display-section-tag-function nil)
+
(defun nxml-hide-other ()
"Hide text content other than that directly in the section containing point.
Hide headings other than those of ancestors of that section and their
(nxml-transform-buffer-outline '((nil . hide-children)
(t . hide-children)))))
-;; These variables are dynamically bound. They are use to pass information to
-;; nxml-section-tag-transform-outline-state.
-
-(defvar nxml-outline-state-transform-exceptions nil)
-(defvar nxml-target-section-pos nil)
-(defvar nxml-depth-in-target-section nil)
-(defvar nxml-outline-state-transform-alist nil)
-
(defun nxml-transform-buffer-outline (alist)
(let ((nxml-target-section-pos nil)
(nxml-depth-in-target-section 0)
(defun nxml-section-tag-transform-outline-state (startp
section-start-pos
&optional
- heading-start-pos)
+ _heading-start-pos)
(if (not startp)
(setq nxml-depth-in-target-section
(and nxml-depth-in-target-section
(nxml-outline-error
(nxml-report-outline-error "Cannot display outline: %s" err)))))
-(defvar nxml-outline-display-section-tag-function nil)
-
(defun nxml-outline-display-rest (outline-state start-tag-indent tag-qnames)
"Display up to and including the end of the current element.
OUTLINE-STATE can be nil, t, hide-children. START-TAG-INDENT is the
(defun nxml-end-of-heading ()
"Move from the start of the content of the heading to the end.
Do not move past the end of the line."
- (let ((pos (condition-case err
+ (let ((pos (condition-case nil
(and (nxml-scan-element-forward (point) t)
xmltok-start)
(nxml-scan-error nil))))
(nxml-ensure-scan-up-to-date)
(let ((pos (nxml-inside-start (point))))
(when pos
- (goto-char (1- pos))
+ (goto-char pos)
t))))
((progn
(xmltok-forward)
-;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode
+;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
-;;; nxml-rap.el --- low-level support for random access parsing for nXML mode
+;;; nxml-rap.el --- low-level support for random access parsing for nXML mode -*- lexical-binding:t -*-
;; Copyright (C) 2003-2004, 2007-2016 Free Software Foundation, Inc.
;; look like it scales to large numbers of overlays in a buffer.
;;
;; We don't in fact track all these constructs, but only track them in
-;; some initial part of the instance. The variable `nxml-scan-end'
-;; contains the limit of where we have scanned up to for them.
+;; some initial part of the instance.
;;
;; Thus to parse some random point in the file we first ensure that we
;; have scanned up to that point. Then we search backwards for a
(require 'xmltok)
(require 'nxml-util)
+(require 'sgml-mode)
-(defvar nxml-prolog-end nil
+(defvar-local nxml-prolog-end nil
"Integer giving position following end of the prolog.")
-(make-variable-buffer-local 'nxml-prolog-end)
-
-(defvar nxml-scan-end nil
- "Marker giving position up to which we have scanned.
-nxml-scan-end must be >= nxml-prolog-end. Furthermore, nxml-scan-end
-must not be an inside position in the following sense. A position is
-inside if the following character is a part of, but not the first
-character of, a CDATA section, comment or processing instruction.
-Furthermore all positions >= nxml-prolog-end and < nxml-scan-end that
-are inside positions must have a non-nil `nxml-inside' property whose
-value is a symbol specifying what it is inside. Any characters with a
-non-nil `fontified' property must have position < nxml-scan-end and
-the correct face. Dependent regions must also be established for any
-unclosed constructs starting before nxml-scan-end.
-There must be no `nxml-inside' properties after nxml-scan-end.")
-(make-variable-buffer-local 'nxml-scan-end)
(defsubst nxml-get-inside (pos)
- (get-text-property pos 'nxml-inside))
-
-(defsubst nxml-clear-inside (start end)
- (nxml-debug-clear-inside start end)
- (remove-text-properties start end '(nxml-inside nil)))
-
-(defsubst nxml-set-inside (start end type)
- (nxml-debug-set-inside start end)
- (put-text-property start end 'nxml-inside type))
+ (save-excursion (nth 8 (syntax-ppss pos))))
(defun nxml-inside-end (pos)
"Return the end of the inside region containing POS.
Return nil if the character at POS is not inside."
- (if (nxml-get-inside pos)
- (or (next-single-property-change pos 'nxml-inside)
- (point-max))
- nil))
+ (save-excursion
+ (let ((ppss (syntax-ppss pos)))
+ (when (nth 8 ppss)
+ (goto-char (nth 8 ppss))
+ (with-syntax-table sgml-tag-syntax-table
+ (if (nth 3 ppss)
+ (progn (forward-comment 1) (point))
+ (or (scan-sexps (point) 1) (point-max))))))))
(defun nxml-inside-start (pos)
"Return the start of the inside region containing POS.
Return nil if the character at POS is not inside."
- (if (nxml-get-inside pos)
- (or (previous-single-property-change (1+ pos) 'nxml-inside)
- (point-min))
- nil))
+ (save-excursion (nth 8 (syntax-ppss pos))))
;;; Change management
-(defun nxml-scan-after-change (start end)
- "Restore `nxml-scan-end' invariants after a change.
-The change happened between START and END.
-Return position after which lexical state is unchanged.
-END must be > `nxml-prolog-end'. START must be outside
-any “inside” regions and at the beginning of a token."
- (if (>= start nxml-scan-end)
- nxml-scan-end
- (let ((inside-remove-start start)
- xmltok-errors)
- (while (or (when (xmltok-forward-special (min end nxml-scan-end))
- (when (memq xmltok-type
- '(comment
- cdata-section
- processing-instruction))
- (nxml-clear-inside inside-remove-start
- (1+ xmltok-start))
- (nxml-set-inside (1+ xmltok-start)
- (point)
- xmltok-type)
- (setq inside-remove-start (point)))
- (if (< (point) (min end nxml-scan-end))
- t
- (setq end (point))
- nil))
- ;; The end of the change was inside but is now outside.
- ;; Imagine something really weird like
- ;; <![CDATA[foo <!-- bar ]]> <![CDATA[ stuff --> <!-- ]]> -->
- ;; and suppose we deleted "<![CDATA[f"
- (let ((inside-end (nxml-inside-end end)))
- (when inside-end
- (setq end inside-end)
- t))))
- (nxml-clear-inside inside-remove-start end))
- (when (> end nxml-scan-end)
- (set-marker nxml-scan-end end))
- end))
-
;; n-s-p only called from nxml-mode.el, where this variable is defined.
(defvar nxml-prolog-regions)
(let (xmltok-dtd
xmltok-errors)
(setq nxml-prolog-regions (xmltok-forward-prolog))
- (setq nxml-prolog-end (point))
- (nxml-clear-inside (point-min) nxml-prolog-end))
- (when (< nxml-scan-end nxml-prolog-end)
- (set-marker nxml-scan-end nxml-prolog-end)))
+ (setq nxml-prolog-end (point))))
;;; Random access parsing
(defun nxml-tokenize-forward ()
(let (xmltok-errors)
- (when (and (xmltok-forward)
- (> (point) nxml-scan-end))
- (cond ((memq xmltok-type '(comment
- cdata-section
- processing-instruction))
- (with-silent-modifications
- (nxml-set-inside (1+ xmltok-start) (point) xmltok-type))))
- (set-marker nxml-scan-end (point)))
+ (xmltok-forward)
xmltok-type))
(defun nxml-move-tag-backwards (bound)
Leave point unmoved if it is not inside anything special."
(let ((start (nxml-inside-start (point))))
(when start
- (goto-char (1- start))
+ (goto-char start)
(when (nxml-get-inside (point))
- (error "Char before inside-start at %s had nxml-inside property %s"
- (point)
- (nxml-get-inside (point)))))))
+ (error "Char before inside-start at %s is still \"inside\"" (point))))))
(defun nxml-ensure-scan-up-to-date ()
- (let ((pos (point)))
- (when (< nxml-scan-end pos)
- (save-excursion
- (goto-char nxml-scan-end)
- (let (xmltok-errors)
- (while (when (xmltok-forward-special pos)
- (when (memq xmltok-type
- '(comment
- processing-instruction
- cdata-section))
- (with-silent-modifications
- (nxml-set-inside (1+ xmltok-start)
- (point)
- xmltok-type)))
- (if (< (point) pos)
- t
- (setq pos (point))
- nil)))
- (set-marker nxml-scan-end pos))))))
+ (syntax-propertize (point)))
;;; Element scanning
+++ /dev/null
-;;; nxml-uchnm.el --- support for Unicode standard cha names in nxml-mode
-
-;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
-
-;; Author: James Clark
-;; Keywords: wp, hypermedia, languages, XML
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This enables the use of the character names defined in the Unicode
-;; Standard. The use of the names can be controlled on a per-block
-;; basis, so as both to reduce memory usage and loading time,
-;; and to make completion work better.
-
-;;; Code:
-
-(require 'nxml-mode)
-
-(defconst nxml-unicode-blocks
- '(("Basic Latin" #x0000 #x007F)
- ("Latin-1 Supplement" #x0080 #x00FF)
- ("Latin Extended-A" #x0100 #x017F)
- ("Latin Extended-B" #x0180 #x024F)
- ("IPA Extensions" #x0250 #x02AF)
- ("Spacing Modifier Letters" #x02B0 #x02FF)
- ("Combining Diacritical Marks" #x0300 #x036F)
- ("Greek and Coptic" #x0370 #x03FF)
- ("Cyrillic" #x0400 #x04FF)
- ("Cyrillic Supplementary" #x0500 #x052F)
- ("Armenian" #x0530 #x058F)
- ("Hebrew" #x0590 #x05FF)
- ("Arabic" #x0600 #x06FF)
- ("Syriac" #x0700 #x074F)
- ("Thaana" #x0780 #x07BF)
- ("Devanagari" #x0900 #x097F)
- ("Bengali" #x0980 #x09FF)
- ("Gurmukhi" #x0A00 #x0A7F)
- ("Gujarati" #x0A80 #x0AFF)
- ("Oriya" #x0B00 #x0B7F)
- ("Tamil" #x0B80 #x0BFF)
- ("Telugu" #x0C00 #x0C7F)
- ("Kannada" #x0C80 #x0CFF)
- ("Malayalam" #x0D00 #x0D7F)
- ("Sinhala" #x0D80 #x0DFF)
- ("Thai" #x0E00 #x0E7F)
- ("Lao" #x0E80 #x0EFF)
- ("Tibetan" #x0F00 #x0FFF)
- ("Myanmar" #x1000 #x109F)
- ("Georgian" #x10A0 #x10FF)
- ("Hangul Jamo" #x1100 #x11FF)
- ("Ethiopic" #x1200 #x137F)
- ("Cherokee" #x13A0 #x13FF)
- ("Unified Canadian Aboriginal Syllabics" #x1400 #x167F)
- ("Ogham" #x1680 #x169F)
- ("Runic" #x16A0 #x16FF)
- ("Tagalog" #x1700 #x171F)
- ("Hanunoo" #x1720 #x173F)
- ("Buhid" #x1740 #x175F)
- ("Tagbanwa" #x1760 #x177F)
- ("Khmer" #x1780 #x17FF)
- ("Mongolian" #x1800 #x18AF)
- ("Latin Extended Additional" #x1E00 #x1EFF)
- ("Greek Extended" #x1F00 #x1FFF)
- ("General Punctuation" #x2000 #x206F)
- ("Superscripts and Subscripts" #x2070 #x209F)
- ("Currency Symbols" #x20A0 #x20CF)
- ("Combining Diacritical Marks for Symbols" #x20D0 #x20FF)
- ("Letterlike Symbols" #x2100 #x214F)
- ("Number Forms" #x2150 #x218F)
- ("Arrows" #x2190 #x21FF)
- ("Mathematical Operators" #x2200 #x22FF)
- ("Miscellaneous Technical" #x2300 #x23FF)
- ("Control Pictures" #x2400 #x243F)
- ("Optical Character Recognition" #x2440 #x245F)
- ("Enclosed Alphanumerics" #x2460 #x24FF)
- ("Box Drawing" #x2500 #x257F)
- ("Block Elements" #x2580 #x259F)
- ("Geometric Shapes" #x25A0 #x25FF)
- ("Miscellaneous Symbols" #x2600 #x26FF)
- ("Dingbats" #x2700 #x27BF)
- ("Miscellaneous Mathematical Symbols-A" #x27C0 #x27EF)
- ("Supplemental Arrows-A" #x27F0 #x27FF)
- ("Braille Patterns" #x2800 #x28FF)
- ("Supplemental Arrows-B" #x2900 #x297F)
- ("Miscellaneous Mathematical Symbols-B" #x2980 #x29FF)
- ("Supplemental Mathematical Operators" #x2A00 #x2AFF)
- ("CJK Radicals Supplement" #x2E80 #x2EFF)
- ("Kangxi Radicals" #x2F00 #x2FDF)
- ("Ideographic Description Characters" #x2FF0 #x2FFF)
- ("CJK Symbols and Punctuation" #x3000 #x303F)
- ("Hiragana" #x3040 #x309F)
- ("Katakana" #x30A0 #x30FF)
- ("Bopomofo" #x3100 #x312F)
- ("Hangul Compatibility Jamo" #x3130 #x318F)
- ("Kanbun" #x3190 #x319F)
- ("Bopomofo Extended" #x31A0 #x31BF)
- ("Katakana Phonetic Extensions" #x31F0 #x31FF)
- ("Enclosed CJK Letters and Months" #x3200 #x32FF)
- ("CJK Compatibility" #x3300 #x33FF)
- ("CJK Unified Ideographs Extension A" #x3400 #x4DBF)
- ;;("CJK Unified Ideographs" #x4E00 #x9FFF)
- ("Yi Syllables" #xA000 #xA48F)
- ("Yi Radicals" #xA490 #xA4CF)
- ;;("Hangul Syllables" #xAC00 #xD7AF)
- ;;("High Surrogates" #xD800 #xDB7F)
- ;;("High Private Use Surrogates" #xDB80 #xDBFF)
- ;;("Low Surrogates" #xDC00 #xDFFF)
- ;;("Private Use Area" #xE000 #xF8FF)
- ;;("CJK Compatibility Ideographs" #xF900 #xFAFF)
- ("Alphabetic Presentation Forms" #xFB00 #xFB4F)
- ("Arabic Presentation Forms-A" #xFB50 #xFDFF)
- ("Variation Selectors" #xFE00 #xFE0F)
- ("Combining Half Marks" #xFE20 #xFE2F)
- ("CJK Compatibility Forms" #xFE30 #xFE4F)
- ("Small Form Variants" #xFE50 #xFE6F)
- ("Arabic Presentation Forms-B" #xFE70 #xFEFF)
- ("Halfwidth and Fullwidth Forms" #xFF00 #xFFEF)
- ("Specials" #xFFF0 #xFFFF)
- ("Old Italic" #x10300 #x1032F)
- ("Gothic" #x10330 #x1034F)
- ("Deseret" #x10400 #x1044F)
- ("Byzantine Musical Symbols" #x1D000 #x1D0FF)
- ("Musical Symbols" #x1D100 #x1D1FF)
- ("Mathematical Alphanumeric Symbols" #x1D400 #x1D7FF)
- ;;("CJK Unified Ideographs Extension B" #x20000 #x2A6DF)
- ;;("CJK Compatibility Ideographs Supplement" #x2F800 #x2FA1F)
- ("Tags" #xE0000 #xE007F)
- ;;("Supplementary Private Use Area-A" #xF0000 #xFFFFF)
- ;;("Supplementary Private Use Area-B" #x100000 #x10FFFF)
- )
- "List of Unicode blocks.
-For each block there is a list (NAME FIRST LAST), where
-NAME is a string giving the official name of the block,
-FIRST is the first code-point and LAST is the last code-point.
-Blocks containing only characters with algorithmic names or no names
-are omitted.")
-
-(defun nxml-unicode-block-char-name-set (name)
- "Return a symbol for a block whose official Unicode name is NAME.
-The symbol is generated by downcasing and replacing each space
-by a hyphen."
- (intern (replace-regexp-in-string " " "-" (downcase name))))
-
-;; This is intended to be a superset of the coverage
-;; of existing standard entity sets.
-(defvar nxml-enabled-unicode-blocks-default
- '(basic-latin
- latin-1-supplement
- latin-extended-a
- latin-extended-b
- ipa-extensions
- spacing-modifier-letters
- combining-diacritical-marks
- greek-and-coptic
- cyrillic
- general-punctuation
- superscripts-and-subscripts
- currency-symbols
- combining-diacritical-marks-for-symbols
- letterlike-symbols
- number-forms
- arrows
- mathematical-operators
- miscellaneous-technical
- control-pictures
- optical-character-recognition
- enclosed-alphanumerics
- box-drawing
- block-elements
- geometric-shapes
- miscellaneous-symbols
- dingbats
- miscellaneous-mathematical-symbols-a
- supplemental-arrows-a
- supplemental-arrows-b
- miscellaneous-mathematical-symbols-b
- supplemental-mathematical-operators
- cjk-symbols-and-punctuation
- alphabetic-presentation-forms
- variation-selectors
- small-form-variants
- specials
- mathematical-alphanumeric-symbols)
- "Default value for `nxml-enabled-unicode-blocks'.")
-
-(mapc (lambda (block)
- (nxml-autoload-char-name-set
- (nxml-unicode-block-char-name-set (car block))
- (expand-file-name
- (format "nxml/%05X-%05X"
- (nth 1 block)
- (nth 2 block))
- data-directory)))
- nxml-unicode-blocks)
-
-;; Internal flag to control whether customize reloads the character tables.
-;; Should be set the first time the
-(defvar nxml-internal-unicode-char-name-sets-enabled nil)
-
-(defcustom nxml-enabled-unicode-blocks nxml-enabled-unicode-blocks-default
- "List of Unicode blocks for which Unicode character names are enabled.
-Each block is identified by a symbol derived from the name
-of the block by downcasing and replacing each space by a hyphen."
- :group 'nxml
- :set (lambda (sym value)
- (set-default 'nxml-enabled-unicode-blocks value)
- (when nxml-internal-unicode-char-name-sets-enabled
- (nxml-enable-unicode-char-name-sets)))
- :type (cons 'set
- (mapcar (lambda (block)
- `(const :tag ,(format "%s (%04X-%04X)"
- (nth 0 block)
- (nth 1 block)
- (nth 2 block))
- ,(nxml-unicode-block-char-name-set
- (nth 0 block))))
- nxml-unicode-blocks)))
-
-;;;###autoload
-(defun nxml-enable-unicode-char-name-sets ()
- "Enable the use of Unicode standard names for characters.
-The Unicode blocks for which names are enabled is controlled by
-the variable `nxml-enabled-unicode-blocks'."
- (interactive)
- (setq nxml-internal-unicode-char-name-sets-enabled t)
- (mapc (lambda (block)
- (nxml-disable-char-name-set
- (nxml-unicode-block-char-name-set (car block))))
- nxml-unicode-blocks)
- (mapc (lambda (nameset)
- (nxml-enable-char-name-set nameset))
- nxml-enabled-unicode-blocks))
-
-(provide 'nxml-uchnm)
-
-;;; nxml-uchnm.el ends here
`(nxml-debug "%s: %S" ,name
(buffer-substring-no-properties ,start ,end))))
-(defmacro nxml-debug-set-inside (start end)
- (when nxml-debug
- `(let ((overlay (make-overlay ,start ,end)))
- (overlay-put overlay 'face '(:background "red"))
- (overlay-put overlay 'nxml-inside-debug t)
- (nxml-debug-change "nxml-set-inside" ,start ,end))))
-
-(defmacro nxml-debug-clear-inside (start end)
- (when nxml-debug
- `(cl-loop for overlay in (overlays-in ,start ,end)
- if (overlay-get overlay 'nxml-inside-debug)
- do (delete-overlay overlay)
- finally (nxml-debug-change "nxml-clear-inside" ,start ,end))))
-
(defun nxml-make-namespace (str)
"Return a symbol for the namespace URI STR.
STR must be a string. If STR is the empty string, return nil.
-;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas
+;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(substring rng-c-current-token n (- n)))))
(defun rng-c-fix-escaped-newlines (str)
- (let ((pos 0))
- (while (progn
- (let ((n (string-match "\C-@" str pos)))
- (and n
- (aset str n ?\n)
- (setq pos (1+ n)))))))
- str)
+ (subst-char-in-string ?\C-@ ?\n str))
(defun rng-c-parse-identifier-or-keyword ()
(cond ((rng-c-current-token-ncname-p)
-;;; rng-dt.el --- datatype library interface for RELAX NG
+;;; rng-dt.el --- datatype library interface for RELAX NG -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(t
(rng-dt-error "There is no built-in datatype %s" name))))
-(put (rng-make-datatypes-uri "") 'rng-dt-compile 'rng-dt-builtin-compile)
+(put (rng-make-datatypes-uri "") 'rng-dt-compile #'rng-dt-builtin-compile)
(provide 'rng-dt)
-;;; rng-loc.el --- locate the schema to use for validation
+;;; rng-loc.el --- Locate the schema to use for validation -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(require 'rng-util)
(require 'xmltok)
-(defvar rng-current-schema-file-name nil
+(defvar-local rng-current-schema-file-name nil
"Filename of schema being used for current buffer.
It is nil if using a vacuous schema.")
-(make-variable-buffer-local 'rng-current-schema-file-name)
(defvar rng-schema-locating-files-default
(list "schemas.xml" (expand-file-name "schema/schemas.xml" data-directory))
rules))))))))
best-so-far))
-(put 'documentElement 'rng-rule-matcher 'rng-match-document-element-rule)
-(put 'namespace 'rng-rule-matcher 'rng-match-namespace-rule)
-(put 'uri 'rng-rule-matcher 'rng-match-uri-rule)
-(put 'transformURI 'rng-rule-matcher 'rng-match-transform-uri-rule)
-(put 'default 'rng-rule-matcher 'rng-match-default-rule)
+(put 'documentElement 'rng-rule-matcher #'rng-match-document-element-rule)
+(put 'namespace 'rng-rule-matcher #'rng-match-namespace-rule)
+(put 'uri 'rng-rule-matcher #'rng-match-uri-rule)
+(put 'transformURI 'rng-rule-matcher #'rng-match-transform-uri-rule)
+(put 'default 'rng-rule-matcher #'rng-match-default-rule)
(defun rng-match-document-element-rule (props)
(let ((document-element (rng-document-element))
-;;; rng-maint.el --- commands for RELAX NG maintainers
+;;; rng-maint.el --- commands for RELAX NG maintainers -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
;;; Inline functions
(defsubst rng-update-match-state (new-state)
- (if (and (eq new-state rng-not-allowed-ipattern)
- (not (eq rng-match-state rng-not-allowed-ipattern)))
- nil
+ (if (eq new-state rng-not-allowed-ipattern)
+ (eq rng-match-state rng-not-allowed-ipattern)
(setq rng-match-state new-state)
t))
-;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode
+;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(require 'rng-valid)
(require 'nxml-mode)
(require 'rng-loc)
+(require 'sgml-mode)
(defcustom rng-nxml-auto-validate-flag t
"Non-nil means automatically turn on validation with nxml-mode."
["Validation" rng-validate-mode
:style toggle
:selected rng-validate-mode]
+ ["Electric Pairs" sgml-electric-tag-pair-mode
+ :style toggle
+ :selected sgml-electric-tag-pair-mode]
"---"
("Set Schema"
["Automatically" rng-auto-set-schema]
'append)
(cond (rng-nxml-auto-validate-flag
(rng-validate-mode 1)
- (add-hook 'nxml-completion-hook 'rng-complete nil t)
- (add-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p nil t))
+ (add-hook 'completion-at-point-functions #'rng-completion-at-point nil t)
+ (add-hook 'nxml-in-mixed-content-hook #'rng-in-mixed-content-p nil t))
(t
(rng-validate-mode 0)
- (remove-hook 'nxml-completion-hook 'rng-complete t)
- (remove-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p t))))
-
-(defvar rng-tag-history nil)
-(defvar rng-attribute-name-history nil)
-(defvar rng-attribute-value-history nil)
-
-(defvar rng-complete-target-names nil)
-(defvar rng-complete-name-attribute-flag nil)
-(defvar rng-complete-extra-strings nil)
+ (remove-hook 'completion-at-point-functions #'rng-completion-at-point t)
+ (remove-hook 'nxml-in-mixed-content-hook #'rng-in-mixed-content-p t))))
-(defun rng-complete ()
- "Complete the string before point using the current schema.
-Return non-nil if in a context it understands."
- (interactive)
+(defun rng-completion-at-point ()
+ "Return completion data for the string before point using the current schema."
(and rng-validate-mode
(let ((lt-pos (save-excursion (search-backward "<" nil t)))
xmltok-dtd)
t))
(defun rng-complete-tag (lt-pos)
- (let (rng-complete-extra-strings)
- (when (and (= lt-pos (1- (point)))
- rng-complete-end-tags-after-<
- rng-open-elements
- (not (eq (car rng-open-elements) t))
- (or rng-collecting-text
- (rng-match-save
- (rng-match-end-tag))))
- (setq rng-complete-extra-strings
- (cons (concat "/"
- (if (caar rng-open-elements)
- (concat (caar rng-open-elements)
- ":"
- (cdar rng-open-elements))
- (cdar rng-open-elements)))
- rng-complete-extra-strings)))
+ (let ((extra-strings
+ (when (and (= lt-pos (1- (point)))
+ rng-complete-end-tags-after-<
+ rng-open-elements
+ (not (eq (car rng-open-elements) t))
+ (or rng-collecting-text
+ (rng-match-save
+ (rng-match-end-tag))))
+ (list (concat "/"
+ (if (caar rng-open-elements)
+ (concat (caar rng-open-elements)
+ ":"
+ (cdar rng-open-elements))
+ (cdar rng-open-elements)))))))
(when (save-excursion
(re-search-backward rng-in-start-tag-name-regex
lt-pos
t))
(and rng-collecting-text (rng-flush-text))
- (let ((completion
- (let ((rng-complete-target-names
- (rng-match-possible-start-tag-names))
- (rng-complete-name-attribute-flag nil))
- (rng-complete-before-point (1+ lt-pos)
- 'rng-complete-qname-function
- "Tag: "
- nil
- 'rng-tag-history)))
- name)
- (when completion
- (cond ((rng-qname-p completion)
- (setq name (rng-expand-qname completion
- t
- 'rng-start-tag-expand-recover))
- (when (and name
- (rng-match-start-tag-open name)
- (or (not (rng-match-start-tag-close))
- ;; need a namespace decl on the root element
- (and (car name)
- (not rng-open-elements))))
- ;; attributes are required
- (insert " ")))
- ((member completion rng-complete-extra-strings)
- (insert ">")))))
- t)))
+ (let ((target-names (rng-match-possible-start-tag-names)))
+ `(,(1+ lt-pos)
+ ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point))
+ ,(apply-partially #'rng-complete-qname-function
+ target-names nil extra-strings)
+ :exit-function
+ ,(lambda (completion status)
+ (cond
+ ((not (eq status 'finished)) nil)
+ ((rng-qname-p completion)
+ (let ((name (rng-expand-qname completion
+ t
+ #'rng-start-tag-expand-recover)))
+ (when (and name
+ (rng-match-start-tag-open name)
+ (or (not (rng-match-start-tag-close))
+ ;; need a namespace decl on the root element
+ (and (car name)
+ (not rng-open-elements))))
+ ;; attributes are required
+ (insert " "))))
+ ((member completion extra-strings)
+ (insert ">")))))))))
(defconst rng-in-end-tag-name-regex
(replace-regexp-in-string
(concat (caar rng-open-elements)
":"
(cdar rng-open-elements))
- (cdar rng-open-elements)))
- (end-tag-name
- (buffer-substring-no-properties (+ (match-beginning 0) 2)
- (point))))
- (cond ((or (> (length end-tag-name)
- (length start-tag-name))
- (not (string= (substring start-tag-name
- 0
- (length end-tag-name))
- end-tag-name)))
- (message "Expected end-tag %s"
- (rng-quote-string
- (concat "</" start-tag-name ">")))
- (ding))
- (t
- (delete-region (- (point) (length end-tag-name))
- (point))
- (insert start-tag-name ">")
- (when (not (or rng-collecting-text
- (rng-match-end-tag)))
- (message "Element %s is incomplete"
- (rng-quote-string start-tag-name))))))))
- t))
+ (cdar rng-open-elements))))
+ `(,(+ (match-beginning 0) 2)
+ ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point))
+ ,(list start-tag-name) ;Sole completion candidate.
+ :exit-function
+ ,(lambda (_completion status)
+ (when (eq status 'finished)
+ (unless (eq (char-after) ?>) (insert ">"))
+ (when (not (or rng-collecting-text
+ (rng-match-end-tag)))
+ (message "Element \"%s\" is incomplete"
+ start-tag-name))))))))))
(defconst rng-in-attribute-regex
(replace-regexp-in-string
rng-undeclared-prefixes)
(and (rng-adjust-state-for-attribute lt-pos
attribute-start)
- (let ((rng-complete-target-names
+ (let ((target-names
(rng-match-possible-attribute-names))
- (rng-complete-extra-strings
+ (extra-strings
(mapcar (lambda (prefix)
(if prefix
(concat "xmlns:" prefix)
"xmlns"))
- rng-undeclared-prefixes))
- (rng-complete-name-attribute-flag t))
- (rng-complete-before-point attribute-start
- 'rng-complete-qname-function
- "Attribute: "
- nil
- 'rng-attribute-name-history))
- (insert "=\"")))
- t))
+ rng-undeclared-prefixes)))
+ `(,attribute-start
+ ,(save-excursion (skip-chars-forward "[[:alnum:]_.-:]") (point))
+ ,(apply-partially #'rng-complete-qname-function
+ target-names t extra-strings)
+ :exit-function
+ ,(lambda (_completion status)
+ (when (and (eq status 'finished)
+ (not (looking-at "=")))
+ (insert "=\"\"")
+ (forward-char -1)))))))))
(defconst rng-in-attribute-value-regex
(replace-regexp-in-string
(defun rng-complete-attribute-value (lt-pos)
(when (save-excursion
(re-search-backward rng-in-attribute-value-regex lt-pos t))
- (let ((name-start (match-beginning 1))
- (name-end (match-end 1))
- (colon (match-beginning 2))
- (value-start (1+ (match-beginning 3))))
+ (let* ((name-start (match-beginning 1))
+ (name-end (match-end 1))
+ (colon (match-beginning 2))
+ (value-start (1+ (match-beginning 3)))
+ (exit-function
+ (lambda (_completion status)
+ (when (eq status 'finished)
+ (let ((delim (char-before value-start)))
+ (unless (eq (char-after) delim) (insert delim)))))))
(and (rng-adjust-state-for-attribute lt-pos
name-start)
(if (string= (buffer-substring-no-properties name-start
(or colon name-end))
"xmlns")
- (rng-complete-before-point
- value-start
- (rng-strings-to-completion-alist
- (rng-possible-namespace-uris
- (and colon
- (buffer-substring-no-properties (1+ colon) name-end))))
- "Namespace URI: "
- nil
- 'rng-namespace-uri-history)
+ `(,value-start ,(point)
+ ,(rng-strings-to-completion-table
+ (rng-possible-namespace-uris
+ (and colon
+ (buffer-substring-no-properties (1+ colon) name-end))))
+ :exit-function ,exit-function)
(rng-adjust-state-for-attribute-value name-start
colon
name-end)
- (rng-complete-before-point
- value-start
- (rng-strings-to-completion-alist
- (rng-match-possible-value-strings))
- "Value: "
- nil
- 'rng-attribute-value-history))
- (insert (char-before value-start))))
- t))
+ `(,value-start ,(point)
+ ,(rng-strings-to-completion-table
+ (rng-match-possible-value-strings))
+ :exit-function ,exit-function))))))
(defun rng-possible-namespace-uris (prefix)
(let ((ns (if prefix (nxml-ns-get-prefix prefix)
(nxml-ns-get-default))))
(if (and ns (memq prefix (nxml-ns-changed-prefixes)))
(list (nxml-namespace-name ns))
- (mapcar 'nxml-namespace-name
+ (mapcar #'nxml-namespace-name
(delq nxml-xml-namespace-uri
(rng-match-possible-namespace-uris))))))
(recover-fun (funcall recover-fun prefix (cdr qname)))))
(cons (and defaultp (nxml-ns-get-default)) (cdr qname)))))
-(defun rng-start-tag-expand-recover (prefix local-name)
+(defun rng-start-tag-expand-recover (_prefix local-name)
(let ((ns (rng-match-infer-start-tag-namespace local-name)))
(and ns
(cons ns local-name))))
(save-restriction
(widen)
(nxml-with-invisible-motion
- (if (= pos 1)
+ (if (= pos (point-min))
(rng-set-initial-state)
(let ((state (get-text-property (1- pos) 'rng-state)))
(cond (state
(and (or (not prefix) ns)
(rng-match-attribute-name (cons ns local-name)))))
-(defun rng-complete-qname-function (string predicate flag)
- (let ((alist (mapcar (lambda (name) (cons name nil))
- (rng-generate-qname-list string))))
- (cond ((not flag)
- (try-completion string alist predicate))
- ((eq flag t)
- (all-completions string alist predicate))
- ((eq flag 'lambda)
- (and (assoc string alist) t)))))
-
-(defun rng-generate-qname-list (&optional string)
+(defun rng-complete-qname-function (candidates attributes-flag extra-strings
+ string predicate flag)
+ (complete-with-action flag
+ (rng-generate-qname-list
+ string candidates attributes-flag extra-strings)
+ string predicate))
+
+(defun rng-generate-qname-list (&optional string candidates attribute-flag extra-strings)
(let ((forced-prefix (and string
(string-match ":" string)
(> (match-beginning 0) 0)
(substring string
0
(match-beginning 0))))
- (namespaces (mapcar 'car rng-complete-target-names))
+ (namespaces (mapcar #'car candidates))
ns-prefixes-alist ns-prefixes iter ns prefer)
(while namespaces
(setq ns (car namespaces))
(setq ns-prefixes-alist
(cons (cons ns (nxml-ns-prefixes-for
ns
- rng-complete-name-attribute-flag))
+ attribute-flag))
ns-prefixes-alist)))
(setq namespaces (delq ns (cdr namespaces))))
(setq iter ns-prefixes-alist)
(setcdr ns-prefixes (list prefer)))
;; Unless it's an attribute with a non-nil namespace,
;; allow no prefix for this namespace.
- (unless rng-complete-name-attribute-flag
+ (unless attribute-flag
(setcdr ns-prefixes (cons nil (cdr ns-prefixes))))))
(setq iter (cdr iter)))
(rng-uniquify-equal
- (sort (apply 'append
- (cons rng-complete-extra-strings
+ (sort (apply #'append
+ (cons extra-strings
(mapcar (lambda (name)
(if (car name)
(mapcar (lambda (prefix)
(cdr (assoc (car name)
ns-prefixes-alist)))
(list (cdr name))))
- rng-complete-target-names)))
+ candidates)))
'string<))))
(defun rng-get-preferred-unused-prefix (ns)
nil))))
prefix))
-(defun rng-strings-to-completion-alist (strings)
- (mapcar (lambda (s) (cons s s))
- (rng-uniquify-equal (sort (mapcar 'rng-escape-string strings)
- 'string<))))
+(defun rng-strings-to-completion-table (strings)
+ (mapcar #'rng-escape-string strings))
(provide 'rng-nxml)
-;;; rng-parse.el --- parse an XML file and validate it against a schema
+;;; rng-parse.el --- parse an XML file and validate it against a schema -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
-;;; rng-pttrn.el --- RELAX NG patterns
+;;; rng-pttrn.el --- RELAX NG patterns -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
-;;; rng-uri.el --- URI parsing and manipulation
+;;; rng-uri.el --- URI parsing and manipulation -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(cons item nil))))))))
list)))
-(defun rng-complete-before-point (start table prompt &optional predicate hist)
- "Complete text between START and point.
-Replaces the text between START and point with a string chosen using a
-completion table and, when needed, input read from the user with the
-minibuffer.
-Returns the new string if either a complete and unique completion was
-determined automatically or input was read from the user. Otherwise,
-returns nil.
-TABLE is an alist, a symbol bound to a function or an obarray as with
-the function `completing-read'.
-PROMPT is the string to prompt with if user input is needed.
-PREDICATE is nil or a function as with `completing-read'.
-HIST, if non-nil, specifies a history list as with `completing-read'."
- (let* ((orig (buffer-substring-no-properties start (point)))
- (completion (try-completion orig table predicate)))
- (cond ((not completion)
- (if (string= orig "")
- (message "No completions available")
- (message "No completion for %s" (rng-quote-string orig)))
- (ding)
- nil)
- ((eq completion t) orig)
- ((not (string= completion orig))
- (delete-region start (point))
- (insert completion)
- (cond ((not (rng-completion-exact-p completion table predicate))
- (message "Incomplete")
- nil)
- ((eq (try-completion completion table predicate) t)
- completion)
- (t
- (message "Complete but not unique")
- nil)))
- (t
- (setq completion
- (let ((saved-minibuffer-setup-hook
- (default-value 'minibuffer-setup-hook)))
- (add-hook 'minibuffer-setup-hook
- 'minibuffer-completion-help
- t)
- (unwind-protect
- (completing-read prompt
- table
- predicate
- nil
- orig
- hist)
- (setq-default minibuffer-setup-hook
- saved-minibuffer-setup-hook))))
- (delete-region start (point))
- (insert completion)
- completion))))
-
-(defun rng-completion-exact-p (string table predicate)
- (cond ((symbolp table)
- (funcall table string predicate 'lambda))
- ((vectorp table)
- (intern-soft string table))
- (t (assoc string table))))
-
-(defun rng-quote-string (s)
- (concat "\"" s "\""))
-
(defun rng-escape-string (s)
(replace-regexp-in-string "[&\"<>]"
(lambda (match)
-;;; rng-valid.el --- real-time validation of XML using RELAX NG
+;;; rng-valid.el --- real-time validation of XML using RELAX NG -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(when (buffer-live-p buffer) ; bug#13999
(with-current-buffer buffer
(if rng-validate-mode
- (if (let ((rng-validate-display-point (point))
- (rng-validate-display-modified-p (buffer-modified-p)))
- (rng-do-some-validation 'rng-validate-while-idle-continue-p))
- (force-mode-line-update)
- (rng-validate-done))
- ;; must have done kill-all-local-variables
- (rng-kill-timers)))))
+ (if (let ((rng-validate-display-point (point))
+ (rng-validate-display-modified-p (buffer-modified-p)))
+ (rng-do-some-validation 'rng-validate-while-idle-continue-p))
+ (force-mode-line-update)
+ (rng-validate-done))
+ ;; Must have done kill-all-local-variables.
+ (rng-kill-timers)))))
(defun rng-validate-quick-while-idle (buffer)
(when (buffer-live-p buffer) ; bug#13999
;; If we don't do this, then the front delimiter can move
;; past the end delimiter.
-(defun rng-error-modified (overlay after-p beg end &optional pre-change-len)
+(defun rng-error-modified (overlay after-p _beg _end &optional _pre-change-len)
(when (and after-p
(overlay-start overlay) ; check not deleted
(>= (overlay-start overlay)
(rng-match-start-tag-open required)
(rng-match-after)
(rng-match-start-tag-open name))
- (rng-mark-invalid (concat "Missing element "
- (rng-quote-string
- (rng-name-to-string required)))
+ (rng-mark-invalid (format "Missing element \"%s\""
+ (rng-name-to-string required))
xmltok-start
(1+ xmltok-start)))
((and (rng-match-optionalize-elements)
(cond ((not required-attributes)
"Required attributes missing")
((not (cdr required-attributes))
- (concat "Missing attribute "
- (rng-quote-string
- (rng-name-to-string (car required-attributes) t))))
+ (format "Missing attribute \"%s\""
+ (rng-name-to-string (car required-attributes) t)))
(t
- (concat "Missing attributes "
+ (format "Missing attributes \"%s\""
(mapconcat (lambda (nm)
- (rng-quote-string
- (rng-name-to-string nm t)))
+ (rng-name-to-string nm t))
required-attributes
- ", "))))))
+ "\", \""))))))
(defun rng-process-end-tag (&optional partial)
(cond ((not rng-open-elements)
(defun rng-missing-element-message ()
(let ((element (rng-match-required-element-name)))
(if element
- (concat "Missing element "
- (rng-quote-string (rng-name-to-string element)))
+ (format "Missing element \"%s\"" (rng-name-to-string element))
"Required child elements missing")))
(defun rng-recover-mismatched-end-tag ()
(defun rng-mark-missing-end-tags (missing)
(rng-mark-not-well-formed
- (format "Missing end-tag%s %s"
+ (format "Missing end-tag%s \"%s\""
(if (null (cdr missing)) "" "s")
(mapconcat (lambda (name)
- (rng-quote-string
- (if (car name)
- (concat (car name)
- ":"
- (cdr name))
- (cdr name))))
+ (if (car name)
+ (concat (car name)
+ ":"
+ (cdr name))
+ (cdr name)))
missing
- ", "))
+ "\", \""))
xmltok-start
(+ xmltok-start 2)))
-;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG
+;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
;;;###autoload
(put 'http://www.w3.org/2001/XMLSchema-datatypes
'rng-dt-compile
- 'rng-xsd-compile)
+ #'rng-xsd-compile)
;;;###autoload
(defun rng-xsd-compile (name params)
NAME is a symbol giving the local name of the datatype. PARAMS is a
list of pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol
giving the name of the parameter and PARAM-VALUE is a string giving
-its value. If NAME or PARAMS are invalid, it calls rng-dt-error
+its value. If NAME or PARAMS are invalid, it calls `rng-dt-error'
passing it arguments in the same style as format; the value from
-rng-dt-error will be returned. Otherwise, it returns a list. The
+`rng-dt-error' will be returned. Otherwise, it returns a list. The
first member of the list is t if any string is a legal value for the
datatype and nil otherwise. The second argument is a symbol; this
symbol will be called as a function passing it a string followed by
;; preceding part of the instance. This allows the instance to be
;; parsed incrementally. The main entry point is `xmltok-forward':
;; this can be called at any point in the instance provided it is
-;; between tokens. The other entry point is `xmltok-forward-special'
-;; which skips over tokens other comments, processing instructions or
-;; CDATA sections (i.e. the constructs in an instance that can contain
-;; less than signs that don't start a token).
+;; between tokens.
;;
;; This is a non-validating XML 1.0 processor. It does not resolve
;; parameter entities (including the external DTD subset) and it does
(vector message start end))
(defun xmltok-add-error (message &optional start end)
- (setq xmltok-errors
- (cons (xmltok-make-error message
- (or start xmltok-start)
- (or end (point)))
- xmltok-errors)))
+ (push (xmltok-make-error message
+ (or start xmltok-start)
+ (or end (point)))
+ xmltok-errors))
(defun xmltok-forward ()
(setq xmltok-start (point))
(goto-char (point-max))
(setq xmltok-type 'data)))))
-(defun xmltok-forward-special (bound)
- "Scan forward past the first special token starting at or after point.
-Return nil if there is no special token that starts before BOUND.
-CDATA sections, processing instructions and comments (and indeed
-anything starting with < following by ? or !) count as special.
-Return the type of the token."
- (when (re-search-forward "<[?!]" (1+ bound) t)
- (setq xmltok-start (match-beginning 0))
- (goto-char (1+ xmltok-start))
- (let ((case-fold-search nil))
- (xmltok-scan-after-lt))))
-
(eval-when-compile
;; A symbolic regexp is represented by a list whose CAR is the string
(setq xmltok-type 'processing-instruction))
(defun xmltok-scan-after-comment-open ()
- (let ((found-- (search-forward "--" nil 'move)))
- (setq xmltok-type
- (cond ((or (eq (char-after) ?>) (not found--))
- (goto-char (1+ (point)))
- 'comment)
- (t
- ;; just include the <!-- in the token
- (goto-char (+ xmltok-start 4))
- ;; Need do this after the goto-char because
- ;; marked error should just apply to <!--
- (xmltok-add-error "First following `--' not followed by `>'")
- (goto-char (point-max))
- 'comment)))))
+ (while (and (re-search-forward "--\\(>\\)?" nil 'move)
+ (not (match-end 1)))
+ (xmltok-add-error "`--' not followed by `>'" (match-beginning 0)))
+ (setq xmltok-type 'comment))
(defun xmltok-scan-attributes ()
(let ((recovering nil)
-;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps
+;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps -*- lexical-binding:t -*-
;; Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
(defun xsdre-range-list-difference (orig subtract)
"Return a range-list for the difference of two range-lists."
(when orig
- (let (new head next first last)
+ (let (new head first last)
(while orig
(setq head (car orig))
(setq first (xsdre-range-first head))
(save-excursion
(goto-char start)
(down-list 2)
- (while (condition-case err
+ (while (condition-case nil
(progn
(forward-sexp)
t)
+++ /dev/null
-;;; awk-mode.el --- AWK code editing commands for Emacs
-
-;; Copyright (C) 1988, 1994, 1996, 2000-2016 Free Software Foundation,
-;; Inc.
-
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: unix, languages
-;; Obsolete-since: 22.1
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Sets up C-mode with support for awk-style #-comments and a lightly
-;; hacked syntax table.
-
-;;; Code:
-
-(defvar awk-mode-syntax-table
- (let ((st (make-syntax-table)))
- (modify-syntax-entry ?\\ "\\" st)
- (modify-syntax-entry ?\n "> " st)
- (modify-syntax-entry ?\f "> " st)
- (modify-syntax-entry ?\# "< " st)
- ;; / can delimit regexes or be a division operator. We assume that it is
- ;; more commonly used for regexes and fix the remaining cases with
- ;; `font-lock-syntactic-keywords'.
- (modify-syntax-entry ?/ "\"" st)
- (modify-syntax-entry ?* "." st)
- (modify-syntax-entry ?+ "." st)
- (modify-syntax-entry ?- "." st)
- (modify-syntax-entry ?= "." st)
- (modify-syntax-entry ?% "." st)
- (modify-syntax-entry ?< "." st)
- (modify-syntax-entry ?> "." st)
- (modify-syntax-entry ?& "." st)
- (modify-syntax-entry ?| "." st)
- (modify-syntax-entry ?_ "_" st)
- (modify-syntax-entry ?\' "\"" st)
- st)
- "Syntax table in use in `awk-mode' buffers.")
-
-;; Regexps written with help from Peter Galbraith <galbraith@mixing.qc.dfo.ca>.
-(defconst awk-font-lock-keywords
- (eval-when-compile
- (list
- ;;
- ;; Function names.
- '("^[ \t]*\\(function\\)\\>[ \t]*\\(\\sw+\\)?"
- (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))
- ;;
- ;; Variable names.
- (cons (regexp-opt
- '("ARGC" "ARGIND" "ARGV" "CONVFMT" "ENVIRON" "ERRNO"
- "FIELDWIDTHS" "FILENAME" "FNR" "FS" "IGNORECASE" "NF" "NR"
- "OFMT" "OFS" "ORS" "RLENGTH" "RS" "RSTART" "SUBSEP") 'words)
- 'font-lock-variable-name-face)
- ;;
- ;; Keywords.
- (regexp-opt
- '("BEGIN" "END" "break" "continue" "delete" "do" "exit" "else" "for"
- "getline" "if" "next" "print" "printf" "return" "while") 'words)
- ;;
- ;; Builtins.
- (list (regexp-opt
- '("atan2" "close" "cos" "ctime" "exp" "gsub" "index" "int"
- "length" "log" "match" "rand" "sin" "split" "sprintf"
- "sqrt" "srand" "sub" "substr" "system" "time"
- "tolower" "toupper") 'words)
- 1 'font-lock-builtin-face)
- ;;
- ;; Operators. Is this too much?
- (cons (regexp-opt '("&&" "||" "<=" "<" ">=" ">" "==" "!=" "!~" "~"))
- 'font-lock-constant-face)
- ))
- "Default expressions to highlight in AWK mode.")
-
-(require 'syntax)
-
-(defconst awk-font-lock-syntactic-keywords
- ;; `/' is mostly used for /.../ regular expressions, but is also
- ;; used as a division operator. Distinguishing between the two is
- ;; a pain in the youknowwhat.
- ;; '(("\\(^\\|[<=>-+*%/!^,~(?:|&]\\)\\s-*\\(/\\)\\([^/\n\\]\\|\\\\.\\)*\\(/\\)"
- ;; (2 "\"") (4 "\"")))
- '(("[^<=>-+*%/!^,~(?:|& \t\n\f]\\s-*\\(/\\)"
- (1 (unless (nth 3 (syntax-ppss (match-beginning 1))) "."))))
- "Syntactic keywords for `awk-mode'.")
-
-;; No longer autoloaded since it might clobber the autoload directive in CC Mode.
-(define-derived-mode awk-mode c-mode "AWK"
- "Major mode for editing AWK code.
-This is much like C mode except for the syntax of comments. Its keymap
-inherits from C mode's and it has the same variables for customizing
-indentation. It has its own abbrev table and its own syntax table.
-
-Turning on AWK mode runs `awk-mode-hook'."
- (set (make-local-variable 'paragraph-start) (concat "$\\|" page-delimiter))
- (set (make-local-variable 'paragraph-separate) paragraph-start)
- (set (make-local-variable 'comment-start) "# ")
- (set (make-local-variable 'comment-end) "")
- (set (make-local-variable 'comment-start-skip) "#+ *")
- (setq font-lock-defaults '(awk-font-lock-keywords
- nil nil ((?_ . "w")) nil
- (parse-sexp-lookup-properties . t)
- (font-lock-syntactic-keywords
- . awk-font-lock-syntactic-keywords))))
-
-(provide 'awk-mode)
-
-;;; awk-mode.el ends here
+++ /dev/null
-;;; iso-acc.el --- minor mode providing electric accent keys
-
-;; Copyright (C) 1993-1994, 1996, 2001-2016 Free Software Foundation,
-;; Inc.
-
-;; Author: Johan Vromans
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Function `iso-accents-mode' activates a minor mode in which
-;; typewriter "dead keys" are emulated. The purpose of this emulation
-;; is to provide a simple means for inserting accented characters
-;; according to the ISO-8859-1...3 character sets.
-;;
-;; In `iso-accents-mode', pseudo accent characters are used to
-;; introduce accented keys. The pseudo-accent characters are:
-;;
-;; ' (minute) -> acute accent
-;; ` (backtick) -> grave accent
-;; " (second) -> diaeresis
-;; ^ (caret) -> circumflex
-;; ~ (tilde) -> tilde over the character
-;; / (slash) -> slash through the character.
-;; Also: /A is A-with-ring and /E is AE ligature.
-;; These two are enabled only if you set iso-accents-enable
-;; to include them:
-;; . (period) -> dot over the character (some languages only)
-;; , (cedilla) -> cedilla under the character (some languages only)
-;;
-;; The action taken depends on the key that follows the pseudo accent.
-;; In general:
-;;
-;; pseudo-accent + appropriate letter -> accented letter
-;; pseudo-accent + space -> pseudo-accent (except comma and period)
-;; pseudo-accent + pseudo-accent -> accent (if available)
-;; pseudo-accent + other -> pseudo-accent + other
-;;
-;; If the pseudo-accent is followed by anything else than a
-;; self-insert-command, the dead-key code is terminated, the
-;; pseudo-accent inserted ‘as is’ and the bell is rung to signal this.
-;;
-;; Function `iso-accents-mode' can be used to enable the iso accents
-;; minor mode, or disable it.
-
-;; If you want only some of these characters to serve as accents,
-;; add a language to `iso-languages' which specifies the accent characters
-;; that you want, then select the language with `iso-accents-customize'.
-\f
-;;; Code:
-
-(provide 'iso-acc)
-
-(defgroup iso-acc nil
- "Minor mode providing electric accent keys."
- :prefix "iso-accents-"
- :group 'i18n)
-
-(defcustom iso-accents-insert-offset nonascii-insert-offset
- "Offset added by ISO Accents mode to character codes 0200 and above."
- :type 'integer
- :group 'iso-acc)
-
-(defvar iso-languages
- '(("catalan"
- ;; Note this includes some extra characters used in Spanish,
- ;; on the idea that someone who uses Catalan is likely to use Spanish
- ;; as well.
- (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
- (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
- (?\ . ?'))
- (?` (?A . ?\300) (?E . ?\310) (?O . ?\322)
- (?a . ?\340) (?e . ?\350) (?o . ?\362)
- (?\ . ?`))
- (?\" (?I . ?\317) (?U . ?\334) (?i . ?\357) (?u . ?\374)
- (?\ . ?\"))
- (?~ (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
- (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
- (?\ . ?\~)))
-
- ("esperanto"
- (?^ (?H . ?\246) (?J . ?\254) (?h . ?\266) (?j . ?\274) (?C . ?\306)
- (?G . ?\330) (?S . ?\336) (?c . ?\346) (?g . ?\370) (?s . ?\376)
- (?^ . ?^) (?\ . ?^))
- (?~ (?U . ?\335) (?u . ?\375) (?\ . ?~)))
-
- ("french"
- (?' (?E . ?\311) (?C . ?\307) (?e . ?\351) (?c . ?\347)
- (?\ . ?'))
- (?` (?A . ?\300) (?E . ?\310) (?U . ?\331)
- (?a . ?\340) (?e . ?\350) (?u . ?\371)
- (?\ . ?`))
- (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
- (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
- (?\ . ?^))
- (?\" (?E . ?\313) (?I . ?\317)
- (?e . ?\353) (?i . ?\357)
- (?\ . ?\"))
- (?~ (?< . ?\253) (?> . ?\273) (?C . ?\307) (?c . ?\347)
- (?\ . ?~))
- (?, (?C . ?\307) (?c . ?\347) (?\ . ?\,)))
-
- ("german"
- (?\" (?A . ?\304) (?O . ?\326) (?U . ?\334)
- (?a . ?\344) (?o . ?\366) (?u . ?\374) (?s . ?\337) (?\ . ?\")))
-
- ("irish"
- (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
- (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
- (?\ . ?')))
-
- ("portuguese"
- (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
- (?C . ?\307) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
- (?u . ?\372) (?c . ?\347)
- (?\ . ?'))
- (?` (?A . ?\300) (?a . ?\340)
- (?\ . ?`))
- (?^ (?A . ?\302) (?E . ?\312) (?O . ?\324)
- (?a . ?\342) (?e . ?\352) (?o . ?\364)
- (?\ . ?^))
- (?\" (?U . ?\334) (?u . ?\374)
- (?\ . ?\"))
- (?~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365)
- (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
- (?\ . ?~))
- (?, (?c . ?\347) (?C . ?\307) (?, . ?,)))
-
- ("spanish"
- (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
- (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
- (?\ . ?'))
- (?\" (?U . ?\334) (?u . ?\374) (?\ . ?\"))
- (?\~ (?N . ?\321) (?n . ?\361) (?> . ?\273) (?< . ?\253) (?! . ?\241)
- (?? . ?\277) (?\ . ?\~)))
-
- ("latin-1"
- (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
- (?Y . ?\335) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
- (?u . ?\372) (?y . ?\375) (?' . ?\264)
- (?\ . ?'))
- (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
- (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
- (?` . ?`) (?\ . ?`))
- (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
- (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
- (?^ . ?^) (?\ . ?^))
- (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
- (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?s . ?\337)
- (?u . ?\374) (?y . ?\377)
- (?\" . ?\250) (?\ . ?\"))
- (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
- (?T . ?\336) (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361)
- (?o . ?\365) (?t . ?\376)
- (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
- (?\~ . ?\270) (?\ . ?~))
- (?/ (?A . ?\305) (?E . ?\306) (?O . ?\330) (?a . ?\345) (?e . ?\346)
- (?o . ?\370)
- (?/ . ?\260) (?\ . ?/)))
-
- ("latin-2" latin-iso8859-2
- (?' (?A . ?\301) (?C . ?\306) (?D . ?\320) (?E . ?\311) (?I . ?\315)
- (?L . ?\305) (?N . ?\321) (?O . ?\323) (?R . ?\300) (?S . ?\246)
- (?U . ?\332) (?Y . ?\335) (?Z . ?\254)
- (?a . ?\341) (?c . ?\346) (?d . ?\360) (?e . ?\351) (?i . ?\355)
- (?l . ?\345) (?n . ?\361) (?o . ?\363) (?r . ?\340) (?s . ?\266)
- (?u . ?\372) (?y . ?\375) (?z . ?\274)
- (?' . ?\264) (?\ . ?'))
- (?` (?A . ?\241) (?C . ?\307) (?E . ?\312) (?L . ?\243) (?S . ?\252)
- (?T . ?\336) (?Z . ?\257)
- (?a . ?\261) (?l . ?\263) (?c . ?\347) (?e . ?\352) (?s . ?\272)
- (?t . ?\376) (?z . ?\277)
- (?` . ?\252)
- (?. . ?\377) (?\ . ?`))
- (?^ (?A . ?\302) (?I . ?\316) (?O . ?\324)
- (?a . ?\342) (?i . ?\356) (?o . ?\364)
- (?^ . ?^) ; no special code?
- (?\ . ?^))
- (?\" (?A . ?\304) (?E . ?\313) (?O . ?\326) (?U . ?\334)
- (?a . ?\344) (?e . ?\353) (?o . ?\366) (?s . ?\337) (?u . ?\374)
- (?\" . ?\250)
- (?\ . ?\"))
- (?~ (?A . ?\303) (?C . ?\310) (?D . ?\317) (?L . ?\245) (?N . ?\322)
- (?O . ?\325) (?R . ?\330) (?S . ?\251) (?T . ?\253) (?U . ?\333)
- (?Z . ?\256)
- (?a . ?\343) (?c . ?\350) (?d . ?\357) (?l . ?\265) (?n . ?\362)
- (?o . ?\365) (?r . ?\370) (?s . ?\271) (?t . ?\273) (?u . ?\373)
- (?z . ?\276)
- (?v . ?\242) ; v accent
- (?\~ . ?\242) ; v accent
- (?\. . ?\270) ; cedilla accent
- (?\ . ?~)))
-
- ("latin-3" latin-iso8859-3
- (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
- (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
- (?' . ?\264) (?\ . ?'))
- (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
- (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
- (?` . ?`) (?\ . ?`))
- (?^ (?A . ?\302) (?C . ?\306) (?E . ?\312) (?G . ?\330) (?H . ?\246)
- (?I . ?\316) (?J . ?\254) (?O . ?\324) (?S . ?\336) (?U . ?\333)
- (?a . ?\342) (?c . ?\346) (?e . ?\352) (?g . ?\370) (?h . ?\266)
- (?i . ?\356) (?j . ?\274) (?o . ?\364) (?s . ?\376) (?u . ?\373)
- (?^ . ?^) (?\ . ?^))
- (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
- (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?u . ?\374)
- (?s . ?\337)
- (?\" . ?\250) (?\ . ?\"))
- (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
- (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) (?o . ?\365)
- (?$ . ?\245) (?S . ?\252) (?s . ?\272) (?G . ?\253) (?g . ?\273)
- (?U . ?\335) (?u . ?\375) (?` . ?\242)
- (?~ . ?\270) (?\ . ?~))
- (?/ (?C . ?\305) (?G . ?\325) (?H . ?\241) (?I . ?\251) (?Z . ?\257)
- (?c . ?\345) (?g . ?\365) (?h . ?\261) (?i . ?\271) (?z . ?\277)
- (?r . ?\256)
- (?. . ?\377) (?# . ?\243) (?$ . ?\244)
- (?/ . ?\260) (?\ . ?/))
- (?. (?C . ?\305) (?G . ?\325) (?I . ?\251) (?Z . ?\257)
- (?c . ?\345) (?g . ?\365) (?z . ?\277))))
- "List of language-specific customizations for the ISO Accents mode.
-
-Each element of the list is of the form
-
- (LANGUAGE [CHARSET]
- (PSEUDO-ACCENT MAPPINGS)
- (PSEUDO-ACCENT MAPPINGS)
- ...)
-
-LANGUAGE is a string naming the language.
-CHARSET (which may be omitted) is the symbol name
- of the character set used in this language.
- If CHARSET is omitted, latin-iso8859-1 is the default.
-PSEUDO-ACCENT is a char specifying an accent key.
-MAPPINGS are cons cells of the form (CHAR . ISO-CHAR).
-
-The net effect is that the key sequence PSEUDO-ACCENT CHAR is mapped
-to ISO-CHAR on input.")
-
-(defvar iso-language nil
- "Language for which ISO Accents mode is currently customized.
-Change it with the `iso-accents-customize' function.")
-
-(defvar iso-accents-list nil
- "Association list for ISO accent combinations, for the chosen language.")
-
-(defcustom iso-accents-mode nil
- "Non-nil enables ISO Accents mode.
-Setting this variable makes it local to the current buffer.
-See the function `iso-accents-mode'."
- :type 'boolean
- :group 'iso-acc)
-(make-variable-buffer-local 'iso-accents-mode)
-
-(defcustom iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/)
- "List of accent keys that become prefixes in ISO Accents mode.
-The default is (?\\=' ?\\=` ?^ ?\" ?~ ?/), which contains all the supported
-accent keys. If you set this variable to a list in which some of those
-characters are missing, the missing ones do not act as accents.
-
-Note that if you specify a language with `iso-accents-customize',
-that can also turn off certain prefixes (whichever ones are not needed in
-the language you choose)."
- :type '(repeat character)
- :group 'iso-acc)
-
-(defun iso-accents-accent-key (prompt)
- "Modify the following character by adding an accent to it."
- ;; Pick up the accent character.
- (if (and iso-accents-mode
- (memq last-input-event iso-accents-enable))
- (iso-accents-compose prompt)
- (vector last-input-event)))
-
-
-;; The iso-accents-compose function is called deep inside Emacs' read
-;; key sequence machinery, so the call to read-event below actually
-;; recurses into that machinery. Doing that does not cause any
-;; problem on its own, but read-event will have marked the window's
-;; display matrix to be accurate -- which is broken by the subsequent
-;; call to delete-region. Therefore, we must call force-window-update
-;; after delete-region to explicitly clear the accurate state of the
-;; window's display matrix.
-
-(defun iso-accents-compose (prompt)
- (let* ((first-char last-input-event)
- (list (assq first-char iso-accents-list))
- ;; Wait for the second key and look up the combination.
- (second-char (if (or prompt
- (not (eq (key-binding "a")
- 'self-insert-command))
- ;; Not at start of a key sequence.
- (> (length (this-single-command-keys)) 1)
- ;; Called from anything but the command loop.
- this-command)
- (progn
- (message "%s%c"
- (or prompt "Compose with ")
- first-char)
- (read-event))
- (insert first-char)
- (prog1 (read-event)
- (delete-region (1- (point)) (point))
- ;; Display is no longer up-to-date.
- (force-window-update (selected-window)))))
- (entry (cdr (assq second-char list))))
- (if entry
- ;; Found it: return the mapped char
- (vector
- (if (and enable-multibyte-characters
- (>= entry ?\200))
- (+ iso-accents-insert-offset entry)
- entry))
- ;; Otherwise, advance and schedule the second key for execution.
- (push second-char unread-command-events)
- (vector first-char))))
-
-;; It is a matter of taste if you want the minor mode indicated
-;; in the mode line...
-;; If so, uncomment the next four lines.
-;; (or (assq 'iso-accents-mode minor-mode-alist)
-;; (setq minor-mode-alist
-;; (append minor-mode-alist
-;; '((iso-accents-mode " ISO-Acc")))))
-
-;;;###autoload
-(defun iso-accents-mode (&optional arg)
- "Toggle ISO Accents mode, in which accents modify the following letter.
-This permits easy insertion of accented characters according to ISO-8859-1.
-When Iso-accents mode is enabled, accent character keys
-\(\\=`, \\=', \", ^, / and ~) do not self-insert; instead, they modify the following
-letter key so that it inserts an ISO accented letter.
-
-You can customize ISO Accents mode to a particular language
-with the command `iso-accents-customize'.
-
-Special combinations: ~c gives a c with cedilla,
-~d gives an Icelandic eth (d with dash).
-~t gives an Icelandic thorn.
-\"s gives German sharp s.
-/a gives a with ring.
-/e gives an a-e ligature.
-~< and ~> give guillemots.
-~! gives an inverted exclamation mark.
-~? gives an inverted question mark.
-
-With an argument, a positive argument enables ISO Accents mode,
-and a negative argument disables it."
-
- (interactive "P")
-
- (if (if arg
- ;; Negative arg means switch it off.
- (<= (prefix-numeric-value arg) 0)
- ;; No arg means toggle.
- iso-accents-mode)
- (setq iso-accents-mode nil)
-
- ;; Enable electric accents.
- (setq iso-accents-mode t)))
-
-(defun iso-accents-customize (language)
- "Customize the ISO accents machinery for a particular language.
-It selects the customization based on the specifications in the
-`iso-languages' variable."
- (interactive (list (completing-read "Language: " iso-languages nil t)))
- (let ((table (cdr (assoc language iso-languages)))
- all-accents tail)
- (if (not table)
- (error "Unknown language `%s'" language)
- (setq iso-accents-insert-offset (- (make-char (if (symbolp (car table))
- (car table)
- 'latin-iso8859-1))
- 128))
- (if (symbolp (car table))
- (setq table (cdr table)))
- (setq iso-language language
- iso-accents-list table)
- (if key-translation-map
- (substitute-key-definition
- 'iso-accents-accent-key nil key-translation-map)
- (setq key-translation-map (make-sparse-keymap)))
- ;; Set up translations for all the characters that are used as
- ;; accent prefixes in this language.
- (setq tail iso-accents-list)
- (while tail
- (define-key key-translation-map (vector (car (car tail)))
- 'iso-accents-accent-key)
- (setq tail (cdr tail))))))
-
-(defun iso-accentuate (start end)
- "Convert two-character sequences in region into accented characters.
-Noninteractively, this operates on text from START to END.
-This uses the same conversion that ISO Accents mode uses for type-in."
- (interactive "r")
- (save-excursion
- (save-restriction
- (narrow-to-region start end)
- (goto-char start)
- (forward-char 1)
- (let (entry)
- (while (< (point) end)
- (if (and (memq (preceding-char) iso-accents-enable)
- (setq entry (cdr (assq (following-char) (assq (preceding-char) iso-accents-list)))))
- (progn
- (forward-char -1)
- (delete-char 2)
- (insert entry)
- (setq end (1- end)))
- (forward-char 1)))))))
-
-(defun iso-accent-rassoc-unit (value alist)
- (let (elt acc)
- (while (and alist (not elt))
- (setq acc (car (car alist))
- elt (car (rassq value (cdr (car alist))))
- alist (cdr alist)))
- (if elt
- (cons acc elt))))
-
-(defun iso-unaccentuate (start end)
- "Convert accented characters in the region into two-character sequences.
-Noninteractively, this operates on text from START to END.
-This uses the opposite of the conversion done by ISO Accents mode for type-in."
- (interactive "r")
- (save-excursion
- (save-restriction
- (narrow-to-region start end)
- (goto-char start)
- (let (entry)
- (while (< (point) end)
- (if (and (> (following-char) 127)
- (setq entry (iso-accent-rassoc-unit (following-char)
- iso-accents-list)))
- (progn
- (delete-char 1)
- (insert (car entry) (cdr entry))
- (setq end (1+ end)))
- (forward-char 1)))))))
-
-(defun iso-deaccentuate (start end)
- "Convert accented characters in the region into unaccented characters.
-Noninteractively, this operates on text from START to END."
- (interactive "r")
- (save-excursion
- (save-restriction
- (narrow-to-region start end)
- (goto-char start)
- (let (entry)
- (while (< (point) end)
- (if (and (> (following-char) 127)
- (setq entry (iso-accent-rassoc-unit (following-char)
- iso-accents-list)))
- (progn
- (delete-char 1)
- (insert (cdr entry)))
- (forward-char 1)))))))
-
-;; Set up the default settings.
-(iso-accents-customize "latin-1")
-
-;; Use Iso-Accents mode in the minibuffer
-;; if it was in use in the previous buffer.
-(defun iso-acc-minibuf-setup ()
- (setq iso-accents-mode
- (with-current-buffer (window-buffer minibuffer-scroll-window)
- iso-accents-mode)))
-
-(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup)
-
-;;; iso-acc.el ends here
+++ /dev/null
-;;; iso-insert.el --- insert functions for ISO 8859/1
-
-;; Copyright (C) 1987, 1994, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Howard Gayle
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Provides keys for inserting ISO Latin-1 characters. They use the
-;; prefix key C-x 8. Type C-x 8 C-h for a list.
-
-;;; Code:
-
-(defun insert-no-break-space ()
- (interactive "*")
- (insert ?\ )
-)
-
-(defun insert-inverted-exclamation-mark ()
- (interactive "*")
- (insert ?\¡)
-)
-
-(defun insert-cent-sign ()
- (interactive "*")
- (insert ?\¢)
-)
-
-(defun insert-pound-sign ()
- (interactive "*")
- (insert ?\£)
-)
-
-(defun insert-general-currency-sign ()
- (interactive "*")
- (insert ?\¤)
-)
-
-(defun insert-yen-sign ()
- (interactive "*")
- (insert ?\¥)
-)
-
-(defun insert-broken-vertical-line ()
- (interactive "*")
- (insert ?\¦)
-)
-
-(defun insert-section-sign ()
- (interactive "*")
- (insert ?\§)
-)
-
-(defun insert-diaeresis ()
- (interactive "*")
- (insert ?\¨)
-)
-
-(defun insert-copyright-sign ()
- (interactive "*")
- (insert ?\©)
-)
-
-(defun insert-ordinal-indicator-feminine ()
- (interactive "*")
- (insert ?\ª)
-)
-
-(defun insert-angle-quotation-mark-left ()
- (interactive "*")
- (insert ?\«)
-)
-
-(defun insert-not-sign ()
- (interactive "*")
- (insert ?\¬)
-)
-
-(defun insert-soft-hyphen ()
- (interactive "*")
- (insert ?\)
-)
-
-(defun insert-registered-sign ()
- (interactive "*")
- (insert ?\®)
-)
-
-(defun insert-macron ()
- (interactive "*")
- (insert ?\¯)
-)
-
-(defun insert-degree-sign ()
- (interactive "*")
- (insert ?\°)
-)
-
-(defun insert-plus-or-minus-sign ()
- (interactive "*")
- (insert ?\±)
-)
-
-(defun insert-superscript-two ()
- (interactive "*")
- (insert ?\²)
-)
-
-(defun insert-superscript-three ()
- (interactive "*")
- (insert ?\³)
-)
-
-(defun insert-acute-accent ()
- (interactive "*")
- (insert ?\´)
-)
-
-(defun insert-micro-sign ()
- (interactive "*")
- (insert ?\µ)
-)
-
-(defun insert-pilcrow ()
- (interactive "*")
- (insert ?\¶)
-)
-
-(defun insert-middle-dot ()
- (interactive "*")
- (insert ?\·)
-)
-
-(defun insert-cedilla ()
- (interactive "*")
- (insert ?\¸)
-)
-
-(defun insert-superscript-one ()
- (interactive "*")
- (insert ?\¹)
-)
-
-(defun insert-ordinal-indicator-masculine ()
- (interactive "*")
- (insert ?\º)
-)
-
-(defun insert-angle-quotation-mark-right ()
- (interactive "*")
- (insert ?\»)
-)
-
-(defun insert-fraction-one-quarter ()
- (interactive "*")
- (insert ?\¼)
-)
-
-(defun insert-fraction-one-half ()
- (interactive "*")
- (insert ?\½)
-)
-
-(defun insert-fraction-three-quarters ()
- (interactive "*")
- (insert ?\¾)
-)
-
-(defun insert-inverted-question-mark ()
- (interactive "*")
- (insert ?\¿)
-)
-
-(defun insert-A-grave ()
- (interactive "*")
- (insert ?\À)
-)
-
-(defun insert-A-acute ()
- (interactive "*")
- (insert ?\Á)
-)
-
-(defun insert-A-circumflex ()
- (interactive "*")
- (insert ?\Â)
-)
-
-(defun insert-A-tilde ()
- (interactive "*")
- (insert ?\Ã)
-)
-
-(defun insert-A-umlaut ()
- (interactive "*")
- (insert ?\Ä)
-)
-
-(defun insert-A-ring ()
- (interactive "*")
- (insert ?\Å)
-)
-
-(defun insert-AE ()
- (interactive "*")
- (insert ?\Æ)
-)
-
-(defun insert-C-cedilla ()
- (interactive "*")
- (insert ?\Ç)
-)
-
-(defun insert-E-grave ()
- (interactive "*")
- (insert ?\È)
-)
-
-(defun insert-E-acute ()
- (interactive "*")
- (insert ?\É)
-)
-
-(defun insert-E-circumflex ()
- (interactive "*")
- (insert ?\Ê)
-)
-
-(defun insert-E-umlaut ()
- (interactive "*")
- (insert ?\Ë)
-)
-
-(defun insert-I-grave ()
- (interactive "*")
- (insert ?\Ì)
-)
-
-(defun insert-I-acute ()
- (interactive "*")
- (insert ?\Í)
-)
-
-(defun insert-I-circumflex ()
- (interactive "*")
- (insert ?\Î)
-)
-
-(defun insert-I-umlaut ()
- (interactive "*")
- (insert ?\Ï)
-)
-
-(defun insert-D-stroke ()
- (interactive "*")
- (insert ?\Ð)
-)
-
-(defun insert-N-tilde ()
- (interactive "*")
- (insert ?\Ñ)
-)
-
-(defun insert-O-grave ()
- (interactive "*")
- (insert ?\Ò)
-)
-
-(defun insert-O-acute ()
- (interactive "*")
- (insert ?\Ó)
-)
-
-(defun insert-O-circumflex ()
- (interactive "*")
- (insert ?\Ô)
-)
-
-(defun insert-O-tilde ()
- (interactive "*")
- (insert ?\Õ)
-)
-
-(defun insert-O-umlaut ()
- (interactive "*")
- (insert ?\Ö)
-)
-
-(defun insert-multiplication-sign ()
- (interactive "*")
- (insert ?\×)
-)
-
-(defun insert-O-slash ()
- (interactive "*")
- (insert ?\Ø)
-)
-
-(defun insert-U-grave ()
- (interactive "*")
- (insert ?\Ù)
-)
-
-(defun insert-U-acute ()
- (interactive "*")
- (insert ?\Ú)
-)
-
-(defun insert-U-circumflex ()
- (interactive "*")
- (insert ?\Û)
-)
-
-(defun insert-U-umlaut ()
- (interactive "*")
- (insert ?\Ü)
-)
-
-(defun insert-Y-acute ()
- (interactive "*")
- (insert ?\Ý)
-)
-
-(defun insert-THORN ()
- (interactive "*")
- (insert ?\Þ)
-)
-
-(defun insert-ss ()
- (interactive "*")
- (insert ?\ß)
-)
-
-(defun insert-a-grave ()
- (interactive "*")
- (insert ?\à)
-)
-
-(defun insert-a-acute ()
- (interactive "*")
- (insert ?\á)
-)
-
-(defun insert-a-circumflex ()
- (interactive "*")
- (insert ?\â)
-)
-
-(defun insert-a-tilde ()
- (interactive "*")
- (insert ?\ã)
-)
-
-(defun insert-a-umlaut ()
- (interactive "*")
- (insert ?\ä)
-)
-
-(defun insert-a-ring ()
- (interactive "*")
- (insert ?\å)
-)
-
-(defun insert-ae ()
- (interactive "*")
- (insert ?\æ)
-)
-
-(defun insert-c-cedilla ()
- (interactive "*")
- (insert ?\ç)
-)
-
-(defun insert-e-grave ()
- (interactive "*")
- (insert ?\è)
-)
-
-(defun insert-e-acute ()
- (interactive "*")
- (insert ?\é)
-)
-
-(defun insert-e-circumflex ()
- (interactive "*")
- (insert ?\ê)
-)
-
-(defun insert-e-umlaut ()
- (interactive "*")
- (insert ?\ë)
-)
-
-(defun insert-i-grave ()
- (interactive "*")
- (insert ?\ì)
-)
-
-(defun insert-i-acute ()
- (interactive "*")
- (insert ?\í)
-)
-
-(defun insert-i-circumflex ()
- (interactive "*")
- (insert ?\î)
-)
-
-(defun insert-i-umlaut ()
- (interactive "*")
- (insert ?\ï)
-)
-
-(defun insert-d-stroke ()
- (interactive "*")
- (insert ?\ð)
-)
-
-(defun insert-n-tilde ()
- (interactive "*")
- (insert ?\ñ)
-)
-
-(defun insert-o-grave ()
- (interactive "*")
- (insert ?\ò)
-)
-
-(defun insert-o-acute ()
- (interactive "*")
- (insert ?\ó)
-)
-
-(defun insert-o-circumflex ()
- (interactive "*")
- (insert ?\ô)
-)
-
-(defun insert-o-tilde ()
- (interactive "*")
- (insert ?\õ)
-)
-
-(defun insert-o-umlaut ()
- (interactive "*")
- (insert ?\ö)
-)
-
-(defun insert-division-sign ()
- (interactive "*")
- (insert ?\÷)
-)
-
-(defun insert-o-slash ()
- (interactive "*")
- (insert ?\ø)
-)
-
-(defun insert-u-grave ()
- (interactive "*")
- (insert ?\ù)
-)
-
-(defun insert-u-acute ()
- (interactive "*")
- (insert ?\ú)
-)
-
-(defun insert-u-circumflex ()
- (interactive "*")
- (insert ?\û)
-)
-
-(defun insert-u-umlaut ()
- (interactive "*")
- (insert ?\ü)
-)
-
-(defun insert-y-acute ()
- (interactive "*")
- (insert ?\ý)
-)
-
-(defun insert-thorn ()
- (interactive "*")
- (insert ?\þ)
-)
-
-(defun insert-y-umlaut ()
- (interactive "*")
- (insert ?\ÿ)
-)
-
-(defvar 8859-1-map nil "Keymap for ISO 8859/1 character insertion.")
-(if 8859-1-map nil
- (setq 8859-1-map (make-keymap))
- (define-key 8859-1-map " " 'insert-no-break-space)
- (define-key 8859-1-map "!" 'insert-inverted-exclamation-mark)
- (define-key 8859-1-map "\"" (make-sparse-keymap))
- (define-key 8859-1-map "\"\"" 'insert-diaeresis)
- (define-key 8859-1-map "\"A" 'insert-A-umlaut)
- (define-key 8859-1-map "\"E" 'insert-E-umlaut)
- (define-key 8859-1-map "\"I" 'insert-I-umlaut)
- (define-key 8859-1-map "\"O" 'insert-O-umlaut)
- (define-key 8859-1-map "\"U" 'insert-U-umlaut)
- (define-key 8859-1-map "\"a" 'insert-a-umlaut)
- (define-key 8859-1-map "\"e" 'insert-e-umlaut)
- (define-key 8859-1-map "\"i" 'insert-i-umlaut)
- (define-key 8859-1-map "\"o" 'insert-o-umlaut)
- (define-key 8859-1-map "\"u" 'insert-u-umlaut)
- (define-key 8859-1-map "\"y" 'insert-y-umlaut)
- (define-key 8859-1-map "'" (make-sparse-keymap))
- (define-key 8859-1-map "''" 'insert-acute-accent)
- (define-key 8859-1-map "'A" 'insert-A-acute)
- (define-key 8859-1-map "'E" 'insert-E-acute)
- (define-key 8859-1-map "'I" 'insert-I-acute)
- (define-key 8859-1-map "'O" 'insert-O-acute)
- (define-key 8859-1-map "'U" 'insert-U-acute)
- (define-key 8859-1-map "'Y" 'insert-Y-acute)
- (define-key 8859-1-map "'a" 'insert-a-acute)
- (define-key 8859-1-map "'e" 'insert-e-acute)
- (define-key 8859-1-map "'i" 'insert-i-acute)
- (define-key 8859-1-map "'o" 'insert-o-acute)
- (define-key 8859-1-map "'u" 'insert-u-acute)
- (define-key 8859-1-map "'y" 'insert-y-acute)
- (define-key 8859-1-map "$" 'insert-general-currency-sign)
- (define-key 8859-1-map "+" 'insert-plus-or-minus-sign)
- (define-key 8859-1-map "," (make-sparse-keymap))
- (define-key 8859-1-map ",," 'insert-cedilla)
- (define-key 8859-1-map ",C" 'insert-C-cedilla)
- (define-key 8859-1-map ",c" 'insert-c-cedilla)
- (define-key 8859-1-map "-" 'insert-soft-hyphen)
- (define-key 8859-1-map "." 'insert-middle-dot)
- (define-key 8859-1-map "/" (make-sparse-keymap))
- (define-key 8859-1-map "//" 'insert-division-sign)
- (define-key 8859-1-map "/O" 'insert-O-slash)
- (define-key 8859-1-map "/o" 'insert-o-slash)
- (define-key 8859-1-map "1" (make-sparse-keymap))
- (define-key 8859-1-map "1/" (make-sparse-keymap))
- (define-key 8859-1-map "1/2" 'insert-fraction-one-half)
- (define-key 8859-1-map "1/4" 'insert-fraction-one-quarter)
- (define-key 8859-1-map "3" (make-sparse-keymap))
- (define-key 8859-1-map "3/" (make-sparse-keymap))
- (define-key 8859-1-map "3/4" 'insert-fraction-three-quarters)
- (define-key 8859-1-map "<" 'insert-angle-quotation-mark-left)
- (define-key 8859-1-map "=" 'insert-macron)
- (define-key 8859-1-map ">" 'insert-angle-quotation-mark-right)
- (define-key 8859-1-map "?" 'insert-inverted-question-mark)
- (define-key 8859-1-map "A" 'insert-A-ring)
- (define-key 8859-1-map "E" 'insert-AE)
- (define-key 8859-1-map "C" 'insert-copyright-sign)
- (define-key 8859-1-map "D" 'insert-D-stroke)
- (define-key 8859-1-map "L" 'insert-pound-sign)
- (define-key 8859-1-map "P" 'insert-pilcrow)
- (define-key 8859-1-map "R" 'insert-registered-sign)
- (define-key 8859-1-map "S" 'insert-section-sign)
- (define-key 8859-1-map "T" 'insert-THORN)
- (define-key 8859-1-map "Y" 'insert-yen-sign)
- (define-key 8859-1-map "^" (make-sparse-keymap))
- (define-key 8859-1-map "^1" 'insert-superscript-one)
- (define-key 8859-1-map "^2" 'insert-superscript-two)
- (define-key 8859-1-map "^3" 'insert-superscript-three)
- (define-key 8859-1-map "^A" 'insert-A-circumflex)
- (define-key 8859-1-map "^E" 'insert-E-circumflex)
- (define-key 8859-1-map "^I" 'insert-I-circumflex)
- (define-key 8859-1-map "^O" 'insert-O-circumflex)
- (define-key 8859-1-map "^U" 'insert-U-circumflex)
- (define-key 8859-1-map "^a" 'insert-a-circumflex)
- (define-key 8859-1-map "^e" 'insert-e-circumflex)
- (define-key 8859-1-map "^i" 'insert-i-circumflex)
- (define-key 8859-1-map "^o" 'insert-o-circumflex)
- (define-key 8859-1-map "^u" 'insert-u-circumflex)
- (define-key 8859-1-map "_" (make-sparse-keymap))
- (define-key 8859-1-map "_a" 'insert-ordinal-indicator-feminine)
- (define-key 8859-1-map "_o" 'insert-ordinal-indicator-masculine)
- (define-key 8859-1-map "`" (make-sparse-keymap))
- (define-key 8859-1-map "`A" 'insert-A-grave)
- (define-key 8859-1-map "`E" 'insert-E-grave)
- (define-key 8859-1-map "`I" 'insert-I-grave)
- (define-key 8859-1-map "`O" 'insert-O-grave)
- (define-key 8859-1-map "`U" 'insert-U-grave)
- (define-key 8859-1-map "`a" 'insert-a-grave)
- (define-key 8859-1-map "`e" 'insert-e-grave)
- (define-key 8859-1-map "`i" 'insert-i-grave)
- (define-key 8859-1-map "`o" 'insert-o-grave)
- (define-key 8859-1-map "`u" 'insert-u-grave)
- (define-key 8859-1-map "a" 'insert-a-ring)
- (define-key 8859-1-map "e" 'insert-ae)
- (define-key 8859-1-map "c" 'insert-cent-sign)
- (define-key 8859-1-map "d" 'insert-d-stroke)
- (define-key 8859-1-map "o" 'insert-degree-sign)
- (define-key 8859-1-map "s" 'insert-ss)
- (define-key 8859-1-map "t" 'insert-thorn)
- (define-key 8859-1-map "u" 'insert-micro-sign)
- (define-key 8859-1-map "x" 'insert-multiplication-sign)
- (define-key 8859-1-map "|" 'insert-broken-vertical-line)
- (define-key 8859-1-map "~" (make-sparse-keymap))
- (define-key 8859-1-map "~A" 'insert-A-tilde)
- (define-key 8859-1-map "~N" 'insert-N-tilde)
- (define-key 8859-1-map "~O" 'insert-O-tilde)
- (define-key 8859-1-map "~a" 'insert-a-tilde)
- (define-key 8859-1-map "~n" 'insert-n-tilde)
- (define-key 8859-1-map "~o" 'insert-o-tilde)
- (define-key 8859-1-map "~~" 'insert-not-sign)
- (if (not (lookup-key global-map "\C-x8"))
- (define-key global-map "\C-x8" 8859-1-map))
-)
-(defalias '8859-1-map 8859-1-map)
-
-(provide 'iso-insert)
-
-;;; iso-insert.el ends here
+++ /dev/null
-;;; iso-swed.el --- set up char tables for ISO 8859/1 for Swedish/Finnish ttys
-
-;; Copyright (C) 1987, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Howard Gayle
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Written by Howard Gayle. See case-table.el for details.
-
-;;; Code:
-
-;; This code sets up to display ISO 8859/1 characters on
-;; terminals that have ASCII in the G0 set and a Swedish/Finnish
-;; version of ISO 646 in the G1 set. The G1 set differs from
-;; ASCII as follows:
-;;
-;; ASCII G1
-;; $ general currency sign
-;; @ capital E with acute accent
-;; [ capital A with diaeresis or umlaut mark
-;; \ capital O with diaeresis or umlaut mark
-;; ] capital A with ring
-;; ^ capital U with diaeresis or umlaut mark
-;; ` small e with acute accent
-;; { small a with diaeresis or umlaut mark
-;; | small o with diaeresis or umlaut mark
-;; } small a with ring
-;; ~ small u with diaeresis or umlaut mark
-
-(require 'disp-table)
-
-(standard-display-ascii 160 "{_}") ; NBSP (no-break space)
-(standard-display-ascii 161 "{!}") ; inverted exclamation mark
-(standard-display-ascii 162 "{c}") ; cent sign
-(standard-display-ascii 163 "{GBP}") ; pound sign
-(standard-display-g1 164 ?$) ; general currency sign
-(standard-display-ascii 165 "{JPY}") ; yen sign
-(standard-display-ascii 166 "{|}") ; broken vertical line
-(standard-display-ascii 167 "{S}") ; section sign
-(standard-display-ascii 168 "{\"}") ; diaeresis
-(standard-display-ascii 169 "{C}") ; copyright sign
-(standard-display-ascii 170 "{_a}") ; ordinal indicator, feminine
-(standard-display-ascii 171 "{<<}") ; left angle quotation mark
-(standard-display-ascii 172 "{~}") ; not sign
-(standard-display-ascii 173 "{-}") ; soft hyphen
-(standard-display-ascii 174 "{R}") ; registered sign
-(standard-display-ascii 175 "{=}") ; macron
-(standard-display-ascii 176 "{o}") ; degree sign
-(standard-display-ascii 177 "{+-}") ; plus or minus sign
-(standard-display-ascii 178 "{2}") ; superscript two
-(standard-display-ascii 179 "{3}") ; superscript three
-(standard-display-ascii 180 "{'}") ; acute accent
-(standard-display-ascii 181 "{u}") ; micro sign
-(standard-display-ascii 182 "{P}") ; pilcrow
-(standard-display-ascii 183 "{.}") ; middle dot
-(standard-display-ascii 184 "{,}") ; cedilla
-(standard-display-ascii 185 "{1}") ; superscript one
-(standard-display-ascii 186 "{_o}") ; ordinal indicator, masculine
-(standard-display-ascii 187 "{>>}") ; right angle quotation mark
-(standard-display-ascii 188 "{1/4}") ; fraction one-quarter
-(standard-display-ascii 189 "{1/2}") ; fraction one-half
-(standard-display-ascii 190 "{3/4}") ; fraction three-quarters
-(standard-display-ascii 191 "{?}") ; inverted question mark
-(standard-display-ascii 192 "{`A}") ; A with grave accent
-(standard-display-ascii 193 "{'A}") ; A with acute accent
-(standard-display-ascii 194 "{^A}") ; A with circumflex accent
-(standard-display-ascii 195 "{~A}") ; A with tilde
-(standard-display-g1 196 ?[) ; A with diaeresis or umlaut mark
-(standard-display-g1 197 ?]) ; A with ring
-(standard-display-ascii 198 "{AE}") ; AE diphthong
-(standard-display-ascii 199 "{,C}") ; C with cedilla
-(standard-display-ascii 200 "{`E}") ; E with grave accent
-(standard-display-g1 201 ?@) ; E with acute accent
-(standard-display-ascii 202 "{^E}") ; E with circumflex accent
-(standard-display-ascii 203 "{\"E}") ; E with diaeresis or umlaut mark
-(standard-display-ascii 204 "{`I}") ; I with grave accent
-(standard-display-ascii 205 "{'I}") ; I with acute accent
-(standard-display-ascii 206 "{^I}") ; I with circumflex accent
-(standard-display-ascii 207 "{\"I}") ; I with diaeresis or umlaut mark
-(standard-display-ascii 208 "{-D}") ; D with stroke, Icelandic eth
-(standard-display-ascii 209 "{~N}") ; N with tilde
-(standard-display-ascii 210 "{`O}") ; O with grave accent
-(standard-display-ascii 211 "{'O}") ; O with acute accent
-(standard-display-ascii 212 "{^O}") ; O with circumflex accent
-(standard-display-ascii 213 "{~O}") ; O with tilde
-(standard-display-g1 214 ?\\) ; O with diaeresis or umlaut mark
-(standard-display-ascii 215 "{x}") ; multiplication sign
-(standard-display-ascii 216 "{/O}") ; O with slash
-(standard-display-ascii 217 "{`U}") ; U with grave accent
-(standard-display-ascii 218 "{'U}") ; U with acute accent
-(standard-display-ascii 219 "{^U}") ; U with circumflex accent
-(standard-display-g1 220 ?^) ; U with diaeresis or umlaut mark
-(standard-display-ascii 221 "{'Y}") ; Y with acute accent
-(standard-display-ascii 222 "{TH}") ; capital thorn, Icelandic
-(standard-display-ascii 223 "{ss}") ; small sharp s, German
-(standard-display-ascii 224 "{`a}") ; a with grave accent
-(standard-display-ascii 225 "{'a}") ; a with acute accent
-(standard-display-ascii 226 "{^a}") ; a with circumflex accent
-(standard-display-ascii 227 "{~a}") ; a with tilde
-(standard-display-g1 228 ?{) ; a with diaeresis or umlaut mark
-(standard-display-g1 229 ?}) ; a with ring
-(standard-display-ascii 230 "{ae}") ; ae diphthong
-(standard-display-ascii 231 "{,c}") ; c with cedilla
-(standard-display-ascii 232 "{`e}") ; e with grave accent
-(standard-display-g1 233 ?`) ; e with acute accent
-(standard-display-ascii 234 "{^e}") ; e with circumflex accent
-(standard-display-ascii 235 "{\"e}") ; e with diaeresis or umlaut mark
-(standard-display-ascii 236 "{`i}") ; i with grave accent
-(standard-display-ascii 237 "{'i}") ; i with acute accent
-(standard-display-ascii 238 "{^i}") ; i with circumflex accent
-(standard-display-ascii 239 "{\"i}") ; i with diaeresis or umlaut mark
-(standard-display-ascii 240 "{-d}") ; d with stroke, Icelandic eth
-(standard-display-ascii 241 "{~n}") ; n with tilde
-(standard-display-ascii 242 "{`o}") ; o with grave accent
-(standard-display-ascii 243 "{'o}") ; o with acute accent
-(standard-display-ascii 244 "{^o}") ; o with circumflex accent
-(standard-display-ascii 245 "{~o}") ; o with tilde
-(standard-display-g1 246 ?|) ; o with diaeresis or umlaut mark
-(standard-display-ascii 247 "{/}") ; division sign
-(standard-display-ascii 248 "{/o}") ; o with slash
-(standard-display-ascii 249 "{`u}") ; u with grave accent
-(standard-display-ascii 250 "{'u}") ; u with acute accent
-(standard-display-ascii 251 "{^u}") ; u with circumflex accent
-(standard-display-g1 252 ?~) ; u with diaeresis or umlaut mark
-(standard-display-ascii 253 "{'y}") ; y with acute accent
-(standard-display-ascii 254 "{th}") ; small thorn, Icelandic
-(standard-display-ascii 255 "{\"y}") ; small y with diaeresis or umlaut mark
-
-(provide 'iso-swed)
-
-;;; iso-swed.el ends here
+++ /dev/null
-;;; resume.el --- process command line args from within a suspended Emacs job
-
-;; Copyright (C) 1992, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Joe Wells <jbw@bucsf.bu.edu>
-;; Adapted-By: ESR
-;; Keywords: processes
-;; Obsolete-since: 23.1
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; The purpose of this library is to handle command line arguments
-;; when you resume an existing Emacs job.
-
-;; In order to use it, you must put this code in your .emacs file.
-
-;; (add-hook 'suspend-hook 'resume-suspend-hook)
-;; (add-hook 'suspend-resume-hook 'resume-process-args)
-
-;; You can't get the benefit of this library by using the `emacs' command,
-;; since that always starts a new Emacs job. Instead you must use a
-;; command called `edit' which knows how to resume an existing Emacs job
-;; if you have one, or start a new Emacs job if you don't have one.
-
-;; To define the `edit' command, run the script etc/emacs.csh (if you use CSH),
-;; or etc/emacs.bash if you use BASH. You would normally do this in your
-;; login script.
-
-;; Stephan Gildea suggested bug fix (gildea@bbn.com).
-;; Ideas from Michael DeCorte and other people.
-
-;;; Code:
-
-(defvar resume-emacs-args-file (expand-file-name "~/.emacs_args")
- "This file is where arguments are placed for a suspended Emacs job.")
-
-(defvar resume-emacs-args-buffer " *Command Line Args*"
- "Buffer that is used by `resume-process-args'.")
-
-(defun resume-process-args ()
- "Handler for command line args given when Emacs is resumed."
- (let ((start-buffer (current-buffer))
- (args-buffer (get-buffer-create resume-emacs-args-buffer))
- length args
- (command-line-default-directory default-directory))
- (unwind-protect
- (progn
- (set-buffer args-buffer)
- (erase-buffer)
- ;; get the contents of resume-emacs-args-file
- (condition-case ()
- (let ((result (insert-file-contents resume-emacs-args-file)))
- (setq length (car (cdr result))))
- ;; the file doesn't exist, ergo no arguments
- (file-error
- (erase-buffer)
- (setq length 0)))
- (if (<= length 0)
- (setq args nil)
- ;; get the arguments from the buffer
- (goto-char (point-min))
- (while (not (eobp))
- (skip-chars-forward " \t\n")
- (let ((begin (point)))
- (skip-chars-forward "^ \t\n")
- (setq args (cons (buffer-substring begin (point)) args)))
- (skip-chars-forward " \t\n"))
- ;; arguments are now in reverse order
- (setq args (nreverse args))
- ;; make sure they're not read again
- (erase-buffer))
- (resume-write-buffer-to-file (current-buffer) resume-emacs-args-file)
- ;; if nothing was in buffer, args will be null
- (or (null args)
- (setq command-line-default-directory
- (file-name-as-directory (car args))
- args (cdr args)))
- ;; actually process the arguments
- (command-line-1 args))
- ;; If the command line args don't result in a find-file, the
- ;; buffer will be left in args-buffer. So we change back to the
- ;; original buffer. The reason I don't just use
- ;; (let ((default-directory foo))
- ;; (command-line-1 args))
- ;; in the context of the original buffer is because let does not
- ;; work properly with buffer-local variables.
- (if (eq (current-buffer) args-buffer)
- (set-buffer start-buffer)))))
-
-;;;###autoload
-(defun resume-suspend-hook ()
- "Clear out the file used for transmitting args when Emacs resumes."
- (with-current-buffer (get-buffer-create resume-emacs-args-buffer)
- (erase-buffer)
- (resume-write-buffer-to-file (current-buffer) resume-emacs-args-file)))
-
-(defun resume-write-buffer-to-file (buffer file)
- "Writes the contents of BUFFER into FILE, if permissions allow."
- (if (not (file-writable-p file))
- (error "No permission to write file %s" file))
- (with-current-buffer buffer
- (clear-visited-file-modtime)
- (save-restriction
- (widen)
- (write-region (point-min) (point-max) file nil 'quiet))
- (set-buffer-modified-p nil)))
-
-(provide 'resume)
-
-;;; resume.el ends here
+++ /dev/null
-;;; scribe.el --- scribe mode, and its idiosyncratic commands
-
-;; Copyright (C) 1985, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: William Sommerfeld
-;; (according to ack.texi)
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: wp
-;; Obsolete-since: 22.1
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; A major mode for editing source in written for the Scribe text formatter.
-;; Knows about Scribe syntax and standard layout rules. The command to
-;; run Scribe on a buffer is bogus; someone interested should fix it.
-
-;;; Code:
-
-(defvar compile-command)
-
-(defgroup scribe nil
- "Scribe mode."
- :prefix "scribe-"
- :group 'wp)
-
-(defvar scribe-mode-syntax-table nil
- "Syntax table used while in scribe mode.")
-
-(defvar scribe-mode-abbrev-table nil
- "Abbrev table used while in scribe mode.")
-
-(defcustom scribe-fancy-paragraphs nil
- "Non-nil makes Scribe mode use a different style of paragraph separation."
- :type 'boolean
- :group 'scribe)
-
-(defcustom scribe-electric-quote nil
- "Non-nil makes insert of double quote use \\=`\\=` or \\='\\=' depending on context."
- :type 'boolean
- :group 'scribe)
-
-(defcustom scribe-electric-parenthesis nil
- "Non-nil makes parenthesis char ( (]}> ) automatically insert its close
-if typed after an @Command form."
- :type 'boolean
- :group 'scribe)
-
-(defconst scribe-open-parentheses "[({<"
- "Open parenthesis characters for Scribe.")
-
-(defconst scribe-close-parentheses "])}>"
- "Close parenthesis characters for Scribe.
-These should match up with `scribe-open-parenthesis'.")
-
-(if (null scribe-mode-syntax-table)
- (let ((st (syntax-table)))
- (unwind-protect
- (progn
- (setq scribe-mode-syntax-table (copy-syntax-table
- text-mode-syntax-table))
- (set-syntax-table scribe-mode-syntax-table)
- (modify-syntax-entry ?\" " ")
- (modify-syntax-entry ?\\ " ")
- (modify-syntax-entry ?@ "w ")
- (modify-syntax-entry ?< "(> ")
- (modify-syntax-entry ?> ")< ")
- (modify-syntax-entry ?[ "(] ")
- (modify-syntax-entry ?] ")[ ")
- (modify-syntax-entry ?{ "(} ")
- (modify-syntax-entry ?} "){ ")
- (modify-syntax-entry ?' "w "))
- (set-syntax-table st))))
-
-(defvar scribe-mode-map nil)
-
-(if scribe-mode-map
- nil
- (setq scribe-mode-map (make-sparse-keymap))
- (define-key scribe-mode-map "\t" 'scribe-tab)
- (define-key scribe-mode-map "\e\t" 'tab-to-tab-stop)
- (define-key scribe-mode-map "\es" 'center-line)
- (define-key scribe-mode-map "\e}" 'up-list)
- (define-key scribe-mode-map "\eS" 'center-paragraph)
- (define-key scribe-mode-map "\"" 'scribe-insert-quote)
- (define-key scribe-mode-map "(" 'scribe-parenthesis)
- (define-key scribe-mode-map "[" 'scribe-parenthesis)
- (define-key scribe-mode-map "{" 'scribe-parenthesis)
- (define-key scribe-mode-map "<" 'scribe-parenthesis)
- (define-key scribe-mode-map "\C-c\C-c" 'scribe-chapter)
- (define-key scribe-mode-map "\C-c\C-t" 'scribe-section)
- (define-key scribe-mode-map "\C-c\C-s" 'scribe-subsection)
- (define-key scribe-mode-map "\C-c\C-v" 'scribe-insert-environment)
- (define-key scribe-mode-map "\C-c\C-e" 'scribe-bracket-region-be)
- (define-key scribe-mode-map "\C-c[" 'scribe-begin)
- (define-key scribe-mode-map "\C-c]" 'scribe-end)
- (define-key scribe-mode-map "\C-c\C-i" 'scribe-italicize-word)
- (define-key scribe-mode-map "\C-c\C-b" 'scribe-bold-word)
- (define-key scribe-mode-map "\C-c\C-u" 'scribe-underline-word))
-
-;;;###autoload
-(define-derived-mode scribe-mode text-mode "Scribe"
- "Major mode for editing files of Scribe (a text formatter) source.
-Scribe-mode is similar to text-mode, with a few extra commands added.
-\\{scribe-mode-map}
-
-Interesting variables:
-
-`scribe-fancy-paragraphs'
- Non-nil makes Scribe mode use a different style of paragraph separation.
-
-`scribe-electric-quote'
- Non-nil makes insert of double quote use \\=`\\=` or \\='\\=' depending on context.
-
-`scribe-electric-parenthesis'
- Non-nil makes an open-parenthesis char (one of `([<{')
- automatically insert its close if typed after an @Command form."
- (set (make-local-variable 'comment-start) "@Comment[")
- (set (make-local-variable 'comment-start-skip) (concat "@Comment[" scribe-open-parentheses "]"))
- (set (make-local-variable 'comment-column) 0)
- (set (make-local-variable 'comment-end) "]")
- (set (make-local-variable 'paragraph-start)
- (concat "\\([\n\f]\\)\\|\\(@\\w+["
- scribe-open-parentheses
- "].*["
- scribe-close-parentheses
- "]$\\)"))
- (set (make-local-variable 'paragraph-separate)
- (if scribe-fancy-paragraphs paragraph-start "$"))
- (set (make-local-variable 'sentence-end)
- "\\([.?!]\\|@:\\)[]\"')}]*\\($\\| $\\|\t\\| \\)[ \t\n]*")
- (set (make-local-variable 'compile-command)
- (concat "scribe "
- (if buffer-file-name
- (shell-quote-argument (buffer-file-name))))))
-
-(defun scribe-tab ()
- (interactive)
- (insert "@\\"))
-
-;; This algorithm could probably be improved somewhat.
-;; Right now, it loses seriously...
-
-(defun scribe ()
- "Run Scribe on the current buffer."
- (interactive)
- (call-interactively 'compile))
-
-(defun scribe-envelop-word (string count)
- "Surround current word with Scribe construct @STRING[...].
-COUNT specifies how many words to surround. A negative count means
-to skip backward."
- (let ((spos (point)) (epos (point)) (ccoun 0) noparens)
- (if (not (zerop count))
- (progn (if (= (char-syntax (preceding-char)) ?w)
- (forward-sexp (min -1 count)))
- (setq spos (point))
- (if (looking-at (concat "@\\w[" scribe-open-parentheses "]"))
- (forward-char 2)
- (goto-char epos)
- (skip-chars-backward "\\W")
- (forward-char -1))
- (forward-sexp (max count 1))
- (setq epos (point))))
- (goto-char spos)
- (while (and (< ccoun (length scribe-open-parentheses))
- (save-excursion
- (or (search-forward (char-to-string
- (aref scribe-open-parentheses ccoun))
- epos t)
- (search-forward (char-to-string
- (aref scribe-close-parentheses ccoun))
- epos t)))
- (setq ccoun (1+ ccoun))))
- (if (>= ccoun (length scribe-open-parentheses))
- (progn (goto-char epos)
- (insert "@end(" string ")")
- (goto-char spos)
- (insert "@begin(" string ")"))
- (goto-char epos)
- (insert (aref scribe-close-parentheses ccoun))
- (goto-char spos)
- (insert "@" string (aref scribe-open-parentheses ccoun))
- (goto-char epos)
- (forward-char 3)
- (skip-chars-forward scribe-close-parentheses))))
-
-(defun scribe-underline-word (count)
- "Underline COUNT words around point by means of Scribe constructs."
- (interactive "p")
- (scribe-envelop-word "u" count))
-
-(defun scribe-bold-word (count)
- "Boldface COUNT words around point by means of Scribe constructs."
- (interactive "p")
- (scribe-envelop-word "b" count))
-
-(defun scribe-italicize-word (count)
- "Italicize COUNT words around point by means of Scribe constructs."
- (interactive "p")
- (scribe-envelop-word "i" count))
-
-(defun scribe-begin ()
- (interactive)
- (insert "\n")
- (forward-char -1)
- (scribe-envelop-word "Begin" 0)
- (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-end ()
- (interactive)
- (insert "\n")
- (forward-char -1)
- (scribe-envelop-word "End" 0)
- (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-chapter ()
- (interactive)
- (insert "\n")
- (forward-char -1)
- (scribe-envelop-word "Chapter" 0)
- (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-section ()
- (interactive)
- (insert "\n")
- (forward-char -1)
- (scribe-envelop-word "Section" 0)
- (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-subsection ()
- (interactive)
- (insert "\n")
- (forward-char -1)
- (scribe-envelop-word "SubSection" 0)
- (re-search-forward (concat "[" scribe-open-parentheses "]")))
-
-(defun scribe-bracket-region-be (env min max)
- (interactive "sEnvironment: \nr")
- (save-excursion
- (goto-char max)
- (insert "@end(" env ")\n")
- (goto-char min)
- (insert "@begin(" env ")\n")))
-
-(defun scribe-insert-environment (env)
- (interactive "sEnvironment: ")
- (scribe-bracket-region-be env (point) (point))
- (forward-line 1)
- (insert ?\n)
- (forward-char -1))
-
-(defun scribe-insert-quote (count)
- "Insert \\=`\\=`, \\='\\=' or \" according to preceding character.
-If `scribe-electric-quote' is non-nil, insert \\=`\\=`, \\='\\=' or \" according
-to preceding character. With numeric arg N, always insert N \" characters.
-Else just insert \"."
- (interactive "P")
- (if (or count (not scribe-electric-quote))
- (self-insert-command (prefix-numeric-value count))
- (let (lastfore lastback lastquote)
- (insert
- (cond
- ((= (preceding-char) ?\\) ?\")
- ((bobp) "``")
- (t
- (setq lastfore (save-excursion (and (search-backward
- "``" (- (point) 1000) t)
- (point)))
- lastback (save-excursion (and (search-backward
- "''" (- (point) 1000) t)
- (point)))
- lastquote (save-excursion (and (search-backward
- "\"" (- (point) 100) t)
- (point))))
- (if (not lastquote)
- (cond ((not lastfore) "``")
- ((not lastback) "''")
- ((> lastfore lastback) "''")
- (t "``"))
- (cond ((and (not lastback) (not lastfore)) "\"")
- ((and lastback (not lastfore) (> lastquote lastback)) "\"")
- ((and lastback (not lastfore) (> lastback lastquote)) "``")
- ((and lastfore (not lastback) (> lastquote lastfore)) "\"")
- ((and lastfore (not lastback) (> lastfore lastquote)) "''")
- ((and (> lastquote lastfore) (> lastquote lastback)) "\"")
- ((> lastfore lastback) "''")
- (t "``")))))))))
-
-(defun scribe-parenthesis (count)
- "If scribe-electric-parenthesis is non-nil, insertion of an open-parenthesis
-character inserts the following close parenthesis character if the
-preceding text is of the form @Command."
- (interactive "P")
- (self-insert-command (prefix-numeric-value count))
- (let (at-command paren-char point-save)
- (if (or count (not scribe-electric-parenthesis))
- nil
- (save-excursion
- (forward-char -1)
- (setq point-save (point))
- (skip-chars-backward (concat "^ \n\t\f" scribe-open-parentheses))
- (setq at-command (and (equal (following-char) ?@)
- (/= (point) (1- point-save)))))
- (if (and at-command
- (setq paren-char
- (string-match (regexp-quote
- (char-to-string (preceding-char)))
- scribe-open-parentheses)))
- (save-excursion
- (insert (aref scribe-close-parentheses paren-char)))))))
-
-(provide 'scribe)
-
-;;; scribe.el ends here
+++ /dev/null
-;;; spell.el --- spelling correction interface for Emacs
-
-;; Copyright (C) 1985, 2001-2016 Free Software Foundation, Inc.
-
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: wp, unix
-;; Obsolete-since: 23.1
-;; (not in obsolete/ directory then, but all functions marked obsolete)
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This mode provides an Emacs interface to the UNIX spell(1) program.
-;; Entry points are `spell-buffer', `spell-word', `spell-region' and
-;; `spell-string'.
-
-;; See also ispell.el for an interface to the ispell program.
-
-;;; Code:
-
-(defgroup spell nil
- "Interface to the UNIX spell(1) program."
- :prefix "spell-"
- :group 'applications)
-
-(defcustom spell-command "spell"
- "Command to run the spell program."
- :type 'string
- :group 'spell)
-
-(defcustom spell-filter nil
- "Filter function to process text before passing it to spell program.
-This function might remove text-processor commands.
-nil means don't alter the text before checking it."
- :type '(choice (const nil) function)
- :group 'spell)
-
-;;;###autoload
-(put 'spell-filter 'risky-local-variable t)
-
-;;;###autoload
-(defun spell-buffer ()
- "Check spelling of every word in the buffer.
-For each incorrect word, you are asked for the correct spelling
-and then put into a query-replace to fix some or all occurrences.
-If you do not want to change a word, just give the same word
-as its \"correct\" spelling; then the query replace is skipped."
- (interactive)
- ;; Don't warn about spell-region being obsolete.
- (with-no-warnings
- (spell-region (point-min) (point-max) "buffer")))
-;;;###autoload
-(make-obsolete 'spell-buffer 'ispell-buffer "23.1")
-
-;;;###autoload
-(defun spell-word ()
- "Check spelling of word at or before point.
-If it is not correct, ask user for the correct spelling
-and `query-replace' the entire buffer to substitute it."
- (interactive)
- (let (beg end spell-filter)
- (save-excursion
- (if (not (looking-at "\\<"))
- (forward-word -1))
- (setq beg (point))
- (forward-word 1)
- (setq end (point)))
- ;; Don't warn about spell-region being obsolete.
- (with-no-warnings
- (spell-region beg end (buffer-substring beg end)))))
-;;;###autoload
-(make-obsolete 'spell-word 'ispell-word "23.1")
-
-;;;###autoload
-(defun spell-region (start end &optional description)
- "Like `spell-buffer' but applies only to region.
-Used in a program, applies from START to END.
-DESCRIPTION is an optional string naming the unit being checked:
-for example, \"word\"."
- (interactive "r")
- (let ((filter spell-filter)
- (buf (get-buffer-create " *temp*")))
- (with-current-buffer buf
- (widen)
- (erase-buffer))
- (message "Checking spelling of %s..." (or description "region"))
- (if (and (null filter) (= ?\n (char-after (1- end))))
- (if (string= "spell" spell-command)
- (call-process-region start end "spell" nil buf)
- (call-process-region start end shell-file-name
- nil buf nil "-c" spell-command))
- (let ((oldbuf (current-buffer)))
- (with-current-buffer buf
- (insert-buffer-substring oldbuf start end)
- (or (bolp) (insert ?\n))
- (if filter (funcall filter))
- (if (string= "spell" spell-command)
- (call-process-region (point-min) (point-max) "spell" t buf)
- (call-process-region (point-min) (point-max) shell-file-name
- t buf nil "-c" spell-command)))))
- (message "Checking spelling of %s...%s"
- (or description "region")
- (if (with-current-buffer buf
- (> (buffer-size) 0))
- "not correct"
- "correct"))
- (let (word newword
- (case-fold-search t)
- (case-replace t))
- (while (with-current-buffer buf
- (> (buffer-size) 0))
- (with-current-buffer buf
- (goto-char (point-min))
- (setq word (downcase
- (buffer-substring (point)
- (progn (end-of-line) (point)))))
- (forward-char 1)
- (delete-region (point-min) (point))
- (setq newword
- (read-string (concat "`" word
- "' not recognized; edit a replacement: ")
- word))
- (flush-lines (concat "^" (regexp-quote word) "$")))
- (if (not (equal word newword))
- (progn
- (goto-char (point-min))
- (query-replace-regexp (concat "\\b" (regexp-quote word) "\\b")
- newword)))))))
-;;;###autoload
-(make-obsolete 'spell-region 'ispell-region "23.1")
-
-;;;###autoload
-(defun spell-string (string)
- "Check spelling of string supplied as argument."
- (interactive "sSpell string: ")
- (with-temp-buffer
- (widen)
- (erase-buffer)
- (insert string "\n")
- (if (string= "spell" spell-command)
- (call-process-region (point-min) (point-max) "spell"
- t t)
- (call-process-region (point-min) (point-max) shell-file-name
- t t nil "-c" spell-command))
- (if (= 0 (buffer-size))
- (message "%s is correct" string)
- (goto-char (point-min))
- (while (search-forward "\n" nil t)
- (replace-match " "))
- (message "%sincorrect" (buffer-substring 1 (point-max))))))
-;;;###autoload
-(make-obsolete 'spell-string "The `spell' package is obsolete - use `ispell'."
- "23.1")
-
-(provide 'spell)
-
-;;; spell.el ends here
+++ /dev/null
-;;; swedish.el --- miscellaneous functions for dealing with Swedish
-
-;; Copyright (C) 1988, 2001-2016 Free Software Foundation, Inc.
-
-;; Author: Howard Gayle
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: i18n
-;; Obsolete-since: 22.1
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Fixme: Is this actually used? if so, it should be in language,
-;; possibly as a feature property of Swedish, probably defining a
-;; `swascii' coding system.
-
-;;; Code:
-
-;; Written by Howard Gayle. See case-table.el for details.
-
-;; See iso-swed.el for a description of the character set.
-
-(defvar mail-send-hook)
-(defvar news-group-hook-alist)
-(defvar news-inews-hook)
-
-(defvar swedish-re
- "[ \t\n]\\(och\\|att\\|en\\|{r\\|\\[R\\|p}\\|P\\]\\|som\\|det\\|av\\|den\\|f|r\\|F\\\\R\\)[ \t\n.,?!:;'\")}]"
- "Regular expression for common Swedish words.")
-
-(defvar swascii-to-8859-trans
- (let ((string (make-string 256 ? ))
- (i 0))
- (while (< i 256)
- (aset string i i)
- (setq i (1+ i)))
- (aset string ?\[ 196)
- (aset string ?\] 197)
- (aset string ?\\ 214)
- (aset string ?^ 220)
- (aset string ?\{ 228)
- (aset string ?\} 229)
- (aset string ?\` 233)
- (aset string ?\| 246)
- (aset string ?~ 252)
- string)
- "Trans table from SWASCII to 8859.")
-
-; $ is not converted because it almost always means US
-; dollars, not general currency sign. @ is not converted
-; because it is more likely to be an at sign in a mail address
-; than an E with acute accent.
-
-(defun swascii-to-8859-buffer ()
- "Convert characters in buffer from Swedish/Finnish-ascii to ISO 8859/1.
-Works even on read-only buffers. `$' and `@' are not converted."
- (interactive)
- (let ((buffer-read-only nil))
- (translate-region (point-min) (point-max) swascii-to-8859-trans)))
-
-(defun swascii-to-8859-buffer-maybe ()
- "Call swascii-to-8859-buffer if the buffer looks like Swedish-ascii.
-Leaves point just after the word that looks Swedish."
- (interactive)
- (let ((case-fold-search t))
- (if (re-search-forward swedish-re nil t)
- (swascii-to-8859-buffer))))
-
-(setq rmail-show-message-hook 'swascii-to-8859-buffer-maybe)
-
-(setq news-group-hook-alist
- (append '(("^swnet." . swascii-to-8859-buffer-maybe))
- (bound-and-true-p news-group-hook-alist)))
-
-(defvar 8859-to-swascii-trans
- (let ((string (make-string 256 ? ))
- (i 0))
- (while (< i 256)
- (aset string i i)
- (setq i (1+ i)))
- (aset string 164 ?$)
- (aset string 196 ?\[)
- (aset string 197 ?\])
- (aset string 201 ?@)
- (aset string 214 ?\\)
- (aset string 220 ?^)
- (aset string 228 ?\{)
- (aset string 229 ?\})
- (aset string 233 ?\`)
- (aset string 246 ?\|)
- (aset string 252 ?~)
- string)
- "8859 to SWASCII trans table.")
-
-(defun 8859-to-swascii-buffer ()
- "Convert characters in buffer from ISO 8859/1 to Swedish/Finnish-ascii."
- (interactive "*")
- (translate-region (point-min) (point-max) 8859-to-swascii-trans))
-
-(setq mail-send-hook '8859-to-swascii-buffer)
-(setq news-inews-hook '8859-to-swascii-buffer)
-
-;; It's not clear what purpose is served by a separate
-;; Swedish mode that differs from Text mode only in having
-;; a separate abbrev table. Nothing says that the abbrevs you
-;; define in Text mode have to be English!
-
-;(defvar swedish-mode-abbrev-table nil
-; "Abbrev table used while in swedish mode.")
-;(define-abbrev-table 'swedish-mode-abbrev-table ())
-
-;(defun swedish-mode ()
-; "Major mode for editing Swedish text intended for humans to
-;read. Special commands:\\{text-mode-map}
-;Turning on swedish-mode calls the value of the variable
-;text-mode-hook, if that value is non-nil."
-; (interactive)
-; (kill-all-local-variables)
-; (use-local-map text-mode-map)
-; (setq mode-name "Swedish")
-; (setq major-mode 'swedish-mode)
-; (setq local-abbrev-table swedish-mode-abbrev-table)
-; (set-syntax-table text-mode-syntax-table)
-; (run-mode-hooks 'text-mode-hook))
-
-;(defun indented-swedish-mode ()
-; "Major mode for editing indented Swedish text intended for
-;humans to read.\\{indented-text-mode-map}
-;Turning on indented-swedish-mode calls the value of the
-;variable text-mode-hook, if that value is non-nil."
-; (interactive)
-; (kill-all-local-variables)
-; (use-local-map text-mode-map)
-; (define-abbrev-table 'swedish-mode-abbrev-table ())
-; (setq local-abbrev-table swedish-mode-abbrev-table)
-; (set-syntax-table text-mode-syntax-table)
-; (make-local-variable 'indent-line-function)
-; (setq indent-line-function 'indent-relative-maybe)
-; (use-local-map indented-text-mode-map)
-; (setq mode-name "Indented Swedish")
-; (setq major-mode 'indented-swedish-mode)
-; (run-mode-hooks 'text-mode-hook))
-
-(provide 'swedish)
-
-;;; swedish.el ends here
+++ /dev/null
-;;; sym-comp.el --- mode-dependent symbol completion
-
-;; Copyright (C) 2004, 2008-2016 Free Software Foundation, Inc.
-
-;; Author: Dave Love <fx@gnu.org>
-;; Keywords: extensions
-;; URL: http://www.loveshack.ukfsn.org/emacs
-;; Obsolete-since: 23.2
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This defines `symbol-complete', which is a generalization of the
-;; old `lisp-complete-symbol'. It provides the following hooks to
-;; allow major modes to set up completion appropriate for the mode:
-;; `symbol-completion-symbol-function',
-;; `symbol-completion-completions-function',
-;; `symbol-completion-predicate-function',
-;; `symbol-completion-transform-function'. Typically it is only
-;; necessary for a mode to set
-;; `symbol-completion-completions-function' locally and to bind
-;; `symbol-complete' appropriately.
-
-;; It's unfortunate that there doesn't seem to be a good way of
-;; combining this with `complete-symbol'.
-
-;; There is also `symbol-completion-try-complete', for use with
-;; Hippie-exp.
-
-;;; Code:
-
-;;;; Mode-dependent symbol completion.
-
-(defun symbol-completion-symbol ()
- "Default `symbol-completion-symbol-function'.
-Uses `current-word' with the buffer narrowed to the part before
-point."
- (save-restriction
- ;; Narrow in case point is in the middle of a symbol -- we want
- ;; just the preceding part.
- (narrow-to-region (point-min) (point))
- (current-word)))
-
-(defvar symbol-completion-symbol-function 'symbol-completion-symbol
- "Function to return a partial symbol before point for completion.
-The value it returns should be a string (or nil).
-Major modes may set this locally if the default isn't appropriate.
-
-Beware: the length of the string STR returned need to be equal to the length
-of text before point that's subject to completion. Typically, this amounts
-to saying that STR is equal to
-\(buffer-substring (- (point) (length STR)) (point)).")
-
-(defvar symbol-completion-completions-function nil
- "Function to return possible symbol completions.
-It takes an argument which is the string to be completed and
-returns a value suitable for the second argument of
-`try-completion'. This value need not use the argument, i.e. it
-may be all possible completions, such as `obarray' in the case of
-Emacs Lisp.
-
-Major modes may set this locally to allow them to support
-`symbol-complete'. See also `symbol-completion-symbol-function',
-`symbol-completion-predicate-function' and
-`symbol-completion-transform-function'.")
-
-(defvar symbol-completion-predicate-function nil
- "If non-nil, function to return a predicate for selecting symbol completions.
-The function gets two args, the positions of the beginning and
-end of the symbol to be completed.
-
-Major modes may set this locally if the default isn't
-appropriate. This is a function returning a predicate so that
-the predicate can be context-dependent, e.g. to select only
-function names if point is at a function call position. The
-function's args may be useful for determining the context.")
-
-(defvar symbol-completion-transform-function nil
- "If non-nil, function to transform symbols in the symbol-completion buffer.
-E.g., for Lisp, it may annotate the symbol as being a function,
-not a variable.
-
-The function takes the symbol name as argument. If it needs to
-annotate this, it should return a value suitable as an element of
-the list passed to `display-completion-list'.
-
-The predicate being used for selecting completions (from
-`symbol-completion-predicate-function') is available
-dynamically-bound as `symbol-completion-predicate' in case the
-transform needs it.")
-
-(defvar symbol-completion-predicate)
-
-;;;###autoload
-(defun symbol-complete (&optional predicate)
- "Perform completion of the symbol preceding point.
-This is done in a way appropriate to the current major mode,
-perhaps by interrogating an inferior interpreter. Compare
-`complete-symbol'.
-If no characters can be completed, display a list of possible completions.
-Repeating the command at that point scrolls the list.
-
-When called from a program, optional arg PREDICATE is a predicate
-determining which symbols are considered.
-
-This function requires `symbol-completion-completions-function'
-to be set buffer-locally. Variables `symbol-completion-symbol-function',
-`symbol-completion-predicate-function' and
-`symbol-completion-transform-function' are also consulted."
- (interactive)
- ;; Fixme: Punt to `complete-symbol' in this case?
- (unless (functionp symbol-completion-completions-function)
- (error "symbol-completion-completions-function not defined"))
- (let* ((pattern (or (funcall symbol-completion-symbol-function)
- (error "No preceding symbol to complete")))
- ;; FIXME: We assume below that `pattern' holds the text just
- ;; before point. This is a problem in the way
- ;; symbol-completion-symbol-function was defined.
- (predicate (or predicate
- (if symbol-completion-predicate-function
- (funcall symbol-completion-predicate-function
- (- (point) (length pattern))
- (point)))))
- (completions (funcall symbol-completion-completions-function
- pattern))
- ;; In case the transform needs to access it.
- (symbol-completion-predicate predicate)
- (completion-extra-properties
- (if (functionp symbol-completion-transform-function)
- '(:annotation-function
- (lambda (str)
- (car-safe (cdr-safe
- (funcall symbol-completion-transform-function
- str))))))))
- (completion-in-region (- (point) (length pattern)) (point)
- completions predicate)))
-\f
-(defvar he-search-string)
-(defvar he-tried-table)
-(defvar he-expand-list)
-(declare-function he-init-string "hippie-exp" (beg end))
-(declare-function he-string-member "hippie-exp" (str lst &optional trans-case))
-(declare-function he-substitute-string "hippie-exp" (str &optional trans-case))
-(declare-function he-reset-string "hippie-exp" ())
-
-;;;###autoload
-(defun symbol-completion-try-complete (old)
- "Completion function for use with `hippie-expand'.
-Uses `symbol-completion-symbol-function' and
-`symbol-completion-completions-function'. It is intended to be
-used something like this in a major mode which provides symbol
-completion:
-
- (if (featurep \\='hippie-exp)
- (set (make-local-variable \\='hippie-expand-try-functions-list)
- (cons \\='symbol-completion-try-complete
- hippie-expand-try-functions-list)))"
- (when (and symbol-completion-symbol-function
- symbol-completion-completions-function)
- (unless old
- (let ((symbol (funcall symbol-completion-symbol-function)))
- (he-init-string (- (point) (length symbol)) (point))
- (if (not (he-string-member he-search-string he-tried-table))
- (push he-search-string he-tried-table))
- (setq he-expand-list
- (and symbol
- (funcall symbol-completion-completions-function symbol)))))
- (while (and he-expand-list
- (he-string-member (car he-expand-list) he-tried-table))
- (pop he-expand-list))
- (if he-expand-list
- (progn
- (he-substitute-string (pop he-expand-list))
- t)
- (if old (he-reset-string))
- nil)))
-\f
-;;; Emacs Lisp symbol completion.
-
-(defun lisp-completion-symbol ()
- "`symbol-completion-symbol-function' for Lisp."
- (let ((end (point))
- (beg (with-syntax-table emacs-lisp-mode-syntax-table
- (save-excursion
- (backward-sexp 1)
- (while (= (char-syntax (following-char)) ?\')
- (forward-char 1))
- (point)))))
- (buffer-substring-no-properties beg end)))
-
-(defun lisp-completion-predicate (beg end)
- "`symbol-completion-predicate-function' for Lisp."
- (save-excursion
- (goto-char beg)
- (if (not (eq (char-before) ?\())
- (lambda (sym) ;why not just nil ? -sm
- ;To avoid interned symbols with
- ;no slots. -- fx
- (or (boundp sym) (fboundp sym)
- (symbol-plist sym)))
- ;; Looks like a funcall position. Let's double check.
- (if (condition-case nil
- (progn (up-list -2) (forward-char 1)
- (eq (char-after) ?\())
- (error nil))
- ;; If the first element of the parent list is an open
- ;; parenthesis we are probably not in a funcall position.
- ;; Maybe a `let' varlist or something.
- nil
- ;; Else, we assume that a function name is expected.
- 'fboundp))))
-
-(defun lisp-symbol-completion-transform ()
- "`symbol-completion-transform-function' for Lisp."
- (lambda (elt)
- (if (and (not (eq 'fboundp symbol-completion-predicate))
- (fboundp (intern elt)))
- (list elt " <f>")
- elt)))
-
-(provide 'sym-comp)
-
-;;; sym-comp.el ends here
* ox-html.el (org-html-link): Don't skip the link description when
it matches the name of the headline it targets.
- * ox-ascii.el (ascii): Remove inexistant function.
+ * ox-ascii.el (ascii): Remove nonexistent function.
* ox-icalendar.el (icalendar): Ignore footnotes.
(org-icalendar--combine-files): Small refactoring.
(pcomplete/org-mode/file-option/email)
(pcomplete/org-mode/file-option/date): Use the new macro to offer
completion over default values for #+OPTIONS, #+TITLE, #+AUTHOR,
- #+EMAIL and #+DATE.
+ #+EMAIL and #+DATE.
* org-agenda.el (org-agenda-write): Fix bug when writing agenda to
an external file while `org-agenda-sticky' is non-nil.
org-confirm-babel-evaluate)))
(code-block (if ,info (format " %s " ,lang) " "))
(block-name (if ,name (format " (%s) " ,name) " ")))
+ ;; Silence byte-compiler is `body' doesn't use those vars.
+ (ignore noeval query)
,@body)))
(defsubst org-babel-check-evaluate (info)
through use of the :var header argument) this marker points to
the outer-most code block.")
+(defvar *this*)
+
;;;###autoload
(defun org-babel-execute-src-block (&optional arg info params)
"Execute the current source code block.
(end-of-line 1) (forward-char 1)
(let ((result (org-babel-read-result)))
(message (replace-regexp-in-string
- "%" "%%" (format "%S" result))) result)))
+ "%" "%%" (format "%S" result)))
+ result)))
((org-babel-confirm-evaluate
(let ((i info)) (setf (nth 2 i) merged-params) i))
(let* ((lang (nth 0 info))
"\n")))
;;;###autoload
-(defun org-babel-expand-src-block (&optional arg info params)
+(defun org-babel-expand-src-block (&optional _arg info params)
"Expand the current source code block.
Expand according to the source code block's header
arguments and pop open the results in a preview buffer."
(let ((results (copy-sequence original)))
(dolist (new-list others)
(dolist (arg-pair new-list)
- (let ((header (car arg-pair))
- (args (cdr arg-pair)))
+ (let ((header (car arg-pair)))
(setq results
(cons arg-pair (org-remove-if
(lambda (pair) (equal header (car pair)))
(add-hook 'org-tab-first-hook 'org-babel-header-arg-expand)
;;;###autoload
-(defun org-babel-load-in-session (&optional arg info)
+(defun org-babel-load-in-session (&optional _arg info)
"Load the body of the current source-code block.
Evaluate the header arguments for the source block before
entering the session. After loading the body this pops open the
(defvar org-src-window-setup)
;;;###autoload
-(defun org-babel-switch-to-session-with-code (&optional arg info)
+(defun org-babel-switch-to-session-with-code (&optional arg _info)
"Switch to code buffer and display session."
(interactive "P")
(let ((swap-windows
(body (match-string 5))
(beg-body (match-beginning 5))
(end-body (match-end 5)))
- ,@body
+ ;; Silence byte-compiler in case `body' doesn't use all
+ ;; those variables.
+ (ignore full-block beg-block end-block lang
+ beg-lang end-lang switches beg-switches
+ end-switches header-args beg-header-args
+ end-header-args body beg-body end-body)
+ ,@body
(goto-char end-block)))))
(unless visited-p (kill-buffer to-be-removed))
(goto-char point))))
(rownames (funcall (lambda ()
(let ((tp table))
(mapcar
- (lambda (row)
+ (lambda (_row)
(prog1
(pop (car tp))
(setq tp (cdr tp))))
org-babel-named-src-block-regexp."
(save-excursion
(let ((case-fold-search t)
- (regexp (org-babel-named-src-block-regexp-for-name name)) msg)
+ (regexp (org-babel-named-src-block-regexp-for-name name)))
(goto-char (point-min))
(when (or (re-search-forward regexp nil t)
(re-search-backward regexp nil t))
(catch 'is-a-code-block
(when (re-search-forward
(concat org-babel-result-regexp
- "[ \t]" (regexp-quote name) "[ \t]*[\n\f\v\r]") nil t)
+ "[ \t]" (regexp-quote name) "[ \t]*[\n\f\v\r]")
+ nil t)
(when (and (string= "name" (downcase (match-string 1)))
(or (beginning-of-line 1)
(looking-at org-babel-src-block-regexp)
`org-edit-src-save'")
(defvar org-edit-src-code-timer nil)
+(defvar org-inhibit-startup)
+
(defun org-edit-src-code (&optional context code edit-buffer-name)
"Edit the source CODE block at point.
The code is copied to a separate buffer and the appropriate mode
;; just one empty line, i.e. beg == end.
(end (copy-marker (make-marker) t))
(allow-write-back-p (null code))
- block-nindent total-nindent ovl lang lang-f single lfmt buffer msg
+ block-nindent total-nindent ovl lang lang-f single buffer msg
begline markline markcol line col transmitted-variables)
(setq beg (move-marker beg (nth 0 info))
end (move-marker end (nth 1 info))
(org-mode-p (derived-mode-p 'org-mode))
(beg (make-marker))
(end (make-marker))
- (preserve-indentation org-src-preserve-indentation)
block-nindent ovl beg1 end1 code begline buffer)
(beginning-of-line 1)
(if (looking-at "[ \t]*[^:\n \t]")
'(font-lock-fontified t fontified t font-lock-multiline t))
(set-buffer-modified-p modified)))))
+(defvar org-src-fontify-natively)
+
(defun org-src-fontify-block ()
"Fontify code block at point."
(interactive)
(+ (if (eq org-ts-what 'hour) n 0) (nth 2 time0))
(+ (if (eq org-ts-what 'day) n 0) (nth 3 time0))
(+ (if (eq org-ts-what 'month) n 0) (nth 4 time0))
- (+ (if (eq org-ts-what 'year) n 0) (nth 5 time0))
- (nthcdr 6 time0)))
+ (+ (if (eq org-ts-what 'year) n 0) (nth 5 time0))))
(when (and (member org-ts-what '(hour minute))
extra
(string-match "-\\([012][0-9]\\):\\([0-5][0-9]\\)" extra))
time-range, if possible.
The optional ZONE is omitted or nil for Emacs local time, t for
-Universal Time, `wall' for system wall clock time, or a string as in
-the TZ environment variable."
+Universal Time, `wall' for system wall clock time, or a string as
+in the TZ environment variable. It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time')
+applied without consideration for daylight saving time."
(format-time-string
format
(apply 'encode-time
(pcomplete-entries))
nil 'identity))))
+;;;###autoload
+
+(defun pcomplete/find ()
+ "Completion for the GNU find utility."
+ (let ((prec (pcomplete-arg 'last -1)))
+ (cond ((and (pcomplete-match "^-" 'last)
+ (string= "find" prec))
+ (pcomplete-opt "HLPDO"))
+ ((pcomplete-match "^-" 'last)
+ (while (pcomplete-here
+ '("-amin" "-anewer" "-atime" "-cmin" "-cnewer" "-context"
+ "-ctime" "-daystart" "-delete" "-depth" "-empty" "-exec"
+ "-execdir" "-executable" "-false" "-fls" "-follow"
+ "-fprint" "-fprint0" "-fprintf" "-fstype" "-gid" "-group"
+ "-help" "-ignore_readdir_race" "-ilname" "-iname"
+ "-inum" "-ipath" "-iregex" "-iwholename"
+ "-links" "-lname" "-ls" "-maxdepth"
+ "-mindepth" "-mmin" "-mount" "-mtime"
+ "-name" "-newer" "-nogroup" "-noignore_readdir_race"
+ "-noleaf" "-nouser" "-nowarn" "-ok"
+ "-okdir" "-path" "-perm" "-print"
+ "-print0" "-printf" "-prune" "-quit"
+ "-readable" "-regex" "-regextype" "-samefile"
+ "-size" "-true" "-type" "-uid"
+ "-used" "-user" "-version" "-warn"
+ "-wholename" "-writable" "-xdev" "-xtype"))))
+ ((string= "-type" prec)
+ (while (pcomplete-here (list "b" "c" "d" "p" "f" "l" "s" "D"))))
+ ((string= "-xtype" prec)
+ (while (pcomplete-here (list "b" "c" "d" "p" "f" "l" "s"))))
+ ((or (string= prec "-exec")
+ (string= prec "-execdir"))
+ (while (pcomplete-here* (funcall pcomplete-command-completion-function)
+ (pcomplete-arg 'last) t))))
+ (while (pcomplete-here (pcomplete-dirs) nil 'identity))))
+
;;;###autoload
(defalias 'pcomplete/gdb 'pcomplete/xargs)
(split-string fortune-program-options)
fortune-program-options) (list fort-file)))))))
+;;;###autoload
+(defun fortune-message (&optional file)
+ "Display a fortune cookie to the mini-buffer.
+If called with a prefix, it has the same behavior as `fortune'.
+Optional FILE is a fortune file from which a cookie will be selected."
+ (interactive (list (if current-prefix-arg
+ (fortune-ask-file)
+ fortune-file)))
+ (with-temp-buffer
+ (let ((fortune-buffer-name (current-buffer)))
+ (fortune-in-buffer t file)
+ (message "%s" (buffer-string)))))
+
;;;###autoload
(defun fortune (&optional file)
"Display a fortune cookie.
(defvar snake-velocity-x 1)
(defvar snake-velocity-y 0)
(defvar snake-positions nil)
-(defvar snake-cycle 0)
(defvar snake-score 0)
(defvar snake-paused nil)
(defvar snake-moved-p nil)
(make-variable-buffer-local 'snake-velocity-x)
(make-variable-buffer-local 'snake-velocity-y)
(make-variable-buffer-local 'snake-positions)
-(make-variable-buffer-local 'snake-cycle)
(make-variable-buffer-local 'snake-score)
(make-variable-buffer-local 'snake-paused)
(make-variable-buffer-local 'snake-moved-p)
snake-velocity-x snake-initial-velocity-x
snake-velocity-y snake-initial-velocity-y
snake-positions nil
- snake-cycle 1
snake-score 0
snake-paused nil
snake-moved-p nil
(cl-incf y snake-velocity-y)))
(snake-update-score))
+(defun snake-set-dot ()
+ (let ((x (random snake-width))
+ (y (random snake-height)))
+ (while (not (= (gamegrid-get-cell x y) snake-blank))
+ (setq x (random snake-width))
+ (setq y (random snake-height)))
+ (gamegrid-set-cell x y snake-dot)))
+
(defun snake-update-game (snake-buffer)
"Called on each clock tick.
Advances the snake one square, testing for collision.
(cond ((= c snake-dot)
(cl-incf snake-length)
(cl-incf snake-score)
- (snake-update-score))
+ (snake-update-score)
+ (snake-set-dot))
(t
(let* ((last-cons (nthcdr (- snake-length 2)
snake-positions))
(tail-pos (cadr last-cons))
(x0 (aref tail-pos 0))
(y0 (aref tail-pos 1)))
- (gamegrid-set-cell x0 y0
- (if (= (% snake-cycle 5) 0)
- snake-dot
- snake-blank))
- (cl-incf snake-cycle)
+ (gamegrid-set-cell x0 y0 snake-blank)
(setcdr last-cons nil))))
(gamegrid-set-cell x y snake-snake)
(setq snake-positions
(cons (vector x y) snake-positions))
- (setq snake-moved-p nil)))))
+ (setq snake-moved-p nil)))))
(defun snake-update-velocity ()
(unless snake-moved-p
"Start a new game of Snake."
(interactive)
(snake-reset-game)
+ (snake-set-dot)
(use-local-map snake-mode-map)
(gamegrid-start-timer snake-tick-period 'snake-update-game))
((listp plstore-encrypt-to) plstore-encrypt-to)
((stringp plstore-encrypt-to) (list plstore-encrypt-to))))
cipher)
- (epg-context-set-armor context t)
+ (setf (epg-context-armor context) t)
(epg-context-set-passphrase-callback
context
(cons #'plstore-passphrase-callback-function
(plstore-mode-original)
(plstore-mode-decoded)))
-(eval-when-compile
- (defmacro plstore-called-interactively-p (kind)
- (condition-case nil
- (progn
- (eval '(called-interactively-p 'any))
- ;; Emacs >=23.2
- `(called-interactively-p ,kind))
- ;; Emacs <23.2
- (wrong-number-of-arguments '(called-interactively-p))
- ;; XEmacs
- (void-function '(interactive-p)))))
-
;;;###autoload
(define-derived-mode plstore-mode emacs-lisp-mode "PLSTORE"
"Major mode for editing PLSTORE files."
(add-hook 'write-contents-functions #'plstore--write-contents-functions)
(define-key plstore-mode-map "\C-c\C-c" #'plstore-mode-toggle-display)
;; to create a new file with plstore-mode, mark it as already decoded
- (if (plstore-called-interactively-p 'any)
+ (if (called-interactively-p 'any)
(setq plstore-encoded t)
(plstore-mode-decoded)))
("KILL" . " (9. Kill - cannot be caught or ignored)")
("ALRM" . " (14. Alarm Clock)")
("TERM" . " (15. Termination)")
- ;; POSIX 1003.1-2001
- ;; Which systems do not support these signals so that we can
- ;; exclude them from `proced-signal-list'?
("CONT" . " (Continue executing)")
("STOP" . " (Stop executing / pause - cannot be caught or ignored)")
("TSTP" . " (Terminal stop / pause)"))
Type \\[proced-toggle-tree] to toggle whether the listing is
displayed as process tree.
+Type \\[proced-toggle-auto-update] to automatically update the
+process list. The time interval for updates can be configured
+via `proced-auto-update-interval'.
+
An existing Proced listing can be refined by typing \\[proced-refine].
Refining an existing listing does not update the variable `proced-filter'.
(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)))
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
;; two newlines with horizontal whitespace between them.
;;
;; The reason to include the first following char is to cope with
-;; "rung positions" that doesn't have any ordinary whitespace. If
+;; "rung positions" that don't have any ordinary whitespace. If
;; `c-is-sws' is put on a token character it does not have
;; `c-in-sws' set simultaneously. That's the only case when that
;; can occur, and the reason for not extending the `c-in-sws'
;; if it's anything that can't start syntactic ws, so we can bail out
;; early in the majority of cases when there just are a few ws chars.
(skip-chars-forward " \t\n\r\f\v")
- (when (looking-at c-syntactic-ws-start)
+ (when (or (looking-at c-syntactic-ws-start)
+ (and c-opt-cpp-prefix
+ (looking-at c-noise-macro-name-re)))
(setq rung-end-pos (min (1+ (point)) (point-max)))
(if (setq rung-is-marked (text-property-any rung-pos rung-end-pos
(with-silent-modifications
(while
(progn
+ ;; In the following while form, we move over a "ladder" and
+ ;; following simple WS each time round the loop, appending the WS
+ ;; onto the ladder, joining adjacent ladders, and terminating when
+ ;; there is no more WS or we reach EOB.
(while
(when (and rung-is-marked
(get-text-property (point) 'c-in-sws))
(setq rung-pos (point)
last-put-in-sws-pos rung-pos)))
+ ;; Now move over any comments (x)or a CPP construct.
(setq simple-ws-end (point))
(c-forward-comments)
(forward-line 1)
(setq safe-start t)
;; Don't cache at eob in case the buffer is narrowed.
+ (not (eobp)))
+
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-name-re))
+ ;; Skip over a noise macro.
+ (goto-char (match-end 1))
+ (setq safe-start t)
(not (eobp)))))
;; We've searched over a piece of non-white syntactic ws. See if this
(when (and (not (bobp))
(save-excursion
(backward-char)
- (looking-at c-syntactic-ws-end)))
-
+ (or (looking-at c-syntactic-ws-end)
+ (and c-opt-cpp-prefix
+ (looking-at c-symbol-char-key)
+ (progn (c-beginning-of-current-token)
+ (looking-at c-noise-macro-name-re))))))
;; Try to find a rung position in the simple ws preceding point, so that
;; we can get a cache hit even if the last bit of the simple ws has
;; changed recently.
(with-silent-modifications
(while
(progn
+ ;; Each time round the next while form, we move back over a ladder
+ ;; and append any simple WS preceding it, if possible joining with
+ ;; the previous ladder.
(while
(when (and rung-is-marked
(not (bobp))
;; narrowed out, and we can't risk marking the simple ws
;; at the end of it.
(goto-char next-rung-pos)
+ t)
+
+ ((and c-opt-cpp-prefix
+ (save-excursion
+ (and (< (skip-syntax-backward "w_") 0)
+ (progn (setq next-rung-pos (point))
+ (looking-at c-noise-macro-name-re)))))
+ ;; Skipped over a noise macro
+ (goto-char next-rung-pos)
t)))
;; We've searched over a piece of non-white syntactic ws. See if this
`(c-forward-type)
`(c-forward-name)))
nil
- (and (looking-at c-keywords-regexp)
- (c-forward-keyword-clause 1))))
+ (cond ((looking-at c-keywords-regexp)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause)))))
(when (memq res '(t known found prefix maybe))
(when c-record-type-identifiers
- ,(if (eq type 'type)
- `(c-record-type-id c-last-identifier-range)
- `(c-record-ref-id c-last-identifier-range)))
+ ,(if (eq type 'type)
+ `(c-record-type-id c-last-identifier-range)
+ `(c-record-ref-id c-last-identifier-range)))
t)))
(defmacro c-forward-id-comma-list (type update-safe-pos)
(c-forward-syntactic-ws)
(c-forward-keyword-prefixed-id ,type)))))
+(defun c-forward-noise-clause ()
+ ;; Point is at a c-noise-macro-with-parens-names macro identifier. Go
+ ;; forward over this name, any parenthesis expression which follows it, and
+ ;; any syntactic WS, ending up at the next token. If there is an unbalanced
+ ;; paren expression, leave point at it. Always Return t.
+ (c-forward-token-2)
+ (if (and (eq (char-after) ?\()
+ (c-go-list-forward))
+ (c-forward-syntactic-ws))
+ t)
+
(defun c-forward-keyword-clause (match)
;; Submatch MATCH in the current match data is assumed to surround a
;; token. If it's a keyword, move over it and any immediately
;; `nconc' doesn't mind that the tail of
;; `c-record-found-types' is t.
(nconc c-record-found-types c-record-type-identifiers)))
- (if (c-major-mode-is 'java-mode) (c-fontify-recorded-types-and-refs))
t)
(goto-char start)
(progn
(c-forward-syntactic-ws)
(when (or (and c-record-type-identifiers all-types)
- (c-major-mode-is 'java-mode))
- ;; All encountered identifiers are types, so set the
- ;; promote flag and parse the type.
- (progn
- (c-forward-syntactic-ws)
- (if (looking-at "\\?")
- (forward-char)
- (when (looking-at c-identifier-start)
+ (not (equal c-inside-<>-type-key "\\(\\<\\>\\)")))
+ (c-forward-syntactic-ws)
+ (cond
+ ((eq (char-after) ??)
+ (forward-char))
+ ((and (looking-at c-identifier-start)
+ (not (looking-at c-keywords-regexp)))
+ (if (or (and all-types c-record-type-identifiers)
+ (c-major-mode-is 'java-mode))
+ ;; All encountered identifiers are types, so set the
+ ;; promote flag and parse the type.
(let ((c-promote-possible-types t)
(c-record-found-types t))
- (c-forward-type))))
+ (c-forward-type))
+ (c-forward-token-2))))
- (c-forward-syntactic-ws)
+ (c-forward-syntactic-ws)
- (when (or (looking-at "extends")
- (looking-at "super"))
- (forward-word-strictly)
- (c-forward-syntactic-ws)
- (let ((c-promote-possible-types t)
- (c-record-found-types t))
- (c-forward-type)
- (c-forward-syntactic-ws)))))
+ (when (looking-at c-inside-<>-type-key)
+ (goto-char (match-end 1))
+ (c-forward-syntactic-ws)
+ (let ((c-promote-possible-types t)
+ (c-record-found-types t))
+ (c-forward-type))
+ (c-forward-syntactic-ws)))
(setq pos (point)) ; e.g. first token inside the '<'
((and c-recognize-<>-arglists
(eq (char-after) ?<))
;; Maybe an angle bracket arglist.
- (when (let ((c-record-type-identifiers t)
- (c-record-found-types t)
- (c-last-identifier-range))
+ (when (let (c-last-identifier-range)
(c-forward-<>-arglist nil))
(c-forward-syntactic-ws)
; "typedef".
(goto-char (match-end 1))
(c-forward-syntactic-ws)
+
+ (while (cond
+ ((looking-at c-decl-hangon-key)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))))
+
(setq pos (point))
(setq name-res (c-forward-name))
;; of the while. These are, e.g. "*" in "int *foo" or "(" and
;; "*" in "int (*foo) (void)" (Note similar code in
;; `c-forward-decl-or-cast-1'.)
- (while (and (looking-at c-type-decl-prefix-key)
- (if (and (c-major-mode-is 'c++-mode)
- (match-beginning 3))
- ;; If the third submatch matches in C++ then
- ;; we're looking at an identifier that's a
- ;; prefix only if it specifies a member pointer.
- (progn
- (setq id-start (point))
- (c-forward-name)
- (if (looking-at "\\(::\\)")
- ;; We only check for a trailing "::" and
- ;; let the "*" that should follow be
- ;; matched in the next round.
- t
- ;; It turned out to be the real identifier,
- ;; so flag that and stop.
- (setq got-identifier t)
- nil))
- t))
- (if (eq (char-after) ?\()
- (progn
- (setq paren-depth (1+ paren-depth))
- (forward-char))
- (goto-char (match-end 1)))
- (c-forward-syntactic-ws))
+ (while
+ (cond
+ ((looking-at c-decl-hangon-key)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))
+ ((and (looking-at c-type-decl-prefix-key)
+ (if (and (c-major-mode-is 'c++-mode)
+ (match-beginning 3))
+ ;; If the third submatch matches in C++ then
+ ;; we're looking at an identifier that's a
+ ;; prefix only if it specifies a member pointer.
+ (progn
+ (setq id-start (point))
+ (c-forward-name)
+ (if (looking-at "\\(::\\)")
+ ;; We only check for a trailing "::" and
+ ;; let the "*" that should follow be
+ ;; matched in the next round.
+ t
+ ;; It turned out to be the real identifier,
+ ;; so flag that and stop.
+ (setq got-identifier t)
+ nil))
+ t))
+ (if (eq (char-after) ?\()
+ (progn
+ (setq paren-depth (1+ paren-depth))
+ (forward-char))
+ (goto-char (match-end 1)))
+ (c-forward-syntactic-ws)
+ t)))
;; If we haven't passed the identifier already, do it now.
(unless got-identifier
;; Skip over any trailing bit, such as "__attribute__".
(progn
- (when (looking-at c-decl-hangon-key)
- (c-forward-keyword-clause 1))
- (<= (point) limit))
+ (while (cond
+ ((looking-at c-decl-hangon-key)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))))
+ (<= (point) limit))
;; Search syntactically to the end of the declarator (";",
;; ",", a closing paren, eob etc) or to the beginning of an
cast-end
;; Have we got a new-style C++11 "auto"?
new-style-auto
+ ;; Set when the symbol before `preceding-token-end' is known to
+ ;; terminate the previous construct, or when we're at point-min.
+ at-decl-start
;; Save `c-record-type-identifiers' and
;; `c-record-ref-identifiers' since ranges are recorded
;; speculatively and should be thrown away if it turns out
(save-rec-type-ids c-record-type-identifiers)
(save-rec-ref-ids c-record-ref-identifiers))
+ (save-excursion
+ (goto-char preceding-token-end)
+ (setq at-decl-start
+ (or (bobp)
+ (let ((tok-end (point)))
+ (c-backward-token-2)
+ (member (buffer-substring-no-properties (point) tok-end)
+ c-pre-start-tokens)))))
+
(while (c-forward-annotation)
(c-forward-syntactic-ws))
;; macros like __INLINE__, so we recognize both types and known
;; specifiers after them too.
(while
- (let* ((start (point)) kwd-sym kwd-clause-end found-type)
+ (let* ((start (point)) kwd-sym kwd-clause-end found-type noise-start)
+ (cond
;; Look for a specifier keyword clause.
- (when (or (looking-at c-prefix-spec-kwds-re) ;FIXME!!! includes auto
- (and (c-major-mode-is 'java-mode)
- (looking-at "@[A-Za-z0-9]+")))
- (if (save-match-data (looking-at c-typedef-key))
- (setq at-typedef t))
+ ((or (looking-at c-prefix-spec-kwds-re)
+ (and (c-major-mode-is 'java-mode)
+ (looking-at "@[A-Za-z0-9]+")))
+ (save-match-data
+ (if (looking-at c-typedef-key)
+ (setq at-typedef t)))
(setq kwd-sym (c-keyword-sym (match-string 1)))
(save-excursion
(c-forward-keyword-clause 1)
(setq kwd-clause-end (point))))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (setq noise-start (point))
+ (c-forward-noise-clause)
+ (setq kwd-clause-end (point))))
(when (setq found-type (c-forward-type t)) ; brace-block-too
;; Found a known or possible type or a prefix of a known type.
backup-at-type-decl nil
backup-maybe-typeless nil))
- (if kwd-sym
+ (if (or kwd-sym noise-start)
(progn
;; Handle known specifier keywords and
;; `c-decl-hangon-kwds' which can occur after known
;; types.
- (if (c-keyword-member kwd-sym 'c-decl-hangon-kwds)
- ;; It's a hang-on keyword that can occur anywhere.
+ (if (or (c-keyword-member kwd-sym 'c-decl-hangon-kwds)
+ noise-start)
+ ;; It's a hang-on keyword or noise clause that can occur
+ ;; anywhere.
(progn
- (setq at-decl-or-cast t)
(if at-type
;; Move the identifier start position if
;; we've passed a type.
;; If a known type was found, we still need to skip over any
;; hangon keyword clauses after it. Otherwise it has already
;; been done in the loop above.
- (while (looking-at c-decl-hangon-key)
- (c-forward-keyword-clause 1))
+ (while
+ (cond ((looking-at c-decl-hangon-key)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))))
(setq id-start (point)))
((eq at-type 'prefix)
(setq got-identifier (c-forward-name))
(setq name-start pos)))
- ;; Skip over type decl suffix operators.
- (while (if (looking-at c-type-decl-suffix-key)
+ ;; Skip over type decl suffix operators and trailing noise macros.
+ (while
+ (cond
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))
+
+ ((looking-at c-type-decl-suffix-key)
+ (if (eq (char-after) ?\))
+ (when (> paren-depth 0)
+ (setq paren-depth (1- paren-depth))
+ (forward-char)
+ t)
+ (when (if (save-match-data (looking-at "\\s("))
+ (c-safe (c-forward-sexp 1) t)
+ (goto-char (match-end 1))
+ t)
+ (when (and (not got-suffix-after-parens)
+ (= paren-depth 0))
+ (setq got-suffix-after-parens (match-beginning 0)))
+ (setq got-suffix t))))
- (if (eq (char-after) ?\))
- (when (> paren-depth 0)
- (setq paren-depth (1- paren-depth))
- (forward-char)
- t)
- (when (if (save-match-data (looking-at "\\s("))
- (c-safe (c-forward-sexp 1) t)
- (goto-char (match-end 1))
- t)
- (when (and (not got-suffix-after-parens)
- (= paren-depth 0))
- (setq got-suffix-after-parens (match-beginning 0)))
- (setq got-suffix t)))
-
- ;; No suffix matched. We might have matched the
- ;; identifier as a type and the open paren of a
- ;; function arglist as a type decl prefix. In that
- ;; case we should "backtrack": Reinterpret the last
- ;; type as the identifier, move out of the arglist and
- ;; continue searching for suffix operators.
- ;;
- ;; Do this even if there's no preceding type, to cope
- ;; with old style function declarations in K&R C,
- ;; (con|de)structors in C++ and `c-typeless-decl-kwds'
- ;; style declarations. That isn't applicable in an
- ;; arglist context, though.
- (when (and (= paren-depth 1)
+ (t
+ ;; No suffix matched. We might have matched the
+ ;; identifier as a type and the open paren of a
+ ;; function arglist as a type decl prefix. In that
+ ;; case we should "backtrack": Reinterpret the last
+ ;; type as the identifier, move out of the arglist and
+ ;; continue searching for suffix operators.
+ ;;
+ ;; Do this even if there's no preceding type, to cope
+ ;; with old style function declarations in K&R C,
+ ;; (con|de)structors in C++ and `c-typeless-decl-kwds'
+ ;; style declarations. That isn't applicable in an
+ ;; arglist context, though.
+ (when (and (= paren-depth 1)
(not got-prefix-before-parens)
(not (eq at-type t))
(or backup-at-type
(eq (char-before pos) ?\)))
(c-fdoc-shift-type-backward)
(goto-char pos)
- t))
+ t)))
(c-forward-syntactic-ws))
at-type
(or at-decl-end (looking-at "=[^=]"))
(not context)
- (not got-suffix))
- ;; Got something like "foo * bar;". Since we're not inside an
- ;; arglist it would be a meaningless expression because the
- ;; result isn't used. We therefore choose to recognize it as
- ;; a declaration. Do not allow a suffix since it could then
- ;; be a function call.
+ (or (not got-suffix)
+ at-decl-start))
+ ;; Got something like "foo * bar;". Since we're not inside
+ ;; an arglist it would be a meaningless expression because
+ ;; the result isn't used. We therefore choose to recognize
+ ;; it as a declaration. We only allow a suffix (which makes
+ ;; the construct look like a function call) when
+ ;; `at-decl-start' provides additional evidence that we do
+ ;; have a declaration.
(throw 'at-decl-or-cast t))
;; CASE 17
t)
((looking-at c-after-brace-list-key) t)
((looking-at c-brace-list-key) nil)
+ ((eq (char-after) ?\()
+ (and (eq (c-backward-token-2) 0)
+ (or (looking-at c-decl-hangon-key)
+ (and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re)))))
+
((and c-recognize-<>-arglists
(eq (char-after) ?<)
(looking-at "\\s("))
;; CASE 5A.3: brace list open
((save-excursion
(c-beginning-of-decl-1 lim)
- (while (looking-at c-specifier-key)
- (goto-char (match-end 1))
- (c-forward-syntactic-ws indent-point))
+ (while (cond
+ ((looking-at c-specifier-key)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))))
(setq placeholder (c-point 'boi))
(or (consp special-brace-list)
(and (or (save-excursion
(t
(save-excursion
(c-beginning-of-decl-1 lim)
- (while (looking-at c-specifier-key)
- (goto-char (match-end 1))
- (c-forward-syntactic-ws indent-point))
+ (while (cond
+ ((looking-at c-specifier-key)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))))
(c-add-syntax 'defun-open (c-point 'boi))
;; Bogus to use bol here, but it's the legacy. (Resolved,
;; 2007-11-09)
(c-beginning-of-statement-1
(c-safe-position (1- containing-sexp) paren-state))
(c-forward-token-2 0)
- (while (looking-at c-specifier-key)
- (goto-char (match-end 1))
- (c-forward-syntactic-ws))
+ (while (cond
+ ((looking-at c-specifier-key)
+ (c-forward-keyword-clause 1))
+ ((and c-opt-cpp-prefix
+ (looking-at c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause))))
(c-add-syntax 'brace-list-open (c-point 'boi))))
;; CASE 9B: brace-list-close brace
'font-lock-keyword-face)
(looking-at c-not-decl-init-keywords))
(and c-macro-with-semi-re
- (looking-at c-macro-with-semi-re))) ; 2008-11-04
- ;; Don't do anything more if we're looking at a keyword that
+ (looking-at c-macro-with-semi-re)) ; 2008-11-04
+ (save-excursion ; A construct after a ; in a `for' statement
+ ; can't be a declaration.
+ (and (c-go-up-list-backward)
+ (eq (char-after) ?\()
+ (progn (c-backward-syntactic-ws)
+ (c-simple-skip-symbol-backward))
+ (looking-at c-paren-stmt-key)
+ (progn (goto-char match-pos)
+ (while (and (eq (char-before) ?\))
+ (c-go-list-backward))
+ (c-backward-syntactic-ws))
+ (eq (char-before) ?\;)))))
+ ;; Don't do anything more if we're looking at something that
;; can't start a declaration.
t
(unless (c-skip-comments-and-strings limit)
(c-forward-syntactic-ws)
;; Handle prefix declaration specifiers.
- (when (or (looking-at c-prefix-spec-kwds-re)
- (and (c-major-mode-is 'java-mode)
- (looking-at "@[A-Za-z0-9]+")))
- (c-forward-keyword-clause 1))
+ (while
+ (or
+ (when (or (looking-at c-prefix-spec-kwds-re)
+ (and (c-major-mode-is 'java-mode)
+ (looking-at "@[A-Za-z0-9]+")))
+ (c-forward-keyword-clause 1)
+ t)
+ (when (and c-opt-cpp-prefix
+ (looking-at
+ c-noise-macro-with-parens-name-re))
+ (c-forward-noise-clause)
+ t)))
,(if (c-major-mode-is 'c++-mode)
`(when (and (c-forward-type)
(eq (char-after) ?=))
"\\)\\>"
;; Disallow various common punctuation chars that can't come
;; before the '{' of the enum list, to avoid searching too far.
- "[^][{}();/#=]*"
+ "[^][{};/#=]*"
"{")
'((c-font-lock-declarators limit t nil)
(save-match-data
objc (concat c-alnum "_$@"))
(c-lang-defvar c-symbol-chars (c-lang-const c-symbol-chars))
+(c-lang-defconst c-symbol-char-key
+ "Regexp matching a sequence of at least one identifier character."
+ t (concat "[" (c-lang-const c-symbol-chars) "]+"))
+(c-lang-defvar c-symbol-char-key (c-lang-const c-symbol-char-key))
+
(c-lang-defconst c-symbol-key
"Regexp matching identifiers and keywords (with submatch 0). Assumed
to match if `c-symbol-start' matches on the same position."
(c-lang-defconst c-haskell-op-re
t (c-make-keywords-re nil (c-lang-const c-haskell-op)))
(c-lang-defvar c-haskell-op-re (c-lang-const c-haskell-op-re))
+
+(c-lang-defconst c-pre-start-tokens
+ "List of operators following which an apparent declaration \(e.g.
+\"t1 *fn (t2 *b);\") is most likely to be an actual declaration
+\(as opposed to an arithmetic expression)."
+ t '(";" "{" "}"))
+(c-lang-defvar c-pre-start-tokens (c-lang-const c-pre-start-tokens))
+
\f
;;; Syntactic whitespace.
t (c-make-keywords-re t (c-lang-const c-<>-sexp-kwds)))
(c-lang-defvar c-opt-<>-sexp-key (c-lang-const c-opt-<>-sexp-key))
+(c-lang-defconst c-inside-<>-type-kwds
+ "Keywords which, used inside a C++ style template arglist, introduce a type."
+ t nil
+ java '("extends" "super"))
+
+(c-lang-defconst c-inside-<>-type-key
+ t (c-make-keywords-re t (c-lang-const c-inside-<>-type-kwds)))
+(c-lang-defvar c-inside-<>-type-key (c-lang-const c-inside-<>-type-key))
+
(c-lang-defconst c-brace-id-list-kwds
"Keywords that may be followed by a brace block containing a comma
separated list of identifier definitions, i.e. like the list of
(c-lang-defconst c-special-brace-lists
"List of open- and close-chars that makes up a pike-style brace list,
-i.e. for a ([ ]) list there should be a cons (?\\[ . ?\\]) in this
+i.e., for a ([ ]) list there should be a cons (?\\[ . ?\\]) in this
list."
t nil
pike '((?{ . ?}) (?\[ . ?\]) (?< . ?>)))
;; derived-mode-ex.el>.
(defun c-leave-cc-mode-mode ()
- (setq c-buffer-is-cc-mode nil))
+ (when c-buffer-is-cc-mode
+ (save-restriction
+ (widen)
+ (c-save-buffer-state ()
+ (c-clear-char-properties (point-min) (point-max) 'category)
+ (c-clear-char-properties (point-min) (point-max) 'syntax-table)
+ (c-clear-char-properties (point-min) (point-max) 'c-is-sws)
+ (c-clear-char-properties (point-min) (point-max) 'c-in-sws)
+ (c-clear-char-properties (point-min) (point-max) 'c-type)
+ (if (c-major-mode-is 'awk-mode)
+ (c-clear-char-properties (point-min) (point-max) 'c-awk-NL-prop))))
+ (setq c-buffer-is-cc-mode nil)))
(defun c-init-language-vars-for (mode)
"Initialize the language variables for one of the language modes
(not (string-equal c-indentation-style
style)))))))
(c-setup-paragraph-variables)
+ (c-make-noise-macro-regexps)
;; we have to do something special for c-offsets-alist so that the
;; buffer local value has its own alist structure.
(funcall fn (point-min) (point-max)))
c-get-state-before-change-functions)
(mapc (lambda (fn)
- (if (not (eq fn 'c-restore-<>-properties))
- (funcall fn (point-min) (point-max)
- (- (point-max) (point-min)))))
+ (funcall fn (point-min) (point-max)
+ (- (point-max) (point-min))))
c-before-font-lock-functions))))
(set (make-local-variable 'outline-regexp) "[^#\n\^M]")
:type 'c-extra-types-widget
:group 'c)
+(defvar c-noise-macro-with-parens-name-re "\\<\\>")
+(defvar c-noise-macro-name-re "\\<\\>")
+
+(defcustom c-noise-macro-names nil
+ "A list of names of macros which expand to nothing, or compiler extensions
+like \"????\" which are syntactic noise. Such a macro/extension is complete in
+itself, never having parentheses. All these names must be syntactically valid
+identifiers.
+
+If you change this variable's value, call the function
+`c-make-noise-macro-regexps' to set the necessary internal variables (or do
+this implicitly by reinitializing C/C++/Objc Mode on any buffer)."
+ :type '(repeat :tag "List of names" string)
+ :group 'c)
+
+(defcustom c-noise-macro-with-parens-names nil
+ "A list of names of macros \(or compiler extensions like \"__attribute__\")
+which optionally have arguments in parentheses, and which expand to nothing.
+These are recognized by CC Mode only in declarations."
+ :type '(regexp :tag "List of names (possibly empty)" string)
+ :group 'c)
+
+(defun c-make-noise-macro-regexps ()
+ ;; Convert `c-noise-macro-names' and `c-noise-macro-with-parens-names' into
+ ;; `c-noise-macro-name-re' and `c-noise-macro-with-parens-name-re'.
+ (setq c-noise-macro-with-parens-name-re
+ (cond ((null c-noise-macro-with-parens-names) "\\<\\>")
+ ((consp c-noise-macro-with-parens-names)
+ (concat (regexp-opt c-noise-macro-with-parens-names t)
+ "\\([^[:alnum:]_$]\\|$\\)"))
+ ((stringp c-noise-macro-with-parens-names)
+ (copy-sequence c-noise-macro-with-parens-names))
+ (t (error "c-make-noise-macro-regexps: \
+c-noise-macro-with-parens-names is invalid: %s" c-noise-macro-with-parens-names))))
+ (setq c-noise-macro-name-re
+ (cond ((null c-noise-macro-names) "\\<\\>")
+ ((consp c-noise-macro-names)
+ (concat (regexp-opt c-noise-macro-names t)
+ "\\([^[:alnum:]_$]\\|$\\)"))
+ ((stringp c-noise-macro-names)
+ (copy-sequence c-noise-macro-names))
+ (t (error "c-make-noise-macro-regexps: \
+c-noise-macro-names is invalid: %s" c-noise-macro-names)))))
\f
;; Non-customizable variables, still part of the interface to CC Mode
(defvar c-macro-with-semi-re nil
\\(?: characters? \\([0-9]+\\)-?\\([0-9]+\\)?:\\)?\\([ \n]Warning\\(?: [0-9]+\\)?:\\)?\\)"
2 (3 . 4) (5 . 6) (7))
+ (cmake
+ "^CMake \\(?:Error\\|\\(Warning\\)\\) at \\(.*\\):\\([1-9][0-9]*\\) ([^)]+):$"
+ 2 3 nil (1))
+ (cmake-info
+ "^ \\(?: \\*\\)?\\(.*\\):\\([1-9][0-9]*\\) ([^)]+)$"
+ 1 2 nil 0)
+
(comma
"^\"\\([^,\" \n\t]+\\)\", line \\([0-9]+\\)\
\\(?:[(. pos]+\\([0-9]+\\))?\\)?[:.,; (-]\\( warning:\\|[-0-9 ]*(W)\\)?" 1 2 3 (4))
;; Font-locking support.
(defun elisp--font-lock-flush-elisp-buffers (&optional file)
- ;; FIXME: Aren't we only ever called from after-load-functions?
- ;; Don't flush during load unless called from after-load-functions.
- ;; In that case, FILE is non-nil. It's somehow strange that
- ;; load-in-progress is t when an after-load-function is called since
- ;; that should run *after* the load...
+ ;; We're only ever called from after-load-functions, load-in-progress can
+ ;; still be t in case of nested loads.
(when (or (not load-in-progress) file)
;; FIXME: If the loaded file did not define any macros, there shouldn't
;; be any need to font-lock-flush all the Elisp buffers.
((or (eq (following-char) ?\')
(eq (preceding-char) ?\'))
(setq left-quote ?\`)))
+
+ ;; When after a named character literal, skip over the entire
+ ;; literal, not only its last word.
+ (when (= (preceding-char) ?})
+ (let ((begin (save-excursion
+ (backward-char)
+ (skip-syntax-backward "w-")
+ (backward-char 3)
+ (when (looking-at-p "\\\\N{") (point)))))
+ (when begin (goto-char begin))))
+
(forward-sexp -1)
;; If we were after `?\e' (or similar case),
;; use the whole thing, not just the `e'.
(const :tag "No ignored files" nil))
:group 'grep)
+(defcustom grep-save-buffers 'ask
+ "If non-nil, save buffers before running the grep commands.
+If `ask', ask before saving. If a function, call it with no arguments
+with each buffer current, as a predicate to determine whether that
+buffer should be saved or not. E.g., one can set this to
+ (lambda ()
+ (string-prefix-p my-grep-root (file-truename (buffer-file-name))))
+to limit saving to files located under `my-grep-root'."
+ :version "25.2"
+ :type '(choice
+ (const :tag "Ask before saving" ask)
+ (const :tag "Don't save buffers" nil)
+ function
+ (other :tag "Save all buffers" t))
+ :group 'grep)
+
(defcustom grep-error-screen-columns nil
"If non-nil, column numbers in grep hits are screen columns.
See `compilation-error-screen-columns'"
grep-error-screen-columns)
(add-hook 'compilation-filter-hook 'grep-filter nil t))
+(defun grep--save-buffers ()
+ (when grep-save-buffers
+ (save-some-buffers (and (not (eq grep-save-buffers 'ask))
+ (not (functionp grep-save-buffers)))
+ (and (functionp grep-save-buffers)
+ grep-save-buffers))))
;;;###autoload
(defun grep (command-args)
'grep-history
(if current-prefix-arg nil default))))))
+ (grep--save-buffers)
;; Setting process-setup-function makes exit-message-function work
;; even when async processes aren't supported.
(compilation-start (if (and grep-use-null-device null-device)
(let ((default-directory dir))
;; Setting process-setup-function makes exit-message-function work
;; even when async processes aren't supported.
+ (grep--save-buffers)
(compilation-start (if (and grep-use-null-device null-device)
(concat command " " null-device)
command)
(read-from-minibuffer "Confirm: "
command nil nil 'grep-find-history))
(add-to-history 'grep-find-history command))
+ (grep--save-buffers)
(let ((default-directory dir))
(compilation-start command 'grep-mode))
;; Set default-directory if we started rgrep in the *grep* buffer.
;; correct line number, but life's too short.
;; d.love@dl.ac.uk (Dave Love) can be blamed for this
-(defvar gud-irix-p
- (and (string-match "^mips-[^-]*-irix" system-configuration)
- (not (string-match "irix[6-9]\\.[1-9]" system-configuration)))
+(defvar gud-irix-p nil
"Non-nil to assume the interface appropriate for IRIX dbx.
This works in IRIX 4, 5 and 6, but `gud-dbx-use-stopformat-p' provides
a better solution in 6.1 upwards.")
-(defvar gud-dbx-use-stopformat-p
- (string-match "irix[6-9]\\.[1-9]" system-configuration)
+(defvar gud-dbx-use-stopformat-p nil
"Non-nil to use the dbx feature present at least from Irix 6.1
whereby $stopformat=1 produces an output format compatible with
`gud-dbx-marker-filter'.")
-;; [Irix dbx seems to be a moving target. The dbx output changed
+;; [Irix dbx seemed to be a moving target. The dbx output changed
;; subtly sometime between OS v4.0.5 and v5.2 so that, for instance,
;; the output from `up' is no longer spotted by gud (and it's probably
;; not distinctive enough to try to match it -- use C-<, C->
;; exclusively) . For 5.3 and 6.0, the $curline variable changed to
;; `long long'(why?!), so the printf stuff needed changing. The line
;; number was cast to `long' as a compromise between the new `long
-;; long' and the original `int'. This is reported not to work in 6.2,
+;; long' and the original `int'. This was reported not to work in 6.2,
;; so it's changed back to int -- don't make your sources too long.
-;; From Irix6.1 (but not 6.0?) dbx supports an undocumented feature
+;; From Irix6.1 (but not 6.0?) dbx supported an undocumented feature
;; whereby `set $stopformat=1' reportedly produces output compatible
;; with `gud-dbx-marker-filter', which we prefer.
;; The process filter is also somewhat
;; unreliable, sometimes not spotting the markers; I don't know
-;; whether there's anything that can be done about that. It would be
-;; much better if SGI could be persuaded to (re?)instate the MIPS
-;; -emacs flag for gdb-like output (which ought to be possible as most
-;; of the communication I've had over it has been from sgi.com).]
+;; whether there's anything that can be done about that.]
;; this filter is influenced by the xdb one rather than the gdb one
(defun gud-irixdbx-marker-filter (string)
(define-key map "\C-c@\C-\M-s" 'hs-show-all)
(define-key map "\C-c@\C-l" 'hs-hide-level)
(define-key map "\C-c@\C-c" 'hs-toggle-hiding)
+ (define-key map "\C-c@\C-a" 'hs-show-all)
+ (define-key map "\C-c@\C-t" 'hs-hide-all)
+ (define-key map "\C-c@\C-d" 'hs-hide-block)
+ (define-key map "\C-c@\C-e" 'hs-toggle-hiding)
(define-key map [(shift mouse-2)] 'hs-mouse-toggle-hiding)
map)
"Keymap for hideshow minor mode.")
(eval-when-compile (append "=({[,:;" '(nil))))))
(put-text-property (match-beginning 1) (match-end 1)
'syntax-table (string-to-syntax "\"/"))
- (js-syntax-propertize-regexp end))))))
+ (js-syntax-propertize-regexp end)))))
+ ("\\`\\(#\\)!" (1 "< b")))
(point) end))
(defconst js--prettify-symbols-alist
"Fill the paragraph with `c-fill-paragraph'."
(interactive "*P")
(let ((js--filling-paragraph t)
- (fill-paragraph-function 'c-fill-paragraph))
+ (fill-paragraph-function #'c-fill-paragraph))
(c-fill-paragraph justify)))
;;; Type database and Imenu
(unwind-protect
+ ;; FIXME: Don't impose IDO on the user.
(setq selected-tab-cname
(let ((ido-minibuffer-setup-hook
(cons #'setup-hook ido-minibuffer-setup-hook)))
(define-derived-mode js-mode prog-mode "JavaScript"
"Major mode for editing JavaScript."
:group 'js
- (setq-local indent-line-function 'js-indent-line)
- (setq-local beginning-of-defun-function 'js-beginning-of-defun)
- (setq-local end-of-defun-function 'js-end-of-defun)
+ (setq-local indent-line-function #'js-indent-line)
+ (setq-local beginning-of-defun-function #'js-beginning-of-defun)
+ (setq-local end-of-defun-function #'js-end-of-defun)
(setq-local open-paren-in-column-0-is-defun-start nil)
- (setq-local font-lock-defaults (list js--font-lock-keywords))
+ (setq-local font-lock-defaults '(js--font-lock-keywords))
(setq-local syntax-propertize-function #'js-syntax-propertize)
(setq-local prettify-symbols-alist js--prettify-symbols-alist)
;; Comments
(setq-local comment-start "// ")
(setq-local comment-end "")
- (setq-local fill-paragraph-function 'js-c-fill-paragraph)
+ (setq-local fill-paragraph-function #'js-c-fill-paragraph)
;; Parse cache
(add-hook 'before-change-functions #'js--flush-caches t t)
map)
"Keymap used for programming modes.")
+(defvar prog-indentation-context nil
+ "When non-nil, provides context for indenting embedded code chunks.
+
+There are languages where part of the code is actually written in
+a sub language, e.g., a Yacc/Bison or ANTLR grammar also consists
+of plain C code. This variable enables the major mode of the
+main language to use the indentation engine of the sub-mode for
+lines in code chunks written in the sub-mode's language.
+
+When a major mode of such a main language decides to delegate the
+indentation of a line/region to the indentation engine of the sub
+mode, it should bind this variable to non-nil around the call.
+
+The non-nil value should be a list of the form:
+
+ (FIRST-COLUMN (START . END) PREVIOUS-CHUNKS)
+
+FIRST-COLUMN is the column the indentation engine of the sub-mode
+should use for top-level language constructs inside the code
+chunk (instead of 0).
+
+START and END specify the region of the code chunk. END can be
+nil, which stands for the value of `point-max'. The function
+`prog-widen' uses this to restore restrictions imposed by the
+sub-mode's indentation engine.
+
+PREVIOUS-CHUNKS, if non-nil, provides the indentation engine of
+the sub-mode with the virtual context of the code chunk. Valid
+values are:
+
+ - A string containing text which the indentation engine can
+ consider as standing in front of the code chunk. To cache the
+ string's calculated syntactic information for repeated calls
+ with the same string, the sub-mode can add text-properties to
+ the string.
+
+ A typical use case is for grammars with code chunks which are
+ to be indented like function bodies -- the string would contain
+ the corresponding function preamble.
+
+ - A function, to be called with the start position of the current
+ chunk. It should return either the region of the previous chunk
+ as (PREV-START . PREV-END), or nil if there is no previous chunk.
+
+ A typical use case are literate programming sources -- the
+ function would successively return the previous code chunks.")
+
(defun prog-indent-sexp (&optional defun)
"Indent the expression after point.
When interactively called with prefix, indent the enclosing defun
(end (progn (forward-sexp 1) (point))))
(indent-region start end nil))))
+(defun prog-first-column ()
+ "Return the indentation column normally used for top-level constructs."
+ (or (car prog-indentation-context) 0))
+
+(defun prog-widen ()
+ "Remove restrictions (narrowing) from current code chunk or buffer.
+This function should be used instead of `widen' in any function used
+by the indentation engine to make it respect the value of
+`prog-indentation-context'.
+
+This function (like `widen') is useful inside a
+`save-restriction' to make the indentation correctly work when
+narrowing is in effect."
+ (let ((chunk (cadr prog-indentation-context)))
+ (if chunk
+ ;; No call to `widen' is necessary here, as narrow-to-region
+ ;; changes (not just narrows) the existing restrictions
+ (narrow-to-region (car chunk) (or (cdr chunk) (point-max)))
+ (widen))))
+
+
(defvar-local prettify-symbols-alist nil
"Alist of symbol prettifications.
Each element looks like (SYMBOL . CHARACTER), where the symbol
(defcustom ps-mode-print-function
(lambda ()
(let ((lpr-switches nil)
- (lpr-command (if (memq system-type '(usg-unix-v hpux irix))
+ (lpr-command (if (memq system-type '(usg-unix-v hpux))
"lp" "lpr")))
(lpr-buffer)))
"Lisp function to print current buffer as PostScript."
:version "24.3"
:link '(emacs-commentary-link "python"))
+
+;;; 24.x Compat
+\f
+
+(unless (fboundp 'prog-widen)
+ (defun prog-widen ()
+ (widen)))
+
+(unless (fboundp 'prog-first-column)
+ (defun prog-first-column ()
+ 0))
+
\f
;;; Bindings
;; Builtin Exceptions
(,(rx symbol-start
(or
+ ;; Python 2 and 3:
"ArithmeticError" "AssertionError" "AttributeError" "BaseException"
- "DeprecationWarning" "EOFError" "EnvironmentError" "Exception"
- "FloatingPointError" "FutureWarning" "GeneratorExit" "IOError"
- "ImportError" "ImportWarning" "IndexError" "KeyError"
- "KeyboardInterrupt" "LookupError" "MemoryError" "NameError"
- "NotImplementedError" "OSError" "OverflowError"
- "PendingDeprecationWarning" "ReferenceError" "RuntimeError"
- "RuntimeWarning" "StopIteration" "SyntaxError" "SyntaxWarning"
- "SystemError" "SystemExit" "TypeError" "UnboundLocalError"
- "UnicodeDecodeError" "UnicodeEncodeError" "UnicodeError"
- "UnicodeTranslateError" "UnicodeWarning" "UserWarning" "VMSError"
- "ValueError" "Warning" "WindowsError" "ZeroDivisionError"
+ "BufferError" "BytesWarning" "DeprecationWarning" "EOFError"
+ "EnvironmentError" "Exception" "FloatingPointError" "FutureWarning"
+ "GeneratorExit" "IOError" "ImportError" "ImportWarning"
+ "IndentationError" "IndexError" "KeyError" "KeyboardInterrupt"
+ "LookupError" "MemoryError" "NameError" "NotImplementedError"
+ "OSError" "OverflowError" "PendingDeprecationWarning"
+ "ReferenceError" "RuntimeError" "RuntimeWarning" "StopIteration"
+ "SyntaxError" "SyntaxWarning" "SystemError" "SystemExit" "TabError"
+ "TypeError" "UnboundLocalError" "UnicodeDecodeError"
+ "UnicodeEncodeError" "UnicodeError" "UnicodeTranslateError"
+ "UnicodeWarning" "UserWarning" "ValueError" "Warning"
+ "ZeroDivisionError"
;; Python 2:
"StandardError"
;; Python 3:
- "BufferError" "BytesWarning" "IndentationError" "ResourceWarning"
- "TabError")
+ "BlockingIOError" "BrokenPipeError" "ChildProcessError"
+ "ConnectionAbortedError" "ConnectionError" "ConnectionRefusedError"
+ "ConnectionResetError" "FileExistsError" "FileNotFoundError"
+ "InterruptedError" "IsADirectoryError" "NotADirectoryError"
+ "PermissionError" "ProcessLookupError" "RecursionError"
+ "ResourceWarning" "StopAsyncIteration" "TimeoutError"
+ ;; OS specific
+ "VMSError" "WindowsError"
+ )
symbol-end) . font-lock-type-face)
;; Builtins
(,(rx symbol-start
(interactive)
(save-excursion
(save-restriction
- (widen)
+ (prog-widen)
(goto-char (point-min))
(let ((block-end))
(while (and (not block-end)
- Point is on a line starting a dedenter block.
- START is the position where the dedenter block starts."
(save-restriction
- (widen)
+ (prog-widen)
(let ((ppss (save-excursion
(beginning-of-line)
(syntax-ppss))))
happening for :at-dedenter-block-start context since the
possibilities can be narrowed to specific indentation points."
(save-restriction
- (widen)
+ (prog-widen)
(save-excursion
(pcase (python-indent-context)
- (`(:no-indent . ,_) 0)
+ (`(:no-indent . ,_) (prog-first-column)) ; usually 0
(`(,(or :after-line
:after-comment
:inside-string
(let ((opening-block-start-points
(python-info-dedenter-opening-block-positions)))
(if (not opening-block-start-points)
- 0 ; if not found default to first column
+ (prog-first-column) ; if not found default to first column
(mapcar (lambda (pos)
(save-excursion
(goto-char pos)
case INDENTATION is a list, this order is enforced."
(if (listp indentation)
(sort (copy-sequence indentation) #'<)
- (nconc (number-sequence 0 (1- indentation)
+ (nconc (number-sequence (prog-first-column) (1- indentation)
python-indent-offset)
(list indentation))))
(python-indent--previous-level levels (current-indentation))
(if levels
(apply #'max levels)
- 0))))
+ (prog-first-column)))))
(defun python-indent-line (&optional previous)
"Internal implementation of `python-indent-line-function'.
(defun python-shell-calculate-pythonpath ()
"Calculate the PYTHONPATH using `python-shell-extra-pythonpaths'."
(let ((pythonpath
- (tramp-compat-split-string
- (or (getenv "PYTHONPATH") "") path-separator)))
+ (split-string
+ (or (getenv "PYTHONPATH") "") path-separator 'omit)))
(python-shell--add-to-path-with-priority
pythonpath python-shell-extra-pythonpaths)
(mapconcat 'identity pythonpath path-separator)))
(md5 tramp-end-of-output)))
unset vars item)
(while env
- (setq item (tramp-compat-split-string (car env) "="))
+ (setq item (split-string (car env) "=" 'omit))
(setcdr item (mapconcat 'identity (cdr item) "="))
(if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
(push (format "%s %s" (car item) (cdr item)) vars)
This function can be used as the value of `add-log-current-defun-function'
since it returns nil if point is not inside a defun."
(save-restriction
- (widen)
+ (prog-widen)
(save-excursion
(end-of-line 1)
(let ((names)
(let ((point (python-info-dedenter-opening-block-position)))
(when point
(save-restriction
- (widen)
+ (prog-widen)
(message "Closes %s" (save-excursion
(goto-char point)
(buffer-substring
With optional argument LINE-NUMBER, check that line instead."
(save-excursion
(save-restriction
- (widen)
+ (prog-widen)
(when line-number
(python-util-goto-line line-number))
(while (and (not (eobp))
Optional argument LINE-NUMBER forces the line number to check against."
(save-excursion
(save-restriction
- (widen)
+ (prog-widen)
(when line-number
(python-util-goto-line line-number))
(when (python-info-line-ends-backslash-p)
where the continued line ends."
(save-excursion
(save-restriction
- (widen)
+ (prog-widen)
(let* ((context-type (progn
(back-to-indentation)
(python-syntax-context-type)))
(defvar scheme-mode-syntax-table
(let ((st (make-syntax-table))
- (i 0))
+ (i 0))
;; Symbol constituents
;; We used to treat chars 128-256 as symbol-constituent, but they
;; should be valid word constituents (Bug#8843). Note that valid
(defvar scheme-imenu-generic-expression
'((nil
- "^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\sw+\\)" 4)
- ("Types"
- "^(define-class\\s-+(?\\(\\sw+\\)" 1)
- ("Macros"
- "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\sw+\\)" 2))
+ "^(define\\(\\|-\\(generic\\(\\|-procedure\\)\\|method\\)\\)*\\s-+(?\\(\\sw+\\)" 4)
+ ("Types"
+ "^(define-class\\s-+(?\\(\\sw+\\)" 1)
+ ("Macros"
+ "^(\\(defmacro\\|define-macro\\|define-syntax\\)\\s-+(?\\(\\sw+\\)" 2))
"Imenu generic expression for Scheme mode. See `imenu-generic-expression'.")
(defun scheme-mode-variables ()
(setq-local imenu-syntax-alist '(("+-*/.<>=?!$%_&~^:" . "w")))
(setq-local syntax-propertize-function #'scheme-syntax-propertize)
(setq font-lock-defaults
- '((scheme-font-lock-keywords
- scheme-font-lock-keywords-1 scheme-font-lock-keywords-2)
- nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14"))
- beginning-of-defun
- (font-lock-mark-block-function . mark-defun)))
+ '((scheme-font-lock-keywords
+ scheme-font-lock-keywords-1 scheme-font-lock-keywords-2)
+ nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14"))
+ beginning-of-defun
+ (font-lock-mark-block-function . mark-defun)))
+ (setq-local prettify-symbols-alist lisp-prettify-symbols-alist)
(setq-local lisp-doc-string-elt-property 'scheme-doc-string-elt))
(defvar scheme-mode-line-process "")
(defvar scheme-mode-map
(let ((smap (make-sparse-keymap))
- (map (make-sparse-keymap "Scheme")))
+ (map (make-sparse-keymap "Scheme")))
(set-keymap-parent smap lisp-mode-shared-map)
(define-key smap [menu-bar scheme] (cons "Scheme" map))
(define-key map [run-scheme] '("Run Inferior Scheme" . run-scheme))
;; Declarations. Hannes Haug <hannes.haug@student.uni-tuebingen.de> says
;; this works for SOS, STklos, SCOOPS, Meroon and Tiny CLOS.
(list (concat "(\\(define\\*?\\("
- ;; Function names.
- "\\(\\|-public\\|-method\\|-generic\\(-procedure\\)?\\)\\|"
- ;; Macro names, as variable names. A bit dubious, this.
- "\\(-syntax\\|-macro\\)\\|"
- ;; Class names.
- "-class"
+ ;; Function names.
+ "\\(\\|-public\\|-method\\|-generic\\(-procedure\\)?\\)\\|"
+ ;; Macro names, as variable names. A bit dubious, this.
+ "\\(-syntax\\|-macro\\)\\|"
+ ;; Class names.
+ "-class"
;; Guile modules.
"\\|-module"
- "\\)\\)\\>"
- ;; Any whitespace and declared object.
- ;; The "(*" is for curried definitions, e.g.,
- ;; (define ((sum a) b) (+ a b))
- "[ \t]*(*"
- "\\(\\sw+\\)?")
- '(1 font-lock-keyword-face)
- '(6 (cond ((match-beginning 3) font-lock-function-name-face)
- ((match-beginning 5) font-lock-variable-name-face)
- (t font-lock-type-face))
- nil t))
+ "\\)\\)\\>"
+ ;; Any whitespace and declared object.
+ ;; The "(*" is for curried definitions, e.g.,
+ ;; (define ((sum a) b) (+ a b))
+ "[ \t]*(*"
+ "\\(\\sw+\\)?")
+ '(1 font-lock-keyword-face)
+ '(6 (cond ((match-beginning 3) font-lock-function-name-face)
+ ((match-beginning 5) font-lock-variable-name-face)
+ (t font-lock-type-face))
+ nil t))
))
"Subdued expressions to highlight in Scheme modes.")
;; Control structures.
(cons
(concat
- "(" (regexp-opt
- '("begin" "call-with-current-continuation" "call/cc"
- "call-with-input-file" "call-with-output-file" "case" "cond"
- "do" "else" "for-each" "if" "lambda" "λ"
- "let" "let*" "let-syntax" "letrec" "letrec-syntax"
- ;; R6RS library subforms.
- "export" "import"
- ;; SRFI 11 usage comes up often enough.
- "let-values" "let*-values"
- ;; Hannes Haug <hannes.haug@student.uni-tuebingen.de> wants:
- "and" "or" "delay" "force"
- ;; Stefan Monnier <stefan.monnier@epfl.ch> says don't bother:
- ;;"quasiquote" "quote" "unquote" "unquote-splicing"
- "map" "syntax" "syntax-rules") t)
- "\\>") 1)
+ "(" (regexp-opt
+ '("begin" "call-with-current-continuation" "call/cc"
+ "call-with-input-file" "call-with-output-file" "case" "cond"
+ "do" "else" "for-each" "if" "lambda" "λ"
+ "let" "let*" "let-syntax" "letrec" "letrec-syntax"
+ ;; R6RS library subforms.
+ "export" "import"
+ ;; SRFI 11 usage comes up often enough.
+ "let-values" "let*-values"
+ ;; Hannes Haug <hannes.haug@student.uni-tuebingen.de> wants:
+ "and" "or" "delay" "force"
+ ;; Stefan Monnier <stefan.monnier@epfl.ch> says don't bother:
+ ;;"quasiquote" "quote" "unquote" "unquote-splicing"
+ "map" "syntax" "syntax-rules"
+ ;; For R7RS
+ "when" "unless" "letrec*" "include" "include-ci" "cond-expand"
+ "delay-force" "parameterize" "guard" "case-lambda"
+ "syntax-error" "only" "except" "prefix" "rename" "define-values"
+ "define-record-type" "define-library"
+ "include-library-declarations"
+ ;; SRFI-8
+ "receive"
+ ) t)
+ "\\>") 1)
;;
;; It wouldn't be Scheme w/o named-let.
'("(let\\s-+\\(\\sw+\\)"
'("\\<#?:\\sw+\\>" . font-lock-builtin-face)
;; R6RS library declarations.
'("(\\(\\<library\\>\\)\\s-*(?\\(\\sw+\\)?"
- (1 font-lock-keyword-face)
- (2 font-lock-type-face))
+ (1 font-lock-keyword-face)
+ (2 font-lock-type-face))
)))
"Gaudy expressions to highlight in Scheme modes.")
(not buffer-read-only)
(insert dsssl-sgml-declaration))
(setq font-lock-defaults '(dsssl-font-lock-keywords
- nil t (("+-*/.<>=?$%_&~^:" . "w"))
- beginning-of-defun
- (font-lock-mark-block-function . mark-defun)))
+ nil t (("+-*/.<>=?$%_&~^:" . "w"))
+ beginning-of-defun
+ (font-lock-mark-block-function . mark-defun)))
(setq-local add-log-current-defun-function #'lisp-current-defun-name)
(setq-local imenu-case-fold-search nil)
(setq imenu-generic-expression dsssl-imenu-generic-expression)
(eval-when-compile
(list
;; Similar to Scheme
- (list "(\\(define\\(-\\w+\\)?\\)\\>[ ]*\\((?\\)\\(\\sw+\\)\\>"
- '(1 font-lock-keyword-face)
- '(4 font-lock-function-name-face))
+ (list "(\\(define\\(-\\w+\\)?\\)\\>[ ]*\\((?\\)\\(\\sw+\\)\\>"
+ '(1 font-lock-keyword-face)
+ '(4 font-lock-function-name-face))
(cons
(concat "(\\("
- ;; (make-regexp '("case" "cond" "else" "if" "lambda"
- ;; "let" "let*" "letrec" "and" "or" "map" "with-mode"))
- "and\\|c\\(ase\\|ond\\)\\|else\\|if\\|"
- "l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode"
- "\\)\\>")
+ ;; (make-regexp '("case" "cond" "else" "if" "lambda"
+ ;; "let" "let*" "letrec" "and" "or" "map" "with-mode"))
+ "and\\|c\\(ase\\|ond\\)\\|else\\|if\\|"
+ "l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode"
+ "\\)\\>")
1)
;; DSSSL syntax
- '("(\\(element\\|mode\\|declare-\\w+\\)\\>[ ]*\\(\\sw+\\)"
+ '("(\\(element\\|mode\\|declare-\\w+\\)\\>[ ]*\\(\\sw+\\)"
(1 font-lock-keyword-face)
(2 font-lock-type-face))
- '("(\\(element\\)\\>[ ]*(\\(\\S)+\\))"
+ '("(\\(element\\)\\>[ ]*(\\(\\S)+\\))"
(1 font-lock-keyword-face)
(2 font-lock-type-face))
'("\\<\\sw+:\\>" . font-lock-constant-face) ; trailing `:' c.f. scheme
(progn (goto-char calculate-lisp-indent-last-sexp)
(beginning-of-line)
(parse-partial-sexp (point)
- calculate-lisp-indent-last-sexp 0 t)))
+ calculate-lisp-indent-last-sexp 0 t)))
;; Indent under the list or under the first sexp on the same
;; line as calculate-lisp-indent-last-sexp. Note that first
;; thing on that line has to be complete sexp since we are
(backward-prefix-chars)
(current-column))
(let ((function (buffer-substring (point)
- (progn (forward-sexp 1) (point))))
- method)
- (setq method (or (get (intern-soft function) 'scheme-indent-function)
- (get (intern-soft function) 'scheme-indent-hook)))
- (cond ((or (eq method 'defun)
- (and (null method)
- (> (length function) 3)
- (string-match "\\`def" function)))
- (lisp-indent-defform state indent-point))
- ((integerp method)
- (lisp-indent-specform method state
- indent-point normal-indent))
- (method
- (funcall method state indent-point normal-indent)))))))
+ (progn (forward-sexp 1) (point))))
+ method)
+ (setq method (or (get (intern-soft function) 'scheme-indent-function)
+ (get (intern-soft function) 'scheme-indent-hook)))
+ (cond ((or (eq method 'defun)
+ (and (null method)
+ (> (length function) 3)
+ (string-match "\\`def" function)))
+ (lisp-indent-defform state indent-point))
+ ((integerp method)
+ (lisp-indent-specform method state
+ indent-point normal-indent))
+ (method
+ (funcall method state indent-point normal-indent)))))))
\f
;;; Let is different in Scheme
(put 'call-with-values 'scheme-indent-function 1) ; r5rs?
(put 'dynamic-wind 'scheme-indent-function 3) ; r5rs?
\f
+;; R7RS
+(put 'when 'scheme-indent-function 1)
+(put 'unless 'scheme-indent-function 1)
+(put 'letrec* 'scheme-indent-function 1)
+(put 'parameterize 'scheme-indent-function 1)
+(put 'define-values 'scheme-indent-function 1)
+(put 'define-record-type 'scheme-indent-function 1) ;; is 1 correct?
+(put 'define-library 'scheme-indent-function 1)
+
+;; SRFI-8
+(put 'receive 'scheme-indent-function 2)
+\f
;;;; MIT Scheme specific indentation.
(if scheme-mit-dialect
(setq-local skeleton-filter-function 'sh-feature)
(setq-local skeleton-newline-indent-rigidly t)
(setq-local defun-prompt-regexp
- (concat "^\\(function[ \t]\\|[[:alnum:]]+[ \t]+()[ \t]+\\)"))
+ (concat
+ "^\\("
+ "\\(function[ \t]\\)?[ \t]*[[:alnum:]]+[ \t]*([ \t]*)"
+ "\\|"
+ "function[ \t]+[[:alnum:]]+[ \t]*\\(([ \t]*)\\)?"
+ "\\)[ \t]*"))
(setq-local add-log-current-defun-function #'sh-current-defun-name)
(add-hook 'completion-at-point-functions
#'sh-completion-at-point-function nil t)
:list-all ("\\d+" . "\\dS+")
:list-table ("\\d+ %s" . "\\dS+ %s")
:completion-object sql-postgres-completion-object
- :prompt-regexp "^\\w*=[#>] "
+ :prompt-regexp "^[[:alnum:]_]*=[#>] "
:prompt-length 5
- :prompt-cont-regexp "^\\w*[-(][#>] "
+ :prompt-cont-regexp "^[[:alnum:]_]*[-(][#>] "
:input-filter sql-remove-tabs-filter
:terminator ("\\(^\\s-*\\\\g$\\|;\\)" . "\\g"))
:sqli-comint-func sql-comint-vertica
:list-all ("\\d" . "\\dS")
:list-table "\\d %s"
- :prompt-regexp "^\\w*=[#>] "
+ :prompt-regexp "^[[:alnum:]_]*=[#>] "
:prompt-length 5
- :prompt-cont-regexp "^\\w*[-(][#>] ")
+ :prompt-cont-regexp "^[[:alnum:]_]*[-(][#>] ")
)
"An alist of product specific configuration settings.
;;
;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "2015-09-18-314cf1d-vpo-GNU"
+(defconst verilog-mode-version "2016-03-22-7547e76-vpo-GNU"
"Version of this Verilog mode.")
(defconst verilog-mode-release-emacs t
"If non-nil, this version of Verilog mode was released with Emacs itself.")
`(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:
(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
(condition-case nil
(unless (fboundp 'prog-mode)
(define-derived-mode prog-mode fundamental-mode "Prog"))
+ (error nil))
+ ;; Added in Emacs 25.1
+ (condition-case nil
+ (unless (fboundp 'forward-word-strictly)
+ (defalias 'forward-word-strictly 'forward-word))
(error nil)))
(eval-when-compile
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:
;;
:type 'hook)
(defvar verilog-imenu-generic-expression
- '((nil "^\\s-*\\(\\(m\\(odule\\|acromodule\\)\\)\\|primitive\\)\\s-+\\([a-zA-Z0-9_.:]+\\)" 4)
- ("*Vars*" "^\\s-*\\(reg\\|wire\\)\\s-+\\(\\|\\[[^]]+\\]\\s-+\\)\\([A-Za-z0-9_]+\\)" 3))
+ '((nil "^\\s-*\\(?:m\\(?:odule\\|acromodule\\)\\|p\\(?:rimitive\\|rogram\\|ackage\\)\\)\\s-+\\([a-zA-Z0-9_.:]+\\)" 1)
+ ("*Variables*" "^\\s-*\\(reg\\|wire\\|logic\\)\\s-+\\(\\|\\[[^]]+\\]\\s-+\\)\\([A-Za-z0-9_]+\\)" 3)
+ ("*Classes*" "^\\s-*\\(?:\\(?:virtual\\|interface\\)\\s-+\\)?class\\s-+\\([A-Za-z_][A-Za-z0-9_]+\\)" 1)
+ ("*Tasks*" "^\\s-*\\(?:\\(?:static\\|pure\\|virtual\\|local\\|protected\\)\\s-+\\)*task\\s-+\\(?:\\(?:static\\|automatic\\)\\s-+\\)?\\([A-Za-z_][A-Za-z0-9_:]+\\)" 1)
+ ("*Functions*" "^\\s-*\\(?:\\(?:static\\|pure\\|virtual\\|local\\|protected\\)\\s-+\\)*function\\s-+\\(?:\\(?:static\\|automatic\\)\\s-+\\)?\\(?:\\w+\\s-+\\)?\\([A-Za-z_][A-Za-z0-9_:]+\\)" 1)
+ ("*Interfaces*" "^\\s-*interface\\s-+\\([a-zA-Z_0-9]+\\)" 1)
+ ("*Types*" "^\\s-*typedef\\s-+.*\\s-+\\([a-zA-Z_0-9]+\\)\\s-*;" 1))
"Imenu expression for Verilog mode. See `imenu-generic-expression'.")
;;
(define-key map "\C-c\C-i" 'verilog-pretty-declarations)
(define-key map "\C-c=" 'verilog-pretty-expr)
(define-key map "\C-c\C-b" 'verilog-submit-bug-report)
- (define-key map "\M-*" 'verilog-star-comment)
+ (define-key map "\C-c/" 'verilog-star-comment)
(define-key map "\C-c\C-c" 'verilog-comment-region)
(define-key map "\C-c\C-u" 'verilog-uncomment-region)
(when (featurep 'xemacs)
(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)
"Font lock mode face used to highlight AMS keywords."
:group 'font-lock-highlighting-faces)
-(defvar verilog-font-grouping-keywords-face
+(defvar verilog-font-lock-grouping-keywords-face
'verilog-font-lock-grouping-keywords-face
"Font to use for Verilog Grouping Keywords (such as begin..end).")
(defface verilog-font-lock-grouping-keywords-face
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
(add-hook 'write-contents-hooks 'verilog-auto-save-check nil 'local)
;; verilog-mode-hook call added by define-derived-mode
)
+
+;;; Integration with the speedbar
+;;
+
+(declare-function speedbar-add-supported-extension "speedbar" (extension))
+
+(defun verilog-speedbar-initialize ()
+ "Initialize speedbar to understand `verilog-mode'."
+ ;; Set Verilog file extensions (extracted from `auto-mode-alist')
+ (let ((mode-alist auto-mode-alist))
+ (while mode-alist
+ (when (eq (cdar mode-alist) 'verilog-mode)
+ (speedbar-add-supported-extension (caar mode-alist)))
+ (setq mode-alist (cdr mode-alist)))))
+
+;; If the speedbar is loaded, execute initialization instructions right away,
+;; otherwise add the initialization instructions to the speedbar loader.
+(eval-after-load "speedbar" '(verilog-speedbar-initialize))
+
\f
;;; Electric functions:
;;
(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"))
(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
(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)
(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)))
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"))
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
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"))
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)
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)
"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))
;;
(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)
(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.
(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-*\\.[^(]*(")
(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
;;(if dbg (setq dbg (concat dbg (format "\tif-check-else-other %s\n" keywd))))
(setq gotend t))
;; Final statement?
- ((and exit-keywd (equal keywd exit-keywd))
+ ((and exit-keywd (and (equal keywd exit-keywd)
+ (not (looking-at "::"))))
(setq gotend t)
(forward-char (length keywd)))
;; Standard tokens...
(goto-char (match-end 0))
(forward-char 1)))
((equal keywd ":") ; Case statement, begin/end label, x?y:z
- (cond ((equal "endcase" exit-keywd) ; case x: y=z; statement next
+ (cond ((looking-at "::")
+ (forward-char 1)) ; Another forward-char below
+ ((equal "endcase" exit-keywd) ; case x: y=z; statement next
(setq ignore-next nil rvalue nil))
((equal "?" exit-keywd) ; x?y:z rvalue
) ; NOP
(verilog-read-always-signals-recurse nil nil nil)
(setq sigs-out-i (append sigs-out-i sigs-out-unk)
sigs-out-unk nil)
- ;;(if dbg (with-current-buffer (get-buffer-create "*vl-dbg*")) (delete-region (point-min) (point-max)) (insert dbg) (setq dbg ""))
+ ;;(if dbg (with-current-buffer (get-buffer-create "*vl-dbg*") (delete-region (point-min) (point-max)) (insert dbg) (setq dbg "")))
;; Return what was found
(verilog-alw-new sigs-out-d sigs-out-i sigs-temp sigs-in))))
(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
(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)
(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 ")")
((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
(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.
(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.
(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:
;;
;; 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))))
(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)))
;; 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-")))
;; 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
(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
(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
(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")
(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
(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:
;;
-;;; which-func.el --- print current function in mode line
+;;; which-func.el --- print current function in mode line -*- lexical-binding:t -*-
;; Copyright (C) 1994, 1997-1998, 2001-2016 Free Software Foundation,
;; Inc.
"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"))))
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
: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
`("["
"]")
"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)
(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
(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
(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.")
(provide 'ps-mule)
;; Local Variables:
-;; generated-autoload-file: "ps-print.el"
+;; generated-autoload-file: "ps-print-loaddefs.el"
;; End:
;;; ps-mule.el ends here
;; Load XEmacs/Emacs definitions
(require 'ps-def)
+;; autoloads for secondary file
+(require 'ps-print-loaddefs)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; User Variables:
(unless noninteractive
(add-hook 'kill-emacs-hook #'ps-kill-emacs-check))
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; To make this file smaller, some commands go in a separate file.
-;; But autoload them here to make the separation invisible.
-\f
-;;;### (autoloads nil "ps-mule" "ps-mule.el" "4a263b7a727e853f2e6672922c4e5755")
-;;; Generated autoloads from ps-mule.el
-
-(defvar ps-multibyte-buffer nil "\
-Specifies the multi-byte buffer handling.
-
-Valid values are:
-
- nil This is the value to use the default settings;
- by default, this only works to print buffers with
- only ASCII and Latin characters. But this default
- setting can be changed by setting the variable
- `ps-mule-font-info-database-default' differently.
- The initial value of this variable is
- `ps-mule-font-info-database-latin' (see
- documentation).
-
- `non-latin-printer' This is the value to use when you have a Japanese
- or Korean PostScript printer and want to print
- buffer with ASCII, Latin-1, Japanese (JISX0208 and
- JISX0201-Kana) and Korean characters. At present,
- it was not tested with the Korean characters
- printing. If you have a korean PostScript printer,
- please, test it.
-
- `bdf-font' This is the value to use when you want to print
- buffer with BDF fonts. BDF fonts include both latin
- and non-latin fonts. BDF (Bitmap Distribution
- Format) is a format used for distributing X's font
- source file. BDF fonts are included in
- `intlfonts-1.2' which is a collection of X11 fonts
- for all characters supported by Emacs. In order to
- use this value, be sure to have installed
- `intlfonts-1.2' and set the variable
- `bdf-directory-list' appropriately (see ps-bdf.el for
- documentation of this variable).
-
- `bdf-font-except-latin' This is like `bdf-font' except that it uses
- PostScript default fonts to print ASCII and Latin-1
- characters. This is convenient when you want or
- need to use both latin and non-latin characters on
- the same buffer. See `ps-font-family',
- `ps-header-font-family' and `ps-font-info-database'.
-
-Any other value is treated as nil.")
-
-(custom-autoload 'ps-multibyte-buffer "ps-mule" t)
-
-(autoload 'ps-mule-initialize "ps-mule" "\
-Initialize global data for printing multi-byte characters.
-
-\(fn)" nil nil)
-
-(autoload 'ps-mule-begin-job "ps-mule" "\
-Start printing job for multi-byte chars between FROM and TO.
-It checks if all multi-byte characters in the region are printable or not.
-
-\(fn FROM TO)" nil nil)
-
-(autoload 'ps-mule-end-job "ps-mule" "\
-Finish printing job for multi-byte chars.
-
-\(fn)" nil nil)
-
-;;;***
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
(provide 'ps-print)
;;; ps-print.el ends here
#'rectangle--string-erase-preview nil t)
(add-hook 'post-command-hook
#'rectangle--string-preview nil t))
- (read-string (format "String rectangle (default %s): "
- (or (car string-rectangle-history) ""))
- nil 'string-rectangle-history
+ (read-string (format "String rectangle (default %s): "
+ (or (car string-rectangle-history) ""))
+ nil 'string-rectangle-history
(car string-rectangle-history)))))))
+ ;; If we undo this change, we want to have the point back where we
+ ;; are now, and not after the first line in the rectangle (which is
+ ;; the first line to be changed by the following command).
+ (unless (eq buffer-undo-list t)
+ (push (point) buffer-undo-list))
(goto-char
(apply-on-rectangle 'string-rectangle-line start end string t)))
:type hash-table
:documentation "The data hashtable.")))
-(defmethod initialize-instance :BEFORE ((this registry-db) slots)
+(cl-defmethod initialize-instance :before ((this registry-db) slots)
"Check whether a registry object needs to be upgraded."
;; Hardcoded upgrade routines. Version 0.1 to 0.2 requires the
;; :max-soft slot to disappear, and the :max-hard slot to be renamed
(cl-remf slots :max-hard)
(cl-remf slots :max-soft))))
-(defmethod initialize-instance :AFTER ((this registry-db) slots)
+(cl-defmethod initialize-instance :after ((this registry-db) slots)
"Set value of data slot of THIS after initialization."
(with-slots (data tracker) this
(unless (member :data slots)
(unless (member :tracker slots)
(setq tracker (make-hash-table :size 100 :rehash-size 2.0)))))
-(defmethod registry-lookup ((db registry-db) keys)
+(cl-defmethod registry-lookup ((db registry-db) keys)
"Search for KEYS in the registry-db THIS.
Returns an alist of the key followed by the entry in a list, not a cons cell."
(let ((data (oref db data)))
(list k (gethash k data))))
keys))))
-(defmethod registry-lookup-breaks-before-lexbind ((db registry-db) keys)
+(cl-defmethod registry-lookup-breaks-before-lexbind ((db registry-db) keys)
"Search for KEYS in the registry-db THIS.
Returns an alist of the key followed by the entry in a list, not a cons cell."
(let ((data (oref db data)))
when (gethash key data)
collect (list key (gethash key data))))))
-(defmethod registry-lookup-secondary ((db registry-db) tracksym
- &optional create)
+(cl-defmethod registry-lookup-secondary ((db registry-db) tracksym
+ &optional create)
"Search for TRACKSYM in the registry-db THIS.
When CREATE is not nil, create the secondary index hashtable if needed."
- (let ((h (gethash tracksym (oref db :tracker))))
+ (let ((h (gethash tracksym (oref db tracker))))
(if h
h
(when create
(oref db tracker))
(gethash tracksym (oref db tracker))))))
-(defmethod registry-lookup-secondary-value ((db registry-db) tracksym val
- &optional set)
+(cl-defmethod registry-lookup-secondary-value ((db registry-db) tracksym val
+ &optional set)
"Search for TRACKSYM with value VAL in the registry-db THIS.
When SET is not nil, set it for VAL (use t for an empty list)."
;; either we're asked for creation or there should be an existing index
(or found
(registry--match mode entry (cdr-safe check-list))))))
-(defmethod registry-search ((db registry-db) &rest spec)
+(cl-defmethod registry-search ((db registry-db) &rest spec)
"Search for SPEC across the registry-db THIS.
For example calling with `:member \\='(a 1 2)' will match entry \((a 3 1)).
Calling with `:all t' (any non-nil value) will match all.
(and regex (registry--match :regex v regex)))
collect k))))
-(defmethod registry-delete ((db registry-db) keys assert &rest spec)
+(cl-defmethod registry-delete ((db registry-db) keys assert &rest spec)
"Delete KEYS from the registry-db THIS.
If KEYS is nil, use SPEC to do a search.
Updates the secondary ('tracked') indices as well.
(remhash key data)))
keys))
-(defmethod registry-size ((db registry-db))
+(cl-defmethod registry-size ((db registry-db))
"Returns the size of the registry-db object THIS.
This is the key count of the `data' slot."
(hash-table-count (oref db data)))
-(defmethod registry-full ((db registry-db))
+(cl-defmethod registry-full ((db registry-db))
"Checks if registry-db THIS is full."
(>= (registry-size db)
(oref db max-size)))
-(defmethod registry-insert ((db registry-db) key entry)
+(cl-defmethod registry-insert ((db registry-db) key entry)
"Insert ENTRY under KEY into the registry-db THIS.
Updates the secondary ('tracked') indices as well.
Errors out if the key exists already."
(registry-lookup-secondary-value db tr val value-keys))))
entry)
-(defmethod registry-reindex ((db registry-db))
+(cl-defmethod registry-reindex ((db registry-db))
"Rebuild the secondary indices of registry-db THIS."
(let ((count 0)
(expected (* (length (oref db tracked)) (registry-size db))))
(registry-lookup-secondary-value db tr val value-keys))))
(oref db data))))))
-(defmethod registry-prune ((db registry-db) &optional sortfunc)
+(cl-defmethod registry-prune ((db registry-db) &optional sortfunc)
"Prunes the registry-db object DB.
Attempts to prune the number of entries down to \(*
(length (registry-delete db candidates nil)))
0)))
-(defmethod registry-collect-prune-candidates ((db registry-db) limit sortfunc)
+(cl-defmethod registry-collect-prune-candidates ((db registry-db)
+ limit sortfunc)
"Collects pruning candidates from the registry-db object DB.
Proposes only entries without the :precious keys, and attempts to
C-l to clear the screen, redisplay, and offer same replacement again,
! to replace all remaining matches in this buffer with no more questions,
^ to move point back to previous match,
+u to undo previous replacement,
+U to undo all replacements,
E to edit the replacement string.
In multi-buffer replacements type `Y' to replace all remaining
matches in all remaining buffers with no more questions,
(define-key map "\C-l" 'recenter)
(define-key map "!" 'automatic)
(define-key map "^" 'backup)
+ (define-key map "u" 'undo)
+ (define-key map "U" 'undo-all)
(define-key map "\C-h" 'help)
(define-key map [f1] 'help)
(define-key map [help] 'help)
`act-and-exit', `exit', `exit-prefix', `recenter', `scroll-up',
`scroll-down', `scroll-other-window', `scroll-other-window-down',
`edit', `edit-replacement', `delete-and-edit', `automatic',
-`backup', `quit', and `help'.
+`backup', `undo', `undo-all', `quit', and `help'.
This keymap is used by `y-or-n-p' as well as `query-replace'.")
(noedit nil)
(keep-going t)
(stack nil)
+ (search-string-replaced nil) ; last string matching `from-string'
+ (next-replacement-replaced nil) ; replacement string
+ ; (substituted regexp)
+ (last-was-undo)
(replace-count 0)
(skip-read-only-count 0)
(skip-filtered-count 0)
(match-beginning 0) (match-end 0)
start end search-string
regexp-flag delimited-flag case-fold-search backward)
- ;; Bind message-log-max so we don't fill up the message log
- ;; with a bunch of identical messages.
+ ;; Obtain the matched groups: needed only when
+ ;; regexp-flag non nil.
+ (when (and last-was-undo regexp-flag)
+ (setq last-was-undo nil
+ real-match-data
+ (save-excursion
+ (goto-char (match-beginning 0))
+ (looking-at search-string)
+ (match-data t real-match-data))))
+ ;; Matched string and next-replacement-replaced
+ ;; stored in stack.
+ (setq search-string-replaced (buffer-substring-no-properties
+ (match-beginning 0)
+ (match-end 0))
+ next-replacement-replaced
+ (query-replace-descr
+ (save-match-data
+ (set-match-data real-match-data)
+ (match-substitute-replacement
+ next-replacement nocasify literal))))
+ ;; Bind message-log-max so we don't fill up the
+ ;; message log with a bunch of identical messages.
(let ((message-log-max nil)
(replacement-presentation
(if query-replace-show-replacement
(query-replace-descr from-string)
(query-replace-descr replacement-presentation)))
(setq key (read-event))
- ;; Necessary in case something happens during read-event
- ;; that clobbers the match data.
+ ;; Necessary in case something happens during
+ ;; read-event that clobbers the match data.
(set-match-data real-match-data)
(setq key (vector key))
(setq def (lookup-key map key))
(concat "Query replacing "
(if delimited-flag
(or (and (symbolp delimited-flag)
- (get delimited-flag 'isearch-message-prefix))
+ (get delimited-flag
+ 'isearch-message-prefix))
"word ") "")
(if regexp-flag "regexp " "")
(if backward "backward " "")
(message "No previous match")
(ding 'no-terminate)
(sit-for 1)))
+ ((or (eq def 'undo) (eq def 'undo-all))
+ (if (null stack)
+ (progn
+ (message "Nothing to undo")
+ (ding 'no-terminate)
+ (sit-for 1))
+ (let ((stack-idx 0)
+ (stack-len (length stack))
+ (num-replacements 0)
+ search-string
+ next-replacement)
+ (while (and (< stack-idx stack-len)
+ stack
+ (null replaced))
+ (let* ((elt (nth stack-idx stack)))
+ (setq
+ stack-idx (1+ stack-idx)
+ replaced (nth 1 elt)
+ ;; Bind swapped values
+ ;; (search-string <--> replacement)
+ search-string (nth (if replaced 4 3) elt)
+ next-replacement (nth (if replaced 3 4) elt)
+ search-string-replaced search-string
+ next-replacement-replaced next-replacement)
+
+ (when (and (= stack-idx stack-len)
+ (null replaced)
+ (zerop num-replacements))
+ (message "Nothing to undo")
+ (ding 'no-terminate)
+ (sit-for 1))
+
+ (when replaced
+ (setq stack (nthcdr stack-idx stack))
+ (goto-char (nth 0 elt))
+ (set-match-data (nth 2 elt))
+ (setq real-match-data
+ (save-excursion
+ (goto-char (match-beginning 0))
+ (looking-at search-string)
+ (match-data t (nth 2 elt)))
+ noedit
+ (replace-match-maybe-edit
+ next-replacement nocasify literal
+ noedit real-match-data backward)
+ replace-count (1- replace-count)
+ real-match-data
+ (save-excursion
+ (goto-char (match-beginning 0))
+ (looking-at next-replacement)
+ (match-data t (nth 2 elt))))
+ ;; Set replaced nil to keep in loop
+ (when (eq def 'undo-all)
+ (setq replaced nil
+ stack-len (- stack-len stack-idx)
+ stack-idx 0
+ num-replacements
+ (1+ num-replacements))))))
+ (when (and (eq def 'undo-all)
+ (null (zerop num-replacements)))
+ (message "Undid %d %s" num-replacements
+ (if (= num-replacements 1)
+ "replacement"
+ "replacements"))
+ (ding 'no-terminate)
+ (sit-for 1)))
+ (setq replaced nil last-was-undo t)))
((eq def 'act)
(or replaced
(setq noedit
(match-beginning 0)
(match-end 0)
(current-buffer))
- (match-data t)))
- stack))))))
-
+ (match-data t))
+ search-string-replaced
+ next-replacement-replaced)
+ stack)
+ (setq next-replacement-replaced nil
+ search-string-replaced nil))))))
(replace-dehighlight))
(or unread-command-events
(message "Replaced %d occurrence%s%s"
"Return non-nil when horizontal scroll bars are available on this system."
(and (display-graphic-p)
(boundp 'x-toolkit-scroll-bars)
- x-toolkit-scroll-bars
- (not (eq (window-system) 'ns))))
+ x-toolkit-scroll-bars))
(define-minor-mode horizontal-scroll-bar-mode
"Toggle horizontal scroll bars on all frames (Horizontal Scroll Bar mode).
:noquery t
:sentinel #'server-sentinel
:filter #'server-process-filter
+ :use-external-socket t
;; We must receive file names without being decoded.
;; Those are decoded by server-process-filter according
;; to file-name-coding-system. Also don't get
(and locprn
(ses--locprn-compiled locprn))))
printer)
- (or value "")))
+ value))
(if (stringp value)
value
(or (stringp (car-safe value))
(if (setq rowcol (ses-sym-rowcol formula))
(ses-relocate-symbol formula rowcol
startrow startcol rowincr colincr)
- formula) ; Pass through as-is.
+ ;; Constants pass through as-is.
+ formula)
(dolist (cur formula)
(setq rowcol (ses-sym-rowcol cur))
(cond
(interactive)
(push-mark (point))
(push-mark (point-max) nil t)
- (goto-char (point-min)))
+ ;; This is really `point-min' in most cases, but if we're in the
+ ;; minibuffer, this is at the end of the prompt.
+ (goto-char (minibuffer-prompt-end)))
\f
;; Counting lines, one way or another.
(integer :tag "time" 2)
(other :tag "on")))
+(defcustom extended-command-suggest-shorter t
+ "If non-nil, show a shorter M-x invocation when there is one."
+ :group 'keyboard
+ :type 'boolean
+ :version "25.2")
+
(defun execute-extended-command--shorter-1 (name length)
(cond
((zerop length) (list ""))
((numberp suggest-key-bindings) suggest-key-bindings)
(t 2))))))
(when (and waited (not (consp unread-command-events)))
- (unless (or binding executing-kbd-macro (not (symbolp function))
+ (unless (or (not extended-command-suggest-shorter)
+ binding executing-kbd-macro (not (symbolp function))
(<= (length (symbol-name function)) 2))
;; There's no binding for CMD. Let's try and find the shortest
;; string to use in M-x.
(defun process-menu-delete-process ()
"Kill process at point in a `list-processes' buffer."
(interactive)
- (delete-process (tabulated-list-get-id))
- (revert-buffer))
+ (let ((pos (point)))
+ (delete-process (tabulated-list-get-id))
+ (revert-buffer)
+ (goto-char (min pos (point-max)))
+ (if (eobp)
+ (forward-line -1)
+ (beginning-of-line))))
(defun list-processes--refresh ()
"Recompute the list of processes for the Process List buffer.
(/ (float (- (nth 3 edges) (nth 1 edges))) dlh)))
;; Returns non-nil if partial move was done.
-(defun line-move-partial (arg noerror to-end)
+(defun line-move-partial (arg noerror &optional _to-end)
(if (< arg 0)
;; Move backward (up).
;; If already vscrolled, reduce vscroll
;; discrepancies between that and DLH.
(if (and rowh rbot (>= (- (+ rowh rbot) winh) 1))
(set-window-vscroll nil dlh t))
- (line-move-1 arg noerror to-end)
+ (line-move-1 arg noerror)
t)
;; If there are lines above the last line, scroll-up one line.
((and vpos (> vpos 0))
;; scrolling with cursor motion. But so far we don't have
;; a cleaner solution to the problem of making C-n do something
;; useful given a tall image.
-(defun line-move (arg &optional noerror to-end try-vscroll)
+(defun line-move (arg &optional noerror _to-end try-vscroll)
"Move forward ARG lines.
If NOERROR, don't signal an error if we can't move ARG lines.
TO-END is unused.
`auto-window-vscroll' or TRY-VSCROLL is nil, this function will
not vscroll."
(if noninteractive
- (line-move-1 arg noerror to-end)
+ (line-move-1 arg noerror)
(unless (and auto-window-vscroll try-vscroll
;; Only vscroll for single line moves
(= (abs arg) 1)
;; But don't vscroll in a keyboard macro.
(not defining-kbd-macro)
(not executing-kbd-macro)
- (line-move-partial arg noerror to-end))
+ (line-move-partial arg noerror))
(set-window-vscroll nil 0 t)
(if (and line-move-visual
;; Display-based column are incompatible with goal-column.
(set-window-vscroll
nil
(- lh dlh) t))))
- (line-move-1 arg noerror to-end)))))
+ (line-move-1 arg noerror)))))
;; Display-based alternative to line-move-1.
;; Arg says how many lines to move. The value is t if we can move the
;;;; Basic Lisp macros.
(defalias 'not 'null)
+(defalias 'sxhash 'sxhash-equal)
(defmacro noreturn (form)
"Evaluate FORM, expecting it not to return.
Note that if KEY has a local binding in the current buffer,
that local binding will continue to shadow any global binding
that you make with this function."
- (interactive "KSet key globally: \nCSet key %s to command: ")
+ (interactive
+ (let* ((menu-prompting nil)
+ (key (read-key-sequence "Set key globally: ")))
+ (list key
+ (read-command (format "Set key %s to command: "
+ (key-description key))))))
(or (vectorp key) (stringp key)
(signal 'wrong-type-argument (list 'arrayp key)))
(define-key (current-global-map) key command))
(defun run-mode-hooks (&rest hooks)
"Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS.
-If the variable `delay-mode-hooks' is non-nil, does not run any hooks,
+Call `hack-local-variables' to set up file local and directory local
+variables.
+
+If the variable `delay-mode-hooks' is non-nil, does not do anything,
just adds the HOOKS to the list `delayed-mode-hooks'.
Otherwise, runs hooks in the sequence: `change-major-mode-after-body-hook',
-`delayed-mode-hooks' (in reverse order), HOOKS, and finally
+`delayed-mode-hooks' (in reverse order), HOOKS, then runs
+`hack-local-variables' and finally runs the hook
`after-change-major-mode-hook'. Major mode functions should use
this instead of `run-hooks' when running their FOO-mode-hook."
(if delay-mode-hooks
(setq hooks (nconc (nreverse delayed-mode-hooks) hooks))
(setq delayed-mode-hooks nil)
(apply 'run-hooks (cons 'change-major-mode-after-body-hook hooks))
+ (if (buffer-file-name)
+ (with-demoted-errors "File local-variables error: %s"
+ (hack-local-variables 'no-mode)))
(run-hooks 'after-change-major-mode-hook)))
(defmacro delay-mode-hooks (&rest body)
(message "%s%s" prompt (char-to-string char))
char))
+(defun read-multiple-choice (prompt choices)
+ "Ask user a multiple choice question.
+PROMPT should be a string that will be displayed as the prompt.
+
+CHOICES is an alist where the first element in each entry is a
+character to be entered, the second element is a short name for
+the entry to be displayed while prompting (if there's room, it
+might be shortened), and the third, optional entry is a longer
+explanation that will be displayed in a help buffer if the user
+requests more help.
+
+This function translates user input into responses by consulting
+the bindings in `query-replace-map'; see the documentation of
+that variable for more information. In this case, the useful
+bindings are `recenter', `scroll-up', and `scroll-down'. If the
+user enters `recenter', `scroll-up', or `scroll-down' responses,
+perform the requested window recentering or scrolling and ask
+again.
+
+The return value is the matching entry from the CHOICES list.
+
+Usage example:
+
+\(read-multiple-choice \"Continue connecting?\"
+ '((?a \"always\")
+ (?s \"session only\")
+ (?n \"no\")))"
+ (let* ((altered-names nil)
+ (full-prompt
+ (format
+ "%s (%s): "
+ prompt
+ (mapconcat
+ (lambda (elem)
+ (let* ((name (cadr elem))
+ (pos (seq-position name (car elem)))
+ (altered-name
+ (cond
+ ;; Not in the name string.
+ ((not pos)
+ (format "[%c] %s" (car elem) name))
+ ;; The prompt character is in the name, so highlight
+ ;; it on graphical terminals...
+ ((display-supports-face-attributes-p
+ '(:underline t) (window-frame))
+ (setq name (copy-sequence name))
+ (put-text-property pos (1+ pos)
+ 'face 'read-multiple-choice-face
+ name)
+ name)
+ ;; And put it in [bracket] on non-graphical terminals.
+ (t
+ (concat
+ (substring name 0 pos)
+ "["
+ (upcase (substring name pos (1+ pos)))
+ "]"
+ (substring name (1+ pos)))))))
+ (push (cons (car elem) altered-name)
+ altered-names)
+ altered-name))
+ (append choices '((?? "?")))
+ ", ")))
+ tchar buf wrong-char answer)
+ (save-window-excursion
+ (save-excursion
+ (while (not tchar)
+ (message "%s%s"
+ (if wrong-char
+ "Invalid choice. "
+ "")
+ full-prompt)
+ (setq tchar
+ (if (and (display-popup-menus-p)
+ last-input-event ; not during startup
+ (listp last-nonmenu-event)
+ use-dialog-box)
+ (x-popup-dialog
+ t
+ (cons prompt
+ (mapcar
+ (lambda (elem)
+ (cons (capitalize (cadr elem))
+ (car elem)))
+ choices)))
+ (condition-case nil
+ (let ((cursor-in-echo-area t))
+ (read-char))
+ (error nil))))
+ (setq answer (lookup-key query-replace-map (vector tchar) t))
+ (setq tchar
+ (cond
+ ((eq answer 'recenter)
+ (recenter) t)
+ ((eq answer 'scroll-up)
+ (ignore-errors (scroll-up-command)) t)
+ ((eq answer 'scroll-down)
+ (ignore-errors (scroll-down-command)) t)
+ ((eq answer 'scroll-other-window)
+ (ignore-errors (scroll-other-window)) t)
+ ((eq answer 'scroll-other-window-down)
+ (ignore-errors (scroll-other-window-down)) t)
+ (t tchar)))
+ (when (eq tchar t)
+ (setq wrong-char nil
+ tchar nil))
+ ;; The user has entered an invalid choice, so display the
+ ;; help messages.
+ (when (and (not (eq tchar nil))
+ (not (assq tchar choices)))
+ (setq wrong-char (not (memq tchar '(?? ?\C-h)))
+ tchar nil)
+ (when wrong-char
+ (ding))
+ (with-help-window (setq buf (get-buffer-create
+ "*Multiple Choice Help*"))
+ (with-current-buffer buf
+ (erase-buffer)
+ (pop-to-buffer buf)
+ (insert prompt "\n\n")
+ (let* ((columns (/ (window-width) 25))
+ (fill-column 21)
+ (times 0)
+ (start (point)))
+ (dolist (elem choices)
+ (goto-char start)
+ (unless (zerop times)
+ (if (zerop (mod times columns))
+ ;; Go to the next "line".
+ (goto-char (setq start (point-max)))
+ ;; Add padding.
+ (while (not (eobp))
+ (end-of-line)
+ (insert (make-string (max (- (* (mod times columns)
+ (+ fill-column 4))
+ (current-column))
+ 0)
+ ?\s))
+ (forward-line 1))))
+ (setq times (1+ times))
+ (let ((text
+ (with-temp-buffer
+ (insert (format
+ "%c: %s\n"
+ (car elem)
+ (cdr (assq (car elem) altered-names))))
+ (fill-region (point-min) (point-max))
+ (when (nth 2 elem)
+ (let ((start (point)))
+ (insert (nth 2 elem))
+ (unless (bolp)
+ (insert "\n"))
+ (fill-region start (point-max))))
+ (buffer-string))))
+ (goto-char start)
+ (dolist (line (split-string text "\n"))
+ (end-of-line)
+ (if (bolp)
+ (insert line "\n")
+ (insert line))
+ (forward-line 1)))))))))))
+ (when (buffer-live-p buf)
+ (kill-buffer buf))
+ (assq tchar choices)))
+
(defun sit-for (seconds &optional nodisp obsolete)
"Redisplay, then wait for SECONDS seconds. Stop when input is available.
SECONDS may be a floating-point value.
`inhibit-field-text-motion' is non-nil.
This function is like `forward-word', but it is not affected
-by `find-word-boundary-function-table' (as set up by
-e.g. `subword-mode'). It is also not interactive."
+by `find-word-boundary-function-table'. It is also not interactive."
(let ((find-word-boundary-function-table
(if (char-table-p word-move-empty-char-table)
word-move-empty-char-table
If ARG is omitted or nil, move point backward one word.
This function is like `forward-word', but it is not affected
-by `find-word-boundary-function-table' (as set up by
-e.g. `subword-mode'). It is also not interactive."
+by `find-word-boundary-function-table'. It is also not interactive."
(let ((find-word-boundary-function-table
(if (char-table-p word-move-empty-char-table)
word-move-empty-char-table
--- /dev/null
+;;; svg.el --- SVG image creation functions -*- lexical-binding: t -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: image
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'xml)
+(require 'dom)
+
+(defun svg-create (width height &rest args)
+ "Create a new, empty SVG image with dimensions WIDTHxHEIGHT.
+ARGS can be used to provide `stroke' and `stroke-width' parameters to
+any further elements added."
+ (dom-node 'svg
+ `((width . ,width)
+ (height . ,height)
+ (version . "1.1")
+ (xmlsn . "http://www.w3.org/2000/svg")
+ ,@(svg--arguments nil args))))
+
+(defun svg-gradient (svg id type stops)
+ "Add a gradient with ID to SVG.
+TYPE is `linear' or `radial'. STOPS is a list of percentage/color
+pairs."
+ (svg--def
+ svg
+ (apply
+ 'dom-node
+ (if (eq type 'linear)
+ 'linearGradient
+ 'radialGradient)
+ `((id . ,id)
+ (x1 . 0)
+ (x2 . 0)
+ (y1 . 0)
+ (y2 . 1))
+ (mapcar
+ (lambda (stop)
+ (dom-node 'stop `((offset . ,(format "%s%%" (car stop)))
+ (stop-color . ,(cdr stop)))))
+ stops))))
+
+(defun svg-rectangle (svg x y width height &rest args)
+ "Create a rectangle on SVG, starting at position X/Y, of WIDTH/HEIGHT.
+ARGS is a plist of modifiers. Possible values are
+
+:stroke-width PIXELS. The line width.
+:stroke-color COLOR. The line color.
+:gradient ID. The gradient ID to use."
+ (svg--append
+ svg
+ (dom-node 'rect
+ `((width . ,width)
+ (height . ,height)
+ (x . ,x)
+ (y . ,y)
+ ,@(svg--arguments svg args)))))
+
+(defun svg-circle (svg x y radius &rest args)
+ "Create a circle of RADIUS on SVG.
+X/Y denote the center of the circle."
+ (svg--append
+ svg
+ (dom-node 'circle
+ `((cx . ,x)
+ (cy . ,y)
+ (r . ,radius)
+ ,@(svg--arguments svg args)))))
+
+(defun svg-ellipse (svg x y x-radius y-radius &rest args)
+ "Create an ellipse of X-RADIUS/Y-RADIUS on SVG.
+X/Y denote the center of the ellipse."
+ (svg--append
+ svg
+ (dom-node 'ellipse
+ `((cx . ,x)
+ (cy . ,y)
+ (rx . ,x-radius)
+ (ry . ,y-radius)
+ ,@(svg--arguments svg args)))))
+
+(defun svg-line (svg x1 y1 x2 y2 &rest args)
+ "Create a line of starting in X1/Y1, ending at X2/Y2 in SVG."
+ (svg--append
+ svg
+ (dom-node 'line
+ `((x1 . ,x1)
+ (x2 . ,y1)
+ (y1 . ,x2)
+ (y2 . ,y2)
+ ,@(svg--arguments svg args)))))
+
+(defun svg-polyline (svg points &rest args)
+ "Create a polyline going through POINTS on SVG.
+POINTS is a list of x/y pairs."
+ (svg--append
+ svg
+ (dom-node
+ 'polyline
+ `((points . ,(mapconcat (lambda (pair)
+ (format "%s %s" (car pair) (cdr pair)))
+ points
+ ", "))
+ ,@(svg--arguments svg args)))))
+
+(defun svg-polygon (svg points &rest args)
+ "Create a polygon going through POINTS on SVG.
+POINTS is a list of x/y pairs."
+ (svg--append
+ svg
+ (dom-node
+ 'polygon
+ `((points . ,(mapconcat (lambda (pair)
+ (format "%s %s" (car pair) (cdr pair)))
+ points
+ ", "))
+ ,@(svg--arguments svg args)))))
+
+(defun svg--append (svg node)
+ (let ((old (and (dom-attr node 'id)
+ (dom-by-id svg
+ (concat "\\`" (regexp-quote (dom-attr node 'id))
+ "\\'")))))
+ (if old
+ (dom-set-attributes old (dom-attributes node))
+ (dom-append-child svg node)))
+ (svg-possibly-update-image svg))
+
+(defun svg--arguments (svg args)
+ (let ((stroke-width (or (plist-get args :stroke-width)
+ (dom-attr svg 'stroke-width)))
+ (stroke-color (or (plist-get args :stroke-color)
+ (dom-attr svg 'stroke-color)))
+ (fill-color (plist-get args :fill-color))
+ attr)
+ (when stroke-width
+ (push (cons 'stroke-width stroke-width) attr))
+ (when stroke-color
+ (push (cons 'stroke stroke-color) attr))
+ (when fill-color
+ (push (cons 'fill fill-color) attr))
+ (when (plist-get args :gradient)
+ (setq attr
+ (append
+ ;; We need a way to specify the gradient direction here...
+ `((x1 . 0)
+ (x2 . 0)
+ (y1 . 0)
+ (y2 . 1)
+ (fill . ,(format "url(#%s)"
+ (plist-get args :gradient))))
+ attr)))
+ (cl-loop for (key value) on args by #'cddr
+ unless (memq key '(:stroke-color :stroke-width :gradient
+ :fill-color))
+ ;; Drop the leading colon.
+ do (push (cons (intern (substring (symbol-name key) 1) obarray)
+ value)
+ attr))
+ attr))
+
+(defun svg--def (svg def)
+ (dom-append-child
+ (or (dom-by-tag svg 'defs)
+ (let ((node (dom-node 'defs)))
+ (dom-add-child-before svg node)
+ node))
+ def)
+ svg)
+
+(defun svg-image (svg)
+ "Return an image object from SVG."
+ (create-image
+ (with-temp-buffer
+ (svg-print svg)
+ (buffer-string))
+ 'svg t))
+
+(defun svg-insert-image (svg)
+ "Insert SVG as an image at point.
+If the SVG is later changed, the image will also be updated."
+ (let ((image (svg-image svg))
+ (marker (point-marker)))
+ (insert-image image)
+ (dom-set-attribute svg :image marker)))
+
+(defun svg-possibly-update-image (svg)
+ (let ((marker (dom-attr svg :image)))
+ (when (and marker
+ (buffer-live-p (marker-buffer marker)))
+ (with-current-buffer (marker-buffer marker)
+ (put-text-property marker (1+ marker) 'display (svg-image svg))))))
+
+(defun svg-print (dom)
+ "Convert DOM into a string containing the xml representation."
+ (insert (format "<%s" (car dom)))
+ (dolist (attr (nth 1 dom))
+ ;; Ignore attributes that start with a colon.
+ (unless (= (aref (format "%s" (car attr)) 0) ?:)
+ (insert (format " %s=\"%s\"" (car attr) (cdr attr)))))
+ (insert ">")
+ (dolist (elem (nthcdr 2 dom))
+ (insert " ")
+ (svg-print elem))
+ (insert (format "</%s>" (car dom))))
+
+(provide 'svg)
+
+;;; svg.el ends here
(define-key map [down] 'term-send-down)
(define-key map [right] 'term-send-right)
(define-key map [left] 'term-send-left)
+ (define-key map [C-up] 'term-send-ctrl-up)
+ (define-key map [C-down] 'term-send-ctrl-down)
+ (define-key map [C-right] 'term-send-ctrl-right)
+ (define-key map [C-left] 'term-send-ctrl-left)
(define-key map [delete] 'term-send-del)
(define-key map [deletechar] 'term-send-del)
(define-key map [backspace] 'term-send-backspace)
(defun term-send-down () (interactive) (term-send-raw-string "\eOB"))
(defun term-send-right () (interactive) (term-send-raw-string "\eOC"))
(defun term-send-left () (interactive) (term-send-raw-string "\eOD"))
+(defun term-send-ctrl-up () (interactive) (term-send-raw-string "\e[1;5A"))
+(defun term-send-ctrl-down () (interactive) (term-send-raw-string "\e[1;5B"))
+(defun term-send-ctrl-right () (interactive) (term-send-raw-string "\e[1;5C"))
+(defun term-send-ctrl-left () (interactive) (term-send-raw-string "\e[1;5D"))
(defun term-send-home () (interactive) (term-send-raw-string "\e[1~"))
(defun term-send-insert() (interactive) (term-send-raw-string "\e[2~"))
(defun term-send-end () (interactive) (term-send-raw-string "\e[4~"))
;; \E[D - cursor left (terminfo: cub)
((eq char ?D)
(term-move-columns (- (max 1 term-terminal-parameter))))
+ ;; \E[G - cursor motion to absolute column (terminfo: hpa)
+ ((eq char ?G)
+ (term-move-columns (- (max 0 (min term-width term-terminal-parameter))
+ (term-current-column))))
;; \E[J - clear to end of screen (terminfo: ed, clear)
((eq char ?J)
(term-erase-in-display term-terminal-parameter))
(define-key local-function-key-map [ALT] [27])
))
+(provide 'term/AT386)
+
;;; AT386.el ends here
(keyboard-translate ?\177 ?\^h)
(keyboard-translate ?\^h ?\177))
+(provide 'term/bobcat)
+
;;; bobcat.el ends here
"Terminal initialization function for cygwin."
(tty-no-underline))
+(provide 'term/cygwin)
+
;;; cygwin.el ends here
(run-hooks 'dos-codepage-setup-hook)
))
+(provide 'term/internal)
+
;;; internal.el ends here
(set-keymap-parent m (keymap-parent input-decode-map))
(set-keymap-parent input-decode-map m)))
+(provide 'term/iris-ansi)
+
;;; iris-ansi.el ends here
;; The arg only matters in that it is not t or nil.
(set-input-meta-mode 'iso-latin-1))
+(provide 'term/linux)
+
;;; linux.el ends here
(set-keymap-parent m (keymap-parent input-decode-map))
(set-keymap-parent input-decode-map m)))
+(provide 'term/lk201)
+
;;; lk201.el ends here
(define-key news-fkey-prefix "x" [kp-8])
))
+(provide 'term/news)
+
;;; news.el ends here
;;;; Scrollbar handling.
-(global-set-key [vertical-scroll-bar down-mouse-1] 'ns-handle-scroll-bar-event)
+(global-set-key [vertical-scroll-bar down-mouse-1] 'scroll-bar-toolkit-scroll)
+(global-set-key [horizontal-scroll-bar down-mouse-1] 'scroll-bar-toolkit-horizontal-scroll)
(global-unset-key [vertical-scroll-bar mouse-1])
(global-unset-key [vertical-scroll-bar drag-mouse-1])
-
-(declare-function scroll-bar-scale "scroll-bar" (num-denom whole))
-
-(defun ns-scroll-bar-move (event)
- "Scroll the frame according to a Nextstep scroller event."
- (interactive "e")
- (let* ((pos (event-end event))
- (window (nth 0 pos))
- (scale (nth 2 pos)))
- (with-current-buffer (window-buffer window)
- (cond
- ((eq (car scale) (cdr scale))
- (goto-char (point-max)))
- ((= (car scale) 0)
- (goto-char (point-min)))
- (t
- (goto-char (+ (point-min) 1
- (scroll-bar-scale scale (- (point-max) (point-min)))))))
- (beginning-of-line)
- (set-window-start window (point))
- (vertical-motion (/ (window-height window) 2) window))))
-
-(defun ns-handle-scroll-bar-event (event)
- "Handle scroll bar EVENT to emulate Nextstep style scrolling."
- (interactive "e")
- (let* ((position (event-start event))
- (bar-part (nth 4 position))
- (window (nth 0 position))
- (old-window (selected-window)))
- (cond
- ((eq bar-part 'ratio)
- (ns-scroll-bar-move event))
- ((eq bar-part 'handle)
- (if (eq window (selected-window))
- (track-mouse (ns-scroll-bar-move event))
- ;; track-mouse faster for selected window, slower for unselected.
- (ns-scroll-bar-move event)))
- (t
- (select-window window)
- (cond
- ((eq bar-part 'up)
- (goto-char (window-start window))
- (scroll-down 1))
- ((eq bar-part 'above-handle)
- (scroll-down))
- ((eq bar-part 'below-handle)
- (scroll-up))
- ((eq bar-part 'down)
- (goto-char (window-start window))
- (scroll-up 1)))
- (select-window old-window)))))
+(global-unset-key [horizontal-scroll-bar mouse-1])
+(global-unset-key [horizontal-scroll-bar drag-mouse-1])
;;;; Color support.
(ns-get-selection selection-symbol target-type))
(provide 'ns-win)
+(provide 'term/ns-win)
;;; ns-win.el ends here
;; ---------------------------------------------------------------------------
(provide 'pc-win)
+(provide 'term/pc-win)
;;; pc-win.el ends here
(* (apply '+ (car (cddr (nth 15 rxvt-standard-colors)))) 0.6))
(set-terminal-parameter nil 'background-mode 'dark)))))
+(provide 'term/rxvt)
+
;;; rxvt.el ends here
(let ((xterm-extra-capabilities xterm-screen-extra-capabilities))
(tty-run-terminal-initialization (selected-frame) "xterm")))
+(provide 'term/screen)
+
;; screen.el ends here
(eval (car hooks))
(setq hooks (cdr hooks))))))
+(provide 'term/sun)
+
;;; sun.el ends here
(setq colors (cdr colors)))
count))
+(provide 'term/tty-colors)
+
;;; tty-colors.el ends here
(send-string-to-terminal
(if (terminal-parameter nil 'tvi970-keypad-numeric) "\e=" "\e>")))
+(provide 'term/tvi970)
+
;;; tvi970.el ends here
(send-string-to-terminal (if vt100-wide-mode "\e[?3h" "\e[?3l"))
(set-frame-width terminal-frame (if vt100-wide-mode 132 80)))
+(provide 'term/vt100)
+
;;; vt100.el ends here
(define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
(define-key local-function-key-map [f11] [?\e]))
+(provide 'term/vt200)
+
;;; vt200.el ends here
(getenv "SystemRoot"))
(provide 'w32-win)
+(provide 'term/w32-win)
;;; w32-win.el ends here
(tty-set-up-initial-frame-faces)
(run-hooks 'terminal-init-w32-hook))
+(provide 'term/w32console)
+
;;; w32console.el ends here
;; (nth 1 key-definition)))
(fset 'enable-arrow-keys nil))
+(provide 'term/wyse50)
+
;;; wyse50.el ends here
(global-set-key [XF86WakeUp] 'ignore)
(provide 'x-win)
+(provide 'term/x-win)
;;; x-win.el ends here
(define-key map [f59] [M-f11])
(define-key map [f60] [M-f12])
+ (define-key map [f61] [M-S-f1])
+ (define-key map [f62] [M-S-f2])
+ (define-key map [f63] [M-S-f3])
+ (define-key map [f64] [M-S-f4])
+ (define-key map [f65] [M-S-f5])
+ (define-key map [f66] [M-S-f6])
+ (define-key map [f67] [M-S-f7])
+ (define-key map [f68] [M-S-f8])
+ (define-key map [f69] [M-S-f9])
+ (define-key map [f70] [M-S-f10])
+ (define-key map [f71] [M-S-f11])
+ (define-key map [f72] [M-S-f12])
+
map)
"Keymap of possible alternative meanings for some keys.")
;; - electric ; and }
;; - filling code with auto-fill-mode
-;; - attribute value completion
;; - fix font-lock errors with multi-line selectors
+;; - support completion of user-defined classes names and IDs
;;; Code:
+(require 'seq)
+(require 'sgml-mode)
+(require 'smie)
+
(defgroup css nil
"Cascading Style Sheets (CSS) editing mode."
:group 'languages)
"Identifiers for pseudo-elements.")
(defconst css-at-ids
- '("charset" "font-face" "import" "media" "namespace" "page")
+ '("charset" "font-face" "import" "keyframes" "media" "namespace"
+ "page")
"Identifiers that appear in the form @foo.")
+(defconst scss-at-ids
+ '("at-root" "content" "debug" "each" "else" "else if" "error" "extend"
+ "for" "function" "if" "import" "include" "mixin" "return" "warn"
+ "while")
+ "Additional identifiers that appear in the form @foo in SCSS.")
+
+(defvar css--at-ids css-at-ids
+ "List of at-rules for the current mode.")
+(make-variable-buffer-local 'css--at-ids)
+
(defconst css-bang-ids
'("important")
"Identifiers that appear in the form !foo.")
'("default" "global" "optional")
"Additional identifiers that appear in the form !foo in SCSS.")
+(defvar css--bang-ids css-bang-ids
+ "List of bang-rules for the current mode.")
+(make-variable-buffer-local 'css--bang-ids)
+
(defconst css-descriptor-ids
'("ascent" "baseline" "bbox" "cap-height" "centerline" "definition-src"
"descent" "font-family" "font-size" "font-stretch" "font-style"
"visual")
"Identifiers for types of media.")
-(defconst css-property-ids
- '(;; CSS 2.1 properties (http://www.w3.org/TR/CSS21/propidx.html).
- ;;
- ;; Properties duplicated by any of the CSS3 modules below have
- ;; been removed.
- "azimuth" "border-collapse" "border-spacing" "bottom"
- "caption-side" "clear" "clip" "content" "counter-increment"
- "counter-reset" "cue" "cue-after" "cue-before" "direction" "display"
- "elevation" "empty-cells" "float" "height" "left" "line-height"
- "list-style" "list-style-image" "list-style-position"
- "list-style-type" "margin" "margin-bottom" "margin-left"
- "margin-right" "margin-top" "max-height" "max-width" "min-height"
- "min-width" "orphans" "padding" "padding-bottom" "padding-left"
- "padding-right" "padding-top" "page-break-after"
- "page-break-before" "page-break-inside" "pause" "pause-after"
- "pause-before" "pitch" "pitch-range" "play-during" "position"
- "quotes" "richness" "right" "speak" "speak-header" "speak-numeral"
- "speak-punctuation" "speech-rate" "stress" "table-layout" "top"
- "unicode-bidi" "vertical-align" "visibility" "voice-family" "volume"
- "widows" "width" "z-index"
+(defconst css-property-alist
+ ;; CSS 2.1 properties (http://www.w3.org/TR/CSS21/propidx.html).
+ ;;
+ ;; Properties duplicated by any of the CSS3 modules below have been
+ ;; removed.
+ '(("azimuth" angle "left-side" "far-left" "left" "center-left"
+ "center" "center-right" "right" "far-right" "right-side" "behind"
+ "leftwards" "rightwards")
+ ("border-collapse" "collapse" "separate")
+ ("border-spacing" length)
+ ("bottom" length percentage "auto")
+ ("caption-side" "top" "bottom")
+ ("clear" "none" "left" "right" "both")
+ ("clip" shape "auto")
+ ("content" "normal" "none" string uri counter "attr()"
+ "open-quote" "close-quote" "no-open-quote" "no-close-quote")
+ ("counter-increment" identifier integer "none")
+ ("counter-reset" identifier integer "none")
+ ("cue" cue-before cue-after)
+ ("cue-after" uri "none")
+ ("cue-before" uri "none")
+ ("direction" "ltr" "rtl")
+ ("display" "inline" "block" "list-item" "inline-block" "table"
+ "inline-table" "table-row-group" "table-header-group"
+ "table-footer-group" "table-row" "table-column-group"
+ "table-column" "table-cell" "table-caption" "none"
+ ;; CSS Flexible Box Layout Module Level 1
+ ;; (https://www.w3.org/TR/css3-flexbox/#valdef-display-flex)
+ "flex" "inline-flex")
+ ("elevation" angle "below" "level" "above" "higher" "lower")
+ ("empty-cells" "show" "hide")
+ ("float" "left" "right" "none")
+ ("height" length percentage "auto")
+ ("left" length percentage "auto")
+ ("line-height" "normal" number length percentage)
+ ("list-style" list-style-type list-style-position
+ list-style-image)
+ ("list-style-image" uri "none")
+ ("list-style-position" "inside" "outside")
+ ("list-style-type" "disc" "circle" "square" "decimal"
+ "decimal-leading-zero" "lower-roman" "upper-roman" "lower-greek"
+ "lower-latin" "upper-latin" "armenian" "georgian" "lower-alpha"
+ "upper-alpha" "none")
+ ("margin" margin-width)
+ ("margin-bottom" margin-width)
+ ("margin-left" margin-width)
+ ("margin-right" margin-width)
+ ("margin-top" margin-width)
+ ("max-height" length percentage "none")
+ ("max-width" length percentage "none")
+ ("min-height" length percentage)
+ ("min-width" length percentage)
+ ("padding" padding-width)
+ ("padding-bottom" padding-width)
+ ("padding-left" padding-width)
+ ("padding-right" padding-width)
+ ("padding-top" padding-width)
+ ("page-break-after" "auto" "always" "avoid" "left" "right")
+ ("page-break-before" "auto" "always" "avoid" "left" "right")
+ ("page-break-inside" "avoid" "auto")
+ ("pause" time percentage)
+ ("pause-after" time percentage)
+ ("pause-before" time percentage)
+ ("pitch" frequency "x-low" "low" "medium" "high" "x-high")
+ ("pitch-range" number)
+ ("play-during" uri "mix" "repeat" "auto" "none")
+ ("position" "static" "relative" "absolute" "fixed")
+ ("quotes" string "none")
+ ("richness" number)
+ ("right" length percentage "auto")
+ ("speak" "normal" "none" "spell-out")
+ ("speak-header" "once" "always")
+ ("speak-numeral" "digits" "continuous")
+ ("speak-punctuation" "code" "none")
+ ("speech-rate" number "x-slow" "slow" "medium" "fast" "x-fast"
+ "faster" "slower")
+ ("stress" number)
+ ("table-layout" "auto" "fixed")
+ ("top" length percentage "auto")
+ ("unicode-bidi" "normal" "embed" "bidi-override")
+ ("vertical-align" "baseline" "sub" "super" "top" "text-top"
+ "middle" "bottom" "text-bottom" percentage length)
+ ("visibility" "visible" "hidden" "collapse")
+ ("voice-family" specific-voice generic-voice specific-voice
+ generic-voice)
+ ("volume" number percentage "silent" "x-soft" "soft" "medium"
+ "loud" "x-loud")
+ ("width" length percentage "auto")
+ ("z-index" "auto" integer)
;; CSS Animations
;; (http://www.w3.org/TR/css3-animations/#property-index)
- "animation" "animation-delay" "animation-direction"
- "animation-duration" "animation-fill-mode"
- "animation-iteration-count" "animation-name"
- "animation-play-state" "animation-timing-function"
+ ("animation" single-animation-name time single-timing-function
+ single-animation-iteration-count single-animation-direction
+ single-animation-fill-mode single-animation-play-state)
+ ("animation-delay" time)
+ ("animation-direction" single-animation-direction)
+ ("animation-duration" time)
+ ("animation-fill-mode" single-animation-fill-mode)
+ ("animation-iteration-count" single-animation-iteration-count)
+ ("animation-name" single-animation-name)
+ ("animation-play-state" single-animation-play-state)
+ ("animation-timing-function" single-timing-function)
;; CSS Backgrounds and Borders Module Level 3
;; (http://www.w3.org/TR/css3-background/#property-index)
- "background" "background-attachment" "background-clip"
- "background-color" "background-image" "background-origin"
- "background-position" "background-repeat" "background-size"
- "border" "border-bottom" "border-bottom-color"
- "border-bottom-left-radius" "border-bottom-right-radius"
- "border-bottom-style" "border-bottom-width" "border-color"
- "border-image" "border-image-outset" "border-image-repeat"
- "border-image-slice" "border-image-source" "border-image-width"
- "border-left" "border-left-color" "border-left-style"
- "border-left-width" "border-radius" "border-right"
- "border-right-color" "border-right-style" "border-right-width"
- "border-style" "border-top" "border-top-color"
- "border-top-left-radius" "border-top-right-radius"
- "border-top-style" "border-top-width" "border-width" "box-shadow"
+ ("background" bg-layer final-bg-layer)
+ ("background-attachment" attachment)
+ ("background-clip" box)
+ ("background-color" color)
+ ("background-image" bg-image)
+ ("background-origin" box)
+ ("background-position" position)
+ ("background-repeat" repeat-style)
+ ("background-size" bg-size)
+ ("border" line-width line-style color)
+ ("border-bottom" line-width line-style color)
+ ("border-bottom-color" color)
+ ("border-bottom-left-radius" length percentage)
+ ("border-bottom-right-radius" length percentage)
+ ("border-bottom-style" line-style)
+ ("border-bottom-width" line-width)
+ ("border-color" color)
+ ("border-image" border-image-source border-image-slice
+ border-image-width border-image-outset border-image-repeat)
+ ("border-image-outset" length number)
+ ("border-image-repeat" "stretch" "repeat" "round" "space")
+ ("border-image-slice" number percentage "fill")
+ ("border-image-source" "none" image)
+ ("border-image-width" length percentage number "auto")
+ ("border-left" line-width line-style color)
+ ("border-left-color" color)
+ ("border-left-style" line-style)
+ ("border-left-width" line-width)
+ ("border-radius" length percentage)
+ ("border-right" line-width line-style color)
+ ("border-right-color" color)
+ ("border-right-style" line-style)
+ ("border-right-width" line-width)
+ ("border-style" line-style)
+ ("border-top" line-width line-style color)
+ ("border-top-color" color)
+ ("border-top-left-radius" length percentage)
+ ("border-top-right-radius" length percentage)
+ ("border-top-style" line-style)
+ ("border-top-width" line-width)
+ ("border-width" line-width)
+ ("box-shadow" "none" shadow)
;; CSS Basic User Interface Module Level 3 (CSS3 UI)
;; (http://www.w3.org/TR/css3-ui/#property-index)
- "box-sizing" "caret-color" "cursor" "nav-down" "nav-left"
- "nav-right" "nav-up" "outline" "outline-color" "outline-offset"
- "outline-style" "outline-width" "resize" "text-overflow"
+ ("box-sizing" "content-box" "border-box")
+ ("caret-color" "auto" color)
+ ("cursor" uri x y "auto" "default" "none" "context-menu" "help"
+ "pointer" "progress" "wait" "cell" "crosshair" "text"
+ "vertical-text" "alias" "copy" "move" "no-drop" "not-allowed"
+ "grab" "grabbing" "e-resize" "n-resize" "ne-resize" "nw-resize"
+ "s-resize" "se-resize" "sw-resize" "w-resize" "ew-resize"
+ "ns-resize" "nesw-resize" "nwse-resize" "col-resize" "row-resize"
+ "all-scroll" "zoom-in" "zoom-out")
+ ("nav-down" "auto" id "current" "root" target-name)
+ ("nav-left" "auto" id "current" "root" target-name)
+ ("nav-right" "auto" id "current" "root" target-name)
+ ("nav-up" "auto" id "current" "root" target-name)
+ ("outline" outline-color outline-style outline-width)
+ ("outline-color" color "invert")
+ ("outline-offset" length)
+ ("outline-style" "auto" border-style)
+ ("outline-width" border-width)
+ ("resize" "none" "both" "horizontal" "vertical")
+ ("text-overflow" "clip" "ellipsis" string)
;; CSS Color Module Level 3
;; (http://www.w3.org/TR/css3-color/#property)
- "color" "opacity"
+ ("color" color)
+ ("opacity" alphavalue)
;; CSS Flexible Box Layout Module Level 1
;; (http://www.w3.org/TR/css-flexbox-1/#property-index)
- "align-content" "align-items" "align-self" "flex" "flex-basis"
- "flex-direction" "flex-flow" "flex-grow" "flex-shrink" "flex-wrap"
- "justify-content" "order"
+ ("align-content" "flex-start" "flex-end" "center" "space-between"
+ "space-around" "stretch")
+ ("align-items" "flex-start" "flex-end" "center" "baseline"
+ "stretch")
+ ("align-self" "auto" "flex-start" "flex-end" "center" "baseline"
+ "stretch")
+ ("flex" "none" flex-grow flex-shrink flex-basis)
+ ("flex-basis" "auto" "content" width)
+ ("flex-direction" "row" "row-reverse" "column" "column-reverse")
+ ("flex-flow" flex-direction flex-wrap)
+ ("flex-grow" number)
+ ("flex-shrink" number)
+ ("flex-wrap" "nowrap" "wrap" "wrap-reverse")
+ ("justify-content" "flex-start" "flex-end" "center"
+ "space-between" "space-around")
+ ("order" integer)
;; CSS Fonts Module Level 3
;; (http://www.w3.org/TR/css3-fonts/#property-index)
- "font" "font-family" "font-feature-settings" "font-kerning"
- "font-language-override" "font-size" "font-size-adjust"
- "font-stretch" "font-style" "font-synthesis" "font-variant"
- "font-variant-alternates" "font-variant-caps"
- "font-variant-east-asian" "font-variant-ligatures"
- "font-variant-numeric" "font-variant-position" "font-weight"
+ ("font" font-style font-variant-css21 font-weight font-stretch
+ font-size line-height font-family "caption" "icon" "menu"
+ "message-box" "small-caption" "status-bar")
+ ("font-family" family-name generic-family)
+ ("font-feature-settings" "normal" feature-tag-value)
+ ("font-kerning" "auto" "normal" "none")
+ ("font-language-override" "normal" string)
+ ("font-size" absolute-size relative-size length percentage)
+ ("font-size-adjust" "none" number)
+ ("font-stretch" "normal" "ultra-condensed" "extra-condensed"
+ "condensed" "semi-condensed" "semi-expanded" "expanded"
+ "extra-expanded" "ultra-expanded")
+ ("font-style" "normal" "italic" "oblique")
+ ("font-synthesis" "none" "weight" "style")
+ ("font-variant" "normal" "none" common-lig-values
+ discretionary-lig-values historical-lig-values
+ contextual-alt-values "stylistic()" "historical-forms"
+ "styleset()" "character-variant()" "swash()" "ornaments()"
+ "annotation()" "small-caps" "all-small-caps" "petite-caps"
+ "all-petite-caps" "unicase" "titling-caps" numeric-figure-values
+ numeric-spacing-values numeric-fraction-values "ordinal"
+ "slashed-zero" east-asian-variant-values east-asian-width-values
+ "ruby")
+ ("font-variant-alternates" "normal" "stylistic()"
+ "historical-forms" "styleset()" "character-variant()" "swash()"
+ "ornaments()" "annotation()")
+ ("font-variant-caps" "normal" "small-caps" "all-small-caps"
+ "petite-caps" "all-petite-caps" "unicase" "titling-caps")
+ ("font-variant-east-asian" "normal" east-asian-variant-values
+ east-asian-width-values "ruby")
+ ("font-variant-ligatures" "normal" "none" common-lig-values
+ discretionary-lig-values historical-lig-values
+ contextual-alt-values)
+ ("font-variant-numeric" "normal" numeric-figure-values
+ numeric-spacing-values numeric-fraction-values "ordinal"
+ "slashed-zero")
+ ("font-variant-position" "normal" "sub" "super")
+ ("font-weight" "normal" "bold" "bolder" "lighter" "100" "200"
+ "300" "400" "500" "600" "700" "800" "900")
+
+ ;; CSS Fragmentation Module Level 3
+ ;; (https://www.w3.org/TR/css-break-3/#property-index)
+ ("box-decoration-break" "slice" "clone")
+ ("break-after" "auto" "avoid" "avoid-page" "page" "left" "right"
+ "recto" "verso" "avoid-column" "column" "avoid-region" "region")
+ ("break-before" "auto" "avoid" "avoid-page" "page" "left" "right"
+ "recto" "verso" "avoid-column" "column" "avoid-region" "region")
+ ("break-inside" "auto" "avoid" "avoid-page" "avoid-column"
+ "avoid-region")
+ ("orphans" integer)
+ ("widows" integer)
+
+ ;; CSS Multi-column Layout Module
+ ;; (https://www.w3.org/TR/css3-multicol/#property-index)
+ ;; "break-after", "break-before", and "break-inside" are left out
+ ;; below, because they're already included in CSS Fragmentation
+ ;; Module Level 3.
+ ("column-count" integer "auto")
+ ("column-fill" "auto" "balance")
+ ("column-gap" length "normal")
+ ("column-rule" column-rule-width column-rule-style
+ column-rule-color "transparent")
+ ("column-rule-color" color)
+ ("column-rule-style" border-style)
+ ("column-rule-width" border-width)
+ ("column-span" "none" "all")
+ ("column-width" length "auto")
+ ("columns" column-width column-count)
;; CSS Overflow Module Level 3
;; (http://www.w3.org/TR/css-overflow-3/#property-index)
- "max-lines" "overflow" "overflow-x" "overflow-y"
+ ("max-lines" "none" integer)
+ ("overflow" "visible" "hidden" "scroll" "auto" "paged-x" "paged-y"
+ "paged-x-controls" "paged-y-controls" "fragments")
+ ("overflow-x" "visible" "hidden" "scroll" "auto" "paged-x"
+ "paged-y" "paged-x-controls" "paged-y-controls" "fragments")
+ ("overflow-y" "visible" "hidden" "scroll" "auto" "paged-x"
+ "paged-y" "paged-x-controls" "paged-y-controls" "fragments")
;; CSS Text Decoration Module Level 3
;; (http://dev.w3.org/csswg/css-text-decor-3/#property-index)
- "text-decoration" "text-decoration-color" "text-decoration-line"
- "text-decoration-skip" "text-decoration-style" "text-emphasis"
- "text-emphasis-color" "text-emphasis-position" "text-emphasis-style"
- "text-shadow" "text-underline-position"
+ ("text-decoration" text-decoration-line text-decoration-style
+ text-decoration-color)
+ ("text-decoration-color" color)
+ ("text-decoration-line" "none" "underline" "overline"
+ "line-through" "blink")
+ ("text-decoration-skip" "none" "objects" "spaces" "ink" "edges"
+ "box-decoration")
+ ("text-decoration-style" "solid" "double" "dotted" "dashed"
+ "wavy")
+ ("text-emphasis" text-emphasis-style text-emphasis-color)
+ ("text-emphasis-color" color)
+ ("text-emphasis-position" "over" "under" "right" "left")
+ ("text-emphasis-style" "none" "filled" "open" "dot" "circle"
+ "double-circle" "triangle" "sesame" string)
+ ("text-shadow" "none" length color)
+ ("text-underline-position" "auto" "under" "left" "right")
;; CSS Text Module Level 3
;; (http://www.w3.org/TR/css3-text/#property-index)
- "hanging-punctuation" "hyphens" "letter-spacing" "line-break"
- "overflow-wrap" "tab-size" "text-align" "text-align-last"
- "text-indent" "text-justify" "text-transform" "white-space"
- "word-break" "word-spacing" "word-wrap"
+ ("hanging-punctuation" "none" "first" "force-end" "allow-end"
+ "last")
+ ("hyphens" "none" "manual" "auto")
+ ("letter-spacing" "normal" length)
+ ("line-break" "auto" "loose" "normal" "strict")
+ ("overflow-wrap" "normal" "break-word")
+ ("tab-size" integer length)
+ ("text-align" "start" "end" "left" "right" "center" "justify"
+ "match-parent")
+ ("text-align-last" "auto" "start" "end" "left" "right" "center"
+ "justify")
+ ("text-indent" length percentage)
+ ("text-justify" "auto" "none" "inter-word" "distribute")
+ ("text-transform" "none" "capitalize" "uppercase" "lowercase"
+ "full-width")
+ ("white-space" "normal" "pre" "nowrap" "pre-wrap" "pre-line")
+ ("word-break" "normal" "keep-all" "break-all")
+ ("word-spacing" "normal" length percentage)
+ ("word-wrap" "normal" "break-word")
;; CSS Transforms Module Level 1
;; (http://www.w3.org/TR/css3-2d-transforms/#property-index)
- "backface-visibility" "perspective" "perspective-origin"
- "transform" "transform-origin" "transform-style"
+ ("backface-visibility" "visible" "hidden")
+ ("perspective" "none" length)
+ ("perspective-origin" "left" "center" "right" "top" "bottom"
+ percentage length)
+ ("transform" "none" transform-list)
+ ("transform-origin" "left" "center" "right" "top" "bottom"
+ percentage length)
+ ("transform-style" "flat" "preserve-3d")
;; CSS Transitions
;; (http://www.w3.org/TR/css3-transitions/#property-index)
- "transition" "transition-delay" "transition-duration"
- "transition-property" "transition-timing-function"
+ ("transition" single-transition)
+ ("transition-delay" time)
+ ("transition-duration" time)
+ ("transition-property" "none" single-transition-property "all")
+ ("transition-timing-function" single-transition-timing-function)
;; Filter Effects Module Level 1
;; (http://www.w3.org/TR/filter-effects/#property-index)
- "color-interpolation-filters" "filter" "flood-color"
- "flood-opacity" "lighting-color")
+ ("color-interpolation-filters" "auto" "sRGB" "linearRGB")
+ ("filter" "none" filter-function-list)
+ ("flood-color" color)
+ ("flood-opacity" number percentage)
+ ("lighting-color" color))
+ "Identifiers for properties and their possible values.
+The CAR of each entry is the name of a property, while the CDR is
+a list of possible values for that property. String values in
+the CDRs represent literal values, while symbols represent one of
+the value classes found in `css-value-class-alist'. If a symbol
+is not found in `css-value-class-alist', it's interpreted as a
+reference back to one of the properties in this list. Some
+symbols, such as `number' or `identifier', don't produce any
+further value candidates, since that list would be infinite.")
+
+(defconst css-property-ids
+ (mapcar #'car css-property-alist)
"Identifiers for properties.")
+(defconst css-value-class-alist
+ '((absolute-size
+ "xx-small" "x-small" "small" "medium" "large" "x-large"
+ "xx-large")
+ (alphavalue number)
+ (angle "calc()")
+ (attachment "scroll" "fixed" "local")
+ (bg-image image "none")
+ (bg-layer bg-image position repeat-style attachment box)
+ (bg-size length percentage "auto" "cover" "contain")
+ (box "border-box" "padding-box" "content-box")
+ (color
+ "aqua" "black" "blue" "fuchsia" "gray" "green" "lime" "maroon"
+ "navy" "olive" "orange" "purple" "red" "silver" "teal" "white"
+ "yellow" "transparent")
+ (common-lig-values "common-ligatures" "no-common-ligatures")
+ (contextual-alt-values "contextual" "no-contextual")
+ (counter "counter()" "counters()")
+ (discretionary-lig-values
+ "discretionary-ligatures" "no-discretionary-ligatures")
+ (east-asian-variant-values
+ "jis78" "jis83" "jis90" "jis04" "simplified" "traditional")
+ (east-asian-width-values "full-width" "proportional-width")
+ (family-name "Courier" "Helvetica" "Times")
+ (feature-tag-value string integer "on" "off")
+ (filter-function
+ "blur()" "brightness()" "contrast()" "drop-shadow()"
+ "grayscale()" "hue-rotate()" "invert()" "opacity()" "sepia()"
+ "saturate()")
+ (filter-function-list filter-function uri)
+ (final-bg-layer
+ bg-image position repeat-style attachment box color)
+ (font-variant-css21 "normal" "small-caps")
+ (frequency "calc()")
+ (generic-family
+ "serif" "sans-serif" "cursive" "fantasy" "monospace")
+ (generic-voice "male" "female" "child")
+ (gradient
+ linear-gradient radial-gradient repeating-linear-gradient
+ repeating-radial-gradient)
+ (historical-lig-values
+ "historical-ligatures" "no-historical-ligatures")
+ (image uri image-list element-reference gradient)
+ (image-list "image()")
+ (integer "calc()")
+ (length "calc()" number)
+ (line-height "normal" number length percentage)
+ (line-style
+ "none" "hidden" "dotted" "dashed" "solid" "double" "groove"
+ "ridge" "inset" "outset")
+ (line-width length "thin" "medium" "thick")
+ (linear-gradient "linear-gradient()")
+ (margin-width "auto" length percentage)
+ (number "calc()")
+ (numeric-figure-values "lining-nums" "oldstyle-nums")
+ (numeric-fraction-values "diagonal-fractions" "stacked-fractions")
+ (numeric-spacing-values "proportional-nums" "tabular-nums")
+ (padding-width length percentage)
+ (position
+ "left" "center" "right" "top" "bottom" percentage length)
+ (radial-gradient "radial-gradient()")
+ (relative-size "larger" "smaller")
+ (repeat-style
+ "repeat-x" "repeat-y" "repeat" "space" "round" "no-repeat")
+ (repeating-linear-gradient "repeating-linear-gradient()")
+ (repeating-radial-gradient "repeating-radial-gradient()")
+ (shadow "inset" length color)
+ (shape "rect()")
+ (single-animation-direction
+ "normal" "reverse" "alternate" "alternate-reverse")
+ (single-animation-fill-mode "none" "forwards" "backwards" "both")
+ (single-animation-iteration-count "infinite" number)
+ (single-animation-name "none" identifier)
+ (single-animation-play-state "running" "paused")
+ (single-timing-function single-transition-timing-function)
+ (single-transition
+ "none" single-transition-property time
+ single-transition-timing-function)
+ (single-transition-property "all" identifier)
+ (single-transition-timing-function
+ "ease" "linear" "ease-in" "ease-out" "ease-in-out" "step-start"
+ "step-end" "steps()" "cubic-bezier()")
+ (specific-voice identifier)
+ (target-name string)
+ (time "calc()")
+ (transform-list
+ "matrix()" "translate()" "translateX()" "translateY()" "scale()"
+ "scaleX()" "scaleY()" "rotate()" "skew()" "skewX()" "skewY()"
+ "matrix3d()" "translate3d()" "translateZ()" "scale3d()"
+ "scaleZ()" "rotate3d()" "rotateX()" "rotateY()" "rotateZ()"
+ "perspective()")
+ (uri "url()")
+ (width length percentage "auto")
+ (x number)
+ (y number))
+ "Property value classes and their values.
+The format is similar to that of `css-property-alist', except
+that the CARs aren't actual CSS properties, but rather a name for
+a class of values, and that symbols in the CDRs always refer to
+other entries in this list, not to properties.
+
+The following classes have been left out above because they
+cannot be completed sensibly: `element-reference', `id',
+`identifier', `percentage', and `string'.")
+
(defcustom css-electric-keys '(?\} ?\;) ;; '()
"Self inserting keys which should trigger re-indentation."
:version "22.2"
"Face to use for vendor-specific properties.")
(defun css--font-lock-keywords (&optional sassy)
- `((,(concat "!\\s-*"
- (regexp-opt (append (if sassy scss-bang-ids)
- css-bang-ids)))
+ `((,(concat "!\\s-*" (regexp-opt css--bang-ids))
(0 font-lock-builtin-face))
;; Atrules keywords. IDs not in css-at-ids are valid (ignored).
;; In fact the regexp should probably be
:type 'integer
:safe 'integerp)
-(require 'smie)
-
(defconst css-smie-grammar
(smie-prec2->grammar
(smie-precs->prec2 '((assoc ";") (assoc ",") (left ":")))))
(when (memq (char-before) '(?\{ ?\;))
(list start pos css-property-ids))))))
+(defun css--complete-bang-rule ()
+ "Complete bang-rule at point."
+ (save-excursion
+ (let ((pos (point)))
+ (skip-chars-backward "-[:alnum:]")
+ (when (eq (char-before) ?\!)
+ (list (point) pos css--bang-ids)))))
+
(defun css--complete-pseudo-element-or-class ()
"Complete pseudo-element or pseudo-class at point."
(save-excursion
(let ((pos (point)))
(skip-chars-backward "-[:alnum:]")
(when (eq (char-before) ?\@)
- (list (point) pos css-at-ids)))))
+ (list (point) pos css--at-ids)))))
+
+(defvar css--property-value-cache
+ (make-hash-table :test 'equal :size (length css-property-alist))
+ "Cache of previously completed property values.")
+
+(defun css--value-class-lookup (value-class)
+ "Return a list of value completion candidates for VALUE-CLASS.
+Completion candidates are looked up in `css-value-class-alist' by
+the symbol VALUE-CLASS."
+ (seq-uniq
+ (seq-mapcat
+ (lambda (value)
+ (if (stringp value)
+ (list value)
+ (css--value-class-lookup value)))
+ (cdr (assq value-class css-value-class-alist)))))
+
+(defun css--property-values (property)
+ "Return a list of value completion candidates for PROPERTY.
+Completion candidates are looked up in `css-property-alist' by
+the string PROPERTY."
+ (or (gethash property css--property-value-cache)
+ (let ((values
+ (seq-uniq
+ (seq-mapcat
+ (lambda (value)
+ (if (stringp value)
+ (list value)
+ (or (css--value-class-lookup value)
+ (css--property-values (symbol-name value)))))
+ (cdr (assoc property css-property-alist))))))
+ (puthash property values css--property-value-cache))))
+
+(defun css--complete-property-value ()
+ "Complete property value at point."
+ (let ((property
+ (save-excursion
+ (re-search-backward ":[^/]" (line-beginning-position) t)
+ (let ((property-end (point)))
+ (skip-chars-backward "-[:alnum:]")
+ (let ((property (buffer-substring (point) property-end)))
+ (car (member property css-property-ids)))))))
+ (when property
+ (let ((end (point)))
+ (save-excursion
+ (skip-chars-backward "[:graph:]")
+ (list (point) end
+ (cons "inherit" (css--property-values property))))))))
+
+(defvar css--html-tags (mapcar #'car html-tag-alist)
+ "List of HTML tags.
+Used to provide completion of HTML tags in selectors.")
+
+(defvar css--nested-selectors-allowed nil
+ "Non-nil if nested selectors are allowed in the current mode.")
+(make-variable-buffer-local 'css--nested-selectors-allowed)
+
+;; TODO: Currently only supports completion of HTML tags. By looking
+;; at open HTML mode buffers we should be able to provide completion
+;; of user-defined classes and IDs too.
+(defun css--complete-selector ()
+ "Complete part of a CSS selector at point."
+ (when (or (= (nth 0 (syntax-ppss)) 0) css--nested-selectors-allowed)
+ (save-excursion
+ (let ((end (point)))
+ (skip-chars-backward "-[:alnum:]")
+ (list (point) end css--html-tags)))))
(defun css-completion-at-point ()
"Complete current symbol at point.
-Currently supports completion of CSS properties, pseudo-elements,
-pseudo-classes, and at-rules."
- (or (css--complete-property)
+Currently supports completion of CSS properties, property values,
+pseudo-elements, pseudo-classes, at-rules, and bang-rules."
+ (or (css--complete-bang-rule)
+ (css--complete-property-value)
(css--complete-pseudo-element-or-class)
- (css--complete-at-rule)))
+ (css--complete-at-rule)
+ (seq-let (prop-beg prop-end prop-table) (css--complete-property)
+ (seq-let (sel-beg sel-end sel-table) (css--complete-selector)
+ (when (or prop-table sel-table)
+ `(,@(if prop-table
+ (list prop-beg prop-end)
+ (list sel-beg sel-end))
+ ,(completion-table-merge prop-table sel-table)))))))
;;;###autoload
(define-derived-mode css-mode prog-mode "CSS"
(let ((st (make-syntax-table css-mode-syntax-table)))
(modify-syntax-entry ?/ ". 124" st)
(modify-syntax-entry ?\n ">" st)
+ ;; Variable names are prefixed by $.
+ (modify-syntax-entry ?$ "'" st)
st))
-(defvar scss-font-lock-keywords
+(defun scss-font-lock-keywords ()
(append `((,(concat "$" css-ident-re) (0 font-lock-variable-name-face)))
(css--font-lock-keywords 'sassy)
`((,(concat "@mixin[ \t]+\\(" css-ident-re "\\)[ \t]*(")
(setq-local comment-continue " *")
(setq-local comment-start-skip "/[*/]+[ \t]*")
(setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*+/\\)")
- (setq-local font-lock-defaults '(scss-font-lock-keywords nil t)))
+ (setq-local css--at-ids (append css-at-ids scss-at-ids))
+ (setq-local css--bang-ids (append css-bang-ids scss-bang-ids))
+ (setq-local css--nested-selectors-allowed t)
+ (setq-local font-lock-defaults
+ (list (scss-font-lock-keywords) nil t)))
(provide 'css-mode)
;;; css-mode.el ends here
(interactive (progn
(barf-if-buffer-read-only)
(list (if current-prefix-arg 'full) t)))
- (or
- ;; 1. Fill the region if it is active when called interactively.
- (and region transient-mark-mode mark-active
- (not (eq (region-beginning) (region-end)))
- (or (fill-region (region-beginning) (region-end) justify) t))
- ;; 2. Try fill-paragraph-function.
- (and (not (eq fill-paragraph-function t))
- (or fill-paragraph-function
- (and (minibufferp (current-buffer))
- (= 1 (point-min))))
- (let ((function (or fill-paragraph-function
- ;; In the minibuffer, don't count the width
- ;; of the prompt.
- 'fill-minibuffer-function))
- ;; If fill-paragraph-function is set, it probably takes care
- ;; of comments and stuff. If not, it will have to set
- ;; fill-paragraph-handle-comment back to t explicitly or
- ;; return nil.
- (fill-paragraph-handle-comment nil)
- (fill-paragraph-function t))
- (funcall function justify)))
- ;; 3. Try our syntax-aware filling code.
- (and fill-paragraph-handle-comment
- ;; Our code only handles \n-terminated comments right now.
- comment-start (equal comment-end "")
- (let ((fill-paragraph-handle-comment nil))
- (fill-comment-paragraph justify)))
- ;; 4. If it all fails, default to the good ol' text paragraph filling.
- (let ((before (point))
- (paragraph-start paragraph-start)
- ;; Fill prefix used for filling the paragraph.
- fill-pfx)
- ;; Try to prevent code sections and comment sections from being
- ;; filled together.
- (when (and fill-paragraph-handle-comment comment-start-skip)
- (setq paragraph-start
- (concat paragraph-start "\\|[ \t]*\\(?:"
- comment-start-skip "\\)")))
- (save-excursion
- ;; To make sure the return value of forward-paragraph is meaningful,
- ;; we have to start from the beginning of line, otherwise skipping
- ;; past the last few chars of a paragraph-separator would count as
- ;; a paragraph (and not skipping any chars at EOB would not count
- ;; as a paragraph even if it is).
- (move-to-left-margin)
- (if (not (zerop (fill-forward-paragraph 1)))
- ;; There's no paragraph at or after point: give up.
- (setq fill-pfx "")
- (let ((end (point))
- (beg (progn (fill-forward-paragraph -1) (point))))
- (goto-char before)
- (setq fill-pfx
- (if use-hard-newlines
- ;; Can't use fill-region-as-paragraph, since this
- ;; paragraph may still contain hard newlines. See
- ;; fill-region.
- (fill-region beg end justify)
- (fill-region-as-paragraph beg end justify))))))
- fill-pfx)))
+ (let ((hash (and (not (buffer-modified-p))
+ (buffer-hash))))
+ (prog1
+ (or
+ ;; 1. Fill the region if it is active when called interactively.
+ (and region transient-mark-mode mark-active
+ (not (eq (region-beginning) (region-end)))
+ (or (fill-region (region-beginning) (region-end) justify) t))
+ ;; 2. Try fill-paragraph-function.
+ (and (not (eq fill-paragraph-function t))
+ (or fill-paragraph-function
+ (and (minibufferp (current-buffer))
+ (= 1 (point-min))))
+ (let ((function (or fill-paragraph-function
+ ;; In the minibuffer, don't count
+ ;; the width of the prompt.
+ 'fill-minibuffer-function))
+ ;; If fill-paragraph-function is set, it probably
+ ;; takes care of comments and stuff. If not, it
+ ;; will have to set fill-paragraph-handle-comment
+ ;; back to t explicitly or return nil.
+ (fill-paragraph-handle-comment nil)
+ (fill-paragraph-function t))
+ (funcall function justify)))
+ ;; 3. Try our syntax-aware filling code.
+ (and fill-paragraph-handle-comment
+ ;; Our code only handles \n-terminated comments right now.
+ comment-start (equal comment-end "")
+ (let ((fill-paragraph-handle-comment nil))
+ (fill-comment-paragraph justify)))
+ ;; 4. If it all fails, default to the good ol' text paragraph filling.
+ (let ((before (point))
+ (paragraph-start paragraph-start)
+ ;; Fill prefix used for filling the paragraph.
+ fill-pfx)
+ ;; Try to prevent code sections and comment sections from being
+ ;; filled together.
+ (when (and fill-paragraph-handle-comment comment-start-skip)
+ (setq paragraph-start
+ (concat paragraph-start "\\|[ \t]*\\(?:"
+ comment-start-skip "\\)")))
+ (save-excursion
+ ;; To make sure the return value of forward-paragraph is
+ ;; meaningful, we have to start from the beginning of
+ ;; line, otherwise skipping past the last few chars of a
+ ;; paragraph-separator would count as a paragraph (and
+ ;; not skipping any chars at EOB would not count as a
+ ;; paragraph even if it is).
+ (move-to-left-margin)
+ (if (not (zerop (fill-forward-paragraph 1)))
+ ;; There's no paragraph at or after point: give up.
+ (setq fill-pfx "")
+ (let ((end (point))
+ (beg (progn (fill-forward-paragraph -1) (point))))
+ (goto-char before)
+ (setq fill-pfx
+ (if use-hard-newlines
+ ;; Can't use fill-region-as-paragraph, since this
+ ;; paragraph may still contain hard newlines. See
+ ;; fill-region.
+ (fill-region beg end justify)
+ (fill-region-as-paragraph beg end justify))))))
+ fill-pfx))
+ ;; If we didn't change anything in the buffer (and the buffer
+ ;; was previously unmodified), then flip the modification status
+ ;; back to "unchanged".
+ (when (and hash
+ (equal hash (buffer-hash)))
+ (set-buffer-modified-p nil)))))
(declare-function comment-search-forward "newcomment" (limit &optional noerror))
(declare-function comment-string-strip "newcomment" (str beforep afterp))
:version "24.1")
(defcustom flyspell-sort-corrections nil
- "Non-nil means, sort the corrections alphabetically before popping them."
+ "If non-nil, sort the corrections before popping them.
+The sorting is controlled by the `flyspell-sort-corrections-function'
+variable, and defaults to sorting alphabetically."
:group 'flyspell
:version "21.1"
:type 'boolean)
+(defcustom flyspell-sort-corrections-function
+ 'flyspell-sort-corrections-alphabetically
+ "The function used to sort corrections.
+This only happens if `flyspell-sort-corrections' is non-nil. The
+function takes three parameters -- the two correction candidates
+to be sorted, and the third parameter is the word that's being
+corrected."
+ :version "25.2"
+ :type 'function
+ :group 'flyspell)
+
+(defun flyspell-sort-corrections-alphabetically (corr1 corr2 _)
+ (string< corr1 corr2))
+
+(defun flyspell-sort (corrs word)
+ (if flyspell-sort-corrections
+ (sort corrs
+ (lambda (c1 c2)
+ (funcall flyspell-sort-corrections-function c1 c2 word)))
+ corrs))
+
(defcustom flyspell-duplicate-distance 400000
"The maximum distance for finding duplicates of unrecognized words.
This applies to the feature that when a word is not found in the dictionary,
(defun flyspell-notify-misspell (word poss)
(let ((replacements (if (stringp poss)
poss
- (if flyspell-sort-corrections
- (sort (car (cdr (cdr poss))) 'string<)
- (car (cdr (cdr poss)))))))
+ (flyspell-sort (car (cdr (cdr poss))) word))))
(if flyspell-issue-message-flag
(message "misspelling `%s' %S" word replacements))))
(error "Ispell: error in Ispell process"))
(t
;; The word is incorrect, we have to propose a replacement.
- (let ((replacements (if flyspell-sort-corrections
- (sort (car (cdr (cdr poss))) 'string<)
- (car (cdr (cdr poss))))))
+ (let ((replacements (flyspell-sort (car (cdr (cdr poss)))
+ word)))
(setq flyspell-auto-correct-region nil)
(if (consp replacements)
(progn
(setq event (list (list (car (cdr mouse-pos))
(1+ (cdr (cdr mouse-pos))))
(car mouse-pos)))))
- (let* ((corrects (if flyspell-sort-corrections
- (sort (car (cdr (cdr poss))) 'string<)
- (car (cdr (cdr poss)))))
+ (let* ((corrects (flyspell-sort (car (cdr (cdr poss))) word))
(cor-menu (if (consp corrects)
(mapcar (lambda (correct)
(list correct correct))
;;*---------------------------------------------------------------------*/
(defun flyspell-xemacs-popup (poss word cursor-location start end save)
"The XEmacs popup menu."
- (let* ((corrects (if flyspell-sort-corrections
- (sort (car (cdr (cdr poss))) 'string<)
- (car (cdr (cdr poss)))))
+ (let* ((corrects (flyspell-sort (car (cdr (cdr poss))) word))
(cor-menu (if (consp corrects)
(mapcar (lambda (correct)
(vector correct
-;;; ispell.el --- interface to International Ispell Versions 3.1 and 3.2
+;;; ispell.el --- interface to International Ispell Versions 3.1 and 3.2 -*- lexical-binding:t -*-
;; Copyright (C) 1994-1995, 1997-2016 Free Software Foundation, Inc.
;; your own dictionaries.
;; Depending on the mail system you use, you may want to include these:
-;; (add-hook 'news-inews-hook 'ispell-message)
-;; (add-hook 'mail-send-hook 'ispell-message)
-;; (add-hook 'mh-before-send-letter-hook 'ispell-message)
+;; (add-hook 'news-inews-hook #'ispell-message)
+;; (add-hook 'mail-send-hook #'ispell-message)
+;; (add-hook 'mh-before-send-letter-hook #'ispell-message)
;; Ispell has a TeX parser and a nroff parser (the default).
;; The parsing is controlled by the variable ispell-parser. Currently
;; Fixed bug in returning to nroff mode from tex mode.
;;; Compatibility code for XEmacs and (not too) older emacsen:
-
-(eval-and-compile ;; Protect against declare-function undefined in XEmacs
- (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
-
-(declare-function ispell-check-minver "ispell" (v1 v2))
-(declare-function ispell-looking-back "ispell"
- (regexp &optional limit &rest ignored))
-
-(if (fboundp 'version<=)
- (defalias 'ispell-check-minver 'version<=)
- (defun ispell-check-minver (minver version)
- "Check if string VERSION is at least string MINVER.
+(defalias 'ispell-check-minver
+ (if (fboundp 'version<=) 'version<=
+ (lambda (minver version)
+ "Check if string VERSION is at least string MINVER.
Both must be in [0-9]+.[0-9]+... format. This is a fallback
compatibility function in case `version<=' is not available."
- (let ((pending t)
- (return t)
- start-ver start-mver)
- ;; Loop until an absolute greater or smaller condition is reached
- ;; or until no elements are left in any of version and minver. In
- ;; this case version is exactly the minimal, so return OK.
- (while pending
- (let (ver mver)
- (if (string-match "[0-9]+" version start-ver)
- (setq start-ver (match-end 0)
- ver (string-to-number (match-string 0 version))))
- (if (string-match "[0-9]+" minver start-mver)
- (setq start-mver (match-end 0)
- mver (string-to-number (match-string 0 minver))))
-
- (if (or ver mver)
- (progn
- (or ver (setq ver 0))
- (or mver (setq mver 0))
- ;; If none of below conditions match, this element is the
- ;; same. Go checking next element.
- (if (> ver mver)
- (setq pending nil)
- (if (< ver mver)
- (setq pending nil
- return nil))))
- (setq pending nil))))
- return)))
+ (let ((pending t)
+ (return t)
+ start-ver start-mver)
+ ;; Loop until an absolute greater or smaller condition is reached
+ ;; or until no elements are left in any of version and minver. In
+ ;; this case version is exactly the minimal, so return OK.
+ (while pending
+ (let (ver mver)
+ (if (string-match "[0-9]+" version start-ver)
+ (setq start-ver (match-end 0)
+ ver (string-to-number (match-string 0 version))))
+ (if (string-match "[0-9]+" minver start-mver)
+ (setq start-mver (match-end 0)
+ mver (string-to-number (match-string 0 minver))))
+
+ (if (or ver mver)
+ (progn
+ (or ver (setq ver 0))
+ (or mver (setq mver 0))
+ ;; If none of below conditions match, this element is the
+ ;; same. Go checking next element.
+ (if (> ver mver)
+ (setq pending nil)
+ (if (< ver mver)
+ (setq pending nil
+ return nil))))
+ (setq pending nil))))
+ return))))
;; XEmacs does not have looking-back
-(if (fboundp 'looking-back)
- (defalias 'ispell-looking-back 'looking-back)
- (defun ispell-looking-back (regexp &optional limit &rest ignored)
- "Return non-nil if text before point matches regular expression REGEXP.
+(defalias 'ispell-looking-back
+ (if (fboundp 'looking-back) 'looking-back
+ (lambda (regexp &optional limit &rest ignored)
+ "Return non-nil if text before point matches regular expression REGEXP.
Like `looking-at' except matches before point, and is slower.
LIMIT if non-nil speeds up the search by specifying a minimum
starting position, to avoid checking matches that would start
This is a stripped down compatibility function for use when
full featured `looking-back' function is missing."
- (save-excursion
- (re-search-backward (concat "\\(?:" regexp "\\)\\=") limit t))))
+ (save-excursion
+ (re-search-backward (concat "\\(?:" regexp "\\)\\=") limit t)))))
;;; XEmacs21 does not have `with-no-warnings'. Taken from org mode.
(defmacro ispell-with-no-warnings (&rest body)
;;; Code:
+(eval-when-compile (require 'cl-lib))
+
(defvar mail-yank-prefix)
(defgroup ispell nil
(setq default-directory (expand-file-name "~/")))
(apply 'call-process-region args)))
+(defvar ispell-debug-buffer)
+
(defun ispell-create-debug-buffer (&optional append)
"Create an ispell debug buffer for debugging output.
If APPEND is non-nil, append the info to previous buffer if exists,
(if (cadr (assoc tmp-dict ispell-dictionary-alist))
(ispell-print-if-debug
"ispell-hfde: %s already expanded; skipping.\n" tmp-dict)
- (add-to-list 'use-for-dicts tmp-dict))))))
+ (cl-pushnew tmp-dict use-for-dicts :test #'equal))))))
(ispell-print-if-debug
"ispell-hfde: Filling %s entry. Use for %s.\n" dict use-for-dicts)
;; The final loop.
(dolist (entry ispell-dictionary-alist)
- (if (member (car entry) use-for-dicts)
- (add-to-list 'newlist
- (append (list (car entry)) dict-args-cdr))
- (add-to-list 'newlist entry)))
+ (cl-pushnew (if (member (car entry) use-for-dicts)
+ (cons (car entry) dict-args-cdr)
+ entry)
+ newlist :test #'equal))
(setq ispell-dictionary-alist newlist))))
(defun ispell-parse-hunspell-affix-file (dict-key)
(chars-list (append otherchars-string nil)))
(setq chars-list (delq ?\ chars-list))
(dolist (ch chars-list)
- (add-to-list 'otherchars-list ch)))))
+ (cl-pushnew ch otherchars-list :test #'equal)))))
;; Cons the argument for the -d switch.
(setq dict-arg (concat dict-arg
(if (> (length dict-arg) 0) ",")
"[[:alpha:]]"
"[^[:alpha:]]"
(if otherchars-list
- (regexp-opt (mapcar 'char-to-string otherchars-list))
+ (regexp-opt (mapcar #'char-to-string otherchars-list))
"")
t ; many-otherchars-p: We can't tell, set to t.
(list "-d" dict-arg)
(or (assoc first-dict ispell-local-dictionary-alist)
(assoc first-dict ispell-dictionary-alist)
(error "Unknown dictionary: %s" first-dict)))
- (add-to-list 'ispell-dictionary-alist (list dict '()))
+ (cl-pushnew (list dict '()) ispell-dictionary-alist :test #'equal)
(ispell-hunspell-fill-dictionary-entry dict))
(defun ispell-find-hunspell-dictionaries ()
(ispell-print-if-debug
"++ ispell-fhd: dict-entry:%s name:%s basename:%s affix-file:%s\n"
dict full-name basename affix-file)
- (add-to-list 'ispell-hunspell-dict-paths-alist
- (list basename affix-file)))
+ (cl-pushnew (list basename affix-file)
+ ispell-hunspell-dict-paths-alist :test #'equal))
(ispell-print-if-debug
"-- ispell-fhd: Skipping entry: %s\n" dict)))))
;; Remove entry from aliases alist if explicit dict was found.
(ispell-print-if-debug
"-- ispell-fhd: Excluding %s alias. Standalone dict found.\n"
(car dict))
- (add-to-list 'newlist dict)))
+ (cl-pushnew dict newlist :test #'equal)))
(setq ispell-dicts-name2locale-equivs-alist newlist))
;; Add known hunspell aliases
(dolist (dict-equiv ispell-dicts-name2locale-equivs-alist)
ispell-hunspell-dict-paths-alist))))
(ispell-print-if-debug "++ ispell-fhd: Adding alias %s -> %s.\n"
dict-equiv-key affix-file)
- (add-to-list
- 'ispell-hunspell-dict-paths-alist
- (list dict-equiv-key affix-file))))))
+ (cl-pushnew (list dict-equiv-key affix-file)
+ ispell-hunspell-dict-paths-alist :test #'equal)))))
;; Parse and set values for default dictionary.
(setq hunspell-default-dict (car hunspell-default-dict))
(setq hunspell-default-dict-entry
(ispell-parse-hunspell-affix-file hunspell-default-dict))
;; Create an alist of found dicts with only names, except for default dict.
(setq ispell-hunspell-dictionary-alist
- (list (append (list nil) (cdr hunspell-default-dict-entry))))
- (dolist (dict (mapcar 'car ispell-hunspell-dict-paths-alist))
- (if (string= dict hunspell-default-dict)
- (add-to-list 'ispell-hunspell-dictionary-alist
- hunspell-default-dict-entry)
- (add-to-list 'ispell-hunspell-dictionary-alist
- (list dict))))))
+ (list (cons nil (cdr hunspell-default-dict-entry))))
+ (dolist (dict (mapcar #'car ispell-hunspell-dict-paths-alist))
+ (cl-pushnew (if (string= dict hunspell-default-dict)
+ hunspell-default-dict-entry
+ (list dict))
+ ispell-hunspell-dictionary-alist :test #'equal))))
;; Set params according to the selected spellchecker
(setq skip-dict t)))
(unless skip-dict
- (add-to-list 'tmp-dicts-alist
- (list
- dict-name ; dict name
- (nth 1 adict) ; casechars
- (nth 2 adict) ; not-casechars
- (nth 3 adict) ; otherchars
- (nth 4 adict) ; many-otherchars-p
- ispell-args ; ispell-args
- (nth 6 adict) ; extended-character-mode
- (nth 7 adict) ; dict encoding
- ))))
+ (cl-pushnew (list
+ dict-name ; dict name
+ (nth 1 adict) ; casechars
+ (nth 2 adict) ; not-casechars
+ (nth 3 adict) ; otherchars
+ (nth 4 adict) ; many-otherchars-p
+ ispell-args ; ispell-args
+ (nth 6 adict) ; extended-character-mode
+ (nth 7 adict) ; dict encoding
+ )
+ tmp-dicts-alist :test #'equal)))
(setq ispell-dictionary-base-alist tmp-dicts-alist))))
(run-hooks 'ispell-initialize-spellchecker-hook)
ispell-base-dicts-override-alist
ispell-dictionary-base-alist))
(unless (assoc (car dict) all-dicts-alist)
- (add-to-list 'all-dicts-alist dict)))
+ (push dict all-dicts-alist)))
(setq ispell-dictionary-alist all-dicts-alist))
;; If Emacs flavor supports [:alpha:] use it for global dicts. If
(if ispell-emacs-alpha-regexp
(let (tmp-dicts-alist)
(dolist (adict ispell-dictionary-alist)
- (if (cadr adict) ;; Do not touch hunspell uninitialized entries
- (add-to-list 'tmp-dicts-alist
- (list
- (nth 0 adict) ; dict name
- "[[:alpha:]]" ; casechars
- "[^[:alpha:]]" ; not-casechars
- (nth 3 adict) ; otherchars
- (nth 4 adict) ; many-otherchars-p
- (nth 5 adict) ; ispell-args
- (nth 6 adict) ; extended-character-mode
- (if ispell-encoding8-command
- 'utf-8
- (nth 7 adict))))
- (add-to-list 'tmp-dicts-alist adict)))
+ (cl-pushnew (if (cadr adict) ;; Do not touch hunspell uninitialized entries
+ (list
+ (nth 0 adict) ; dict name
+ "[[:alpha:]]" ; casechars
+ "[^[:alpha:]]" ; not-casechars
+ (nth 3 adict) ; otherchars
+ (nth 4 adict) ; many-otherchars-p
+ (nth 5 adict) ; ispell-args
+ (nth 6 adict) ; extended-character-mode
+ (if ispell-encoding8-command
+ 'utf-8
+ (nth 7 adict)))
+ adict)
+ tmp-dicts-alist :test #'equal))
(setq ispell-dictionary-alist tmp-dicts-alist)))))
(defun ispell-valid-dictionary-list ()
("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end)
("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end)
;;("\\\\author" ispell-tex-arg-end)
+ ("\\\\cref" ispell-tex-arg-end)
("\\\\bibliographystyle" ispell-tex-arg-end)
("\\\\makebox" ispell-tex-arg-end 0)
("\\\\e?psfig" ispell-tex-arg-end)
nil)
((or (= char ?a) (= char ?A)) ; accept word without insert
(ispell-send-string (concat "@" word "\n"))
- (add-to-list 'ispell-buffer-session-localwords word)
+ (cl-pushnew word ispell-buffer-session-localwords
+ :test #'equal)
(and (fboundp 'flyspell-unhighlight-at)
(flyspell-unhighlight-at start))
(or ispell-buffer-local-name ; session localwords might conflict
;; This is the case when a process dies or fails. The default behavior
;; in this case treats the next input received as fresh input.
-(defun ispell-filter (process output)
+(defun ispell-filter (_process output)
"Output filter function for ispell, grep, and look."
(let ((start 0)
(continue t)
(ispell-send-string "\032\n") ; so Ispell prints version and exits
t)))
-
(defun ispell-init-process ()
"Check status of Ispell process and start if necessary."
(let* (;; Basename of dictionary used by the spell-checker
(dict-bname (or (car (cdr (member "-d" (ispell-get-ispell-args))))
ispell-current-dictionary))
;; The directory where process was started.
- (current-ispell-directory default-directory)
+ (current-ispell-directory default-directory) ;FIXME: Unused?
;; The default directory for the process.
;; Use "~/" as default-directory unless using Ispell with per-dir
;; personal dictionaries and not in a minibuffer under XEmacs
;; Otherwise we get cool errors like "Can't open ".
(sleep-for 1)
(ispell-accept-output 3)
- (error "%s" (mapconcat 'identity ispell-filter "\n"))))
+ (error "%s" (mapconcat #'identity ispell-filter "\n"))))
(setq ispell-filter nil) ; Discard version ID line
(let ((extended-char-mode (ispell-get-extended-character-mode)))
(if extended-char-mode ; ~ extended character mode
(list (completing-read
"Use new dictionary (RET for current, SPC to complete): "
(and (fboundp 'ispell-valid-dictionary-list)
- (mapcar 'list (ispell-valid-dictionary-list)))
+ (mapcar #'list (ispell-valid-dictionary-list)))
nil t)
current-prefix-arg))
(ispell-set-spellchecker-params) ; Initialize variables and dicts alists
Includes `ispell-skip-region-alist' plus tex, tib, html, and comment keys.
Must be called after `ispell-buffer-local-parsing' due to dependence on mode."
(mapconcat
- 'identity
+ #'identity
(delq nil
(list
;; messages
(setq case-fold-search nil) ; Try and respect case of word.
(cond
((string-equal (upcase word) word)
- (setq possibilities (mapcar 'upcase possibilities)))
+ (setq possibilities (mapcar #'upcase possibilities)))
((eq (upcase (aref word 0)) (aref word 0))
(setq possibilities (mapcar (function
(lambda (pos)
To spell-check whenever a message is sent, include the appropriate lines
in your init file:
- (add-hook \\='message-send-hook \\='ispell-message) ;; GNUS 5
- (add-hook \\='news-inews-hook \\='ispell-message) ;; GNUS 4
- (add-hook \\='mail-send-hook \\='ispell-message)
- (add-hook \\='mh-before-send-letter-hook \\='ispell-message)
+ (add-hook \\='message-send-hook #\\='ispell-message) ;; GNUS 5
+ (add-hook \\='news-inews-hook #\\='ispell-message) ;; GNUS 4
+ (add-hook \\='mail-send-hook #\\='ispell-message)
+ (add-hook \\='mh-before-send-letter-hook #\\='ispell-message)
You can bind this to the key C-c i in GNUS or mail by adding to
`news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
(insert comment-end)))))
(insert (concat " " word))))))))
+;;FIXME: Use `user-error' instead!
(add-to-list 'debug-ignored-errors "^No word found to check!$")
(provide 'ispell)
;;; reftex-auc.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-cite.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-dcr.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-global.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-index.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-parse.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-ref.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-sel.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
;;; reftex-toc.el ends here
;; Local Variables:
-;; generated-autoload-file: "reftex.el"
+;; generated-autoload-file: "reftex-loaddefs.el"
;; End:
(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.
(setq reftex-tables-dirty t) ; in case this file is evaluated by hand
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "reftex-auc" "reftex-auc.el" "32dc44348a7eaf247f63c81b3ead2ba4")
-;;; Generated autoloads from reftex-auc.el
-
-(autoload 'reftex-arg-label "reftex-auc" "\
-Use `reftex-label', `reftex-reference' or AUCTeX's code to insert label arg.
-What is being used depends upon `reftex-plug-into-AUCTeX'.
-
-\(fn OPTIONAL &optional PROMPT DEFINITION)" nil nil)
-
-(autoload 'reftex-arg-cite "reftex-auc" "\
-Use `reftex-citation' or AUCTeX's code to insert a cite-key macro argument.
-What is being used depends upon `reftex-plug-into-AUCTeX'.
-
-\(fn OPTIONAL &optional PROMPT DEFINITION)" nil nil)
-
-(autoload 'reftex-arg-index-tag "reftex-auc" "\
-Prompt for an index tag with completion.
-This is the name of an index, not the entry.
-
-\(fn OPTIONAL &optional PROMPT &rest ARGS)" nil nil)
-
-(autoload 'reftex-arg-index "reftex-auc" "\
-Prompt for an index entry completing with known entries.
-Completion is specific for just one index, if the macro or a tag
-argument identify one of multiple indices.
-
-\(fn OPTIONAL &optional PROMPT &rest ARGS)" nil nil)
-
-(autoload 'reftex-plug-into-AUCTeX "reftex-auc" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-toggle-plug-into-AUCTeX "reftex-auc" "\
-Toggle Interface between AUCTeX and RefTeX on and off.
-
-\(fn)" t nil)
-
-(autoload 'reftex-add-label-environments "reftex-auc" "\
-Add label environment descriptions to `reftex-label-alist-style'.
-The format of ENTRY-LIST is exactly like `reftex-label-alist'. See there
-for details.
-This function makes it possible to support RefTeX from AUCTeX style files.
-The entries in ENTRY-LIST will be processed after the user settings in
-`reftex-label-alist', and before the defaults (specified in
-`reftex-default-label-alist-entries'). Any changes made to
-`reftex-label-alist-style' will raise a flag to the effect that
-the label information is recompiled on next use.
-
-\(fn ENTRY-LIST)" nil nil)
-
-(defalias 'reftex-add-to-label-alist 'reftex-add-label-environments)
-
-(autoload 'reftex-add-section-levels "reftex-auc" "\
-Add entries to the value of `reftex-section-levels'.
-The added values are kept local to the current document. The format
-of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . LEVEL). See
-`reftex-section-levels' for an example.
-
-\(fn ENTRY-LIST)" nil nil)
-
-(autoload 'reftex-notice-new-section "reftex-auc" "\
-
-
-\(fn)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-cite" "reftex-cite.el" "7ee48dcf194ffd3cce3b7a2eb990e300")
-;;; Generated autoloads from reftex-cite.el
-
-(autoload 'reftex-default-bibliography "reftex-cite" "\
-Return the expanded value of variable `reftex-default-bibliography'.
-The expanded value is cached.
-
-\(fn)" nil nil)
-
-(autoload 'reftex-bib-or-thebib "reftex-cite" "\
-Test if BibTeX or \begin{thebibliography} should be used for the citation.
-Find the bof of the current file
-
-\(fn)" nil nil)
-
-(autoload 'reftex-get-bibfile-list "reftex-cite" "\
-Return list of bibfiles for current document.
-When using the chapterbib or bibunits package you should either
-use the same database files everywhere, or separate parts using
-different databases into different files (included into the mater file).
-Then this function will return the applicable database files.
-
-\(fn)" nil nil)
-
-(autoload 'reftex-pop-to-bibtex-entry "reftex-cite" "\
-Find BibTeX KEY in any file in FILE-LIST in another window.
-If MARK-TO-KILL is non-nil, mark new buffer to kill.
-If HIGHLIGHT is non-nil, highlight the match.
-If ITEM in non-nil, search for bibitem instead of database entry.
-If RETURN is non-nil, just return the entry and restore point.
-
-\(fn KEY FILE-LIST &optional MARK-TO-KILL HIGHLIGHT ITEM RETURN)" nil nil)
-
-(autoload 'reftex-end-of-bib-entry "reftex-cite" "\
-
-
-\(fn ITEM)" nil nil)
-
-(autoload 'reftex-parse-bibtex-entry "reftex-cite" "\
-Parse BibTeX ENTRY.
-If ENTRY is nil then parse the entry in current buffer between FROM and TO.
-If RAW is non-nil, keep double quotes/curly braces delimiting fields.
-
-\(fn ENTRY &optional FROM TO RAW)" nil nil)
-
-(autoload 'reftex-citation "reftex-cite" "\
-Make a citation using BibTeX database files.
-After prompting for a regular expression, scans the buffers with
-bibtex entries (taken from the \\bibliography command) and offers the
-matching entries for selection. The selected entry is formatted according
-to `reftex-cite-format' and inserted into the buffer.
-
-If NO-INSERT is non-nil, nothing is inserted, only the selected key returned.
-
-FORMAT-KEY can be used to pre-select a citation format.
-
-When called with a `C-u' prefix, prompt for optional arguments in
-cite macros. When called with a numeric prefix, make that many
-citations. When called with point inside the braces of a `\\cite'
-command, it will add another key, ignoring the value of
-`reftex-cite-format'.
-
-The regular expression uses an expanded syntax: && is interpreted as `and'.
-Thus, `aaaa&&bbb' matches entries which contain both `aaaa' and `bbb'.
-While entering the regexp, completion on knows citation keys is possible.
-`=' is a good regular expression to match all entries in all files.
-
-\(fn &optional NO-INSERT FORMAT-KEY)" t nil)
-
-(autoload 'reftex-citep "reftex-cite" "\
-Call `reftex-citation' with a format selector `?p'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-citet "reftex-cite" "\
-Call `reftex-citation' with a format selector `?t'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-make-cite-echo-string "reftex-cite" "\
-Format a bibtex ENTRY for the echo area and cache the result.
-
-\(fn ENTRY DOCSTRUCT-SYMBOL)" nil nil)
-
-(autoload 'reftex-create-bibtex-file "reftex-cite" "\
-Create a new BibTeX database BIBFILE with all entries referenced in document.
-The command prompts for a filename and writes the collected
-entries to that file. Only entries referenced in the current
-document with any \\cite-like macros are used. The sequence in
-the new file is the same as it was in the old database.
-
-Entries referenced from other entries must appear after all
-referencing entries.
-
-You can define strings to be used as header or footer for the
-created files in the variables `reftex-create-bibtex-header' or
-`reftex-create-bibtex-footer' respectively.
-
-\(fn BIBFILE)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-dcr" "reftex-dcr.el" "8a1cb9d9c9190eefd4e22ab89d278e03")
-;;; Generated autoloads from reftex-dcr.el
-
-(autoload 'reftex-view-crossref "reftex-dcr" "\
-View cross reference of macro at point. Point must be on the KEY
-argument. When at a `\\ref' macro, show corresponding `\\label'
-definition, also in external documents (`xr'). When on a label, show
-a locations where KEY is referenced. Subsequent calls find additional
-locations. When on a `\\cite', show the associated `\\bibitem' macro or
-the BibTeX database entry. When on a `\\bibitem', show a `\\cite' macro
-which uses this KEY. When on an `\\index', show other locations marked
-by the same index entry.
-To define additional cross referencing items, use the option
-`reftex-view-crossref-extra'. See also `reftex-view-crossref-from-bibtex'.
-With one or two C-u prefixes, enforce rescanning of the document.
-With argument 2, select the window showing the cross reference.
-AUTO-HOW is only for the automatic crossref display and is handed through
-to the functions `reftex-view-cr-cite' and `reftex-view-cr-ref'.
-
-\(fn &optional ARG AUTO-HOW FAIL-QUIETLY)" t nil)
-
-(autoload 'reftex-mouse-view-crossref "reftex-dcr" "\
-View cross reference of \\ref or \\cite macro where you click.
-If the macro at point is a \\ref, show the corresponding label definition.
-If it is a \\cite, show the BibTeX database entry.
-If there is no such macro at point, search forward to find one.
-With argument, actually select the window showing the cross reference.
-
-\(fn EV)" t nil)
-
-(autoload 'reftex-toggle-auto-view-crossref "reftex-dcr" "\
-Toggle the automatic display of crossref information in the echo area.
-When active, leaving point idle in the argument of a \\ref or \\cite macro
-will display info in the echo area.
-
-\(fn)" t nil)
-
-(autoload 'reftex-view-crossref-from-bibtex "reftex-dcr" "\
-View location in a LaTeX document which cites the BibTeX entry at point.
-Since BibTeX files can be used by many LaTeX documents, this function
-prompts upon first use for a buffer in RefTeX mode. To reset this
-link to a document, call the function with a prefix arg.
-Calling this function several times find successive citation locations.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-global" "reftex-global.el" "a7a6a1872e4509da5b211972c2a588ad")
-;;; Generated autoloads from reftex-global.el
-
-(autoload 'reftex-create-tags-file "reftex-global" "\
-Create TAGS file by running `etags' on the current document.
-The TAGS file is also immediately visited with `visit-tags-table'.
-
-\(fn)" t nil)
-
-(autoload 'reftex-grep-document "reftex-global" "\
-Run grep query through all files related to this document.
-With prefix arg, force to rescan document.
-No active TAGS table is required.
-
-\(fn GREP-CMD)" t nil)
-
-(autoload 'reftex-search-document "reftex-global" "\
-Regexp search through all files of the current document.
-Starts always in the master file. Stops when a match is found.
-To continue searching for next match, use command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional REGEXP)" t nil)
-
-(autoload 'reftex-query-replace-document "reftex-global" "\
-Do `query-replace-regexp' of FROM with TO over the entire document.
-Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional FROM TO DELIMITED)" t nil)
-
-(autoload 'reftex-find-duplicate-labels "reftex-global" "\
-Produce a list of all duplicate labels in the document.
-
-\(fn)" t nil)
-
-(autoload 'reftex-change-label "reftex-global" "\
-Run `query-replace-regexp' of FROM with TO in all macro arguments.
-Works on the entire multifile document.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-No active TAGS table is required.
-
-\(fn &optional FROM TO)" t nil)
-
-(autoload 'reftex-renumber-simple-labels "reftex-global" "\
-Renumber all simple labels in the document to make them sequentially.
-Simple labels are the ones created by RefTeX, consisting only of the
-prefix and a number. After the command completes, all these labels will
-have sequential numbers throughout the document. Any references to
-the labels will be changed as well. For this, RefTeX looks at the
-arguments of any macros which either start or end in the string `ref'.
-This command should be used with care, in particular in multifile
-documents. You should not use it if another document refers to this
-one with the `xr' package.
-
-\(fn)" t nil)
-
-(autoload 'reftex-save-all-document-buffers "reftex-global" "\
-Save all documents associated with the current document.
-The function is useful after a global action like replacing or renumbering
-labels.
-
-\(fn)" t nil)
-
-(autoload 'reftex-isearch-minor-mode "reftex-global" "\
-When on, isearch searches the whole document, not only the current file.
-This minor mode allows isearch to search through all the files of
-the current TeX document.
-
-With no argument, this command toggles
-`reftex-isearch-minor-mode'. With a prefix argument ARG, turn
-`reftex-isearch-minor-mode' on if ARG is positive, otherwise turn it off.
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-index" "reftex-index.el" "0e0eef2a199fb9de6f13b5eef601843f")
-;;; Generated autoloads from reftex-index.el
-
-(autoload 'reftex-index-selection-or-word "reftex-index" "\
-Put selection or the word near point into the default index macro.
-This uses the information in `reftex-index-default-macro' to make an index
-entry. The phrase indexed is the current selection or the word near point.
-When called with one `C-u' prefix, let the user have a chance to edit the
-index entry. When called with 2 `C-u' as prefix, also ask for the index
-macro and other stuff.
-When called inside TeX math mode as determined by the `texmathp.el' library
-which is part of AUCTeX, the string is first processed with the
-`reftex-index-math-format', which see.
-
-\(fn &optional ARG PHRASE)" t nil)
-
-(autoload 'reftex-index "reftex-index" "\
-Query for an index macro and insert it along with its arguments.
-The index macros available are those defined in `reftex-index-macro' or
-by a call to `reftex-add-index-macros', typically from an AUCTeX style file.
-RefteX provides completion for the index tag and the index key, and
-will prompt for other arguments.
-
-\(fn &optional CHAR KEY TAG SEL NO-INSERT)" t nil)
-
-(autoload 'reftex-index-complete-tag "reftex-index" "\
-
-
-\(fn &optional ITAG OPT-ARGS)" nil nil)
-
-(autoload 'reftex-index-select-tag "reftex-index" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-index-complete-key "reftex-index" "\
-
-
-\(fn &optional TAG OPTIONAL INITIAL)" nil nil)
-
-(autoload 'reftex-index-show-entry "reftex-index" "\
-
-
-\(fn DATA &optional NO-REVISIT)" nil nil)
-
-(autoload 'reftex-display-index "reftex-index" "\
-Display a buffer with an index compiled from the current document.
-When the document has multiple indices, first prompts for the correct one.
-When index support is turned off, offer to turn it on.
-With one or two `C-u' prefixes, rescan document first.
-With prefix 2, restrict index to current document section.
-With prefix 3, restrict index to region.
-
-\(fn &optional TAG OVERRIDING-RESTRICTION REDO &rest LOCATIONS)" t nil)
-
-(autoload 'reftex-index-phrase-selection-or-word "reftex-index" "\
-Add current selection or word at point to the phrases buffer.
-When you are in transient-mark-mode and the region is active, the
-selection will be used - otherwise the word at point.
-You get a chance to edit the entry in the phrases buffer - finish with
-`C-c C-c'.
-
-\(fn ARG)" t nil)
-
-(autoload 'reftex-index-visit-phrases-buffer "reftex-index" "\
-Switch to the phrases buffer, initialize if empty.
-
-\(fn)" t nil)
-
-(autoload 'reftex-index-phrases-mode "reftex-index" "\
-Major mode for managing the Index phrases of a LaTeX document.
-This buffer was created with RefTeX.
-
-To insert new phrases, use
- - `C-c \\' in the LaTeX document to copy selection or word
- - `\\[reftex-index-new-phrase]' in the phrases buffer.
-
-To index phrases use one of:
-
-\\[reftex-index-this-phrase] index current phrase
-\\[reftex-index-next-phrase] index next phrase (or N with prefix arg)
-\\[reftex-index-all-phrases] index all phrases
-\\[reftex-index-remaining-phrases] index current and following phrases
-\\[reftex-index-region-phrases] index the phrases in the region
-
-You can sort the phrases in this buffer with \\[reftex-index-sort-phrases].
-To display information about the phrase at point, use \\[reftex-index-phrases-info].
-
-For more information see the RefTeX User Manual.
-
-Here are all local bindings.
-
-\\{reftex-index-phrases-mode-map}
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-parse" "reftex-parse.el" "9015d91c86a135c850f92b828eca6b62")
-;;; Generated autoloads from reftex-parse.el
-
-(autoload 'reftex-parse-one "reftex-parse" "\
-Re-parse this file.
-
-\(fn)" t nil)
-
-(autoload 'reftex-parse-all "reftex-parse" "\
-Re-parse entire document.
-
-\(fn)" t nil)
-
-(autoload 'reftex-do-parse "reftex-parse" "\
-Do a document rescan.
-When allowed, do only a partial scan from FILE.
-
-\(fn RESCAN &optional FILE)" nil nil)
-
-(autoload 'reftex-everything-regexp "reftex-parse" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-all-document-files "reftex-parse" "\
-Return a list of all files belonging to the current document.
-When RELATIVE is non-nil, give file names relative to directory
-of master file.
-
-\(fn &optional RELATIVE)" nil nil)
-
-(autoload 'reftex-locate-bibliography-files "reftex-parse" "\
-Scan buffer for bibliography macros and return file list.
-
-\(fn MASTER-DIR &optional FILES)" nil nil)
-
-(autoload 'reftex-section-info "reftex-parse" "\
-Return a section entry for the current match.
-Careful: This function expects the match-data to be still in place!
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-ensure-index-support "reftex-parse" "\
-When index support is turned off, ask to turn it on and
-set the current prefix argument so that `reftex-access-scan-info'
-will rescan the entire document.
-
-\(fn &optional ABORT)" nil nil)
-
-(autoload 'reftex-index-info-safe "reftex-parse" "\
-
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-index-info "reftex-parse" "\
-Return an index entry for the current match.
-Careful: This function expects the match-data to be still in place!
-
-\(fn FILE)" nil nil)
-
-(autoload 'reftex-short-context "reftex-parse" "\
-Get about one line of useful context for the label definition at point.
-
-\(fn ENV PARSE &optional BOUND DERIVE)" nil nil)
-
-(autoload 'reftex-where-am-I "reftex-parse" "\
-Return the docstruct entry above point.
-Actually returns a cons cell in which the cdr is a flag indicating
-if the information is exact (t) or approximate (nil).
-
-\(fn)" nil nil)
-
-(autoload 'reftex-notice-new "reftex-parse" "\
-Hook to handshake with RefTeX after something new has been inserted.
-
-\(fn &optional N FORCE)" nil nil)
-
-(autoload 'reftex-what-macro-safe "reftex-parse" "\
-Call `reftex-what-macro' with special syntax table.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-macro "reftex-parse" "\
-Find out if point is within the arguments of any TeX-macro.
-The return value is either (\"\\macro\" . (point)) or a list of them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing macro.
-If WHICH is t, return list of all macros enclosing point.
-If WHICH is a list of macros, look only for those macros and return the
- name of the first macro in this list found to enclose point.
-If the optional BOUND is an integer, bound backwards directed
- searches to this point. If it is nil, limit to nearest \\section -
- like statement.
-
-This function is pretty stable, but can be fooled if the text contains
-things like \\macro{aa}{bb} where \\macro is defined to take only one
-argument. As RefTeX cannot know this, the string \"bb\" would still be
-considered an argument of macro \\macro.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-environment "reftex-parse" "\
-Find out if point is inside a LaTeX environment.
-The return value is (e.g.) either (\"equation\" . (point)) or a list of
-them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing environment.
-If WHICH is t, return list of all environments enclosing point.
-If WHICH is a list of environments, look only for those environments and
- return the name of the first environment in this list found to enclose
- point.
-
-If the optional BOUND is an integer, bound backwards directed searches to
-this point. If it is nil, limit to nearest \\section - like statement.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-what-special-env "reftex-parse" "\
-Run the special environment parsers and return the matches.
-
-The return value is (e.g.) either (\"my-parser-function\" . (point))
-or a list of them.
-
-If WHICH is nil, immediately return nil.
-If WHICH is 1, return innermost enclosing environment.
-If WHICH is t, return list of all environments enclosing point.
-If WHICH is a list of environments, look only for those environments and
- return the name of the first environment in this list found to enclose
- point.
-
-\(fn WHICH &optional BOUND)" nil nil)
-
-(autoload 'reftex-nth-arg "reftex-parse" "\
-Return the Nth following {} or [] parentheses content.
-OPT-ARGS is a list of argument numbers which are optional.
-
-\(fn N &optional OPT-ARGS)" nil nil)
-
-(autoload 'reftex-move-over-touching-args "reftex-parse" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-init-section-numbers "reftex-parse" "\
-Initialize the section numbers with zeros or with what is found in the TOC-ENTRY.
-
-\(fn &optional TOC-ENTRY APPENDIX)" nil nil)
-
-(autoload 'reftex-section-number "reftex-parse" "\
-Return a string with the current section number.
-When LEVEL is non-nil, increase section numbers on that level.
-
-\(fn &optional LEVEL STAR)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-ref" "reftex-ref.el" "b2ce366d12050904d89cc38b96b8058a")
-;;; Generated autoloads from reftex-ref.el
-
-(autoload 'reftex-label-location "reftex-ref" "\
-Return the environment or macro which determines the label type at point.
-If optional BOUND is an integer, limit backward searches to that point.
-
-\(fn &optional BOUND)" nil nil)
-
-(autoload 'reftex-label-info-update "reftex-ref" "\
-
-
-\(fn CELL)" nil nil)
-
-(autoload 'reftex-label-info "reftex-ref" "\
-
-
-\(fn LABEL &optional FILE BOUND DERIVE ENV-OR-MAC)" nil nil)
-
-(autoload 'reftex-label "reftex-ref" "\
-Insert a unique label. Return the label.
-If ENVIRONMENT is given, don't bother to find out yourself.
-If NO-INSERT is non-nil, do not insert label into buffer.
-With prefix arg, force to rescan document first.
-When you are prompted to enter or confirm a label, and you reply with
-just the prefix or an empty string, no label at all will be inserted.
-A new label is also recorded into the label list.
-This function is controlled by the settings of reftex-insert-label-flags.
-
-\(fn &optional ENVIRONMENT NO-INSERT)" t nil)
-
-(autoload 'reftex-reference "reftex-ref" "\
-Make a LaTeX reference. Look only for labels of a certain TYPE.
-With prefix arg, force to rescan buffer for labels. This should only be
-necessary if you have recently entered labels yourself without using
-reftex-label. Rescanning of the buffer can also be requested from the
-label selection menu.
-The function returns the selected label or nil.
-If NO-INSERT is non-nil, do not insert \\ref command, just return label.
-When called with 2 C-u prefix args, disable magic word recognition.
-
-\(fn &optional TYPE NO-INSERT CUT)" t nil)
-
-(autoload 'reftex-query-label-type "reftex-ref" "\
-
-
-\(fn)" nil nil)
-
-(autoload 'reftex-show-label-location "reftex-ref" "\
-
-
-\(fn DATA FORWARD NO-REVISIT &optional STAY ERROR)" nil nil)
-
-(autoload 'reftex-goto-label "reftex-ref" "\
-Prompt for a label (with completion) and jump to the location of this label.
-Optional prefix argument OTHER-WINDOW goes to the label in another window.
-
-\(fn &optional OTHER-WINDOW)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-sel" "reftex-sel.el" "b5e68431056b461d8a0562e9e685a5f1")
-;;; Generated autoloads from reftex-sel.el
-
-(autoload 'reftex-select-label-mode "reftex-sel" "\
-Major mode for selecting a label in a LaTeX document.
-This buffer was created with RefTeX.
-It only has a meaningful keymap when you are in the middle of a
-selection process.
-To select a label, move the cursor to it and press RET.
-Press `?' for a summary of important key bindings.
-
-During a selection process, these are the local bindings.
-
-\\{reftex-select-label-mode-map}
-
-\(fn)" t nil)
-
-(autoload 'reftex-select-bib-mode "reftex-sel" "\
-Major mode for selecting a citation key in a LaTeX document.
-This buffer was created with RefTeX.
-It only has a meaningful keymap when you are in the middle of a
-selection process.
-In order to select a citation, move the cursor to it and press RET.
-Press `?' for a summary of important key bindings.
-
-During a selection process, these are the local bindings.
-
-\\{reftex-select-label-mode-map}
-
-\(fn)" t nil)
-
-(autoload 'reftex-get-offset "reftex-sel" "\
-
-
-\(fn BUF HERE-AM-I &optional TYPEKEY TOC INDEX FILE)" nil nil)
-
-(autoload 'reftex-insert-docstruct "reftex-sel" "\
-
-
-\(fn BUF TOC LABELS INDEX-ENTRIES FILES CONTEXT COUNTER SHOW-COMMENTED HERE-I-AM XR-PREFIX TOC-BUFFER)" nil nil)
-
-(autoload 'reftex-find-start-point "reftex-sel" "\
-
-
-\(fn FALLBACK &rest LOCATIONS)" nil nil)
-
-(autoload 'reftex-select-item "reftex-sel" "\
-
-
-\(fn REFTEX-SELECT-PROMPT HELP-STRING KEYMAP &optional OFFSET CALL-BACK CB-FLAG)" nil nil)
-
-;;;***
-\f
-;;;### (autoloads nil "reftex-toc" "reftex-toc.el" "af8f426ef3a0607322ca4c9742e177a8")
-;;; Generated autoloads from reftex-toc.el
-
-(autoload 'reftex-toc "reftex-toc" "\
-Show the table of contents for the current document.
-When called with a raw C-u prefix, rescan the document first.
-
-\(fn &optional REBUILD REUSE)" t nil)
-
-(autoload 'reftex-toc-recenter "reftex-toc" "\
-Display the TOC window and highlight line corresponding to current position.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" "\
-Toggle the automatic recentering of the TOC window.
-When active, leaving point idle will make the TOC window jump to the correct
-section.
-
-\(fn)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
(provide 'reftex)
;;; reftex.el ends here
(setq arg (1- arg)))
return))
+(defun sgml-forward-sexp (n)
+ ;; This function is needed in major-modes such as nxml-mode where
+ ;; forward-sexp-function is used to give a more dwimish behavior to
+ ;; the `forward-sexp' command.
+ ;; Without it, we can end up with backtraces like:
+ ;; "get-text-property" (0xffffc0f0)
+ ;; "nxml-token-after" (0xffffc2ac)
+ ;; "nxml-forward-single-balanced-item" (0xffffc46c)
+ ;; "nxml-forward-balanced-item" (0xffffc61c)
+ ;; "forward-sexp" (0xffffc7f8)
+ ;; "sgml-parse-tag-backward" (0xffffc9c8)
+ ;; "sgml-lexical-context" (0xffffcba8)
+ ;; "sgml-mode-flyspell-verify" (0xffffcd74)
+ ;; "flyspell-word" (0xffffcf3c)
+ ;; "flyspell-post-command-hook" (0xffffd108)
+ ;; FIXME: should we also set the sgml-tag-syntax-table?
+ (let ((forward-sexp-function nil))
+ (forward-sexp n)))
+
(defvar sgml-electric-tag-pair-overlays nil)
(defvar sgml-electric-tag-pair-timer nil)
(if endp
(when (sgml-skip-tag-backward 1) (forward-char 1) t)
(with-syntax-table sgml-tag-syntax-table
- (up-list -1)
- (when (sgml-skip-tag-forward 1)
- (backward-sexp 1)
- (forward-char 2)
- t))))
+ (let ((forward-sexp-function nil))
+ (up-list -1)
+ (when (sgml-skip-tag-forward 1)
+ (backward-sexp 1)
+ (forward-char 2)
+ t)))))
(clones (get-char-property (point) 'text-clones)))
(when (and match
(/= cl-end cl-start)
((and (eq (char-before) ?>)
(or (not (eq (char-after) ?<))
(> x y)))
- (backward-sexp))
+ (sgml-forward-sexp -1))
((eq (char-after y) ?<)
- (forward-sexp)))
+ (sgml-forward-sexp 1)))
(point))))
(message "Invisible tag: %s"
;; Strip properties, otherwise, the text is invisible.
(unless (or ;;(looking-at "</")
(progn (skip-chars-backward " \t") (bolp)))
(reindent-then-newline-and-indent))
- (forward-sexp 1)))
+ (sgml-forward-sexp 1)))
;; (indent-region beg end)
))
(let ((pos (point)))
(condition-case nil
;; FIXME: This does not correctly skip over PI an CDATA tags.
- (forward-sexp)
+ (sgml-forward-sexp 1)
(scan-error
;; This < seems to be just a spurious one, let's ignore it.
(goto-char pos)
(with-syntax-table sgml-tag-syntax-table
(goto-char tag-end)
(condition-case nil
- (backward-sexp)
+ (sgml-forward-sexp -1)
(scan-error
;; This > isn't really the end of a tag. Skip it.
(goto-char (1- tag-end))
(`text
(while (looking-at "</")
- (forward-sexp 1)
+ (sgml-forward-sexp 1)
(skip-chars-forward " \t"))
(let* ((here (point))
(unclosed (and ;; (not sgml-xml-mode)
"Value of `sgml-display-text' for HTML mode.")
\f
-;; should code exactly HTML 3 here when that is finished
(defvar html-tag-alist
(let* ((1-7 '(("1") ("2") ("3") ("4") ("5") ("6") ("7")))
(1-9 `(,@1-7 ("8") ("9")))
(align '(("align" ("left") ("center") ("right"))))
+ (ialign '(("align" ("top") ("middle") ("bottom") ("left")
+ ("right"))))
(valign '(("top") ("middle") ("bottom") ("baseline")))
(rel '(("next") ("previous") ("parent") ("subdocument") ("made")))
(href '("href" ("ftp:") ("file:") ("finger:") ("gopher:") ("http:")
("title")))
(list '((nil \n ("List item: " "<li>" str
(if sgml-xml-mode "</li>") \n))))
+ (shape '(("shape" ("rect") ("circle") ("poly") ("default"))))
(cell `(t
,@align
("valign" ,@valign)
("colspan" ,@1-9)
("rowspan" ,@1-9)
- ("nowrap" t))))
+ ("nowrap" t)))
+ (cellhalign '(("align" ("left") ("center") ("right")
+ ("justify") ("char"))
+ ("char") ("charoff")))
+ (cellvalign '(("valign" ("top") ("middle") ("bottom")
+ ("baseline")))))
;; put ,-expressions first, else byte-compile chokes (as of V19.29)
;; and like this it's more efficient anyway
`(("a" ,name ,@link)
+ ("area" t ,@shape ("coords") ("href") ("nohref" "nohref") ("alt")
+ ("tabindex") ("accesskey") ("onfocus") ("onblur"))
("base" t ,@href)
+ ("col" t ,@cellhalign ,@cellvalign ("span") ("width"))
+ ("colgroup" \n ,@cellhalign ,@cellvalign ("span") ("width"))
("dir" ,@list)
+ ("figcaption")
+ ("figure" \n)
("font" nil "size" ("-1") ("+1") ("-2") ("+2") ,@1-7)
("form" (\n _ \n "<input type=\"submit\" value=\"\""
(if sgml-xml-mode " />" ">"))
("h5" ,@align)
("h6" ,@align)
("hr" t ("size" ,@1-9) ("width") ("noshade" t) ,@align)
+ ("iframe" \n ,@ialign ("longdesc") ("name") ("src")
+ ("frameborder" ("1") ("0")) ("marginwidth") ("marginheight")
+ ("scrolling" ("yes") ("no") ("auto")) ("height") ("width"))
("img" t ("align" ,@valign ("texttop") ("absmiddle") ("absbottom"))
("src") ("alt") ("width" "1") ("height" "1")
("border" "1") ("vspace" "1") ("hspace" "1") ("ismap" t))
"<tr><" str ?> _
(if sgml-xml-mode (concat "<" str "></tr>")) \n))
("border" t ,@1-9) ("width" "10") ("cellpadding"))
+ ("tbody" \n ,@cellhalign ,@cellvalign)
("td" ,@cell)
("textarea" ,name ("rows" ,@1-9) ("cols" ,@1-9))
+ ("tfoot" \n ,@cellhalign ,@cellvalign)
("th" ,@cell)
+ ("thead" \n ,@cellhalign ,@cellvalign)
("ul" ,@list ("type" ("disc") ("circle") ("square")))
,@sgml-tag-alist
- ("abbrev")
+ ("abbr")
("acronym")
("address")
("array" (nil \n
("article" \n)
("aside" \n)
("au")
+ ("audio" \n
+ ("src") ("crossorigin" ("anonymous") ("use-credentials"))
+ ("preload" ("none") ("metadata") ("auto"))
+ ("autoplay" "autoplay") ("mediagroup") ("loop" "loop")
+ ("muted" "muted") ("controls" "controls"))
("b")
+ ("bdi")
+ ("bdo" nil ("lang") ("dir" ("ltr") ("rtl")))
("big")
("blink")
- ("blockquote" \n)
+ ("blockquote" \n ("cite"))
("body" \n ("background" ".gif") ("bgcolor" "#") ("text" "#")
("link" "#") ("alink" "#") ("vlink" "#"))
("box" (nil _ "<over>" _ (if sgml-xml-mode "</over>")))
("br" t ("clear" ("left") ("right")))
+ ("button" nil ("name") ("value")
+ ("type" ("submit") ("reset") ("button"))
+ ("disabled" "disabled")
+ ("tabindex") ("accesskey") ("onfocus") ("onblur"))
+ ("canvas" \n ("width") ("height"))
("caption" ("valign" ("top") ("bottom")))
("center" \n)
("cite")
("code" \n)
+ ("datalist" \n)
("dd" ,(not sgml-xml-mode))
- ("del")
+ ("del" nil ("cite") ("datetime"))
("dfn")
("div")
("dl" (nil \n
("dt" (t _ (if sgml-xml-mode "</dt>")
"<dd>" (if sgml-xml-mode "</dd>") \n))
("em")
+ ("embed" t ("src") ("type") ("width") ("height"))
+ ("fieldset" \n)
("fn" "id" "fn") ;; Footnotes were deprecated in HTML 3.2
("footer" \n)
+ ("frame" t ("longdesc") ("name") ("src")
+ ("frameborder" ("1") ("0")) ("marginwidth") ("marginheight")
+ ("noresize" "noresize") ("scrolling" ("yes") ("no") ("auto")))
+ ("frameset" \n ("rows") ("cols") ("onload") ("onunload"))
("head" \n)
("header" \n)
("hgroup" \n)
"</body>"
))
("i")
- ("ins")
+ ("ins" nil ("cite") ("datetime"))
("isindex" t ("action") ("prompt"))
("kbd")
+ ("label" nil ("for") ("accesskey") ("onfocus") ("onblur"))
("lang")
+ ("legend" nil ("accesskey"))
("li" ,(not sgml-xml-mode))
+ ("main" \n)
+ ("map" \n ("name"))
+ ("mark")
("math" \n)
+ ("meta" t ("http-equiv") ("name") ("content") ("scheme"))
+ ("meter" nil ("value") ("min") ("max") ("low") ("high")
+ ("optimum"))
("nav" \n)
("nobr")
+ ("noframes" \n)
+ ("noscript" \n)
+ ("object" \n ("declare" "declare") ("classid") ("codebase")
+ ("data") ("type") ("codetype") ("archive") ("standby")
+ ("height") ("width") ("usemap") ("name") ("tabindex"))
+ ("optgroup" \n ("name") ("size") ("multiple" "multiple")
+ ("disabled" "disabled") ("tabindex") ("onfocus") ("onblur")
+ ("onchange"))
("option" t ("value") ("label") ("selected" t))
+ ("output" nil ("for") ("form") ("name"))
("over" t)
+ ("param" t ("name") ("value")
+ ("valuetype" ("data") ("ref") ("object")) ("type"))
("person") ;; Tag for person's name tag deprecated in HTML 3.2
("pre" \n)
- ("q")
+ ("progress" nil ("value") ("max"))
+ ("q" nil ("cite"))
("rev")
+ ("rp" t)
+ ("rt" t)
+ ("ruby")
("s")
("samp")
+ ("script" nil ("charset") ("type") ("src") ("defer" "defer"))
("section" \n)
("small")
+ ("source" t ("src") ("type") ("media"))
("span" nil
("class"
("builtin")
("variable-name")
("warning")))
("strong")
+ ("style" \n ("type") ("media") ("title"))
("sub")
+ ("summary")
("sup")
+ ("time" nil ("datetime"))
("title")
("tr" t)
+ ("track" t
+ ("kind" ("subtitles") ("captions") ("descriptions")
+ ("chapters") ("metadata"))
+ ("src") ("srclang") ("label") ("default"))
("tt")
("u")
("var")
+ ("video" \n
+ ("src") ("crossorigin" ("anonymous") ("use-credentials"))
+ ("poster") ("preload" ("none") ("metadata") ("auto"))
+ ("autoplay" "autoplay") ("mediagroup") ("loop" "loop")
+ ("muted" "muted") ("controls" "controls") ("width") ("height"))
("wbr" t)))
"Value of `sgml-tag-alist' for HTML mode.")
(defvar html-tag-help
`(,@sgml-tag-help
("a" . "Anchor of point or link elsewhere")
- ("abbrev" . "Abbreviation")
+ ("abbr" . "Abbreviation")
("acronym" . "Acronym")
("address" . "Formatted mail address")
+ ("area" . "Region of an image map")
("array" . "Math array")
("article" . "An independent part of document or site")
("aside" . "Secondary content related to surrounding content (e.g. page or article)")
("au" . "Author")
+ ("audio" . "Sound or audio stream")
("b" . "Bold face")
("base" . "Base address for URLs")
+ ("bdi" . "Text isolated for bidirectional formatting")
+ ("bdo" . "Override text directionality")
("big" . "Font size")
("blink" . "Blinking text")
("blockquote" . "Indented quotation")
("body" . "Document body")
("box" . "Math fraction")
("br" . "Line break")
+ ("button" . "Clickable button")
+ ("canvas" . "Script generated graphics canvas")
("caption" . "Table caption")
("center" . "Centered text")
("changed" . "Change bars")
("cite" . "Citation of a document")
("code" . "Formatted source code")
+ ("col" . "Group of attribute specifications for table columns")
+ ("colgroup" . "Group of columns")
+ ("datalist" . "A set of predefined options")
("dd" . "Definition of term")
("del" . "Deleted text")
("dfn" . "Defining instance of a term")
("dt" . "Term to be defined")
("em" . "Emphasized")
("embed" . "Embedded data in foreign format")
+ ("fieldset" . "Group of related controls and labels")
("fig" . "Figure")
("figa" . "Figure anchor")
+ ("figcaption" . "Caption for a figure")
("figd" . "Figure description")
("figt" . "Figure text")
+ ("figure" . "Self-contained content, often with a caption")
("fn" . "Footnote") ;; No one supports special footnote rendering.
("font" . "Font size")
("footer" . "Footer of a section")
("form" . "Form with input fields")
+ ("frame" . "Frame in which another HTML document can be displayed")
+ ("frameset" . "Container for frames")
("group" . "Document grouping")
("h1" . "Most important section headline")
("h2" . "Important section headline")
("hr" . "Horizontal rule")
("html" . "HTML Document")
("i" . "Italic face")
+ ("iframe" . "Inline frame with a nested browsing context")
("img" . "Graphic image")
("input" . "Form input field")
("ins" . "Inserted text")
("isindex" . "Input field for index search")
("kbd" . "Keyboard example face")
+ ("label" . "Caption for a user interface item")
("lang" . "Natural language")
+ ("legend" . "Caption for a fieldset")
("li" . "List item")
("link" . "Link relationship")
+ ("main" . "Main content of the document body")
+ ("map" . "Image map (a clickable link area")
+ ("mark" . "Highlighted text")
("math" . "Math formula")
("menu" . "List of commands")
+ ("meta" . "Document properties")
+ ("meter" . "Scalar measurement within a known range")
("mh" . "Form mail header")
("nav" . "Group of navigational links")
("nextid" . "Allocate new id")
("nobr" . "Text without line break")
+ ("noframes" . "Content for user agents that don't support frames")
+ ("noscript" . "Alternate content for when a script isn't executed")
+ ("object" . "External resource")
("ol" . "Ordered list")
+ ("optgroup" . "Group of options")
("option" . "Selection list item")
+ ("output" . "Result of a calculation or user action")
("over" . "Math fraction rule")
("p" . "Paragraph start")
("panel" . "Floating panel")
+ ("param" . "Parameters for an object")
("person" . "Person's name")
("pre" . "Preformatted fixed width text")
+ ("progress" . "Completion progress of a task")
("q" . "Quotation")
("rev" . "Reverse video")
+ ("rp" . "Fallback text for when ruby annotations aren't supported")
+ ("rt" . "Ruby text component of a ruby annotation")
+ ("ruby" . "Ruby annotation")
("s" . "Strikeout")
("samp" . "Sample text")
+ ("script" . "Executable script within a document")
("section" . "Section of a document")
("select" . "Selection list")
("small" . "Font size")
+ ("source" . "Media resource for media elements")
("sp" . "Nobreak space")
("span" . "Generic inline container")
("strong" . "Standout text")
+ ("style" . "Style information")
("sub" . "Subscript")
+ ("summary" . "Summary, caption, or legend")
("sup" . "Superscript")
("table" . "Table with rows and columns")
("tb" . "Table vertical break")
+ ("tbody" . "Table body")
("td" . "Table data cell")
("textarea" . "Form multiline edit area")
+ ("tfoot" . "Table foot")
("th" . "Table header cell")
+ ("thead" . "Table head")
+ ("time" . "Content with optional machine-readable timestamp")
("title" . "Document title")
("tr" . "Table row separator")
+ ("track" . "Timed text track for media elements")
("tt" . "Typewriter face")
("u" . "Underlined text")
("ul" . "Unordered list")
("var" . "Math variable face")
+ ("video" . "Video or movie")
("wbr" . "Enable <br> within <nobr>"))
"Value of variable `sgml-tag-help' for HTML mode.")
(defun latex-imenu-create-index ()
"Generate an alist for imenu from a LaTeX buffer."
(let ((section-regexp
- (concat "\\\\" (regexp-opt (mapcar 'car latex-section-alist) t)
+ (concat "\\\\" (regexp-opt (mapcar #'car latex-section-alist) t)
"\\*?[ \t]*{"))
(metasection-regexp
(concat "\\\\" (regexp-opt latex-metasection-list t)))
;; Using sexps allows some use of matching {...} inside
;; titles.
(forward-sexp 1)
- (push (cons (concat (apply 'concat
+ (push (cons (concat (apply #'concat
(make-list
(max 0 (- i i0))
latex-imenu-indent-string))
(defvar latex-outline-regexp
(concat "\\\\"
(regexp-opt (append latex-metasection-list
- (mapcar 'car latex-section-alist)) t)))
+ (mapcar #'car latex-section-alist))
+ t)))
(defun latex-outline-level ()
(if (looking-at latex-outline-regexp)
(let* (;;
;; Names of commands whose arg should be fontified with fonts.
(bold (regexp-opt '("textbf" "textsc" "textup"
- "boldsymbol" "pmb") t))
+ "boldsymbol" "pmb")
+ t))
(italic (regexp-opt '("textit" "textsl" "emph") t))
;; FIXME: unimplemented yet.
;; (type (regexp-opt '("texttt" "textmd" "textrm" "textsf") t))
'("linebreak" "nolinebreak" "pagebreak" "nopagebreak"
"newline" "newpage" "clearpage" "cleardoublepage"
"displaybreak" "allowdisplaybreaks"
- "enlargethispage") t))
+ "enlargethispage")
+ t))
(general "\\([a-zA-Z@]+\\**\\|[^ \t\n]\\)")
;;
;; Miscellany.
(defvar tex-verbatim-environments
'("verbatim" "verbatim*"))
(put 'tex-verbatim-environments 'safe-local-variable
- (lambda (x) (null (delq t (mapcar 'stringp x)))))
+ (lambda (x) (null (delq t (mapcar #'stringp x)))))
(eval-when-compile
(defconst tex-syntax-propertize-rules
(concat "[ \t]*\\(\\$\\$\\|"
"\\\\[][]\\|"
"\\\\" (regexp-opt (append
- (mapcar 'car latex-section-alist)
+ (mapcar #'car latex-section-alist)
'("begin" "label" "end"
"item" "bibitem" "newline" "noindent"
"newpage" "footnote" "marginpar"
- "parbox" "caption")) t)
+ "parbox" "caption"))
+ t)
"\\>\\|\\\\[a-z]*" (regexp-opt '("space" "skip" "page") t)
"\\>\\)"))
(setq paragraph-separate
(concat "[\f%]\\|[ \t]*\\($\\|"
"\\\\[][]\\|"
"\\\\" (regexp-opt (append
- (mapcar 'car latex-section-alist)
- '("begin" "label" "end" )) t)
+ (mapcar #'car latex-section-alist)
+ '("begin" "label" "end" ))
+ t)
"\\>\\|\\\\\\(" (regexp-opt '("item" "bibitem" "newline"
"noindent" "newpage" "footnote"
"marginpar" "parbox" "caption"))
"\\|\\$\\$\\|[a-z]*\\(space\\|skip\\|page[a-z]*\\)"
"\\>\\)[ \t]*\\($\\|%\\)\\)"))
- (setq-local imenu-create-index-function 'latex-imenu-create-index)
+ (setq-local imenu-create-index-function #'latex-imenu-create-index)
(setq-local tex-face-alist tex-latex-face-alist)
- (add-hook 'fill-nobreak-predicate 'latex-fill-nobreak-predicate nil t)
- (setq-local indent-line-function 'latex-indent)
+ (add-hook 'fill-nobreak-predicate #'latex-fill-nobreak-predicate nil t)
+ (setq-local indent-line-function #'latex-indent)
(setq-local fill-indent-according-to-mode t)
(add-hook 'completion-at-point-functions
- 'latex-complete-data nil 'local)
+ #'latex-complete-data nil 'local)
(setq-local outline-regexp latex-outline-regexp)
- (setq-local outline-level 'latex-outline-level)
- (setq-local forward-sexp-function 'latex-forward-sexp)
+ (setq-local outline-level #'latex-outline-level)
+ (setq-local forward-sexp-function #'latex-forward-sexp)
(setq-local skeleton-end-hook nil))
;;;###autoload
(defvar tildify-space-string)
(defvar tildify-foreach-region-function)
+(declare-function tildify-foreach-ignore-environments
+ "tildify" (pairs callback _beg end))
(defvar tex--prettify-symbols-alist)
(defun tex-common-initialization ()
;; rather than using regex-based filtering.
(setq-local tildify-foreach-region-function
(apply-partially
- 'tildify-foreach-ignore-environments
+ #'tildify-foreach-ignore-environments
`(("\\\\\\\\" . "") ; do not remove this
(,(eval-when-compile
(concat "\\\\begin{\\("
Puts point on a blank line between them."
(let ((choice (completing-read (format "LaTeX block name [%s]: "
latex-block-default)
- (append latex-block-names
- latex-standard-block-names)
+ (latex-complete-envnames)
nil nil nil nil latex-block-default)))
(setq latex-block-default choice)
(unless (or (member choice latex-standard-block-names)
(complete-with-action action keys key pred)))))
(defun latex-complete-envnames ()
- (append latex-block-names latex-standard-block-names))
+ (completion-table-in-turn
+ (append latex-block-names latex-standard-block-names)
+ (completion-table-dynamic
+ (lambda (str)
+ (with-current-buffer (if (and (minibufferp) (minibuffer-selected-window))
+ (window-buffer (minibuffer-selected-window))
+ (current-buffer))
+ (save-excursion
+ (let ((comps '())
+ (pos (point)))
+ (goto-char (point-min))
+ (while (re-search-forward (concat "\\\\begin{\\(" str "[^}\n ]*\\)")
+ nil t)
+ (unless (and (<= (match-beginning 0) pos)
+ (>= (match-end 0) pos))
+ (push (match-string 1) comps)))
+ comps)))))))
(defun latex-complete-refkeys ()
(when (boundp 'reftex-docstruct-symbol)
(symbol-value reftex-docstruct-symbol)))
(defvar latex-complete-alist
- ;; TODO: Add \begin, \end, \ref, ...
- '(("\\`\\\\\\(short\\)?cite\\'" . latex-complete-bibtex-keys)
- ("\\`\\\\\\(begin\\|end\\)\\'" . latex-complete-envnames)
- ("\\`\\\\[vf]?ref\\'" . latex-complete-refkeys)))
+ `(("\\`\\\\\\(short\\)?cite\\'" . ,#'latex-complete-bibtex-keys)
+ ("\\`\\\\\\(begin\\|end\\)\\'" . ,#'latex-complete-envnames)
+ ("\\`\\\\[vf]?ref\\'" . ,#'latex-complete-refkeys)))
(defun latex-complete-data ()
"Get completion-data at point."
(defun tex-summarize-command (cmd)
(if (not (stringp cmd)) ""
- (mapconcat 'identity
+ (mapconcat #'identity
(mapcar (lambda (s) (car (split-string s)))
(split-string cmd "\\s-*\\(?:;\\|&&\\)\\s-*"))
"&")))
;; Substitute and return.
(if (and hist-cmd
(string-match (concat "[' \t\"]" (format-spec "%r" fspec)
- "\\([;&' \t\"]\\|\\'\\)") hist-cmd))
+ "\\([;&' \t\"]\\|\\'\\)")
+ hist-cmd))
;; The history command was already applied to the same file,
;; so just reuse it.
hist-cmd
(defvar tex-indent-item-re "\\\\\\(bib\\)?item\\>")
(defvar latex-noindent-environments '("document"))
(put 'latex-noindent-environments 'safe-local-variable
- (lambda (x) (null (delq t (mapcar 'stringp x)))))
+ (lambda (x) (null (delq t (mapcar #'stringp x)))))
(defvar tex-latex-indent-syntax-table
(let ((st (make-syntax-table tex-mode-syntax-table)))
;; their arguments frequently include a @@, and we don't want that
;; to overwrite the normal fontification of the argument.
("@\\(file\\|email\\){\\([^}]+\\)" 2 font-lock-string-face keep)
- ("@\\(samp\\|code\\|var\\|math\\|env\\|command\\|option\\){\\([^}]+\\)"
+ ("@\\(samp\\|code\\|var\\|env\\|command\\|option\\){\\([^}]+\\)"
2 font-lock-variable-name-face keep)
+ ;; @math allows nested braces like @math{2^{12}}
+ ("@math{\\([^{}]*{?[^{}]*}?[^{}]*\\)}" 1 font-lock-variable-name-face)
("@\\(cite\\|x?ref\\|pxref\\|dfn\\|inforef\\){\\([^}]+\\)"
2 font-lock-constant-face)
("@\\(anchor\\){\\([^}]+\\)" 2 font-lock-type-face)
;;;###autoload
(defun number-at-point ()
"Return the number at point, or nil if none is found."
- (form-at-point 'sexp 'numberp))
+ (when (thing-at-point-looking-at "-?[0-9]+\\.?[0-9]*" 500)
+ (string-to-number
+ (buffer-substring (match-beginning 0) (match-end 0)))))
+
(put 'number 'thing-at-point 'number-at-point)
;;;###autoload
(defun list-at-point ()
(defcustom time-stamp-format "%:y-%02m-%02d %02H:%02M:%02S %u"
"Format of the string inserted by \\[time-stamp].
-The value may be a string or a list. Lists are supported only for
-backward compatibility; see variable `time-stamp-old-format-warn'.
-
-A string is used verbatim except for character sequences beginning
+This is a string, used verbatim except for character sequences beginning
with %, as follows. The values of non-numeric formatted items depend
on the locale setting recorded in `system-time-locale' and
`locale-coding-system'. The examples here are for the default
:group 'time-stamp
:version "19.29")
-(defcustom time-stamp-old-format-warn 'ask
- "Action if `time-stamp-format' is an old-style list.
-If `error', the format is not used. If `ask', the user is queried about
-using the time-stamp-format. If `warn', a warning is displayed.
-If nil, no notification is given."
- :type '(choice (const :tag "Don't use the format" error)
- (const ask)
- (const warn)
- (const :tag "No notification" nil))
- :group 'time-stamp)
-
(defcustom time-stamp-time-zone nil
"The time zone to be used by \\[time-stamp].
Its format is that of the ZONE argument of the `format-time-string' function."
"Generate the new string to be inserted by \\[time-stamp].
Optionally use format TS-FORMAT instead of `time-stamp-format' to
format the string."
- (or ts-format
- (setq ts-format time-stamp-format))
- (if (stringp ts-format)
- (time-stamp--format (time-stamp-string-preprocess ts-format) nil)
- ;; handle version 1 compatibility
- (cond ((or (eq time-stamp-old-format-warn 'error)
- (and (eq time-stamp-old-format-warn 'ask)
- (not (y-or-n-p "Use non-string time-stamp-format? "))))
- (message "Warning: no time-stamp: time-stamp-format not a string")
- (sit-for 1)
- nil)
- (t
- (cond ((eq time-stamp-old-format-warn 'warn)
- (message "Obsolescent time-stamp-format type; should be string")
- (sit-for 1)))
- (time-stamp-fconcat ts-format " ")))))
+ (if (stringp (or ts-format (setq ts-format time-stamp-format)))
+ (time-stamp--format (time-stamp-string-preprocess ts-format) nil)))
+
(defconst time-stamp-no-file "(no file)"
"String to use when the buffer is not associated with a file.")
+;;; FIXME This comment was written in 1996!
;;; time-stamp is transitioning to using the new, expanded capabilities
;;; of format-time-string. During the process, this function implements
;;; intermediate, compatible formats and complains about old, soon to
mail-host-address)
(system-name)))
-;;; the rest of this file is for version 1 compatibility
-
-(defun time-stamp-fconcat (list sep)
- "Similar to (mapconcat \\='funcall LIST SEP) but LIST allows literals.
-If an element of LIST is a symbol, it is funcalled to get the string to use;
-the separator SEP is used between two strings obtained by funcalling a
-symbol. Otherwise the element itself is inserted; no separator is used
-around literals."
- (let ((return-string "")
- (insert-sep-p nil))
- (while list
- (cond ((symbolp (car list))
- (if insert-sep-p
- (setq return-string (concat return-string sep)))
- (setq return-string (concat return-string (funcall (car list))))
- (setq insert-sep-p t))
- (t
- (setq return-string (concat return-string (car list)))
- (setq insert-sep-p nil)))
- (setq list (cdr list)))
- return-string))
-
(provide 'time-stamp)
;;; time-stamp.el ends here
url-cookie-save-interval
#'url-cookie-write-file))))
+(defun url-cookie-delete-cookies (&optional regexp keep)
+ "Delete all cookies from the cookie store where the domain matches REGEXP.
+If REGEXP is nil, all cookies are deleted. If KEEP is non-nil,
+instead delete all cookies that do not match REGEXP."
+ (dolist (variable '(url-cookie-secure-storage url-cookie-storage))
+ (let ((cookies (symbol-value variable)))
+ (dolist (elem cookies)
+ (when (or (and (null keep)
+ (or (null regexp)
+ (string-match regexp (car elem))))
+ (and keep
+ regexp
+ (not (string-match regexp (car elem)))))
+ (setq cookies (delq elem cookies))))
+ (set variable cookies)))
+ (setq url-cookies-changed-since-last-save t)
+ (url-cookie-write-file))
+
;;; Mode for listing and editing cookies.
(defun url-cookie-list ()
:type gw-method
;; Use non-blocking socket if we can.
:nowait (featurep 'make-network-process
- '(:nowait t))))
- (`socks
+ '(:nowait t))))
+ (`socks
(socks-open-network-stream name buffer host service))
(`telnet
(url-open-telnet name buffer host service))
(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)
;;; Code:
(require 'cl-lib)
+(require 'puny)
+(require 'nsm)
(eval-when-compile
(require 'subr-x))
(507 insufficient-storage "Insufficient storage"))
"The HTTP return codes and their text.")
+(defconst url-https-default-port 443 "Default HTTPS port.")
+
;(eval-when-compile
;; These are all macros so that they are hidden from external sight
;; when the file is byte-compiled.
;; `url-open-stream' needs a buffer in which to do things
;; like authentication. But we use another buffer afterwards.
(unwind-protect
- (let ((proc (url-open-stream host buf host port gateway-method)))
+ (let ((proc (url-open-stream host buf
+ (if url-using-proxy
+ (url-host url-using-proxy)
+ host)
+ (if url-using-proxy
+ (url-port url-using-proxy)
+ port)
+ gateway-method)))
;; url-open-stream might return nil.
(when (processp proc)
;; Drop the temp buffer link before killing the buffer.
(if connection
(url-http-mark-connection-as-busy host port connection))))
+(defun url-http--user-agent-default-string ()
+ "Compute a default User-Agent string based on `url-privacy-level'."
+ (let ((package-info (when url-package-name
+ (format "%s/%s" url-package-name url-package-version)))
+ (emacs-info (unless (and (listp url-privacy-level)
+ (memq 'emacs url-privacy-level))
+ (format "Emacs/%s" emacs-version)))
+ (os-info (unless (and (listp url-privacy-level)
+ (memq 'os url-privacy-level))
+ (format "(%s; %s)" url-system-type url-os-type)))
+ (url-info (format "URL/%s" url-version)))
+ (string-join (delq nil (list package-info url-info
+ emacs-info os-info))
+ " ")))
+
;; Building an HTTP request
(defun url-http-user-agent-string ()
- (if (or (eq url-privacy-level 'paranoid)
- (and (listp url-privacy-level)
- (memq 'agent url-privacy-level)))
- ""
- (if (functionp url-user-agent)
- (funcall url-user-agent)
- url-user-agent)))
+ "Compute a User-Agent string.
+The string is based on `url-privacy-level' and `url-user-agent'."
+ (let* ((hide-ua
+ (or (eq url-privacy-level 'paranoid)
+ (and (listp url-privacy-level)
+ (memq 'agent url-privacy-level))))
+ (ua-string
+ (and (not hide-ua)
+ (cond
+ ((functionp url-user-agent) (funcall url-user-agent))
+ ((stringp url-user-agent) url-user-agent)
+ ((eq url-user-agent 'default) (url-http--user-agent-default-string))))))
+ (if ua-string (format "User-Agent: %s\r\n" (string-trim ua-string)) "")))
(defun url-http-create-request (&optional ref-url)
"Create an HTTP request for `url-http-target-url', referred to by REF-URL."
(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
)
(declare-function gnutls-peer-status "gnutls.c" (proc))
+(declare-function gnutls-negotiate "gnutls.el")
(defun url-http-parse-headers ()
"Parse and handle HTTP specific headers.
;; We do not support agent-driven negotiation, so we just
;; redirect to the preferred URI if one is provided.
nil)
- ((or `moved-permanently `found `temporary-redirect) ; 301 302 307
- ;; If the 301|302 status code is received in response to a
- ;; request other than GET or HEAD, the user agent MUST NOT
- ;; automatically redirect the request unless it can be
- ;; confirmed by the user, since this might change the
- ;; conditions under which the request was issued.
- (unless (member url-http-method '("HEAD" "GET"))
- (setq redirect-uri nil)))
- (`see-other ; 303
+ (`see-other ; 303
;; The response to the request can be found under a different
;; URI and SHOULD be retrieved using a GET method on that
;; resource.
(erase-buffer)
(let ((url-request-method url-http-method)
(url-request-extra-headers url-http-extra-headers)
- (url-request-data url-http-data))
+ (url-request-data url-http-data)
+ (url-using-proxy (url-find-proxy-for-url
+ url-current-object
+ (url-host url-current-object))))
+ (when url-using-proxy
+ (setq url-using-proxy
+ (url-generic-parse-url url-using-proxy)))
(url-http url-current-object url-callback-function
url-callback-arguments (current-buffer)))))
((url-http-parse-headers)
"Retrieve URL via HTTP asynchronously.
URL must be a parsed URL. See `url-generic-parse-url' for details.
-When retrieval is completed, execute the function CALLBACK, passing it
-an updated value of CBARGS as arguments. The first element in CBARGS
-should be a plist describing what has happened so far during the
-request, as described in the docstring of `url-retrieve' (if in
-doubt, specify nil).
+When retrieval is completed, execute the function CALLBACK,
+passing it an updated value of CBARGS as arguments. The first
+element in CBARGS should be a plist describing what has happened
+so far during the request, as described in the docstring of
+`url-retrieve' (if in doubt, specify nil). The current buffer
+then CALLBACK is executed is the retrieval buffer.
Optional arg RETRY-BUFFER, if non-nil, specifies the buffer of a
previous `url-http' call, which is being re-attempted.
Optional arg GATEWAY-METHOD specifies the gateway to be used,
-overriding the value of `url-gateway-method'."
+overriding the value of `url-gateway-method'.
+
+The return value of this function is the retrieval buffer."
(cl-check-type url vector "Need a pre-parsed URL.")
(let* ((host (url-host (or url-using-proxy url)))
(port (url-port (or url-using-proxy url)))
(nsm-noninteractive (or url-request-noninteractive
(and (boundp 'url-http-noninteractive)
url-http-noninteractive)))
- (connection (url-http-find-free-connection host port gateway-method))
+ (connection (url-http-find-free-connection (url-host url)
+ (url-port url)
+ gateway-method))
(mime-accept-string url-mime-accept-string)
(buffer (or retry-buffer
(generate-new-buffer
- (format " *http %s:%d*" host port)))))
+ (format " *http %s:%d*" (url-host url) (url-port url))))))
(if (not connection)
;; Failed to open the connection for some reason
(progn
(kill-buffer buffer)
(setq buffer nil)
- (error "Could not create connection to %s:%d" host port))
+ (error "Could not create connection to %s:%d" (url-host url)
+ (url-port url)))
(with-current-buffer buffer
(mm-disable-multibyte)
(setq url-current-object url
(set-process-sentinel connection 'url-http-async-sentinel))
(`failed
;; Asynchronous connection failed
- (error "Could not create connection to %s:%d" host port))
+ (error "Could not create connection to %s:%d" (url-host url)
+ (url-port url)))
(_
- (set-process-sentinel connection
- 'url-http-end-of-document-sentinel)
- (process-send-string connection (url-http-create-request))))))
+ (if (and url-http-proxy (string= "https"
+ (url-type url-current-object)))
+ (url-https-proxy-connect connection)
+ (set-process-sentinel connection
+ 'url-http-end-of-document-sentinel)
+ (process-send-string connection (url-http-create-request)))))))
buffer))
+(defun url-https-proxy-connect (connection)
+ (setq url-http-after-change-function 'url-https-proxy-after-change-function)
+ (process-send-string connection (format (concat "CONNECT %s:%d HTTP/1.1\r\n"
+ "Host: %s\r\n"
+ "\r\n")
+ (url-host url-current-object)
+ (or (url-port url-current-object)
+ url-https-default-port)
+ (url-host url-current-object))))
+
+(defun url-https-proxy-after-change-function (st nd length)
+ (let* ((process-buffer (current-buffer))
+ (proc (get-buffer-process process-buffer)))
+ (goto-char (point-min))
+ (when (re-search-forward "^\r?\n" nil t)
+ (backward-char 1)
+ ;; Saw the end of the headers
+ (setq url-http-end-of-headers (set-marker (make-marker) (point)))
+ (url-http-parse-response)
+ (cond
+ ((null url-http-response-status)
+ ;; We got back a headerless malformed response from the
+ ;; server.
+ (url-http-activate-callback)
+ (error "Malformed response from proxy, fail!"))
+ ((= url-http-response-status 200)
+ (if (gnutls-available-p)
+ (condition-case e
+ (let ((tls-connection (gnutls-negotiate
+ :process proc
+ :hostname (url-host url-current-object)
+ :verify-error nil)))
+ ;; check certificate validity
+ (setq tls-connection
+ (nsm-verify-connection tls-connection
+ (url-host url-current-object)
+ (url-port url-current-object)))
+ (with-current-buffer process-buffer (erase-buffer))
+ (set-process-buffer tls-connection process-buffer)
+ (setq url-http-after-change-function
+ 'url-http-wait-for-headers-change-function)
+ (set-process-filter tls-connection 'url-http-generic-filter)
+ (process-send-string tls-connection
+ (url-http-create-request)))
+ (gnutls-error
+ (url-http-activate-callback)
+ (error "gnutls-error: %s" e))
+ (error
+ (url-http-activate-callback)
+ (error "error: %s" e)))
+ (error "error: gnutls support needed!")))
+ (t
+ (message "error response: %d" url-http-response-status)
+ (url-http-activate-callback))))))
+
(defun url-http-async-sentinel (proc why)
;; We are performing an asynchronous connection, and a status change
;; has occurred.
(url-http-end-of-document-sentinel proc why))
((string= (substring why 0 4) "open")
(setq url-http-connection-opened t)
- (condition-case error
- (process-send-string proc (url-http-create-request))
- (file-error
- (setq url-http-connection-opened nil)
- (message "HTTP error: %s" error))))
+ (if (and url-http-proxy (string= "https" (url-type url-current-object)))
+ (url-https-proxy-connect proc)
+ (condition-case error
+ (process-send-string proc (url-http-create-request))
+ (file-error
+ (setq url-http-connection-opened nil)
+ (message "HTTP error: %s" error)))))
(t
(setf (car url-callback-arguments)
(nconc (list :error (list 'error 'connection-failed why
;; with url-http.el on systems with 8-character file names.
(require 'tls)
-(defconst url-https-default-port 443 "Default HTTPS port.")
(defconst url-https-asynchronous-p t "HTTPS retrievals are asynchronous.")
;; FIXME what is the point of this alias being an autoload?
-;;; url-queue.el --- Fetching web pages in parallel
+;;; url-queue.el --- Fetching web pages in parallel -*- lexical-binding: t -*-
;; Copyright (C) 2011-2016 Free Software Foundation, Inc.
;;; Internal variables.
(defvar url-queue nil)
+(defvar url-queue-progress-timer nil)
(cl-defstruct url-queue
url callback cbargs silentp
(when (and waiting
(< running url-queue-parallel-processes))
(setf (url-queue-pre-triggered waiting) t)
- (run-with-idle-timer 0.01 nil 'url-queue-run-queue))))
+ ;; We start fetching from this idle timer...
+ (run-with-idle-timer 0.01 nil #'url-queue-run-queue)
+ ;; And then we set up a separate timer to ensure progress when a
+ ;; web server is unresponsive.
+ (unless url-queue-progress-timer
+ (setq url-queue-progress-timer
+ (run-with-idle-timer 1 1 #'url-queue-check-progress))))))
(defun url-queue-run-queue ()
(url-queue-prune-old-entries)
(setf (url-queue-start-time waiting) (float-time))
(url-queue-start-retrieve waiting))))
+(defun url-queue-check-progress ()
+ (when url-queue-progress-timer
+ (if url-queue
+ (url-queue-run-queue)
+ (cancel-timer url-queue-progress-timer)
+ (setq url-queue-progress-timer nil))))
+
(defun url-queue-callback-function (status job)
(setq url-queue (delq job url-queue))
(when (and (eq (car status) :error)
(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)))
Valid symbols are:
email -- the email address
os -- the operating system info
+emacs -- the version of Emacs
lastloc -- the last location
agent -- do not send the User-Agent string
cookies -- never accept HTTP cookies
(checklist :tag "Custom"
(const :tag "Email address" :value email)
(const :tag "Operating system" :value os)
+ (const :tag "Emacs version" :value emacs)
(const :tag "Last location" :value lastloc)
(const :tag "Browser identification" :value agent)
(const :tag "No cookies" :value cookie)))
(const :tag "Direct connection" :value native))
:group 'url-hairy)
-(defcustom url-user-agent (format "User-Agent: %sURL/%s\r\n"
- (if url-package-name
- (concat url-package-name "/"
- url-package-version " ")
- "") url-version)
- "User Agent used by the URL package for HTTP/HTTPS requests
-Should be a string or a function of no arguments returning a string."
- :type '(choice (string :tag "A static User-Agent string")
- (function :tag "Call a function to get the User-Agent string"))
- :version "25.1"
+(defcustom url-user-agent 'default
+ "User Agent used by the URL package for HTTP/HTTPS requests.
+Should be one of:
+* A string (not including the \"User-Agent:\" prefix)
+* A function of no arguments, returning a string
+* `default' (to compute a value according to `url-privacy-level')
+* nil (to omit the User-Agent header entirely)"
+ :type
+ '(choice
+ (string :tag "A static User-Agent string")
+ (function :tag "Call a function to get the User-Agent string")
+ (const :tag "No User-Agent at all" :value nil)
+ (const :tag "An string auto-generated according to `url-privacy-level'"
+ :value default))
+ :version "25.2"
:group 'url)
(defvar url-setup-done nil "Has setup configuration been done?")
buffer))
;;;###autoload
-(defun url-retrieve-synchronously (url &optional silent inhibit-cookies)
+(defun url-retrieve-synchronously (url &optional silent inhibit-cookies timeout)
"Retrieve URL synchronously.
Return the buffer containing the data, or nil if there are no data
associated with it (the case for dired, info, or mailto URLs that need
no further processing). URL is either a string or a parsed URL.
-If SILENT is non-nil, don't display progress reports and similar messages.
-If INHIBIT-COOKIES is non-nil, cookies will neither be stored nor sent
-to the server."
+
+If SILENT is non-nil, don't do any messaging while retrieving.
+If INHIBIT-COOKIES is non-nil, refuse to store cookies. If
+TIMEOUT is passed, it should be a number that says (in seconds)
+how long to wait for a response before giving up."
(url-do-setup)
(let ((retrieval-done nil)
+ (start-time (current-time))
(asynch-buffer nil))
(setq asynch-buffer
(url-retrieve url (lambda (&rest ignored)
;; buffer-local variable so we can find the exact process that we
;; should be waiting for. In the mean time, we'll just wait for any
;; process output.
- (while (not retrieval-done)
+ (while (and (not retrieval-done)
+ (or (not timeout)
+ (< (float-time (time-subtract
+ (current-time) start-time))
+ timeout)))
(url-debug 'retrieval
"Spinning in url-retrieve-synchronously: %S (%S)"
retrieval-done asynch-buffer)
;; `sleep-for' was tried but it lead to other forms of
;; hanging. --Stef
(unless (or (with-local-quit
- (accept-process-output proc))
+ (accept-process-output proc 1))
(null proc))
;; accept-process-output returned nil, maybe because the process
;; exited (and may have been replaced with another). If we got
:type '(repeat regexp)
:group 'change-log)
+(defcustom change-log-directory-files '(".bzr" ".git" ".hg" ".svn")
+ "List of files that cause `find-change-log' to stop in containing directory.
+This applies if no pre-existing ChangeLog is found. If nil, then in such
+a case simply use the directory containing the changed file."
+ :version "25.2"
+ :type '(repeat file)
+ :group 'change-log)
+
(defface change-log-date
'((t (:inherit font-lock-string-face)))
"Face used to highlight dates in date lines."
(lambda (x) (or (booleanp x) (stringp x))))
(defun add-log-iso8601-time-zone (&optional time zone)
- (let* ((utc-offset (or (car (current-time-zone time zone)) 0))
- (sign (if (< utc-offset 0) ?- ?+))
- (sec (abs utc-offset))
- (ss (% sec 60))
- (min (/ sec 60))
- (mm (% min 60))
- (hh (/ min 60)))
- (format (cond ((not (zerop ss)) "%c%02d:%02d:%02d")
- ((not (zerop mm)) "%c%02d:%02d")
- (t "%c%02d"))
- sign hh mm ss)))
+ (declare (obsolete nil "25.2"))
+ (format-time-string "%:::z" time zone))
(defvar add-log-iso8601-with-time-zone nil)
(defun add-log-iso8601-time-string (&optional time zone)
- (let ((date (format-time-string "%Y-%m-%d" time zone)))
- (if add-log-iso8601-with-time-zone
- (concat date " " (add-log-iso8601-time-zone time zone))
- date)))
+ (format-time-string
+ (if add-log-iso8601-with-time-zone "%Y-%m-%d %:::z" "%Y-%m-%d") time zone))
(defun change-log-name ()
"Return (system-dependent) default name for a change log file."
If `change-log-default-name' contains a leading directory component, then
simply find it in the current directory. Otherwise, search in the current
-directory and its successive parents for a file so named.
+directory and its successive parents for a file so named. Stop at the first
+such file that exists (or has a buffer visiting it), or the first directory
+that contains any of `change-log-directory-files'. If no match is found,
+use the current directory. To override the choice of this function,
+simply create an empty ChangeLog file first by hand in the desired place.
Once a file is found, `change-log-default-name' is set locally in the
current buffer to the complete file name.
;; for several related directories.
(setq file-name (file-chase-links file-name))
(setq file-name (expand-file-name file-name))
- ;; Move up in the dir hierarchy till we find a change log file.
- (let ((file1 file-name)
- parent-dir)
- (while (and (not (or (get-file-buffer file1) (file-exists-p file1)))
- (progn (setq parent-dir
- (file-name-directory
- (directory-file-name
- (file-name-directory file1))))
- ;; Give up if we are already at the root dir.
- (not (string= (file-name-directory file1)
- parent-dir))))
- ;; Move up to the parent dir and try again.
- (setq file1 (expand-file-name
- (file-name-nondirectory (change-log-name))
- parent-dir)))
- ;; If we found a change log in a parent, use that.
- (if (or (get-file-buffer file1) (file-exists-p file1))
- (setq file-name file1)))))
+ (let* ((cbase (file-name-nondirectory (change-log-name)))
+ (root
+ (locate-dominating-file
+ file-name
+ (lambda (dir)
+ (or
+ (let ((clog (expand-file-name cbase dir)))
+ (or (get-file-buffer clog) (file-exists-p clog)))
+ ;; Stop at VCS root?
+ (and change-log-directory-files
+ (let ((files change-log-directory-files)
+ found)
+ (while
+ (and
+ (not
+ (setq found
+ (file-exists-p
+ (expand-file-name (car files) dir))))
+ (setq files (cdr files))))
+ found)))))))
+ (if root (setq file-name (expand-file-name cbase root))))))
;; Make a local variable in this buffer so we needn't search again.
(set (make-local-variable 'change-log-default-name) file-name))
file-name)
"\\(\\s \\|[(),:]\\)")
bound t)))
;; Add to the existing item for the same file.
- (re-search-forward "^\\s *$\\|^\\s \\*")
- (goto-char (match-beginning 0))
+ (if (re-search-forward "^\\s *$\\|^\\s \\*" nil t)
+ (goto-char (match-beginning 0))
+ (goto-char (point-max))
+ (insert "\n"))
;; Delete excess empty lines; make just 2.
(while (and (not (eobp)) (looking-at "^\\s *$"))
(delete-region (point) (line-beginning-position 2)))
-;;; ediff-util.el --- the core commands and utilities of ediff
+;;; ediff-util.el --- the core commands and utilities of ediff -*- lexical-binding:t -*-
;; Copyright (C) 1994-2016 Free Software Foundation, Inc.
(select-window ediff-control-window)
(ediff-visible-region)
- (run-hooks 'startup-hooks)
+ (mapc #'funcall startup-hooks)
(ediff-arrange-autosave-in-merge-jobs merge-buffer-file)
(ediff-refresh-mode-lines)
))
(defun ediff-file-compressed-p (file)
- (condition-case nil
- (require 'jka-compr)
- (error))
- (if (featurep 'jka-compr)
- (string-match (jka-compr-build-file-regexp) file)))
+ (require 'jka-compr)
+ (string-match (jka-compr-build-file-regexp) file))
(defun ediff-swap-buffers ()
(cond ((eq ediff-window-setup-function 'ediff-setup-windows-multiframe)
(setq ediff-multiframe nil)
- (setq window-setup-func 'ediff-setup-windows-plain))
+ (setq window-setup-func 'ediff-setup-windows-plain)
+ (message "ediff is now in 'plain' mode"))
((eq ediff-window-setup-function 'ediff-setup-windows-plain)
(if (ediff-in-control-buffer-p)
(ediff-kill-bottom-toolbar))
(window-live-p ediff-control-window))
(set-window-dedicated-p ediff-control-window nil))
(setq ediff-multiframe t)
- (setq window-setup-func 'ediff-setup-windows-multiframe))
+ (setq window-setup-func 'ediff-setup-windows-multiframe)
+ (message "ediff is now in 'multiframe' mode"))
(t
(if (and (ediff-buffer-live-p ediff-control-buffer)
(window-live-p ediff-control-window))
(set-window-dedicated-p ediff-control-window nil))
(setq ediff-multiframe t)
(setq window-setup-func 'ediff-setup-windows-multiframe))
- )
+ (message "ediff is now in 'multiframe' mode"))
;; change default
(setq-default ediff-window-setup-function window-setup-func)
(or ctl-buf (setq ctl-buf ediff-control-buffer))
(ediff-with-current-buffer ctl-buf
(let* ((buf (ediff-get-buffer buf-type))
- (wind (eval (ediff-get-symbol-from-alist
- buf-type ediff-window-alist)))
+ (wind (symbol-value (ediff-get-symbol-from-alist
+ buf-type ediff-window-alist)))
(beg (window-start wind))
(end (ediff-get-diff-posn buf-type 'end))
lines)
(or ctl-buf (setq ctl-buf ediff-control-buffer))
(ediff-with-current-buffer ctl-buf
(let* ((buf (ediff-get-buffer buf-type))
- (wind (eval (ediff-get-symbol-from-alist
- buf-type ediff-window-alist)))
+ (wind (symbol-value (ediff-get-symbol-from-alist
+ buf-type ediff-window-alist)))
(end (or (window-end wind) (window-end wind t)))
(beg (ediff-get-diff-posn buf-type 'beg diff-num)))
(ediff-with-current-buffer buf
(frame-selected-window warp-frame))
2 1))
- (run-hooks 'after-quit-hook-internal)
+ (mapc #'funcall after-quit-hook-internal)
))
;; Returns frame under mouse, if this frame is not a minibuffer
(declare-function ediff-regions-internal "ediff"
(buffer-a beg-a end-a buffer-b beg-b end-b
startup-hooks job-name word-mode setup-parameters))
+(defvar zmacs-regions) ;;XEmacs'ism.
(defun ediff-inferior-compare-regions ()
"Compare regions in an active Ediff session.
(while (cond ((memq answer possibilities)
(setq possibilities (delq answer possibilities))
(setq bufA
- (eval
+ (symbol-value
(ediff-get-symbol-from-alist
answer ediff-buffer-alist)))
nil)
(while (cond ((memq answer possibilities)
(setq possibilities (delq answer possibilities))
(setq bufB
- (eval
+ (symbol-value
(ediff-get-symbol-from-alist
answer ediff-buffer-alist)))
nil)
(setq n (1+ n)))
(format "%s<%d>%s" prefix n suffix))))
+(defvar reporter-prompt-for-summary-p)
(defun ediff-submit-report ()
"Submit bug report on Ediff."
(interactive)
(ediff-barf-if-not-control-buffer)
+ (defvar ediff-device-type)
+ (defvar ediff-buffer-name)
(let ((reporter-prompt-for-summary-p t)
(ctl-buf ediff-control-buffer)
(ediff-device-type (ediff-device-type))
- varlist salutation buffer-name)
+ varlist salutation ediff-buffer-name)
(setq varlist '(ediff-diff-program ediff-diff-options
ediff-diff3-program ediff-diff3-options
ediff-patch-program ediff-patch-options
ediff-split-window-function
ediff-job-name
ediff-word-mode
- buffer-name
+ ediff-buffer-name
ediff-device-type
))
(setq salutation "
(progn
(if (ediff-buffer-live-p ctl-buf)
(set-buffer ctl-buf))
- (setq buffer-name (buffer-name))
+ (setq ediff-buffer-name (buffer-name))
(require 'reporter)
(reporter-submit-bug-report "kifer@cs.stonybrook.edu, bug-gnu-emacs@gnu.org"
(ediff-version)
(require 'ediff-ptch)
(setq patch-buf
(ediff-get-patch-buffer
- (if arg (prefix-numeric-value arg)) patch-buf))
+ (and arg (prefix-numeric-value arg))
+ (and patch-buf (get-buffer patch-buf))))
(setq source-dir (cond (ediff-use-last-dir ediff-last-dir-patch)
((and (not ediff-patch-default-directory)
(buffer-file-name patch-buf))
(if arg (prefix-numeric-value arg)) patch-buf))
(ediff-patch-buffer-internal
patch-buf
- (read-buffer
- "Which buffer to patch? "
- (ediff-other-buffer patch-buf))))
+ (read-buffer "Which buffer to patch? " (ediff-other-buffer patch-buf)
+ 'require-match)))
;;;###autoload
(append '("-d" "-b")
(if (listp diff-switches) diff-switches (list diff-switches)))
"A list of strings specifying switches to be passed to diff.
-Used in `smerge-diff-base-mine' and related functions."
+Used in `smerge-diff-base-upper' and related functions."
:type '(repeat string))
(defcustom smerge-auto-leave t
"Non-nil means to leave `smerge-mode' when the last conflict is resolved."
:type 'boolean)
-(defface smerge-mine
+(defface smerge-upper
'((((class color) (min-colors 88) (background light))
:background "#ffdddd")
(((class color) (min-colors 88) (background dark))
:background "#553333")
(((class color))
:foreground "red"))
- "Face for your code.")
-(define-obsolete-face-alias 'smerge-mine-face 'smerge-mine "22.1")
-(defvar smerge-mine-face 'smerge-mine)
+ "Face for the `upper' version of a conflict.")
+(define-obsolete-face-alias 'smerge-mine 'smerge-upper "25.2")
+(defvar smerge-upper-face 'smerge-upper)
-(defface smerge-other
+(defface smerge-lower
'((((class color) (min-colors 88) (background light))
:background "#ddffdd")
(((class color) (min-colors 88) (background dark))
:background "#335533")
(((class color))
:foreground "green"))
- "Face for the other code.")
-(define-obsolete-face-alias 'smerge-other-face 'smerge-other "22.1")
-(defvar smerge-other-face 'smerge-other)
+ "Face for the `lower' version of a conflict.")
+(define-obsolete-face-alias 'smerge-other 'smerge-lower "25.2")
+(defvar smerge-lower-face 'smerge-lower)
(defface smerge-base
'((((class color) (min-colors 88) (background light))
("r" . smerge-resolve)
("a" . smerge-keep-all)
("b" . smerge-keep-base)
- ("o" . smerge-keep-other)
- ("m" . smerge-keep-mine)
+ ("o" . smerge-keep-lower) ; for the obsolete keep-other
+ ("l" . smerge-keep-lower)
+ ("m" . smerge-keep-upper) ; for the obsolete keep-mine
+ ("u" . smerge-keep-upper)
("E" . smerge-ediff)
("C" . smerge-combine-with-next)
("R" . smerge-refine)
("\C-m" . smerge-keep-current)
("=" . ,(make-sparse-keymap "Diff"))
- ("=<" "base-mine" . smerge-diff-base-mine)
- ("=>" "base-other" . smerge-diff-base-other)
- ("==" "mine-other" . smerge-diff-mine-other))
+ ("=<" "base-upper" . smerge-diff-base-upper)
+ ("=>" "base-lower" . smerge-diff-base-lower)
+ ("==" "upper-lower" . smerge-diff-upper-lower))
"The base keymap for `smerge-mode'.")
(defcustom smerge-command-prefix "\C-c^"
"--"
["Revert to Base" smerge-keep-base :help "Revert to base version"
:active (smerge-check 2)]
- ["Keep Other" smerge-keep-other :help "Keep `other' version"
- :active (smerge-check 3)]
- ["Keep Yours" smerge-keep-mine :help "Keep your version"
+ ["Keep Upper" smerge-keep-upper :help "Keep `upper' version"
:active (smerge-check 1)]
+ ["Keep Lower" smerge-keep-lower :help "Keep `lower' version"
+ :active (smerge-check 3)]
"--"
- ["Diff Base/Mine" smerge-diff-base-mine
- :help "Diff `base' and `mine' for current conflict"
+ ["Diff Base/Upper" smerge-diff-base-upper
+ :help "Diff `base' and `upper' for current conflict"
:active (smerge-check 2)]
- ["Diff Base/Other" smerge-diff-base-other
- :help "Diff `base' and `other' for current conflict"
+ ["Diff Base/Lower" smerge-diff-base-lower
+ :help "Diff `base' and `lower' for current conflict"
:active (smerge-check 2)]
- ["Diff Mine/Other" smerge-diff-mine-other
- :help "Diff `mine' and `other' for current conflict"
+ ["Diff Upper/Lower" smerge-diff-upper-lower
+ :help "Diff `upper' and `lower' for current conflict"
:active (smerge-check 1)]
"--"
["Invoke Ediff" smerge-ediff
))
(easy-menu-define smerge-context-menu nil
- "Context menu for mine area in `smerge-mode'."
+ "Context menu for upper area in `smerge-mode'."
'(nil
["Keep Current" smerge-keep-current :help "Use current (at point) version"]
["Kill Current" smerge-kill-current :help "Remove current (at point) version"]
(defconst smerge-font-lock-keywords
'((smerge-find-conflict
- (1 smerge-mine-face prepend t)
+ (1 smerge-upper-face prepend t)
(2 smerge-base-face prepend t)
- (3 smerge-other-face prepend t)
+ (3 smerge-lower-face prepend t)
;; FIXME: `keep' doesn't work right with syntactic fontification.
(0 smerge-markers-face keep)
(4 nil t t)
(defconst smerge-begin-re "^<<<<<<< \\(.*\\)\n")
(defconst smerge-end-re "^>>>>>>> \\(.*\\)\n")
(defconst smerge-base-re "^||||||| \\(.*\\)\n")
-(defconst smerge-other-re "^=======\n")
+(defconst smerge-lower-re "^=======\n")
(defvar smerge-conflict-style nil
"Keep track of which style of conflict is in use.
(if diff-auto-refine-mode
(condition-case nil (smerge-refine) (error nil))))
-(defconst smerge-match-names ["conflict" "mine" "base" "other"])
+(defconst smerge-match-names ["conflict" "upper" "base" "lower"])
(defun smerge-ensure-match (n)
(unless (match-end n)
(zerop (call-process diff-command nil buf nil "-bc" b m)))
(set-match-data md)
(smerge-keep-n 3))
- ;; Try "diff -b BASE MINE | patch OTHER".
+ ;; Try "diff -b BASE UPPER | patch LOWER".
((when (and (not safe) m2e b
;; If the BASE is empty, this would just concatenate
;; the two, which is rarely right.
(narrow-to-region m0b m0e)
(smerge-remove-props m0b m0e)
(insert-file-contents o nil nil nil t)))
- ;; Try "diff -b BASE OTHER | patch MINE".
+ ;; Try "diff -b BASE LOWER | patch UPPER".
((when (and (not safe) m2e b
;; If the BASE is empty, this would just concatenate
;; the two, which is rarely right.
(smerge-keep-n 2)
(smerge-auto-leave))
-(defun smerge-keep-other ()
- "Use \"other\" version."
+(defun smerge-keep-lower ()
+ "Keep the \"lower\" version of a merge conflict.
+In a conflict that looks like:
+ <<<<<<<
+ UUU
+ =======
+ LLL
+ >>>>>>>
+this keeps \"LLL\"."
(interactive)
(smerge-match-conflict)
;;(smerge-ensure-match 3)
(smerge-keep-n 3)
(smerge-auto-leave))
-(defun smerge-keep-mine ()
- "Keep your version."
+(define-obsolete-function-alias 'smerge-keep-other 'smerge-keep-lower "25.2")
+
+(defun smerge-keep-upper ()
+ "Keep the \"upper\" version of a merge conflict.
+In a conflict that looks like:
+ <<<<<<<
+ UUU
+ =======
+ LLL
+ >>>>>>>
+this keeps \"UUU\"."
(interactive)
(smerge-match-conflict)
;;(smerge-ensure-match 1)
(smerge-keep-n 1)
(smerge-auto-leave))
+(define-obsolete-function-alias 'smerge-keep-mine 'smerge-keep-upper "25.2")
+
(defun smerge-get-current ()
(let ((i 3))
(while (or (not (match-end i))
(smerge-keep-n (car left))
(smerge-auto-leave))))))
-(defun smerge-diff-base-mine ()
- "Diff `base' and `mine' version in current conflict region."
+(defun smerge-diff-base-upper ()
+ "Diff `base' and `upper' version in current conflict region."
(interactive)
(smerge-diff 2 1))
-(defun smerge-diff-base-other ()
- "Diff `base' and `other' version in current conflict region."
+(define-obsolete-function-alias 'smerge-diff-base-mine
+ 'smerge-diff-base-upper "25.2")
+
+(defun smerge-diff-base-lower ()
+ "Diff `base' and `lower' version in current conflict region."
(interactive)
(smerge-diff 2 3))
-(defun smerge-diff-mine-other ()
- "Diff `mine' and `other' version in current conflict region."
+(define-obsolete-function-alias 'smerge-diff-base-other
+ 'smerge-diff-base-lower "25.2")
+
+(defun smerge-diff-upper-lower ()
+ "Diff `upper' and `lower' version in current conflict region."
(interactive)
(smerge-diff 1 3))
+(define-obsolete-function-alias 'smerge-diff-mine-other
+ 'smerge-diff-upper-lower "25.2")
+
(defun smerge-match-conflict ()
"Get info about the conflict. Puts the info in the `match-data'.
The submatches contain:
0: the whole conflict.
- 1: your code.
- 2: the base code.
- 3: other code.
+ 1: upper version of the code.
+ 2: base version of the code.
+ 3: lower version of the code.
An error is raised if not inside a conflict."
(save-excursion
(condition-case nil
(_ (re-search-backward smerge-begin-re))
(start (match-beginning 0))
- (mine-start (match-end 0))
+ (upper-start (match-end 0))
(filename (or (match-string 1) ""))
(_ (re-search-forward smerge-end-re))
(_ (cl-assert (< orig-point (match-end 0))))
- (other-end (match-beginning 0))
+ (lower-end (match-beginning 0))
(end (match-end 0))
- (_ (re-search-backward smerge-other-re start))
+ (_ (re-search-backward smerge-lower-re start))
- (mine-end (match-beginning 0))
- (other-start (match-end 0))
+ (upper-end (match-beginning 0))
+ (lower-start (match-end 0))
base-start base-end)
;; handle the various conflict styles
(cond
((save-excursion
- (goto-char mine-start)
+ (goto-char upper-start)
(re-search-forward smerge-begin-re end t))
;; There's a nested conflict and we're after the beginning
;; of the outer one but before the beginning of the inner one.
((re-search-backward smerge-base-re start t)
;; a 3-parts conflict
(set (make-local-variable 'smerge-conflict-style) 'diff3-A)
- (setq base-end mine-end)
- (setq mine-end (match-beginning 0))
+ (setq base-end upper-end)
+ (setq upper-end (match-beginning 0))
(setq base-start (match-end 0)))
((string= filename (file-name-nondirectory
(equal filename "ANCESTOR")
(string-match "\\`[.0-9]+\\'" filename)))
;; a same-diff conflict
- (setq base-start mine-start)
- (setq base-end mine-end)
- (setq mine-start other-start)
- (setq mine-end other-end)))
+ (setq base-start upper-start)
+ (setq base-end upper-end)
+ (setq upper-start lower-start)
+ (setq upper-end lower-end)))
(store-match-data (list start end
- mine-start mine-end
+ upper-start upper-end
base-start base-end
- other-start other-end
+ lower-start lower-end
(when base-start (1- base-start)) base-start
- (1- other-start) other-start))
+ (1- lower-start) lower-start))
t)
(search-failed (user-error "Point not in conflict region")))))
'((smerge . refine) (face . smerge-refined-added))))))
(defun smerge-swap ()
- "Swap the \"Mine\" and the \"Other\" chunks.
+ "Swap the \"Upper\" and the \"Lower\" chunks.
Can be used before things like `smerge-keep-all' or `smerge-resolve' where the
ordering can have some subtle influence on the result, such as preferring the
-spacing of the \"Other\" chunk."
+spacing of the \"Lower\" chunk."
(interactive)
(smerge-match-conflict)
(goto-char (match-beginning 3))
default)))
;;;###autoload
-(defun smerge-ediff (&optional name-mine name-other name-base)
+(defun smerge-ediff (&optional name-upper name-lower name-base)
"Invoke ediff to resolve the conflicts.
-NAME-MINE, NAME-OTHER, and NAME-BASE, if non-nil, are used for the
+NAME-UPPER, NAME-LOWER, and NAME-BASE, if non-nil, are used for the
buffer names."
(interactive)
(let* ((buf (current-buffer))
;;(ediff-default-variant 'default-B)
(config (current-window-configuration))
(filename (file-name-nondirectory (or buffer-file-name "-")))
- (mine (generate-new-buffer
- (or name-mine
+ (upper (generate-new-buffer
+ (or name-upper
(concat "*" filename " "
- (smerge--get-marker smerge-begin-re "MINE")
+ (smerge--get-marker smerge-begin-re "UPPER")
"*"))))
- (other (generate-new-buffer
- (or name-other
+ (lower (generate-new-buffer
+ (or name-lower
(concat "*" filename " "
- (smerge--get-marker smerge-end-re "OTHER")
+ (smerge--get-marker smerge-end-re "LOWER")
"*"))))
base)
- (with-current-buffer mine
+ (with-current-buffer upper
(buffer-disable-undo)
(insert-buffer-substring buf)
(goto-char (point-min))
(set-buffer-modified-p nil)
(funcall mode))
- (with-current-buffer other
+ (with-current-buffer lower
(buffer-disable-undo)
(insert-buffer-substring buf)
(goto-char (point-min))
;; Fire up ediff.
(set-buffer
(if base
- (ediff-merge-buffers-with-ancestor mine other base)
+ (ediff-merge-buffers-with-ancestor upper lower base)
;; nil 'ediff-merge-revisions-with-ancestor buffer-file-name)
- (ediff-merge-buffers mine other)))
+ (ediff-merge-buffers upper lower)))
;; nil 'ediff-merge-revisions buffer-file-name)))
;; Ediff is now set up, and we are in the control buffer.
(pcase-let ((`(,pt1 ,pt2 ,pt3 ,pt4)
(sort `(,pt1 ,pt2 ,pt3 ,@(if pt4 (list pt4))) '>=)))
(goto-char pt1) (beginning-of-line)
- (insert ">>>>>>> OTHER\n")
+ (insert ">>>>>>> LOWER\n")
(goto-char pt2) (beginning-of-line)
(insert "=======\n")
(goto-char pt3) (beginning-of-line)
(when pt4
(insert "||||||| BASE\n")
(goto-char pt4) (beginning-of-line))
- (insert "<<<<<<< MINE\n"))
+ (insert "<<<<<<< UPPER\n"))
(if smerge-mode nil (smerge-mode 1))
(smerge-refine))
(defconst smerge-parsep-re
(concat smerge-begin-re "\\|" smerge-end-re "\\|"
- smerge-base-re "\\|" smerge-other-re "\\|"))
+ smerge-base-re "\\|" smerge-lower-re "\\|"))
;;;###autoload
(define-minor-mode smerge-mode
(make-local-variable 'vc-log-after-operation-hook)
(when after-hook
(setq vc-log-after-operation-hook after-hook))
- (setq vc-log-operation action)
+ (set (make-local-variable 'vc-log-operation) action)
(when comment
(erase-buffer)
(when (stringp comment) (insert comment)))
(funcall log-operation
log-fileset
log-entry))
+ (setq vc-log-operation nil)
;; Quit windows on logbuf.
(cond
(goto-char (point-min))
(unless (eobp)
;; Indent the expanded log entry.
- (indent-region (point-min) (point-max) 2)
+ (while (re-search-forward "^ " nil t)
+ (replace-match "")
+ (forward-line))
(buffer-string))))
(defun vc-git-region-history (file buffer lfrom lto)
;; - dir-printer (fileinfo) OK
;; * working-revision (file) OK
;; * checkout-model (files) OK
-;; - mode-line-string (file) NOT NEEDED
+;; - mode-line-string (file) OK
;; STATE-CHANGING FUNCTIONS
;; * register (files &optional rev comment) OK
;; * create-repo () OK
(defun vc-hg-state (file)
"Hg-specific version of `vc-state'."
+ (let ((state (vc-hg-state-fast file)))
+ (if (eq state 'unsupported) (vc-hg-state-slow file) state)))
+
+(defun vc-hg-state-slow (file)
+ "Determine status of FILE by running hg."
(setq file (expand-file-name file))
(let*
((status nil)
"parent" "--template" "{rev}")))
"0"))
+(defcustom vc-hg-symbolic-revision-styles
+ '(builtin-active-bookmark
+ "{if(bookmarks,sub(' ',',',bookmarks),if(phabdiff,phabdiff,shortest(node,6)))}")
+ "List of ways to present versions symbolically. The version
+that we use is the first one that successfully produces a
+non-empty string.
+
+Each entry in the list can be either:
+
+- The symbol `builtin-active-bookmark', which indicates that we
+should use the active bookmark if one exists. A template can
+supply this information as well, but `builtin-active-bookmark' is
+handled entirely inside Emacs and so is more efficient than using
+the generic Mercurial mechanism.
+
+- A string giving the Mercurial template to supply to \"hg
+parent\". \"hg help template\" may be useful reading.
+
+- A function to call; it should accept two arguments (a revision
+and an optional path to which to limit history) and produce a
+string. The function is called with `default-directory' set to
+within the repository.
+
+If no list entry produces a useful revision, return `nil'."
+ :type '(repeat (choice
+ (const :tag "Active bookmark" 'bookmark)
+ (string :tag "Hg template")
+ (function :tag "Custom")))
+ :version "25.2"
+ :group 'vc-hg)
+
+(defcustom vc-hg-use-file-version-for-mode-line-version nil
+ "When enabled, the modeline contains revision information for the visited file.
+When not, the revision in the modeline is for the repository
+working copy. `nil' is the much faster setting for
+large repositories."
+ :type 'boolean
+ :version "25.2"
+ :group 'vc-hg)
+
+(defun vc-hg--active-bookmark-internal (rev)
+ (when (equal rev ".")
+ (let* ((current-bookmarks-file ".hg/bookmarks.current"))
+ (when (file-exists-p current-bookmarks-file)
+ (ignore-errors
+ (with-temp-buffer
+ (insert-file-contents current-bookmarks-file)
+ (buffer-substring-no-properties
+ (point-min) (point-max))))))))
+
+(defun vc-hg--run-log (template rev path)
+ (ignore-errors
+ (with-output-to-string
+ (if path
+ (vc-hg-command
+ standard-output 0 nil
+ "log" "-f" "-l1" "--template" template path)
+ (vc-hg-command
+ standard-output 0 nil
+ "log" "-r" rev "-l1" "--template" template)))))
+
+(defun vc-hg--symbolic-revision (rev &optional path)
+ "Make a Mercurial revision human-readable.
+REV is a Mercurial revision. `default-directory' is assumed to
+be in the repository root of interest. PATH, if set, is a
+specific file to query."
+ (let ((symbolic-revision nil)
+ (styles vc-hg-symbolic-revision-styles))
+ (while (and (not symbolic-revision) styles)
+ (let ((style (pop styles)))
+ (setf symbolic-revision
+ (cond ((and (null path) (eq style 'builtin-active-bookmark))
+ (vc-hg--active-bookmark-internal rev))
+ ((stringp style)
+ (vc-hg--run-log style rev path))
+ ((functionp style)
+ (funcall style rev path))))))
+ symbolic-revision))
+
+(defun vc-hg-mode-line-string (file)
+ "Hg-specific version of `vc-mode-line-string'."
+ (let* ((backend-name "Hg")
+ (truename (file-truename file))
+ (state (vc-state truename))
+ (state-echo nil)
+ (face nil)
+ (rev (and state
+ (let ((default-directory
+ (expand-file-name (vc-hg-root truename))))
+ (vc-hg--symbolic-revision
+ "."
+ (and vc-hg-use-file-version-for-mode-line-version
+ truename)))))
+ (rev (or rev "???")))
+ (propertize
+ (cond ((or (eq state 'up-to-date)
+ (eq state 'needs-update))
+ (setq state-echo "Up to date file")
+ (setq face 'vc-up-to-date-state)
+ (concat backend-name "-" rev))
+ ((eq state 'added)
+ (setq state-echo "Locally added file")
+ (setq face 'vc-locally-added-state)
+ (concat backend-name "@" rev))
+ ((eq state 'conflict)
+ (setq state-echo "File contains conflicts after the last merge")
+ (setq face 'vc-conflict-state)
+ (concat backend-name "!" rev))
+ ((eq state 'removed)
+ (setq state-echo "File removed from the VC system")
+ (setq face 'vc-removed-state)
+ (concat backend-name "!" rev))
+ ((eq state 'missing)
+ (setq state-echo "File tracked by the VC system, but missing from the file system")
+ (setq face 'vc-missing-state)
+ (concat backend-name "?" rev))
+ (t
+ (setq state-echo "Locally modified file")
+ (setq face 'vc-edited-state)
+ (concat backend-name ":" rev)))
+ 'face face
+ 'help-echo (concat state-echo " under the " backend-name
+ " version control system"))))
+
;;; History functions
(defcustom vc-hg-log-switches nil
;; TODO: update *vc-change-log* buffer so can see @ if --graph
))
+;;; Native data structure reading
+
+(defcustom vc-hg-parse-hg-data-structures t
+ "If true, try directly parsing Mercurial data structures
+directly instead of always running Mercurial. We try to be safe
+against Mercurial data structure format changes and always fall
+back to running Mercurial directly."
+ :type 'boolean
+ :version "25.2"
+ :group 'vc-hg)
+
+(defsubst vc-hg--read-u8 ()
+ "Read and advance over an unsigned byte.
+Return a fixnum."
+ (prog1 (char-after)
+ (forward-char)))
+
+(defsubst vc-hg--read-u32-be ()
+ "Read and advance over a big-endian unsigned 32-bit integer.
+Return a fixnum; on overflow, result is undefined."
+ ;; Because elisp bytecode has an instruction for multiply and
+ ;; doesn't have one for lsh, it's somewhat counter-intuitively
+ ;; faster to multiply than to shift.
+ (+ (* (vc-hg--read-u8) (* 256 256 256))
+ (* (vc-hg--read-u8) (* 256 256))
+ (* (vc-hg--read-u8) 256)
+ (identity (vc-hg--read-u8))))
+
+(defun vc-hg--raw-dirstate-search (dirstate fname)
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert-file-contents-literally dirstate)
+ (let* ((result nil)
+ (flen (length fname))
+ (case-fold-search nil)
+ (inhibit-changing-match-data t)
+ ;; Find a conservative bound for the loop below by using
+ ;; Boyer-Moore on the raw dirstate without parsing it; we
+ ;; know we can't possibly find fname _after_ the last place
+ ;; it appears, so we can bail out early if we try to parse
+ ;; past it, which especially helps when the file we're
+ ;; trying to find isn't in dirstate at all. There's no way
+ ;; to similarly bound the starting search position, since
+ ;; the file format is such that we need to parse it from
+ ;; the beginning to find record boundaries.
+ (search-limit
+ (progn
+ (goto-char (point-max))
+ (or (search-backward fname (+ (point-min) 40) t)
+ (point-min)))))
+ ;; 40 is just after the header, which contains the working
+ ;; directory parents
+ (goto-char (+ (point-min) 40))
+ ;; Iterate over all dirstate entries; we might run this loop
+ ;; hundreds of thousands of times, so performance is important
+ ;; here
+ (while (< (point) search-limit)
+ ;; 1+4*4 is the length of the dirstate item header, which we
+ ;; spell as a literal for performance, since the elisp
+ ;; compiler lacks constant propagation
+ (forward-char (1+ (* 3 4)))
+ (let ((this-flen (vc-hg--read-u32-be)))
+ (if (and (or (eq this-flen flen)
+ (and (> this-flen flen)
+ (eq (char-after (+ (point) flen)) 0)))
+ (search-forward fname (+ (point) flen) t))
+ (progn
+ (backward-char (+ flen (1+ (* 4 4))))
+ (setf result
+ (list (vc-hg--read-u8) ; status
+ (vc-hg--read-u32-be) ; mode
+ (vc-hg--read-u32-be) ; size (of file)
+ (vc-hg--read-u32-be) ; mtime
+ ))
+ (goto-char (point-max)))
+ (forward-char this-flen))))
+ result)))
+
+(define-error 'vc-hg-unsupported-syntax "unsupported hgignore syntax")
+
+(defconst vc-hg--pcre-c-escapes
+ '((?a . ?\a)
+ (?b . ?\b)
+ (?f . ?\f)
+ (?n . ?\n)
+ (?r . ?\r)
+ (?t . ?\t)
+ (?n . ?\n)
+ (?r . ?\r)
+ (?t . ?\t)
+ (?v . ?\v)))
+
+(defconst vc-hg--pcre-metacharacters
+ '(?. ?^ ?$ ?* ?+ ?? ?{ ?\\ ?\[ ?\| ?\())
+
+(defconst vc-hg--elisp-metacharacters
+ '(?. ?* ?+ ?? ?\[ ?$ ?\\))
+
+(defun vc-hg--escape-for-pcre (c)
+ (if (memq c vc-hg--pcre-metacharacters)
+ (string ?\\ c)
+ c))
+
+(defun vc-hg--parts-to-string (parts)
+ "Build a string from list PARTS. Each element is a character or string."
+ (let ((parts2 nil))
+ (while parts
+ (let* ((partcell (prog1 parts (setf parts (cdr parts))))
+ (part (car partcell)))
+ (if (stringp part)
+ (setf parts2 (nconc (append part nil) parts2))
+ (setcdr partcell parts2)
+ (setf parts2 partcell))))
+ (apply #'string parts2)))
+
+(defun vc-hg--pcre-to-elisp-re (pcre prefix)
+ "Transform PCRE, a Mercurial file PCRE, into an elisp RE against PREFIX.
+PREFIX is the directory name of the directory against which these
+patterns are rooted. We understand only a subset of PCRE syntax;
+if we don't understand a construct, we signal
+`vc-hg-unsupported-syntax'."
+ (cl-assert (string-match "^/\\(.*/\\)?$" prefix))
+ (let ((parts nil)
+ (i 0)
+ (anchored nil)
+ (state 'normal)
+ (pcrelen (length pcre)))
+ (while (< i pcrelen)
+ (let ((c (aref pcre i)))
+ (cond ((eq state 'normal)
+ (cond ((string-match
+ (rx (| "}\\?" (: "(?" (not (any ":")))))
+ pcre i)
+ (signal 'vc-hg-unsupported-syntax (list pcre)))
+ ((eq c ?\\)
+ (setf state 'backslash))
+ ((eq c ?\[)
+ (setf state 'charclass-enter)
+ (push c parts))
+ ((eq c ?^)
+ (if (eq i 0) (setf anchored t)
+ (signal 'vc-hg-unsupported-syntax (list pcre))))
+ ((eq c ?$)
+ ;; Patterns can also match directories exactly,
+ ;; ignoring everything under a matched directory
+ (push "\\(?:$\\|/\\)" parts))
+ ((memq c '(?| ?\( ?\)))
+ (push ?\\ parts)
+ (push c parts))
+ (t (push c parts))))
+ ((eq state 'backslash)
+ (cond ((memq c '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
+ ?A ?b ?B ?d ?D ?s ?S ?w ?W ?Z ?x))
+ (signal 'vc-hg-unsupported-syntax (list pcre)))
+ ((memq c vc-hg--elisp-metacharacters)
+ (push ?\\ parts)
+ (push c parts))
+ (t (push (or (cdr (assq c vc-hg--pcre-c-escapes)) c) parts)))
+ (setf state 'normal))
+ ((eq state 'charclass-enter)
+ (push c parts)
+ (setf state
+ (if (eq c ?\\)
+ 'charclass
+ 'charclass-backslash)))
+ ((eq state 'charclass-backslash)
+ (if (memq c '(?0 ?x))
+ (signal 'vc-hg-unsupported-syntax (list pcre)))
+ (push (or (cdr (assq c vc-hg--pcre-c-escapes)) c) parts)
+ (setf state 'charclass))
+ ((eq state 'charclass)
+ (push c parts)
+ (cond ((eq c ?\\) (setf state 'charclass-backslash))
+ ((eq c ?\]) (setf state 'normal))))
+ (t (error "invalid state")))
+ (setf i (1+ i))))
+ (unless (eq state 'normal)
+ (signal 'vc-hg-unsupported-syntax (list pcre)))
+ (concat
+ "^"
+ prefix
+ (if anchored "" "\\(?:.*/\\)?")
+ (vc-hg--parts-to-string parts))))
+
+(defun vc-hg--glob-to-pcre (glob)
+ "Transform a glob pattern into a Mercurial file pattern regex."
+ (let ((parts nil) (i 0) (n (length glob)) (group 0) c)
+ (cl-macrolet ((peek () '(and (< i n) (aref glob i))))
+ (while (< i n)
+ (setf c (aref glob i))
+ (cl-incf i)
+ (cond ((not (memq c '(?* ?? ?\[ ?\{ ?\} ?, ?\\)))
+ (push (vc-hg--escape-for-pcre c) parts))
+ ((eq c ?*)
+ (cond ((eq (peek) ?*)
+ (cl-incf i)
+ (cond ((eq (peek) ?/)
+ (cl-incf i)
+ (push "(?:.*/)?" parts))
+ (t
+ (push ".*" parts))))
+ (t (push "[^/]*" parts))))
+ ((eq c ??)
+ (push ?. parts))
+ ((eq c ?\[)
+ (let ((j i))
+ (when (and (< j n) (memq (aref glob j) '(?! ?\])))
+ (cl-incf j))
+ (while (and (< j n) (not (eq (aref glob j) ?\])))
+ (cl-incf j))
+ (cond ((>= j n)
+ (push "\\[" parts))
+ (t
+ (let ((x (substring glob i j)))
+ (setf x (replace-regexp-in-string
+ "\\\\" "\\\\" x t t))
+ (setf i (1+ j))
+ (cond ((eq (aref x 0) ?!)
+ (setf (aref x 0) ?^))
+ ((eq (aref x 0) ?^)
+ (setf x (concat "\\" x))))
+ (push ?\[ parts)
+ (push x parts)
+ (push ?\] parts))))))
+ ((eq c ?\{)
+ (cl-incf group)
+ (push "(?:" parts))
+ ((eq c ?\})
+ (push ?\) parts)
+ (cl-decf group))
+ ((and (eq c ?,) (> group 0))
+ (push ?| parts))
+ ((eq c ?\\)
+ (if (eq i n)
+ (push "\\\\" parts)
+ (cl-incf i)
+ (push ?\\ parts)
+ (push c parts)))
+ (t
+ (push (vc-hg--escape-for-pcre c) parts)))))
+ (concat (vc-hg--parts-to-string parts) "$")))
+
+(defvar vc-hg--hgignore-patterns)
+(defvar vc-hg--hgignore-filenames)
+
+(defun vc-hg--hgignore-add-pcre (pcre prefix)
+ (push (vc-hg--pcre-to-elisp-re pcre prefix) vc-hg--hgignore-patterns))
+
+(defun vc-hg--hgignore-add-glob (glob prefix)
+ (push (vc-hg--pcre-to-elisp-re (vc-hg--glob-to-pcre glob) prefix)
+ vc-hg--hgignore-patterns))
+
+(defun vc-hg--hgignore-add-path (path prefix)
+ (let ((parts nil))
+ (dotimes (i (length path))
+ (push (vc-hg--escape-for-pcre (aref path i)) parts))
+ (vc-hg--hgignore-add-pcre
+ (concat "^" (vc-hg--parts-to-string parts) "$")
+ prefix)))
+
+(defun vc-hg--slurp-hgignore-1 (hgignore prefix)
+ (let ((default-syntax 'vc-hg--hgignore-add-glob))
+ (with-temp-buffer
+ (let ((attr (file-attributes hgignore)))
+ (when attr (insert-file-contents hgignore))
+ (push (list hgignore (nth 5 attr) (nth 7 attr))
+ vc-hg--hgignore-filenames))
+ (while (not (eobp))
+ ;; This list of pattern-file commands isn't complete, but it
+ ;; should cover the common cases. Remember that we fall back
+ ;; to regular hg commands if we see something we don't like.
+ (save-restriction
+ (narrow-to-region (point) (point-at-eol))
+ (cond ((looking-at "[ \t]*\\(?:#.*\\)?$"))
+ ((looking-at "syntax:[ \t]*re[ \t]*$")
+ (setf default-syntax 'vc-hg--hgignore-add-pcre))
+ ((looking-at "syntax:[ \t]*glob[ \t]*$")
+ (setf default-syntax 'vc-hg--hgignore-add-glob))
+ ((looking-at "path:\\(.+?\\)[ \t]*$")
+ (vc-hg--hgignore-add-path (match-string 1) prefix))
+ ((looking-at "glob:\\(.+?\\)[ \t]*$")
+ (vc-hg--hgignore-add-glob (match-string 1) prefix))
+ ((looking-at "re:\\(.+?\\)[ \t]*$")
+ (vc-hg--hgignore-add-pcre (match-string 1) prefix))
+ ((looking-at "\\(sub\\)?include:\\(.+?\\)[ \t]*$")
+ (let* ((sub (equal (match-string 1) "sub"))
+ (arg (match-string 2))
+ (included-file
+ (if (string-match "^/" arg) arg
+ (concat (file-name-directory hgignore) arg))))
+ (vc-hg--slurp-hgignore-1
+ included-file
+ (if sub (file-name-directory included-file) prefix))))
+ ((looking-at "[a-zA-Z0-9_]*:")
+ (signal 'vc-hg-unsupported-syntax (list (match-string 0))))
+ ((looking-at ".*$")
+ (funcall default-syntax (match-string 0) prefix))))
+ (forward-line 1)))))
+
+(cl-defstruct (vc-hg--ignore-patterns
+ (:copier nil)
+ (:constructor vc-hg--ignore-patterns-make))
+ repo
+ ignore-patterns
+ file-sources)
+
+(defun vc-hg--slurp-hgignore (repo)
+ "Read hg ignore patterns from REPO.
+REPO must be the directory name of an hg repository."
+ (cl-assert (string-match "^/\\(.*/\\)?$" repo))
+ (let* ((hgignore (concat repo ".hgignore"))
+ (vc-hg--hgignore-patterns nil)
+ (vc-hg--hgignore-filenames nil))
+ (vc-hg--slurp-hgignore-1 hgignore repo)
+ (vc-hg--ignore-patterns-make
+ :repo repo
+ :ignore-patterns (nreverse vc-hg--hgignore-patterns)
+ :file-sources (nreverse vc-hg--hgignore-filenames))))
+
+(defun vc-hg--ignore-patterns-valid-p (hgip)
+ "Return whether the cached ignore patterns in HGIP are still valid"
+ (let ((valid t)
+ (file-sources (vc-hg--ignore-patterns-file-sources hgip)))
+ (while (and file-sources valid)
+ (let* ((fs (pop file-sources))
+ (saved-mtime (nth 1 fs))
+ (saved-size (nth 2 fs))
+ (attr (file-attributes (nth 0 fs)))
+ (current-mtime (nth 5 attr))
+ (current-size (nth 7 attr)))
+ (unless (and (equal saved-mtime current-mtime)
+ (equal saved-size current-size))
+ (setf valid nil))))
+ valid))
+
+(defun vc-hg--ignore-patterns-ignored-p (hgip filename)
+ "Test whether the ignore pattern set HGIP says to ignore FILENAME.
+FILENAME must be the file's true absolute name."
+ (let ((patterns (vc-hg--ignore-patterns-ignore-patterns hgip))
+ (inhibit-changing-match-data t)
+ (ignored nil))
+ (while (and patterns (not ignored))
+ (setf ignored (string-match (pop patterns) filename)))
+ ignored))
+
+(defun vc-hg--time-to-fixnum (ts)
+ (+ (* 65536 (car ts)) (cadr ts)))
+
+(defvar vc-hg--cached-ignore-patterns nil
+ "Cached pre-parsed hg ignore patterns.")
+
+(defun vc-hg--file-ignored-p (repo repo-relative-filename)
+ (let ((hgip vc-hg--cached-ignore-patterns))
+ (unless (and hgip
+ (equal repo (vc-hg--ignore-patterns-repo hgip))
+ (vc-hg--ignore-patterns-valid-p hgip))
+ (setf vc-hg--cached-ignore-patterns nil)
+ (setf hgip (vc-hg--slurp-hgignore repo))
+ (setf vc-hg--cached-ignore-patterns hgip))
+ (vc-hg--ignore-patterns-ignored-p
+ hgip
+ (concat repo repo-relative-filename))))
+
+(defun vc-hg--read-repo-requirements (repo)
+ (cl-assert (string-match "^/\\(.*/\\)?$" repo))
+ (let* ((requires-filename (concat repo ".hg/requires")))
+ (and (file-exists-p requires-filename)
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert-file-contents-literally requires-filename)
+ (split-string (buffer-substring-no-properties
+ (point-min) (point-max)))))))
+
+(defconst vc-hg-supported-requirements
+ '("dotencode"
+ "fncache"
+ "generaldelta"
+ "lz4revlog"
+ "remotefilelog"
+ "revlogv1"
+ "store")
+ "List of Mercurial repository requirements we understand; if a
+repository requires features not present in this list, we avoid
+attempting to parse Mercurial data structures.")
+
+(defun vc-hg--requirements-understood-p (repo)
+ "Check that we understand the format of the given repository.
+REPO is the directory name of a Mercurial repository."
+ (null (cl-set-difference (vc-hg--read-repo-requirements repo)
+ vc-hg-supported-requirements
+ :test #'equal)))
+
+(defvar vc-hg--dirstate-scan-cache nil
+ "Cache of the last result of `vc-hg--raw-dirstate-search'.
+Avoids the need to repeatedly scan dirstate on repeated calls to
+`vc-hg-state', as we see during registration queries.")
+
+(defun vc-hg--cached-dirstate-search (dirstate dirstate-attr ascii-fname)
+ (let* ((mtime (nth 5 dirstate-attr))
+ (size (nth 7 dirstate-attr))
+ (cache vc-hg--dirstate-scan-cache)
+ )
+ (if (and cache
+ (equal dirstate (pop cache))
+ (equal mtime (pop cache))
+ (equal size (pop cache))
+ (equal ascii-fname (pop cache)))
+ (pop cache)
+ (let ((result (vc-hg--raw-dirstate-search dirstate ascii-fname)))
+ (setf vc-hg--dirstate-scan-cache
+ (list dirstate mtime size ascii-fname result))
+ result))))
+
+(defun vc-hg-state-fast (filename)
+ "Like `vc-hg-state', but parse internal data structures directly.
+Returns one of the usual `vc-state' enumeration values or
+`unsupported' if we need to take the slow path and run the
+hg binary."
+ (let* (truename
+ repo
+ dirstate
+ dirstate-attr
+ repo-relative-filename
+ ascii-fname)
+ (if (or
+ ;; Explicit user disable
+ (not vc-hg-parse-hg-data-structures)
+ ;; It'll probably be faster to run hg remotely
+ (file-remote-p filename)
+ (progn
+ (setf truename (file-truename filename))
+ (file-remote-p truename))
+ (not (setf repo (vc-hg-root truename)))
+ ;; dirstate must exist
+ (not (progn
+ (setf repo (expand-file-name repo))
+ (cl-assert (string-match "^/\\(.*/\\)?$" repo))
+ (setf dirstate (concat repo ".hg/dirstate"))
+ (setf dirstate-attr (file-attributes dirstate))))
+ ;; Repository must be in an understood format
+ (not (vc-hg--requirements-understood-p repo))
+ ;; Dirstate too small to be valid
+ (< (nth 7 dirstate-attr) 40)
+ ;; We want to store 32-bit unsigned values in fixnums
+ (< most-positive-fixnum 4294967295)
+ (progn
+ (setf repo-relative-filename
+ (file-relative-name truename repo))
+ (setf ascii-fname
+ (string-as-unibyte
+ (let (last-coding-system-used)
+ (encode-coding-string
+ repo-relative-filename
+ 'us-ascii t))))
+ ;; We only try dealing with ASCII filenames
+ (not (equal ascii-fname repo-relative-filename))))
+ 'unsupported
+ (let* ((dirstate-entry
+ (vc-hg--cached-dirstate-search
+ dirstate dirstate-attr ascii-fname))
+ (state (car dirstate-entry))
+ (stat (file-attributes
+ (concat repo repo-relative-filename))))
+ (cond ((eq state ?r) 'removed)
+ ((and (not state) stat)
+ (condition-case nil
+ (if (vc-hg--file-ignored-p repo repo-relative-filename)
+ 'ignored
+ 'unregistered)
+ (vc-hg-unsupported-syntax 'unsupported)))
+ ((and state (not stat)) 'missing)
+ ((eq state ?n)
+ (let ((vc-hg-size (nth 2 dirstate-entry))
+ (vc-hg-mtime (nth 3 dirstate-entry))
+ (fs-size (nth 7 stat))
+ (fs-mtime (vc-hg--time-to-fixnum (nth 5 stat))))
+ (if (and (eql vc-hg-size fs-size) (eql vc-hg-mtime fs-mtime))
+ 'up-to-date
+ 'edited)))
+ ((eq state ?a) 'added)
+ (state 'unsupported))))))
+
;;; Miscellaneous
(defun vc-hg-previous-revision (_file rev)
(not (memq property vc-touched-properties)))
(setq vc-touched-properties (append (list property)
vc-touched-properties)))
- (put (intern file vc-file-prop-obarray) property value))
+ (put (intern (expand-file-name file) vc-file-prop-obarray) property value))
(defun vc-file-getprop (file property)
"Get per-file VC PROPERTY for FILE."
- (get (intern file vc-file-prop-obarray) property))
+ (get (intern (expand-file-name file) vc-file-prop-obarray) property))
(defun vc-file-clearprops (file)
"Clear all VC properties of FILE."
(if (boundp 'vc-parent-buffer)
(kill-local-variable 'vc-parent-buffer))
- (setplist (intern file vc-file-prop-obarray) nil))
+ (setplist (intern (expand-file-name file) vc-file-prop-obarray) nil))
\f
;; We keep properties on each symbol naming a backend as follows:
`unregistered' The file is not under version control."
- ;; Note: in Emacs 22 and older, return of nil meant the file was
- ;; unregistered. This is potentially a source of
- ;; backward-compatibility bugs.
+ ;; Note: we usually return nil here for unregistered files anyway
+ ;; when called with only one argument. This doesn't seem to cause
+ ;; any problems. But if we wanted to change that, we should
+ ;; probably opt for redefining the `registered' command to return
+ ;; non-nil even for unregistered files (maybe also rename it), and
+ ;; then make sure that all `state' implementations handle
+ ;; unregistered file appropriately.
;; FIXME: New (sub)states needed (?):
;; - `copied' and `moved' (might be handled by `removed' and `added')
(or (vc-file-getprop file 'vc-state)
(when (> (length file) 0) ;Why?? --Stef
- (setq backend (or backend (vc-backend file)))
- (when backend
+ (setq backend (or backend (vc-backend file)))
+ (when backend
(vc-state-refresh file backend)))))
(defun vc-state-refresh (file backend)
If FILE is not registered, this function always returns nil."
(or (vc-file-getprop file 'vc-working-revision)
(progn
- (setq backend (or backend (vc-backend file)))
- (when backend
- (vc-file-setprop file 'vc-working-revision
- (vc-call-backend backend 'working-revision file))))))
+ (setq backend (or backend (vc-backend file)))
+ (when backend
+ (vc-file-setprop file 'vc-working-revision
+ (vc-call-backend
+ backend 'working-revision file))))))
;; Backward compatibility.
(define-obsolete-function-alias
(add-hook 'vc-mode-line-hook 'vc-mode-line nil t)
(let (backend)
(cond
- ((setq backend (with-demoted-errors (vc-backend buffer-file-name)))
+ ((setq backend (with-demoted-errors (vc-backend buffer-file-name)))
+ ;; Let the backend setup any buffer-local things he needs.
+ (vc-call-backend backend 'find-file-hook)
;; Compute the state and put it in the mode line.
(vc-mode-line buffer-file-name backend)
(unless vc-make-backup-files
;; Use this variable, not make-backup-files,
;; because this is for things that depend on the file name.
- (set (make-local-variable 'backup-inhibited) t))
- ;; Let the backend setup any buffer-local things he needs.
- (vc-call-backend backend 'find-file-hook))
+ (set (make-local-variable 'backup-inhibited) t)))
((let* ((truename (and buffer-file-truename
(expand-file-name buffer-file-truename)))
(link-type (and truename
(setq result (vc-file-getprop file 'vc-checkout-model)))
(or result
(progn (vc-rcs-fetch-master-state file)
- (vc-file-getprop file 'vc-checkout-model)))))
+ (vc-file-getprop file 'vc-checkout-model))
+ ;; For non-existing files we assume strict locking.
+ 'locking)))
;;;
;;; State-querying functions
"Minor version number of this version of Emacs.
This variable first existed in version 19.23.")
-(defconst emacs-build-time (current-time)
- "Time at which Emacs was dumped out.")
-
-;; I think this should be obsoleted/removed. It's just one more meaningless
-;; difference between different builds. It's usually not even an fqdn.
(defconst emacs-build-system (system-name)
- "Name of the system on which Emacs was built.")
+ "Name of the system on which Emacs was built, or nil if not available.")
+
+(defconst emacs-build-time (if emacs-build-system (current-time))
+ "Time at which Emacs was dumped out, or nil if not available.")
(defvar motif-version-string)
(defvar gtk-version-string)
to the system configuration; look at `system-configuration' instead."
(interactive "P")
(let ((version-string
- (format (if (not (called-interactively-p 'interactive))
- "GNU Emacs %s (%s%s%s%s)\n of %s"
- "GNU Emacs %s (%s%s%s%s) of %s")
+ (format "GNU Emacs %s (%s%s%s%s)%s"
emacs-version
system-configuration
(cond ((featurep 'motif)
(format ", %s scroll bars"
(capitalize (symbol-name x-toolkit-scroll-bars)))
"")
- (format-time-string "%Y-%m-%d" emacs-build-time))))
+ (if emacs-build-time
+ (format-time-string (concat
+ (if (called-interactively-p
+ 'interactive)
+ "" "\n")
+ " of %Y-%m-%d")
+ emacs-build-time)
+ ""))))
(if here
(insert version-string)
(if (called-interactively-p 'interactive)
This function is called by `convert-standard-filename'.
Replace invalid characters and turn Cygwin names into native
-names, and also turn slashes into backslashes if the shell
-requires it (see `w32-shell-dos-semantics')."
+names."
(save-match-data
(let ((name
(if (string-match "\\`/cygdrive/\\([a-zA-Z]\\)/" filename)
(while (string-match "[?*:<>|\"\000-\037]" name start)
(aset name (match-beginning 0) ?!)
(setq start (match-end 0)))
- ;; convert directory separators to Windows format
- ;; (but only if the shell in use requires it)
- (when (w32-shell-dos-semantics)
- (setq start 0)
- (while (string-match "/" name start)
- (aset name (match-beginning 0) ?\\)
- (setq start (match-end 0))))
name)))
(defun set-w32-system-coding-system (coding-system)
:version "24.3"
:group 'wdired)
+(defcustom wdired-create-parent-directories t
+ "If non-nil, create parent directories of destination files.
+If non-nil, when you rename a file to a destination path within a
+nonexistent directory, wdired will create any parent directories
+necessary. When nil, attempts to rename a file into a
+nonexistent directory will fail."
+ :version "25.2"
+ :type 'boolean
+ :group 'wdired)
+
(defvar wdired-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-x\C-s" 'wdired-finish-edit)
(require 'dired-aux)
(condition-case err
(let ((dired-backup-overwrite nil))
+ (and wdired-create-parent-directories
+ (wdired-create-parentdirs file-new))
(dired-rename-file file-ori file-new
overwrite))
(error
err)))))))))
errors))
+(defun wdired-create-parentdirs (file-new)
+ "Create parent directories for FILE-NEW if they don't exist."
+ (and (not (file-exists-p (file-name-directory file-new)))
+ (message "Creating directory for file %s" file-new)
+ (make-directory (file-name-directory file-new) t)))
(defun wdired-exit ()
"Exit wdired and return to dired mode.
(define-key map [(shift tab)] 'widget-backward)
(put 'widget-backward :advertised-binding [(shift tab)])
(define-key map [backtab] 'widget-backward)
- (define-key map [down-mouse-2] 'widget-button-click)
- (define-key map [down-mouse-1] 'widget-button-click)
+ (define-key map [mouse-2] 'widget-button-click)
+ (define-key map [mouse-1] 'widget-button-click)
;; The following definition needs to avoid using escape sequences that
;; might get converted to ^M when building loaddefs.el
(define-key map [(control ?m)] 'widget-button-press)
(unless (cdr (assq 'inhibit-switch-frame alist))
(window--maybe-raise-frame (window-frame window)))))))
+(defun display-buffer-reuse-mode-window (buffer alist)
+ "Return a window based on the mode of the buffer it displays.
+Display BUFFER in the returned window. Return nil if no usable
+window is found.
+
+If ALIST contains a `mode' entry, its value is a major mode (a
+symbol) or a list of modes. A window is a candidate if it
+displays a buffer that derives from one of the given modes. When
+ALIST contains no `mode' entry, the current major mode of BUFFER
+is used.
+
+The behaviour is also controlled by entries for
+`inhibit-same-window', `reusable-frames' and
+`inhibit-switch-frame' as is done in the function
+`display-buffer-reuse-window'."
+ (let* ((alist-entry (assq 'reusable-frames alist))
+ (alist-mode-entry (assq 'mode alist))
+ (frames (cond (alist-entry (cdr alist-entry))
+ ((if (eq pop-up-frames 'graphic-only)
+ (display-graphic-p)
+ pop-up-frames)
+ 0)
+ (display-buffer-reuse-frames 0)
+ (t (last-nonminibuffer-frame))))
+ (inhibit-same-window-p (cdr (assq 'inhibit-same-window alist)))
+ (windows (window-list-1 nil 'nomini frames))
+ (buffer-mode (with-current-buffer buffer major-mode))
+ (allowed-modes (if alist-mode-entry
+ (cdr alist-mode-entry)
+ buffer-mode))
+ (curwin (selected-window))
+ (curframe (selected-frame)))
+ (unless (listp allowed-modes)
+ (setq allowed-modes (list allowed-modes)))
+ (let (same-mode-same-frame
+ same-mode-other-frame
+ derived-mode-same-frame
+ derived-mode-other-frame)
+ (dolist (window windows)
+ (let (mode? frame?)
+ (with-current-buffer (window-buffer window)
+ (setq mode?
+ (cond ((memq major-mode allowed-modes)
+ 'same)
+ ((derived-mode-p allowed-modes)
+ 'derived))))
+ (when (and mode?
+ (not (and inhibit-same-window-p
+ (eq window curwin))))
+ (if (eq curframe (window-frame window))
+ (if (eq mode? 'same)
+ (push window same-mode-same-frame)
+ (push window derived-mode-same-frame))
+ (if (eq mode? 'same)
+ (push window same-mode-other-frame)
+ (push window derived-mode-other-frame))))))
+ (let ((window (car (nconc same-mode-same-frame
+ same-mode-other-frame
+ derived-mode-same-frame
+ derived-mode-other-frame))))
+ (when (window-live-p window)
+ (prog1 (window--display-buffer buffer window 'reuse alist)
+ (unless (cdr (assq 'inhibit-switch-frame alist))
+ (window--maybe-raise-frame (window-frame window)))))))))
+
(defun display-buffer--special-action (buffer)
"Return special display action for BUFFER, if any.
If `special-display-p' returns non-nil for BUFFER, return an
AR = @AR@
ARFLAGS = @ARFLAGS@
MKDIR_P = @MKDIR_P@
+EXEEXT = @EXEEXT@
LUCID_OBJS = lwlib-Xlw.o xlwmenu.o lwlib-Xaw.o
MOTIF_OBJS = lwlib-Xm.o
bootstrap-clean maintainer-clean: distclean
rm -f TAGS
+ETAGS = ../lib-src/etags${EXEEXT}
-ETAGS = ../lib-src/etags
+${ETAGS}: FORCE
+ ${MAKE} -C ../lib-src $(notdir $@)
-ctagsfiles= $(srcdir)/*.[ch]
+ctagsfiles= $(wildcard ${srcdir}/*.[ch])
-TAGS: $(ctagsfiles)
- "$(ETAGS)" $(ctagsfiles)
+FORCE:
+.PHONY: tags FORCE
tags: TAGS
-.PHONY: tags
-
+TAGS: ${ETAGS} $(ctagsfiles)
+ ${ETAGS} $(ctagsfiles)
### Makefile.in ends here
# Code from module fdatasync:
# Code from module fdopendir:
# Code from module filemode:
+ # Code from module filevercmp:
# Code from module fpending:
# Code from module fstatat:
# Code from module fsync:
# Code from module ssize_t:
# Code from module stat:
# Code from module stat-time:
+ # Code from module std-gnu11:
# Code from module stdalign:
# Code from module stddef:
# Code from module stdint:
lib/fdopendir.c
lib/filemode.c
lib/filemode.h
+ lib/filevercmp.c
+ lib/filevercmp.h
lib/fpending.c
lib/fpending.h
lib/fstatat.c
m4/st_dm_mode.m4
m4/stat-time.m4
m4/stat.m4
+ m4/std-gnu11.m4
m4/stdalign.m4
m4/stddef_h.m4
m4/stdint.m4
-# serial 25
+# serial 26
dnl Copyright (C) 2002-2003, 2005-2007, 2009-2016 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl From Jim Meyering.
+AC_DEFUN([gl_TIME_T_IS_SIGNED],
+[
+ AC_CACHE_CHECK([whether time_t is signed],
+ [gl_cv_time_t_is_signed],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <time.h>
+ char time_t_signed[(time_t) -1 < 0 ? 1 : -1];]])],
+ [gl_cv_time_t_is_signed=yes],
+ [gl_cv_time_t_is_signed=no])])
+ if test $gl_cv_time_t_is_signed = yes; then
+ AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed.])
+ fi
+])
+
AC_DEFUN([gl_FUNC_MKTIME],
[
AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+ AC_REQUIRE([gl_TIME_T_IS_SIGNED])
dnl We don't use AC_FUNC_MKTIME any more, because it is no longer maintained
dnl in Autoconf and because it invokes AC_LIBOBJ.
time_t t, delta;
int i, j;
int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1;
- int time_t_signed = ! ((time_t) 0 < (time_t) -1);
#if HAVE_DECL_ALARM
/* This test makes some buggy mktime implementations loop.
alarm (60);
#endif
- time_t_max = (! time_t_signed
+ time_t_max = (! TIME_T_IS_SIGNED
? (time_t) -1
: ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1)
* 2 + 1));
- time_t_min = (! time_t_signed
+ time_t_min = (! TIME_T_IS_SIGNED
? (time_t) 0
: time_t_signed_magnitude
? ~ (time_t) 0
--- /dev/null
+# Prefer GNU C11 and C++11 to earlier versions. -*- coding: utf-8 -*-
+
+# This implementation is taken from GNU Autoconf lib/autoconf/c.m4
+# commit 017d5ddd82854911f0119691d91ea8a1438824d6
+# dated Sun Apr 3 13:57:17 2016 -0700
+# This implementation will be obsolete once we can assume Autoconf 2.70
+# or later is installed everywhere a Gnulib program might be developed.
+
+
+# Copyright (C) 2001-2016 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Akim Demaille, Paul Eggert,
+# François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# AC_PROG_CC([COMPILER ...])
+# --------------------------
+# COMPILER ... is a space separated list of C compilers to search for.
+# This just gives the user an opportunity to specify an alternative
+# search list for the C compiler.
+AC_DEFUN_ONCE([AC_PROG_CC],
+[AC_LANG_PUSH(C)dnl
+AC_ARG_VAR([CC], [C compiler command])dnl
+AC_ARG_VAR([CFLAGS], [C compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+m4_ifval([$1],
+ [AC_CHECK_TOOLS(CC, [$1])],
+[AC_CHECK_TOOL(CC, gcc)
+if test -z "$CC"; then
+ dnl Here we want:
+ dnl AC_CHECK_TOOL(CC, cc)
+ dnl but without the check for a tool without the prefix.
+ dnl Until the check is removed from there, copy the code:
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc])
+ fi
+fi
+if test -z "$CC"; then
+ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+fi
+if test -z "$CC"; then
+ AC_CHECK_TOOLS(CC, cl.exe)
+fi
+if test -z "$CC"; then
+ AC_CHECK_TOOL(CC, clang)
+fi
+])
+
+test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH])
+
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion -version; do
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+_AC_PROG_CC_G
+dnl
+dnl Set ac_prog_cc_stdc to the supported C version.
+dnl Also set the documented variable ac_cv_prog_cc_stdc;
+dnl its name was chosen when it was cached, but it is no longer cached.
+_AC_PROG_CC_C11([ac_prog_cc_stdc=c11
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11],
+ [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99],
+ [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89],
+ [ac_prog_cc_stdc=no
+ ac_cv_prog_cc_stdc=no])])])
+dnl
+AC_LANG_POP(C)dnl
+])# AC_PROG_CC
+
+
+
+# AC_PROG_CXX([LIST-OF-COMPILERS])
+# --------------------------------
+# LIST-OF-COMPILERS is a space separated list of C++ compilers to search
+# for (if not specified, a default list is used). This just gives the
+# user an opportunity to specify an alternative search list for the C++
+# compiler.
+# aCC HP-UX C++ compiler much better than `CC', so test before.
+# FCC Fujitsu C++ compiler
+# KCC KAI C++ compiler
+# RCC Rational C++
+# xlC_r AIX C Set++ (with support for reentrant code)
+# xlC AIX C Set++
+AC_DEFUN([AC_PROG_CXX],
+[AC_LANG_PUSH(C++)dnl
+AC_ARG_VAR([CXX], [C++ compiler command])dnl
+AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+_AC_ARG_VAR_PRECIOUS([CCC])dnl
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ AC_CHECK_TOOLS(CXX,
+ [m4_default([$1],
+ [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])],
+ g++)
+ fi
+fi
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+_AC_PROG_CXX_G
+_AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+ ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11],
+ [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98],
+ [ac_prog_cxx_stdcxx=no
+ ac_cv_prog_cxx_stdcxx=no])])
+AC_LANG_POP(C++)dnl
+])# AC_PROG_CXX
+
+
+# _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
+# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
+# --------------------------------------------------------------
+# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99')
+# by trying to compile a program of TEST-PROLOGUE and TEST-BODY. If this fails,
+# try again with each compiler option in the space-separated OPTION-LIST; if one
+# helps, append it to CC. If eventually successful, run ACTION-IF-AVAILABLE,
+# else ACTION-IF-UNAVAILABLE.
+AC_DEFUN([_AC_C_STD_TRY],
+[AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features])
+AC_CACHE_VAL(ac_cv_prog_cc_$1,
+[ac_cv_prog_cc_$1=no
+ac_save_CC=$CC
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_arg in '' $4
+do
+ CC="$ac_save_CC $ac_arg"
+ _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg])
+ test "x$ac_cv_prog_cc_$1" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+])# AC_CACHE_VAL
+ac_prog_cc_stdc_options=
+case "x$ac_cv_prog_cc_$1" in
+ x)
+ AC_MSG_RESULT([none needed]) ;;
+ xno)
+ AC_MSG_RESULT([unsupported]) ;;
+ *)
+ ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1"
+ CC=$CC$ac_prog_cc_stdc_options
+ AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;;
+esac
+AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6])
+])# _AC_C_STD_TRY
+
+# _AC_C_C99_TEST_HEADER
+# ---------------------
+# A C header suitable for testing for C99.
+AC_DEFUN([_AC_C_C99_TEST_HEADER],
+[[#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+ your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case 's': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case 'd': // int
+ number = va_arg (args_copy, int);
+ break;
+ case 'f': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}]])# _AC_C_C99_TEST_HEADER
+
+# _AC_C_C99_TEST_BODY
+# -------------------
+# A C body suitable for testing for C99, assuming the corresponding header.
+AC_DEFUN([_AC_C_C99_TEST_BODY],
+[[
+ // Check bool.
+ _Bool success = false;
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+ || dynamic_array[ni.number - 1] != 543);
+]])
+
+# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ISO C99 mode by default, try to add an
+# option to output variable CC to make it so. This macro tries
+# various options that select ISO C99 on some system or another. It
+# considers the compiler to be in ISO C99 mode if it handles _Bool,
+# // comments, flexible array members, inline, long long int, mixed
+# code and declarations, named initialization of structs, restrict,
+# va_copy, varargs macros, variable declarations in for loops and
+# variable length arrays.
+AC_DEFUN([_AC_PROG_CC_C99],
+[_AC_C_STD_TRY([c99],
+[_AC_C_C99_TEST_HEADER],
+[_AC_C_C99_TEST_BODY],
+dnl Try
+dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999)
+dnl IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test)
+dnl IBM XL C -qlanglvl=extc99
+dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdc99)
+dnl HP cc -AC99
+dnl Intel ICC -std=c99, -c99 (deprecated)
+dnl IRIX -c99
+dnl Solaris -D_STDC_C99=
+dnl cc's -xc99 option uses linker magic to define the external
+dnl symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99
+dnl behavior for C library functions. This is not wanted here,
+dnl because it means that a single module compiled with -xc99
+dnl alters C runtime behavior for the entire program, not for
+dnl just the module. Instead, define the (private) symbol
+dnl _STDC_C99, which suppresses a bogus failure in <stdbool.h>.
+dnl The resulting compiler passes the test case here, and that's
+dnl good enough. For more, please see the thread starting at:
+dnl http://lists.gnu.org/archive/html/autoconf/2010-12/msg00059.html
+dnl Tru64 -c99
+dnl with extended modes being tried first.
+[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C99
+
+
+# _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ISO C11 mode by default, try to add an
+# option to output variable CC to make it so. This macro tries
+# various options that select ISO C11 on some system or another. It
+# considers the compiler to be in ISO C11 mode if it handles _Alignas,
+# _Alignof, _Noreturn, _Static_assert, UTF-8 string literals,
+# duplicate typedefs, and anonymous structures and unions.
+AC_DEFUN([_AC_PROG_CC_C11],
+[_AC_C_STD_TRY([c11],
+[_AC_C_C99_TEST_HEADER[
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+]],
+[_AC_C_C99_TEST_BODY[
+ v1.i = 2;
+ v1.w.k = 5;
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+]],
+dnl Try
+dnl GCC -std=gnu11 (unused restrictive mode: -std=c11)
+dnl with extended modes being tried first.
+dnl
+dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as
+dnl of September 2012) does not pass the C11 test. For now, try extc1x when
+dnl compiling the C99 test instead, since it enables _Static_assert and
+dnl _Noreturn, which is a win. If -qlanglvl=extc11 or -qlanglvl=extc1x passes
+dnl the C11 test in some future version of IBM XL C, we'll add it here,
+dnl preferably extc11.
+[[-std=gnu11]], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C11
+
+
+# AC_PROG_CC_C89
+# --------------
+# Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC,
+# as that'd be incompatible with how Automake redefines AC_PROG_CC. See
+# <http://lists.gnu.org/archive/html/autoconf/2012-10/msg00048.html>.
+AU_DEFUN([AC_PROG_CC_C89],
+ [AC_REQUIRE([AC_PROG_CC])],
+ [$0 is obsolete; use AC_PROG_CC]
+)
+
+# AC_PROG_CC_C99
+# --------------
+AU_DEFUN([AC_PROG_CC_C99],
+ [AC_REQUIRE([AC_PROG_CC])],
+ [$0 is obsolete; use AC_PROG_CC]
+)
+
+# AC_PROG_CC_STDC
+# ---------------
+AU_DEFUN([AC_PROG_CC_STDC],
+ [AC_REQUIRE([AC_PROG_CC])],
+ [$0 is obsolete; use AC_PROG_CC]
+)
+
+
+# AC_C_PROTOTYPES
+# ---------------
+# Check if the C compiler supports prototypes, included if it needs
+# options.
+AC_DEFUN([AC_C_PROTOTYPES],
+[AC_REQUIRE([AC_PROG_CC])dnl
+if test "$ac_prog_cc_stdc" != no; then
+ AC_DEFINE(PROTOTYPES, 1,
+ [Define to 1 if the C compiler supports function prototypes.])
+ AC_DEFINE(__PROTOTYPES, 1,
+ [Define like PROTOTYPES; this can be used by system headers.])
+fi
+])# AC_C_PROTOTYPES
+
+
+# _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
+# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
+# ----------------------------------------------------------------
+# Check whether the C++ compiler accepts features of STANDARD (e.g
+# `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE
+# and TEST-BODY. If this fails, try again with each compiler option
+# in the space-separated OPTION-LIST; if one helps, append it to CXX.
+# If eventually successful, run ACTION-IF-AVAILABLE, else
+# ACTION-IF-UNAVAILABLE.
+AC_DEFUN([_AC_CXX_STD_TRY],
+[AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features])
+AC_LANG_PUSH(C++)dnl
+AC_CACHE_VAL(ac_cv_prog_cxx_$1,
+[ac_cv_prog_cxx_$1=no
+ac_save_CXX=$CXX
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_arg in '' $4
+do
+ CXX="$ac_save_CXX $ac_arg"
+ _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg])
+ test "x$ac_cv_prog_cxx_$1" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+])# AC_CACHE_VAL
+ac_prog_cxx_stdcxx_options=
+case "x$ac_cv_prog_cxx_$1" in
+ x)
+ AC_MSG_RESULT([none needed]) ;;
+ xno)
+ AC_MSG_RESULT([unsupported]) ;;
+ *)
+ ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1"
+ CXX=$CXX$ac_prog_cxx_stdcxx_options
+ AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;;
+esac
+AC_LANG_POP(C++)dnl
+AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6])
+])# _AC_CXX_STD_TRY
+
+# _AC_CXX_CXX98_TEST_HEADER
+# -------------------------
+# A C++ header suitable for testing for CXX98.
+AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER],
+[[
+#include <algorithm>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace test {
+ typedef std::vector<std::string> string_vec;
+ typedef std::pair<int,bool> map_value;
+ typedef std::map<std::string,map_value> map_type;
+ typedef std::set<int> set_type;
+
+ template<typename T>
+ class printer {
+ public:
+ printer(std::ostringstream& os): os(os) {}
+ void operator() (T elem) { os << elem << std::endl; }
+ private:
+ std::ostringstream& os;
+ };
+}
+]])# _AC_CXX_CXX98_TEST_HEADER
+
+# _AC_CXX_CXX98_TEST_BODY
+# -----------------------
+# A C++ body suitable for testing for CXX98, assuming the corresponding header.
+AC_DEFUN([_AC_CXX_CXX98_TEST_BODY],
+[[
+
+try {
+ // Basic string.
+ std::string teststr("ASCII text");
+ teststr += " string";
+
+ // Simple vector.
+ test::string_vec testvec;
+ testvec.push_back(teststr);
+ testvec.push_back("foo");
+ testvec.push_back("bar");
+ if (testvec.size() != 3) {
+ throw std::runtime_error("vector size is not 1");
+ }
+
+ // Dump vector into stringstream and obtain string.
+ std::ostringstream os;
+ for (test::string_vec::const_iterator i = testvec.begin();
+ i != testvec.end(); ++i) {
+ if (i + 1 != testvec.end()) {
+ os << teststr << '\n';
+ }
+ }
+ // Check algorithms work.
+ std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os));
+ std::string os_out = os.str();
+
+ // Test pair and map.
+ test::map_type testmap;
+ testmap.insert(std::make_pair(std::string("key"),
+ std::make_pair(53,false)));
+
+ // Test set.
+ int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+ test::set_type testset(values, values + sizeof(values)/sizeof(values[0]));
+ std::list<int> testlist(testset.begin(), testset.end());
+ std::copy(testset.begin(), testset.end(), std::back_inserter(testlist));
+} catch (const std::exception& e) {
+ std::cerr << "Caught exception: " << e.what() << std::endl;
+
+ // Test fstream
+ std::ofstream of("test.txt");
+ of << "Test ASCII text\n" << std::flush;
+ of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl;
+ of.close();
+}
+std::exit(0);
+]])
+
+# _AC_CXX_CXX11_TEST_HEADER
+# -------------------------
+# A C++ header suitable for testing for CXX11.
+AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER],
+[[
+#include <deque>
+#include <functional>
+#include <memory>
+#include <tuple>
+#include <array>
+#include <regex>
+#include <iostream>
+
+namespace cxx11test
+{
+ typedef std::shared_ptr<std::string> sptr;
+ typedef std::weak_ptr<std::string> wptr;
+
+ typedef std::tuple<std::string,int,double> tp;
+ typedef std::array<int, 20> int_array;
+
+ constexpr int get_val() { return 20; }
+
+ struct testinit
+ {
+ int i;
+ double d;
+ };
+
+ class delegate {
+ public:
+ delegate(int n) : n(n) {}
+ delegate(): delegate(2354) {}
+
+ virtual int getval() { return this->n; };
+ protected:
+ int n;
+ };
+
+ class overridden : public delegate {
+ public:
+ overridden(int n): delegate(n) {}
+ virtual int getval() override final { return this->n * 2; }
+ };
+
+ class nocopy {
+ public:
+ nocopy(int i): i(i) {}
+ nocopy() = default;
+ nocopy(const nocopy&) = delete;
+ nocopy & operator=(const nocopy&) = delete;
+ private:
+ int i;
+ };
+}
+]])# _AC_CXX_CXX11_TEST_HEADER
+
+# _AC_CXX_CXX11_TEST_BODY
+# -----------------------
+# A C++ body suitable for testing for CXX11, assuming the corresponding header.
+AC_DEFUN([_AC_CXX_CXX11_TEST_BODY],
+[[
+{
+ // Test auto and decltype
+ std::deque<int> d;
+ d.push_front(43);
+ d.push_front(484);
+ d.push_front(3);
+ d.push_front(844);
+ int total = 0;
+ for (auto i = d.begin(); i != d.end(); ++i) { total += *i; }
+
+ auto a1 = 6538;
+ auto a2 = 48573953.4;
+ auto a3 = "String literal";
+
+ decltype(a2) a4 = 34895.034;
+}
+{
+ // Test constexpr
+ short sa[cxx11test::get_val()] = { 0 };
+}
+{
+ // Test initializer lists
+ cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+ // Test range-based for and lambda
+ cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+ for (int &x : array) { x += 23; }
+ std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; });
+}
+{
+ using cxx11test::sptr;
+ using cxx11test::wptr;
+
+ sptr sp(new std::string("ASCII string"));
+ wptr wp(sp);
+ sptr sp2(wp);
+}
+{
+ cxx11test::tp tuple("test", 54, 45.53434);
+ double d = std::get<2>(tuple);
+ std::string s;
+ int i;
+ std::tie(s,i,d) = tuple;
+}
+{
+ static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$");
+ std::string testmatch("Test if this string matches");
+ bool match = std::regex_search(testmatch, filename_regex);
+}
+{
+ cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+ cxx11test::int_array::size_type size = array.size();
+}
+{
+ // Test constructor delegation
+ cxx11test::delegate d1;
+ cxx11test::delegate d2();
+ cxx11test::delegate d3(45);
+}
+{
+ // Test override and final
+ cxx11test::overridden o1(55464);
+}
+{
+ // Test nullptr
+ char *c = nullptr;
+}
+{
+ // Test template brackets
+ std::vector<std::pair<int,char*>> v1;
+}
+{
+ // Unicode literals
+ char const *utf8 = u8"UTF-8 string \u2500";
+ char16_t const *utf16 = u"UTF-8 string \u2500";
+ char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+]])
+
+# _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# -------------------------------------------------------------------
+
+# If the C++ compiler is not in ISO C++98 mode by default, try to add
+# an option to output variable CXX to make it so. This macro tries
+# various options that select ISO C++98 on some system or another. It
+# considers the compiler to be in ISO C++98 mode if it handles basic
+# features of the std namespace including: string, containers (list,
+# map, set, vector), streams (fstreams, iostreams, stringstreams,
+# iomanip), pair, exceptions and algorithms.
+
+
+AC_DEFUN([_AC_PROG_CXX_CXX98],
+[_AC_CXX_STD_TRY([cxx98],
+[_AC_CXX_CXX98_TEST_HEADER],
+[_AC_CXX_CXX98_TEST_BODY],
+dnl Try
+dnl GCC -std=gnu++98 (unused restrictive mode: -std=c++98)
+dnl IBM XL C -qlanglvl=extended
+dnl HP aC++ -AA
+dnl Intel ICC -std=gnu++98
+dnl Solaris N/A (default)
+dnl Tru64 N/A (default, but -std gnu could be used)
+dnl with extended modes being tried first.
+[[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl
+])# _AC_PROG_CXX_CXX98
+
+# _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# -------------------------------------------------------------------
+# If the C++ compiler is not in ISO CXX11 mode by default, try to add
+# an option to output variable CXX to make it so. This macro tries
+# various options that select ISO C++11 on some system or another. It
+# considers the compiler to be in ISO C++11 mode if it handles all the
+# tests from the C++98 checks, plus the following: Language features
+# (auto, constexpr, decltype, default/deleted constructors, delegate
+# constructors, final, initializer lists, lambda functions, nullptr,
+# override, range-based for loops, template brackets without spaces,
+# unicode literals) and library features (array, memory (shared_ptr,
+# weak_ptr), regex and tuple types).
+AC_DEFUN([_AC_PROG_CXX_CXX11],
+[_AC_CXX_STD_TRY([cxx11],
+[_AC_CXX_CXX11_TEST_HEADER
+_AC_CXX_CXX98_TEST_HEADER],
+[_AC_CXX_CXX11_TEST_BODY
+_AC_CXX_CXX98_TEST_BODY],
+dnl Try
+dnl GCC -std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants]
+dnl IBM XL C -qlanglvl=extended0x
+dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11)
+dnl HP aC++ -AA
+dnl Intel ICC -std=c++11 -std=c++0x
+dnl Solaris N/A (no support)
+dnl Tru64 N/A (no support)
+dnl with extended modes being tried first.
+[[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl
+])# _AC_PROG_CXX_CXX11
mkdir ${tempdir}
if [ "$changelog" = yes ]; then
- if test -d .git; then
+ if test -e .git; then
echo "Making top-level ChangeLog"
make ChangeLog CHANGELOG=${tempdir}/ChangeLog || \
{ x=$?; echo "make ChangeLog FAILED (try --no-changelog?)" >&2; exit $x; }
/^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/
/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION VERSION/
/^#undef PENDING_OUTPUT_COUNT/s/^.*$/#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_ptr - (FILE)->_base)/
-/^#undef VERSION/s/^.*$/#define VERSION "25.0.93"/
+/^#undef VERSION/s/^.*$/#define VERSION "25.1.50"/
/^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/
/^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/
/^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/
check:
@echo "We don't have any tests for the nt/ directory yet."
+ETAGS = ../lib-src/etags${EXEEXT}
+
+${ETAGS}: FORCE
+ ${MAKE} -C ../lib-src $(notdir $@)
+
+tagsfiles= $(wildcard ${srcdir}/*.[ch])
+
+FORCE:
+.PHONY: tags FORCE
tags: TAGS
-TAGS: ${EXE_FILES:${EXEEXT}=.c}
- ../lib-src/etags *.[ch]
+TAGS: ${ETAGS} ${tagsfiles}
+ ${ETAGS} ${tagsfiles}
## Build the programs
addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h
-## This file is an edited copy if ../lib/gnulib.mk.
+## This file is an edited copy of ../lib/gnulib.mk.
##
## The purpose of the edits is to avoid generating any headers
## which would conflict with either the headers we have in nt/inc,
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
+# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings
MOSTLYCLEANFILES += core *.stackdump
## end gnulib module filemode
+## begin gnulib module filevercmp
+
+libgnu_a_SOURCES += filevercmp.c
+
+EXTRA_DIST += filevercmp.h
+
+## end gnulib module filevercmp
+
## begin gnulib module fpending
## begin gnulib module verify
+
EXTRA_DIST += verify.h
## end gnulib module verify
supply the 2nd arg correctly, so don't use _setjmp directly in that
case. */
#undef HAVE__SETJMP
+
+/* Unlike MS and mingw.org, MinGW64 doesn't define gai_strerror as an
+ inline function in a system header file, and instead seems to
+ require to link against ws2_32.a. But we don't want to link with
+ -lws2_32, as that would make Emacs dependent on the respective DLL.
+ So MinGW64 is amply punished here by the following: */
+#undef HAVE_GAI_STRERROR
#endif
/* The following is needed for recovery from C stack overflows. */
#define accept sys_accept
#define recvfrom sys_recvfrom
#define sendto sys_sendto
+#define getaddrinfo sys_getaddrinfo
+#define freeaddrinfo sys_freeaddrinfo
int sys_socket(int af, int type, int protocol);
int sys_bind (int s, const struct sockaddr *addr, int namelen);
struct sockaddr *from, int * fromlen);
int sys_sendto (int s, const char * buf, int len, int flags,
const struct sockaddr *to, int tolen);
+int sys_getaddrinfo (const char * node, const char * service,
+ const struct addrinfo * hints, struct addrinfo ** res);
+void sys_freeaddrinfo (struct addrinfo * ai);
/* In addition to wrappers for the winsock functions, we also provide
an fcntl function, for setting sockets to non-blocking mode. */
# Or at all...
ac_cv_header_pthread_h=no
+# We don't want to check for these functions
+# because they are implemented in libwinpthread.
+ac_cv_search_clock_gettime="none required"
+ac_cv_func_clock_gettime=no
+ac_cv_func_clock_settime=no
+
# ACL functions are implemented in w32.c
ac_cv_search_acl_get_file="none required"
ac_cv_func_acl_get_file=yes
ac_cv_func_getpeername=yes
# Implemented as sys_socket in w32.c
ac_cv_func_socket=yes
+# Implemented as sys_getaddrinfo in w32.c
+ac_cv_func_getaddrinfo=yes
+# Implemented as an inline function in ws2tcpip.h
+ac_cv_func_gai_strerror=yes
# Implemented in w32.c
ac_cv_func_mkostemp=yes
ac_cv_func_readlink=yes
CFLAGS=@CFLAGS@
CPPFLAGS = @CPPFLAGS@
-TAGS = etags
RM = rm -f
RANLIB = @RANLIB@
AR = @AR@
ARFLAGS = @ARFLAGS@
MKDIR_P = @MKDIR_P@
+EXEEXT = @EXEEXT@
OBJS = Activate.o \
AddPane.o \
bootstrap-clean maintainer-clean distclean: clean
rm -f Makefile
-.PHONY: tags
-tags:
- $(TAGS) -t *.[ch]
+ETAGS = ../lib-src/etags${EXEEXT}
+
+${ETAGS}: FORCE
+ ${MAKE} -C ../lib-src $(notdir $@)
+
+tagsfiles = $(wildcard ${srcdir}/*.[ch])
+
+FORCE:
+.PHONY: tags FORCE
+tags: TAGS
+TAGS: ${ETAGS} ${tagsfiles}
+ ${ETAGS} ${tagsfiles}
### Makefile.in ends here
LIBXML2_LIBS = @LIBXML2_LIBS@
LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
+GETADDRINFO_A_LIBS = @GETADDRINFO_A_LIBS@
+
LIBZ = @LIBZ@
## system-specific libs for dynamic modules, else empty
## widget.o if USE_X_TOOLKIT, otherwise empty.
WIDGET_OBJ=@WIDGET_OBJ@
-## sheap.o if CYGWIN, otherwise empty.
+HYBRID_MALLOC = @HYBRID_MALLOC@
+
+## cygw32.o if CYGWIN, otherwise empty.
CYGWIN_OBJ=@CYGWIN_OBJ@
## fontset.o fringe.o image.o if we have any window system
LIBGPM = @LIBGPM@
-## -lresolv, or empty.
-LIBRESOLV = @LIBRESOLV@
-
LIBSELINUX_LIBS = @LIBSELINUX_LIBS@
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
+LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
+LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
+
INTERVALS_H = dispextern.h intervals.h composite.h
GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
RUN_TEMACS = ./temacs
+# Whether builds should contain details. '--no-build-details' or empty.
+BUILD_DETAILS = @BUILD_DETAILS@
+
UNEXEC_OBJ = @UNEXEC_OBJ@
CANNOT_DUMP=@CANNOT_DUMP@
$(WEBKIT_CFLAGS) \
$(SETTINGS_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) \
$(LIBOTF_CFLAGS) $(M17N_FLT_CFLAGS) $(DEPFLAGS) \
+ $(LIBSYSTEMD_CFLAGS) \
$(LIBGNUTLS_CFLAGS) $(NOTIFY_CFLAGS) $(CAIRO_CFLAGS) \
$(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAGS)
ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS)
doprnt.o intervals.o textprop.o composite.o xml.o $(NOTIFY_OBJ) \
$(XWIDGETS_OBJ) \
profiler.o decompress.o \
+ $(if $(HYBRID_MALLOC),sheap.o) \
+ $(SHEAP_OBJ) \
$(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \
$(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ)
obj = $(base_obj) $(NS_OBJC_OBJ)
$(WEBKIT_LIBS) \
$(LIB_EACCESS) $(LIB_FDATASYNC) $(LIB_TIMER_TIME) $(DBUS_LIBS) \
$(LIB_EXECINFO) $(XRANDR_LIBS) $(XINERAMA_LIBS) $(XFIXES_LIBS) \
- $(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) $(CAIRO_LIBS) \
+ $(LIBXML2_LIBS) $(LIBGPM) $(LIBS_SYSTEM) $(CAIRO_LIBS) \
$(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
$(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
- $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) \
- $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES)
+ $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) $(GETADDRINFO_A_LIBS) \
+ $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES) $(LIBSYSTEMD_LIBS)
$(leimdir)/leim-list.el: bootstrap-emacs$(EXEEXT)
$(MAKE) -C ../leim leim-list.el EMACS="$(bootstrap_exe)"
ifeq ($(CANNOT_DUMP),yes)
ln -f temacs$(EXEEXT) $@
else
- LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump
+ LC_ALL=C $(RUN_TEMACS) -batch $(BUILD_DETAILS) -l loadup dump
ifneq ($(PAXCTL_dumped),)
$(PAXCTL_dumped) $@
endif
$(ALLOBJS): globals.h
-$(lib)/libgnu.a: $(config_h)
+LIBEGNU_ARCHIVE = $(lib)/lib$(if $(HYBRID_MALLOC),e)gnu.a
+
+$(LIBEGNU_ARCHIVE): $(config_h)
$(MAKE) -C $(lib) all
## We have to create $(etc) here because init_cmdargs tests its
## This goes on to affect various things, and the emacs binary fails
## to start if Vinstallation_directory has the wrong value.
temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) \
- $(lib)/libgnu.a $(EMACSRES) ${charsets} ${charscript}
+ $(LIBEGNU_ARCHIVE) $(EMACSRES) ${charsets} ${charscript}
$(AM_V_CCLD)$(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
- -o temacs $(ALLOBJS) $(lib)/libgnu.a $(W32_RES_LINK) $(LIBES)
+ -o temacs $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(W32_RES_LINK) $(LIBES)
$(MKDIR_P) $(etc)
ifneq ($(CANNOT_DUMP),yes)
ifneq ($(PAXCTL_notdumped),)
-rm -f *~ \#*
-ETAGS = ../lib-src/etags
+ETAGS = ../lib-src/etags${EXEEXT}
+
+${ETAGS}: FORCE
+ ${MAKE} -C ../lib-src $(notdir $@)
-ctagsfiles1 = [xyzXYZ]*.[hc]
-ctagsfiles2 = [a-wA-W]*.[hc]
-ctagsfiles3 = [a-zA-Z]*.m
+ctagsfiles1 = $(wildcard ${srcdir}/*.[hc])
+ctagsfiles2 = $(wildcard ${srcdir}/*.m)
## FIXME? In out-of-tree builds, should TAGS be generated in srcdir?
## This does not need to depend on ../lisp and ../lwlib TAGS files,
## because etags "--include" only includes a pointer to the file,
## rather than the file contents.
-TAGS: $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) $(srcdir)/$(ctagsfiles3)
- "$(ETAGS)" --include=../lisp/TAGS --include=$(lwlibdir)/TAGS \
+TAGS: ${ETAGS} $(ctagsfiles1) $(ctagsfiles2)
+ ${ETAGS} --include=../lisp/TAGS --include=$(lwlibdir)/TAGS \
--regex='{c}/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/\1/' \
--regex='{c}/[ ]*DEFVAR_[A-Z_ (]+"[^"]+",[ ]\([A-Za-z0-9_]+\)/\1/' \
- $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) \
+ $(ctagsfiles1) \
--regex='{objc}/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/\1/' \
--regex='{objc}/[ ]*DEFVAR_[A-Z_ (]+"[^"]+",[ ]\([A-Za-z0-9_]+\)/\1/' \
- $(srcdir)/$(ctagsfiles3)
+ $(ctagsfiles2)
## Arrange to make tags tables for ../lisp and ../lwlib,
## which the above TAGS file for the C files includes by reference.
-../lisp/TAGS:
+../lisp/TAGS: FORCE
$(MAKE) -C ../lisp TAGS ETAGS="$(ETAGS)"
-$(lwlibdir)/TAGS:
+$(lwlibdir)/TAGS: FORCE
$(MAKE) -C $(lwlibdir) TAGS ETAGS="$(ETAGS)"
tags: TAGS ../lisp/TAGS $(lwlibdir)/TAGS
ifeq ($(CANNOT_DUMP),yes)
ln -f temacs$(EXEEXT) $@
else
- $(RUN_TEMACS) --batch --load loadup bootstrap
+ $(RUN_TEMACS) --batch $(BUILD_DETAILS) --load loadup bootstrap
ifneq ($(PAXCTL_dumped),)
$(PAXCTL_dumped) emacs$(EXEEXT)
endif
#include <stdio.h>
#include <limits.h> /* For CHAR_BIT. */
-
-#ifdef ENABLE_CHECKING
-#include <signal.h> /* For SIGABRT. */
-#endif
+#include <signal.h> /* For SIGABRT, SIGDANGER. */
#ifdef HAVE_PTHREAD
#include <pthread.h>
#include "dispextern.h"
#include "intervals.h"
#include "puresize.h"
+#include "sheap.h"
#include "systime.h"
#include "character.h"
#include "buffer.h"
#include "dosfns.h" /* For dos_memory_info. */
#endif
+#ifdef HAVE_MALLOC_H
+# include <malloc.h>
+#endif
+
#if (defined ENABLE_CHECKING \
&& defined HAVE_VALGRIND_VALGRIND_H \
&& !defined USE_VALGRIND)
#ifdef DOUG_LEA_MALLOC
-#include <malloc.h>
-
/* Specify maximum number of areas to mmap. It would be nice to use a
value that explicitly means "no limit". */
inside glibc's malloc. */
static void *malloc_state_ptr;
-/* Get and free this pointer; useful around unexec. */
-void
-alloc_unexec_pre (void)
-{
- malloc_state_ptr = malloc_get_state ();
-}
-void
-alloc_unexec_post (void)
-{
- free (malloc_state_ptr);
-}
-
/* Restore the dumped malloc state. Because malloc can be invoked
even before main (e.g. by the dynamic linker), the dumped malloc
state must be restored as early as possible using this special hook. */
}
}
+/* Declare the malloc initialization hook, which runs before 'main' starts.
+ EXTERNALLY_VISIBLE works around Bug#22522. */
# ifndef __MALLOC_HOOK_VOLATILE
# define __MALLOC_HOOK_VOLATILE
# endif
-voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook
+voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook EXTERNALLY_VISIBLE
= malloc_initialize_hook;
#endif
+/* Allocator-related actions to do just before and after unexec. */
+
+void
+alloc_unexec_pre (void)
+{
+#ifdef DOUG_LEA_MALLOC
+ malloc_state_ptr = malloc_get_state ();
+#endif
+#ifdef HYBRID_MALLOC
+ bss_sbrk_did_unexec = true;
+#endif
+}
+
+void
+alloc_unexec_post (void)
+{
+#ifdef DOUG_LEA_MALLOC
+ free (malloc_state_ptr);
+#endif
+#ifdef HYBRID_MALLOC
+ bss_sbrk_did_unexec = false;
+#endif
+}
+
/* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
to a struct Lisp_String. */
Malloc
************************************************************************/
+#if defined SIGDANGER || (!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC)
+
/* Function malloc calls this if it finds we are near exhausting storage. */
void
pending_malloc_warning = str;
}
+#endif
/* Display an already-pending malloc warning. */
unexmacosx.c, so don't use it on Darwin. */
#if ! ADDRESS_SANITIZER && !defined DARWIN_OS
-# if !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC && !defined HYBRID_MALLOC
-# define USE_ALIGNED_ALLOC 1
-# ifndef HAVE_ALIGNED_ALLOC
-/* Defined in gmalloc.c. */
-void *aligned_alloc (size_t, size_t);
-# endif
-# elif defined HYBRID_MALLOC
-# if defined HAVE_ALIGNED_ALLOC || defined HAVE_POSIX_MEMALIGN
-# define USE_ALIGNED_ALLOC 1
-# define aligned_alloc hybrid_aligned_alloc
-/* Defined in gmalloc.c. */
-void *aligned_alloc (size_t, size_t);
-# endif
-# elif defined HAVE_ALIGNED_ALLOC
+# if (defined HAVE_ALIGNED_ALLOC \
+ || (defined HYBRID_MALLOC \
+ ? defined HAVE_POSIX_MEMALIGN \
+ : !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC))
# define USE_ALIGNED_ALLOC 1
-# elif defined HAVE_POSIX_MEMALIGN
+# elif !defined HYBRID_MALLOC && defined HAVE_POSIX_MEMALIGN
# define USE_ALIGNED_ALLOC 1
+# define aligned_alloc my_aligned_alloc /* Avoid collision with lisp.h. */
static void *
aligned_alloc (size_t alignment, size_t size)
{
DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
See also the function `vector'. */)
- (register Lisp_Object length, Lisp_Object init)
+ (Lisp_Object length, Lisp_Object init)
{
- Lisp_Object vector;
- register ptrdiff_t sizei;
- register ptrdiff_t i;
- register struct Lisp_Vector *p;
-
CHECK_NATNUM (length);
-
- p = allocate_vector (XFASTINT (length));
- sizei = XFASTINT (length);
- for (i = 0; i < sizei; i++)
+ struct Lisp_Vector *p = allocate_vector (XFASTINT (length));
+ for (ptrdiff_t i = 0; i < XFASTINT (length); i++)
p->contents[i] = init;
-
- XSETVECTOR (vector, p);
- return vector;
+ return make_lisp_ptr (p, Lisp_Vectorlike);
}
DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
usage: (vector &rest OBJECTS) */)
(ptrdiff_t nargs, Lisp_Object *args)
{
- ptrdiff_t i;
- register Lisp_Object val = make_uninit_vector (nargs);
- register struct Lisp_Vector *p = XVECTOR (val);
-
- for (i = 0; i < nargs; i++)
- p->contents[i] = args[i];
+ Lisp_Object val = make_uninit_vector (nargs);
+ struct Lisp_Vector *p = XVECTOR (val);
+ memcpy (p->contents, args, nargs * sizeof *args);
return val;
}
usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS) */)
(ptrdiff_t nargs, Lisp_Object *args)
{
- ptrdiff_t i;
- register Lisp_Object val = make_uninit_vector (nargs);
- register struct Lisp_Vector *p = XVECTOR (val);
+ Lisp_Object val = make_uninit_vector (nargs);
+ struct Lisp_Vector *p = XVECTOR (val);
/* We used to purecopy everything here, if purify-flag was set. This worked
OK for Emacs-23, but with Emacs-24's lexical binding code, it can be
just wasteful and other times plainly wrong (e.g. those free vars may want
to be setcar'd). */
- for (i = 0; i < nargs; i++)
- p->contents[i] = args[i];
+ memcpy (p->contents, args, nargs * sizeof *args);
make_byte_code (p);
XSETCOMPILED (val, p);
return val;
}
else
{
- Lisp_Object fmt = build_pure_c_string ("Don't know how to purify: %S");
+ AUTO_STRING (fmt, "Don't know how to purify: %S");
Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj)));
}
return Qnil;
/* Record this function, so it appears on the profiler's backtraces. */
- record_in_backtrace (Qautomatic_gc, 0, 0);
+ record_in_backtrace (QAutomatic_GC, 0, 0);
check_cons_list ();
#if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
-/* Debugging check whether STR is ASCII-only. */
-
-const char *
-verify_ascii (const char *str)
-{
- const unsigned char *ptr = (unsigned char *) str, *end = ptr + strlen (str);
- while (ptr < end)
- {
- int c = STRING_CHAR_ADVANCE (ptr);
- if (!ASCII_CHAR_P (c))
- emacs_abort ();
- }
- return str;
-}
-
/* Stress alloca with inconveniently sized requests and check
whether all allocated areas may be used for Lisp_Object. */
DEFSYM (Qstring_bytes, "string-bytes");
DEFSYM (Qvector_slots, "vector-slots");
DEFSYM (Qheap, "heap");
- DEFSYM (Qautomatic_gc, "Automatic GC");
+ DEFSYM (QAutomatic_GC, "Automatic GC");
DEFSYM (Qgc_cons_threshold, "gc-cons-threshold");
DEFSYM (Qchar_table_extra_slots, "char-table-extra-slots");
If NAME begins with a space (i.e., a buffer that is not normally
visible to users), then if buffer NAME already exists a random number
is first appended to NAME, to speed up finding a non-existent buffer. */)
- (register Lisp_Object name, Lisp_Object ignore)
+ (Lisp_Object name, Lisp_Object ignore)
{
- register Lisp_Object gentemp, tem, tem2;
- ptrdiff_t count;
- char number[INT_BUFSIZE_BOUND (ptrdiff_t) + sizeof "<>"];
+ Lisp_Object genbase;
CHECK_STRING (name);
- tem = Fstring_equal (name, ignore);
- if (!NILP (tem))
- return name;
- tem = Fget_buffer (name);
- if (NILP (tem))
+ if (!NILP (Fstring_equal (name, ignore)) || NILP (Fget_buffer (name)))
return name;
- if (!strncmp (SSDATA (name), " ", 1)) /* see bug#1229 */
+ if (SREF (name, 0) != ' ') /* See bug#1229. */
+ genbase = name;
+ else
{
/* Note fileio.c:make_temp_name does random differently. */
- tem2 = concat2 (name, make_formatted_string
- (number, "-%"pI"d",
- XFASTINT (Frandom (make_number (999999)))));
- tem = Fget_buffer (tem2);
- if (NILP (tem))
- return tem2;
+ char number[sizeof "-999999"];
+ int i = XFASTINT (Frandom (make_number (999999)));
+ AUTO_STRING_WITH_LEN (lnumber, number, sprintf (number, "-%d", i));
+ genbase = concat2 (name, lnumber);
+ if (NILP (Fget_buffer (genbase)))
+ return genbase;
}
- else
- tem2 = name;
- count = 1;
- while (1)
+ for (ptrdiff_t count = 2; ; count++)
{
- gentemp = concat2 (tem2, make_formatted_string
- (number, "<%"pD"d>", ++count));
- tem = Fstring_equal (gentemp, ignore);
- if (!NILP (tem))
- return gentemp;
- tem = Fget_buffer (gentemp);
- if (NILP (tem))
+ char number[INT_BUFSIZE_BOUND (ptrdiff_t) + sizeof "<>"];
+ AUTO_STRING_WITH_LEN (lnumber, number,
+ sprintf (number, "<%"pD"d>", count));
+ Lisp_Object gentemp = concat2 (genbase, lnumber);
+ if (!NILP (Fstring_equal (gentemp, ignore))
+ || NILP (Fget_buffer (gentemp)))
return gentemp;
}
}
/* To select a nonfundamental mode,
select the buffer temporarily and then call the mode function. */
- record_unwind_protect (save_excursion_restore, save_excursion_save ());
+ record_unwind_current_buffer ();
Fset_buffer (buffer);
call0 (function);
if (NILP (BVAR (&buffer_defaults, enable_multibyte_characters)))
Fset_buffer_multibyte (Qnil);
- pwd = get_current_dir_name ();
+ pwd = emacs_get_current_dir_name ();
if (!pwd)
{
return result;
}
+/* `args_template' has the same meaning as in exec_byte_code() above. */
+Lisp_Object
+get_byte_code_arity (Lisp_Object args_template)
+{
+ eassert (NATNUMP (args_template));
+ EMACS_INT at = XINT (args_template);
+ bool rest = (at & 128) != 0;
+ int mandatory = at & 127;
+ EMACS_INT nonrest = at >> 8;
+
+ return Fcons (make_number (mandatory),
+ rest ? Qmany : make_number (nonrest));
+}
+
void
syms_of_bytecode (void)
{
{
/* Since CRLF is converted to LF within `decode_coding', we
can always open a file with binary mode. */
- callproc_fd[CALLPROC_PIPEREAD] = emacs_open (tempfile,
- O_RDONLY | O_BINARY, 0);
+ callproc_fd[CALLPROC_PIPEREAD] = emacs_open (tempfile, O_RDONLY, 0);
if (callproc_fd[CALLPROC_PIPEREAD] < 0)
{
int open_errno = errno;
return unbind_to (count, val);
}
\f
-#ifndef WINDOWSNT
-static int relocate_fd (int fd, int minfd);
-#endif
-
static char **
add_env (char **env, char **new_env, char *string)
{
return cpid;
#else /* not WINDOWSNT */
- /* Make sure that in, out, and err are not actually already in
- descriptors zero, one, or two; this could happen if Emacs is
- started with its standard in, out, or error closed, as might
- happen under X. */
- {
- int oin = in, oout = out;
-
- /* We have to avoid relocating the same descriptor twice! */
-
- in = relocate_fd (in, 3);
-
- if (out == oin)
- out = in;
- else
- out = relocate_fd (out, 3);
-
- if (err == oin)
- err = in;
- else if (err == oout)
- err = out;
- else
- err = relocate_fd (err, 3);
- }
#ifndef MSDOS
/* Redirect file descriptors and clear the close-on-exec flag on the
redirected ones. IN, OUT, and ERR are close-on-exec so they
need not be closed explicitly. */
- dup2 (in, 0);
- dup2 (out, 1);
- dup2 (err, 2);
+ dup2 (in, STDIN_FILENO);
+ dup2 (out, STDOUT_FILENO);
+ dup2 (err, STDERR_FILENO);
setpgid (0, 0);
tcsetpgrp (0, pid);
#endif /* not WINDOWSNT */
}
-#ifndef WINDOWSNT
-/* Move the file descriptor FD so that its number is not less than MINFD.
- If the file descriptor is moved at all, the original is closed on MSDOS,
- but not elsewhere as the caller will close it anyway. */
-static int
-relocate_fd (int fd, int minfd)
-{
- if (fd >= minfd)
- return fd;
- else
- {
- int new = fcntl (fd, F_DUPFD_CLOEXEC, minfd);
- if (new == -1)
- {
- emacs_perror ("while setting up child");
- _exit (EXIT_CANCELED);
- }
-#ifdef MSDOS
- emacs_close (fd);
-#endif
- return new;
- }
-}
-#endif /* not WINDOWSNT */
-
static bool
getenv_internal_1 (const char *var, ptrdiff_t varlen, char **value,
ptrdiff_t *valuelen, Lisp_Object env)
bool
setup_ccl_program (struct ccl_program *ccl, Lisp_Object ccl_prog)
{
- int i;
-
if (! NILP (ccl_prog))
{
struct Lisp_Vector *vp;
}
}
ccl->ic = CCL_HEADER_MAIN;
- for (i = 0; i < 8; i++)
- ccl->reg[i] = 0;
+ memset (ccl->reg, 0, sizeof ccl->reg);
ccl->last_block = false;
ccl->status = 0;
ccl->stack_idx = 0;
: (c) <= 0xE01EF ? (c) - 0xE0100 + 17 \
: 0)
-/* If C is a high surrogate, return 1. If C is a low surrogate,
- return 2. Otherwise, return 0. */
+/* Return true if C is a surrogate. */
-#define CHAR_SURROGATE_PAIR_P(c) \
- ((c) < 0xD800 ? 0 \
- : (c) <= 0xDBFF ? 1 \
- : (c) <= 0xDFFF ? 2 \
- : 0)
+INLINE bool
+char_surrogate_p (int c)
+{
+ return 0xD800 <= c && c <= 0xDFFF;
+}
/* Data type for Unicode general category.
/* Here, we just copy the parent's fast_map. It's not accurate,
but at least it works for quickly detecting which character
DOESN'T belong to this charset. */
- for (i = 0; i < 190; i++)
- charset.fast_map[i] = parent_charset->fast_map[i];
+ memcpy (charset.fast_map, parent_charset->fast_map,
+ sizeof charset.fast_map);
/* We also copy these for parents. */
charset.min_char = parent_charset->min_char;
else if (EQ (eol_type, Qdos))
{
ptrdiff_t n = 0;
+ ptrdiff_t pos = coding->dst_pos;
+ ptrdiff_t pos_byte = coding->dst_pos_byte;
+ ptrdiff_t pos_end = pos_byte + coding->produced - 1;
- if (NILP (coding->dst_object))
- {
- /* Start deleting '\r' from the tail to minimize the memory
- movement. */
- for (p = pend - 2; p >= pbeg; p--)
- if (*p == '\r')
- {
- memmove (p, p + 1, pend-- - p - 1);
- n++;
- }
- }
- else
- {
- ptrdiff_t pos = coding->dst_pos;
- ptrdiff_t pos_byte = coding->dst_pos_byte;
- ptrdiff_t pos_end = pos_byte + coding->produced - 1;
+ /* This assertion is here instead of code, now deleted, that
+ handled the NILP case, which no longer happens with the
+ current codebase. */
+ eassert (!NILP (coding->dst_object));
- while (pos_byte < pos_end)
+ while (pos_byte < pos_end)
+ {
+ p = BYTE_POS_ADDR (pos_byte);
+ if (*p == '\r' && p[1] == '\n')
{
- p = BYTE_POS_ADDR (pos_byte);
- if (*p == '\r' && p[1] == '\n')
- {
- del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
- n++;
- pos_end--;
- }
- pos++;
- if (coding->dst_multibyte)
- pos_byte += BYTES_BY_CHAR_HEAD (*p);
- else
- pos_byte++;
+ del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
+ n++;
+ pos_end--;
}
+ pos++;
+ if (coding->dst_multibyte)
+ pos_byte += BYTES_BY_CHAR_HEAD (*p);
+ else
+ pos_byte++;
}
coding->produced -= n;
coding->produced_char -= n;
Lisp_Object
from_unicode_buffer (const wchar_t *wstr)
{
- return from_unicode (
- make_unibyte_string (
- (char *) wstr,
- /* we get one of the two final 0 bytes for free. */
- 1 + sizeof (wchar_t) * wcslen (wstr)));
+ /* We get one of the two final null bytes for free. */
+ ptrdiff_t len = 1 + sizeof (wchar_t) * wcslen (wstr);
+ AUTO_STRING_WITH_LEN (str, (char *) wstr, len);
+ return from_unicode (str);
}
wchar_t *
#ifdef emacs
#define malloc hybrid_malloc
#define realloc hybrid_realloc
+#define aligned_alloc hybrid_aligned_alloc
#define calloc hybrid_calloc
#define free hybrid_free
-#if defined HAVE_GET_CURRENT_DIR_NAME && !defined BROKEN_GET_CURRENT_DIR_NAME
-#define HYBRID_GET_CURRENT_DIR_NAME 1
-#define get_current_dir_name hybrid_get_current_dir_name
-#endif
#endif
#endif /* HYBRID_MALLOC */
#undef HAVE_RINT
#endif /* HPUX */
-#ifdef IRIX6_5
-#ifdef emacs
-char *_getpty();
-#endif
-#define INET6 /* Needed for struct sockaddr_in6. */
-#undef HAVE_GETADDRINFO /* IRIX has getaddrinfo but not struct addrinfo. */
-#endif /* IRIX6_5 */
-
#ifdef MSDOS
#ifndef __DJGPP__
You lose; /* Emacs for DOS must be compiled with DJGPP */
xd_symbol_to_dbus_type (Lisp_Object object)
{
return
- ((EQ (object, QCdbus_type_byte)) ? DBUS_TYPE_BYTE
- : (EQ (object, QCdbus_type_boolean)) ? DBUS_TYPE_BOOLEAN
- : (EQ (object, QCdbus_type_int16)) ? DBUS_TYPE_INT16
- : (EQ (object, QCdbus_type_uint16)) ? DBUS_TYPE_UINT16
- : (EQ (object, QCdbus_type_int32)) ? DBUS_TYPE_INT32
- : (EQ (object, QCdbus_type_uint32)) ? DBUS_TYPE_UINT32
- : (EQ (object, QCdbus_type_int64)) ? DBUS_TYPE_INT64
- : (EQ (object, QCdbus_type_uint64)) ? DBUS_TYPE_UINT64
- : (EQ (object, QCdbus_type_double)) ? DBUS_TYPE_DOUBLE
- : (EQ (object, QCdbus_type_string)) ? DBUS_TYPE_STRING
- : (EQ (object, QCdbus_type_object_path)) ? DBUS_TYPE_OBJECT_PATH
- : (EQ (object, QCdbus_type_signature)) ? DBUS_TYPE_SIGNATURE
+ (EQ (object, QCbyte) ? DBUS_TYPE_BYTE
+ : EQ (object, QCboolean) ? DBUS_TYPE_BOOLEAN
+ : EQ (object, QCint16) ? DBUS_TYPE_INT16
+ : EQ (object, QCuint16) ? DBUS_TYPE_UINT16
+ : EQ (object, QCint32) ? DBUS_TYPE_INT32
+ : EQ (object, QCuint32) ? DBUS_TYPE_UINT32
+ : EQ (object, QCint64) ? DBUS_TYPE_INT64
+ : EQ (object, QCuint64) ? DBUS_TYPE_UINT64
+ : EQ (object, QCdouble) ? DBUS_TYPE_DOUBLE
+ : EQ (object, QCstring) ? DBUS_TYPE_STRING
+ : EQ (object, QCobject_path) ? DBUS_TYPE_OBJECT_PATH
+ : EQ (object, QCsignature) ? DBUS_TYPE_SIGNATURE
#ifdef DBUS_TYPE_UNIX_FD
- : (EQ (object, QCdbus_type_unix_fd)) ? DBUS_TYPE_UNIX_FD
+ : EQ (object, QCunix_fd) ? DBUS_TYPE_UNIX_FD
#endif
- : (EQ (object, QCdbus_type_array)) ? DBUS_TYPE_ARRAY
- : (EQ (object, QCdbus_type_variant)) ? DBUS_TYPE_VARIANT
- : (EQ (object, QCdbus_type_struct)) ? DBUS_TYPE_STRUCT
- : (EQ (object, QCdbus_type_dict_entry)) ? DBUS_TYPE_DICT_ENTRY
+ : EQ (object, QCarray) ? DBUS_TYPE_ARRAY
+ : EQ (object, QCvariant) ? DBUS_TYPE_VARIANT
+ : EQ (object, QCstruct) ? DBUS_TYPE_STRUCT
+ : EQ (object, QCdict_entry) ? DBUS_TYPE_DICT_ENTRY
: DBUS_TYPE_INVALID);
}
if ((session_bus_address != NULL) \
&& (!NILP (Fstring_equal \
(bus, build_string (session_bus_address))))) \
- bus = QCdbus_session_bus; \
+ bus = QCsession; \
} \
\
else \
{ \
CHECK_SYMBOL (bus); \
- if (!(EQ (bus, QCdbus_system_bus) || EQ (bus, QCdbus_session_bus))) \
+ if (!(EQ (bus, QCsystem) || EQ (bus, QCsession))) \
XD_SIGNAL2 (build_string ("Wrong bus name"), bus); \
/* We do not want to have an autolaunch for the session bus. */ \
- if (EQ (bus, QCdbus_session_bus) && session_bus_address == NULL) \
+ if (EQ (bus, QCsession) && session_bus_address == NULL) \
XD_SIGNAL2 (build_string ("No connection to bus"), bus); \
} \
} while (0)
CHECK_CONS (object);
/* Type symbol is optional. */
- if (EQ (QCdbus_type_array, CAR_SAFE (elt)))
+ if (EQ (QCarray, CAR_SAFE (elt)))
elt = XD_NEXT_VALUE (elt);
/* If the array is empty, DBUS_TYPE_STRING is the default
}
/* Stop monitoring WATCH for possible I/O.
- DATA is the used bus, either a string or QCdbus_system_bus or
- QCdbus_session_bus. */
+ DATA is the used bus, either a string or QCsystem or QCsession. */
static void
xd_remove_watch (DBusWatch *watch, void *data)
{
/* Unset session environment. */
#if 0
/* This is buggy, since unsetenv is not thread-safe. */
- if (XSYMBOL (QCdbus_session_bus) == data)
+ if (XSYMBOL (QCsession) == data)
{
XD_DEBUG_MESSAGE ("unsetenv DBUS_SESSION_BUS_ADDRESS");
unsetenv ("DBUS_SESSION_BUS_ADDRESS");
connection = dbus_connection_open_private (SSDATA (bus), &derror);
else
- if (NILP (private))
- connection = dbus_bus_get (EQ (bus, QCdbus_system_bus)
- ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION,
- &derror);
- else
- connection = dbus_bus_get_private (EQ (bus, QCdbus_system_bus)
- ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION,
- &derror);
+ {
+ DBusBusType bustype = (EQ (bus, QCsystem)
+ ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION);
+ if (NILP (private))
+ connection = dbus_bus_get (bustype, &derror);
+ else
+ connection = dbus_bus_get_private (bustype, &derror);
+ }
if (dbus_error_is_set (&derror))
XD_ERROR (derror);
}
/* Check for timeout parameter. */
- if ((count+2 <= nargs) && (EQ ((args[count]), QCdbus_timeout)))
+ if ((count + 2 <= nargs) && EQ (args[count], QCtimeout))
{
CHECK_NATNUM (args[count+1]);
timeout = min (XFASTINT (args[count+1]), INT_MAX);
/* The result is the key in Vdbus_registered_objects_table. */
serial = dbus_message_get_serial (dmessage);
- result = list3 (QCdbus_registered_serial,
- bus, make_fixnum_or_float (serial));
+ result = list3 (QCserial, bus, make_fixnum_or_float (serial));
/* Create a hash table entry. */
Fputhash (result, handler, Vdbus_registered_objects_table);
|| (mtype == DBUS_MESSAGE_TYPE_ERROR))
{
/* Search for a registered function of the message. */
- key = list3 (QCdbus_registered_serial, bus,
- make_fixnum_or_float (serial));
+ key = list3 (QCserial, bus, make_fixnum_or_float (serial));
value = Fgethash (key, Vdbus_registered_objects_table, Qnil);
/* There shall be exactly one entry. Construct an event. */
goto cleanup;
/* Search for a registered function of the message. */
- key = list4 ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL)
- ? QCdbus_registered_method
- : QCdbus_registered_signal,
+ key = list4 (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL ? QCmethod : QCsignal,
bus, build_string (interface), build_string (member));
value = Fgethash (key, Vdbus_registered_objects_table, Qnil);
build_pure_c_string ("D-Bus error"));
/* Lisp symbols of the system and session buses. */
- DEFSYM (QCdbus_system_bus, ":system");
- DEFSYM (QCdbus_session_bus, ":session");
+ DEFSYM (QCsystem, ":system");
+ DEFSYM (QCsession, ":session");
/* Lisp symbol for method call timeout. */
- DEFSYM (QCdbus_timeout, ":timeout");
+ DEFSYM (QCtimeout, ":timeout");
/* Lisp symbols of D-Bus types. */
- DEFSYM (QCdbus_type_byte, ":byte");
- DEFSYM (QCdbus_type_boolean, ":boolean");
- DEFSYM (QCdbus_type_int16, ":int16");
- DEFSYM (QCdbus_type_uint16, ":uint16");
- DEFSYM (QCdbus_type_int32, ":int32");
- DEFSYM (QCdbus_type_uint32, ":uint32");
- DEFSYM (QCdbus_type_int64, ":int64");
- DEFSYM (QCdbus_type_uint64, ":uint64");
- DEFSYM (QCdbus_type_double, ":double");
- DEFSYM (QCdbus_type_string, ":string");
- DEFSYM (QCdbus_type_object_path, ":object-path");
- DEFSYM (QCdbus_type_signature, ":signature");
+ DEFSYM (QCbyte, ":byte");
+ DEFSYM (QCboolean, ":boolean");
+ DEFSYM (QCint16, ":int16");
+ DEFSYM (QCuint16, ":uint16");
+ DEFSYM (QCint32, ":int32");
+ DEFSYM (QCuint32, ":uint32");
+ DEFSYM (QCint64, ":int64");
+ DEFSYM (QCuint64, ":uint64");
+ DEFSYM (QCdouble, ":double");
+ DEFSYM (QCstring, ":string");
+ DEFSYM (QCobject_path, ":object-path");
+ DEFSYM (QCsignature, ":signature");
#ifdef DBUS_TYPE_UNIX_FD
- DEFSYM (QCdbus_type_unix_fd, ":unix-fd");
+ DEFSYM (QCunix_fd, ":unix-fd");
#endif
- DEFSYM (QCdbus_type_array, ":array");
- DEFSYM (QCdbus_type_variant, ":variant");
- DEFSYM (QCdbus_type_struct, ":struct");
- DEFSYM (QCdbus_type_dict_entry, ":dict-entry");
+ DEFSYM (QCarray, ":array");
+ DEFSYM (QCvariant, ":variant");
+ DEFSYM (QCstruct, ":struct");
+ DEFSYM (QCdict_entry, ":dict-entry");
/* Lisp symbols of objects in `dbus-registered-objects-table'. */
- DEFSYM (QCdbus_registered_serial, ":serial");
- DEFSYM (QCdbus_registered_method, ":method");
- DEFSYM (QCdbus_registered_signal, ":signal");
+ DEFSYM (QCserial, ":serial");
+ DEFSYM (QCmethod, ":method");
+ DEFSYM (QCsignal, ":signal");
DEFVAR_LISP ("dbus-compiled-version",
Vdbus_compiled_version,
static bool
init_zlib_functions (void)
{
- HMODULE library = w32_delayed_load (Qzlib_dll);
+ HMODULE library = w32_delayed_load (Qzlib);
if (!library)
return false;
(void)
{
#ifdef WINDOWSNT
- Lisp_Object found = Fassq (Qzlib_dll, Vlibrary_cache);
+ Lisp_Object found = Fassq (Qzlib, Vlibrary_cache);
if (CONSP (found))
return XCDR (found);
else
Lisp_Object status;
zlib_initialized = init_zlib_functions ();
status = zlib_initialized ? Qt : Qnil;
- Vlibrary_cache = Fcons (Fcons (Qzlib_dll, status), Vlibrary_cache);
+ Vlibrary_cache = Fcons (Fcons (Qzlib, status), Vlibrary_cache);
return status;
}
#else
#include "buffer.h"
#include "coding.h"
#include "regex.h"
-#include "blockinput.h"
#ifdef MSDOS
#include "msdos.h" /* for fstatat */
DIR *d;
int fd, opendir_errno;
- block_input ();
-
#ifdef DOS_NT
/* Directories cannot be opened. The emulation assumes that any
file descriptor other than AT_FDCWD corresponds to the most
}
#endif
- unblock_input ();
-
if (!d)
report_file_errno ("Opening directory", dirname, opendir_errno);
*fdp = fd;
#endif
static void
-directory_files_internal_unwind (void *dh)
+directory_files_internal_unwind (void *d)
{
- DIR *d = dh;
- block_input ();
closedir (d);
- unblock_input ();
}
/* Return the next directory entry from DIR; DIR's name is DIRNAME.
}
}
- block_input ();
closedir (d);
- unblock_input ();
#ifdef WINDOWSNT
if (attrs)
Vw32_get_true_file_attributes = w32_save;
default, but we plan to change that, so you should specify a non-nil value
for ID-FORMAT if you use the returned uid or gid.
+To access the elements returned, the following access functions are
+provided: `file-attribute-type', `file-attribute-link-number',
+`file-attribute-user-id', `file-attribute-group-id',
+`file-attribute-access-time', `file-attribute-modification-time',
+`file-attribute-status-change-time', `file-attribute-size',
+`file-attribute-modes', `file-attribute-inode-number', and
+`file-attribute-device-number'.
+
Elements of the attribute list are:
0. t for directory, string (name linked to) for symbolic link, or nil.
1. Number of links to file.
if (!(NILP (id_format) || EQ (id_format, Qinteger)))
{
- block_input ();
uname = stat_uname (&s);
gname = stat_gname (&s);
- unblock_input ();
}
filemodestring (&s, modes);
#endif
/* If no window system has been specified, try to use the terminal. */
- if (! isatty (0))
+ if (! isatty (STDIN_FILENO))
fatal ("standard input is not a tty");
#ifdef WINDOWSNT
? default_to_grave_quoting_style ()
: EQ (Vtext_quoting_style, Qgrave))
return GRAVE_QUOTING_STYLE;
+ else if (EQ (Vtext_quoting_style, Qleave))
+ return LEAVE_QUOTING_STYLE;
else if (EQ (Vtext_quoting_style, Qstraight))
return STRAIGHT_QUOTING_STYLE;
else
\<foo> just sets the keymap used for \[cmd]. */
else if (strp[0] == '\\' && (strp[1] == '{' || strp[1] == '<'))
{
- struct buffer *oldbuf;
- ptrdiff_t start_idx;
+ {
/* This is for computing the SHADOWS arg for describe_map_tree. */
Lisp_Object active_maps = Fcurrent_active_maps (Qnil, Qnil);
- Lisp_Object earlier_maps;
ptrdiff_t count = SPECPDL_INDEX ();
strp += 2; /* skip \{ or \< */
start = strp;
- start_idx = start - SDATA (string);
+ ptrdiff_t start_idx = start - SDATA (string);
while ((strp - SDATA (string) < SBYTES (string))
&& *strp != '}' && *strp != '>')
}
/* Now switch to a temp buffer. */
- oldbuf = current_buffer;
+ struct buffer *oldbuf = current_buffer;
set_buffer_internal (XBUFFER (Vprin1_to_string_buffer));
/* This is for an unusual case where some after-change
function uses 'format' or 'prin1' or something else that
{
/* Get the list of active keymaps that precede this one.
If this one's not active, get nil. */
- earlier_maps = Fcdr (Fmemq (tem, Freverse (active_maps)));
+ Lisp_Object earlier_maps
+ = Fcdr (Fmemq (tem, Freverse (active_maps)));
describe_map_tree (tem, 1, Fnreverse (earlier_maps),
Qnil, 0, 1, 0, 0, 1);
}
Ferase_buffer ();
set_buffer_internal (oldbuf);
unbind_to (count, Qnil);
+ }
subst_string:
start = SDATA (tem);
int ch = STRING_CHAR_AND_LENGTH (strp, len);
if ((ch == LEFT_SINGLE_QUOTATION_MARK
|| ch == RIGHT_SINGLE_QUOTATION_MARK)
- && quoting_style != CURVE_QUOTING_STYLE)
+ && quoting_style != CURVE_QUOTING_STYLE
+ && quoting_style != LEAVE_QUOTING_STYLE)
{
*bufp++ = ((ch == LEFT_SINGLE_QUOTATION_MARK
&& quoting_style == GRAVE_QUOTING_STYLE)
syms_of_doc (void)
{
DEFSYM (Qfunction_documentation, "function-documentation");
+ DEFSYM (Qleave, "leave");
DEFSYM (Qgrave, "grave");
DEFSYM (Qstraight, "straight");
DEFVAR_LISP ("text-quoting-style", Vtext_quoting_style,
doc: /* Style to use for single quotes in help and messages.
-Its value should be a symbol.
+Its value should be a symbol. It works by substituting certain single
+quotes for certain other single quotes. This is done in help output and
+`message' output. It is not done in `format'.
+
+`leave' means do not do any substitutions.
`curve' means quote with curved single quotes \\=‘like this\\=’.
`straight' means quote with straight apostrophes \\='like this\\='.
`grave' means quote with grave accent and apostrophe \\=`like this\\='.
static timezone_t
tzlookup (Lisp_Object zone, bool settz)
{
- static char const tzbuf_format[] = "XXX%s%"pI"d:%02d:%02d";
- char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)];
char const *zone_string;
timezone_t new_tz;
}
else
{
+ static char const tzbuf_format[] = "<%+.*"pI"d>%s%"pI"d:%02d:%02d";
+ char const *trailing_tzbuf_format = tzbuf_format + sizeof "<%+.*"pI"d" - 1;
+ char tzbuf[sizeof tzbuf_format + 2 * INT_STRLEN_BOUND (EMACS_INT)];
+ bool plain_integer = INTEGERP (zone);
+
if (EQ (zone, Qwall))
zone_string = 0;
else if (STRINGP (zone))
- zone_string = SSDATA (zone);
- else if (INTEGERP (zone))
+ zone_string = SSDATA (ENCODE_SYSTEM (zone));
+ else if (plain_integer || (CONSP (zone) && INTEGERP (XCAR (zone))
+ && CONSP (XCDR (zone))))
{
+ Lisp_Object abbr;
+ if (!plain_integer)
+ {
+ abbr = XCAR (XCDR (zone));
+ zone = XCAR (zone);
+ }
+
EMACS_INT abszone = eabs (XINT (zone)), hour = abszone / (60 * 60);
- int min = (abszone / 60) % 60, sec = abszone % 60;
- sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0], hour, min, sec);
- zone_string = tzbuf;
+ int hour_remainder = abszone % (60 * 60);
+ int min = hour_remainder / 60, sec = hour_remainder % 60;
+
+ if (plain_integer)
+ {
+ int prec = 2;
+ EMACS_INT numzone = hour;
+ if (hour_remainder != 0)
+ {
+ prec += 2, numzone = 100 * numzone + min;
+ if (sec != 0)
+ prec += 2, numzone = 100 * numzone + sec;
+ }
+ sprintf (tzbuf, tzbuf_format, prec, numzone,
+ &"-"[XINT (zone) < 0], hour, min, sec);
+ zone_string = tzbuf;
+ }
+ else
+ {
+ AUTO_STRING (leading, "<");
+ AUTO_STRING_WITH_LEN (trailing, tzbuf,
+ sprintf (tzbuf, trailing_tzbuf_format,
+ &"-"[XINT (zone) < 0],
+ hour, min, sec));
+ zone_string = SSDATA (concat3 (leading, ENCODE_SYSTEM (abbr),
+ trailing));
+ }
}
else
xsignal2 (Qerror, build_string ("Invalid time zone specification"),
doc: /* Use FORMAT-STRING to format the time TIME, or now if omitted.
TIME is specified as (HIGH LOW USEC PSEC), as returned by
`current-time' or `file-attributes'. The obsolete form (HIGH . LOW)
-is also still accepted. The optional ZONE is omitted or nil for Emacs
-local time, t for Universal Time, `wall' for system wall clock time,
-or a string as in the TZ environment variable.
+is also still accepted.
+
+The optional ZONE is omitted or nil for Emacs local time, t for
+Universal Time, `wall' for system wall clock time, or a string as in
+the TZ environment variable. It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time.
The value is a copy of FORMAT-STRING, but with certain constructs replaced
by text that describes the specified date and time in TIME:
char *buf = buffer;
ptrdiff_t size = sizeof buffer;
size_t len;
- Lisp_Object bufstring;
int ns = t.tv_nsec;
USE_SAFE_ALLOCA;
}
xtzfree (tz);
- bufstring = make_unibyte_string (buf, len);
+ AUTO_STRING_WITH_LEN (bufstring, buf, len);
+ Lisp_Object result = code_convert_string_norecord (bufstring,
+ Vlocale_coding_system, 0);
SAFE_FREE ();
- return code_convert_string_norecord (bufstring, Vlocale_coding_system, 0);
+ return result;
}
DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 2, 0,
The optional SPECIFIED-TIME should be a list of (HIGH LOW . IGNORED),
as from `current-time' and `file-attributes', or nil to use the
current time. The obsolete form (HIGH . LOW) is also still accepted.
+
The optional ZONE is omitted or nil for Emacs local time, t for
Universal Time, `wall' for system wall clock time, or a string as in
-the TZ environment variable.
+the TZ environment variable. It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time.
The list has the following nine members: SEC is an integer between 0
and 60; SEC is 60 for a leap second, which only some operating systems
DEFUN ("encode-time", Fencode_time, Sencode_time, 6, MANY, 0,
doc: /* Convert SECOND, MINUTE, HOUR, DAY, MONTH, YEAR and ZONE to internal time.
This is the reverse operation of `decode-time', which see.
+
The optional ZONE is omitted or nil for Emacs local time, t for
Universal Time, `wall' for system wall clock time, or a string as in
the TZ environment variable. It can also be a list (as from
tm.tm_year = check_tm_member (args[5], TM_YEAR_BASE);
tm.tm_isdst = -1;
- if (CONSP (zone))
- zone = XCAR (zone);
timezone_t tz = tzlookup (zone, false);
value = emacs_mktime_z (tz, &tm);
xtzfree (tz);
The optional ZONE is omitted or nil for Emacs local time, t for
Universal Time, `wall' for system wall clock time, or a string as in
-the TZ environment variable. */)
+the TZ environment variable. It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time. */)
(Lisp_Object specified_time, Lisp_Object zone)
{
time_t value = lisp_seconds_argument (specified_time);
\(HIGH LOW . IGNORED). Thus, you can use times obtained from
`current-time' and from `file-attributes'. SPECIFIED-TIME can also
have the form (HIGH . LOW), but this is considered obsolete.
-Optional second arg ZONE is omitted or nil for the local time zone, or
-a string as in the TZ environment variable.
+
+The optional ZONE is omitted or nil for Emacs local time, t for
+Universal Time, `wall' for system wall clock time, or a string as in
+the TZ environment variable. It can also be a list (as from
+`current-time-zone') or an integer (as from `decode-time') applied
+without consideration for daylight saving time.
Some operating systems cannot provide all this information to Emacs;
in this case, `current-time-zone' returns a list containing nil for
zone_offset = make_number (offset);
if (SCHARS (zone_name) == 0)
{
- /* No local time zone name is available; use "+-NNNN" instead. */
- long int m = offset / 60;
- long int am = offset < 0 ? - m : m;
- long int hour = am / 60;
- int min = am % 60;
- char buf[sizeof "+00" + INT_STRLEN_BOUND (long int)];
- zone_name = make_formatted_string (buf, "%c%02ld%02d",
+ /* No local time zone name is available; use numeric zone instead. */
+ long int hour = offset / 3600;
+ int min_sec = offset % 3600;
+ int amin_sec = min_sec < 0 ? - min_sec : min_sec;
+ int min = amin_sec / 60;
+ int sec = amin_sec % 60;
+ int min_prec = min_sec ? 2 : 0;
+ int sec_prec = sec ? 2 : 0;
+ char buf[sizeof "+0000" + INT_STRLEN_BOUND (long int)];
+ zone_name = make_formatted_string (buf, "%c%.2ld%.*d%.*d",
(offset < 0 ? '-' : '+'),
- hour, min);
+ hour, min_prec, min, sec_prec, sec);
}
}
DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0,
doc: /* Set the Emacs local time zone using TZ, a string specifying a time zone rule.
-
If TZ is nil or `wall', use system wall clock time; this differs from
the usual Emacs convention where nil means current local time. If TZ
-is t, use Universal Time. If TZ is an integer, treat it as in
-`encode-time'.
+is t, use Universal Time. If TZ is a list (as from
+`current-time-zone') or an integer (as from `decode-time'), use the
+specified time zone without consideration for daylight saving time.
Instead of calling this function, you typically want something else.
To temporarily use a different time zone rule for just one invocation
multibyte = true;
int quoting_style = message ? text_quoting_style () : -1;
+ if (quoting_style == LEAVE_QUOTING_STYLE)
+ quoting_style = -1;
/* If we start out planning a unibyte result,
then discover it has to be multibyte, we jump back to retry. */
start2_addr = BYTE_POS_ADDR (start2_byte);
memcpy (temp, start1_addr, len1_byte);
memcpy (start1_addr, start2_addr, len2_byte);
- memcpy (start1_addr + len2_byte, start1_addr + len1_byte, len_mid);
+ memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid);
memcpy (start1_addr + len2_byte + len_mid, temp, len1_byte);
SAFE_FREE ();
&& INTPTR_MAX == EMACS_INT_MAX)
};
+/* Function prototype for the module init function. */
+typedef int (*emacs_init_function) (struct emacs_runtime *);
+
+/* Function prototype for the module Lisp functions. */
+typedef emacs_value (*emacs_subr) (emacs_env *, ptrdiff_t,
+ emacs_value [], void *);
+
/* Function prototype for module user-pointer finalizers. These
should not throw C++ exceptions, so emacs-module.h declares the
corresponding interfaces with EMACS_NOEXCEPT. There is only C code
static void check_main_thread (void);
static void finalize_environment (struct emacs_env_private *);
static void initialize_environment (emacs_env *, struct emacs_env_private *priv);
-static void module_args_out_of_range (emacs_env *, Lisp_Object, Lisp_Object);
static void module_handle_signal (emacs_env *, Lisp_Object);
static void module_handle_throw (emacs_env *, Lisp_Object);
static void module_non_local_exit_signal_1 (emacs_env *, Lisp_Object, Lisp_Object);
static void module_non_local_exit_throw_1 (emacs_env *, Lisp_Object, Lisp_Object);
static void module_out_of_memory (emacs_env *);
static void module_reset_handlerlist (const int *);
-static void module_wrong_type (emacs_env *, Lisp_Object, Lisp_Object);
/* We used to return NULL when emacs_value was a different type from
Lisp_Object, but nowadays we just use Qnil instead. Although they
return error_retval; \
MODULE_HANDLE_NONLOCAL_EXIT (error_retval)
+static void
+CHECK_USER_PTR (Lisp_Object obj)
+{
+ CHECK_TYPE (USER_PTRP (obj), Quser_ptrp, obj);
+}
+
/* Catch signals and throws only if the code can actually signal or
throw. If checking is enabled, abort if the current thread is not
the Emacs main thread. */
{
Lisp_Object value = HASH_VALUE (h, i);
EMACS_INT refcount = XFASTINT (value) + 1;
- if (refcount > MOST_POSITIVE_FIXNUM)
- {
- module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
- return module_nil;
- }
+ if (MOST_POSITIVE_FIXNUM < refcount)
+ xsignal0 (Qoverflow_error);
value = make_natnum (refcount);
set_hash_value_slot (h, i, value);
}
envptr->data = data;
Lisp_Object envobj = make_save_ptr (envptr);
- Lisp_Object doc
- = (documentation
- ? code_convert_string_norecord (build_unibyte_string (documentation),
- Qutf_8, false)
- : Qnil);
+ Lisp_Object doc = Qnil;
+ if (documentation)
+ {
+ AUTO_STRING (unibyte_doc, documentation);
+ doc = code_convert_string_norecord (unibyte_doc, Qutf_8, false);
+ }
+
/* FIXME: Use a bytecompiled object, or even better a subr. */
Lisp_Object ret = list4 (Qlambda,
list2 (Qand_rest, Qargs),
doc,
list4 (Qapply,
- list2 (Qfunction, Qinternal_module_call),
+ list2 (Qfunction, Qinternal__module_call),
envobj,
Qargs));
first arg, because that's what Ffuncall takes. */
Lisp_Object *newargs;
USE_SAFE_ALLOCA;
+ if (nargs == PTRDIFF_MAX)
+ xsignal0 (Qoverflow_error);
SAFE_ALLOCA_LISP (newargs, nargs + 1);
newargs[0] = value_to_lisp (fun);
for (ptrdiff_t i = 0; i < nargs; i++)
{
MODULE_FUNCTION_BEGIN (0);
Lisp_Object l = value_to_lisp (n);
- if (! INTEGERP (l))
- {
- module_wrong_type (env, Qintegerp, l);
- return 0;
- }
+ CHECK_NUMBER (l);
return XINT (l);
}
module_make_integer (emacs_env *env, intmax_t n)
{
MODULE_FUNCTION_BEGIN (module_nil);
- if (! (MOST_NEGATIVE_FIXNUM <= n && n <= MOST_POSITIVE_FIXNUM))
- {
- module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
- return module_nil;
- }
+ if (FIXNUM_OVERFLOW_P (n))
+ xsignal0 (Qoverflow_error);
return lisp_to_value (make_number (n));
}
{
MODULE_FUNCTION_BEGIN (0);
Lisp_Object lisp = value_to_lisp (f);
- if (! FLOATP (lisp))
- {
- module_wrong_type (env, Qfloatp, lisp);
- return 0;
- }
+ CHECK_TYPE (FLOATP (lisp), Qfloatp, lisp);
return XFLOAT_DATA (lisp);
}
{
MODULE_FUNCTION_BEGIN (false);
Lisp_Object lisp_str = value_to_lisp (value);
- if (! STRINGP (lisp_str))
- {
- module_wrong_type (env, Qstringp, lisp_str);
- return false;
- }
+ CHECK_STRING (lisp_str);
Lisp_Object lisp_str_utf8 = ENCODE_UTF_8 (lisp_str);
ptrdiff_t raw_size = SBYTES (lisp_str_utf8);
- if (raw_size == PTRDIFF_MAX)
- {
- module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
- return false;
- }
ptrdiff_t required_buf_size = raw_size + 1;
eassert (length != NULL);
if (*length < required_buf_size)
{
*length = required_buf_size;
- module_non_local_exit_signal_1 (env, Qargs_out_of_range, Qnil);
- return false;
+ xsignal0 (Qargs_out_of_range);
}
*length = required_buf_size;
module_make_string (emacs_env *env, const char *str, ptrdiff_t length)
{
MODULE_FUNCTION_BEGIN (module_nil);
- if (length > STRING_BYTES_BOUND)
- {
- module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
- return module_nil;
- }
- Lisp_Object lstr = make_unibyte_string (str, length);
+ AUTO_STRING_WITH_LEN (lstr, str, length);
return lisp_to_value (code_convert_string_norecord (lstr, Qutf_8, false));
}
{
MODULE_FUNCTION_BEGIN (NULL);
Lisp_Object lisp = value_to_lisp (uptr);
- if (! USER_PTRP (lisp))
- {
- module_wrong_type (env, Quser_ptr, lisp);
- return NULL;
- }
+ CHECK_USER_PTR (lisp);
return XUSER_PTR (lisp)->p;
}
{
/* FIXME: This function should return bool because it can fail. */
MODULE_FUNCTION_BEGIN ();
- check_main_thread ();
- if (module_non_local_exit_check (env) != emacs_funcall_exit_return)
- return;
Lisp_Object lisp = value_to_lisp (uptr);
- if (! USER_PTRP (lisp))
- module_wrong_type (env, Quser_ptr, lisp);
+ CHECK_USER_PTR (lisp);
XUSER_PTR (lisp)->p = ptr;
}
{
MODULE_FUNCTION_BEGIN (NULL);
Lisp_Object lisp = value_to_lisp (uptr);
- if (! USER_PTRP (lisp))
- {
- module_wrong_type (env, Quser_ptr, lisp);
- return NULL;
- }
+ CHECK_USER_PTR (lisp);
return XUSER_PTR (lisp)->finalizer;
}
/* FIXME: This function should return bool because it can fail. */
MODULE_FUNCTION_BEGIN ();
Lisp_Object lisp = value_to_lisp (uptr);
- if (! USER_PTRP (lisp))
- module_wrong_type (env, Quser_ptr, lisp);
+ CHECK_USER_PTR (lisp);
XUSER_PTR (lisp)->finalizer = fin;
}
+static void
+check_vec_index (Lisp_Object lvec, ptrdiff_t i)
+{
+ CHECK_VECTOR (lvec);
+ if (! (0 <= i && i < ASIZE (lvec)))
+ args_out_of_range_3 (make_fixnum_or_float (i),
+ make_number (0), make_number (ASIZE (lvec) - 1));
+}
+
static void
module_vec_set (emacs_env *env, emacs_value vec, ptrdiff_t i, emacs_value val)
{
/* FIXME: This function should return bool because it can fail. */
MODULE_FUNCTION_BEGIN ();
Lisp_Object lvec = value_to_lisp (vec);
- if (! VECTORP (lvec))
- {
- module_wrong_type (env, Qvectorp, lvec);
- return;
- }
- if (! (0 <= i && i < ASIZE (lvec)))
- {
- if (MOST_NEGATIVE_FIXNUM <= i && i <= MOST_POSITIVE_FIXNUM)
- module_args_out_of_range (env, lvec, make_number (i));
- else
- module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
- return;
- }
+ check_vec_index (lvec, i);
ASET (lvec, i, value_to_lisp (val));
}
{
MODULE_FUNCTION_BEGIN (module_nil);
Lisp_Object lvec = value_to_lisp (vec);
- if (! VECTORP (lvec))
- {
- module_wrong_type (env, Qvectorp, lvec);
- return module_nil;
- }
- if (! (0 <= i && i < ASIZE (lvec)))
- {
- if (MOST_NEGATIVE_FIXNUM <= i && i <= MOST_POSITIVE_FIXNUM)
- module_args_out_of_range (env, lvec, make_number (i));
- else
- module_non_local_exit_signal_1 (env, Qoverflow_error, Qnil);
- return module_nil;
- }
+ check_vec_index (lvec, i);
return lisp_to_value (AREF (lvec, i));
}
/* FIXME: Return a sentinel value (e.g., -1) on error. */
MODULE_FUNCTION_BEGIN (0);
Lisp_Object lvec = value_to_lisp (vec);
- if (! VECTORP (lvec))
- {
- module_wrong_type (env, Qvectorp, lvec);
- return 0;
- }
+ CHECK_VECTOR (lvec);
return ASIZE (lvec);
}
}
}
-/* Module version of `wrong_type_argument'. */
-static void
-module_wrong_type (emacs_env *env, Lisp_Object predicate, Lisp_Object value)
-{
- module_non_local_exit_signal_1 (env, Qwrong_type_argument,
- list2 (predicate, value));
-}
-
/* Signal an out-of-memory condition to the caller. */
static void
module_out_of_memory (emacs_env *env)
XCDR (Vmemory_signal_data));
}
-/* Signal arguments are out of range. */
-static void
-module_args_out_of_range (emacs_env *env, Lisp_Object a1, Lisp_Object a2)
-{
- module_non_local_exit_signal_1 (env, Qargs_out_of_range, list2 (a1, a2));
-}
-
\f
/* Value conversion. */
? exprintf (&buf, &bufsize, buffer, -1,
"#<module function %s from %s>", sym, path)
: sprintf (buffer, noaddr_format, env->subr));
- Lisp_Object unibyte_result = make_unibyte_string (buffer, size);
+ AUTO_STRING_WITH_LEN (unibyte_result, buffer, size);
+ Lisp_Object result = code_convert_string_norecord (unibyte_result,
+ Qutf_8, false);
if (buf != buffer)
xfree (buf);
- return code_convert_string_norecord (unibyte_result, Qutf_8, false);
+ return result;
}
\f
defsubr (&Smodule_load);
- DEFSYM (Qinternal_module_call, "internal--module-call");
+ DEFSYM (Qinternal__module_call, "internal--module-call");
defsubr (&Sinternal_module_call);
}
BEWARE: Do not assume NULL is a valid value! */
typedef struct emacs_value_tag *emacs_value;
-enum emacs_arity { emacs_variadic_function = -2 };
+enum { emacs_variadic_function = -2 };
/* Struct passed to a module init function (emacs_module_init). */
struct emacs_runtime
};
-/* Function prototype for the module init function. */
-typedef int (*emacs_init_function) (struct emacs_runtime *ert);
-
-/* Function prototype for the module Lisp functions. */
-typedef emacs_value (*emacs_subr) (emacs_env *env, ptrdiff_t nargs,
- emacs_value args[], void *data);
-
/* Possible Emacs function call outcomes. */
enum emacs_funcall_exit
{
#include "dosfns.h"
#endif
+#ifdef HAVE_LIBSYSTEMD
+# include <systemd/sd-daemon.h>
+# include <sys/socket.h>
+#endif
+
#ifdef HAVE_WINDOW_SYSTEM
#include TERM_HEADER
#endif /* HAVE_WINDOW_SYSTEM */
#include "composite.h"
#include "dispextern.h"
#include "regex.h"
+#include "sheap.h"
#include "syntax.h"
#include "sysselect.h"
#include "systime.h"
bool initialized;
/* Set to true if this instance of Emacs might dump. */
+#ifndef DOUG_LEA_MALLOC
+static
+#endif
bool might_dump;
#ifdef DARWIN_OS
extern void unexec_init_emacs_zone (void);
#endif
-extern void malloc_enable_thread (void);
-
/* If true, Emacs should not attempt to use a window-specific code,
but instead should use the virtual terminal under which it was started. */
bool inhibit_window_system;
/* True means remove site-lisp directories from load-path. */
bool no_site_lisp;
+/* True means put details like time stamps into builds. */
+bool build_details;
+
/* Name for the server started by the daemon.*/
static char *daemon_name;
--display, -d DISPLAY use X server DISPLAY\n\
",
"\
+--no-build-details do not add build details such as time stamps\n\
--no-desktop do not load a saved desktop\n\
--no-init-file, -q load neither ~/.emacs nor default.el\n\
--no-loadup, -nl do not load loadup.el into bare Emacs\n\
{
signal (sig, SIG_DFL);
- /* If fatal error occurs in code below, avoid infinite recursion. */
- if (! fatal_error_in_progress)
+ if (attempt_orderly_shutdown_on_fatal_signal)
{
- fatal_error_in_progress = 1;
+ /* If fatal error occurs in code below, avoid infinite recursion. */
+ if (! fatal_error_in_progress)
+ {
+ fatal_error_in_progress = 1;
- totally_unblock_input ();
- if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
- Fkill_emacs (make_number (sig));
+ totally_unblock_input ();
+ if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
+ Fkill_emacs (make_number (sig));
- shut_down_emacs (sig, Qnil);
- emacs_backtrace (backtrace_limit);
+ shut_down_emacs (sig, Qnil);
+ emacs_backtrace (backtrace_limit);
+ }
}
/* Signal the same code; this time it will really be fatal.
unexec_init_emacs_zone ();
#endif
+ init_standard_fds ();
atexit (close_output_streams);
#ifdef HAVE_MODULES
filename_from_ansi (ch_to_dir, newdir);
ch_to_dir = newdir;
#endif
- original_pwd = get_current_dir_name ();
+ original_pwd = emacs_get_current_dir_name ();
if (chdir (ch_to_dir) != 0)
{
fprintf (stderr, "%s: Can't chdir to %s: %s\n",
char *term;
if (argmatch (argv, argc, "-t", "--terminal", 4, &term, &skip_args))
{
- int result;
- emacs_close (0);
- emacs_close (1);
- result = emacs_open (term, O_RDWR, 0);
- if (result < 0 || fcntl (0, F_DUPFD_CLOEXEC, 1) < 0)
+ emacs_close (STDIN_FILENO);
+ emacs_close (STDOUT_FILENO);
+ int result = emacs_open (term, O_RDWR, 0);
+ if (result != STDIN_FILENO
+ || (fcntl (STDIN_FILENO, F_DUPFD_CLOEXEC, STDOUT_FILENO)
+ != STDOUT_FILENO))
{
char *errstring = strerror (errno);
fprintf (stderr, "%s: %s: %s\n", argv[0], term, errstring);
- exit (1);
+ exit (EXIT_FAILURE);
}
- if (! isatty (0))
+ if (! isatty (STDIN_FILENO))
{
fprintf (stderr, "%s: %s: not a tty\n", argv[0], term);
- exit (1);
+ exit (EXIT_FAILURE);
}
fprintf (stderr, "Using %s\n", term);
#ifdef HAVE_WINDOW_SYSTEM
- inhibit_window_system = 1; /* -t => -nw */
+ inhibit_window_system = true; /* -t => -nw */
#endif
}
else
w32_daemon_event = NULL;
#endif
+
+ int sockfd = -1;
+
if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args)
|| argmatch (argv, argc, "-daemon", "--daemon", 5, &dname_arg, &skip_args))
{
exit (1);
}
+#ifdef HAVE_LIBSYSTEMD
+ /* Read the number of sockets passed through by systemd. */
+ int systemd_socket = sd_listen_fds (1);
+
+ if (systemd_socket > 1)
+ fprintf (stderr,
+ ("\n"
+ "Warning: systemd passed more than one socket to Emacs.\n"
+ "Try 'Accept=false' in the Emacs socket unit file.\n"));
+ else if (systemd_socket == 1
+ && (0 < sd_is_socket (SD_LISTEN_FDS_START,
+ AF_UNSPEC, SOCK_STREAM, 1)))
+ sockfd = SD_LISTEN_FDS_START;
+#endif /* HAVE_LIBSYSTEMD */
+
#ifndef DAEMON_MUST_EXEC
#ifdef USE_GTK
fprintf (stderr, "\nWarning: due to a long standing Gtk+ bug\nhttp://bugzilla.gnome.org/show_bug.cgi?id=85715\n\
no_site_lisp
= argmatch (argv, argc, "-nsl", "--no-site-lisp", 11, NULL, &skip_args);
+ build_details = ! argmatch (argv, argc, "-no-build-details",
+ "--no-build-details", 7, NULL, &skip_args);
+
#ifdef HAVE_NS
ns_pool = ns_alloc_autorelease_pool ();
#ifdef NS_IMPL_GNUSTEP
/* Started from GUI? */
/* FIXME: Do the right thing if getenv returns NULL, or if
chdir fails. */
- if (! inhibit_window_system && ! isatty (0) && ! ch_to_dir)
+ if (! inhibit_window_system && ! isatty (STDIN_FILENO) && ! ch_to_dir)
chdir (getenv ("HOME"));
if (skip_args < argc)
{
/* This can create a thread that may call getenv, so it must follow
all calls to putenv and setenv. Also, this sets up
add_keyboard_wait_descriptor, which init_display uses. */
- init_process_emacs ();
+ init_process_emacs (sockfd);
init_keyboard (); /* This too must precede init_sys_modes. */
if (!noninteractive)
{ "-help", "--help", 90, 0 },
{ "-nl", "--no-loadup", 70, 0 },
{ "-nsl", "--no-site-lisp", 65, 0 },
+ { "-no-build-details", "--no-build-details", 63, 0 },
/* -d must come last before the options handled in startup.el. */
{ "-d", "--display", 60, 1 },
{ "-display", 0, 60, 1 },
tem = Vpurify_flag;
Vpurify_flag = Qnil;
+#ifdef HYBRID_MALLOC
+ {
+ static char const fmt[] = "%d of %d static heap bytes used";
+ char buf[sizeof fmt + 2 * (INT_STRLEN_BOUND (int) - 2)];
+ int max_usage = max_bss_sbrk_ptr - bss_sbrk_buffer;
+ sprintf (buf, fmt, max_usage, STATIC_HEAP_SIZE);
+ /* Don't log messages, because at this point buffers cannot be created. */
+ message1_nolog (buf);
+ }
+#endif
+
fflush (stdout);
/* Tell malloc where start of impure now is. */
/* Also arrange for warnings when nearly out of space. */
/* Get rid of stdin, stdout and stderr. */
nfd = emacs_open ("/dev/null", O_RDWR, 0);
err |= nfd < 0;
- err |= dup2 (nfd, 0) < 0;
- err |= dup2 (nfd, 1) < 0;
- err |= dup2 (nfd, 2) < 0;
+ err |= dup2 (nfd, STDIN_FILENO) < 0;
+ err |= dup2 (nfd, STDOUT_FILENO) < 0;
+ err |= dup2 (nfd, STDERR_FILENO) < 0;
err |= emacs_close (nfd) != 0;
/* Closing the pipe will notify the parent that it can exit.
`ms-dos' compiled as an MS-DOS application.
`windows-nt' compiled as a native W32 application.
`cygwin' compiled using the Cygwin library.
-Anything else (in Emacs 24.1, the possibilities are: aix, berkeley-unix,
-hpux, irix, usg-unix-v) indicates some sort of Unix system. */);
+Anything else (in Emacs 26, the possibilities are: aix, berkeley-unix,
+hpux, usg-unix-v) indicates some sort of Unix system. */);
Vsystem_type = intern_c_string (SYSTEM_TYPE);
/* See configure.ac for the possible SYSTEM_TYPEs. */
static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *);
static Lisp_Object apply_lambda (Lisp_Object, Lisp_Object, ptrdiff_t);
+static Lisp_Object lambda_arity (Lisp_Object);
static Lisp_Object
specpdl_symbol (union specbinding *pdl)
}
-/* Dump an error message; called like vprintf. */
-void
-verror (const char *m, va_list ap)
+/* Format and return a string; called like vprintf. */
+Lisp_Object
+vformat_string (const char *m, va_list ap)
{
char buf[4000];
ptrdiff_t size = sizeof buf;
if (buffer != buf)
xfree (buffer);
- xsignal1 (Qerror, string);
+ return string;
+}
+
+/* Dump an error message; called like vprintf. */
+void
+verror (const char *m, va_list ap)
+{
+ xsignal1 (Qerror, vformat_string (m, ap));
}
return unbind_to (count, val);
}
+DEFUN ("func-arity", Ffunc_arity, Sfunc_arity, 1, 1, 0,
+ doc: /* Return minimum and maximum number of args allowed for FUNCTION.
+FUNCTION must be a function of some kind.
+The returned value is a cons cell (MIN . MAX). MIN is the minimum number
+of args. MAX is the maximum number, or the symbol `many', for a
+function with `&rest' args, or `unevalled' for a special form. */)
+ (Lisp_Object function)
+{
+ Lisp_Object original;
+ Lisp_Object funcar;
+ Lisp_Object result;
+
+ original = function;
+
+ retry:
+
+ /* Optimize for no indirection. */
+ function = original;
+ if (SYMBOLP (function) && !NILP (function))
+ {
+ function = XSYMBOL (function)->function;
+ if (SYMBOLP (function))
+ function = indirect_function (function);
+ }
+
+ if (CONSP (function) && EQ (XCAR (function), Qmacro))
+ function = XCDR (function);
+
+ if (SUBRP (function))
+ result = Fsubr_arity (function);
+ else if (COMPILEDP (function))
+ result = lambda_arity (function);
+ else
+ {
+ if (NILP (function))
+ xsignal1 (Qvoid_function, original);
+ if (!CONSP (function))
+ xsignal1 (Qinvalid_function, original);
+ funcar = XCAR (function);
+ if (!SYMBOLP (funcar))
+ xsignal1 (Qinvalid_function, original);
+ if (EQ (funcar, Qlambda)
+ || EQ (funcar, Qclosure))
+ result = lambda_arity (function);
+ else if (EQ (funcar, Qautoload))
+ {
+ Fautoload_do_load (function, original, Qnil);
+ goto retry;
+ }
+ else
+ xsignal1 (Qinvalid_function, original);
+ }
+ return result;
+}
+
+/* FUN must be either a lambda-expression or a compiled-code object. */
+static Lisp_Object
+lambda_arity (Lisp_Object fun)
+{
+ Lisp_Object syms_left;
+
+ if (CONSP (fun))
+ {
+ if (EQ (XCAR (fun), Qclosure))
+ {
+ fun = XCDR (fun); /* Drop `closure'. */
+ CHECK_LIST_CONS (fun, fun);
+ }
+ syms_left = XCDR (fun);
+ if (CONSP (syms_left))
+ syms_left = XCAR (syms_left);
+ else
+ xsignal1 (Qinvalid_function, fun);
+ }
+ else if (COMPILEDP (fun))
+ {
+ ptrdiff_t size = ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK;
+ if (size <= COMPILED_STACK_DEPTH)
+ xsignal1 (Qinvalid_function, fun);
+ syms_left = AREF (fun, COMPILED_ARGLIST);
+ if (INTEGERP (syms_left))
+ return get_byte_code_arity (syms_left);
+ }
+ else
+ emacs_abort ();
+
+ EMACS_INT minargs = 0, maxargs = 0;
+ bool optional = false;
+ for (; CONSP (syms_left); syms_left = XCDR (syms_left))
+ {
+ Lisp_Object next = XCAR (syms_left);
+ if (!SYMBOLP (next))
+ xsignal1 (Qinvalid_function, fun);
+
+ if (EQ (next, Qand_rest))
+ return Fcons (make_number (minargs), Qmany);
+ else if (EQ (next, Qand_optional))
+ optional = true;
+ else
+ {
+ if (!optional)
+ minargs++;
+ maxargs++;
+ }
+ }
+
+ if (!NILP (syms_left))
+ xsignal1 (Qinvalid_function, fun);
+
+ return Fcons (make_number (minargs), make_number (maxargs));
+}
+
DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
1, 1, 0,
doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now. */)
defsubr (&Seval);
defsubr (&Sapply);
defsubr (&Sfuncall);
+ defsubr (&Sfunc_arity);
defsubr (&Srun_hooks);
defsubr (&Srun_hook_with_args);
defsubr (&Srun_hook_with_args_until_success);
Lisp_Object data = CONSP (name) || NILP (name) ? name : list1 (name);
synchronize_system_messages_locale ();
char *str = strerror (errorno);
+ AUTO_STRING (unibyte_str, str);
Lisp_Object errstring
- = code_convert_string_norecord (build_unibyte_string (str),
- Vlocale_coding_system, 0);
+ = code_convert_string_norecord (unibyte_str, Vlocale_coding_system, 0);
Lisp_Object errdata = Fcons (errstring, data);
if (errorno == EEXIST)
Lisp_Object data = CONSP (name) || NILP (name) ? name : list1 (name);
synchronize_system_messages_locale ();
char *str = strerror (errno);
+ AUTO_STRING (unibyte_str, str);
Lisp_Object errstring
- = code_convert_string_norecord (build_unibyte_string (str),
- Vlocale_coding_system, 0);
+ = code_convert_string_norecord (unibyte_str, Vlocale_coding_system, 0);
Lisp_Object errdata = Fcons (errstring, data);
xsignal (Qfile_notify_error, Fcons (build_string (string), errdata));
/* Drive must be set, so this is okay. */
if (strcmp (nm - 2, SSDATA (name)) != 0)
{
- char temp[] = " :";
-
name = make_specified_string (nm, -1, p - nm, multibyte);
- temp[0] = DRIVE_LETTER (drive);
- AUTO_STRING (drive_prefix, temp);
+ char temp[] = { DRIVE_LETTER (drive), ':', 0 };
+ AUTO_STRING_WITH_LEN (drive_prefix, temp, 2);
name = concat2 (drive_prefix, name);
}
#ifdef WINDOWSNT
encoded_filename = ENCODE_FILE (filename);
fn = SSDATA (encoded_filename);
- open_flags = O_WRONLY | O_BINARY | O_CREAT;
+ open_flags = O_WRONLY | O_CREAT;
open_flags |= EQ (mustbenew, Qexcl) ? O_EXCL : !NILP (append) ? 0 : O_TRUNC;
if (NUMBERP (append))
offset = file_offset (append);
if (timespec_valid_p (modtime)
&& ! (valid_timestamp_file_system && st.st_dev == timestamp_file_system))
{
- int desc1 = emacs_open (fn, O_WRONLY | O_BINARY, 0);
+ int desc1 = emacs_open (fn, O_WRONLY, 0);
if (desc1 >= 0)
{
struct stat st1;
/* If we did not find a boot time in wtmp, look at wtmp, and so on. */
for (counter = 0; counter < 20 && ! boot_time; counter++)
{
+ Lisp_Object filename = Qnil;
+ bool delete_flag = false;
char cmd_string[sizeof WTMP_FILE ".19.gz"];
- Lisp_Object tempname, filename;
- bool delete_flag = 0;
-
- filename = Qnil;
-
- tempname = make_formatted_string
- (cmd_string, "%s.%d", WTMP_FILE, counter);
+ AUTO_STRING_WITH_LEN (tempname, cmd_string,
+ sprintf (cmd_string, "%s.%d", WTMP_FILE, counter));
if (! NILP (Ffile_exists_p (tempname)))
filename = tempname;
else
CALLN (Fcall_process, build_string ("gzip"), Qnil,
list2 (QCfile, filename), Qnil,
build_string ("-cd"), tempname);
- delete_flag = 1;
+ delete_flag = true;
}
}
struct utmp ut, *utp;
if (filename)
- {
- /* On some versions of IRIX, opening a nonexistent file name
- is likely to crash in the utmp routines. */
- if (faccessat (AT_FDCWD, filename, R_OK, AT_EACCESS) != 0)
- return;
-
- utmpname (filename);
- }
+ utmpname (filename);
setutent ();
while ((nbytes = readlinkat (AT_FDCWD, lfname, lfinfo, MAX_LFINFO + 1)) < 0
&& errno == EINVAL)
{
- int fd = emacs_open (lfname, O_RDONLY | O_BINARY | O_NOFOLLOW, 0);
+ int fd = emacs_open (lfname, O_RDONLY | O_NOFOLLOW, 0);
if (0 <= fd)
{
/* Use read, not emacs_read, since FD isn't unwind-protected. */
#include <config.h>
#include <unistd.h>
+#include <filevercmp.h>
#include <intprops.h>
#include <vla.h>
+#include <errno.h>
#include "lisp.h"
#include "character.h"
return i1 < SCHARS (string2) ? Qt : Qnil;
}
+DEFUN ("string-version-lessp", Fstring_version_lessp,
+ Sstring_version_lessp, 2, 2, 0,
+ doc: /* Return non-nil if S1 is less than S2, as version strings.
+
+This function compares version strings S1 and S2:
+ 1) By prefix lexicographically.
+ 2) Then by version (similarly to version comparison of Debian's dpkg).
+ Leading zeros in version numbers are ignored.
+ 3) If both prefix and version are equal, compare as ordinary strings.
+
+For example, \"foo2.png\" compares less than \"foo12.png\".
+Case is significant.
+Symbols are also allowed; their print names are used instead. */)
+ (Lisp_Object string1, Lisp_Object string2)
+{
+ if (SYMBOLP (string1))
+ string1 = SYMBOL_NAME (string1);
+ if (SYMBOLP (string2))
+ string2 = SYMBOL_NAME (string2);
+ CHECK_STRING (string1);
+ CHECK_STRING (string2);
+
+ char *p1 = SSDATA (string1);
+ char *p2 = SSDATA (string2);
+ char *lim1 = p1 + SBYTES (string1);
+ char *lim2 = p2 + SBYTES (string2);
+ int cmp;
+
+ while ((cmp = filevercmp (p1, p2)) == 0)
+ {
+ /* If the strings are identical through their first null bytes,
+ skip past identical prefixes and try again. */
+ ptrdiff_t size = strlen (p1) + 1;
+ p1 += size;
+ p2 += size;
+ if (lim1 < p1)
+ return lim2 < p2 ? Qnil : Qt;
+ if (lim2 < p2)
+ return Qnil;
+ }
+
+ return cmp < 0 ? Qt : Qnil;
+}
+
DEFUN ("string-collate-lessp", Fstring_collate_lessp, Sstring_collate_lessp, 2, 4, 0,
doc: /* Return t if first arg string is less than second in collation order.
Symbols are also allowed; their print names are used instead.
(register Lisp_Object elt, Lisp_Object list)
{
register Lisp_Object tail;
- for (tail = list; CONSP (tail); tail = XCDR (tail))
+ for (tail = list; !NILP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
CHECK_LIST_CONS (tail, list);
if (!FLOATP (elt))
return Fmemq (elt, list);
- for (tail = list; CONSP (tail); tail = XCDR (tail))
+ for (tail = list; !NILP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
CHECK_LIST_CONS (tail, list);
{
Lisp_Object tail, prev;
- for (tail = seq, prev = Qnil; CONSP (tail); tail = XCDR (tail))
+ for (tail = seq, prev = Qnil; !NILP (tail); tail = XCDR (tail))
{
CHECK_LIST_CONS (tail, seq);
{
char *str = NULL;
#ifdef HAVE_LANGINFO_CODESET
- Lisp_Object val;
if (EQ (item, Qcodeset))
{
str = nl_langinfo (CODESET);
for (i = 0; i < 7; i++)
{
str = nl_langinfo (days[i]);
- val = build_unibyte_string (str);
+ AUTO_STRING (val, str);
/* Fixme: Is this coding system necessarily right, even if
it is consistent with CODESET? If not, what to do? */
ASET (v, i, code_convert_string_norecord (val, Vlocale_coding_system,
for (i = 0; i < 12; i++)
{
str = nl_langinfo (months[i]);
- val = build_unibyte_string (str);
+ AUTO_STRING (val, str);
ASET (v, i, code_convert_string_norecord (val, Vlocale_coding_system,
0));
}
Low-level Functions
***********************************************************************/
-struct hash_table_test hashtest_eq, hashtest_eql, hashtest_equal;
-
/* Compare KEY1 which has hash code HASH1 and KEY2 with hash code
HASH2 in hash table H using `eql'. Value is true if KEY1 and
KEY2 are the same. */
return !NILP (call2 (ht->user_cmp_function, key1, key2));
}
-
/* Value is a hash code for KEY for use in hash table H which uses
`eq' to compare keys. The hash code returned is guaranteed to fit
in a Lisp integer. */
static EMACS_UINT
hashfn_eq (struct hash_table_test *ht, Lisp_Object key)
{
- EMACS_UINT hash = XHASH (key) ^ XTYPE (key);
- return hash;
+ return XHASH (key) ^ XTYPE (key);
}
/* Value is a hash code for KEY for use in hash table H which uses
- `eql' to compare keys. The hash code returned is guaranteed to fit
+ `equal' to compare keys. The hash code returned is guaranteed to fit
in a Lisp integer. */
static EMACS_UINT
-hashfn_eql (struct hash_table_test *ht, Lisp_Object key)
+hashfn_equal (struct hash_table_test *ht, Lisp_Object key)
{
- EMACS_UINT hash;
- if (FLOATP (key))
- hash = sxhash (key, 0);
- else
- hash = XHASH (key) ^ XTYPE (key);
- return hash;
+ return sxhash (key, 0);
}
/* Value is a hash code for KEY for use in hash table H which uses
- `equal' to compare keys. The hash code returned is guaranteed to fit
+ `eql' to compare keys. The hash code returned is guaranteed to fit
in a Lisp integer. */
static EMACS_UINT
-hashfn_equal (struct hash_table_test *ht, Lisp_Object key)
+hashfn_eql (struct hash_table_test *ht, Lisp_Object key)
{
- EMACS_UINT hash = sxhash (key, 0);
- return hash;
+ return FLOATP (key) ? hashfn_equal (ht, key) : hashfn_eq (ht, key);
}
/* Value is a hash code for KEY for use in hash table H which uses as
return hashfn_eq (ht, hash);
}
+struct hash_table_test const
+ hashtest_eq = { LISPSYM_INITIALLY (Qeq), LISPSYM_INITIALLY (Qnil),
+ LISPSYM_INITIALLY (Qnil), 0, hashfn_eq },
+ hashtest_eql = { LISPSYM_INITIALLY (Qeql), LISPSYM_INITIALLY (Qnil),
+ LISPSYM_INITIALLY (Qnil), cmpfn_eql, hashfn_eql },
+ hashtest_equal = { LISPSYM_INITIALLY (Qequal), LISPSYM_INITIALLY (Qnil),
+ LISPSYM_INITIALLY (Qnil), cmpfn_equal, hashfn_equal };
+
/* Allocate basically initialized hash table. */
static struct Lisp_Hash_Table *
Lisp Interface
***********************************************************************/
+DEFUN ("sxhash-eq", Fsxhash_eq, Ssxhash_eq, 1, 1, 0,
+ doc: /* Return an integer hash code for OBJ suitable for `eq'.
+If (eq A B), then (= (sxhash-eq A) (sxhash-eq B)). */)
+ (Lisp_Object obj)
+{
+ return make_number (hashfn_eq (NULL, obj));
+}
-DEFUN ("sxhash", Fsxhash, Ssxhash, 1, 1, 0,
- doc: /* Compute a hash code for OBJ and return it as integer. */)
+DEFUN ("sxhash-eql", Fsxhash_eql, Ssxhash_eql, 1, 1, 0,
+ doc: /* Return an integer hash code for OBJ suitable for `eql'.
+If (eql A B), then (= (sxhash-eql A) (sxhash-eql B)). */)
(Lisp_Object obj)
{
- EMACS_UINT hash = sxhash (obj, 0);
- return make_number (hash);
+ return make_number (hashfn_eql (NULL, obj));
}
+DEFUN ("sxhash-equal", Fsxhash_equal, Ssxhash_equal, 1, 1, 0,
+ doc: /* Return an integer hash code for OBJ suitable for `equal'.
+If (equal A B), then (= (sxhash-equal A) (sxhash-equal B)). */)
+ (Lisp_Object obj)
+{
+ return make_number (hashfn_equal (NULL, obj));
+}
DEFUN ("make-hash-table", Fmake_hash_table, Smake_hash_table, 0, MANY, 0,
doc: /* Create and return a new hash table.
#include "sha256.h"
#include "sha512.h"
+static Lisp_Object
+make_digest_string (Lisp_Object digest, int digest_size)
+{
+ unsigned char *p = SDATA (digest);
+
+ for (int i = digest_size - 1; i >= 0; i--)
+ {
+ static char const hexdigit[16] = "0123456789abcdef";
+ int p_i = p[i];
+ p[2 * i] = hexdigit[p_i >> 4];
+ p[2 * i + 1] = hexdigit[p_i & 0xf];
+ }
+ return digest;
+}
+
/* ALGORITHM is a symbol: md5, sha1, sha224 and so on. */
static Lisp_Object
Lisp_Object end, Lisp_Object coding_system, Lisp_Object noerror,
Lisp_Object binary)
{
- int i;
ptrdiff_t size, start_char = 0, start_byte, end_char = 0, end_byte;
register EMACS_INT b, e;
register struct buffer *bp;
SSDATA (digest));
if (NILP (binary))
- {
- unsigned char *p = SDATA (digest);
- for (i = digest_size - 1; i >= 0; i--)
- {
- static char const hexdigit[16] = "0123456789abcdef";
- int p_i = p[i];
- p[2 * i] = hexdigit[p_i >> 4];
- p[2 * i + 1] = hexdigit[p_i & 0xf];
- }
- return digest;
- }
+ return make_digest_string (digest, digest_size);
else
return make_unibyte_string (SSDATA (digest), digest_size);
}
{
return secure_hash (algorithm, object, start, end, Qnil, Qnil, binary);
}
+
+DEFUN ("buffer-hash", Fbuffer_hash, Sbuffer_hash, 0, 1, 0,
+ doc: /* Return a hash of the contents of BUFFER-OR-NAME.
+This hash is performed on the raw internal format of the buffer,
+disregarding any coding systems.
+If nil, use the current buffer." */ )
+ (Lisp_Object buffer_or_name)
+{
+ Lisp_Object buffer;
+ struct buffer *b;
+ struct sha1_ctx ctx;
+
+ if (NILP (buffer_or_name))
+ buffer = Fcurrent_buffer ();
+ else
+ buffer = Fget_buffer (buffer_or_name);
+ if (NILP (buffer))
+ nsberror (buffer_or_name);
+
+ b = XBUFFER (buffer);
+ sha1_init_ctx (&ctx);
+
+ /* Process the first part of the buffer. */
+ sha1_process_bytes (BUF_BEG_ADDR (b),
+ BUF_GPT_BYTE (b) - BUF_BEG_BYTE (b),
+ &ctx);
+
+ /* If the gap is before the end of the buffer, process the last half
+ of the buffer. */
+ if (BUF_GPT_BYTE (b) < BUF_Z_BYTE (b))
+ sha1_process_bytes (BUF_GAP_END_ADDR (b),
+ BUF_Z_ADDR (b) - BUF_GAP_END_ADDR (b),
+ &ctx);
+
+ Lisp_Object digest = make_uninit_string (SHA1_DIGEST_SIZE * 2);
+ sha1_finish_ctx (&ctx, SSDATA (digest));
+ return make_digest_string (digest, SHA1_DIGEST_SIZE);
+}
+
\f
void
syms_of_fns (void)
DEFSYM (Qkey_or_value, "key-or-value");
DEFSYM (Qkey_and_value, "key-and-value");
- defsubr (&Ssxhash);
+ defsubr (&Ssxhash_eq);
+ defsubr (&Ssxhash_eql);
+ defsubr (&Ssxhash_equal);
defsubr (&Smake_hash_table);
defsubr (&Scopy_hash_table);
defsubr (&Shash_table_count);
defsubr (&Sstring_equal);
defsubr (&Scompare_strings);
defsubr (&Sstring_lessp);
+ defsubr (&Sstring_version_lessp);
defsubr (&Sstring_collate_lessp);
defsubr (&Sstring_collate_equalp);
defsubr (&Sappend);
defsubr (&Sbase64_decode_string);
defsubr (&Smd5);
defsubr (&Ssecure_hash);
+ defsubr (&Sbuffer_hash);
defsubr (&Slocale_info);
-
- hashtest_eq.name = Qeq;
- hashtest_eq.user_hash_function = Qnil;
- hashtest_eq.user_cmp_function = Qnil;
- hashtest_eq.cmpfn = 0;
- hashtest_eq.hashfn = hashfn_eq;
-
- hashtest_eql.name = Qeql;
- hashtest_eql.user_hash_function = Qnil;
- hashtest_eql.user_cmp_function = Qnil;
- hashtest_eql.cmpfn = cmpfn_eql;
- hashtest_eql.hashfn = hashfn_eql;
-
- hashtest_equal.name = Qequal;
- hashtest_equal.user_hash_function = Qnil;
- hashtest_equal.user_cmp_function = Qnil;
- hashtest_equal.cmpfn = cmpfn_equal;
- hashtest_equal.hashfn = hashfn_equal;
}
p1 = strchr (p0, '-');
if (! p1)
{
- AUTO_STRING (extra, (&"*-*"[len && p0[len - 1] == '*']));
+ bool asterisk = len && p0[len - 1] == '*';
+ AUTO_STRING_WITH_LEN (extra, &"*-*"[asterisk], 3 - asterisk);
registry = concat2 (registry, extra);
}
registry = Fdowncase (registry);
An element of a base fontset is a vector of FONT-DEFs which themselves
are vectors of the form [ FONT-SPEC ENCODING REPERTORY ].
- An element of a realized fontset is nil, t, 0, or a vector of this
- form:
+ An element of a realized fontset is nil, t, 0, or a cons that has
+ this from:
- [ PREFERRED-RFONT-DEF RFONT-DEF0 RFONT-DEF1 ... ]
+ (CHARSET-ORDERED-LIST-TICK . FONT-GROUP)
+
+ CHARSET_ORDERED_LIST_TICK is the same as charset_ordered_list_tick or -1.
+
+ FONT-GROUP is a vector of elements that have this form:
+
+ [ RFONT-DEF0 RFONT-DEF1 ... ]
Each RFONT-DEFn (i.e. Realized FONT-DEF) has this form:
[ FACE-ID FONT-DEF FONT-OBJECT SORTING-SCORE ]
- RFONT-DEFn are automatically reordered by the current charset
- priority list.
+ RFONT-DEFn are automatically reordered considering the current
+ charset priority list, the current language environment, and
+ priorities determined by font-backends.
+
+ RFONT-DEFn may not be a vector in the following cases.
The value nil means that we have not yet generated the above vector
from the base of the fontset.
The value 0 means that no font is available for the corresponding
range of characters in this fontset, but may be available in the
- default fontset.
+ fallback font-group or in the default fontset.
A fontset has 8 extra slots.
if (! NILP (encoding))
{
+ /* This spec specifies an encoding by a charset set
+ name. Reflect the preference order of that charset
+ in the upper bits of SCORE. */
Lisp_Object tail;
for (tail = Vcharset_ordered_list;
}
else
{
+ /* This spec does not specify an encoding. If the spec
+ specifies a language, and the language is not for the
+ current language environment, make the score
+ larger. */
Lisp_Object lang = Ffont_get (font_spec, QClang);
if (! NILP (lang)
XSETCAR (font_group, make_number (low_tick_bits));
}
-/* Return a font-group (actually a cons (-1 . FONT-GROUP-VECTOR)) for
- character C in FONTSET. If C is -1, return a fallback font-group.
- If C is not -1, the value may be Qt (FONTSET doesn't have a font
- for C even in the fallback group), or 0 (a font for C may be found
- only in the fallback group). */
+/* Return a font-group (actually a cons (CHARSET_ORDERED_LIST_TICK
+ . FONT-GROUP)) for character C or a fallback font-group in the
+ realized fontset FONTSET. The elements of FONT-GROUP are
+ RFONT-DEFs. The value may not be a cons. See the comment at the
+ head of this file for the detail of the return value. */
static Lisp_Object
fontset_get_font_group (Lisp_Object fontset, int c)
else
font_group = FONTSET_FALLBACK (fontset);
if (! NILP (font_group))
+ /* We have already realized FONT-DEFs of this font group for C or
+ for fallback (FONT_GROUP is a cons), or we have already found
+ that no appropriate font was found (FONT_GROUP is t or 0). */
return font_group;
base_fontset = FONTSET_BASE (fontset);
if (NILP (base_fontset))
+ /* Actually we never come here because FONTSET is a realized one,
+ and thus it should have a base. */
font_group = Qnil;
else if (c >= 0)
font_group = char_table_ref_and_range (base_fontset, c, &from, &to);
else
font_group = FONTSET_FALLBACK (base_fontset);
+
+ /* FONT_GROUP not being a vector means that no fonts are specified
+ for C, or the fontset does not have fallback fonts. */
if (NILP (font_group))
{
font_group = make_number (0);
if (c >= 0)
+ /* Record that FONTSET does not specify fonts for C. As
+ there's a possibility that a font is found in a fallback
+ font group, we set 0 at the moment. */
char_table_set_range (fontset, from, to, font_group);
return font_group;
}
if (!VECTORP (font_group))
return font_group;
+
+ /* Now realize FONT-DEFs of this font group, and update the realized
+ fontset FONTSET. */
font_group = Fcopy_sequence (font_group);
for (i = 0; i < ASIZE (font_group); i++)
if (! NILP (AREF (font_group, i)))
}
/* Return RFONT-DEF (vector) in the realized fontset FONTSET for the
- character C. If no font is found, return Qnil if there's a
+ character C. If no font is found, return Qnil or 0 if there's a
possibility that the default fontset or the fallback font groups
have a proper font, and return Qt if not.
If a font is found but is not yet opened, open it (if FACE is not
NULL) or return Qnil (if FACE is NULL).
- ID is a charset-id that must be preferred, or -1 meaning no
+ CHARSET_ID is a charset-id that must be preferred, or -1 meaning no
preference.
If FALLBACK, search only fallback fonts. */
static Lisp_Object
-fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id,
- bool fallback)
+fontset_find_font (Lisp_Object fontset, int c, struct face *face,
+ int charset_id, bool fallback)
{
Lisp_Object vec, font_group;
int i, charset_matched = 0, found_index;
/* We have just created the font-group,
or the charset priorities were changed. */
reorder_font_vector (font_group, face->ascii_face->font);
- if (id >= 0)
- /* Find a spec matching with the charset ID to try at
+ if (charset_id >= 0)
+ /* Find a spec matching with CHARSET_ID to try it at
first. */
for (i = 0; i < ASIZE (vec); i++)
{
break;
repertory = FONT_DEF_REPERTORY (RFONT_DEF_FONT_DEF (rfont_def));
- if (XINT (repertory) == id)
+ if (XINT (repertory) == charset_id)
{
charset_matched = i;
break;
}
}
- /* Find the first available font in the vector of RFONT-DEF. */
+ /* Find the first available font in the vector of RFONT-DEF. If
+ CHARSET_MATCHED > 0, try the corresponding RFONT-DEF first, then
+ try the rest. */
for (i = 0; i < ASIZE (vec); i++)
{
Lisp_Object font_def;
{
if (charset_matched > 0)
{
- /* Try the element matching with the charset ID at first. */
+ /* Try the element matching with CHARSET_ID at first. */
found_index = charset_matched;
/* Make this negative so that we don't come here in the
next loop. */
charset_matched = - charset_matched;
/* We must try the first element in the next loop. */
- i--;
+ i = -1;
}
}
else if (i == - charset_matched)
if (NILP (font_object))
{
/* Something strange happened, perhaps because of a
- Font-backend problem. Too avoid crashing, record
+ Font-backend problem. To avoid crashing, record
that this spec is unusable. It may be better to find
another font of the same spec, but currently we don't
- have such an API. */
+ have such an API in font-backend. */
RFONT_DEF_SET_FACE (rfont_def, -1);
continue;
}
i = found_index;
}
+ /* Record that no font in this font group supports C. */
FONTSET_SET (fontset, make_number (c), make_number (0));
return Qnil;
}
+/* Return RFONT-DEF (vector) corresponding to the font for character
+ C. The value is not a vector if no font is found for C. */
+
static Lisp_Object
fontset_font (Lisp_Object fontset, int c, struct face *face, int id)
{
#endif
}
else if (new_cols != old_cols)
- call2 (Qwindow_pixel_to_total, frame, Qt);
+ call2 (Qwindow__pixel_to_total, frame, Qt);
if (new_windows_height != old_windows_height
/* When the top margin has changed we have to recalculate the top
FrameRows (FRAME_TTY (f)) = new_lines + FRAME_TOP_MARGIN (f);
}
else if (new_lines != old_lines)
- call2 (Qwindow_pixel_to_total, frame, Qnil);
+ call2 (Qwindow__pixel_to_total, frame, Qnil);
frame_size_history_add
(f, Qadjust_frame_size_3, new_text_width, new_text_height,
|| new_pixel_height != old_pixel_height);
unblock_input ();
-
- run_window_configuration_change_hook (f);
}
/* Allocate basically initialized frame. */
x_new_font (f, font_object, fontset);
store_frame_param (f, Qfont, arg);
#ifdef HAVE_X_WINDOWS
- store_frame_param (f, Qfont_param, font_param);
+ store_frame_param (f, Qfont_parameter, font_param);
#endif
/* Recalculate toolbar height. */
f->n_tool_bar_rows = 0;
DEFSYM (Qframep, "framep");
DEFSYM (Qframe_live_p, "frame-live-p");
DEFSYM (Qframe_windows_min_size, "frame-windows-min-size");
- DEFSYM (Qwindow_pixel_to_total, "window--pixel-to-total");
+ DEFSYM (Qwindow__pixel_to_total, "window--pixel-to-total");
DEFSYM (Qexplicit_name, "explicit-name");
DEFSYM (Qheight, "height");
DEFSYM (Qicon, "icon");
in a more readable form. */);
frame_size_history = Qnil;
+ DEFVAR_BOOL ("tooltip-reuse-hidden-frame", tooltip_reuse_hidden_frame,
+ doc: /* Non-nil means reuse hidden tooltip frames.
+When this is nil, delete a tooltip frame when hiding the associated
+tooltip. When this is non-nil, make the tooltip frame invisible only,
+so it can be reused when the next tooltip is shown.
+
+Setting this to non-nil may drastically reduce the consing overhead
+incurred by creating new tooltip frames. However, a value of non-nil
+means also that intermittent changes of faces or `default-frame-alist'
+are not applied when showing a tooltip in a reused frame.
+
+This variable is effective only with the X toolkit (and there only when
+Gtk+ tooltips are not used) and on Windows. */);
+ tooltip_reuse_hidden_frame = false;
+
staticpro (&Vframe_list);
defsubr (&Sframep);
cleared. */
bool_bf explicit_name : 1;
- /* True if size of some window on this frame has changed. */
- bool_bf window_sizes_changed : 1;
+ /* True if configuration of windows on this frame has changed since
+ last call of run_window_size_change_functions. */
+ bool_bf window_configuration_changed : 1;
/* True if the mouse has moved on this display device
since the last time we checked. */
are frozen on frame F. */
#define FRAME_WINDOWS_FROZEN(f) (f)->frozen_window_starts
-/* True if a size change has been requested for frame F
- but not yet really put into effect. This can be true temporarily
- when an X event comes in at a bad time. */
-#define FRAME_WINDOW_SIZES_CHANGED(f) (f)->window_sizes_changed
+/* True if the frame's window configuration has changed since last call
+ of run_window_size_change_functions. */
+#define FRAME_WINDOW_CONFIGURATION_CHANGED(f) \
+ (f)->window_configuration_changed
/* The minibuffer window of frame F, if it has one; otherwise nil. */
#define FRAME_MINIBUF_WINDOW(f) f->minibuffer_window
char *str = SSDATA (SYMBOL_NAME (registry));
USE_SAFE_ALLOCA;
char *re = SAFE_ALLOCA (SBYTES (SYMBOL_NAME (registry)) * 2 + 1);
- Lisp_Object regexp;
int i, j;
for (i = j = 0; i < SBYTES (SYMBOL_NAME (registry)); i++, j++)
re[j] = '.';
}
re[j] = '\0';
- regexp = make_unibyte_string (re, j);
- SAFE_FREE ();
+ AUTO_STRING_WITH_LEN (regexp, re, j);
for (i = 0; fc_charset_table[i].name; i++)
if (fast_c_string_match_ignore_case
(regexp, fc_charset_table[i].name,
strlen (fc_charset_table[i].name)) >= 0)
break;
+ SAFE_FREE ();
if (! fc_charset_table[i].name)
return -1;
if (! fc_charset_table[i].fc_charset)
#define USE_PTHREAD
#endif
+#include <stddef.h>
#include <string.h>
#include <limits.h>
#include <stdint.h>
-
-#ifdef HYBRID_GET_CURRENT_DIR_NAME
-#undef get_current_dir_name
-#endif
-
#include <unistd.h>
#ifdef USE_PTHREAD
#endif
#ifdef emacs
-extern void emacs_abort (void);
+# include "lisp.h"
+#endif
+
+#ifdef HAVE_MALLOC_H
+# if 4 < __GNUC__ + (2 <= __GNUC_MINOR__)
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+# endif
+# include <malloc.h>
+#endif
+#ifndef __MALLOC_HOOK_VOLATILE
+# define __MALLOC_HOOK_VOLATILE volatile
+#endif
+#ifndef HAVE_MALLOC_H
+extern void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+extern void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void);
+extern void *(*__morecore) (ptrdiff_t);
#endif
/* If HYBRID_MALLOC is defined, then temacs will use malloc,
however, will use the system malloc, realloc.... In other source
files, malloc, realloc... are renamed hybrid_malloc,
hybrid_realloc... via macros in conf_post.h. hybrid_malloc and
- friends are wrapper functions defined later in this file.
- aligned_alloc is defined as a macro only in alloc.c.
-
- As of this writing (August 2014), Cygwin is the only platform on
- which HYBRID_MACRO is defined. Any other platform that wants to
- define it will have to define the macros DUMPED and
- ALLOCATED_BEFORE_DUMPING, defined below for Cygwin. */
+ friends are wrapper functions defined later in this file. */
#undef malloc
#undef realloc
#undef calloc
+#undef aligned_alloc
#undef free
#define malloc gmalloc
#define realloc grealloc
#define calloc gcalloc
#define aligned_alloc galigned_alloc
#define free gfree
+#define malloc_info gmalloc_info
-#ifdef CYGWIN
-extern void *bss_sbrk (ptrdiff_t size);
-extern int bss_sbrk_did_unexec;
-extern char bss_sbrk_buffer[];
-extern void *bss_sbrk_buffer_end;
-#define DUMPED bss_sbrk_did_unexec
-#define ALLOCATED_BEFORE_DUMPING(P) \
- ((P) < bss_sbrk_buffer_end && (P) >= (void *) bss_sbrk_buffer)
+#ifdef HYBRID_MALLOC
+# include "sheap.h"
+# define DUMPED bss_sbrk_did_unexec
+static bool
+ALLOCATED_BEFORE_DUMPING (char *p)
+{
+ return bss_sbrk_buffer <= p && p < bss_sbrk_buffer + STATIC_HEAP_SIZE;
+}
#endif
#ifdef __cplusplus
{
#endif
-#include <stddef.h>
-
+#ifdef HYBRID_MALLOC
+#define extern static
+#endif
/* Allocate SIZE bytes of memory. */
extern void *malloc (size_t size) ATTRIBUTE_MALLOC_SIZE ((1));
extern void *realloc (void *ptr, size_t size) ATTRIBUTE_ALLOC_SIZE ((2));
/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */
extern void *calloc (size_t nmemb, size_t size) ATTRIBUTE_MALLOC_SIZE ((1,2));
-/* Free a block allocated by `malloc', `realloc' or `calloc'. */
+/* Free a block. */
extern void free (void *ptr);
/* Allocate SIZE bytes allocated to ALIGNMENT bytes. */
-#ifdef MSDOS
extern void *aligned_alloc (size_t, size_t);
+#ifdef MSDOS
extern void *memalign (size_t, size_t);
extern int posix_memalign (void **, size_t, size_t);
#endif
-#ifdef USE_PTHREAD
-/* Set up mutexes and make malloc etc. thread-safe. */
-extern void malloc_enable_thread (void);
-#endif
-
-#ifdef emacs
-extern void emacs_abort (void);
-#endif
-
/* The allocator divides the heap into blocks of fixed size; large
requests receive one or more whole blocks, and small requests
receive a fragment of a block. Fragment sizes are powers of two,
#define UNLOCK_ALIGNED_BLOCKS()
#endif
-/* Given an address in the middle of a malloc'd object,
- return the address of the beginning of the object. */
-extern void *malloc_find_object_address (void *ptr);
-
-/* Underlying allocation function; successive calls should
- return contiguous pieces of memory. */
-extern void *(*__morecore) (ptrdiff_t size);
-
-/* Default value of `__morecore'. */
-extern void *__default_morecore (ptrdiff_t size);
-
-/* If not NULL, this function is called after each time
- `__morecore' is called to increase the data size. */
-extern void (*__after_morecore_hook) (void);
-
-/* Number of extra blocks to get each time we ask for more core.
- This reduces the frequency of calling `(*__morecore)'. */
-extern size_t __malloc_extra_blocks;
-
/* Nonzero if `malloc' has been called and done its initialization. */
extern int __malloc_initialized;
/* Function called to initialize malloc data structures. */
extern int __malloc_initialize (void);
-/* Hooks for debugging versions. */
-extern void (*__malloc_initialize_hook) (void);
-extern void (*__free_hook) (void *ptr);
-extern void *(*__malloc_hook) (size_t size);
-extern void *(*__realloc_hook) (void *ptr, size_t size);
-extern void *(*__memalign_hook) (size_t size, size_t alignment);
+#ifdef GC_MCHECK
/* Return values for `mprobe': these are the kinds of inconsistencies that
`mcheck' enables detection of. */
/* Pick up the current statistics. */
extern struct mstats mstats (void);
-/* Call WARNFUN with a warning message when memory usage is high. */
-extern void memory_warnings (void *start, void (*warnfun) (const char *));
+#endif
+
+#undef extern
#ifdef __cplusplus
}
#include <errno.h>
-void *(*__morecore) (ptrdiff_t size) = __default_morecore;
+/* Debugging hook for 'malloc'. */
+static void *(*__MALLOC_HOOK_VOLATILE gmalloc_hook) (size_t);
-/* Debugging hook for `malloc'. */
-void *(*__malloc_hook) (size_t size);
+/* Replacements for traditional glibc malloc hooks, for platforms that
+ do not already have these hooks. Platforms with these hooks all
+ used relaxed ref/def, so it is OK to define them here too. */
+void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void);
+void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+void *(*__morecore) (ptrdiff_t);
+
+#ifndef HYBRID_MALLOC
/* Pointer to the base of the first block. */
char *_heapbase;
/* Block information table. Allocated with align/__free (not malloc/free). */
malloc_info *_heapinfo;
-/* Number of info entries. */
-static size_t heapsize;
-
/* Search index in the info table. */
size_t _heapindex;
/* Are you experienced? */
int __malloc_initialized;
+#else
+
+static struct list _fraghead[BLOCKLOG];
+
+#endif /* HYBRID_MALLOC */
+
+/* Number of extra blocks to get each time we ask for more core.
+ This reduces the frequency of calling `(*__morecore)'. */
+#if defined DOUG_LEA_MALLOC || defined HYBRID_MALLOC || defined SYSTEM_MALLOC
+static
+#endif
size_t __malloc_extra_blocks;
-void (*__malloc_initialize_hook) (void);
-void (*__after_morecore_hook) (void);
+/* Number of info entries. */
+static size_t heapsize;
#if defined GC_MALLOC_CHECK && defined GC_PROTECT_MALLOC_STATE
if (!__malloc_initialized && !__malloc_initialize ())
return NULL;
- /* Copy the value of __malloc_hook to an automatic variable in case
- __malloc_hook is modified in another thread between its
+ /* Copy the value of gmalloc_hook to an automatic variable in case
+ gmalloc_hook is modified in another thread between its
NULL-check and the use.
Note: Strictly speaking, this is not a right solution. We should
use mutexes to access non-read-only variables that are shared
among multiple threads. We just leave it for compatibility with
- glibc malloc (i.e., assignments to __malloc_hook) for now. */
- hook = __malloc_hook;
+ glibc malloc (i.e., assignments to gmalloc_hook) for now. */
+ hook = gmalloc_hook;
return (hook != NULL ? *hook : _malloc_internal) (size);
}
\f
-#ifndef _LIBC
+#if !(defined (_LIBC) || defined (HYBRID_MALLOC))
/* On some ANSI C systems, some libc functions call _malloc, _free
and _realloc. Make them use the GNU functions. */
The author may be reached (Email) at the address mike@ai.mit.edu,
or (US mail) as Mike Haertel c/o Free Software Foundation. */
-
/* Debugging hook for free. */
-void (*__free_hook) (void *__ptr);
+static void (*__MALLOC_HOOK_VOLATILE gfree_hook) (void *);
+
+#ifndef HYBRID_MALLOC
/* List of blocks allocated by aligned_alloc. */
struct alignlist *_aligned_blocks = NULL;
+#endif
/* Return memory to the heap.
Like `_free_internal' but don't lock mutex. */
}
/* Return memory to the heap.
- Like `free' but don't call a __free_hook if there is one. */
+ Like 'free' but don't call a hook if there is one. */
void
_free_internal (void *ptr)
{
void
free (void *ptr)
{
- void (*hook) (void *) = __free_hook;
+ void (*hook) (void *) = gfree_hook;
if (hook != NULL)
(*hook) (ptr);
_free_internal (ptr);
}
+#ifndef HYBRID_MALLOC
/* Define the `cfree' alias for `free'. */
#ifdef weak_alias
weak_alias (free, cfree)
free (ptr);
}
#endif
+#endif
/* Change the size of a block allocated by `malloc'.
Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
Written May 1989 by Mike Haertel.
#endif
/* Debugging hook for realloc. */
-void *(*__realloc_hook) (void *ptr, size_t size);
+static void *(*grealloc_hook) (void *, size_t);
/* Resize the given region to the new size, returning a pointer
to the (possibly moved) region. This is optimized for speed;
if (!__malloc_initialized && !__malloc_initialize ())
return NULL;
- hook = __realloc_hook;
+ hook = grealloc_hook;
return (hook != NULL ? *hook : _realloc_internal) (ptr, size);
}
/* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
/* Allocate INCREMENT more bytes of data space,
and return the start of data space, or NULL on errors.
If INCREMENT is negative, shrink data space. */
-void *
-__default_morecore (ptrdiff_t increment)
+static void *
+gdefault_morecore (ptrdiff_t increment)
{
void *result;
-#if defined (CYGWIN)
+#ifdef HYBRID_MALLOC
if (!DUMPED)
{
return bss_sbrk (increment);
return NULL;
return result;
}
+
+void *(*__morecore) (ptrdiff_t) = gdefault_morecore;
+
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
You should have received a copy of the GNU General Public
License along with this library. If not, see <http://www.gnu.org/licenses/>. */
-void *(*__memalign_hook) (size_t size, size_t alignment);
-
void *
aligned_alloc (size_t alignment, size_t size)
{
void *result;
size_t adj, lastadj;
- void *(*hook) (size_t, size_t) = __memalign_hook;
-
- if (hook)
- return (*hook) (alignment, size);
/* Allocate a block with enough extra space to pad the block with up to
(ALIGNMENT - 1) bytes if necessary. */
return result;
}
+/* Note that memalign and posix_memalign are not used in Emacs. */
+#ifndef HYBRID_MALLOC
/* An obsolete alias for aligned_alloc, for any old libraries that use
this alias. */
/* If HYBRID_MALLOC is defined, we may want to use the system
posix_memalign below. */
-#ifndef HYBRID_MALLOC
int
posix_memalign (void **memptr, size_t alignment, size_t size)
{
The author may be reached (Email) at the address mike@ai.mit.edu,
or (US mail) as Mike Haertel c/o Free Software Foundation. */
+#ifndef HYBRID_MALLOC
+
+# ifndef HAVE_MALLOC_H
/* Allocate SIZE bytes on a page boundary. */
extern void *valloc (size_t);
+# endif
-#if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE
-# include "getpagesize.h"
-#elif !defined getpagesize
+# if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE
+# include "getpagesize.h"
+# elif !defined getpagesize
extern int getpagesize (void);
-#endif
+# endif
static size_t pagesize;
return aligned_alloc (pagesize, size);
}
+#endif /* HYBRID_MALLOC */
#undef malloc
#undef realloc
#endif
}
#endif
-
+
void *
hybrid_realloc (void *ptr, size_t size)
{
return result;
}
-#ifdef HYBRID_GET_CURRENT_DIR_NAME
-/* Defined in sysdep.c. */
-char *gget_current_dir_name (void);
-
-char *
-hybrid_get_current_dir_name (void)
-{
- if (DUMPED)
- return get_current_dir_name ();
- return gget_current_dir_name ();
-}
-#endif
-
#else /* ! HYBRID_MALLOC */
void *
else
hdr = NULL;
- __free_hook = old_free_hook;
+ gfree_hook = old_free_hook;
free (hdr);
- __free_hook = freehook;
+ gfree_hook = freehook;
}
static void *
{
struct hdr *hdr;
- __malloc_hook = old_malloc_hook;
+ gmalloc_hook = old_malloc_hook;
hdr = malloc (sizeof *hdr + size + 1);
- __malloc_hook = mallochook;
+ gmalloc_hook = mallochook;
if (hdr == NULL)
return NULL;
memset ((char *) ptr + size, FREEFLOOD, osize - size);
}
- __free_hook = old_free_hook;
- __malloc_hook = old_malloc_hook;
- __realloc_hook = old_realloc_hook;
+ gfree_hook = old_free_hook;
+ gmalloc_hook = old_malloc_hook;
+ grealloc_hook = old_realloc_hook;
hdr = realloc (hdr, sizeof *hdr + size + 1);
- __free_hook = freehook;
- __malloc_hook = mallochook;
- __realloc_hook = reallochook;
+ gfree_hook = freehook;
+ gmalloc_hook = mallochook;
+ grealloc_hook = reallochook;
if (hdr == NULL)
return NULL;
/* These hooks may not be safely inserted if malloc is already in use. */
if (!__malloc_initialized && !mcheck_used)
{
- old_free_hook = __free_hook;
- __free_hook = freehook;
- old_malloc_hook = __malloc_hook;
- __malloc_hook = mallochook;
- old_realloc_hook = __realloc_hook;
- __realloc_hook = reallochook;
+ old_free_hook = gfree_hook;
+ gfree_hook = freehook;
+ old_malloc_hook = gmalloc_hook;
+ gmalloc_hook = mallochook;
+ old_realloc_hook = grealloc_hook;
+ grealloc_hook = reallochook;
mcheck_used = 1;
}
HMODULE library;
int max_log_level = 1;
- if (!(library = w32_delayed_load (Qgnutls_dll)))
+ if (!(library = w32_delayed_load (Qgnutls)))
{
GNUTLS_LOG (1, max_log_level, "GnuTLS library not found");
return 0;
max_log_level = global_gnutls_log_level;
{
- Lisp_Object name = CAR_SAFE (Fget (Qgnutls_dll, QCloaded_from));
+ Lisp_Object name = CAR_SAFE (Fget (Qgnutls, QCloaded_from));
GNUTLS_LOG2 (1, max_log_level, "GnuTLS library loaded:",
STRINGP (name) ? (const char *) SDATA (name) : "unknown");
}
message ("gnutls.c: [%d] %s %d", level, string, extra);
}
+int
+gnutls_try_handshake (struct Lisp_Process *proc)
+{
+ gnutls_session_t state = proc->gnutls_state;
+ int ret;
+ bool non_blocking = proc->is_non_blocking_client;
+
+ if (proc->gnutls_complete_negotiation_p)
+ non_blocking = false;
+
+ if (non_blocking)
+ proc->gnutls_p = true;
+
+ do
+ {
+ ret = gnutls_handshake (state);
+ emacs_gnutls_handle_error (state, ret);
+ QUIT;
+ }
+ while (ret < 0
+ && gnutls_error_is_fatal (ret) == 0
+ && ! non_blocking);
+
+ proc->gnutls_initstage = GNUTLS_STAGE_HANDSHAKE_TRIED;
+
+ if (ret == GNUTLS_E_SUCCESS)
+ {
+ /* Here we're finally done. */
+ proc->gnutls_initstage = GNUTLS_STAGE_READY;
+ }
+ else
+ {
+ /* check_memory_full (gnutls_alert_send_appropriate (state, ret)); */
+ }
+ return ret;
+}
+
static int
emacs_gnutls_handshake (struct Lisp_Process *proc)
{
gnutls_session_t state = proc->gnutls_state;
- int ret;
if (proc->gnutls_initstage < GNUTLS_STAGE_HANDSHAKE_CANDO)
return -1;
proc->gnutls_initstage = GNUTLS_STAGE_TRANSPORT_POINTERS_SET;
}
- do
- {
- ret = gnutls_handshake (state);
- emacs_gnutls_handle_error (state, ret);
- QUIT;
- }
- while (ret < 0 && gnutls_error_is_fatal (ret) == 0);
-
- proc->gnutls_initstage = GNUTLS_STAGE_HANDSHAKE_TRIED;
-
- if (ret == GNUTLS_E_SUCCESS)
- {
- /* Here we're finally done. */
- proc->gnutls_initstage = GNUTLS_STAGE_READY;
- }
- else
- {
- check_memory_full (gnutls_alert_send_appropriate (state, ret));
- }
- return ret;
+ return gnutls_try_handshake (proc);
}
ptrdiff_t
ssize_t rtnval;
gnutls_session_t state = proc->gnutls_state;
- int log_level = proc->gnutls_log_level;
-
if (proc->gnutls_initstage != GNUTLS_STAGE_READY)
{
- /* If the handshake count is under the limit, try the handshake
- again and increment the handshake count. This count is kept
- per process (connection), not globally. */
- if (proc->gnutls_handshakes_tried < GNUTLS_EMACS_HANDSHAKES_LIMIT)
- {
- proc->gnutls_handshakes_tried++;
- emacs_gnutls_handshake (proc);
- GNUTLS_LOG2i (5, log_level, "Retried handshake",
- proc->gnutls_handshakes_tried);
- return -1;
- }
-
- GNUTLS_LOG (2, log_level, "Giving up on handshake; resetting retries");
- proc->gnutls_handshakes_tried = 0;
- return 0;
+ errno = EAGAIN;
+ return -1;
}
+
rtnval = gnutls_record_recv (state, buf, nbyte);
if (rtnval >= 0)
return rtnval;
CHECK_PROCESS (proc);
- if (XPROCESS (proc)->gnutls_p == 0)
+ if (! XPROCESS (proc)->gnutls_p)
return Qnil;
log_level = XPROCESS (proc)->gnutls_log_level;
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT - 1;
}
- XPROCESS (proc)->gnutls_p = 0;
+ XPROCESS (proc)->gnutls_p = false;
return Qt;
}
+DEFUN ("gnutls-asynchronous-parameters", Fgnutls_asynchronous_parameters,
+ Sgnutls_asynchronous_parameters, 2, 2, 0,
+ doc: /* Mark this process as being a pre-init GnuTLS process.
+The second parameter is the list of parameters to feed to gnutls-boot
+to finish setting up the connection. */)
+ (Lisp_Object proc, Lisp_Object params)
+{
+ CHECK_PROCESS (proc);
+
+ XPROCESS (proc)->gnutls_boot_parameters = params;
+ return Qnil;
+}
+
DEFUN ("gnutls-get-initstage", Fgnutls_get_initstage, Sgnutls_get_initstage, 1, 1, 0,
doc: /* Return the GnuTLS init stage of process PROC.
See also `gnutls-boot'. */)
attributes: const)
(Lisp_Object err)
{
- if (EQ (err, Qt)) return Qnil;
+ if (EQ (err, Qt)
+ || EQ (err, Qgnutls_e_again))
+ return Qnil;
return Qt;
}
CHECK_PROCESS (proc);
- if (GNUTLS_INITSTAGE (proc) < GNUTLS_STAGE_INIT)
+ if (GNUTLS_INITSTAGE (proc) != GNUTLS_STAGE_READY)
return Qnil;
/* Then collect any warnings already computed by the handshake. */
}
#endif
+static void ATTRIBUTE_FORMAT_PRINTF (2, 3)
+boot_error (struct Lisp_Process *p, const char *m, ...)
+{
+ va_list ap;
+ va_start (ap, m);
+ if (p->is_non_blocking_client)
+ pset_status (p, list2 (Qfailed, vformat_string (m, ap)));
+ else
+ verror (m, ap);
+ va_end (ap);
+}
+
+Lisp_Object
+gnutls_verify_boot (Lisp_Object proc, Lisp_Object proplist)
+{
+ int ret;
+ struct Lisp_Process *p = XPROCESS (proc);
+ gnutls_session_t state = p->gnutls_state;
+ unsigned int peer_verification;
+ Lisp_Object warnings;
+ int max_log_level = p->gnutls_log_level;
+ Lisp_Object hostname, verify_error;
+ bool verify_error_all = false;
+ char *c_hostname;
+
+ if (NILP (proplist))
+ proplist = Fcdr (Fplist_get (p->childp, QCtls_parameters));
+
+ verify_error = Fplist_get (proplist, QCverify_error);
+ hostname = Fplist_get (proplist, QChostname);
+
+ if (EQ (verify_error, Qt))
+ verify_error_all = true;
+ else if (NILP (Flistp (verify_error)))
+ {
+ boot_error (p,
+ "gnutls-boot: invalid :verify_error parameter (not a list)");
+ return Qnil;
+ }
+
+ if (!STRINGP (hostname))
+ {
+ boot_error (p, "gnutls-boot: invalid :hostname parameter (not a string)");
+ return Qnil;
+ }
+ c_hostname = SSDATA (hostname);
+
+ /* Now verify the peer, following
+ http://www.gnu.org/software/gnutls/manual/html_node/Verifying-peer_0027s-certificate.html.
+ The peer should present at least one certificate in the chain; do a
+ check of the certificate's hostname with
+ gnutls_x509_crt_check_hostname against :hostname. */
+
+ ret = gnutls_certificate_verify_peers2 (state, &peer_verification);
+ if (ret < GNUTLS_E_SUCCESS)
+ return gnutls_make_error (ret);
+
+ XPROCESS (proc)->gnutls_peer_verification = peer_verification;
+
+ warnings = Fplist_get (Fgnutls_peer_status (proc), intern (":warnings"));
+ if (!NILP (warnings))
+ {
+ for (Lisp_Object tail = warnings; CONSP (tail); tail = XCDR (tail))
+ {
+ Lisp_Object warning = XCAR (tail);
+ Lisp_Object message = Fgnutls_peer_status_warning_describe (warning);
+ if (!NILP (message))
+ GNUTLS_LOG2 (1, max_log_level, "verification:", SSDATA (message));
+ }
+ }
+
+ if (peer_verification != 0)
+ {
+ if (verify_error_all
+ || !NILP (Fmember (QCtrustfiles, verify_error)))
+ {
+ emacs_gnutls_deinit (proc);
+ boot_error (p,
+ "Certificate validation failed %s, verification code %x",
+ c_hostname, peer_verification);
+ return Qnil;
+ }
+ else
+ {
+ GNUTLS_LOG2 (1, max_log_level, "certificate validation failed:",
+ c_hostname);
+ }
+ }
+
+ /* Up to here the process is the same for X.509 certificates and
+ OpenPGP keys. From now on X.509 certificates are assumed. This
+ can be easily extended to work with openpgp keys as well. */
+ if (gnutls_certificate_type_get (state) == GNUTLS_CRT_X509)
+ {
+ gnutls_x509_crt_t gnutls_verify_cert;
+ const gnutls_datum_t *gnutls_verify_cert_list;
+ unsigned int gnutls_verify_cert_list_size;
+
+ ret = gnutls_x509_crt_init (&gnutls_verify_cert);
+ if (ret < GNUTLS_E_SUCCESS)
+ return gnutls_make_error (ret);
+
+ gnutls_verify_cert_list
+ = gnutls_certificate_get_peers (state, &gnutls_verify_cert_list_size);
+
+ if (gnutls_verify_cert_list == NULL)
+ {
+ gnutls_x509_crt_deinit (gnutls_verify_cert);
+ emacs_gnutls_deinit (proc);
+ boot_error (p, "No x509 certificate was found\n");
+ return Qnil;
+ }
+
+ /* Check only the first certificate in the given chain. */
+ ret = gnutls_x509_crt_import (gnutls_verify_cert,
+ &gnutls_verify_cert_list[0],
+ GNUTLS_X509_FMT_DER);
+
+ if (ret < GNUTLS_E_SUCCESS)
+ {
+ gnutls_x509_crt_deinit (gnutls_verify_cert);
+ return gnutls_make_error (ret);
+ }
+
+ XPROCESS (proc)->gnutls_certificate = gnutls_verify_cert;
+
+ int err = gnutls_x509_crt_check_hostname (gnutls_verify_cert,
+ c_hostname);
+ check_memory_full (err);
+ if (!err)
+ {
+ XPROCESS (proc)->gnutls_extra_peer_verification
+ |= CERTIFICATE_NOT_MATCHING;
+ if (verify_error_all
+ || !NILP (Fmember (QChostname, verify_error)))
+ {
+ gnutls_x509_crt_deinit (gnutls_verify_cert);
+ emacs_gnutls_deinit (proc);
+ boot_error (p, "The x509 certificate does not match \"%s\"",
+ c_hostname);
+ return Qnil;
+ }
+ else
+ GNUTLS_LOG2 (1, max_log_level, "x509 certificate does not match:",
+ c_hostname);
+ }
+ }
+
+ /* Set this flag only if the whole initialization succeeded. */
+ XPROCESS (proc)->gnutls_p = true;
+
+ return gnutls_make_error (ret);
+}
+
DEFUN ("gnutls-boot", Fgnutls_boot, Sgnutls_boot, 3, 3, 0,
doc: /* Initialize GnuTLS client for process PROC with TYPE+PROPLIST.
Currently only client mode is supported. Return a success/failure
:min-prime-bits is the minimum accepted number of bits the client will
accept in Diffie-Hellman key exchange.
+:complete-negotiation, if non-nil, will make negotiation complete
+before returning even on non-blocking sockets.
+
The debug level will be set for this process AND globally for GnuTLS.
So if you set it higher or lower at any point, it affects global
debugging.
{
int ret = GNUTLS_E_SUCCESS;
int max_log_level = 0;
- bool verify_error_all = 0;
gnutls_session_t state;
gnutls_certificate_credentials_t x509_cred = NULL;
gnutls_anon_client_credentials_t anon_cred = NULL;
Lisp_Object global_init;
char const *priority_string_ptr = "NORMAL"; /* default priority string. */
- unsigned int peer_verification;
char *c_hostname;
/* Placeholders for the property list elements. */
/* Lisp_Object callbacks; */
Lisp_Object loglevel;
Lisp_Object hostname;
- Lisp_Object verify_error;
Lisp_Object prime_bits;
- Lisp_Object warnings;
+ struct Lisp_Process *p = XPROCESS (proc);
CHECK_PROCESS (proc);
CHECK_SYMBOL (type);
CHECK_LIST (proplist);
if (NILP (Fgnutls_available_p ()))
- error ("GnuTLS not available");
-
- if (!EQ (type, Qgnutls_x509pki) && !EQ (type, Qgnutls_anon))
- error ("Invalid GnuTLS credential type");
-
- hostname = Fplist_get (proplist, QCgnutls_bootprop_hostname);
- priority_string = Fplist_get (proplist, QCgnutls_bootprop_priority);
- trustfiles = Fplist_get (proplist, QCgnutls_bootprop_trustfiles);
- keylist = Fplist_get (proplist, QCgnutls_bootprop_keylist);
- crlfiles = Fplist_get (proplist, QCgnutls_bootprop_crlfiles);
- loglevel = Fplist_get (proplist, QCgnutls_bootprop_loglevel);
- verify_error = Fplist_get (proplist, QCgnutls_bootprop_verify_error);
- prime_bits = Fplist_get (proplist, QCgnutls_bootprop_min_prime_bits);
-
- if (EQ (verify_error, Qt))
{
- verify_error_all = 1;
+ boot_error (p, "GnuTLS not available");
+ return Qnil;
}
- else if (NILP (Flistp (verify_error)))
+
+ if (!EQ (type, Qgnutls_x509pki) && !EQ (type, Qgnutls_anon))
{
- error ("gnutls-boot: invalid :verify_error parameter (not a list)");
+ boot_error (p, "Invalid GnuTLS credential type");
+ return Qnil;
}
+ hostname = Fplist_get (proplist, QChostname);
+ priority_string = Fplist_get (proplist, QCpriority);
+ trustfiles = Fplist_get (proplist, QCtrustfiles);
+ keylist = Fplist_get (proplist, QCkeylist);
+ crlfiles = Fplist_get (proplist, QCcrlfiles);
+ loglevel = Fplist_get (proplist, QCloglevel);
+ prime_bits = Fplist_get (proplist, QCmin_prime_bits);
+
if (!STRINGP (hostname))
- error ("gnutls-boot: invalid :hostname parameter (not a string)");
+ {
+ boot_error (p, "gnutls-boot: invalid :hostname parameter (not a string)");
+ return Qnil;
+ }
c_hostname = SSDATA (hostname);
state = XPROCESS (proc)->gnutls_state;
check_memory_full (gnutls_certificate_allocate_credentials (&x509_cred));
XPROCESS (proc)->gnutls_x509_cred = x509_cred;
- verify_flags = Fplist_get (proplist, QCgnutls_bootprop_verify_flags);
+ verify_flags = Fplist_get (proplist, QCverify_flags);
if (NUMBERP (verify_flags))
{
gnutls_verify_flags = XINT (verify_flags);
else
{
emacs_gnutls_deinit (proc);
- error ("Invalid trustfile");
+ boot_error (p, "Invalid trustfile");
+ return Qnil;
}
}
else
{
emacs_gnutls_deinit (proc);
- error ("Invalid CRL file");
+ boot_error (p, "Invalid CRL file");
+ return Qnil;
}
}
else
{
emacs_gnutls_deinit (proc);
- error (STRINGP (keyfile) ? "Invalid client cert file"
- : "Invalid client key file");
+ boot_error (p, STRINGP (keyfile) ? "Invalid client cert file"
+ : "Invalid client key file");
+ return Qnil;
}
}
}
return gnutls_make_error (ret);
}
+ XPROCESS (proc)->gnutls_complete_negotiation_p =
+ !NILP (Fplist_get (proplist, QCcomplete_negotiation));
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_SET;
ret = emacs_gnutls_handshake (XPROCESS (proc));
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
- /* Now verify the peer, following
- http://www.gnu.org/software/gnutls/manual/html_node/Verifying-peer_0027s-certificate.html.
- The peer should present at least one certificate in the chain; do a
- check of the certificate's hostname with
- gnutls_x509_crt_check_hostname against :hostname. */
-
- ret = gnutls_certificate_verify_peers2 (state, &peer_verification);
- if (ret < GNUTLS_E_SUCCESS)
- return gnutls_make_error (ret);
-
- XPROCESS (proc)->gnutls_peer_verification = peer_verification;
-
- warnings = Fplist_get (Fgnutls_peer_status (proc), intern (":warnings"));
- if (!NILP (warnings))
- {
- Lisp_Object tail;
- for (tail = warnings; CONSP (tail); tail = XCDR (tail))
- {
- Lisp_Object warning = XCAR (tail);
- Lisp_Object message = Fgnutls_peer_status_warning_describe (warning);
- if (!NILP (message))
- GNUTLS_LOG2 (1, max_log_level, "verification:", SSDATA (message));
- }
- }
-
- if (peer_verification != 0)
- {
- if (verify_error_all
- || !NILP (Fmember (QCgnutls_bootprop_trustfiles, verify_error)))
- {
- emacs_gnutls_deinit (proc);
- error ("Certificate validation failed %s, verification code %x",
- c_hostname, peer_verification);
- }
- else
- {
- GNUTLS_LOG2 (1, max_log_level, "certificate validation failed:",
- c_hostname);
- }
- }
-
- /* Up to here the process is the same for X.509 certificates and
- OpenPGP keys. From now on X.509 certificates are assumed. This
- can be easily extended to work with openpgp keys as well. */
- if (gnutls_certificate_type_get (state) == GNUTLS_CRT_X509)
- {
- gnutls_x509_crt_t gnutls_verify_cert;
- const gnutls_datum_t *gnutls_verify_cert_list;
- unsigned int gnutls_verify_cert_list_size;
-
- ret = gnutls_x509_crt_init (&gnutls_verify_cert);
- if (ret < GNUTLS_E_SUCCESS)
- return gnutls_make_error (ret);
-
- gnutls_verify_cert_list =
- gnutls_certificate_get_peers (state, &gnutls_verify_cert_list_size);
-
- if (gnutls_verify_cert_list == NULL)
- {
- gnutls_x509_crt_deinit (gnutls_verify_cert);
- emacs_gnutls_deinit (proc);
- error ("No x509 certificate was found\n");
- }
-
- /* We only check the first certificate in the given chain. */
- ret = gnutls_x509_crt_import (gnutls_verify_cert,
- &gnutls_verify_cert_list[0],
- GNUTLS_X509_FMT_DER);
-
- if (ret < GNUTLS_E_SUCCESS)
- {
- gnutls_x509_crt_deinit (gnutls_verify_cert);
- return gnutls_make_error (ret);
- }
-
- XPROCESS (proc)->gnutls_certificate = gnutls_verify_cert;
-
- int err = gnutls_x509_crt_check_hostname (gnutls_verify_cert,
- c_hostname);
- check_memory_full (err);
- if (!err)
- {
- XPROCESS (proc)->gnutls_extra_peer_verification |=
- CERTIFICATE_NOT_MATCHING;
- if (verify_error_all
- || !NILP (Fmember (QCgnutls_bootprop_hostname, verify_error)))
- {
- gnutls_x509_crt_deinit (gnutls_verify_cert);
- emacs_gnutls_deinit (proc);
- error ("The x509 certificate does not match \"%s\"", c_hostname);
- }
- else
- {
- GNUTLS_LOG2 (1, max_log_level, "x509 certificate does not match:",
- c_hostname);
- }
- }
- }
-
- /* Set this flag only if the whole initialization succeeded. */
- XPROCESS (proc)->gnutls_p = 1;
-
- return gnutls_make_error (ret);
+ return gnutls_verify_boot (proc, proplist);
}
DEFUN ("gnutls-bye", Fgnutls_bye,
{
#ifdef HAVE_GNUTLS
# ifdef WINDOWSNT
- Lisp_Object found = Fassq (Qgnutls_dll, Vlibrary_cache);
+ Lisp_Object found = Fassq (Qgnutls, Vlibrary_cache);
if (CONSP (found))
return XCDR (found);
else
{
Lisp_Object status;
status = init_gnutls_functions () ? Qt : Qnil;
- Vlibrary_cache = Fcons (Fcons (Qgnutls_dll, status), Vlibrary_cache);
+ Vlibrary_cache = Fcons (Fcons (Qgnutls, status), Vlibrary_cache);
return status;
}
# else /* !WINDOWSNT */
DEFSYM (Qgnutls_x509pki, "gnutls-x509pki");
/* The following are for the property list of 'gnutls-boot'. */
- DEFSYM (QCgnutls_bootprop_hostname, ":hostname");
- DEFSYM (QCgnutls_bootprop_priority, ":priority");
- DEFSYM (QCgnutls_bootprop_trustfiles, ":trustfiles");
- DEFSYM (QCgnutls_bootprop_keylist, ":keylist");
- DEFSYM (QCgnutls_bootprop_crlfiles, ":crlfiles");
- DEFSYM (QCgnutls_bootprop_min_prime_bits, ":min-prime-bits");
- DEFSYM (QCgnutls_bootprop_loglevel, ":loglevel");
- DEFSYM (QCgnutls_bootprop_verify_flags, ":verify-flags");
- DEFSYM (QCgnutls_bootprop_verify_error, ":verify-error");
+ DEFSYM (QChostname, ":hostname");
+ DEFSYM (QCpriority, ":priority");
+ DEFSYM (QCtrustfiles, ":trustfiles");
+ DEFSYM (QCkeylist, ":keylist");
+ DEFSYM (QCcrlfiles, ":crlfiles");
+ DEFSYM (QCmin_prime_bits, ":min-prime-bits");
+ DEFSYM (QCloglevel, ":loglevel");
+ DEFSYM (QCcomplete_negotiation, ":complete-negotiation");
+ DEFSYM (QCverify_flags, ":verify-flags");
+ DEFSYM (QCverify_error, ":verify-error");
DEFSYM (Qgnutls_e_interrupted, "gnutls-e-interrupted");
Fput (Qgnutls_e_interrupted, Qgnutls_code,
make_number (GNUTLS_E_APPLICATION_ERROR_MIN));
defsubr (&Sgnutls_get_initstage);
+ defsubr (&Sgnutls_asynchronous_parameters);
defsubr (&Sgnutls_errorp);
defsubr (&Sgnutls_error_fatalp);
defsubr (&Sgnutls_error_string);
#include "lisp.h"
-/* This limits the attempts to handshake per process (connection). */
-#define GNUTLS_EMACS_HANDSHAKES_LIMIT 100
+/* This limits the attempts to handshake per process (connection). It
+ should work out to about one minute in asynchronous cases. */
+#define GNUTLS_EMACS_HANDSHAKES_LIMIT 6000
typedef enum
{
#endif
extern Lisp_Object emacs_gnutls_deinit (Lisp_Object);
extern Lisp_Object emacs_gnutls_global_init (void);
+extern int gnutls_try_handshake (struct Lisp_Process *p);
+extern Lisp_Object gnutls_verify_boot (Lisp_Object proc, Lisp_Object proplist);
#endif
happens, e.g., under Auto Image File Mode.) 'openp'
didn't open the file, so we should, because the caller
expects that. */
- fd = emacs_open (SSDATA (file_found), O_RDONLY | O_BINARY, 0);
+ fd = emacs_open (SSDATA (file_found), O_RDONLY, 0);
}
}
else /* fd < 0, but not -2 */
{
Lisp_Object value;
int desired_width, desired_height;
+ double scale = 1;
+
+ value = image_spec_value (spec, QCscale, NULL);
+ if (NUMBERP (value))
+ scale = extract_float (value);
/* If width and/or height is set in the display spec assume we want
to scale to those values. If either h or w is unspecified, the
unspecified should be calculated from the specified to preserve
aspect ratio. */
value = image_spec_value (spec, QCwidth, NULL);
- desired_width = NATNUMP (value) ? min (XFASTINT (value), INT_MAX) : -1;
+ desired_width = NATNUMP (value) ?
+ min (XFASTINT (value) * scale, INT_MAX) : -1;
value = image_spec_value (spec, QCheight, NULL);
- desired_height = NATNUMP (value) ? min (XFASTINT (value), INT_MAX) : -1;
+ desired_height = NATNUMP (value) ?
+ min (XFASTINT (value) * scale, INT_MAX) : -1;
+
+ width = width * scale;
+ height = height * scale;
if (desired_width == -1)
{
/* h known, calculate w. */
desired_width = scale_image_size (desired_height, height, width);
+ /* We have no width/height settings, so just apply the scale. */
+ if (desired_width == -1 && desired_height == -1)
+ {
+ desired_width = width;
+ desired_height = height;
+ }
+
*d_width = desired_width;
*d_height = desired_height;
}
return 0;
}
+#ifdef HAVE_MAGICKAUTOORIENTIMAGE
+ /* If no :rotation is explicitly specified, apply the automatic
+ rotation from EXIF. */
+ if (NILP (image_spec_value (img->spec, QCrotation, NULL)))
+ if (MagickAutoOrientImage (image_wand) == MagickFalse)
+ {
+ image_error ("Error applying automatic orientation in image `%s'", img->spec);
+ DestroyMagickWand (image_wand);
+ return 0;
+ }
+#endif
+
if (ino < 0 || ino >= MagickGetNumberImages (image_wand))
{
image_error ("Invalid image number `%s' in image `%s'", image, img->spec);
eassert (gdk_pixbuf_get_has_alpha (pixbuf));
eassert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
-#ifdef USE_CAIRO
{
+#ifdef USE_CAIRO
unsigned char *data = (unsigned char *) xmalloc (width*height*4);
uint32_t bgcolor = get_spec_bg_or_alpha_as_argb (img, f);
create_cairo_image_surface (img, data, width, height);
g_object_unref (pixbuf);
- }
#else
- /* Try to create a x pixmap to hold the svg pixmap. */
- XImagePtr ximg;
- if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
- {
- g_object_unref (pixbuf);
- return 0;
- }
+ /* Try to create a x pixmap to hold the svg pixmap. */
+ XImagePtr ximg;
+ if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
+ {
+ g_object_unref (pixbuf);
+ return 0;
+ }
- init_color_table ();
+ init_color_table ();
- /* Handle alpha channel by combining the image with a background
- color. */
- XColor background;
- Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, NULL);
- if (!STRINGP (specified_bg)
- || !x_defined_color (f, SSDATA (specified_bg), &background, 0))
- x_query_frame_background_color (f, &background);
-
- /* SVG pixmaps specify transparency in the last byte, so right
- shift 8 bits to get rid of it, since emacs doesn't support
- transparency. */
- background.red >>= 8;
- background.green >>= 8;
- background.blue >>= 8;
-
- /* This loop handles opacity values, since Emacs assumes
- non-transparent images. Each pixel must be "flattened" by
- calculating the resulting color, given the transparency of the
- pixel, and the image background color. */
- for (int y = 0; y < height; ++y)
- {
- for (int x = 0; x < width; ++x)
- {
- int red;
- int green;
- int blue;
- int opacity;
-
- red = *pixels++;
- green = *pixels++;
- blue = *pixels++;
- opacity = *pixels++;
-
- red = ((red * opacity)
- + (background.red * ((1 << 8) - opacity)));
- green = ((green * opacity)
- + (background.green * ((1 << 8) - opacity)));
- blue = ((blue * opacity)
- + (background.blue * ((1 << 8) - opacity)));
-
- XPutPixel (ximg, x, y, lookup_rgb_color (f, red, green, blue));
- }
+ /* Handle alpha channel by combining the image with a background
+ color. */
+ XColor background;
+ Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, NULL);
+ if (!STRINGP (specified_bg)
+ || !x_defined_color (f, SSDATA (specified_bg), &background, 0))
+ x_query_frame_background_color (f, &background);
+
+ /* SVG pixmaps specify transparency in the last byte, so right
+ shift 8 bits to get rid of it, since emacs doesn't support
+ transparency. */
+ background.red >>= 8;
+ background.green >>= 8;
+ background.blue >>= 8;
+
+ /* This loop handles opacity values, since Emacs assumes
+ non-transparent images. Each pixel must be "flattened" by
+ calculating the resulting color, given the transparency of the
+ pixel, and the image background color. */
+ for (int y = 0; y < height; ++y)
+ {
+ for (int x = 0; x < width; ++x)
+ {
+ int red = *pixels++;
+ int green = *pixels++;
+ int blue = *pixels++;
+ int opacity = *pixels++;
+
+ red = ((red * opacity)
+ + (background.red * ((1 << 8) - opacity)));
+ green = ((green * opacity)
+ + (background.green * ((1 << 8) - opacity)));
+ blue = ((blue * opacity)
+ + (background.blue * ((1 << 8) - opacity)));
+
+ XPutPixel (ximg, x, y, lookup_rgb_color (f, red, green, blue));
+ }
- pixels += rowstride - 4 * width;
- }
+ pixels += rowstride - 4 * width;
+ }
#ifdef COLOR_TABLE_SUPPORT
- /* Remember colors allocated for this image. */
- img->colors = colors_in_color_table (&img->ncolors);
- free_color_table ();
+ /* Remember colors allocated for this image. */
+ img->colors = colors_in_color_table (&img->ncolors);
+ free_color_table ();
#endif /* COLOR_TABLE_SUPPORT */
- g_object_unref (pixbuf);
+ g_object_unref (pixbuf);
- img->width = width;
- img->height = height;
+ img->width = width;
+ img->height = height;
- /* Maybe fill in the background field while we have ximg handy.
- Casting avoids a GCC warning. */
- IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg);
+ /* Maybe fill in the background field while we have ximg handy.
+ Casting avoids a GCC warning. */
+ IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg);
- /* Put ximg into the image. */
- image_put_x_image (f, img, ximg, 0);
+ /* Put ximg into the image. */
+ image_put_x_image (f, img, ximg, 0);
#endif /* ! USE_CAIRO */
+ }
return 1;
DEFSYM (QCcrop, ":crop");
DEFSYM (QCrotation, ":rotation");
DEFSYM (QCmatrix, ":matrix");
+ DEFSYM (QCscale, ":scale");
DEFSYM (QCcolor_adjustment, ":color-adjustment");
DEFSYM (QCmask, ":mask");
last_input_event = c;
call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt);
- if (CONSP (c) && EQ (XCAR (c), Qselect_window) && !end_time)
+ if (CONSP (c)
+ && (EQ (XCAR (c), Qselect_window)
+#ifdef HAVE_DBUS
+ || EQ (XCAR (c), Qdbus_event)
+#endif
+#ifdef USE_FILE_NOTIFY
+ || EQ (XCAR (c), Qfile_notify)
+#endif
+ || EQ (XCAR (c), Qconfig_changed_event))
+ && !end_time)
/* We stopped being idle for this event; undo that. This
prevents automatic window selection (under
mouse-autoselect-window) from acting as a real input event, for
}
#endif
-
#if defined HAVE_INOTIFY || defined HAVE_KQUEUE || defined HAVE_GFILENOTIFY
case FILE_NOTIFY_EVENT:
{
is used. Note that [Enter] is not echoed by dos. */
cursor_to (SELECTED_FRAME (), 0, 0);
#endif
+
+ write_stdout ("Emacs is resuming after an emergency escape.\n");
+
/* It doesn't work to autosave while GC is in progress;
the code used for auto-saving doesn't cope with the mark bit. */
if (!gc_in_progress)
variable are `sigusr1' and `sigusr2'. */);
Vdebug_on_event = intern_c_string ("sigusr2");
+ DEFVAR_BOOL ("attempt-stack-overflow-recovery",
+ attempt_stack_overflow_recovery,
+ doc: /* If non-nil, attempt to recover from C stack
+overflow. This recovery is unsafe and may lead to deadlocks or data
+corruption, but it usually works and may preserve modified buffers
+that would otherwise be lost. If nil, treat stack overflow like any
+other kind of crash. */);
+ attempt_stack_overflow_recovery = true;
+
+ DEFVAR_BOOL ("attempt-orderly-shutdown-on-fatal-signal",
+ attempt_orderly_shutdown_on_fatal_signal,
+ doc: /* If non-nil, attempt to perform an orderly
+shutdown when Emacs receives a fatal signal (e.g., a crash).
+This cleanup is unsafe and may lead to deadlocks or data corruption,
+but it usually works and may preserve modified buffers that would
+otherwise be lost. If nil, crash immediately in response to fatal
+signals. */);
+ attempt_orderly_shutdown_on_fatal_signal = true;
+
/* Create the initial keyboard. Qt means 'unset'. */
initial_kboard = allocate_kboard (Qt);
}
*p = 0;
c = reorder_modifiers (c);
- AUTO_STRING (new_mods_string, new_mods);
+ AUTO_STRING_WITH_LEN (new_mods_string, new_mods, p - new_mods);
keystring = concat2 (new_mods_string, XCDR (assoc));
error ("To bind the key %s, use [?%s], not [%s]",
#include "keyboard.h"
#include "process.h"
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif /* HAVE_SYS_RESOURCE_H */
+
\f
/* File handle for kqueue. */
static int kqueuefd = -1;
(Lisp_Object file, Lisp_Object flags, Lisp_Object callback)
{
Lisp_Object watch_object, dir_list;
- int fd, oflags;
+ int maxfd, fd, oflags;
u_short fflags = 0;
struct kevent kev;
+#ifdef HAVE_GETRLIMIT
+ struct rlimit rlim;
+#endif /* HAVE_GETRLIMIT */
/* Check parameters. */
CHECK_STRING (file);
if (! FUNCTIONP (callback))
wrong_type_argument (Qinvalid_function, callback);
+ /* Check available file descriptors. */
+#ifdef HAVE_GETRLIMIT
+ if (! getrlimit (RLIMIT_NOFILE, &rlim))
+ maxfd = rlim.rlim_cur;
+ else
+#endif /* HAVE_GETRLIMIT */
+ maxfd = 256;
+
+ /* We assume 50 file descriptors are sufficient for the rest of Emacs. */
+ if ((maxfd - 50) < XINT (Flength (watch_list)))
+ xsignal2
+ (Qfile_notify_error,
+ build_string ("File watching not possible, no file descriptor left"),
+ Flength (watch_list));
+
if (kqueuefd < 0)
{
/* Create kqueue descriptor. */
#include "lisp.h"
+#if ((!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC) \
+ || defined WINDOWSNT || defined CYGWIN || defined DARWIN_OS)
char my_edata[] = "End of Emacs initialized data";
+#endif
/* Help unexec locate the end of the .bss area used by Emacs (which
isn't always a separate section in NT executables). */
extern _Noreturn void wrong_choice (Lisp_Object, Lisp_Object);
/* Defined in emacs.c. */
+#ifdef DOUG_LEA_MALLOC
extern bool might_dump;
+#endif
/* True means Emacs has already been initialized.
Used during startup to detect startup of dumped Emacs. */
extern bool initialized;
except the former expands to an integer constant expression. */
#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET ((iname) * sizeof *lispsym)
+/* LISPSYM_INITIALLY (Qfoo) is equivalent to Qfoo except it is
+ designed for use as an initializer, even for a constant initializer. */
+#define LISPSYM_INITIALLY(name) LISP_INITIALLY (XLI_BUILTIN_LISPSYM (i##name))
+
/* Declare extern constants for Lisp symbols. These can be helpful
when using a debugger like GDB, on older platforms where the debug
format does not represent C macros. */
#define DEFINE_LISP_SYMBOL(name) \
DEFINE_GDB_SYMBOL_BEGIN (Lisp_Object, name) \
- DEFINE_GDB_SYMBOL_END (LISP_INITIALLY (XLI_BUILTIN_LISPSYM (i##name)))
+ DEFINE_GDB_SYMBOL_END (LISPSYM_INITIALLY (name))
/* By default, define macros for Qt, etc., as this leads to a bit
better performance in the core Emacs interpreter. A plugin can
ptrdiff_t hash_put (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
EMACS_UINT);
void hash_remove_from_table (struct Lisp_Hash_Table *, Lisp_Object);
-extern struct hash_table_test hashtest_eq, hashtest_eql, hashtest_equal;
+extern struct hash_table_test const hashtest_eq, hashtest_eql, hashtest_equal;
extern void validate_subarray (Lisp_Object, Lisp_Object, Lisp_Object,
ptrdiff_t, ptrdiff_t *, ptrdiff_t *);
extern Lisp_Object substring_both (Lisp_Object, ptrdiff_t, ptrdiff_t,
#if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
extern void refill_memory_reserve (void);
#endif
-#ifdef DOUG_LEA_MALLOC
extern void alloc_unexec_pre (void);
extern void alloc_unexec_post (void);
-#else
-INLINE void alloc_unexec_pre (void) {}
-INLINE void alloc_unexec_post (void) {}
-#endif
extern const char *pending_malloc_warning;
extern Lisp_Object zero_vector;
extern Lisp_Object *stack_base;
INLINE void (check_cons_list) (void) { lisp_h_check_cons_list (); }
#endif
+/* Defined in gmalloc.c. */
+#if !defined DOUG_LEA_MALLOC && !defined HYBRID_MALLOC && !defined SYSTEM_MALLOC
+extern size_t __malloc_extra_blocks;
+#endif
+#if !HAVE_DECL_ALIGNED_ALLOC
+extern void *aligned_alloc (size_t, size_t) ATTRIBUTE_MALLOC_SIZE ((2));
+#endif
+extern void malloc_enable_thread (void);
+
#ifdef REL_ALLOC
/* Defined in ralloc.c. */
extern void *r_alloc (void **, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
extern _Noreturn void verror (const char *, va_list)
ATTRIBUTE_FORMAT_PRINTF (1, 0);
+extern Lisp_Object vformat_string (const char *, va_list)
+ ATTRIBUTE_FORMAT_PRINTF (1, 0);
extern void un_autoload (Lisp_Object);
extern Lisp_Object call_debugger (Lisp_Object arg);
extern void *near_C_stack_top (void);
/* True means remove site-lisp directories from load-path. */
extern bool no_site_lisp;
+/* True means put details like time stamps into builds. */
+extern bool build_details;
+
/* Pipe used to send exit notification to the daemon parent at
startup. On Windows, we use a kernel event instead. */
#ifndef WINDOWSNT
extern void add_gpm_wait_descriptor (int);
extern void delete_gpm_wait_descriptor (int);
#endif
-extern void init_process_emacs (void);
+extern void init_process_emacs (int);
extern void syms_of_process (void);
extern void setup_process_coding_systems (Lisp_Object);
/* Defined in doc.c. */
enum text_quoting_style
{
+ /* Leave quotes unchanged. */
+ LEAVE_QUOTING_STYLE,
+
/* Use curved single quotes ‘like this’. */
CURVE_QUOTING_STYLE,
extern void relocate_byte_stack (void);
extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object,
Lisp_Object, ptrdiff_t, Lisp_Object *);
+extern Lisp_Object get_byte_code_arity (Lisp_Object);
/* Defined in macros.c. */
extern void init_macros (void);
struct terminal;
/* Defined in sysdep.c. */
-#ifndef HAVE_GET_CURRENT_DIR_NAME
-extern char *get_current_dir_name (void);
-#endif
+extern void init_standard_fds (void);
+extern char *emacs_get_current_dir_name (void);
extern void stuff_char (char c);
extern void init_foreground_group (void);
extern void sys_subshell (void);
STACK_CONS (d, Qnil)))) \
: list4 (a, b, c, d))
-/* Check whether stack-allocated strings are ASCII-only. */
+/* Declare NAME as an auto Lisp string if possible, a GC-based one if not.
+ Take its unibyte value from the null-terminated string STR,
+ an expression that should not have side effects.
+ STR's value is not necessarily copied. The resulting Lisp string
+ should not be modified or made visible to user code. */
-#if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
-extern const char *verify_ascii (const char *);
-#else
-# define verify_ascii(str) (str)
-#endif
+#define AUTO_STRING(name, str) \
+ AUTO_STRING_WITH_LEN (name, str, strlen (str))
/* Declare NAME as an auto Lisp string if possible, a GC-based one if not.
- Take its value from STR. STR is not necessarily copied and should
- contain only ASCII characters. The resulting Lisp string should
- not be modified or made visible to user code. */
+ Take its unibyte value from the null-terminated string STR with length LEN.
+ STR may have side effects and may contain null bytes.
+ STR's value is not necessarily copied. The resulting Lisp string
+ should not be modified or made visible to user code. */
-#define AUTO_STRING(name, str) \
+#define AUTO_STRING_WITH_LEN(name, str, len) \
Lisp_Object name = \
(USE_STACK_STRING \
? (make_lisp_ptr \
((&(union Aligned_String) \
- {{strlen (str), -1, 0, (unsigned char *) verify_ascii (str)}}.s), \
- Lisp_String)) \
- : build_string (verify_ascii (str)))
+ {{len, -1, 0, (unsigned char *) (str)}}.s), \
+ Lisp_String)) \
+ : make_unibyte_string (str, len))
/* Loop over all tails of a list, checking for cycles.
FIXME: Make tortoise and n internal declarations.
#include "systime.h"
#include "termhooks.h"
#include "blockinput.h"
+#include <c-ctype.h>
#ifdef MSDOS
#include "msdos.h"
}
else
{
- int oflags = O_RDONLY + (NILP (predicate) ? 0 : O_BINARY);
- fd = emacs_open (pfn, oflags, 0);
+ fd = emacs_open (pfn, O_RDONLY, 0);
if (fd < 0)
{
if (errno != ENOENT)
MAX_MULTIBYTE_LENGTH, -1, 1);
}
+/* Return the scalar value that has the Unicode character name NAME.
+ Raise 'invalid-read-syntax' if there is no such character. */
+static int
+character_name_to_code (char const *name, ptrdiff_t name_len)
+{
+ /* For "U+XXXX", pass the leading '+' to string_to_number to reject
+ monstrosities like "U+-0000". */
+ Lisp_Object code
+ = (name[0] == 'U' && name[1] == '+'
+ ? string_to_number (name + 1, 16, false)
+ : call2 (Qchar_from_name, make_unibyte_string (name, name_len), Qt));
+
+ if (! RANGED_INTEGERP (0, code, MAX_UNICODE_CHAR)
+ || char_surrogate_p (XINT (code)))
+ {
+ AUTO_STRING (format, "\\N{%s}");
+ AUTO_STRING_WITH_LEN (namestr, name, name_len);
+ xsignal1 (Qinvalid_read_syntax, CALLN (Fformat, format, namestr));
+ }
+
+ return XINT (code);
+}
+
+/* Bound on the length of a Unicode character name. As of
+ Unicode 9.0.0 the maximum is 83, so this should be safe. */
+enum { UNICODE_CHARACTER_NAME_LENGTH_BOUND = 200 };
+
/* Read a \-escape sequence, assuming we already read the `\'.
If the escape sequence forces unibyte, return eight-bit char. */
return i;
}
+ case 'N':
+ /* Named character. */
+ {
+ c = READCHAR;
+ if (c != '{')
+ invalid_syntax ("Expected opening brace after \\N");
+ char name[UNICODE_CHARACTER_NAME_LENGTH_BOUND + 1];
+ bool whitespace = false;
+ ptrdiff_t length = 0;
+ while (true)
+ {
+ c = READCHAR;
+ if (c < 0)
+ end_of_file_error ();
+ if (c == '}')
+ break;
+ if (! (0 < c && c < 0x80))
+ {
+ AUTO_STRING (format,
+ "Invalid character U+%04X in character name");
+ xsignal1 (Qinvalid_read_syntax,
+ CALLN (Fformat, format, make_natnum (c)));
+ }
+ /* Treat multiple adjacent whitespace characters as a
+ single space character. This makes it easier to use
+ character names in e.g. multi-line strings. */
+ if (c_isspace (c))
+ {
+ if (whitespace)
+ continue;
+ c = ' ';
+ whitespace = true;
+ }
+ else
+ whitespace = false;
+ name[length++] = c;
+ if (length >= sizeof name)
+ invalid_syntax ("Character name too long");
+ }
+ if (length == 0)
+ invalid_syntax ("Empty character name");
+ name[length] = '\0';
+ return character_name_to_code (name, length);
+ }
+
default:
return c;
}
DEFSYM (Qweakness, "weakness");
DEFSYM (Qrehash_size, "rehash-size");
DEFSYM (Qrehash_threshold, "rehash-threshold");
+
+ DEFSYM (Qchar_from_name, "char-from-name");
}
if (prefix)
{
- AUTO_STRING (prefix_obj, prefix);
+ AUTO_STRING_WITH_LEN (prefix_obj, prefix, 4);
item_string = concat2 (prefix_obj, item_string);
}
}
int c;
unsigned char hide_char = 0;
struct emacs_tty etty;
- bool etty_valid;
+ bool etty_valid IF_LINT (= false);
/* Check, whether we need to suppress echoing. */
if (CHARACTERP (Vread_hide_char))
/* Manipulate tty. */
if (hide_char)
{
- etty_valid = emacs_get_tty (fileno (stdin), &etty) == 0;
+ etty_valid = emacs_get_tty (STDIN_FILENO, &etty) == 0;
if (etty_valid)
- set_binary_mode (fileno (stdin), O_BINARY);
- suppress_echo_on_tty (fileno (stdin));
+ set_binary_mode (STDIN_FILENO, O_BINARY);
+ suppress_echo_on_tty (STDIN_FILENO);
}
fwrite (SDATA (prompt), 1, SBYTES (prompt), stdout);
fprintf (stdout, "\n");
if (etty_valid)
{
- emacs_set_tty (fileno (stdin), &etty, 0);
- set_binary_mode (fileno (stdin), O_TEXT);
+ emacs_set_tty (STDIN_FILENO, &etty, 0);
+ set_binary_mode (STDIN_FILENO, O_TEXT);
}
}
Qrear_nonsticky, Qt, Qnil);
Fput_text_property (make_number (BEG), make_number (PT),
Qfield, Qt, Qnil);
- Fadd_text_properties (make_number (BEG), make_number (PT),
- Vminibuffer_prompt_properties, Qnil);
+ if (CONSP (Vminibuffer_prompt_properties))
+ {
+ /* We want to apply all properties from
+ `minibuffer-prompt-properties' to the region normally,
+ but if the `face' property is present, add that
+ property to the end of the face properties to avoid
+ overwriting faces. */
+ Lisp_Object list = Vminibuffer_prompt_properties;
+ while (CONSP (list))
+ {
+ Lisp_Object key = XCAR (list);
+ list = XCDR (list);
+ if (CONSP (list))
+ {
+ Lisp_Object val = XCAR (list);
+ list = XCDR (list);
+ if (EQ (key, Qface))
+ Fadd_face_text_property (make_number (BEG),
+ make_number (PT), val, Qt, Qnil);
+ else
+ Fput_text_property (make_number (BEG), make_number (PT),
+ key, val, Qnil);
+ }
+ }
+ }
}
unbind_to (count1, Qnil);
}
}
/* Return a buffer to be used as the minibuffer at depth `depth'.
- depth = 0 is the lowest allowed argument, and that is the value
- used for nonrecursive minibuffer invocations. */
+ depth = 0 is the lowest allowed argument, and that is the value
+ used for nonrecursive minibuffer invocations. */
Lisp_Object
get_minibuffer (EMACS_INT depth)
{
- Lisp_Object tail, num, buf;
- char name[sizeof " *Minibuf-*" + INT_STRLEN_BOUND (EMACS_INT)];
-
- XSETFASTINT (num, depth);
- tail = Fnthcdr (num, Vminibuffer_list);
+ Lisp_Object tail = Fnthcdr (make_number (depth), Vminibuffer_list);
if (NILP (tail))
{
tail = list1 (Qnil);
Vminibuffer_list = nconc2 (Vminibuffer_list, tail);
}
- buf = Fcar (tail);
+ Lisp_Object buf = Fcar (tail);
if (NILP (buf) || !BUFFER_LIVE_P (XBUFFER (buf)))
{
- buf = Fget_buffer_create
- (make_formatted_string (name, " *Minibuf-%"pI"d*", depth));
+ static char const name_fmt[] = " *Minibuf-%"pI"d*";
+ char name[sizeof name_fmt + INT_STRLEN_BOUND (EMACS_INT)];
+ AUTO_STRING_WITH_LEN (lname, name, sprintf (name, name_fmt, depth));
+ buf = Fget_buffer_create (lname);
/* Although the buffer's name starts with a space, undo should be
enabled in it. */
/* offset to the bottom of knob of last mouse down */
CGFloat last_mouse_offset;
float min_portion;
- int pixel_height;
+ int pixel_length;
enum scroll_bar_part last_hit_part;
BOOL condemned;
+ BOOL horizontal;
+
/* optimize against excessive positioning calls generated by emacs */
int em_position;
int em_portion;
[window setFrame: wr display: YES];
- /* This is a trick to compensate for Emacs' managing the scrollbar area
- as a fixed number of standard character columns. Instead of leaving
- blank space for the extra, we chopped it off above. Now for
- left-hand scrollbars, we shift all rendering to the left by the
- difference between the real width and Emacs' imagined one. For
- right-hand bars, don't worry about it since the extra is never used.
- (Obviously doesn't work for vertically split windows tho..) */
- {
- NSPoint origin = FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f)
- ? NSMakePoint (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)
- - NS_SCROLL_BAR_WIDTH (f), 0)
- : NSMakePoint (0, 0);
-
- [view setFrame: NSMakeRect (0, 0, pixelwidth, pixelheight)];
- [view setBoundsOrigin: origin];
- }
-
[view updateFrameSize: NO];
unblock_input ();
}
window_box (window, ANY_AREA, 0, &window_y, 0, &window_height);
top = window_y;
height = window_height;
- width = WINDOW_CONFIG_SCROLL_BAR_COLS (window) * FRAME_COLUMN_WIDTH (f);
+ width = NS_SCROLL_BAR_WIDTH (f);
left = WINDOW_SCROLL_BAR_AREA_X (window);
r = NSMakeRect (left, top, width, height);
NSTRACE ("ns_set_horizontal_scroll_bar");
/* Get dimensions. */
- window_box (window, ANY_AREA, 0, &window_x, &window_width, 0);
+ window_box (window, ANY_AREA, &window_x, 0, &window_width, 0);
left = window_x;
width = window_width;
- height = WINDOW_CONFIG_SCROLL_BAR_LINES (window) * FRAME_LINE_HEIGHT (f);
+ height = NS_SCROLL_BAR_HEIGHT (f);
top = WINDOW_SCROLL_BAR_AREA_Y (window);
r = NSMakeRect (left, top, width, height);
/* the parent view is flipped, so we need to flip y value */
v = [view frame];
- /* ??????? PXW/scrollbars !!!!!!!!!!!!!!!!!!!! */
r.origin.y = (v.size.height - r.size.height - r.origin.y);
XSETWINDOW (win, window);
block_input ();
- if (WINDOW_TOTAL_COLS (window) < 5)
- {
- if (!NILP (window->horizontal_scroll_bar))
- {
- bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
- [bar removeFromSuperview];
- wset_horizontal_scroll_bar (window, Qnil);
- }
- ns_clear_frame_area (f, left, top, width, height);
- unblock_input ();
- return;
- }
-
if (NILP (window->horizontal_scroll_bar))
{
if (width > 0 && height > 0)
NSRect oldRect;
bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
oldRect = [bar frame];
- r.size.width = oldRect.size.width;
if (FRAME_LIVE_P (f) && !NSEqualRects (oldRect, r))
{
- if (oldRect.origin.x != r.origin.x)
- ns_clear_frame_area (f, left, top, width, height);
+ if (oldRect.origin.y != r.origin.y)
+ ns_clear_frame_area (f, left, top, width, height);
[bar setFrame: r];
update_p = YES;
}
}
+ /* If there are both horizontal and vertical scroll-bars they leave
+ a square that belongs to neither. We need to clear it otherwise
+ it fills with junk. */
+ if (!NILP (window->vertical_scroll_bar))
+ ns_clear_frame_area (f, WINDOW_SCROLL_BAR_AREA_X (window), top,
+ NS_SCROLL_BAR_HEIGHT (f), height);
+
if (update_p)
[bar setPosition: position portion: portion whole: whole];
unblock_input ();
{
id bar;
NSTRACE ("ns_redeem_scroll_bar");
- if (!NILP (window->vertical_scroll_bar))
+ if (!NILP (window->vertical_scroll_bar)
+ && WINDOW_HAS_VERTICAL_SCROLL_BAR (window))
{
bar = XNS_SCROLL_BAR (window->vertical_scroll_bar);
[bar reprieve];
}
- if (!NILP (window->horizontal_scroll_bar))
+ if (!NILP (window->horizontal_scroll_bar)
+ && WINDOW_HAS_HORIZONTAL_SCROLL_BAR (window))
{
bar = XNS_SCROLL_BAR (window->horizontal_scroll_bar);
[bar reprieve];
return r;
}
-
- initFrame: (NSRect )r window: (Lisp_Object)nwin
{
NSTRACE ("[EmacsScroller initFrame: window:]");
- r.size.width = [EmacsScroller scrollerWidth];
+ if (r.size.width > r.size.height)
+ horizontal = YES;
+ else
+ horizontal = NO;
+
[super initWithFrame: r/*NSMakeRect (0, 0, 0, 0)*/];
[self setContinuous: YES];
[self setEnabled: YES];
window = XWINDOW (nwin);
condemned = NO;
- pixel_height = NSHeight (r);
- if (pixel_height == 0) pixel_height = 1;
- min_portion = 20 / pixel_height;
+ if (horizontal)
+ pixel_length = NSWidth (r);
+ else
+ pixel_length = NSHeight (r);
+ if (pixel_length == 0) pixel_length = 1;
+ min_portion = 20 / pixel_length;
frame = XFRAME (window->frame);
if (FRAME_LIVE_P (frame))
NSTRACE ("[EmacsScroller setFrame:]");
/* block_input (); */
- pixel_height = NSHeight (newRect);
- if (pixel_height == 0) pixel_height = 1;
- min_portion = 20 / pixel_height;
+ if (horizontal)
+ pixel_length = NSWidth (newRect);
+ else
+ pixel_length = NSHeight (newRect);
+ if (pixel_length == 0) pixel_length = 1;
+ min_portion = 20 / pixel_length;
[super setFrame: newRect];
/* unblock_input (); */
}
{
NSTRACE ("[EmacsScroller dealloc]");
if (window)
- wset_vertical_scroll_bar (window, Qnil);
+ {
+ if (horizontal)
+ wset_horizontal_scroll_bar (window, Qnil);
+ else
+ wset_vertical_scroll_bar (window, Qnil);
+ }
window = 0;
[super dealloc];
}
if (view != nil)
view->scrollbarsNeedingUpdate++;
if (window)
- wset_vertical_scroll_bar (window, Qnil);
+ {
+ if (horizontal)
+ wset_horizontal_scroll_bar (window, Qnil);
+ else
+ wset_vertical_scroll_bar (window, Qnil);
+ }
window = 0;
[self removeFromSuperview];
[self release];
{
float pos;
CGFloat por;
- portion = max ((float)whole*min_portion/pixel_height, portion);
+ portion = max ((float)whole*min_portion/pixel_length, portion);
pos = (float)position / (whole - portion);
por = (CGFloat)portion/whole;
#ifdef NS_IMPL_COCOA
XSETWINDOW (win, window);
emacs_event->frame_or_window = win;
emacs_event->timestamp = EV_TIMESTAMP (e);
- emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
emacs_event->arg = Qnil;
- XSETINT (emacs_event->x, loc * pixel_height);
- XSETINT (emacs_event->y, pixel_height-20);
+
+ if (horizontal)
+ {
+ emacs_event->kind = HORIZONTAL_SCROLL_BAR_CLICK_EVENT;
+ XSETINT (emacs_event->x, em_whole * loc / pixel_length);
+ XSETINT (emacs_event->y, em_whole);
+ }
+ else
+ {
+ emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
+ XSETINT (emacs_event->x, loc);
+ XSETINT (emacs_event->y, pixel_length-20);
+ }
if (q_event_ptr)
{
switch (part)
{
case NSScrollerDecrementPage:
- last_hit_part = scroll_bar_above_handle; inc = -1.0; break;
+ last_hit_part = horizontal ? scroll_bar_before_handle : scroll_bar_above_handle; break;
case NSScrollerIncrementPage:
- last_hit_part = scroll_bar_below_handle; inc = 1.0; break;
+ last_hit_part = horizontal ? scroll_bar_after_handle : scroll_bar_below_handle; break;
case NSScrollerDecrementLine:
- last_hit_part = scroll_bar_up_arrow; inc = -0.1; break;
+ last_hit_part = horizontal ? scroll_bar_left_arrow : scroll_bar_up_arrow; break;
case NSScrollerIncrementLine:
- last_hit_part = scroll_bar_down_arrow; inc = 0.1; break;
+ last_hit_part = horizontal ? scroll_bar_right_arrow : scroll_bar_down_arrow; break;
case NSScrollerKnob:
- last_hit_part = scroll_bar_handle; break;
+ last_hit_part = horizontal ? scroll_bar_horizontal_handle : scroll_bar_handle; break;
case NSScrollerKnobSlot: /* GNUstep-only */
last_hit_part = scroll_bar_move_ratio; break;
default: /* NSScrollerNoPart? */
return;
}
- if (inc != 0.0)
- {
- pos = 0; /* ignored */
-
- /* set a timer to repeat, as we can't let superclass do this modally */
- scroll_repeat_entry
- = [[NSTimer scheduledTimerWithTimeInterval: SCROLL_BAR_FIRST_DELAY
- target: self
- selector: @selector (repeatScroll:)
- userInfo: 0
- repeats: YES]
- retain];
- }
- else
+ if (part == NSScrollerKnob || part == NSScrollerKnobSlot)
{
/* handle, or on GNUstep possibly slot */
NSEvent *fake_event;
+ int length;
/* compute float loc in slot and mouse offset on knob */
sr = [self convertRect: [self rectForPart: NSScrollerKnobSlot]
toView: nil];
- loc = NSHeight (sr) - ([e locationInWindow].y - NSMinY (sr));
+ if (horizontal)
+ {
+ length = NSWidth (sr);
+ loc = ([e locationInWindow].x - NSMinX (sr));
+ }
+ else
+ {
+ length = NSHeight (sr);
+ loc = length - ([e locationInWindow].y - NSMinY (sr));
+ }
+
if (loc <= 0.0)
{
loc = 0.0;
edge = -1;
}
- else if (loc >= NSHeight (sr))
+ else if (loc >= length)
{
- loc = NSHeight (sr);
+ loc = length;
edge = 1;
}
{
kr = [self convertRect: [self rectForPart: NSScrollerKnob]
toView: nil];
- kloc = NSHeight (kr) - ([e locationInWindow].y - NSMinY (kr));
+ if (horizontal)
+ kloc = ([e locationInWindow].x - NSMinX (kr));
+ else
+ kloc = NSHeight (kr) - ([e locationInWindow].y - NSMinY (kr));
}
last_mouse_offset = kloc;
- /* if knob, tell emacs a location offset by knob pos
- (to indicate top of handle) */
- if (part == NSScrollerKnob)
- pos = (loc - last_mouse_offset) / NSHeight (sr);
- else
- /* else this is a slot click on GNUstep: go straight there */
- pos = loc / NSHeight (sr);
+ if (part != NSScrollerKnob)
+ /* this is a slot click on GNUstep: go straight there */
+ pos = loc;
/* send a fake mouse-up to super to preempt modal -trackKnob: mode */
fake_event = [NSEvent mouseEventWithType: NSLeftMouseUp
pressure: [e pressure]];
[super mouseUp: fake_event];
}
+ else
+ {
+ pos = 0; /* ignored */
+
+ /* set a timer to repeat, as we can't let superclass do this modally */
+ scroll_repeat_entry
+ = [[NSTimer scheduledTimerWithTimeInterval: SCROLL_BAR_FIRST_DELAY
+ target: self
+ selector: @selector (repeatScroll:)
+ userInfo: 0
+ repeats: YES]
+ retain];
+ }
if (part != NSScrollerKnob)
[self sendScrollEventAtLoc: pos fromEvent: e];
{
NSRect sr;
double loc, pos;
+ int length;
NSTRACE ("[EmacsScroller mouseDragged:]");
sr = [self convertRect: [self rectForPart: NSScrollerKnobSlot]
toView: nil];
- loc = NSHeight (sr) - ([e locationInWindow].y - NSMinY (sr));
+
+ if (horizontal)
+ {
+ length = NSWidth (sr);
+ loc = ([e locationInWindow].x - NSMinX (sr));
+ }
+ else
+ {
+ length = NSHeight (sr);
+ loc = length - ([e locationInWindow].y - NSMinY (sr));
+ }
if (loc <= 0.0)
{
loc = 0.0;
}
- else if (loc >= NSHeight (sr) + last_mouse_offset)
+ else if (loc >= length + last_mouse_offset)
{
- loc = NSHeight (sr) + last_mouse_offset;
+ loc = length + last_mouse_offset;
}
- pos = (loc - last_mouse_offset) / NSHeight (sr);
+ pos = (loc - last_mouse_offset);
[self sendScrollEventAtLoc: pos fromEvent: e];
}
#include <float.h>
#include <ftoastr.h>
+#ifdef WINDOWSNT
+# include <sys/socket.h> /* for F_DUPFD_CLOEXEC */
+#endif
+
struct terminal;
/* Avoid actual stack overflow in print. */
print_output_debug_flag = x;
}
-#if defined (GNU_LINUX)
-
-/* This functionality is not vitally important in general, so we rely on
- non-portable ability to use stderr as lvalue. */
-
-#define WITH_REDIRECT_DEBUGGING_OUTPUT 1
-
-static FILE *initial_stderr_stream = NULL;
-
DEFUN ("redirect-debugging-output", Fredirect_debugging_output, Sredirect_debugging_output,
1, 2,
"FDebug output file: \nP",
append to existing target file. */)
(Lisp_Object file, Lisp_Object append)
{
- if (initial_stderr_stream != NULL)
- {
- block_input ();
- fclose (stderr);
- unblock_input ();
- }
- stderr = initial_stderr_stream;
- initial_stderr_stream = NULL;
+ /* If equal to STDERR_FILENO, stderr has not been duplicated and is OK as-is.
+ Otherwise, this is a close-on-exec duplicate of the original stderr. */
+ static int stderr_dup = STDERR_FILENO;
+ int fd = stderr_dup;
- if (STRINGP (file))
+ if (! NILP (file))
{
file = Fexpand_file_name (file, Qnil);
- initial_stderr_stream = stderr;
- stderr = emacs_fopen (SSDATA (file), NILP (append) ? "w" : "a");
- if (stderr == NULL)
+
+ if (stderr_dup == STDERR_FILENO)
{
- stderr = initial_stderr_stream;
- initial_stderr_stream = NULL;
- report_file_error ("Cannot open debugging output stream", file);
+ int n = fcntl (STDERR_FILENO, F_DUPFD_CLOEXEC, STDERR_FILENO + 1);
+ if (n < 0)
+ report_file_error ("dup", file);
+ stderr_dup = n;
}
+
+ fd = emacs_open (SSDATA (ENCODE_FILE (file)),
+ (O_WRONLY | O_CREAT
+ | (! NILP (append) ? O_APPEND : O_TRUNC)),
+ 0666);
+ if (fd < 0)
+ report_file_error ("Cannot open debugging output stream", file);
}
+
+ fflush (stderr);
+ if (dup2 (fd, STDERR_FILENO) < 0)
+ report_file_error ("dup2", file);
+ if (fd != stderr_dup)
+ emacs_close (fd);
return Qnil;
}
-#endif /* GNU_LINUX */
/* This is the interface for debugging printing. */
defsubr (&Sprint);
defsubr (&Sterpri);
defsubr (&Swrite_char);
-#ifdef WITH_REDIRECT_DEBUGGING_OUTPUT
defsubr (&Sredirect_debugging_output);
-#endif
DEFSYM (Qprint_escape_newlines, "print-escape-newlines");
DEFSYM (Qprint_escape_multibyte, "print-escape-multibyte");
# include <sys/stropts.h>
#endif
-#ifdef HAVE_RES_INIT
-#include <arpa/nameser.h>
-#include <resolv.h>
-#endif
-
#ifdef HAVE_UTIL_H
#include <util.h>
#endif
#endif
#endif
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+/* This is 0.1s in nanoseconds. */
+#define ASYNC_RETRY_NSEC 100000000
+#endif
+
#ifdef WINDOWSNT
extern int sys_select (int, fd_set *, fd_set *, fd_set *,
struct timespec *, void *);
/* Number of events for which the user or sentinel has been notified. */
static EMACS_INT update_tick;
-/* Define NON_BLOCKING_CONNECT if we can support non-blocking connects.
- The code can be simplified by assuming NON_BLOCKING_CONNECT once
- Emacs starts assuming POSIX 1003.1-2001 or later. */
-
-#if (defined HAVE_SELECT \
- && (defined GNU_LINUX || defined HAVE_GETPEERNAME) \
- && (defined EWOULDBLOCK || defined EINPROGRESS))
-# define NON_BLOCKING_CONNECT
-#endif
-
/* Define DATAGRAM_SOCKETS if datagrams can be used safely on
this system. We need to read full packets, so we need a
"non-destructive" select. So we require either native select,
static fd_set write_mask;
-#ifdef NON_BLOCKING_CONNECT
/* Mask of bits indicating the descriptors that we wait for connect to
complete on. Once they complete, they are removed from this mask
and added to the input_wait_mask and non_keyboard_wait_mask. */
/* Number of bits set in connect_wait_mask. */
static int num_pending_connects;
-#endif /* NON_BLOCKING_CONNECT */
/* The largest descriptor currently in use for a process object; -1 if none. */
static int max_process_desc;
/* The largest descriptor currently in use for input; -1 if none. */
static int max_input_desc;
+/* Set the external socket descriptor for Emacs to use when
+ `make-network-process' is called with a non-nil
+ `:use-external-socket' option. The value should be either -1, or
+ the file descriptor of a socket that is already bound. */
+static int external_sock_fd;
+
/* Indexed by descriptor, gives the process (if any) for that descriptor. */
static Lisp_Object chan_process[FD_SETSIZE];
+static void wait_for_socket_fds (Lisp_Object, char const *);
/* Alist of elements (NAME . PROCESS). */
static Lisp_Object Vprocess_alist;
/* Table of `partner address' for datagram sockets. */
static struct sockaddr_and_len {
struct sockaddr *sa;
- int len;
+ ptrdiff_t len;
} datagram_address[FD_SETSIZE];
#define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
#define DATAGRAM_CONN_P(proc) \
p->sentinel = NILP (val) ? Qinternal_default_process_sentinel : val;
}
static void
-pset_status (struct Lisp_Process *p, Lisp_Object val)
-{
- p->status = val;
-}
-static void
pset_tty_name (struct Lisp_Process *p, Lisp_Object val)
{
p->tty_name = val;
static Lisp_Object
make_process (Lisp_Object name)
{
- register Lisp_Object val, tem, name1;
- register struct Lisp_Process *p;
- char suffix[sizeof "<>" + INT_STRLEN_BOUND (printmax_t)];
- printmax_t i;
-
- p = allocate_process ();
+ struct Lisp_Process *p = allocate_process ();
/* Initialize Lisp data. Note that allocate_process initializes all
Lisp data to nil, so do it only for slots which should not be nil. */
pset_status (p, Qrun);
non-Lisp data, so do it only for slots which should not be zero. */
p->infd = -1;
p->outfd = -1;
- for (i = 0; i < PROCESS_OPEN_FDS; i++)
+ for (int i = 0; i < PROCESS_OPEN_FDS; i++)
p->open_fd[i] = -1;
#ifdef HAVE_GNUTLS
p->gnutls_initstage = GNUTLS_STAGE_EMPTY;
+ p->gnutls_boot_parameters = Qnil;
#endif
/* If name is already in use, modify it until it is unused. */
- name1 = name;
- for (i = 1; ; i++)
+ Lisp_Object name1 = name;
+ for (printmax_t i = 1; ; i++)
{
- tem = Fget_process (name1);
- if (NILP (tem)) break;
- name1 = concat2 (name, make_formatted_string (suffix, "<%"pMd">", i));
+ Lisp_Object tem = Fget_process (name1);
+ if (NILP (tem))
+ break;
+ char const suffix_fmt[] = "<%"pMd">";
+ char suffix[sizeof suffix_fmt + INT_STRLEN_BOUND (printmax_t)];
+ AUTO_STRING_WITH_LEN (lsuffix, suffix, sprintf (suffix, suffix_fmt, i));
+ name1 = concat2 (name, lsuffix);
}
name = name1;
pset_name (p, name);
pset_sentinel (p, Qinternal_default_process_sentinel);
pset_filter (p, Qinternal_default_process_filter);
+ Lisp_Object val;
XSETPROCESS (val, p);
Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
return val;
deactivate_process (proc);
}
+#ifdef HAVE_GETADDRINFO_A
+static void
+free_dns_request (Lisp_Object proc)
+{
+ struct Lisp_Process *p = XPROCESS (proc);
+
+ if (p->dns_request->ar_result)
+ freeaddrinfo (p->dns_request->ar_result);
+ xfree (p->dns_request);
+ p->dns_request = NULL;
+}
+#endif
+
\f
DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
doc: /* Return t if OBJECT is a process. */)
process = get_process (process);
p = XPROCESS (process);
+#ifdef HAVE_GETADDRINFO_A
+ if (p->dns_request)
+ {
+ /* Cancel the request. Unless shutting down, wait until
+ completion. Free the request if completely canceled. */
+
+ bool canceled = gai_cancel (p->dns_request) != EAI_NOTCANCELED;
+ if (!canceled && !inhibit_sentinels)
+ {
+ struct gaicb const *req = p->dns_request;
+ while (gai_suspend (&req, 1, NULL) != 0)
+ continue;
+ canceled = true;
+ }
+ if (canceled)
+ free_dns_request (process);
+ }
+#endif
+
p->raw_status_new = 0;
if (NETCONN1_P (p) || SERIALCONN1_P (p) || PIPECONN1_P (p))
{
return XPROCESS (process)->mark;
}
+static void
+set_process_filter_masks (struct Lisp_Process *p)
+{
+ if (EQ (p->filter, Qt) && !EQ (p->status, Qlisten))
+ {
+ FD_CLR (p->infd, &input_wait_mask);
+ FD_CLR (p->infd, &non_keyboard_wait_mask);
+ }
+ else if (EQ (p->filter, Qt)
+ /* Network or serial process not stopped: */
+ && !EQ (p->command, Qt))
+ {
+ FD_SET (p->infd, &input_wait_mask);
+ FD_SET (p->infd, &non_keyboard_wait_mask);
+ }
+}
+
DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
2, 2, 0,
doc: /* Give PROCESS the filter function FILTER; nil means default.
- if `default-enable-multibyte-characters' is nil, it is a unibyte
string (the result of converting the decoded input multibyte
string to unibyte with `string-make-unibyte'). */)
- (register Lisp_Object process, Lisp_Object filter)
+ (Lisp_Object process, Lisp_Object filter)
{
- struct Lisp_Process *p;
-
CHECK_PROCESS (process);
- p = XPROCESS (process);
+ struct Lisp_Process *p = XPROCESS (process);
/* Don't signal an error if the process's input file descriptor
is closed. This could make debugging Lisp more difficult,
if (NILP (filter))
filter = Qinternal_default_process_filter;
+ pset_filter (p, filter);
+
if (p->infd >= 0)
- {
- if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
- {
- FD_CLR (p->infd, &input_wait_mask);
- FD_CLR (p->infd, &non_keyboard_wait_mask);
- }
- else if (EQ (p->filter, Qt)
- /* Network or serial process not stopped: */
- && !EQ (p->command, Qt))
- {
- FD_SET (p->infd, &input_wait_mask);
- FD_SET (p->infd, &non_keyboard_wait_mask);
- }
- }
+ set_process_filter_masks (p);
- pset_filter (p, filter);
if (NETCONN1_P (p) || SERIALCONN1_P (p) || PIPECONN1_P (p))
pset_childp (p, Fplist_put (p->childp, QCfilter, filter));
setup_process_coding_systems (process);
CHECK_RANGED_INTEGER (height, 0, USHRT_MAX);
CHECK_RANGED_INTEGER (width, 0, USHRT_MAX);
- if (XPROCESS (process)->infd < 0
+ if (NETCONN_P (process)
+ || XPROCESS (process)->infd < 0
|| (set_window_size (XPROCESS (process)->infd,
XINT (height), XINT (width))
< 0))
connection. If KEY is t, the complete contact information for the
connection is returned, else the specific value for the keyword KEY is
returned. See `make-network-process' or `make-serial-process' for a
-list of keywords. */)
- (register Lisp_Object process, Lisp_Object key)
+list of keywords.
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed. */)
+ (Lisp_Object process, Lisp_Object key)
{
Lisp_Object contact;
contact = XPROCESS (process)->childp;
#ifdef DATAGRAM_SOCKETS
+
+ if (NETCONN_P (process))
+ wait_for_socket_fds (process, "process-contact");
+
if (DATAGRAM_CONN_P (process)
&& (EQ (key, Qt) || EQ (key, QCremote)))
contact = Fplist_put (contact, QCremote,
DEFUN ("set-process-plist", Fset_process_plist, Sset_process_plist,
2, 2, 0,
- doc: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
- (register Lisp_Object process, Lisp_Object plist)
+ doc: /* Replace the plist of PROCESS with PLIST. Return PLIST. */)
+ (Lisp_Object process, Lisp_Object plist)
{
CHECK_PROCESS (process);
CHECK_LIST (plist);
An 8 or 9 element vector represents an IPv6 address (with port number).
If optional second argument OMIT-PORT is non-nil, don't include a port
number in the string, even when present in ADDRESS.
-Returns nil if format of ADDRESS is invalid. */)
+Return nil if format of ADDRESS is invalid. */)
(Lisp_Object address, Lisp_Object omit_port)
{
if (NILP (address))
The address family of sa is not included in the result. */
Lisp_Object
-conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
+conv_sockaddr_to_lisp (struct sockaddr *sa, ptrdiff_t len)
{
Lisp_Object address;
- int i;
+ ptrdiff_t i;
unsigned char *cp;
- register struct Lisp_Vector *p;
+ struct Lisp_Vector *p;
/* Workaround for a bug in getsockname on BSD: Names bound to
sockets in the UNIX domain are inaccessible; getsockname returns
/* Get family and required size for sockaddr structure to hold ADDRESS. */
-static int
+static ptrdiff_t
get_lisp_to_sockaddr_size (Lisp_Object address, int *familyp)
{
- register struct Lisp_Vector *p;
+ struct Lisp_Vector *p;
if (VECTORP (address))
{
#ifdef DATAGRAM_SOCKETS
DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_address,
1, 1, 0,
- doc: /* Get the current datagram address associated with PROCESS. */)
+ doc: /* Get the current datagram address associated with PROCESS.
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed. */)
(Lisp_Object process)
{
int channel;
CHECK_PROCESS (process);
+ if (NETCONN_P (process))
+ wait_for_socket_fds (process, "process-datagram-address");
+
if (!DATAGRAM_CONN_P (process))
return Qnil;
DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address,
2, 2, 0,
doc: /* Set the datagram address for PROCESS to ADDRESS.
-Returns nil upon error setting address, ADDRESS otherwise. */)
+Return nil upon error setting address, ADDRESS otherwise.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed. */)
(Lisp_Object process, Lisp_Object address)
{
int channel;
- int family, len;
+ int family;
+ ptrdiff_t len;
CHECK_PROCESS (process);
+ if (NETCONN_P (process))
+ wait_for_socket_fds (process, "set-process-datagram-address");
+
if (!DATAGRAM_CONN_P (process))
return Qnil;
/* Set option OPT to value VAL on socket S.
- Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
+ Return (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
Signals an error if setting a known option fails.
*/
doc: /* For network process PROCESS set option OPTION to value VALUE.
See `make-network-process' for a list of options and values.
If optional fourth arg NO-ERROR is non-nil, don't signal an error if
-OPTION is not a supported option, return nil instead; otherwise return t. */)
+OPTION is not a supported option, return nil instead; otherwise return t.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed. */)
(Lisp_Object process, Lisp_Object option, Lisp_Object value, Lisp_Object no_error)
{
int s;
if (!NETCONN1_P (p))
error ("Process is not a network process");
+ wait_for_socket_fds (process, "set-network-process-option");
+
s = p->infd;
if (s < 0)
error ("Process is not running");
return proc;
}
-/* Create a network stream/datagram client/server process. Treated
- exactly like a normal process when reading and writing. Primary
- differences are in status display and process deletion. A network
- connection has no PID; you cannot signal it. All you can do is
- stop/continue it and deactivate/close it via delete-process. */
+static void
+set_network_socket_coding_system (Lisp_Object proc, Lisp_Object host,
+ Lisp_Object service, Lisp_Object name)
+{
+ Lisp_Object tem;
+ struct Lisp_Process *p = XPROCESS (proc);
+ Lisp_Object contact = p->childp;
+ Lisp_Object coding_systems = Qt;
+ Lisp_Object val;
-DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
- 0, MANY, 0,
- doc: /* Create and return a network server or client process.
+ tem = Fplist_member (contact, QCcoding);
+ if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
+ tem = Qnil; /* No error message (too late!). */
-In Emacs, network connections are represented by process objects, so
-input and output work as for subprocesses and `delete-process' closes
-a network connection. However, a network process has no process id,
-it cannot be signaled, and the status codes are different from normal
-processes.
+ /* Setup coding systems for communicating with the network stream. */
+ /* Qt denotes we have not yet called Ffind_operation_coding_system. */
-Arguments are specified as keyword/argument pairs. The following
-arguments are defined:
+ if (!NILP (tem))
+ {
+ val = XCAR (XCDR (tem));
+ if (CONSP (val))
+ val = XCAR (val);
+ }
+ else if (!NILP (Vcoding_system_for_read))
+ val = Vcoding_system_for_read;
+ else if ((!NILP (p->buffer)
+ && NILP (BVAR (XBUFFER (p->buffer), enable_multibyte_characters)))
+ || (NILP (p->buffer)
+ && NILP (BVAR (&buffer_defaults, enable_multibyte_characters))))
+ /* We dare not decode end-of-line format by setting VAL to
+ Qraw_text, because the existing Emacs Lisp libraries
+ assume that they receive bare code including a sequence of
+ CR LF. */
+ val = Qnil;
+ else
+ {
+ if (NILP (host) || NILP (service))
+ coding_systems = Qnil;
+ else
+ coding_systems = CALLN (Ffind_operation_coding_system,
+ Qopen_network_stream, name, p->buffer,
+ host, service);
+ if (CONSP (coding_systems))
+ val = XCAR (coding_systems);
+ else if (CONSP (Vdefault_process_coding_system))
+ val = XCAR (Vdefault_process_coding_system);
+ else
+ val = Qnil;
+ }
+ pset_decode_coding_system (p, val);
-:name NAME -- NAME is name for process. It is modified if necessary
-to make it unique.
+ if (!NILP (tem))
+ {
+ val = XCAR (XCDR (tem));
+ if (CONSP (val))
+ val = XCDR (val);
+ }
+ else if (!NILP (Vcoding_system_for_write))
+ val = Vcoding_system_for_write;
+ else if (NILP (BVAR (current_buffer, enable_multibyte_characters)))
+ val = Qnil;
+ else
+ {
+ if (EQ (coding_systems, Qt))
+ {
+ if (NILP (host) || NILP (service))
+ coding_systems = Qnil;
+ else
+ coding_systems = CALLN (Ffind_operation_coding_system,
+ Qopen_network_stream, name, p->buffer,
+ host, service);
+ }
+ if (CONSP (coding_systems))
+ val = XCDR (coding_systems);
+ else if (CONSP (Vdefault_process_coding_system))
+ val = XCDR (Vdefault_process_coding_system);
+ else
+ val = Qnil;
+ }
+ pset_encode_coding_system (p, val);
-:buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
-with the process. Process output goes at end of that buffer, unless
-you specify an output stream or filter function to handle the output.
-BUFFER may be also nil, meaning that this process is not associated
-with any buffer.
+ pset_decoding_buf (p, empty_unibyte_string);
+ p->decoding_carryover = 0;
+ pset_encoding_buf (p, empty_unibyte_string);
-:host HOST -- HOST is name of the host to connect to, or its IP
-address. The symbol `local' specifies the local host. If specified
-for a server process, it must be a valid name or address for the local
-host, and only clients connecting to that address will be accepted.
+ p->inherit_coding_system_flag
+ = !(!NILP (tem) || NILP (p->buffer) || !inherit_process_coding_system);
+}
-:service SERVICE -- SERVICE is name of the service desired, or an
-integer specifying a port number to connect to. If SERVICE is t,
-a random port number is selected for the server. (If Emacs was
-compiled with getaddrinfo, a port number can also be specified as a
-string, e.g. "80", as well as an integer. This is not portable.)
+#ifdef HAVE_GNUTLS
+static void
+finish_after_tls_connection (Lisp_Object proc)
+{
+ struct Lisp_Process *p = XPROCESS (proc);
+ Lisp_Object contact = p->childp;
+ Lisp_Object result = Qt;
-:type TYPE -- TYPE is the type of connection. The default (nil) is a
-stream type connection, `datagram' creates a datagram type connection,
-`seqpacket' creates a reliable datagram connection.
+ if (!NILP (Ffboundp (Qnsm_verify_connection)))
+ result = call3 (Qnsm_verify_connection,
+ proc,
+ Fplist_get (contact, QChost),
+ Fplist_get (contact, QCservice));
-:family FAMILY -- FAMILY is the address (and protocol) family for the
-service specified by HOST and SERVICE. The default (nil) is to use
-whatever address family (IPv4 or IPv6) that is defined for the host
-and port number specified by HOST and SERVICE. Other address families
-supported are:
- local -- for a local (i.e. UNIX) address specified by SERVICE.
- ipv4 -- use IPv4 address family only.
- ipv6 -- use IPv6 address family only.
+ if (NILP (result))
+ {
+ pset_status (p, list2 (Qfailed,
+ build_string ("The Network Security Manager stopped the connections")));
+ deactivate_process (proc);
+ }
+ else
+ {
+ /* If we cleared the connection wait mask before we did
+ the TLS setup, then we have to say that the process
+ is finally "open" here. */
+ if (! FD_ISSET (p->outfd, &connect_wait_mask))
+ {
+ pset_status (p, Qrun);
+ /* Execute the sentinel here. If we had relied on
+ status_notify to do it later, it will read input
+ from the process before calling the sentinel. */
+ exec_sentinel (proc, build_string ("open\n"));
+ }
+ }
+}
+#endif
-:local ADDRESS -- ADDRESS is the local address used for the connection.
-This parameter is ignored when opening a client process. When specified
-for a server process, the FAMILY, HOST and SERVICE args are ignored.
+static void
+connect_network_socket (Lisp_Object proc, Lisp_Object ip_addresses,
+ Lisp_Object use_external_socket_p)
+{
+ ptrdiff_t count = SPECPDL_INDEX ();
+ ptrdiff_t count1;
+ int s = -1, outch, inch;
+ int xerrno = 0;
+ Lisp_Object ip_address;
+ int family;
+ struct sockaddr *sa = NULL;
+ int ret;
+ ptrdiff_t addrlen;
+ struct Lisp_Process *p = XPROCESS (proc);
+ Lisp_Object contact = p->childp;
+ int optbits = 0;
+ int socket_to_use = -1;
-:remote ADDRESS -- ADDRESS is the remote partner's address for the
-connection. This parameter is ignored when opening a stream server
-process. For a datagram server process, it specifies the initial
-setting of the remote datagram address. When specified for a client
-process, the FAMILY, HOST, and SERVICE args are ignored.
+ if (!NILP (use_external_socket_p))
+ {
+ socket_to_use = external_sock_fd;
-The format of ADDRESS depends on the address family:
-- An IPv4 address is represented as an vector of integers [A B C D P]
-corresponding to numeric IP address A.B.C.D and port number P.
-- A local address is represented as a string with the address in the
-local address space.
-- An "unsupported family" address is represented by a cons (F . AV)
-where F is the family number and AV is a vector containing the socket
-address data with one element per address data byte. Do not rely on
-this format in portable code, as it may depend on implementation
-defined constants, data sizes, and data structure alignment.
+ /* Ensure we don't consume the external socket twice. */
+ external_sock_fd = -1;
+ }
-:coding CODING -- If CODING is a symbol, it specifies the coding
-system used for both reading and writing for this process. If CODING
-is a cons (DECODING . ENCODING), DECODING is used for reading, and
-ENCODING is used for writing.
+ /* Do this in case we never enter the while-loop below. */
+ count1 = SPECPDL_INDEX ();
+ s = -1;
-:nowait BOOL -- If BOOL is non-nil for a stream type client process,
-return without waiting for the connection to complete; instead, the
-sentinel function will be called with second arg matching "open" (if
-successful) or "failed" when the connect completes. Default is to use
-a blocking connect (i.e. wait) for stream type connections.
+ while (!NILP (ip_addresses))
+ {
+ ip_address = XCAR (ip_addresses);
+ ip_addresses = XCDR (ip_addresses);
-:noquery BOOL -- Query the user unless BOOL is non-nil, and process is
-running when Emacs is exited.
+#ifdef WINDOWSNT
+ retry_connect:
+#endif
-:stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
-In the stopped state, a server process does not accept new
-connections, and a client process does not handle incoming traffic.
-The stopped state is cleared by `continue-process' and set by
-`stop-process'.
+ addrlen = get_lisp_to_sockaddr_size (ip_address, &family);
+ if (sa)
+ free (sa);
+ sa = xmalloc (addrlen);
+ conv_lisp_to_sockaddr (family, ip_address, sa, addrlen);
-:filter FILTER -- Install FILTER as the process filter.
+ s = socket_to_use;
+ if (s < 0)
+ {
+ s = socket (family, p->socktype | SOCK_CLOEXEC, p->ai_protocol);
+ if (s < 0)
+ {
+ xerrno = errno;
+ continue;
+ }
+ }
-:filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
-process filter are multibyte, otherwise they are unibyte.
-If this keyword is not specified, the strings are multibyte if
-the default value of `enable-multibyte-characters' is non-nil.
+#ifdef DATAGRAM_SOCKETS
+ if (!p->is_server && p->socktype == SOCK_DGRAM)
+ break;
+#endif /* DATAGRAM_SOCKETS */
-:sentinel SENTINEL -- Install SENTINEL as the process sentinel.
+ if (p->is_non_blocking_client)
+ {
+ ret = fcntl (s, F_SETFL, O_NONBLOCK);
+ if (ret < 0)
+ {
+ xerrno = errno;
+ emacs_close (s);
+ s = -1;
+ continue;
+ }
+ }
-:log LOG -- Install LOG as the server process log function. This
-function is called when the server accepts a network connection from a
-client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
-is the server process, CLIENT is the new process for the connection,
-and MESSAGE is a string.
+ /* Make us close S if quit. */
+ record_unwind_protect_int (close_file_unwind, s);
-:plist PLIST -- Install PLIST as the new process's initial plist.
+ /* Parse network options in the arg list. We simply ignore anything
+ which isn't a known option (including other keywords). An error
+ is signaled if setting a known option fails. */
+ {
+ Lisp_Object params = contact, key, val;
-:server QLEN -- if QLEN is non-nil, create a server process for the
-specified FAMILY, SERVICE, and connection type (stream or datagram).
-If QLEN is an integer, it is used as the max. length of the server's
-pending connection queue (also known as the backlog); the default
-queue length is 5. Default is to create a client process.
+ while (!NILP (params))
+ {
+ key = XCAR (params);
+ params = XCDR (params);
+ val = XCAR (params);
+ params = XCDR (params);
+ optbits |= set_socket_option (s, key, val);
+ }
+ }
-The following network options can be specified for this connection:
+ if (p->is_server)
+ {
+ /* Configure as a server socket. */
-:broadcast BOOL -- Allow send and receive of datagram broadcasts.
-:dontroute BOOL -- Only send to directly connected hosts.
-:keepalive BOOL -- Send keep-alive messages on network stream.
-:linger BOOL or TIMEOUT -- Send queued messages before closing.
+ /* SO_REUSEADDR = 1 is default for server sockets; must specify
+ explicit :reuseaddr key to override this. */
+#ifdef HAVE_LOCAL_SOCKETS
+ if (family != AF_LOCAL)
+#endif
+ if (!(optbits & (1 << OPIX_REUSEADDR)))
+ {
+ int optval = 1;
+ if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
+ report_file_error ("Cannot set reuse option on server socket", Qnil);
+ }
+
+ /* If passed a socket descriptor, it should be already bound. */
+ if (socket_to_use < 0 && bind (s, sa, addrlen) != 0)
+ report_file_error ("Cannot bind server socket", Qnil);
+
+#ifdef HAVE_GETSOCKNAME
+ if (p->port == 0)
+ {
+ struct sockaddr_in sa1;
+ socklen_t len1 = sizeof (sa1);
+ if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
+ {
+ Lisp_Object service;
+ service = make_number (ntohs (sa1.sin_port));
+ contact = Fplist_put (contact, QCservice, service);
+ /* Save the port number so that we can stash it in
+ the process object later. */
+ ((struct sockaddr_in *)sa)->sin_port = sa1.sin_port;
+ }
+ }
+#endif
+
+ if (p->socktype != SOCK_DGRAM && listen (s, p->backlog))
+ report_file_error ("Cannot listen on server socket", Qnil);
+
+ break;
+ }
+
+ immediate_quit = 1;
+ QUIT;
+
+ ret = connect (s, sa, addrlen);
+ xerrno = errno;
+
+ if (ret == 0 || xerrno == EISCONN)
+ {
+ /* The unwind-protect will be discarded afterwards.
+ Likewise for immediate_quit. */
+ break;
+ }
+
+ if (p->is_non_blocking_client && xerrno == EINPROGRESS)
+ break;
+
+#ifndef WINDOWSNT
+ if (xerrno == EINTR)
+ {
+ /* Unlike most other syscalls connect() cannot be called
+ again. (That would return EALREADY.) The proper way to
+ wait for completion is pselect(). */
+ int sc;
+ socklen_t len;
+ fd_set fdset;
+ retry_select:
+ FD_ZERO (&fdset);
+ FD_SET (s, &fdset);
+ QUIT;
+ sc = pselect (s + 1, NULL, &fdset, NULL, NULL, NULL);
+ if (sc == -1)
+ {
+ if (errno == EINTR)
+ goto retry_select;
+ else
+ report_file_error ("Failed select", Qnil);
+ }
+ eassert (sc > 0);
+
+ len = sizeof xerrno;
+ eassert (FD_ISSET (s, &fdset));
+ if (getsockopt (s, SOL_SOCKET, SO_ERROR, &xerrno, &len) < 0)
+ report_file_error ("Failed getsockopt", Qnil);
+ if (xerrno)
+ report_file_errno ("Failed connect", Qnil, xerrno);
+ break;
+ }
+#endif /* !WINDOWSNT */
+
+ immediate_quit = 0;
+
+ /* Discard the unwind protect closing S. */
+ specpdl_ptr = specpdl + count1;
+ emacs_close (s);
+ s = -1;
+
+#ifdef WINDOWSNT
+ if (xerrno == EINTR)
+ goto retry_connect;
+#endif
+ }
+
+ if (s >= 0)
+ {
+#ifdef DATAGRAM_SOCKETS
+ if (p->socktype == SOCK_DGRAM)
+ {
+ if (datagram_address[s].sa)
+ emacs_abort ();
+
+ datagram_address[s].sa = xmalloc (addrlen);
+ datagram_address[s].len = addrlen;
+ if (p->is_server)
+ {
+ Lisp_Object remote;
+ memset (datagram_address[s].sa, 0, addrlen);
+ if (remote = Fplist_get (contact, QCremote), !NILP (remote))
+ {
+ int rfamily;
+ ptrdiff_t rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
+ if (rlen != 0 && rfamily == family
+ && rlen == addrlen)
+ conv_lisp_to_sockaddr (rfamily, remote,
+ datagram_address[s].sa, rlen);
+ }
+ }
+ else
+ memcpy (datagram_address[s].sa, sa, addrlen);
+ }
+#endif
+
+ contact = Fplist_put (contact, p->is_server? QClocal: QCremote,
+ conv_sockaddr_to_lisp (sa, addrlen));
+#ifdef HAVE_GETSOCKNAME
+ if (!p->is_server)
+ {
+ struct sockaddr_in sa1;
+ socklen_t len1 = sizeof (sa1);
+ if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
+ contact = Fplist_put (contact, QClocal,
+ conv_sockaddr_to_lisp ((struct sockaddr *)&sa1, len1));
+ }
+#endif
+ }
+
+ immediate_quit = 0;
+
+ if (s < 0)
+ {
+ /* If non-blocking got this far - and failed - assume non-blocking is
+ not supported after all. This is probably a wrong assumption, but
+ the normal blocking calls to open-network-stream handles this error
+ better. */
+ if (p->is_non_blocking_client)
+ return;
+
+ report_file_errno ((p->is_server
+ ? "make server process failed"
+ : "make client process failed"),
+ contact, xerrno);
+ }
+
+ inch = s;
+ outch = s;
+
+ chan_process[inch] = proc;
+
+ fcntl (inch, F_SETFL, O_NONBLOCK);
+
+ p = XPROCESS (proc);
+ p->open_fd[SUBPROCESS_STDIN] = inch;
+ p->infd = inch;
+ p->outfd = outch;
+
+ /* Discard the unwind protect for closing S, if any. */
+ specpdl_ptr = specpdl + count1;
+
+ /* Unwind bind_polling_period and request_sigio. */
+ unbind_to (count, Qnil);
+
+ if (p->is_server && p->socktype != SOCK_DGRAM)
+ pset_status (p, Qlisten);
+
+ /* Make the process marker point into the process buffer (if any). */
+ if (BUFFERP (p->buffer))
+ set_marker_both (p->mark, p->buffer,
+ BUF_ZV (XBUFFER (p->buffer)),
+ BUF_ZV_BYTE (XBUFFER (p->buffer)));
+
+ if (p->is_non_blocking_client)
+ {
+ /* We may get here if connect did succeed immediately. However,
+ in that case, we still need to signal this like a non-blocking
+ connection. */
+ pset_status (p, Qconnect);
+ if (!FD_ISSET (inch, &connect_wait_mask))
+ {
+ FD_SET (inch, &connect_wait_mask);
+ FD_SET (inch, &write_mask);
+ num_pending_connects++;
+ }
+ }
+ else
+ /* A server may have a client filter setting of Qt, but it must
+ still listen for incoming connects unless it is stopped. */
+ if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
+ || (EQ (p->status, Qlisten) && NILP (p->command)))
+ {
+ FD_SET (inch, &input_wait_mask);
+ FD_SET (inch, &non_keyboard_wait_mask);
+ }
+
+ if (inch > max_process_desc)
+ max_process_desc = inch;
+
+ /* Set up the masks based on the process filter. */
+ set_process_filter_masks (p);
+
+ setup_process_coding_systems (proc);
+
+#ifdef HAVE_GNUTLS
+ /* Continue the asynchronous connection. */
+ if (!NILP (p->gnutls_boot_parameters))
+ {
+ Lisp_Object boot, params = p->gnutls_boot_parameters;
+
+ boot = Fgnutls_boot (proc, XCAR (params), XCDR (params));
+ p->gnutls_boot_parameters = Qnil;
+
+ if (p->gnutls_initstage == GNUTLS_STAGE_READY)
+ /* Run sentinels, etc. */
+ finish_after_tls_connection (proc);
+ else if (p->gnutls_initstage != GNUTLS_STAGE_HANDSHAKE_TRIED)
+ {
+ deactivate_process (proc);
+ if (NILP (boot))
+ pset_status (p, list2 (Qfailed,
+ build_string ("TLS negotiation failed")));
+ else
+ pset_status (p, list2 (Qfailed, boot));
+ }
+ }
+#endif
+
+}
+
+/* Create a network stream/datagram client/server process. Treated
+ exactly like a normal process when reading and writing. Primary
+ differences are in status display and process deletion. A network
+ connection has no PID; you cannot signal it. All you can do is
+ stop/continue it and deactivate/close it via delete-process. */
+
+DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
+ 0, MANY, 0,
+ doc: /* Create and return a network server or client process.
+
+In Emacs, network connections are represented by process objects, so
+input and output work as for subprocesses and `delete-process' closes
+a network connection. However, a network process has no process id,
+it cannot be signaled, and the status codes are different from normal
+processes.
+
+Arguments are specified as keyword/argument pairs. The following
+arguments are defined:
+
+:name NAME -- NAME is name for process. It is modified if necessary
+to make it unique.
+
+:buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
+with the process. Process output goes at end of that buffer, unless
+you specify an output stream or filter function to handle the output.
+BUFFER may be also nil, meaning that this process is not associated
+with any buffer.
+
+:host HOST -- HOST is name of the host to connect to, or its IP
+address. The symbol `local' specifies the local host. If specified
+for a server process, it must be a valid name or address for the local
+host, and only clients connecting to that address will be accepted.
+
+:service SERVICE -- SERVICE is name of the service desired, or an
+integer specifying a port number to connect to. If SERVICE is t,
+a random port number is selected for the server. A port number can
+be specified as an integer string, e.g., "80", as well as an integer.
+
+:type TYPE -- TYPE is the type of connection. The default (nil) is a
+stream type connection, `datagram' creates a datagram type connection,
+`seqpacket' creates a reliable datagram connection.
+
+:family FAMILY -- FAMILY is the address (and protocol) family for the
+service specified by HOST and SERVICE. The default (nil) is to use
+whatever address family (IPv4 or IPv6) that is defined for the host
+and port number specified by HOST and SERVICE. Other address families
+supported are:
+ local -- for a local (i.e. UNIX) address specified by SERVICE.
+ ipv4 -- use IPv4 address family only.
+ ipv6 -- use IPv6 address family only.
+
+:local ADDRESS -- ADDRESS is the local address used for the connection.
+This parameter is ignored when opening a client process. When specified
+for a server process, the FAMILY, HOST and SERVICE args are ignored.
+
+:remote ADDRESS -- ADDRESS is the remote partner's address for the
+connection. This parameter is ignored when opening a stream server
+process. For a datagram server process, it specifies the initial
+setting of the remote datagram address. When specified for a client
+process, the FAMILY, HOST, and SERVICE args are ignored.
+
+The format of ADDRESS depends on the address family:
+- An IPv4 address is represented as an vector of integers [A B C D P]
+corresponding to numeric IP address A.B.C.D and port number P.
+- A local address is represented as a string with the address in the
+local address space.
+- An "unsupported family" address is represented by a cons (F . AV)
+where F is the family number and AV is a vector containing the socket
+address data with one element per address data byte. Do not rely on
+this format in portable code, as it may depend on implementation
+defined constants, data sizes, and data structure alignment.
+
+:coding CODING -- If CODING is a symbol, it specifies the coding
+system used for both reading and writing for this process. If CODING
+is a cons (DECODING . ENCODING), DECODING is used for reading, and
+ENCODING is used for writing.
+
+:nowait BOOL -- If NOWAIT is non-nil for a stream type client
+process, return without waiting for the connection to complete;
+instead, the sentinel function will be called with second arg matching
+"open" (if successful) or "failed" when the connect completes.
+Default is to use a blocking connect (i.e. wait) for stream type
+connections.
+
+:noquery BOOL -- Query the user unless BOOL is non-nil, and process is
+running when Emacs is exited.
+
+:stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
+In the stopped state, a server process does not accept new
+connections, and a client process does not handle incoming traffic.
+The stopped state is cleared by `continue-process' and set by
+`stop-process'.
+
+:filter FILTER -- Install FILTER as the process filter.
+
+:filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
+process filter are multibyte, otherwise they are unibyte.
+If this keyword is not specified, the strings are multibyte if
+the default value of `enable-multibyte-characters' is non-nil.
+
+:sentinel SENTINEL -- Install SENTINEL as the process sentinel.
+
+:log LOG -- Install LOG as the server process log function. This
+function is called when the server accepts a network connection from a
+client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
+is the server process, CLIENT is the new process for the connection,
+and MESSAGE is a string.
+
+:plist PLIST -- Install PLIST as the new process's initial plist.
+
+:tls-parameters LIST -- is a list that should be supplied if you're
+opening a TLS connection. The first element is the TLS type (either
+`gnutls-x509pki' or `gnutls-anon'), and the remaining elements should
+be a keyword list accepted by gnutls-boot (as returned by
+`gnutls-boot-parameters').
+
+:server QLEN -- if QLEN is non-nil, create a server process for the
+specified FAMILY, SERVICE, and connection type (stream or datagram).
+If QLEN is an integer, it is used as the max. length of the server's
+pending connection queue (also known as the backlog); the default
+queue length is 5. Default is to create a client process.
+
+The following network options can be specified for this connection:
+
+:broadcast BOOL -- Allow send and receive of datagram broadcasts.
+:dontroute BOOL -- Only send to directly connected hosts.
+:keepalive BOOL -- Send keep-alive messages on network stream.
+:linger BOOL or TIMEOUT -- Send queued messages before closing.
:oobinline BOOL -- Place out-of-band data in receive data stream.
:priority INT -- Set protocol defined priority for sent packets.
:reuseaddr BOOL -- Allow reusing a recently used local address
(this is allowed by default for a server process).
:bindtodevice NAME -- bind to interface NAME. Using this may require
special privileges on some systems.
+:use-external-socket BOOL -- Use any pre-allocated sockets that have
+ been passed to Emacs. If Emacs wasn't
+ passed a socket, this option is silently
+ ignored.
+
Consult the relevant system programmer's manual pages for more
information on using these options.
Lisp_Object proc;
Lisp_Object contact;
struct Lisp_Process *p;
-#ifdef HAVE_GETADDRINFO
- struct addrinfo ai, *res, *lres;
- struct addrinfo hints;
const char *portstring;
- char portbuf[128];
-#else /* HAVE_GETADDRINFO */
- struct _emacs_addrinfo
- {
- int ai_family;
- int ai_socktype;
- int ai_protocol;
- int ai_addrlen;
- struct sockaddr *ai_addr;
- struct _emacs_addrinfo *ai_next;
- } ai, *res, *lres;
-#endif /* HAVE_GETADDRINFO */
- struct sockaddr_in address_in;
+ ptrdiff_t portstringlen ATTRIBUTE_UNUSED;
+ char portbuf[INT_BUFSIZE_BOUND (EMACS_INT)];
#ifdef HAVE_LOCAL_SOCKETS
struct sockaddr_un address_un;
#endif
- int port;
- int ret = 0;
- int xerrno = 0;
- int s = -1, outch, inch;
- ptrdiff_t count = SPECPDL_INDEX ();
- ptrdiff_t count1;
- Lisp_Object colon_address; /* Either QClocal or QCremote. */
+ EMACS_INT port = 0;
Lisp_Object tem;
Lisp_Object name, buffer, host, service, address;
- Lisp_Object filter, sentinel;
- bool is_non_blocking_client = 0;
- bool is_server = 0;
- int backlog = 5;
+ Lisp_Object filter, sentinel, use_external_socket_p;
+ Lisp_Object ip_addresses = Qnil;
int socktype;
int family = -1;
+ int ai_protocol = 0;
+#ifdef HAVE_GETADDRINFO_A
+ struct gaicb *dns_request = NULL;
+#endif
+ ptrdiff_t count = SPECPDL_INDEX ();
if (nargs == 0)
return Qnil;
else
error ("Unsupported connection type");
- /* :server BOOL */
- tem = Fplist_get (contact, QCserver);
- if (!NILP (tem))
- {
- /* Don't support network sockets when non-blocking mode is
- not available, since a blocked Emacs is not useful. */
- is_server = 1;
- if (TYPE_RANGED_INTEGERP (int, tem))
- backlog = XINT (tem);
- }
-
- /* Make colon_address an alias for :local (server) or :remote (client). */
- colon_address = is_server ? QClocal : QCremote;
-
- /* :nowait BOOL */
- if (!is_server && socktype != SOCK_DGRAM
- && (tem = Fplist_get (contact, QCnowait), !NILP (tem)))
- {
-#ifndef NON_BLOCKING_CONNECT
- error ("Non-blocking connect not supported");
-#else
- is_non_blocking_client = 1;
-#endif
- }
-
name = Fplist_get (contact, QCname);
buffer = Fplist_get (contact, QCbuffer);
filter = Fplist_get (contact, QCfilter);
sentinel = Fplist_get (contact, QCsentinel);
+ use_external_socket_p = Fplist_get (contact, QCuse_external_socket);
CHECK_STRING (name);
- /* Initialize addrinfo structure in case we don't use getaddrinfo. */
- ai.ai_socktype = socktype;
- ai.ai_protocol = 0;
- ai.ai_next = NULL;
- res = &ai;
-
/* :local ADDRESS or :remote ADDRESS */
- address = Fplist_get (contact, colon_address);
+ tem = Fplist_get (contact, QCserver);
+ if (!NILP (tem))
+ address = Fplist_get (contact, QCremote);
+ else
+ address = Fplist_get (contact, QClocal);
if (!NILP (address))
{
host = service = Qnil;
- if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family)))
+ if (!get_lisp_to_sockaddr_size (address, &family))
error ("Malformed :address");
- ai.ai_family = family;
- ai.ai_addr = alloca (ai.ai_addrlen);
- conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen);
+
+ ip_addresses = list1 (address);
goto open_socket;
}
tem = Fplist_get (contact, QCfamily);
if (NILP (tem))
{
-#if defined (HAVE_GETADDRINFO) && defined (AF_INET6)
+#ifdef AF_INET6
family = AF_UNSPEC;
#else
family = AF_INET;
else
error ("Unknown address family");
- ai.ai_family = family;
-
/* :service SERVICE -- string, integer (port number), or t (random port). */
service = Fplist_get (contact, QCservice);
/* :host HOST -- hostname, ip address, or 'local for localhost. */
host = Fplist_get (contact, QChost);
- if (!NILP (host))
+ if (NILP (host))
+ {
+ /* The "connection" function gets it bind info from the address we're
+ given, so use this dummy address if nothing is specified. */
+#ifdef HAVE_LOCAL_SOCKETS
+ if (family != AF_LOCAL)
+#endif
+ host = build_string ("127.0.0.1");
+ }
+ else
{
if (EQ (host, Qlocal))
/* Depending on setup, "localhost" may map to different IPv4 and/or
host = Qnil;
}
CHECK_STRING (service);
- memset (&address_un, 0, sizeof address_un);
- address_un.sun_family = AF_LOCAL;
if (sizeof address_un.sun_path <= SBYTES (service))
error ("Service name too long");
- lispstpcpy (address_un.sun_path, service);
- ai.ai_addr = (struct sockaddr *) &address_un;
- ai.ai_addrlen = sizeof address_un;
+ ip_addresses = list1 (service);
goto open_socket;
}
#endif
}
#endif
-#ifdef HAVE_GETADDRINFO
- /* If we have a host, use getaddrinfo to resolve both host and service.
- Otherwise, use getservbyname to lookup the service. */
if (!NILP (host))
{
-
/* SERVICE can either be a string or int.
Convert to a C string for later use by getaddrinfo. */
if (EQ (service, Qt))
- portstring = "0";
+ {
+ portstring = "0";
+ portstringlen = 1;
+ }
else if (INTEGERP (service))
{
- sprintf (portbuf, "%"pI"d", XINT (service));
portstring = portbuf;
+ portstringlen = sprintf (portbuf, "%"pI"d", XINT (service));
}
else
{
CHECK_STRING (service);
portstring = SSDATA (service);
+ portstringlen = SBYTES (service);
}
+ }
- immediate_quit = 1;
- QUIT;
- memset (&hints, 0, sizeof (hints));
- hints.ai_flags = 0;
- hints.ai_family = family;
- hints.ai_socktype = socktype;
- hints.ai_protocol = 0;
-
-#ifdef HAVE_RES_INIT
- res_init ();
-#endif
-
- ret = getaddrinfo (SSDATA (host), portstring, &hints, &res);
+#ifdef HAVE_GETADDRINFO_A
+ if (!NILP (host) && !NILP (Fplist_get (contact, QCnowait)))
+ {
+ ptrdiff_t hostlen = SBYTES (host);
+ struct req
+ {
+ struct gaicb gaicb;
+ struct addrinfo hints;
+ char str[FLEXIBLE_ARRAY_MEMBER];
+ } *req = xmalloc (offsetof (struct req, str)
+ + hostlen + 1 + portstringlen + 1);
+ dns_request = &req->gaicb;
+ dns_request->ar_name = req->str;
+ dns_request->ar_service = req->str + hostlen + 1;
+ dns_request->ar_request = &req->hints;
+ dns_request->ar_result = NULL;
+ memset (&req->hints, 0, sizeof req->hints);
+ req->hints.ai_family = family;
+ req->hints.ai_socktype = socktype;
+ strcpy (req->str, SSDATA (host));
+ strcpy (req->str + hostlen + 1, portstring);
+
+ int ret = getaddrinfo_a (GAI_NOWAIT, &dns_request, 1, NULL);
if (ret)
-#ifdef HAVE_GAI_STRERROR
- error ("%s/%s %s", SSDATA (host), portstring, gai_strerror (ret));
-#else
- error ("%s/%s getaddrinfo error %d", SSDATA (host), portstring, ret);
-#endif
- immediate_quit = 0;
+ error ("%s/%s getaddrinfo_a error %d", SSDATA (host), portstring, ret);
goto open_socket;
}
-#endif /* HAVE_GETADDRINFO */
-
- /* We end up here if getaddrinfo is not defined, or in case no hostname
- has been specified (e.g. for a local server process). */
-
- if (EQ (service, Qt))
- port = 0;
- else if (INTEGERP (service))
- port = htons ((unsigned short) XINT (service));
- else
- {
- struct servent *svc_info;
- CHECK_STRING (service);
- svc_info = getservbyname (SSDATA (service),
- (socktype == SOCK_DGRAM ? "udp" : "tcp"));
- if (svc_info == 0)
- error ("Unknown service: %s", SDATA (service));
- port = svc_info->s_port;
- }
+#endif /* HAVE_GETADDRINFO_A */
- memset (&address_in, 0, sizeof address_in);
- address_in.sin_family = family;
- address_in.sin_addr.s_addr = INADDR_ANY;
- address_in.sin_port = port;
+ /* If we have a host, use getaddrinfo to resolve both host and service.
+ Otherwise, use getservbyname to lookup the service. */
-#ifndef HAVE_GETADDRINFO
if (!NILP (host))
{
- struct hostent *host_info_ptr;
-
- /* gethostbyname may fail with TRY_AGAIN, but we don't honor that,
- as it may `hang' Emacs for a very long time. */
- immediate_quit = 1;
- QUIT;
-
-#ifdef HAVE_RES_INIT
- res_init ();
-#endif
-
- host_info_ptr = gethostbyname (SDATA (host));
- immediate_quit = 0;
-
- if (host_info_ptr)
- {
- memcpy (&address_in.sin_addr, host_info_ptr->h_addr,
- host_info_ptr->h_length);
- family = host_info_ptr->h_addrtype;
- address_in.sin_family = family;
- }
- else
- /* Attempt to interpret host as numeric inet address. */
- {
- unsigned long numeric_addr;
- numeric_addr = inet_addr (SSDATA (host));
- if (numeric_addr == -1)
- error ("Unknown host \"%s\"", SDATA (host));
-
- memcpy (&address_in.sin_addr, &numeric_addr,
- sizeof (address_in.sin_addr));
- }
-
- }
-#endif /* not HAVE_GETADDRINFO */
-
- ai.ai_family = family;
- ai.ai_addr = (struct sockaddr *) &address_in;
- ai.ai_addrlen = sizeof address_in;
-
- open_socket:
-
- /* Do this in case we never enter the for-loop below. */
- count1 = SPECPDL_INDEX ();
- s = -1;
-
- for (lres = res; lres; lres = lres->ai_next)
- {
- ptrdiff_t optn;
- int optbits;
-
-#ifdef WINDOWSNT
- retry_connect:
-#endif
-
- s = socket (lres->ai_family, lres->ai_socktype | SOCK_CLOEXEC,
- lres->ai_protocol);
- if (s < 0)
- {
- xerrno = errno;
- continue;
- }
-
-#ifdef DATAGRAM_SOCKETS
- if (!is_server && socktype == SOCK_DGRAM)
- break;
-#endif /* DATAGRAM_SOCKETS */
-
-#ifdef NON_BLOCKING_CONNECT
- if (is_non_blocking_client)
- {
- ret = fcntl (s, F_SETFL, O_NONBLOCK);
- if (ret < 0)
- {
- xerrno = errno;
- emacs_close (s);
- s = -1;
- continue;
- }
- }
-#endif
-
- /* Make us close S if quit. */
- record_unwind_protect_int (close_file_unwind, s);
-
- /* Parse network options in the arg list.
- We simply ignore anything which isn't a known option (including other keywords).
- An error is signaled if setting a known option fails. */
- for (optn = optbits = 0; optn < nargs - 1; optn += 2)
- optbits |= set_socket_option (s, args[optn], args[optn + 1]);
-
- if (is_server)
- {
- /* Configure as a server socket. */
-
- /* SO_REUSEADDR = 1 is default for server sockets; must specify
- explicit :reuseaddr key to override this. */
-#ifdef HAVE_LOCAL_SOCKETS
- if (family != AF_LOCAL)
-#endif
- if (!(optbits & (1 << OPIX_REUSEADDR)))
- {
- int optval = 1;
- if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
- report_file_error ("Cannot set reuse option on server socket", Qnil);
- }
-
- if (bind (s, lres->ai_addr, lres->ai_addrlen))
- report_file_error ("Cannot bind server socket", Qnil);
-
-#ifdef HAVE_GETSOCKNAME
- if (EQ (service, Qt))
- {
- struct sockaddr_in sa1;
- socklen_t len1 = sizeof (sa1);
- if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
- {
- ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port;
- service = make_number (ntohs (sa1.sin_port));
- contact = Fplist_put (contact, QCservice, service);
- }
- }
-#endif
-
- if (socktype != SOCK_DGRAM && listen (s, backlog))
- report_file_error ("Cannot listen on server socket", Qnil);
-
- break;
- }
+ struct addrinfo *res, *lres;
+ int ret;
immediate_quit = 1;
QUIT;
- ret = connect (s, lres->ai_addr, lres->ai_addrlen);
- xerrno = errno;
+ struct addrinfo hints;
+ memset (&hints, 0, sizeof hints);
+ hints.ai_family = family;
+ hints.ai_socktype = socktype;
- if (ret == 0 || xerrno == EISCONN)
+ ret = getaddrinfo (SSDATA (host), portstring, &hints, &res);
+ if (ret)
+#ifdef HAVE_GAI_STRERROR
{
- /* The unwind-protect will be discarded afterwards.
- Likewise for immediate_quit. */
- break;
+ synchronize_system_messages_locale ();
+ char const *str = gai_strerror (ret);
+ if (! NILP (Vlocale_coding_system))
+ str = SSDATA (code_convert_string_norecord
+ (build_string (str), Vlocale_coding_system, 0));
+ error ("%s/%s %s", SSDATA (host), portstring, str);
}
-
-#ifdef NON_BLOCKING_CONNECT
-#ifdef EINPROGRESS
- if (is_non_blocking_client && xerrno == EINPROGRESS)
- break;
#else
-#ifdef EWOULDBLOCK
- if (is_non_blocking_client && xerrno == EWOULDBLOCK)
- break;
-#endif
-#endif
+ error ("%s/%s getaddrinfo error %d", SSDATA (host), portstring, ret);
#endif
+ immediate_quit = 0;
-#ifndef WINDOWSNT
- if (xerrno == EINTR)
+ for (lres = res; lres; lres = lres->ai_next)
{
- /* Unlike most other syscalls connect() cannot be called
- again. (That would return EALREADY.) The proper way to
- wait for completion is pselect(). */
- int sc;
- socklen_t len;
- fd_set fdset;
- retry_select:
- FD_ZERO (&fdset);
- FD_SET (s, &fdset);
- QUIT;
- sc = pselect (s + 1, NULL, &fdset, NULL, NULL, NULL);
- if (sc == -1)
- {
- if (errno == EINTR)
- goto retry_select;
- else
- report_file_error ("Failed select", Qnil);
- }
- eassert (sc > 0);
-
- len = sizeof xerrno;
- eassert (FD_ISSET (s, &fdset));
- if (getsockopt (s, SOL_SOCKET, SO_ERROR, &xerrno, &len) < 0)
- report_file_error ("Failed getsockopt", Qnil);
- if (xerrno)
- report_file_errno ("Failed connect", Qnil, xerrno);
- break;
+ ip_addresses = Fcons (conv_sockaddr_to_lisp
+ (lres->ai_addr, lres->ai_addrlen),
+ ip_addresses);
+ ai_protocol = lres->ai_protocol;
}
-#endif /* !WINDOWSNT */
- immediate_quit = 0;
+ ip_addresses = Fnreverse (ip_addresses);
- /* Discard the unwind protect closing S. */
- specpdl_ptr = specpdl + count1;
- emacs_close (s);
- s = -1;
+ freeaddrinfo (res);
-#ifdef WINDOWSNT
- if (xerrno == EINTR)
- goto retry_connect;
-#endif
+ goto open_socket;
}
- if (s >= 0)
+ /* No hostname has been specified (e.g., a local server process). */
+
+ if (EQ (service, Qt))
+ port = 0;
+ else if (INTEGERP (service))
+ port = XINT (service);
+ else
{
-#ifdef DATAGRAM_SOCKETS
- if (socktype == SOCK_DGRAM)
+ CHECK_STRING (service);
+
+ port = -1;
+ if (SBYTES (service) != 0)
{
- if (datagram_address[s].sa)
- emacs_abort ();
- datagram_address[s].sa = xmalloc (lres->ai_addrlen);
- datagram_address[s].len = lres->ai_addrlen;
- if (is_server)
+ /* Allow the service to be a string containing the port number,
+ because that's allowed if you have getaddrbyname. */
+ char *service_end;
+ long int lport = strtol (SSDATA (service), &service_end, 10);
+ if (service_end == SSDATA (service) + SBYTES (service))
+ port = lport;
+ else
{
- Lisp_Object remote;
- memset (datagram_address[s].sa, 0, lres->ai_addrlen);
- if (remote = Fplist_get (contact, QCremote), !NILP (remote))
- {
- int rfamily, rlen;
- rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
- if (rlen != 0 && rfamily == lres->ai_family
- && rlen == lres->ai_addrlen)
- conv_lisp_to_sockaddr (rfamily, remote,
- datagram_address[s].sa, rlen);
- }
+ struct servent *svc_info
+ = getservbyname (SSDATA (service),
+ socktype == SOCK_DGRAM ? "udp" : "tcp");
+ if (svc_info)
+ port = ntohs (svc_info->s_port);
}
- else
- memcpy (datagram_address[s].sa, lres->ai_addr, lres->ai_addrlen);
- }
-#endif
- contact = Fplist_put (contact, colon_address,
- conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen));
-#ifdef HAVE_GETSOCKNAME
- if (!is_server)
- {
- struct sockaddr_in sa1;
- socklen_t len1 = sizeof (sa1);
- if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
- contact = Fplist_put (contact, QClocal,
- conv_sockaddr_to_lisp ((struct sockaddr *)&sa1, len1));
}
-#endif
- }
-
- immediate_quit = 0;
-
-#ifdef HAVE_GETADDRINFO
- if (res != &ai)
- {
- block_input ();
- freeaddrinfo (res);
- unblock_input ();
}
-#endif
-
- if (s < 0)
- {
- /* If non-blocking got this far - and failed - assume non-blocking is
- not supported after all. This is probably a wrong assumption, but
- the normal blocking calls to open-network-stream handles this error
- better. */
- if (is_non_blocking_client)
- return Qnil;
- report_file_errno ((is_server
- ? "make server process failed"
- : "make client process failed"),
- contact, xerrno);
+ if (! (0 <= port && port < 1 << 16))
+ {
+ AUTO_STRING (unknown_service, "Unknown service: %s");
+ xsignal1 (Qerror, CALLN (Fformat, unknown_service, service));
}
- inch = s;
- outch = s;
+ open_socket:
if (!NILP (buffer))
buffer = Fget_buffer_create (buffer);
proc = make_process (name);
-
- chan_process[inch] = proc;
-
- fcntl (inch, F_SETFL, O_NONBLOCK);
-
p = XPROCESS (proc);
-
pset_childp (p, contact);
pset_plist (p, Fcopy_sequence (Fplist_get (contact, QCplist)));
pset_type (p, Qnetwork);
if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
pset_command (p, Qt);
p->pid = 0;
+ p->backlog = 5;
+ p->is_non_blocking_client = false;
+ p->is_server = false;
+ p->port = port;
+ p->socktype = socktype;
+ p->ai_protocol = ai_protocol;
+#ifdef HAVE_GETADDRINFO_A
+ p->dns_request = NULL;
+#endif
+#ifdef HAVE_GNUTLS
+ tem = Fplist_get (contact, QCtls_parameters);
+ CHECK_LIST (tem);
+ p->gnutls_boot_parameters = tem;
+#endif
- p->open_fd[SUBPROCESS_STDIN] = inch;
- p->infd = inch;
- p->outfd = outch;
-
- /* Discard the unwind protect for closing S, if any. */
- specpdl_ptr = specpdl + count1;
+ set_network_socket_coding_system (proc, host, service, name);
- /* Unwind bind_polling_period and request_sigio. */
unbind_to (count, Qnil);
- if (is_server && socktype != SOCK_DGRAM)
- pset_status (p, Qlisten);
-
- /* Make the process marker point into the process buffer (if any). */
- if (BUFFERP (buffer))
- set_marker_both (p->mark, buffer,
- BUF_ZV (XBUFFER (buffer)),
- BUF_ZV_BYTE (XBUFFER (buffer)));
+ /* :server BOOL */
+ tem = Fplist_get (contact, QCserver);
+ if (!NILP (tem))
+ {
+ /* Don't support network sockets when non-blocking mode is
+ not available, since a blocked Emacs is not useful. */
+ p->is_server = true;
+ if (TYPE_RANGED_INTEGERP (int, tem))
+ p->backlog = XINT (tem);
+ }
-#ifdef NON_BLOCKING_CONNECT
- if (is_non_blocking_client)
+ /* :nowait BOOL */
+ if (!p->is_server && socktype != SOCK_DGRAM
+ && !NILP (Fplist_get (contact, QCnowait)))
+ p->is_non_blocking_client = true;
+
+#ifdef HAVE_GETADDRINFO_A
+ /* With async address resolution, the list of addresses is empty, so
+ postpone connecting to the server. */
+ if (!p->is_server && NILP (ip_addresses))
{
- /* We may get here if connect did succeed immediately. However,
- in that case, we still need to signal this like a non-blocking
- connection. */
- pset_status (p, Qconnect);
- if (!FD_ISSET (inch, &connect_wait_mask))
- {
- FD_SET (inch, &connect_wait_mask);
- FD_SET (inch, &write_mask);
- num_pending_connects++;
- }
+ p->dns_request = dns_request;
+ p->status = Qconnect;
+ return proc;
}
- else
#endif
- /* A server may have a client filter setting of Qt, but it must
- still listen for incoming connects unless it is stopped. */
- if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
- || (EQ (p->status, Qlisten) && NILP (p->command)))
- {
- FD_SET (inch, &input_wait_mask);
- FD_SET (inch, &non_keyboard_wait_mask);
- }
-
- if (inch > max_process_desc)
- max_process_desc = inch;
-
- tem = Fplist_member (contact, QCcoding);
- if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
- tem = Qnil; /* No error message (too late!). */
-
- {
- /* Setup coding systems for communicating with the network stream. */
- /* Qt denotes we have not yet called Ffind_operation_coding_system. */
- Lisp_Object coding_systems = Qt;
- Lisp_Object val;
-
- if (!NILP (tem))
- {
- val = XCAR (XCDR (tem));
- if (CONSP (val))
- val = XCAR (val);
- }
- else if (!NILP (Vcoding_system_for_read))
- val = Vcoding_system_for_read;
- else if ((!NILP (buffer) && NILP (BVAR (XBUFFER (buffer), enable_multibyte_characters)))
- || (NILP (buffer) && NILP (BVAR (&buffer_defaults, enable_multibyte_characters))))
- /* We dare not decode end-of-line format by setting VAL to
- Qraw_text, because the existing Emacs Lisp libraries
- assume that they receive bare code including a sequence of
- CR LF. */
- val = Qnil;
- else
- {
- if (NILP (host) || NILP (service))
- coding_systems = Qnil;
- else
- coding_systems = CALLN (Ffind_operation_coding_system,
- Qopen_network_stream, name, buffer,
- host, service);
- if (CONSP (coding_systems))
- val = XCAR (coding_systems);
- else if (CONSP (Vdefault_process_coding_system))
- val = XCAR (Vdefault_process_coding_system);
- else
- val = Qnil;
- }
- pset_decode_coding_system (p, val);
-
- if (!NILP (tem))
- {
- val = XCAR (XCDR (tem));
- if (CONSP (val))
- val = XCDR (val);
- }
- else if (!NILP (Vcoding_system_for_write))
- val = Vcoding_system_for_write;
- else if (NILP (BVAR (current_buffer, enable_multibyte_characters)))
- val = Qnil;
- else
- {
- if (EQ (coding_systems, Qt))
- {
- if (NILP (host) || NILP (service))
- coding_systems = Qnil;
- else
- coding_systems = CALLN (Ffind_operation_coding_system,
- Qopen_network_stream, name, buffer,
- host, service);
- }
- if (CONSP (coding_systems))
- val = XCDR (coding_systems);
- else if (CONSP (Vdefault_process_coding_system))
- val = XCDR (Vdefault_process_coding_system);
- else
- val = Qnil;
- }
- pset_encode_coding_system (p, val);
- }
- setup_process_coding_systems (proc);
-
- pset_decoding_buf (p, empty_unibyte_string);
- p->decoding_carryover = 0;
- pset_encoding_buf (p, empty_unibyte_string);
-
- p->inherit_coding_system_flag
- = !(!NILP (tem) || NILP (buffer) || !inherit_process_coding_system);
+ connect_network_socket (proc, ip_addresses, use_external_socket_p);
return proc;
}
chan_process[inchannel] = Qnil;
FD_CLR (inchannel, &input_wait_mask);
FD_CLR (inchannel, &non_keyboard_wait_mask);
-#ifdef NON_BLOCKING_CONNECT
if (FD_ISSET (inchannel, &connect_wait_mask))
{
FD_CLR (inchannel, &connect_wait_mask);
if (--num_pending_connects < 0)
emacs_abort ();
}
-#endif
if (inchannel == max_process_desc)
{
/* We just closed the highest-numbered process input descriptor,
exec_sentinel (proc, concat3 (open_from, host_string, nl));
}
+#ifdef HAVE_GETADDRINFO_A
+static Lisp_Object
+check_for_dns (Lisp_Object proc)
+{
+ struct Lisp_Process *p = XPROCESS (proc);
+ Lisp_Object ip_addresses = Qnil;
+
+ /* Sanity check. */
+ if (! p->dns_request)
+ return Qnil;
+
+ int ret = gai_error (p->dns_request);
+ if (ret == EAI_INPROGRESS)
+ return Qt;
+
+ /* We got a response. */
+ if (ret == 0)
+ {
+ struct addrinfo *res;
+
+ for (res = p->dns_request->ar_result; res; res = res->ai_next)
+ {
+ ip_addresses = Fcons (conv_sockaddr_to_lisp
+ (res->ai_addr, res->ai_addrlen),
+ ip_addresses);
+ }
+
+ ip_addresses = Fnreverse (ip_addresses);
+ }
+ /* The DNS lookup failed. */
+ else if (EQ (p->status, Qconnect))
+ {
+ deactivate_process (proc);
+ pset_status (p, (list2
+ (Qfailed,
+ concat3 (build_string ("Name lookup of "),
+ build_string (p->dns_request->ar_name),
+ build_string (" failed")))));
+ }
+
+ free_dns_request (proc);
+
+ /* This process should not already be connected (or killed). */
+ if (!EQ (p->status, Qconnect))
+ return Qnil;
+
+ return ip_addresses;
+}
+
+#endif /* HAVE_GETADDRINFO_A */
+
+static void
+wait_for_socket_fds (Lisp_Object process, char const *name)
+{
+ while (XPROCESS (process)->infd < 0
+ && EQ (XPROCESS (process)->status, Qconnect))
+ {
+ add_to_log ("Waiting for socket from %s...", build_string (name));
+ wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0);
+ }
+}
+
+static void
+wait_while_connecting (Lisp_Object process)
+{
+ while (EQ (XPROCESS (process)->status, Qconnect))
+ {
+ add_to_log ("Waiting for connection...");
+ wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0);
+ }
+}
+
+static void
+wait_for_tls_negotiation (Lisp_Object process)
+{
+#ifdef HAVE_GNUTLS
+ while (XPROCESS (process)->gnutls_p
+ && XPROCESS (process)->gnutls_initstage != GNUTLS_STAGE_READY)
+ {
+ add_to_log ("Waiting for TLS...");
+ wait_reading_process_output (0, 20 * 1000 * 1000, 0, 0, Qnil, NULL, 0);
+ }
+#endif
+}
+
/* This variable is different from waiting_for_input in keyboard.c.
It is used to communicate to a lisp process-filter/sentinel (via the
function Fwaiting_for_user_input_p below) whether Emacs was waiting
struct timespec got_output_end_time = invalid_timespec ();
enum { MINIMUM = -1, TIMEOUT, INFINITY } wait;
int got_some_output = -1;
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+ bool retry_for_async;
+#endif
ptrdiff_t count = SPECPDL_INDEX ();
/* Close to the current time if known, an invalid timespec otherwise. */
if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
break;
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+ {
+ Lisp_Object process_list_head, aproc;
+ struct Lisp_Process *p;
+
+ retry_for_async = false;
+ FOR_EACH_PROCESS(process_list_head, aproc)
+ {
+ p = XPROCESS (aproc);
+
+ if (! wait_proc || p == wait_proc)
+ {
+#ifdef HAVE_GETADDRINFO_A
+ /* Check for pending DNS requests. */
+ if (p->dns_request)
+ {
+ Lisp_Object ip_addresses = check_for_dns (aproc);
+ if (!NILP (ip_addresses) && !EQ (ip_addresses, Qt))
+ connect_network_socket (aproc, ip_addresses, Qnil);
+ else
+ retry_for_async = true;
+ }
+#endif
+#ifdef HAVE_GNUTLS
+ /* Continue TLS negotiation. */
+ if (p->gnutls_initstage == GNUTLS_STAGE_HANDSHAKE_TRIED
+ && p->is_non_blocking_client)
+ {
+ gnutls_try_handshake (p);
+ p->gnutls_handshakes_tried++;
+
+ if (p->gnutls_initstage == GNUTLS_STAGE_READY)
+ {
+ gnutls_verify_boot (aproc, Qnil);
+ finish_after_tls_connection (aproc);
+ }
+ else
+ {
+ retry_for_async = true;
+ if (p->gnutls_handshakes_tried
+ > GNUTLS_EMACS_HANDSHAKES_LIMIT)
+ {
+ deactivate_process (aproc);
+ pset_status (p, list2 (Qfailed,
+ build_string ("TLS negotiation failed")));
+ }
+ }
+ }
+#endif
+ }
+ }
+ }
+#endif /* GETADDRINFO_A or GNUTLS */
+
/* Compute time from now till when time limit is up. */
/* Exit if already run out. */
if (wait == TIMEOUT)
timeout = make_timespec (0, 0);
if ((pselect (max (max_process_desc, max_input_desc) + 1,
&Atemp,
-#ifdef NON_BLOCKING_CONNECT
(num_pending_connects > 0 ? &Ctemp : NULL),
-#else
- NULL,
-#endif
NULL, &timeout, NULL)
<= 0))
{
if (timeout.tv_sec > 0 || timeout.tv_nsec > 0)
now = invalid_timespec ();
+#if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS
+ if (retry_for_async
+ && (timeout.tv_sec > 0 || timeout.tv_nsec > ASYNC_RETRY_NSEC))
+ {
+ timeout.tv_sec = 0;
+ timeout.tv_nsec = ASYNC_RETRY_NSEC;
+ }
+#endif
+
#if defined (HAVE_NS)
nfds = ns_select
#elif defined (HAVE_GLIB)
list2 (Qexit, make_number (256)));
}
}
-#ifdef NON_BLOCKING_CONNECT
if (FD_ISSET (channel, &Writeok)
&& FD_ISSET (channel, &connect_wait_mask))
{
}
else
{
- pset_status (p, Qrun);
- /* Execute the sentinel here. If we had relied on
- status_notify to do it later, it will read input
- from the process before calling the sentinel. */
- exec_sentinel (proc, build_string ("open\n"));
+#ifdef HAVE_GNUTLS
+ /* If we have an incompletely set up TLS connection,
+ then defer the sentinel signaling until
+ later. */
+ if (NILP (p->gnutls_boot_parameters)
+ && !p->gnutls_p)
+#endif
+ {
+ pset_status (p, Qrun);
+ /* Execute the sentinel here. If we had relied on
+ status_notify to do it later, it will read input
+ from the process before calling the sentinel. */
+ exec_sentinel (proc, build_string ("open\n"));
+ }
+
if (0 <= p->infd && !EQ (p->filter, Qt)
&& !EQ (p->command, Qt))
{
}
}
}
-#endif /* NON_BLOCKING_CONNECT */
} /* End for each file descriptor. */
} /* End while exit conditions not met. */
ssize_t rv;
struct coding_system *coding;
+ if (NETCONN_P (proc))
+ {
+ wait_while_connecting (proc);
+ wait_for_tls_negotiation (proc);
+ }
+
if (p->raw_status_new)
update_status (p);
if (! EQ (p->status, Qrun))
Called from program, takes three arguments, PROCESS, START and END.
If the region is more than 500 characters long,
it is sent in several bunches. This may happen even for shorter regions.
-Output from processes can arrive in between bunches. */)
+Output from processes can arrive in between bunches.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed. */)
(Lisp_Object process, Lisp_Object start, Lisp_Object end)
{
Lisp_Object proc = get_process (process);
if (XINT (start) < GPT && XINT (end) > GPT)
move_gap_both (XINT (start), start_byte);
+ if (NETCONN_P (proc))
+ wait_while_connecting (proc);
+
send_process (proc, (char *) BYTE_POS_ADDR (start_byte),
end_byte - start_byte, Fcurrent_buffer ());
nil, indicating the current buffer's process.
If STRING is more than 500 characters long,
it is sent in several bunches. This may happen even for shorter strings.
-Output from processes can arrive in between bunches. */)
+Output from processes can arrive in between bunches.
+
+If PROCESS is a non-blocking network process that hasn't been fully
+set up yet, this function will block until socket setup has completed. */)
(Lisp_Object process, Lisp_Object string)
{
- Lisp_Object proc;
CHECK_STRING (string);
- proc = get_process (process);
+ Lisp_Object proc = get_process (process);
send_process (proc, SSDATA (string),
SBYTES (string), string);
return Qnil;
{
/* Initialize in case ioctl doesn't exist or gives an error,
in a way that will cause returning t. */
- pid_t gid;
- Lisp_Object proc;
- struct Lisp_Process *p;
-
- proc = get_process (process);
- p = XPROCESS (proc);
+ Lisp_Object proc = get_process (process);
+ struct Lisp_Process *p = XPROCESS (proc);
if (!EQ (p->type, Qreal))
error ("Process %s is not a subprocess",
error ("Process %s is not active",
SDATA (p->name));
- gid = emacs_get_tty_pgrp (p);
+ pid_t gid = emacs_get_tty_pgrp (p);
if (gid == p->pid)
return Qnil;
break;
case SIGTSTP:
-#if defined (VSWTCH) && !defined (PREFER_VSUSP)
+#ifdef VSWTCH
sig_char = &t.c_cc[VSWTCH];
#else
sig_char = &t.c_cc[VSUSP];
struct coding_system *coding = NULL;
int outfd;
- if (DATAGRAM_CONN_P (process))
+ proc = get_process (process);
+
+ if (NETCONN_P (proc))
+ wait_while_connecting (proc);
+
+ if (DATAGRAM_CONN_P (proc))
return process;
- proc = get_process (process);
+
outfd = XPROCESS (proc)->outfd;
if (outfd >= 0)
coding = proc_encode_coding_system[outfd];
Sset_process_coding_system, 1, 3, 0,
doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
DECODING will be used to decode subprocess output and ENCODING to
-encode subprocess input. */)
- (register Lisp_Object process, Lisp_Object decoding, Lisp_Object encoding)
+encode subprocess input. */)
+ (Lisp_Object process, Lisp_Object decoding, Lisp_Object encoding)
{
- register struct Lisp_Process *p;
-
CHECK_PROCESS (process);
- p = XPROCESS (process);
- if (p->infd < 0)
- error ("Input file descriptor of %s closed", SDATA (p->name));
- if (p->outfd < 0)
- error ("Output file descriptor of %s closed", SDATA (p->name));
+
+ struct Lisp_Process *p = XPROCESS (process);
+
Fcheck_coding_system (decoding);
Fcheck_coding_system (encoding);
encoding = coding_inherit_eol_type (encoding, Qnil);
pset_decode_coding_system (p, decoding);
pset_encode_coding_system (p, encoding);
+
+ /* If the sockets haven't been set up yet, the final setup part of
+ this will be called asynchronously. */
+ if (p->infd < 0 || p->outfd < 0)
+ return Qnil;
+
setup_process_coding_systems (process);
return Qnil;
suppressed. */)
(Lisp_Object process, Lisp_Object flag)
{
- register struct Lisp_Process *p;
-
CHECK_PROCESS (process);
- p = XPROCESS (process);
+
+ struct Lisp_Process *p = XPROCESS (process);
if (NILP (flag))
pset_decode_coding_system
(p, raw_text_coding_system (p->decode_coding_system));
+
+ /* If the sockets haven't been set up yet, the final setup part of
+ this will be called asynchronously. */
+ if (p->infd < 0 || p->outfd < 0)
+ return Qnil;
+
setup_process_coding_systems (process);
return Qnil;
doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
(Lisp_Object process)
{
- register struct Lisp_Process *p;
- struct coding_system *coding;
-
CHECK_PROCESS (process);
- p = XPROCESS (process);
+ struct Lisp_Process *p = XPROCESS (process);
if (p->infd < 0)
return Qnil;
- coding = proc_decode_coding_system[p->infd];
+ struct coding_system *coding = proc_decode_coding_system[p->infd];
return (CODING_FOR_UNIBYTE (coding) ? Qnil : Qt);
}
/* This is not called "init_process" because that is the name of a
Mach system call, so it would cause problems on Darwin systems. */
void
-init_process_emacs (void)
+init_process_emacs (int sockfd)
{
#ifdef subprocesses
- register int i;
+ int i;
inhibit_sentinels = 0;
FD_ZERO (&non_process_wait_mask);
FD_ZERO (&write_mask);
max_process_desc = max_input_desc = -1;
+ external_sock_fd = sockfd;
memset (fd_callback_info, 0, sizeof (fd_callback_info));
-#ifdef NON_BLOCKING_CONNECT
FD_ZERO (&connect_wait_mask);
num_pending_connects = 0;
-#endif
process_output_delay_count = 0;
process_output_skip = 0;
DEFSYM (QCserver, ":server");
DEFSYM (QCnowait, ":nowait");
DEFSYM (QCsentinel, ":sentinel");
+ DEFSYM (QCuse_external_socket, ":use-external-socket");
+ DEFSYM (QCtls_parameters, ":tls-parameters");
+ DEFSYM (Qnsm_verify_connection, "nsm-verify-connection");
DEFSYM (QClog, ":log");
DEFSYM (QCnoquery, ":noquery");
DEFSYM (QCstop, ":stop");
#define ADD_SUBFEATURE(key, val) \
subfeatures = pure_cons (pure_cons (key, pure_cons (val, Qnil)), subfeatures)
-#ifdef NON_BLOCKING_CONNECT
ADD_SUBFEATURE (QCnowait, Qt);
-#endif
#ifdef DATAGRAM_SOCKETS
ADD_SUBFEATURE (QCtype, Qdatagram);
#endif
#ifdef HAVE_GNUTLS
Lisp_Object gnutls_cred_type;
+ Lisp_Object gnutls_boot_parameters;
#endif
/* Pipe process attached to the standard error of this process. */
flag indicates that `raw_status' contains a new status that still
needs to be synced to `status'. */
bool_bf raw_status_new : 1;
+ /* Whether this is a nonblocking socket. */
+ bool_bf is_non_blocking_client : 1;
+ /* Whether this is a server or a client socket. */
+ bool_bf is_server : 1;
int raw_status;
+ /* The length of the socket backlog. */
+ int backlog;
+ /* The port number. */
+ int port;
+ /* The socket type. */
+ int socktype;
+ /* The socket protocol. */
+ int ai_protocol;
+
+#ifdef HAVE_GETADDRINFO_A
+ /* Whether the socket is waiting for response from an asynchronous
+ DNS call. */
+ struct gaicb *dns_request;
+#endif
#ifdef HAVE_GNUTLS
gnutls_initstage_t gnutls_initstage;
int gnutls_log_level;
int gnutls_handshakes_tried;
bool_bf gnutls_p : 1;
+ bool_bf gnutls_complete_negotiation_p : 1;
#endif
};
p->childp = val;
}
+INLINE void
+pset_status (struct Lisp_Process *p, Lisp_Object val)
+{
+ p->status = val;
+}
+
#ifdef HAVE_GNUTLS
INLINE void
pset_gnutls_cred_type (struct Lisp_Process *p, Lisp_Object val)
extern void record_deleted_pid (pid_t, Lisp_Object);
struct sockaddr;
-extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, int);
+extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, ptrdiff_t);
extern void hold_keyboard_input (void);
extern void unhold_keyboard_input (void);
extern bool kbd_on_hold_p (void);
static void
handle_profiler_signal (int signal)
{
- if (EQ (backtrace_top_function (), Qautomatic_gc))
+ if (EQ (backtrace_top_function (), QAutomatic_GC))
/* Special case the time-count inside GC because the hash-table
code is not prepared to be used while the GC is running.
More specifically it uses ASIZE at many places where it does
cpu_log = (profiler_cpu_running
? make_log (profiler_log_size, profiler_max_stack_depth)
: Qnil);
- Fputhash (Fmake_vector (make_number (1), Qautomatic_gc),
+ Fputhash (Fmake_vector (make_number (1), QAutomatic_GC),
make_number (cpu_gc_count),
result);
cpu_gc_count = 0;
rather than all of them. This means allowing for a possible
hole between the first bloc and the end of malloc storage. */
-#ifdef emacs
-
#include <config.h>
-#include "lisp.h" /* Needed for VALBITS. */
-#include "blockinput.h"
-
-#include <unistd.h>
-
-#ifdef DOUG_LEA_MALLOC
-#define M_TOP_PAD -2
-extern int mallopt (int, int);
-#else /* not DOUG_LEA_MALLOC */
-#if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
-extern size_t __malloc_extra_blocks;
-#endif /* not SYSTEM_MALLOC and not HYBRID_MALLOC */
-#endif /* not DOUG_LEA_MALLOC */
-
-#else /* not emacs */
-
#include <stddef.h>
-#include <malloc.h>
-
-#endif /* not emacs */
+#ifdef emacs
+# include "lisp.h"
+# include "blockinput.h"
+# include <unistd.h>
+#endif
#include "getpagesize.h"
/* The hook `malloc' uses for the function which gets more space
from the system. */
-#if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
+#ifdef HAVE_MALLOC_H
+# include <malloc.h>
+#else
extern void *(*__morecore) (ptrdiff_t);
#endif
void *val = malloc (size);
if (!val && size)
{
- write (2, "virtual memory exhausted\n", 25);
+ write (STDERR_FILENO, "virtual memory exhausted\n", 25);
exit (1);
}
return val;
val = realloc (block, size);
if (!val && size)
{
- write (2, "virtual memory exhausted\n", 25);
+ write (STDERR_FILENO, "virtual memory exhausted\n", 25);
exit (1);
}
return val;
if (p == pend)
{
- ptrdiff_t dcnt;
-
/* End of pattern means we might have succeeded. */
DEBUG_PRINT ("end of pattern ... ");
longest match, try backtracking. */
if (d != end_match_2)
{
- /* 1 if this match ends in the same string (string1 or string2)
- as the best previous match. */
- boolean same_str_p = (FIRST_STRING_P (match_end)
- == FIRST_STRING_P (d));
- /* 1 if this match is the best seen so far. */
- boolean best_match_p;
-
- /* AIX compiler got confused when this was combined
- with the previous declaration. */
- if (same_str_p)
- best_match_p = d > match_end;
- else
- best_match_p = !FIRST_STRING_P (d);
+ /* True if this match is the best seen so far. */
+ bool best_match_p;
+
+ {
+ /* True if this match ends in the same string (string1
+ or string2) as the best previous match. */
+ bool same_str_p = (FIRST_STRING_P (match_end)
+ == FIRST_STRING_P (d));
+
+ /* AIX compiler got confused when this was combined
+ with the previous declaration. */
+ if (same_str_p)
+ best_match_p = d > match_end;
+ else
+ best_match_p = !FIRST_STRING_P (d);
+ }
DEBUG_PRINT ("backtracking.\n");
nfailure_points_pushed - nfailure_points_popped);
DEBUG_PRINT ("%u registers pushed.\n", num_regs_pushed);
- dcnt = POINTER_TO_OFFSET (d) - pos;
+ ptrdiff_t dcnt = POINTER_TO_OFFSET (d) - pos;
DEBUG_PRINT ("Returning %td from re_match_2.\n", dcnt);
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
+
+#include "sheap.h"
+
#include <stdio.h>
#include "lisp.h"
#include <unistd.h>
#include <stdlib.h> /* for exit */
-#ifdef ENABLE_CHECKING
-#define STATIC_HEAP_SIZE (28 * 1024 * 1024)
-#else
-#define STATIC_HEAP_SIZE (19 * 1024 * 1024)
-#endif
-
-int debug_sheap = 0;
-
-#define BLOCKSIZE 4096
+static int debug_sheap;
char bss_sbrk_buffer[STATIC_HEAP_SIZE];
-/* The following is needed in gmalloc.c */
-void *bss_sbrk_buffer_end = bss_sbrk_buffer + STATIC_HEAP_SIZE;
-char *bss_sbrk_ptr;
char *max_bss_sbrk_ptr;
-int bss_sbrk_did_unexec;
+bool bss_sbrk_did_unexec;
void *
bss_sbrk (ptrdiff_t request_size)
{
+ static char *bss_sbrk_ptr;
+
if (!bss_sbrk_ptr)
{
max_bss_sbrk_ptr = bss_sbrk_ptr = bss_sbrk_buffer;
#ifdef CYGWIN
- sbrk (BLOCKSIZE); /* force space for fork to work */
+ /* Force space for fork to work. */
+ sbrk (4096);
#endif
}
- if (!(int) request_size)
- {
- return (bss_sbrk_ptr);
- }
- else if (bss_sbrk_ptr + (int) request_size < bss_sbrk_buffer)
+ int used = bss_sbrk_ptr - bss_sbrk_buffer;
+
+ if (request_size < -used)
{
- printf
- ("attempt to free too much: avail %d used %d failed request %d\n",
- STATIC_HEAP_SIZE, bss_sbrk_ptr - bss_sbrk_buffer,
- (int) request_size);
+ printf (("attempt to free too much: "
+ "avail %d used %d failed request %"pD"d\n"),
+ STATIC_HEAP_SIZE, used, request_size);
exit (-1);
return 0;
}
- else if (bss_sbrk_ptr + (int) request_size >
- bss_sbrk_buffer + STATIC_HEAP_SIZE)
+ else if (STATIC_HEAP_SIZE - used < request_size)
{
- printf ("static heap exhausted: avail %d used %d failed request %d\n",
- STATIC_HEAP_SIZE,
- bss_sbrk_ptr - bss_sbrk_buffer, (int) request_size);
+ printf ("static heap exhausted: avail %d used %d failed request %"pD"d\n",
+ STATIC_HEAP_SIZE, used, request_size);
exit (-1);
return 0;
}
- else if ((int) request_size < 0)
- {
- bss_sbrk_ptr += (int) request_size;
- if (debug_sheap)
- printf ("freed size %d\n", request_size);
- return bss_sbrk_ptr;
- }
- else
+
+ void *ret = bss_sbrk_ptr;
+ bss_sbrk_ptr += request_size;
+ if (max_bss_sbrk_ptr < bss_sbrk_ptr)
+ max_bss_sbrk_ptr = bss_sbrk_ptr;
+ if (debug_sheap)
{
- char *ret = bss_sbrk_ptr;
- if (debug_sheap)
- printf ("allocated 0x%08x size %d\n", ret, request_size);
- bss_sbrk_ptr += (int) request_size;
- if (bss_sbrk_ptr > max_bss_sbrk_ptr)
- max_bss_sbrk_ptr = bss_sbrk_ptr;
- return ret;
+ if (request_size < 0)
+ printf ("freed size %"pD"d\n", request_size);
+ else
+ printf ("allocated %p size %"pD"d\n", ret, request_size);
}
-}
-
-void
-report_sheap_usage (int die_if_pure_storage_exceeded)
-{
- char buf[200];
- sprintf (buf, "Maximum static heap usage: %d of %d bytes",
- max_bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE);
- /* Don't log messages, cause at this point, we're not allowed to create
- buffers. */
- message1_nolog (buf);
+ return ret;
}
--- /dev/null
+/* Static heap allocation for GNU Emacs.
+
+Copyright 2016 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stddef.h>
+#include "lisp.h"
+
+/* Size of the static heap. Guess a value that is probably too large,
+ by up to a factor of four or so. Typically the unused part is not
+ paged in and so does not cost much. */
+enum { STATIC_HEAP_SIZE = sizeof (Lisp_Object) << 22 };
+
+extern char bss_sbrk_buffer[STATIC_HEAP_SIZE];
+extern char *max_bss_sbrk_ptr;
+extern bool bss_sbrk_did_unexec;
+extern void *bss_sbrk (ptrdiff_t);
return (flags >> 19) & 1;
}
static bool
+SYNTAX_FLAGS_COMSTARTEND_FIRST (int flags)
+{
+ return (flags & 0x50000) != 0;
+}
+static bool
SYNTAX_FLAGS_PREFIX (int flags)
{
return (flags >> 20) & 1;
ptrdiff_t comstr_start; /* Position of last comment/string starter. */
Lisp_Object levelstarts; /* Char numbers of starts-of-expression
of levels (starting from outermost). */
+ int prev_syntax; /* Syntax of previous position scanned, when
+ that position (potentially) holds the first char
+ of a 2-char construct, i.e. comment delimiter
+ or Sescape, etc. Smax otherwise. */
};
\f
/* These variables are a cache for finding the start of a defun.
static Lisp_Object scan_lists (EMACS_INT, EMACS_INT, EMACS_INT, bool);
static void scan_sexps_forward (struct lisp_parse_state *,
ptrdiff_t, ptrdiff_t, ptrdiff_t, EMACS_INT,
- bool, Lisp_Object, int);
+ bool, int);
+static void internalize_parse_state (Lisp_Object, struct lisp_parse_state *);
static bool in_classes (int, Lisp_Object);
static void parse_sexp_propertize (ptrdiff_t charpos);
}
do
{
+ internalize_parse_state (Qnil, &state);
scan_sexps_forward (&state,
defun_start, defun_start_byte,
comment_end, TYPE_MINIMUM (EMACS_INT),
- 0, Qnil, 0);
+ 0, 0);
defun_start = comment_end;
if (!adjusted)
{
PREV_SYNTAX is the SYNTAX_WITH_FLAGS of the previous character
(or 0 If the search cannot start in the middle of a two-character).
- If successful, return true and store the charpos of the comment's end
- into *CHARPOS_PTR and the corresponding bytepos into *BYTEPOS_PTR.
- Else, return false and store the charpos STOP into *CHARPOS_PTR, the
- corresponding bytepos into *BYTEPOS_PTR and the current nesting
- (as defined for state.incomment) in *INCOMMENT_PTR.
+ If successful, return true and store the charpos of the comment's
+ end into *CHARPOS_PTR and the corresponding bytepos into
+ *BYTEPOS_PTR. Else, return false and store the charpos STOP into
+ *CHARPOS_PTR, the corresponding bytepos into *BYTEPOS_PTR and the
+ current nesting (as defined for state->incomment) in
+ *INCOMMENT_PTR. Should the last character scanned in an incomplete
+ comment be a possible first character of a two character construct,
+ we store its SYNTAX_WITH_FLAGS into *last_syntax_ptr. Otherwise,
+ we store Smax into *last_syntax_ptr.
The comment end is the last character of the comment rather than the
character just after the comment.
forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
EMACS_INT nesting, int style, int prev_syntax,
ptrdiff_t *charpos_ptr, ptrdiff_t *bytepos_ptr,
- EMACS_INT *incomment_ptr)
+ EMACS_INT *incomment_ptr, int *last_syntax_ptr)
{
register int c, c1;
register enum syntaxcode code;
/* Enter the loop in the middle so that we find
a 2-char comment ender if we start in the middle of it. */
syntax = prev_syntax;
- if (syntax != 0) goto forw_incomment;
+ code = syntax & 0xff;
+ if (syntax != 0 && from < stop) goto forw_incomment;
while (1)
{
*incomment_ptr = nesting;
*charpos_ptr = from;
*bytepos_ptr = from_byte;
+ *last_syntax_ptr =
+ (code == Sescape || code == Scharquote
+ || SYNTAX_FLAGS_COMEND_FIRST (syntax)
+ || (nesting > 0
+ && SYNTAX_FLAGS_COMSTART_FIRST (syntax)))
+ ? syntax : Smax ;
return 0;
}
c = FETCH_CHAR_AS_MULTIBYTE (from_byte);
SYNTAX_FLAGS_COMMENT_NESTED (other_syntax))
? nesting > 0 : nesting < 0))
{
- if (--nesting <= 0)
+ syntax = Smax; /* So that "|#" (lisp) can not return
+ the syntax of "#" in *last_syntax_ptr. */
+ if (--nesting <= 0)
/* We have encountered a comment end of the same style
as the comment sequence which began this comment section. */
break;
/* We have encountered a nested comment of the same style
as the comment sequence which began this comment section. */
{
+ syntax = Smax; /* So that "#|#" isn't also a comment ender. */
INC_BOTH (from, from_byte);
UPDATE_SYNTAX_TABLE_FORWARD (from);
nesting++;
}
*charpos_ptr = from;
*bytepos_ptr = from_byte;
+ *last_syntax_ptr = Smax; /* Any syntactic power the last byte had is
+ used up. */
return 1;
}
EMACS_INT count1;
ptrdiff_t out_charpos, out_bytepos;
EMACS_INT dummy;
+ int dummy2;
CHECK_NUMBER (count);
count1 = XINT (count);
}
/* We're at the start of a comment. */
found = forw_comment (from, from_byte, stop, comnested, comstyle, 0,
- &out_charpos, &out_bytepos, &dummy);
+ &out_charpos, &out_bytepos, &dummy, &dummy2);
from = out_charpos; from_byte = out_bytepos;
if (!found)
{
ptrdiff_t from_byte;
ptrdiff_t out_bytepos, out_charpos;
EMACS_INT dummy;
+ int dummy2;
bool multibyte_symbol_p = sexpflag && multibyte_syntax_as_symbol;
if (depth > 0) min_depth = 0;
UPDATE_SYNTAX_TABLE_FORWARD (from);
found = forw_comment (from, from_byte, stop,
comnested, comstyle, 0,
- &out_charpos, &out_bytepos, &dummy);
+ &out_charpos, &out_bytepos, &dummy,
+ &dummy2);
from = out_charpos, from_byte = out_bytepos;
if (!found)
{
}
\f
/* Parse forward from FROM / FROM_BYTE to END,
- assuming that FROM has state OLDSTATE (nil means FROM is start of function),
+ assuming that FROM has state STATE,
and return a description of the state of the parse at END.
If STOPBEFORE, stop at the start of an atom.
If COMMENTSTOP is 1, stop at the start of a comment.
after the beginning of a string, or after the end of a string. */
static void
-scan_sexps_forward (struct lisp_parse_state *stateptr,
+scan_sexps_forward (struct lisp_parse_state *state,
ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t end,
EMACS_INT targetdepth, bool stopbefore,
- Lisp_Object oldstate, int commentstop)
+ int commentstop)
{
- struct lisp_parse_state state;
enum syntaxcode code;
int c1;
bool comnested;
Lisp_Object tem;
ptrdiff_t prev_from; /* Keep one character before FROM. */
ptrdiff_t prev_from_byte;
- int prev_from_syntax;
+ int prev_from_syntax, prev_prev_from_syntax;
bool boundary_stop = commentstop == -1;
bool nofence;
bool found;
do { prev_from = from; \
prev_from_byte = from_byte; \
temp = FETCH_CHAR_AS_MULTIBYTE (prev_from_byte); \
+ prev_prev_from_syntax = prev_from_syntax; \
prev_from_syntax = SYNTAX_WITH_FLAGS (temp); \
INC_BOTH (from, from_byte); \
if (from < end) \
immediate_quit = 1;
QUIT;
- if (NILP (oldstate))
- {
- depth = 0;
- state.instring = -1;
- state.incomment = 0;
- state.comstyle = 0; /* comment style a by default. */
- state.comstr_start = -1; /* no comment/string seen. */
- }
- else
- {
- tem = Fcar (oldstate);
- if (!NILP (tem))
- depth = XINT (tem);
- else
- depth = 0;
-
- oldstate = Fcdr (oldstate);
- oldstate = Fcdr (oldstate);
- oldstate = Fcdr (oldstate);
- tem = Fcar (oldstate);
- /* Check whether we are inside string_fence-style string: */
- state.instring = (!NILP (tem)
- ? (CHARACTERP (tem) ? XFASTINT (tem) : ST_STRING_STYLE)
- : -1);
-
- oldstate = Fcdr (oldstate);
- tem = Fcar (oldstate);
- state.incomment = (!NILP (tem)
- ? (INTEGERP (tem) ? XINT (tem) : -1)
- : 0);
-
- oldstate = Fcdr (oldstate);
- tem = Fcar (oldstate);
- start_quoted = !NILP (tem);
+ depth = state->depth;
+ start_quoted = state->quoted;
+ prev_prev_from_syntax = Smax;
+ prev_from_syntax = state->prev_syntax;
- /* if the eighth element of the list is nil, we are in comment
- style a. If it is non-nil, we are in comment style b */
- oldstate = Fcdr (oldstate);
- oldstate = Fcdr (oldstate);
- tem = Fcar (oldstate);
- state.comstyle = (NILP (tem)
- ? 0
- : (RANGED_INTEGERP (0, tem, ST_COMMENT_STYLE)
- ? XINT (tem)
- : ST_COMMENT_STYLE));
-
- oldstate = Fcdr (oldstate);
- tem = Fcar (oldstate);
- state.comstr_start =
- RANGED_INTEGERP (PTRDIFF_MIN, tem, PTRDIFF_MAX) ? XINT (tem) : -1;
- oldstate = Fcdr (oldstate);
- tem = Fcar (oldstate);
- while (!NILP (tem)) /* >= second enclosing sexps. */
- {
- Lisp_Object temhd = Fcar (tem);
- if (RANGED_INTEGERP (PTRDIFF_MIN, temhd, PTRDIFF_MAX))
- curlevel->last = XINT (temhd);
- if (++curlevel == endlevel)
- curlevel--; /* error ("Nesting too deep for parser"); */
- curlevel->prev = -1;
- curlevel->last = -1;
- tem = Fcdr (tem);
- }
+ tem = state->levelstarts;
+ while (!NILP (tem)) /* >= second enclosing sexps. */
+ {
+ Lisp_Object temhd = Fcar (tem);
+ if (RANGED_INTEGERP (PTRDIFF_MIN, temhd, PTRDIFF_MAX))
+ curlevel->last = XINT (temhd);
+ if (++curlevel == endlevel)
+ curlevel--; /* error ("Nesting too deep for parser"); */
+ curlevel->prev = -1;
+ curlevel->last = -1;
+ tem = Fcdr (tem);
}
- state.quoted = 0;
- mindepth = depth;
-
curlevel->prev = -1;
curlevel->last = -1;
- SETUP_SYNTAX_TABLE (prev_from, 1);
- temp = FETCH_CHAR (prev_from_byte);
- prev_from_syntax = SYNTAX_WITH_FLAGS (temp);
- UPDATE_SYNTAX_TABLE_FORWARD (from);
+ state->quoted = 0;
+ mindepth = depth;
+
+ SETUP_SYNTAX_TABLE (from, 1);
/* Enter the loop at a place appropriate for initial state. */
- if (state.incomment)
+ if (state->incomment)
goto startincomment;
- if (state.instring >= 0)
+ if (state->instring >= 0)
{
- nofence = state.instring != ST_STRING_STYLE;
+ nofence = state->instring != ST_STRING_STYLE;
if (start_quoted)
goto startquotedinstring;
goto startinstring;
while (from < end)
{
int syntax;
- INC_FROM;
- code = prev_from_syntax & 0xff;
- if (from < end
- && SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax)
+ if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax)
&& (c1 = FETCH_CHAR (from_byte),
syntax = SYNTAX_WITH_FLAGS (c1),
SYNTAX_FLAGS_COMSTART_SECOND (syntax)))
/* Record the comment style we have entered so that only
the comment-end sequence of the same style actually
terminates the comment section. */
- state.comstyle
+ state->comstyle
= SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax);
comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax)
| SYNTAX_FLAGS_COMMENT_NESTED (syntax));
- state.incomment = comnested ? 1 : -1;
- state.comstr_start = prev_from;
+ state->incomment = comnested ? 1 : -1;
+ state->comstr_start = prev_from;
INC_FROM;
+ prev_from_syntax = Smax; /* the syntax has already been
+ "used up". */
code = Scomment;
}
- else if (code == Scomment_fence)
- {
- /* Record the comment style we have entered so that only
- the comment-end sequence of the same style actually
- terminates the comment section. */
- state.comstyle = ST_COMMENT_STYLE;
- state.incomment = -1;
- state.comstr_start = prev_from;
- code = Scomment;
- }
- else if (code == Scomment)
- {
- state.comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0);
- state.incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ?
- 1 : -1);
- state.comstr_start = prev_from;
- }
+ else
+ {
+ INC_FROM;
+ code = prev_from_syntax & 0xff;
+ if (code == Scomment_fence)
+ {
+ /* Record the comment style we have entered so that only
+ the comment-end sequence of the same style actually
+ terminates the comment section. */
+ state->comstyle = ST_COMMENT_STYLE;
+ state->incomment = -1;
+ state->comstr_start = prev_from;
+ code = Scomment;
+ }
+ else if (code == Scomment)
+ {
+ state->comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0);
+ state->incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ?
+ 1 : -1);
+ state->comstr_start = prev_from;
+ }
+ }
if (SYNTAX_FLAGS_PREFIX (prev_from_syntax))
continue;
case Scomment_fence: /* Can't happen because it's handled above. */
case Scomment:
- if (commentstop || boundary_stop) goto done;
+ if (commentstop || boundary_stop) goto done;
startincomment:
/* The (from == BEGV) test was to enter the loop in the middle so
that we find a 2-char comment ender even if we start in the
middle of it. We don't want to do that if we're just at the
beginning of the comment (think of (*) ... (*)). */
found = forw_comment (from, from_byte, end,
- state.incomment, state.comstyle,
- (from == BEGV || from < state.comstr_start + 3)
- ? 0 : prev_from_syntax,
- &out_charpos, &out_bytepos, &state.incomment);
+ state->incomment, state->comstyle,
+ from == BEGV ? 0 : prev_from_syntax,
+ &out_charpos, &out_bytepos, &state->incomment,
+ &prev_from_syntax);
from = out_charpos; from_byte = out_bytepos;
- /* Beware! prev_from and friends are invalid now.
- Luckily, the `done' doesn't use them and the INC_FROM
- sets them to a sane value without looking at them. */
+ /* Beware! prev_from and friends (except prev_from_syntax)
+ are invalid now. Luckily, the `done' doesn't use them
+ and the INC_FROM sets them to a sane value without
+ looking at them. */
if (!found) goto done;
INC_FROM;
- state.incomment = 0;
- state.comstyle = 0; /* reset the comment style */
- if (boundary_stop) goto done;
+ state->incomment = 0;
+ state->comstyle = 0; /* reset the comment style */
+ prev_from_syntax = Smax; /* For the comment closer */
+ if (boundary_stop) goto done;
break;
case Sopen:
case Sstring:
case Sstring_fence:
- state.comstr_start = from - 1;
+ state->comstr_start = from - 1;
if (stopbefore) goto stop; /* this arg means stop at sexp start */
curlevel->last = prev_from;
- state.instring = (code == Sstring
+ state->instring = (code == Sstring
? (FETCH_CHAR_AS_MULTIBYTE (prev_from_byte))
: ST_STRING_STYLE);
if (boundary_stop) goto done;
startinstring:
{
- nofence = state.instring != ST_STRING_STYLE;
+ nofence = state->instring != ST_STRING_STYLE;
while (1)
{
/* Check C_CODE here so that if the char has
a syntax-table property which says it is NOT
a string character, it does not end the string. */
- if (nofence && c == state.instring && c_code == Sstring)
+ if (nofence && c == state->instring && c_code == Sstring)
break;
switch (c_code)
}
}
string_end:
- state.instring = -1;
+ state->instring = -1;
curlevel->prev = curlevel->last;
INC_FROM;
if (boundary_stop) goto done;
stop: /* Here if stopping before start of sexp. */
from = prev_from; /* We have just fetched the char that starts it; */
from_byte = prev_from_byte;
+ prev_from_syntax = prev_prev_from_syntax;
goto done; /* but return the position before it. */
endquoted:
- state.quoted = 1;
+ state->quoted = 1;
done:
- state.depth = depth;
- state.mindepth = mindepth;
- state.thislevelstart = curlevel->prev;
- state.prevlevelstart
+ state->depth = depth;
+ state->mindepth = mindepth;
+ state->thislevelstart = curlevel->prev;
+ state->prevlevelstart
= (curlevel == levelstart) ? -1 : (curlevel - 1)->last;
- state.location = from;
- state.location_byte = from_byte;
- state.levelstarts = Qnil;
+ state->location = from;
+ state->location_byte = from_byte;
+ state->levelstarts = Qnil;
while (curlevel > levelstart)
- state.levelstarts = Fcons (make_number ((--curlevel)->last),
- state.levelstarts);
+ state->levelstarts = Fcons (make_number ((--curlevel)->last),
+ state->levelstarts);
+ state->prev_syntax = (SYNTAX_FLAGS_COMSTARTEND_FIRST (prev_from_syntax)
+ || state->quoted) ? prev_from_syntax : Smax;
immediate_quit = 0;
+}
+
+/* Convert a (lisp) parse state to the internal form used in
+ scan_sexps_forward. */
+static void
+internalize_parse_state (Lisp_Object external, struct lisp_parse_state *state)
+{
+ Lisp_Object tem;
+
+ if (NILP (external))
+ {
+ state->depth = 0;
+ state->instring = -1;
+ state->incomment = 0;
+ state->quoted = 0;
+ state->comstyle = 0; /* comment style a by default. */
+ state->comstr_start = -1; /* no comment/string seen. */
+ state->levelstarts = Qnil;
+ state->prev_syntax = Smax;
+ }
+ else
+ {
+ tem = Fcar (external);
+ if (!NILP (tem))
+ state->depth = XINT (tem);
+ else
+ state->depth = 0;
+
+ external = Fcdr (external);
+ external = Fcdr (external);
+ external = Fcdr (external);
+ tem = Fcar (external);
+ /* Check whether we are inside string_fence-style string: */
+ state->instring = (!NILP (tem)
+ ? (CHARACTERP (tem) ? XFASTINT (tem) : ST_STRING_STYLE)
+ : -1);
+
+ external = Fcdr (external);
+ tem = Fcar (external);
+ state->incomment = (!NILP (tem)
+ ? (INTEGERP (tem) ? XINT (tem) : -1)
+ : 0);
+
+ external = Fcdr (external);
+ tem = Fcar (external);
+ state->quoted = !NILP (tem);
- *stateptr = state;
+ /* if the eighth element of the list is nil, we are in comment
+ style a. If it is non-nil, we are in comment style b */
+ external = Fcdr (external);
+ external = Fcdr (external);
+ tem = Fcar (external);
+ state->comstyle = (NILP (tem)
+ ? 0
+ : (RANGED_INTEGERP (0, tem, ST_COMMENT_STYLE)
+ ? XINT (tem)
+ : ST_COMMENT_STYLE));
+
+ external = Fcdr (external);
+ tem = Fcar (external);
+ state->comstr_start =
+ RANGED_INTEGERP (PTRDIFF_MIN, tem, PTRDIFF_MAX) ? XINT (tem) : -1;
+ external = Fcdr (external);
+ tem = Fcar (external);
+ state->levelstarts = tem;
+
+ external = Fcdr (external);
+ tem = Fcar (external);
+ state->prev_syntax = NILP (tem) ? Smax : XINT (tem);
+ }
}
DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 6, 0,
point is set to where parsing stops.
If fifth arg OLDSTATE is omitted or nil,
parsing assumes that FROM is the beginning of a function.
+
Value is a list of elements describing final state of parsing:
0. depth in parens.
1. character address of start of innermost containing list; nil if none.
6. the minimum paren-depth encountered during this scan.
7. style of comment, if any.
8. character address of start of comment or string; nil if not in one.
- 9. Intermediate data for continuation of parsing (subject to change).
+ 9. List of positions of currently open parens, outermost first.
+10. When the last position scanned holds the first character of a
+ (potential) two character construct, the syntax of that position,
+ otherwise nil. That construct can be a two character comment
+ delimiter or an Escaped or Char-quoted character.
+11..... Possible further internal information used by `parse-partial-sexp'.
+
If third arg TARGETDEPTH is non-nil, parsing stops if the depth
in parentheses becomes equal to TARGETDEPTH.
-Fourth arg STOPBEFORE non-nil means stop when come to
+Fourth arg STOPBEFORE non-nil means stop when we come to
any character that starts a sexp.
Fifth arg OLDSTATE is a list like what this function returns.
It is used to initialize the state of the parse. Elements number 1, 2, 6
are ignored.
-Sixth arg COMMENTSTOP non-nil means stop at the start of a comment.
- If it is symbol `syntax-table', stop after the start of a comment or a
+Sixth arg COMMENTSTOP non-nil means stop after the start of a comment.
+ If it is the symbol `syntax-table', stop after the start of a comment or a
string, or after end of a comment or a string. */)
(Lisp_Object from, Lisp_Object to, Lisp_Object targetdepth,
Lisp_Object stopbefore, Lisp_Object oldstate, Lisp_Object commentstop)
target = TYPE_MINIMUM (EMACS_INT); /* We won't reach this depth. */
validate_region (&from, &to);
+ internalize_parse_state (oldstate, &state);
scan_sexps_forward (&state, XINT (from), CHAR_TO_BYTE (XINT (from)),
XINT (to),
- target, !NILP (stopbefore), oldstate,
+ target, !NILP (stopbefore),
(NILP (commentstop)
? 0 : (EQ (commentstop, Qsyntax_table) ? -1 : 1)));
SET_PT_BOTH (state.location, state.location_byte);
- return Fcons (make_number (state.depth),
+ return
+ Fcons (make_number (state.depth),
Fcons (state.prevlevelstart < 0
? Qnil : make_number (state.prevlevelstart),
Fcons (state.thislevelstart < 0
? Qsyntax_table
: make_number (state.comstyle))
: Qnil),
- Fcons (((state.incomment
- || (state.instring >= 0))
- ? make_number (state.comstr_start)
- : Qnil),
- Fcons (state.levelstarts, Qnil))))))))));
+ Fcons (((state.incomment
+ || (state.instring >= 0))
+ ? make_number (state.comstr_start)
+ : Qnil),
+ Fcons (state.levelstarts,
+ Fcons (state.prev_syntax == Smax
+ ? Qnil
+ : make_number (state.prev_syntax),
+ Qnil)))))))))));
}
\f
void
#include <config.h>
-/* If HYBRID_GET_CURRENT_DIR_NAME is defined in conf_post.h, then we
- need the following before including unistd.h, in order to pick up
- the right prototype for gget_current_dir_name. */
-#ifdef HYBRID_GET_CURRENT_DIR_NAME
-#undef get_current_dir_name
-#define get_current_dir_name gget_current_dir_name
-#endif
-
#include <execinfo.h>
#include "sysstdio.h"
#ifdef HAVE_PWD_H
#include <utimens.h>
#include "lisp.h"
+#include "sheap.h"
#include "sysselect.h"
#include "blockinput.h"
1800, 2400, 4800, 9600, 19200, 38400
};
-#if !defined HAVE_GET_CURRENT_DIR_NAME || defined BROKEN_GET_CURRENT_DIR_NAME \
- || (defined HYBRID_GET_CURRENT_DIR_NAME)
-/* Return the current working directory. Returns NULL on errors.
- Any other returned value must be freed with free. This is used
- only when get_current_dir_name is not defined on the system. */
+/* If FD is not already open, arrange for it to be open with FLAGS. */
+static void
+force_open (int fd, int flags)
+{
+ if (dup2 (fd, fd) < 0 && errno == EBADF)
+ {
+ int n = open (NULL_DEVICE, flags);
+ if (n < 0 || (fd != n && (dup2 (n, fd) < 0 || emacs_close (n) != 0)))
+ {
+ emacs_perror (NULL_DEVICE);
+ exit (EXIT_FAILURE);
+ }
+ }
+}
+
+/* Make sure stdin, stdout, and stderr are open to something, so that
+ their file descriptors are not hijacked by later system calls. */
+void
+init_standard_fds (void)
+{
+ /* Open stdin for *writing*, and stdout and stderr for *reading*.
+ That way, any attempt to do normal I/O will result in an error,
+ just as if the files were closed, and the file descriptors will
+ not be reused by later opens. */
+ force_open (STDIN_FILENO, O_WRONLY);
+ force_open (STDOUT_FILENO, O_RDONLY);
+ force_open (STDERR_FILENO, O_RDONLY);
+}
+
+/* Return the current working directory. The result should be freed
+ with 'free'. Return NULL on errors. */
char *
-get_current_dir_name (void)
+emacs_get_current_dir_name (void)
{
+# if HAVE_GET_CURRENT_DIR_NAME && !BROKEN_GET_CURRENT_DIR_NAME
+# ifdef HYBRID_MALLOC
+ bool use_libc = bss_sbrk_did_unexec;
+# else
+ bool use_libc = true;
+# endif
+ if (use_libc)
+ return get_current_dir_name ();
+# endif
+
char *buf;
char *pwd = getenv ("PWD");
struct stat dotstat, pwdstat;
}
return buf;
}
-#endif
\f
/* Discard pending input on all input descriptors. */
void
init_system_name (void)
{
+ if (!build_details)
+ {
+ /* Set system-name to nil so that the build is deterministic. */
+ Vsystem_name = Qnil;
+ return;
+ }
char *hostname_alloc = NULL;
char *hostname;
#ifndef HAVE_GETHOSTNAME
static bool
stack_overflow (siginfo_t *siginfo)
{
+ if (!attempt_stack_overflow_recovery)
+ return false;
+
/* In theory, a more-accurate heuristic can be obtained by using
GNU/Linux pthread_getattr_np along with POSIX pthread_attr_getstack
and pthread_attr_getguardsize to find the location and size of the
{
bool success = false;
#ifndef WINDOWSNT
- int fd = emacs_open ("/dev/urandom", O_RDONLY | O_BINARY, 0);
+ int fd = emacs_open ("/dev/urandom", O_RDONLY, 0);
if (0 <= fd)
{
success = emacs_read (fd, &v, sizeof v) == sizeof v;
switch (*m++)
{
case '+': omode = O_RDWR; break;
- case 'b': bflag = O_BINARY; break;
case 't': bflag = O_TEXT; break;
default: /* Ignore. */ break;
}
struct timespec tnow, tstart, tboot, telapsed, us_time;
double pcpu, pmem;
Lisp_Object attrs = Qnil;
- Lisp_Object cmd_str, decoded_cmd;
+ Lisp_Object decoded_cmd;
ptrdiff_t count;
CHECK_NUMBER_OR_FLOAT (pid);
else
q = NULL;
/* Command name is encoded in locale-coding-system; decode it. */
- cmd_str = make_unibyte_string (cmd, cmdsize);
+ AUTO_STRING_WITH_LEN (cmd_str, cmd, cmdsize);
decoded_cmd = code_convert_string_norecord (cmd_str,
Vlocale_coding_system, 0);
attrs = Fcons (Fcons (Qcomm, decoded_cmd), attrs);
sprintf (cmdline, "[%.*s]", cmdsize, cmd);
}
/* Command line is encoded in locale-coding-system; decode it. */
- cmd_str = make_unibyte_string (q, nread);
+ AUTO_STRING_WITH_LEN (cmd_str, q, nread);
decoded_cmd = code_convert_string_norecord (cmd_str,
Vlocale_coding_system, 0);
unbind_to (count, Qnil);
make_float (100.0 / 0x8000 * pinfo.pr_pctmem)),
attrs);
- decoded_cmd = (code_convert_string_norecord
- (build_unibyte_string (pinfo.pr_fname),
- Vlocale_coding_system, 0));
+ AUTO_STRING (fname, pinfo.pr_fname);
+ decoded_cmd = code_convert_string_norecord (fname,
+ Vlocale_coding_system, 0);
attrs = Fcons (Fcons (Qcomm, decoded_cmd), attrs);
- decoded_cmd = (code_convert_string_norecord
- (build_unibyte_string (pinfo.pr_psargs),
- Vlocale_coding_system, 0));
+ AUTO_STRING (psargs, pinfo.pr_psargs);
+ decoded_cmd = code_convert_string_norecord (psargs,
+ Vlocale_coding_system, 0);
attrs = Fcons (Fcons (Qargs, decoded_cmd), attrs);
}
unbind_to (count, Qnil);
if (gr)
attrs = Fcons (Fcons (Qgroup, build_string (gr->gr_name)), attrs);
- decoded_comm = (code_convert_string_norecord
- (build_unibyte_string (proc.ki_comm),
- Vlocale_coding_system, 0));
+ AUTO_STRING (comm, proc.ki_comm);
+ decoded_comm = code_convert_string_norecord (comm, Vlocale_coding_system, 0);
attrs = Fcons (Fcons (Qcomm, decoded_comm), attrs);
{
args[i] = ' ';
}
- decoded_comm =
- (code_convert_string_norecord
- (build_unibyte_string (args),
- Vlocale_coding_system, 0));
+ AUTO_STRING (comm, args);
+ decoded_comm = code_convert_string_norecord (comm,
+ Vlocale_coding_system, 0);
attrs = Fcons (Fcons (Qargs, decoded_comm), attrs);
}
return attrs;
}
+#elif defined DARWIN_OS
+
+static struct timespec
+timeval_to_timespec (struct timeval t)
+{
+ return make_timespec (t.tv_sec, t.tv_usec * 1000);
+}
+
+static Lisp_Object
+make_lisp_timeval (struct timeval t)
+{
+ return make_lisp_time (timeval_to_timespec (t));
+}
+
+Lisp_Object
+system_process_attributes (Lisp_Object pid)
+{
+ int proc_id;
+ int pagesize = getpagesize ();
+ unsigned long npages;
+ int fscale;
+ struct passwd *pw;
+ struct group *gr;
+ char *ttyname;
+ size_t len;
+ char args[MAXPATHLEN];
+ struct timeval starttime;
+ struct timespec t, now;
+ struct rusage *rusage;
+ dev_t tdev;
+ uid_t uid;
+ gid_t gid;
+
+ int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID};
+ struct kinfo_proc proc;
+ size_t proclen = sizeof proc;
+
+ Lisp_Object attrs = Qnil;
+ Lisp_Object decoded_comm;
+
+ CHECK_NUMBER_OR_FLOAT (pid);
+ CONS_TO_INTEGER (pid, int, proc_id);
+ mib[3] = proc_id;
+
+ if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0)
+ return attrs;
+
+ uid = proc.kp_eproc.e_ucred.cr_uid;
+ attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid)), attrs);
+
+ block_input ();
+ pw = getpwuid (uid);
+ unblock_input ();
+ if (pw)
+ attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs);
+
+ gid = proc.kp_eproc.e_pcred.p_svgid;
+ attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid)), attrs);
+
+ block_input ();
+ gr = getgrgid (gid);
+ unblock_input ();
+ if (gr)
+ attrs = Fcons (Fcons (Qgroup, build_string (gr->gr_name)), attrs);
+
+ decoded_comm = (code_convert_string_norecord
+ (build_unibyte_string (proc.kp_proc.p_comm),
+ Vlocale_coding_system, 0));
+
+ attrs = Fcons (Fcons (Qcomm, decoded_comm), attrs);
+ {
+ char state[2] = {'\0', '\0'};
+ switch (proc.kp_proc.p_stat)
+ {
+ case SRUN:
+ state[0] = 'R';
+ break;
+
+ case SSLEEP:
+ state[0] = 'S';
+ break;
+
+ case SZOMB:
+ state[0] = 'Z';
+ break;
+
+ case SSTOP:
+ state[0] = 'T';
+ break;
+
+ case SIDL:
+ state[0] = 'I';
+ break;
+ }
+ attrs = Fcons (Fcons (Qstate, build_string (state)), attrs);
+ }
+
+ attrs = Fcons (Fcons (Qppid, make_fixnum_or_float (proc.kp_eproc.e_ppid)),
+ attrs);
+ attrs = Fcons (Fcons (Qpgrp, make_fixnum_or_float (proc.kp_eproc.e_pgid)),
+ attrs);
+
+ tdev = proc.kp_eproc.e_tdev;
+ block_input ();
+ ttyname = tdev == NODEV ? NULL : devname (tdev, S_IFCHR);
+ unblock_input ();
+ if (ttyname)
+ attrs = Fcons (Fcons (Qtty, build_string (ttyname)), attrs);
+
+ attrs = Fcons (Fcons (Qtpgid, make_fixnum_or_float (proc.kp_eproc.e_tpgid)),
+ attrs);
+
+ rusage = proc.kp_proc.p_ru;
+ if (rusage)
+ {
+ attrs = Fcons (Fcons (Qminflt, make_fixnum_or_float (rusage->ru_minflt)),
+ attrs);
+ attrs = Fcons (Fcons (Qmajflt, make_fixnum_or_float (rusage->ru_majflt)),
+ attrs);
+
+ attrs = Fcons (Fcons (Qutime, make_lisp_timeval (rusage->ru_utime)),
+ attrs);
+ attrs = Fcons (Fcons (Qstime, make_lisp_timeval (rusage->ru_stime)),
+ attrs);
+ t = timespec_add (timeval_to_timespec (rusage->ru_utime),
+ timeval_to_timespec (rusage->ru_stime));
+ attrs = Fcons (Fcons (Qtime, make_lisp_time (t)), attrs);
+ }
+
+ starttime = proc.kp_proc.p_starttime;
+ attrs = Fcons (Fcons (Qnice, make_number (proc.kp_proc.p_nice)), attrs);
+ attrs = Fcons (Fcons (Qstart, make_lisp_timeval (starttime)), attrs);
+
+ now = current_timespec ();
+ t = timespec_sub (now, timeval_to_timespec (starttime));
+ attrs = Fcons (Fcons (Qetime, make_lisp_time (t)), attrs);
+
+ return attrs;
+}
+
/* The WINDOWSNT implementation is in w32.c.
The MSDOS implementation is in dosfns.c. */
#elif !defined (WINDOWSNT) && !defined (MSDOS)
#define DOTEXE ".exe"
-extern void report_sheap_usage (int);
-
-extern int bss_sbrk_did_unexec;
-
/*
** header for Windows executable files
*/
int ret;
int ret2;
- report_sheap_usage (1);
-
infile = add_exe_suffix_if_necessary (infile, infile_buffer);
outfile = add_exe_suffix_if_necessary (outfile, outfile_buffer);
- fd_in = emacs_open (infile, O_RDONLY | O_BINARY, 0);
+ fd_in = emacs_open (infile, O_RDONLY, 0);
assert (fd_in >= 0);
- fd_out = emacs_open (outfile, O_RDWR | O_TRUNC | O_CREAT | O_BINARY, 0755);
+ fd_out = emacs_open (outfile, O_RDWR | O_TRUNC | O_CREAT, 0755);
assert (fd_out >= 0);
for (;;)
{
ret = emacs_close (fd_in);
assert (ret == 0);
- bss_sbrk_did_unexec = 1;
fixup_executable (fd_out);
- bss_sbrk_did_unexec = 0;
ret = emacs_close (fd_out);
assert (ret == 0);
|| !strcmp (old_section_names + new_shdr->sh_name, ".sdata")
|| !strcmp (old_section_names + new_shdr->sh_name, ".lit4")
|| !strcmp (old_section_names + new_shdr->sh_name, ".lit8")
- /* The conditional bit below was in Oliva's original code
- (1999-08-25) and seems to have been dropped by mistake
- subsequently. It prevents a crash at startup under X in
- `IRIX64 6.5 6.5.17m', whether compiled on that release or
- an earlier one. It causes no trouble on the other ELF
- platforms I could test (Irix 6.5.15m, Solaris 8, Debian
- Potato x86, Debian Woody SPARC); however, it's reported
- to cause crashes under some version of GNU/Linux. It's
- not yet clear what's changed in that Irix version to
- cause the problem, or why the fix sometimes fails under
- GNU/Linux. There's probably no good reason to have
- something Irix-specific here, but this will have to do
- for now. IRIX6_5 is the most specific macro we have to
- test. -- fx 2002-10-01
-
- The issue _looks_ as though it's gone away on 6.5.18m,
- but maybe it's still lurking, to be triggered by some
- change in the binary. It appears to concern the dynamic
- loader, but I never got anywhere with an SGI support call
- seeking clues. -- fx 2002-11-29. */
-#ifdef IRIX6_5
- || !strcmp (old_section_names + new_shdr->sh_name, ".got")
-#endif
|| !strcmp (old_section_names + new_shdr->sh_name, ".sdata1")
|| !strcmp (old_section_names + new_shdr->sh_name, ".data1"))
src = (caddr_t) old_shdr->sh_addr;
|| !strcmp (old_section_names + shdr->sh_name, ".sdata")
|| !strcmp (old_section_names + shdr->sh_name, ".lit4")
|| !strcmp (old_section_names + shdr->sh_name, ".lit8")
-#ifdef IRIX6_5 /* see above */
- || !strcmp (old_section_names + shdr->sh_name, ".got")
-#endif
|| !strcmp (old_section_names + shdr->sh_name, ".sdata1")
|| !strcmp (old_section_names + shdr->sh_name, ".data1"))
{
# endif
#endif
-/* From gmalloc.c. */
-extern void (* __after_morecore_hook) (void);
+#ifdef HAVE_MALLOC_H
+# include <malloc.h>
+#endif
+#ifndef __MALLOC_HOOK_VOLATILE
+# define __MALLOC_HOOK_VOLATILE volatile
+#endif
+#ifndef HAVE_MALLOC_H
extern void *(*__morecore) (ptrdiff_t);
+extern void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+#endif
/* From ralloc.c. */
#ifdef REL_ALLOC
int (PASCAL *pfn_sendto) (SOCKET s, const char * buf, int len, int flags,
const struct sockaddr * to, int tolen);
+int (PASCAL *pfn_getaddrinfo) (const char *, const char *,
+ const struct addrinfo *, struct addrinfo **);
+void (PASCAL *pfn_freeaddrinfo) (struct addrinfo *);
+
/* SetHandleInformation is only needed to make sockets non-inheritable. */
BOOL (WINAPI *pfn_SetHandleInformation) (HANDLE object, DWORD mask, DWORD flags);
#ifndef HANDLE_FLAG_INHERIT
LOAD_PROC (sendto);
#undef LOAD_PROC
+ /* Try loading functions not available before XP. */
+ pfn_getaddrinfo = (void *) GetProcAddress (winsock_lib, "getaddrinfo");
+ pfn_freeaddrinfo = (void *) GetProcAddress (winsock_lib, "freeaddrinfo");
+ /* Paranoia: these two functions should go together, so if one
+ is absent, we cannot use the other. */
+ if (pfn_getaddrinfo == NULL)
+ pfn_freeaddrinfo = NULL;
+ else if (pfn_freeaddrinfo == NULL)
+ pfn_getaddrinfo = NULL;
+
/* specify version 1.1 of winsock */
if (pfn_WSAStartup (0x101, &winsockData) == 0)
{
return SOCKET_ERROR;
}
+int
+sys_getaddrinfo (const char *node, const char *service,
+ const struct addrinfo *hints, struct addrinfo **res)
+{
+ int rc;
+
+ if (winsock_lib == NULL)
+ {
+ errno = ENETDOWN;
+ return SOCKET_ERROR;
+ }
+
+ check_errno ();
+ if (pfn_getaddrinfo)
+ rc = pfn_getaddrinfo (node, service, hints, res);
+ else
+ {
+ int port = 0;
+ struct hostent *host_info;
+ struct gai_storage {
+ struct addrinfo addrinfo;
+ struct sockaddr_in sockaddr_in;
+ } *gai_storage;
+
+ /* We don't (yet) support any flags, as Emacs doesn't need that. */
+ if (hints && hints->ai_flags != 0)
+ return WSAEINVAL;
+ /* NODE cannot be NULL, since process.c has fallbacks for that. */
+ if (!node)
+ return WSAHOST_NOT_FOUND;
+
+ if (service)
+ {
+ const char *protocol =
+ (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp";
+ struct servent *srv = sys_getservbyname (service, protocol);
+
+ if (srv)
+ port = srv->s_port;
+ else if (*service >= '0' && *service <= '9')
+ {
+ char *endp;
+
+ port = strtoul (service, &endp, 10);
+ if (*endp || port > 65536)
+ return WSAHOST_NOT_FOUND;
+ port = sys_htons ((unsigned short) port);
+ }
+ else
+ return WSAHOST_NOT_FOUND;
+ }
+
+ gai_storage = xzalloc (sizeof *gai_storage);
+ gai_storage->sockaddr_in.sin_port = port;
+ host_info = sys_gethostbyname (node);
+ if (host_info)
+ {
+ memcpy (&gai_storage->sockaddr_in.sin_addr,
+ host_info->h_addr, host_info->h_length);
+ gai_storage->sockaddr_in.sin_family = host_info->h_addrtype;
+ }
+ else
+ {
+ /* Attempt to interpret host as numeric inet address. */
+ unsigned long numeric_addr = sys_inet_addr (node);
+
+ if (numeric_addr == -1)
+ {
+ free (gai_storage);
+ return WSAHOST_NOT_FOUND;
+ }
+
+ memcpy (&gai_storage->sockaddr_in.sin_addr, &numeric_addr,
+ sizeof (gai_storage->sockaddr_in.sin_addr));
+ gai_storage->sockaddr_in.sin_family = (hints) ? hints->ai_family : 0;
+ }
+
+ gai_storage->addrinfo.ai_addr =
+ (struct sockaddr *)&gai_storage->sockaddr_in;
+ gai_storage->addrinfo.ai_addrlen = sizeof (gai_storage->sockaddr_in);
+ gai_storage->addrinfo.ai_protocol = (hints) ? hints->ai_protocol : 0;
+ gai_storage->addrinfo.ai_socktype = (hints) ? hints->ai_socktype : 0;
+ gai_storage->addrinfo.ai_family = gai_storage->sockaddr_in.sin_family;
+ gai_storage->addrinfo.ai_next = NULL;
+
+ *res = &gai_storage->addrinfo;
+ rc = 0;
+ }
+
+ return rc;
+}
+
+void
+sys_freeaddrinfo (struct addrinfo *ai)
+{
+ if (winsock_lib == NULL)
+ {
+ errno = ENETDOWN;
+ return;
+ }
+
+ check_errno ();
+ if (pfn_freeaddrinfo)
+ pfn_freeaddrinfo (ai);
+ else
+ {
+ eassert (ai->ai_next == NULL);
+ xfree (ai);
+ }
+}
+
int
sys_shutdown (int s, int how)
{
return -1;
}
- /* make sure we close the destination first if it's a pipe or socket */
- if (src != dst && fd_info[dst].flags != 0)
+ /* MS _dup2 seems to have weird side effect when invoked with 2
+ identical arguments: an attempt to fclose the corresponding stdio
+ stream after that hangs (we do close standard streams in
+ init_ntproc). Attempt to avoid that by not calling _dup2 that
+ way: if SRC is valid, we know that dup2 should be a no-op, so do
+ nothing and return DST. */
+ if (src == dst)
+ {
+ if ((HANDLE)_get_osfhandle (src) == INVALID_HANDLE_VALUE)
+ {
+ errno = EBADF;
+ return -1;
+ }
+ return dst;
+ }
+
+ /* Make sure we close the destination first if it's a pipe or socket. */
+ if (fd_info[dst].flags != 0)
sys_close (dst);
rc = _dup2 (src, dst);
if (rc == 0)
{
- /* duplicate our internal info as well */
+ /* Duplicate our internal info as well. */
fd_info[dst] = fd_info[src];
}
- return rc;
+ return rc == 0 ? dst : rc;
}
int
unsigned long nblock = 0;
if (winsock_lib == NULL) emacs_abort ();
+ child_process *cp = fd_info[fd].cp;
+
+ /* If this is a non-blocking socket whose connection is in
+ progress or terminated with an error already, return the
+ proper error code to the caller. */
+ if (cp != NULL && (fd_info[fd].flags & FILE_CONNECT) != 0)
+ {
+ /* In case connection is in progress, ENOTCONN that would
+ result from calling pfn_send is not what callers expect. */
+ if (cp->status != STATUS_CONNECT_FAILED)
+ {
+ errno = EWOULDBLOCK;
+ return -1;
+ }
+ /* In case connection failed, use the actual error code
+ stashed by '_sys_wait_connect' in cp->errcode. */
+ else if (cp->errcode != 0)
+ {
+ pfn_WSASetLastError (cp->errcode);
+ set_errno ();
+ return -1;
+ }
+ }
+
/* TODO: implement select() properly so non-blocking I/O works. */
/* For now, make sure the write blocks. */
if (fd_info[fd].flags & FILE_NDELAY)
nchars = pfn_send (SOCK_HANDLE (fd), buffer, count, 0);
+ if (nchars == SOCKET_ERROR)
+ {
+ set_errno ();
+ DebPrint (("sys_write.send failed with error %d on socket %ld\n",
+ pfn_WSAGetLastError (), SOCK_HANDLE (fd)));
+ }
+
/* Set the socket back to non-blocking if it was before,
for other operations that support it. */
if (fd_info[fd].flags & FILE_NDELAY)
nblock = 1;
pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock);
}
-
- if (nchars == SOCKET_ERROR)
- {
- DebPrint (("sys_write.send failed with error %d on socket %ld\n",
- pfn_WSAGetLastError (), SOCK_HANDLE (fd)));
- set_errno ();
- }
}
else
{
\f
/* Emulation of SIOCGIFCONF and getifaddrs, see process.c. */
-extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, int);
+extern Lisp_Object conv_sockaddr_to_lisp (struct sockaddr *, ptrdiff_t);
/* Return information about network interface IFNAME, or about all
interfaces (if IFNAME is nil). */
/* Setup w32_display_info structure for this frame. */
w32_initialize_display_info (build_string ("Console"));
+
+ /* Set up the keyboard hook. */
+ setup_w32_kbdhook ();
}
/* Added by Kevin Gallo */
#include <config.h>
+/* Override API version to get the latest functionality. */
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0600
#include <signal.h>
#include <stdio.h>
#include "coding.h"
#include "w32common.h"
+#include "w32inevt.h"
#ifdef WINDOWSNT
#include <mbstring.h>
#include "w32.h"
#endif
+#include <basetyps.h>
+#include <unknwn.h>
#include <commctrl.h>
#include <commdlg.h>
#include <shellapi.h>
static unsigned int sound_type = 0xFFFFFFFF;
#define MB_EMACS_SILENT (0xFFFFFFFF - 1)
+/* Special virtual key code for indicating "any" key. */
+#define VK_ANY 0xFF
+
+#ifndef WM_WTSSESSION_CHANGE
+/* 32-bit MinGW does not define these constants. */
+# define WM_WTSSESSION_CHANGE 0x02B1
+# define WTS_SESSION_LOCK 0x7
+#endif
+
+/* Keyboard hook state data. */
+static struct
+{
+ int hook_count; /* counter, if several windows are created */
+ HHOOK hook; /* hook handle */
+ HWND console; /* console window handle */
+
+ int lwindown; /* Left Windows key currently pressed (and hooked) */
+ int rwindown; /* Right Windows key currently pressed (and hooked) */
+ int winsdown; /* Number of handled keys currently pressed */
+ int send_win_up; /* Pass through the keyup for this Windows key press? */
+ int suppress_lone; /* Suppress simulated Windows keydown-keyup for this press? */
+ int winseen; /* Windows keys seen during this press? */
+
+ char alt_hooked[256]; /* hook Alt+[this key]? */
+ char lwin_hooked[256]; /* hook left Win+[this key]? */
+ char rwin_hooked[256]; /* hook right Win+[this key]? */
+} kbdhook;
+typedef HWND (WINAPI *GetConsoleWindow_Proc) (void);
+
+/* stdin, from w32console.c */
+extern HANDLE keyboard_handle;
+
/* Let the user specify a display with a frame.
nil stands for the selected frame--or, if that is not a w32 frame,
the first display on the list. */
post_msg (wmsg);
}
+#ifdef WINDOWSNT
+/* The Windows keyboard hook callback. */
+static LRESULT CALLBACK
+funhook (int code, WPARAM w, LPARAM l)
+{
+ INPUT inputs[2];
+ HWND focus = GetFocus ();
+ int console = 0;
+ KBDLLHOOKSTRUCT const *hs = (KBDLLHOOKSTRUCT*)l;
+
+ if (code < 0 || (hs->flags & LLKHF_INJECTED))
+ return CallNextHookEx (0, code, w, l);
+
+ /* The keyboard hook sees keyboard input on all processes (except
+ elevated ones, when Emacs itself is not elevated). As such,
+ care must be taken to only filter out keyboard input when Emacs
+ itself is on the foreground.
+
+ GetFocus returns a non-NULL window if another application is active,
+ and always for a console Emacs process. For a console Emacs, determine
+ focus by checking if the current foreground window is the process's
+ console window. */
+ if (focus == NULL && kbdhook.console != NULL)
+ {
+ if (GetForegroundWindow () == kbdhook.console)
+ {
+ focus = kbdhook.console;
+ console = 1;
+ }
+ }
+
+ /* First, check hooks for the left and right Windows keys. */
+ if (hs->vkCode == VK_LWIN || hs->vkCode == VK_RWIN)
+ {
+ if (focus != NULL && (w == WM_KEYDOWN || w == WM_SYSKEYDOWN))
+ {
+ /* The key is being pressed in an Emacs window. */
+ if (hs->vkCode == VK_LWIN && !kbdhook.lwindown)
+ {
+ kbdhook.lwindown = 1;
+ kbdhook.winseen = 1;
+ kbdhook.winsdown++;
+ }
+ else if (hs->vkCode == VK_RWIN && !kbdhook.rwindown)
+ {
+ kbdhook.rwindown = 1;
+ kbdhook.winseen = 1;
+ kbdhook.winsdown++;
+ }
+ /* Returning 1 here drops the keypress without further processing.
+ If the keypress was allowed to go through, the normal Windows
+ hotkeys would take over. */
+ return 1;
+ }
+ else if (kbdhook.winsdown > 0 && (w == WM_KEYUP || w == WM_SYSKEYUP))
+ {
+ /* A key that has been captured earlier is being released now. */
+ if (hs->vkCode == VK_LWIN && kbdhook.lwindown)
+ {
+ kbdhook.lwindown = 0;
+ kbdhook.winsdown--;
+ }
+ else if (hs->vkCode == VK_RWIN && kbdhook.rwindown)
+ {
+ kbdhook.rwindown = 0;
+ kbdhook.winsdown--;
+ }
+ if (kbdhook.winsdown == 0 && kbdhook.winseen)
+ {
+ if (!kbdhook.suppress_lone)
+ {
+ /* The Windows key was pressed, then released,
+ without any other key pressed simultaneously.
+ Normally, this opens the Start menu, but the user
+ can prevent this by setting the
+ w32-pass-[lr]window-to-system variable to
+ NIL. */
+ if (hs->vkCode == VK_LWIN && !NILP (Vw32_pass_lwindow_to_system) ||
+ hs->vkCode == VK_RWIN && !NILP (Vw32_pass_rwindow_to_system))
+ {
+ /* Not prevented - Simulate the keypress to the system. */
+ memset (inputs, 0, sizeof (inputs));
+ inputs[0].type = INPUT_KEYBOARD;
+ inputs[0].ki.wVk = hs->vkCode;
+ inputs[0].ki.wScan = hs->vkCode;
+ inputs[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
+ inputs[0].ki.time = 0;
+ inputs[1].type = INPUT_KEYBOARD;
+ inputs[1].ki.wVk = hs->vkCode;
+ inputs[1].ki.wScan = hs->vkCode;
+ inputs[1].ki.dwFlags
+ = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP;
+ inputs[1].ki.time = 0;
+ SendInput (2, inputs, sizeof (INPUT));
+ }
+ else if (focus != NULL)
+ {
+ /* When not passed to system, must simulate privately to Emacs. */
+ PostMessage (focus, WM_SYSKEYDOWN, hs->vkCode, 0);
+ PostMessage (focus, WM_SYSKEYUP, hs->vkCode, 0);
+ }
+ }
+ }
+ if (kbdhook.winsdown == 0)
+ {
+ /* No Windows keys pressed anymore - clear the state flags. */
+ kbdhook.suppress_lone = 0;
+ kbdhook.winseen = 0;
+ }
+ if (!kbdhook.send_win_up)
+ {
+ /* Swallow this release message, as not to confuse
+ applications who did not get to see the original
+ WM_KEYDOWN message either. */
+ return 1;
+ }
+ kbdhook.send_win_up = 0;
+ }
+ }
+ else if (kbdhook.winsdown > 0)
+ {
+ /* Some other key was pressed while a captured Win key is down.
+ This is either an Emacs registered hotkey combination, or a
+ system hotkey. */
+ if (kbdhook.lwindown && kbdhook.lwin_hooked[hs->vkCode] ||
+ kbdhook.rwindown && kbdhook.rwin_hooked[hs->vkCode])
+ {
+ /* Hooked Win-x combination, do not pass the keypress to Windows. */
+ kbdhook.suppress_lone = 1;
+ }
+ else if (!kbdhook.suppress_lone)
+ {
+ /* Unhooked S-x combination; simulate the combination now
+ (will be seen by the system). */
+ memset (inputs, 0, sizeof (inputs));
+ inputs[0].type = INPUT_KEYBOARD;
+ inputs[0].ki.wVk = kbdhook.lwindown ? VK_LWIN : VK_RWIN;
+ inputs[0].ki.wScan = kbdhook.lwindown ? VK_LWIN : VK_RWIN;
+ inputs[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
+ inputs[0].ki.time = 0;
+ inputs[1].type = INPUT_KEYBOARD;
+ inputs[1].ki.wVk = hs->vkCode;
+ inputs[1].ki.wScan = hs->scanCode;
+ inputs[1].ki.dwFlags =
+ (hs->flags & LLKHF_EXTENDED) ? KEYEVENTF_EXTENDEDKEY : 0;
+ inputs[1].ki.time = 0;
+ SendInput (2, inputs, sizeof (INPUT));
+ /* Stop processing of this Win sequence here; the
+ corresponding keyup messages will come through the normal
+ channel when the keys are released. */
+ kbdhook.suppress_lone = 1;
+ kbdhook.send_win_up = 1;
+ /* Swallow the original keypress (as we want the Win key
+ down message simulated above to precede this real message). */
+ return 1;
+ }
+ }
+
+ /* Next, handle the registered Alt-* combinations. */
+ if ((w == WM_SYSKEYDOWN || w == WM_KEYDOWN)
+ && kbdhook.alt_hooked[hs->vkCode]
+ && focus != NULL
+ && (GetAsyncKeyState (VK_MENU) & 0x8000))
+ {
+ /* Prevent the system from getting this Alt-* key - suppress the
+ message and post as a normal keypress to Emacs. */
+ if (console)
+ {
+ INPUT_RECORD rec;
+ DWORD n;
+ rec.EventType = KEY_EVENT;
+ rec.Event.KeyEvent.bKeyDown = TRUE;
+ rec.Event.KeyEvent.wVirtualKeyCode = hs->vkCode;
+ rec.Event.KeyEvent.wVirtualScanCode = hs->scanCode;
+ rec.Event.KeyEvent.uChar.UnicodeChar = 0;
+ rec.Event.KeyEvent.dwControlKeyState =
+ ((GetAsyncKeyState (VK_LMENU) & 0x8000) ? LEFT_ALT_PRESSED : 0)
+ | ((GetAsyncKeyState (VK_RMENU) & 0x8000) ? RIGHT_ALT_PRESSED : 0)
+ | ((GetAsyncKeyState (VK_LCONTROL) & 0x8000) ? LEFT_CTRL_PRESSED : 0)
+ | ((GetAsyncKeyState (VK_RCONTROL) & 0x8000) ? RIGHT_CTRL_PRESSED : 0)
+ | ((GetAsyncKeyState (VK_SHIFT) & 0x8000) ? SHIFT_PRESSED : 0)
+ | ((hs->flags & LLKHF_EXTENDED) ? ENHANCED_KEY : 0);
+ if (w32_console_unicode_input)
+ WriteConsoleInputW (keyboard_handle, &rec, 1, &n);
+ else
+ WriteConsoleInputA (keyboard_handle, &rec, 1, &n);
+ }
+ else
+ PostMessage (focus, w, hs->vkCode, 1 | (1<<29));
+ return 1;
+ }
+
+ /* The normal case - pass the message through. */
+ return CallNextHookEx (0, code, w, l);
+}
+
+/* Set up the hook; can be called several times, with matching
+ remove_w32_kbdhook calls. */
+void
+setup_w32_kbdhook (void)
+{
+ kbdhook.hook_count++;
+
+ /* Hooking is only available on NT architecture systems, as
+ indicated by the w32_kbdhook_active variable. */
+ if (kbdhook.hook_count == 1 && w32_kbdhook_active)
+ {
+ /* Get the handle of the Emacs console window. As the
+ GetConsoleWindow function is only available on Win2000+, a
+ hackish workaround described in Microsoft KB article 124103
+ (https://support.microsoft.com/en-us/kb/124103) is used for
+ NT 4 systems. */
+ GetConsoleWindow_Proc get_console = (GetConsoleWindow_Proc)
+ GetProcAddress (GetModuleHandle ("kernel32.dll"), "GetConsoleWindow");
+
+ if (get_console != NULL)
+ kbdhook.console = get_console ();
+ else
+ {
+ GUID guid;
+ wchar_t *oldTitle = malloc (1024 * sizeof(wchar_t));
+ wchar_t newTitle[64];
+ int i;
+
+ CoCreateGuid (&guid);
+ StringFromGUID2 (&guid, newTitle, 64);
+ if (newTitle != NULL)
+ {
+ GetConsoleTitleW (oldTitle, 1024);
+ SetConsoleTitleW (newTitle);
+ for (i = 0; i < 25; i++)
+ {
+ Sleep (40);
+ kbdhook.console = FindWindowW (NULL, newTitle);
+ if (kbdhook.console != NULL)
+ break;
+ }
+ SetConsoleTitleW (oldTitle);
+ }
+ free (oldTitle);
+ }
+
+ /* Set the hook. */
+ kbdhook.hook = SetWindowsHookEx (WH_KEYBOARD_LL, funhook,
+ GetModuleHandle (NULL), 0);
+ }
+}
+
+/* Remove the hook. */
+void
+remove_w32_kbdhook (void)
+{
+ kbdhook.hook_count--;
+ if (kbdhook.hook_count == 0 && w32_kbdhook_active)
+ {
+ UnhookWindowsHookEx (kbdhook.hook);
+ kbdhook.hook = NULL;
+ }
+}
+#endif /* WINDOWSNT */
+
+/* Mark a specific key combination as hooked, preventing it to be
+ handled by the system. */
+void
+hook_w32_key (int hook, int modifier, int vkey)
+{
+ char *tbl = NULL;
+
+ switch (modifier)
+ {
+ case VK_MENU:
+ tbl = kbdhook.alt_hooked;
+ break;
+ case VK_LWIN:
+ tbl = kbdhook.lwin_hooked;
+ break;
+ case VK_RWIN:
+ tbl = kbdhook.rwin_hooked;
+ break;
+ }
+
+ if (tbl != NULL && vkey >= 0 && vkey <= 255)
+ {
+ /* VK_ANY hooks all keys for this modifier */
+ if (vkey == VK_ANY)
+ memset (tbl, (char)hook, 256);
+ else
+ tbl[vkey] = (char)hook;
+ /* Alt-<modifier>s should go through */
+ kbdhook.alt_hooked[VK_MENU] = 0;
+ kbdhook.alt_hooked[VK_LMENU] = 0;
+ kbdhook.alt_hooked[VK_RMENU] = 0;
+ kbdhook.alt_hooked[VK_CONTROL] = 0;
+ kbdhook.alt_hooked[VK_LCONTROL] = 0;
+ kbdhook.alt_hooked[VK_RCONTROL] = 0;
+ kbdhook.alt_hooked[VK_SHIFT] = 0;
+ kbdhook.alt_hooked[VK_LSHIFT] = 0;
+ kbdhook.alt_hooked[VK_RSHIFT] = 0;
+ }
+}
+
+/* Check the current Win key pressed state. */
+int
+check_w32_winkey_state (int vkey)
+{
+ /* The hook code handles grabbing of the Windows keys and Alt-* key
+ combinations reserved by the system. Handling Alt is a bit
+ easier, as Windows intends Alt-* shortcuts for application use in
+ Windows; hotkeys such as Alt-tab and Alt-escape are special
+ cases. Win-* hotkeys, on the other hand, are primarily meant for
+ system use.
+
+ As a result, when we want Emacs to be able to grab the Win-*
+ keys, we must swallow all Win key presses in a low-level keyboard
+ hook. Unfortunately, this means that the Emacs window procedure
+ (and console input handler) never see the keypresses either.
+ Thus, to check the modifier states properly, Emacs code must use
+ the check_w32_winkey_state function that uses the flags directly
+ updated by the hook callback. */
+ switch (vkey)
+ {
+ case VK_LWIN:
+ return kbdhook.lwindown;
+ case VK_RWIN:
+ return kbdhook.rwindown;
+ }
+ return 0;
+}
+
+/* Reset the keyboard hook state. Locking the workstation with Win-L
+ leaves the Win key(s) "down" from the hook's point of view - the
+ keyup event is never seen. Thus, this function must be called when
+ the system is locked. */
+void
+reset_w32_kbdhook_state (void)
+{
+ kbdhook.lwindown = 0;
+ kbdhook.rwindown = 0;
+ kbdhook.winsdown = 0;
+ kbdhook.send_win_up = 0;
+ kbdhook.suppress_lone = 0;
+ kbdhook.winseen = 0;
+}
+
/* GetKeyState and MapVirtualKey on Windows 95 do not actually distinguish
between left and right keys as advertised. We test for this
support dynamically, and set a flag when the support is absent. If
else
return (GetKeyState (vkey) & 0x1);
}
+ if (w32_kbdhook_active && (vkey == VK_LWIN || vkey == VK_RWIN))
+ return check_w32_winkey_state (vkey);
if (!modifiers_recorded)
return (GetKeyState (vkey) & 0x8000);
/* List of special key combinations which w32 would normally capture,
but Emacs should grab instead. Not directly visible to lisp, to
simplify synchronization. Each item is an integer encoding a virtual
- key code and modifier combination to capture. */
+ key code and modifier combination to capture.
+ Note: This code is not used if keyboard hooks are active
+ (Windows 2000 and later). */
static Lisp_Object w32_grabbed_keys;
#define HOTKEY(vk, mods) make_number (((vk) & 255) | ((mods) << 8))
switch (wParam)
{
case VK_LWIN:
- if (NILP (Vw32_pass_lwindow_to_system))
+ if (!w32_kbdhook_active && NILP (Vw32_pass_lwindow_to_system))
{
/* Prevent system from acting on keyup (which opens the
Start menu if no other key was pressed) by simulating a
return 0;
break;
case VK_RWIN:
- if (NILP (Vw32_pass_rwindow_to_system))
+ if (!w32_kbdhook_active && NILP (Vw32_pass_rwindow_to_system))
{
if (GetAsyncKeyState (wParam) & 1)
{
case WM_SETFOCUS:
dpyinfo->faked_key = 0;
reset_modifiers ();
- register_hot_keys (hwnd);
+ if (!w32_kbdhook_active)
+ register_hot_keys (hwnd);
goto command;
case WM_KILLFOCUS:
- unregister_hot_keys (hwnd);
+ if (!w32_kbdhook_active)
+ unregister_hot_keys (hwnd);
button_state = 0;
ReleaseCapture ();
/* Relinquish the system caret. */
my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
goto dflt;
+#ifdef WINDOWSNT
+ case WM_CREATE:
+ setup_w32_kbdhook ();
+ goto dflt;
+#endif
+
case WM_DESTROY:
+#ifdef WINDOWSNT
+ remove_w32_kbdhook ();
+#endif
CoUninitialize ();
return 0;
+ case WM_WTSSESSION_CHANGE:
+ if (wParam == WTS_SESSION_LOCK)
+ reset_w32_kbdhook_state ();
+ goto dflt;
+
case WM_CLOSE:
wmsg.dwModifiers = w32_get_modifiers ();
my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
{
/* Remember the explicit font parameter, so we can re-apply it after
we've applied the `default' face settings. */
- x_set_frame_parameters (f, Fcons (Fcons (Qfont_param, font_param), Qnil));
+ x_set_frame_parameters (f, Fcons (Fcons (Qfont_parameter, font_param),
+ Qnil));
}
x_default_parameter (f, parms, Qfont, font, "font", "Font", RES_TYPE_STRING);
}
Tool tips
***********************************************************************/
-static Lisp_Object x_create_tip_frame (struct w32_display_info *,
- Lisp_Object, Lisp_Object);
static void compute_tip_xy (struct frame *, Lisp_Object, Lisp_Object,
Lisp_Object, int, int, int *, int *);
/* Create a frame for a tooltip on the display described by DPYINFO.
- PARMS is a list of frame parameters. TEXT is the string to
- display in the tip frame. Value is the frame.
+ PARMS is a list of frame parameters. Value is the frame.
Note that functions called here, esp. x_default_parameter can
signal errors, for instance when a specified color name is
when this happens. */
static Lisp_Object
-x_create_tip_frame (struct w32_display_info *dpyinfo,
- Lisp_Object parms, Lisp_Object text)
+x_create_tip_frame (struct w32_display_info *dpyinfo, Lisp_Object parms)
{
struct frame *f;
Lisp_Object frame;
ptrdiff_t count = SPECPDL_INDEX ();
struct kboard *kb;
bool face_change_before = face_change;
- Lisp_Object buffer;
- struct buffer *old_buffer;
int x_width = 0, x_height = 0;
/* Use this general default value to start with until we know if
frame = Qnil;
/* Make a frame without minibuffer nor mode-line. */
f = make_frame (false);
- f->wants_modeline = 0;
+ f->wants_modeline = false;
XSETFRAME (frame, f);
- AUTO_STRING (tip, " *tip*");
- buffer = Fget_buffer_create (tip);
- /* Use set_window_buffer instead of Fset_window_buffer (see
- discussion of bug#11984, bug#12025, bug#12026). */
- set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false);
- old_buffer = current_buffer;
- set_buffer_internal_1 (XBUFFER (buffer));
- bset_truncate_lines (current_buffer, Qnil);
- specbind (Qinhibit_read_only, Qt);
- specbind (Qinhibit_modification_hooks, Qt);
- Ferase_buffer ();
- Finsert (1, &text);
- set_buffer_internal_1 (old_buffer);
-
record_unwind_protect (unwind_create_tip_frame, frame);
/* By setting the output method, we're essentially saying that
{
fset_name (f, name);
f->explicit_name = true;
- /* use the frame's title when getting resources for this frame. */
+ /* Use the frame's title when getting resources for this frame. */
specbind (Qx_resource_name, name);
}
parms = Fcons (Fcons (Qinternal_border_width, value),
parms);
}
+
x_default_parameter (f, parms, Qinternal_border_width, make_number (1),
"internalBorderWidth", "internalBorderWidth",
RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qright_divider_width, make_number (0),
- NULL, NULL, RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qbottom_divider_width, make_number (0),
- NULL, NULL, RES_TYPE_NUMBER);
-
/* Also do the stuff which must be set before the window exists. */
x_default_parameter (f, parms, Qforeground_color, build_string ("black"),
"foreground", "Foreground", RES_TYPE_STRING);
f->fringe_cols = 0;
f->left_fringe_width = 0;
f->right_fringe_width = 0;
+ /* No dividers on tip frame. */
+ f->right_divider_width = 0;
+ f->bottom_divider_width = 0;
block_input ();
my_create_tip_window (f);
SET_FRAME_LINES (f, 0);
adjust_frame_size (f, width * FRAME_COLUMN_WIDTH (f),
height * FRAME_LINE_HEIGHT (f), 0, true, Qtip_frame);
-
/* Add `tooltip' frame parameter's default value. */
if (NILP (Fframe_parameter (frame, Qtooltip)))
Fmodify_frame_parameters (frame, Fcons (Fcons (Qtooltip, Qt), Qnil));
Lisp_Object fg = Fframe_parameter (frame, Qforeground_color);
Lisp_Object colors = Qnil;
- /* Set tip_frame here, so that */
- tip_frame = frame;
call2 (Qface_set_after_frame_default, frame, Qnil);
if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
*root_x = min_x;
}
+/* Hide tooltip. Delete its frame if DELETE is true. */
+static Lisp_Object
+x_hide_tip (bool delete)
+{
+ if (!NILP (tip_timer))
+ {
+ call1 (Qcancel_timer, tip_timer);
+ tip_timer = Qnil;
+ }
+
+ if (NILP (tip_frame)
+ || (!delete && FRAMEP (tip_frame)
+ && !FRAME_VISIBLE_P (XFRAME (tip_frame))))
+ return Qnil;
+ else
+ {
+ ptrdiff_t count;
+ Lisp_Object was_open = Qnil;
+
+ count = SPECPDL_INDEX ();
+ specbind (Qinhibit_redisplay, Qt);
+ specbind (Qinhibit_quit, Qt);
+
+ if (FRAMEP (tip_frame))
+ {
+ if (delete)
+ {
+ delete_frame (tip_frame, Qnil);
+ tip_frame = Qnil;
+ }
+ else
+ x_make_frame_invisible (XFRAME (tip_frame));
+
+ was_open = Qt;
+ }
+ else
+ tip_frame = Qnil;
+
+ return unbind_to (count, was_open);
+ }
+}
+
DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
doc: /* Show STRING in a \"tooltip\" window on frame FRAME.
Text larger than the specified size is clipped. */)
(Lisp_Object string, Lisp_Object frame, Lisp_Object parms, Lisp_Object timeout, Lisp_Object dx, Lisp_Object dy)
{
- struct frame *f;
+ struct frame *f, *tip_f;
struct window *w;
int root_x, root_y;
struct buffer *old_buffer;
struct text_pos pos;
int i, width, height;
- bool seen_reversed_p;
int old_windows_or_buffers_changed = windows_or_buffers_changed;
ptrdiff_t count = SPECPDL_INDEX ();
+ ptrdiff_t count_1;
+ Lisp_Object window, size;
specbind (Qinhibit_redisplay, Qt);
if (NILP (last_show_tip_args))
last_show_tip_args = Fmake_vector (make_number (3), Qnil);
- if (!NILP (tip_frame))
+ if (FRAMEP (tip_frame) && FRAME_LIVE_P (XFRAME (tip_frame)))
{
Lisp_Object last_string = AREF (last_show_tip_args, 0);
Lisp_Object last_frame = AREF (last_show_tip_args, 1);
Lisp_Object last_parms = AREF (last_show_tip_args, 2);
- if (EQ (frame, last_frame)
- && !NILP (Fequal (last_string, string))
+ if (FRAME_VISIBLE_P (XFRAME (tip_frame))
+ && EQ (frame, last_frame)
+ && !NILP (Fequal_including_properties (last_string, string))
&& !NILP (Fequal (last_parms, parms)))
{
- struct frame *f = XFRAME (tip_frame);
-
/* Only DX and DY have changed. */
+ tip_f = XFRAME (tip_frame);
if (!NILP (tip_timer))
{
Lisp_Object timer = tip_timer;
+
tip_timer = Qnil;
call1 (Qcancel_timer, timer);
}
block_input ();
- compute_tip_xy (f, parms, dx, dy, FRAME_PIXEL_WIDTH (f),
- FRAME_PIXEL_HEIGHT (f), &root_x, &root_y);
+ compute_tip_xy (tip_f, parms, dx, dy, FRAME_PIXEL_WIDTH (tip_f),
+ FRAME_PIXEL_HEIGHT (tip_f), &root_x, &root_y);
/* Put tooltip in topmost group and in position. */
- SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOPMOST,
+ SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOPMOST,
root_x, root_y, 0, 0,
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
/* Ensure tooltip is on top of other topmost windows (eg menus). */
- SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOP,
+ SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOP,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE
| SWP_NOACTIVATE | SWP_NOOWNERZORDER);
+ /* Let redisplay know that we have made the frame visible already. */
+ SET_FRAME_VISIBLE (tip_f, 1);
+ ShowWindow (FRAME_W32_WINDOW (tip_f), SW_SHOWNOACTIVATE);
unblock_input ();
+
goto start_timer;
}
- }
+ else if (tooltip_reuse_hidden_frame && EQ (frame, last_frame))
+ {
+ bool delete = false;
+ Lisp_Object tail, elt, parm, last;
+
+ /* Check if every parameter in PARMS has the same value in
+ last_parms. This may destruct last_parms which, however,
+ will be recreated below. */
+ for (tail = parms; CONSP (tail); tail = XCDR (tail))
+ {
+ elt = XCAR (tail);
+ parm = Fcar (elt);
+ /* The left, top, right and bottom parameters are handled
+ by compute_tip_xy so they can be ignored here. */
+ if (!EQ (parm, Qleft) && !EQ (parm, Qtop)
+ && !EQ (parm, Qright) && !EQ (parm, Qbottom))
+ {
+ last = Fassq (parm, last_parms);
+ if (NILP (Fequal (Fcdr (elt), Fcdr (last))))
+ {
+ /* We lost, delete the old tooltip. */
+ delete = true;
+ break;
+ }
+ else
+ last_parms = call2 (Qassq_delete_all, parm, last_parms);
+ }
+ else
+ last_parms = call2 (Qassq_delete_all, parm, last_parms);
+ }
- /* Hide a previous tip, if any. */
- Fx_hide_tip ();
+ /* Now check if there's a parameter left in last_parms with a
+ non-nil value. */
+ for (tail = last_parms; CONSP (tail); tail = XCDR (tail))
+ {
+ elt = XCAR (tail);
+ parm = Fcar (elt);
+ if (!EQ (parm, Qleft) && !EQ (parm, Qtop) && !EQ (parm, Qright)
+ && !EQ (parm, Qbottom) && !NILP (Fcdr (elt)))
+ {
+ /* We lost, delete the old tooltip. */
+ delete = true;
+ break;
+ }
+ }
+
+ x_hide_tip (delete);
+ }
+ else
+ x_hide_tip (true);
+ }
+ else
+ x_hide_tip (true);
ASET (last_show_tip_args, 0, string);
ASET (last_show_tip_args, 1, frame);
ASET (last_show_tip_args, 2, parms);
- /* Add default values to frame parameters. */
- if (NILP (Fassq (Qname, parms)))
- parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
- if (NILP (Fassq (Qinternal_border_width, parms)))
- parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
- if (NILP (Fassq (Qright_divider_width, parms)))
- parms = Fcons (Fcons (Qright_divider_width, make_number (0)), parms);
- if (NILP (Fassq (Qbottom_divider_width, parms)))
- parms = Fcons (Fcons (Qbottom_divider_width, make_number (0)), parms);
- if (NILP (Fassq (Qborder_width, parms)))
- parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
- if (NILP (Fassq (Qborder_color, parms)))
- parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
- if (NILP (Fassq (Qbackground_color, parms)))
- parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
- parms);
-
/* Block input until the tip has been fully drawn, to avoid crashes
when drawing tips in menus. */
block_input ();
- /* Create a frame for the tooltip, and record it in the global
- variable tip_frame. */
- frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string);
- f = XFRAME (frame);
+ if (!FRAMEP (tip_frame) || !FRAME_LIVE_P (XFRAME (tip_frame)))
+ {
+ /* Add default values to frame parameters. */
+ if (NILP (Fassq (Qname, parms)))
+ parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
+ if (NILP (Fassq (Qinternal_border_width, parms)))
+ parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
+ if (NILP (Fassq (Qborder_width, parms)))
+ parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
+ if (NILP (Fassq (Qborder_color, parms)))
+ parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
+ if (NILP (Fassq (Qbackground_color, parms)))
+ parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
+ parms);
+
+ /* Create a frame for the tooltip, and record it in the global
+ variable tip_frame. */
+ if (NILP (tip_frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms)))
+ {
+ /* Creating the tip frame failed. */
+ unblock_input ();
+ return unbind_to (count, Qnil);
+ }
+ }
+
+ tip_f = XFRAME (tip_frame);
+ window = FRAME_ROOT_WINDOW (tip_f);
+ AUTO_STRING (tip, " *tip*");
+ set_window_buffer (window, Fget_buffer_create (tip), false, false);
+ w = XWINDOW (window);
+ w->pseudo_window_p = true;
- /* Set up the frame's root window. */
- w = XWINDOW (FRAME_ROOT_WINDOW (f));
+ /* Set up the frame's root window. Note: The following code does not
+ try to size the window or its frame correctly. Its only purpose is
+ to make the subsequent text size calculations work. The right
+ sizes should get installed when the toolkit gets back to us. */
w->left_col = 0;
w->top_line = 0;
w->pixel_left = 0;
w->pixel_top = 0;
if (CONSP (Vx_max_tooltip_size)
- && INTEGERP (XCAR (Vx_max_tooltip_size))
- && XINT (XCAR (Vx_max_tooltip_size)) > 0
- && INTEGERP (XCDR (Vx_max_tooltip_size))
- && XINT (XCDR (Vx_max_tooltip_size)) > 0)
+ && RANGED_INTEGERP (1, XCAR (Vx_max_tooltip_size), INT_MAX)
+ && RANGED_INTEGERP (1, XCDR (Vx_max_tooltip_size), INT_MAX))
{
w->total_cols = XFASTINT (XCAR (Vx_max_tooltip_size));
w->total_lines = XFASTINT (XCDR (Vx_max_tooltip_size));
w->total_lines = 40;
}
- w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (f);
- w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (f);
-
- FRAME_TOTAL_COLS (f) = WINDOW_TOTAL_COLS (w);
- adjust_frame_glyphs (f);
- w->pseudo_window_p = true;
+ w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (tip_f);
+ w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (tip_f);
+ FRAME_TOTAL_COLS (tip_f) = WINDOW_TOTAL_COLS (w);
+ adjust_frame_glyphs (tip_f);
- /* Display the tooltip text in a temporary buffer. */
+ /* Insert STRING into the root window's buffer and fit the frame to
+ the buffer. */
+ count_1 = SPECPDL_INDEX ();
old_buffer = current_buffer;
- set_buffer_internal_1 (XBUFFER (XWINDOW (FRAME_ROOT_WINDOW (f))->contents));
+ set_buffer_internal_1 (XBUFFER (w->contents));
bset_truncate_lines (current_buffer, Qnil);
+ specbind (Qinhibit_read_only, Qt);
+ specbind (Qinhibit_modification_hooks, Qt);
+ specbind (Qinhibit_point_motion_hooks, Qt);
+ Ferase_buffer ();
+ Finsert (1, &string);
clear_glyph_matrix (w->desired_matrix);
clear_glyph_matrix (w->current_matrix);
SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
- try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
-
- /* Compute width and height of the tooltip. */
- width = height = 0;
- seen_reversed_p = false;
- for (i = 0; i < w->desired_matrix->nrows; ++i)
- {
- struct glyph_row *row = &w->desired_matrix->rows[i];
- struct glyph *last;
- int row_width;
-
- /* Stop at the first empty row at the end. */
- if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
- break;
-
- /* Let the row go over the full width of the frame. */
- row->full_width_p = true;
-
- row_width = row->pixel_width;
- if (row->used[TEXT_AREA])
- {
- if (!row->reversed_p)
- {
- /* There's a glyph at the end of rows that is used to
- place the cursor there. Don't include the width of
- this glyph. */
- last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
- if (NILP (last->object))
- row_width -= last->pixel_width;
- }
- else
- {
- /* There could be a stretch glyph at the beginning of R2L
- rows that is produced by extend_face_to_end_of_line.
- Don't count that glyph. */
- struct glyph *g = row->glyphs[TEXT_AREA];
-
- if (g->type == STRETCH_GLYPH && NILP (g->object))
- {
- row_width -= g->pixel_width;
- seen_reversed_p = true;
- }
- }
- }
-
- height += row->height;
- width = max (width, row_width);
- }
-
- /* If we've seen partial-length R2L rows, we need to re-adjust the
- tool-tip frame width and redisplay it again, to avoid over-wide
- tips due to the stretch glyph that extends R2L lines to full
- width of the frame. */
- if (seen_reversed_p)
- {
- /* PXW: Why do we do the pixel-to-cols conversion only if
- seen_reversed_p holds? Don't we have to set other fields of
- the window/frame structure?
-
- w->total_cols and FRAME_TOTAL_COLS want the width in columns,
- not in pixels. */
- w->pixel_width = width;
- width /= WINDOW_FRAME_COLUMN_WIDTH (w);
- w->total_cols = width;
- FRAME_TOTAL_COLS (f) = width;
- SET_FRAME_WIDTH (f, width);
- adjust_frame_glyphs (f);
- w->pseudo_window_p = 1;
- clear_glyph_matrix (w->desired_matrix);
- clear_glyph_matrix (w->current_matrix);
- try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
- width = height = 0;
- /* Recompute width and height of the tooltip. */
- for (i = 0; i < w->desired_matrix->nrows; ++i)
- {
- struct glyph_row *row = &w->desired_matrix->rows[i];
- struct glyph *last;
- int row_width;
-
- if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
- break;
- row->full_width_p = true;
- row_width = row->pixel_width;
- if (row->used[TEXT_AREA] && !row->reversed_p)
- {
- last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
- if (NILP (last->object))
- row_width -= last->pixel_width;
- }
-
- height += row->height;
- width = max (width, row_width);
- }
- }
-
- /* Add the frame's internal border to the width and height the w32
- window should have. */
- height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
- width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
-
- /* Move the tooltip window where the mouse pointer is. Resize and
- show it.
-
- PXW: This should use the frame's pixel coordinates. */
- compute_tip_xy (f, parms, dx, dy, width, height, &root_x, &root_y);
-
+ try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
+ /* Calculate size of tooltip window. */
+ size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
+ make_number (w->pixel_height), Qnil);
+ /* Add the frame's internal border to calculated size. */
+ width = XINT (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+ height = XINT (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+ /* Calculate position of tooltip frame. */
+ compute_tip_xy (tip_f, parms, dx, dy, width, height, &root_x, &root_y);
+
+ /* Show tooltip frame. */
{
- /* Adjust Window size to take border into account. */
RECT rect;
+ int pad = (NUMBERP (Vw32_tooltip_extra_pixels)
+ ? max (0, XINT (Vw32_tooltip_extra_pixels))
+ : FRAME_COLUMN_WIDTH (tip_f));
+
rect.left = rect.top = 0;
rect.right = width;
rect.bottom = height;
- AdjustWindowRect (&rect, f->output_data.w32->dwStyle, false);
-
- /* Position and size tooltip, and put it in the topmost group.
- The add-on of FRAME_COLUMN_WIDTH to the 5th argument is a
- peculiarity of w32 display: without it, some fonts cause the
- last character of the tip to be truncated or wrapped around to
- the next line. */
- SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOPMOST,
+ AdjustWindowRect (&rect, tip_f->output_data.w32->dwStyle,
+ FRAME_EXTERNAL_MENU_BAR (tip_f));
+
+ /* Position and size tooltip and put it in the topmost group. */
+ SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOPMOST,
root_x, root_y,
- rect.right - rect.left + FRAME_COLUMN_WIDTH (f),
+ rect.right - rect.left + pad,
rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOOWNERZORDER);
/* Ensure tooltip is on top of other topmost windows (eg menus). */
- SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOP,
+ SetWindowPos (FRAME_W32_WINDOW (tip_f), HWND_TOP,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE
| SWP_NOACTIVATE | SWP_NOOWNERZORDER);
/* Let redisplay know that we have made the frame visible already. */
- SET_FRAME_VISIBLE (f, 1);
+ SET_FRAME_VISIBLE (tip_f, 1);
- ShowWindow (FRAME_W32_WINDOW (f), SW_SHOWNOACTIVATE);
+ ShowWindow (FRAME_W32_WINDOW (tip_f), SW_SHOWNOACTIVATE);
}
- /* Draw into the window. */
w->must_be_updated_p = true;
update_single_window (w);
-
- unblock_input ();
-
- /* Restore original current buffer. */
set_buffer_internal_1 (old_buffer);
+ unbind_to (count_1, Qnil);
+ unblock_input ();
windows_or_buffers_changed = old_windows_or_buffers_changed;
start_timer:
Value is t if tooltip was open, nil otherwise. */)
(void)
{
- ptrdiff_t count;
- Lisp_Object deleted, frame, timer;
-
- /* Return quickly if nothing to do. */
- if (NILP (tip_timer) && NILP (tip_frame))
- return Qnil;
-
- frame = tip_frame;
- timer = tip_timer;
- tip_frame = tip_timer = deleted = Qnil;
-
- count = SPECPDL_INDEX ();
- specbind (Qinhibit_redisplay, Qt);
- specbind (Qinhibit_quit, Qt);
-
- if (!NILP (timer))
- call1 (Qcancel_timer, timer);
-
- if (FRAMEP (frame))
- {
- delete_frame (frame, Qnil);
- deleted = Qt;
- }
-
- return unbind_to (count, deleted);
+ return x_hide_tip (!tooltip_reuse_hidden_frame);
}
\f
/***********************************************************************
&& strcmp (lispy_function_keys[i], key) == 0)
return i;
+ if (w32_kbdhook_active)
+ {
+ /* Alphanumerics map to themselves. */
+ if (key[1] == 0)
+ {
+ if (key[0] >= 'A' && key[0] <= 'Z' ||
+ key[0] >= '0' && key[0] <= '9')
+ return key[0];
+ if (key[0] >= 'a' && key[0] <= 'z')
+ return toupper(key[0]);
+ }
+ }
+
return -1;
}
/* Convert a one-element vector style key sequence to a hot key
definition. */
static Lisp_Object
-w32_parse_hot_key (Lisp_Object key)
+w32_parse_and_hook_hot_key (Lisp_Object key, int hook)
{
/* Copied from Fdefine_key and store_in_keymap. */
register Lisp_Object c;
int vk_code;
int lisp_modifiers;
int w32_modifiers;
+ Lisp_Object res = Qnil;
+ char* vkname;
CHECK_VECTOR (key);
c = Fcar (c);
if (!SYMBOLP (c))
emacs_abort ();
- vk_code = lookup_vk_code (SSDATA (SYMBOL_NAME (c)));
+ vkname = SSDATA (SYMBOL_NAME (c));
+ /* [s-], [M-], [h-]: Register all keys for this modifier */
+ if (w32_kbdhook_active && vkname[0] == 0)
+ vk_code = VK_ANY;
+ else
+ vk_code = lookup_vk_code (vkname);
}
else if (INTEGERP (c))
{
#define MOD_WIN 0x0008
#endif
- /* Convert lisp modifiers to Windows hot-key form. */
- w32_modifiers = (lisp_modifiers & hyper_modifier) ? MOD_WIN : 0;
- w32_modifiers |= (lisp_modifiers & alt_modifier) ? MOD_ALT : 0;
- w32_modifiers |= (lisp_modifiers & ctrl_modifier) ? MOD_CONTROL : 0;
- w32_modifiers |= (lisp_modifiers & shift_modifier) ? MOD_SHIFT : 0;
+ if (w32_kbdhook_active)
+ {
+ /* Register Alt-x combinations. */
+ if (lisp_modifiers & alt_modifier)
+ {
+ hook_w32_key (hook, VK_MENU, vk_code);
+ res = Qt;
+ }
+ /* Register Win-x combinations based on modifier mappings. */
+ if (((lisp_modifiers & hyper_modifier)
+ && EQ (Vw32_lwindow_modifier, Qhyper))
+ || ((lisp_modifiers & super_modifier)
+ && EQ (Vw32_lwindow_modifier, Qsuper)))
+ {
+ hook_w32_key (hook, VK_LWIN, vk_code);
+ res = Qt;
+ }
+ if (((lisp_modifiers & hyper_modifier)
+ && EQ (Vw32_rwindow_modifier, Qhyper))
+ || ((lisp_modifiers & super_modifier)
+ && EQ (Vw32_rwindow_modifier, Qsuper)))
+ {
+ hook_w32_key (hook, VK_RWIN, vk_code);
+ res = Qt;
+ }
+ return res;
+ }
+ else
+ {
+ /* Convert lisp modifiers to Windows hot-key form. */
+ w32_modifiers = (lisp_modifiers & hyper_modifier) ? MOD_WIN : 0;
+ w32_modifiers |= (lisp_modifiers & alt_modifier) ? MOD_ALT : 0;
+ w32_modifiers |= (lisp_modifiers & ctrl_modifier) ? MOD_CONTROL : 0;
+ w32_modifiers |= (lisp_modifiers & shift_modifier) ? MOD_SHIFT : 0;
- return HOTKEY (vk_code, w32_modifiers);
+ return HOTKEY (vk_code, w32_modifiers);
+ }
}
DEFUN ("w32-register-hot-key", Fw32_register_hot_key,
Sw32_register_hot_key, 1, 1, 0,
doc: /* Register KEY as a hot-key combination.
-Certain key combinations like Alt-Tab are reserved for system use on
-Windows, and therefore are normally intercepted by the system. However,
-most of these key combinations can be received by registering them as
-hot-keys, overriding their special meaning.
-
-KEY must be a one element key definition in vector form that would be
-acceptable to `define-key' (e.g. [A-tab] for Alt-Tab). The meta
-modifier is interpreted as Alt if `w32-alt-is-meta' is t, and hyper
-is always interpreted as the Windows modifier keys.
-
-The return value is the hotkey-id if registered, otherwise nil. */)
+Certain key combinations like Alt-Tab and Win-R are reserved for
+system use on Windows, and therefore are normally intercepted by the
+system. These key combinations can be received by registering them
+as hot-keys, except for Win-L which always locks the computer.
+
+On Windows 98 and ME, KEY must be a one element key definition in
+vector form that would be acceptable to `define-key' (e.g. [A-tab] for
+Alt-Tab). The meta modifier is interpreted as Alt if
+`w32-alt-is-meta' is t, and hyper is always interpreted as the Windows
+modifier keys. The return value is the hotkey-id if registered, otherwise nil.
+
+On Windows versions since NT, KEY can also be specified as [M-], [s-] or
+[h-] to indicate that all combinations of that key should be processed
+by Emacs instead of the operating system. The super and hyper
+modifiers are interpreted according to the current values of
+`w32-lwindow-modifier' and `w32-rwindow-modifier'. For instance,
+setting `w32-lwindow-modifier' to `super' and then calling
+`(register-hot-key [s-])' grabs all combinations of the left Windows
+key to Emacs, but leaves the right Windows key free for the operating
+system keyboard shortcuts. The return value is t if the call affected
+any key combinations, otherwise nil. */)
(Lisp_Object key)
{
- key = w32_parse_hot_key (key);
+ key = w32_parse_and_hook_hot_key (key, 1);
- if (!NILP (key) && NILP (Fmemq (key, w32_grabbed_keys)))
+ if (!w32_kbdhook_active
+ && !NILP (key) && NILP (Fmemq (key, w32_grabbed_keys)))
{
/* Reuse an empty slot if possible. */
Lisp_Object item = Fmemq (Qnil, w32_grabbed_keys);
Lisp_Object item;
if (!INTEGERP (key))
- key = w32_parse_hot_key (key);
+ key = w32_parse_and_hook_hot_key (key, 0);
+
+ if (w32_kbdhook_active)
+ return key;
item = Fmemq (key, w32_grabbed_keys);
DEFSYM (Qctrl, "ctrl");
DEFSYM (Qcontrol, "control");
DEFSYM (Qshift, "shift");
- DEFSYM (Qfont_param, "font-parameter");
+ DEFSYM (Qfont_parameter, "font-parameter");
DEFSYM (Qgeometry, "geometry");
DEFSYM (Qworkarea, "workarea");
DEFSYM (Qmm_size, "mm-size");
DEFSYM (Qframes, "frames");
DEFSYM (Qtip_frame, "tip-frame");
+ DEFSYM (Qassq_delete_all, "assq-delete-all");
DEFSYM (Qunicode_sip, "unicode-sip");
#if defined WINDOWSNT && !defined HAVE_DBUS
DEFSYM (QCicon, ":icon");
#endif
/* Symbols used elsewhere, but only in MS-Windows-specific code. */
- DEFSYM (Qgnutls_dll, "gnutls");
- DEFSYM (Qlibxml2_dll, "libxml2");
+ DEFSYM (Qgnutls, "gnutls");
+ DEFSYM (Qlibxml2, "libxml2");
DEFSYM (Qserif, "serif");
- DEFSYM (Qzlib_dll, "zlib");
+ DEFSYM (Qzlib, "zlib");
Fput (Qundefined_color, Qerror_conditions,
listn (CONSTYPE_PURE, 2, Qundefined_color, Qerror));
If you set this to nil, the left \"Windows\" key is processed by Emacs
according to the value of `w32-lwindow-modifier', which see.
-Note that some combinations of the left \"Windows\" key with other keys are
-caught by Windows at low level, and so binding them in Emacs will have no
-effect. For example, <lwindow>-r always pops up the Windows Run dialog,
-<lwindow>-<Pause> pops up the "System Properties" dialog, etc. However, see
-the doc string of `w32-phantom-key-code'. */);
+Note that some combinations of the left \"Windows\" key with other
+keys are caught by Windows at low level. For example, <lwindow>-r
+pops up the Windows Run dialog, <lwindow>-<Pause> pops up the "System
+Properties" dialog, etc. On Windows 10, no \"Windows\" key
+combinations are normally handed to applications. To enable Emacs to
+process \"Windows\" key combinations, use the function
+`w32-register-hot-key`.
+
+For Windows 98/ME, see the doc string of `w32-phantom-key-code'. */);
Vw32_pass_lwindow_to_system = Qt;
DEFVAR_LISP ("w32-pass-rwindow-to-system",
If you set this to nil, the right \"Windows\" key is processed by Emacs
according to the value of `w32-rwindow-modifier', which see.
-Note that some combinations of the right \"Windows\" key with other keys are
-caught by Windows at low level, and so binding them in Emacs will have no
-effect. For example, <rwindow>-r always pops up the Windows Run dialog,
-<rwindow>-<Pause> pops up the "System Properties" dialog, etc. However, see
-the doc string of `w32-phantom-key-code'. */);
+Note that some combinations of the right \"Windows\" key with other
+keys are caught by Windows at low level. For example, <rwindow>-r
+pops up the Windows Run dialog, <rwindow>-<Pause> pops up the "System
+Properties" dialog, etc. On Windows 10, no \"Windows\" key
+combinations are normally handed to applications. To enable Emacs to
+process \"Windows\" key combinations, use the function
+`w32-register-hot-key`.
+
+For Windows 98/ME, see the doc string of `w32-phantom-key-code'. */);
Vw32_pass_rwindow_to_system = Qt;
DEFVAR_LISP ("w32-phantom-key-code",
Phantom key presses are generated in order to stop the system from
acting on \"Windows\" key events when `w32-pass-lwindow-to-system' or
-`w32-pass-rwindow-to-system' is nil. */);
+`w32-pass-rwindow-to-system' is nil.
+
+This variable is only used on Windows 98 and ME. For other Windows
+versions, see the documentation of the `w32-register-hot-key`
+function. */);
/* Although 255 is technically not a valid key code, it works and
means that this hack won't interfere with any real key code. */
XSETINT (Vw32_phantom_key_code, 255);
doc: /* Modifier to use for the left \"Windows\" key.
The value can be hyper, super, meta, alt, control or shift for the
respective modifier, or nil to appear as the `lwindow' key.
-Any other value will cause the key to be ignored. */);
+Any other value will cause the key to be ignored.
+
+Also see the documentation of the `w32-register-hot-key` function. */);
Vw32_lwindow_modifier = Qnil;
DEFVAR_LISP ("w32-rwindow-modifier",
doc: /* Modifier to use for the right \"Windows\" key.
The value can be hyper, super, meta, alt, control or shift for the
respective modifier, or nil to appear as the `rwindow' key.
-Any other value will cause the key to be ignored. */);
+Any other value will cause the key to be ignored.
+
+Also see the documentation of the `w32-register-hot-key` function. */);
Vw32_rwindow_modifier = Qnil;
DEFVAR_LISP ("w32-apps-modifier",
This variable has effect only on Windows Vista and later. */);
w32_disable_new_uniscribe_apis = 0;
+ DEFVAR_LISP ("w32-tooltip-extra-pixels",
+ Vw32_tooltip_extra_pixels,
+ doc: /* Number of pixels added after tooltip text.
+On Windows some fonts may cause the last character of a tooltip be
+truncated or wrapped around to the next line. Adding some extra space
+at the end of the toooltip works around this problem.
+
+This variable specifies the number of pixels that shall be added. The
+default value t means to add the width of one canonical character of the
+tip frame. */);
+ Vw32_tooltip_extra_pixels = Qt;
+
#if 0 /* TODO: Port to W32 */
defsubr (&Sx_change_window_property);
defsubr (&Sx_delete_window_property);
#include "termchar.h" /* for Mouse_HLInfo, tty_display_info */
#include "w32term.h"
#include "w32inevt.h"
+#include "w32common.h"
/* stdin, from w32console.c */
extern HANDLE keyboard_handle;
switch (event->wVirtualKeyCode)
{
case VK_LWIN:
- mod_key_state &= ~LEFT_WIN_PRESSED;
+ if (!w32_kbdhook_active)
+ mod_key_state &= ~LEFT_WIN_PRESSED;
break;
case VK_RWIN:
- mod_key_state &= ~RIGHT_WIN_PRESSED;
+ if (!w32_kbdhook_active)
+ mod_key_state &= ~RIGHT_WIN_PRESSED;
break;
case VK_APPS:
mod_key_state &= ~APPS_PRESSED;
keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0);
}
}
- mod_key_state |= LEFT_WIN_PRESSED;
+ if (!w32_kbdhook_active)
+ mod_key_state |= LEFT_WIN_PRESSED;
if (!NILP (Vw32_lwindow_modifier))
return 0;
break;
keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0);
}
}
- mod_key_state |= RIGHT_WIN_PRESSED;
+ if (!w32_kbdhook_active)
+ mod_key_state |= RIGHT_WIN_PRESSED;
if (!NILP (Vw32_rwindow_modifier))
return 0;
break;
/* Recognize state of Windows and Apps keys. */
event->dwControlKeyState |= mod_key_state;
+ if (w32_kbdhook_active)
+ {
+ if (check_w32_winkey_state (VK_LWIN))
+ event->dwControlKeyState |= LEFT_WIN_PRESSED;
+ if (check_w32_winkey_state (VK_RWIN))
+ event->dwControlKeyState |= RIGHT_WIN_PRESSED;
+ }
/* Distinguish numeric keypad keys from extended keys. */
event->wVirtualKeyCode =
int
handle_file_notifications (struct input_event *hold_quit)
{
- BYTE *p = file_notifications;
- FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
- const DWORD min_size
- = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
- struct input_event inev;
+ struct notifications_set *ns = NULL;
int nevents = 0;
+ int done = 0;
/* We cannot process notification before Emacs is fully initialized,
since we need the UTF-16LE coding-system to be set up. */
if (!initialized)
{
- notification_buffer_in_use = 0;
return nevents;
}
- enter_crit ();
- if (notification_buffer_in_use)
+ while (!done)
{
- DWORD info_size = notifications_size;
- Lisp_Object cs = Qutf_16le;
- Lisp_Object obj = w32_get_watch_object (notifications_desc);
-
- /* notifications_size could be zero when the buffer of
- notifications overflowed on the OS level, or when the
- directory being watched was itself deleted. Do nothing in
- that case. */
- if (info_size
- && !NILP (obj) && CONSP (obj))
- {
- Lisp_Object callback = XCDR (obj);
+ ns = NULL;
- EVENT_INIT (inev);
+ /* Find out if there is a record available in the linked list of
+ notifications sets. If so, unlink te set from the linked list.
+ Use the critical section. */
+ enter_crit ();
+ if (notifications_set_head->next != notifications_set_head)
+ {
+ ns = notifications_set_head->next;
+ ns->prev->next = ns->next;
+ ns->next->prev = ns->prev;
+ }
+ else
+ done = 1;
+ leave_crit();
- while (info_size >= min_size)
+ if (ns)
+ {
+ BYTE *p = ns->notifications;
+ FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
+ const DWORD min_size
+ = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
+ struct input_event inev;
+ DWORD info_size = ns->size;
+ Lisp_Object cs = Qutf_16le;
+ Lisp_Object obj = w32_get_watch_object (ns->desc);
+
+ /* notifications size could be zero when the buffer of
+ notifications overflowed on the OS level, or when the
+ directory being watched was itself deleted. Do nothing in
+ that case. */
+ if (info_size
+ && !NILP (obj) && CONSP (obj))
{
- Lisp_Object utf_16_fn
- = make_unibyte_string ((char *)fni->FileName,
- fni->FileNameLength);
- /* Note: mule-conf is preloaded, so utf-16le must
- already be defined at this point. */
- Lisp_Object fname
- = code_convert_string_norecord (utf_16_fn, cs, 0);
- Lisp_Object action = lispy_file_action (fni->Action);
-
- inev.kind = FILE_NOTIFY_EVENT;
- inev.timestamp = GetTickCount ();
- inev.modifiers = 0;
- inev.frame_or_window = callback;
- inev.arg = Fcons (action, fname);
- inev.arg = list3 (make_pointer_integer (notifications_desc),
- action, fname);
- kbd_buffer_store_event_hold (&inev, hold_quit);
- nevents++;
-
- if (!fni->NextEntryOffset)
- break;
- p += fni->NextEntryOffset;
- fni = (PFILE_NOTIFY_INFORMATION)p;
- info_size -= fni->NextEntryOffset;
+ Lisp_Object callback = XCDR (obj);
+
+ EVENT_INIT (inev);
+
+ while (info_size >= min_size)
+ {
+ Lisp_Object utf_16_fn
+ = make_unibyte_string ((char *)fni->FileName,
+ fni->FileNameLength);
+ /* Note: mule-conf is preloaded, so utf-16le must
+ already be defined at this point. */
+ Lisp_Object fname
+ = code_convert_string_norecord (utf_16_fn, cs, 0);
+ Lisp_Object action = lispy_file_action (fni->Action);
+
+ inev.kind = FILE_NOTIFY_EVENT;
+ inev.timestamp = GetTickCount ();
+ inev.modifiers = 0;
+ inev.frame_or_window = callback;
+ inev.arg = Fcons (action, fname);
+ inev.arg = list3 (make_pointer_integer (ns->desc),
+ action, fname);
+ kbd_buffer_store_event_hold (&inev, hold_quit);
+ nevents++;
+ if (!fni->NextEntryOffset)
+ break;
+ p += fni->NextEntryOffset;
+ fni = (PFILE_NOTIFY_INFORMATION)p;
+ info_size -= fni->NextEntryOffset;
+ }
}
+ /* Free this notification set. */
+ free (ns->notifications);
+ free (ns);
}
- notification_buffer_in_use = 0;
}
- leave_crit ();
return nevents;
}
#else /* !HAVE_W32NOTIFY */
For each watch request, we launch a separate worker thread. The
worker thread runs the watch_worker function, which issues an
- asynchronous call to ReadDirectoryChangesW, and then waits in
- SleepEx for that call to complete. Waiting in SleepEx puts the
- thread in an "alertable" state, so it wakes up when either (a) the
- call to ReadDirectoryChangesW completes, or (b) the main thread
- instructs the worker thread to terminate by sending it an APC, see
- below.
+ asynchronous call to ReadDirectoryChangesW, and then calls
+ WaitForSingleObjectEx to wait that an event be signaled
+ to terminate the thread.
+ Waiting with WaitForSingleObjectEx puts the thread in an
+ "alertable" state, so it wakes up when either (a) the call to
+ ReadDirectoryChangesW completes, or (b) the main thread instructs
+ the worker thread to terminate by signaling an event, see below.
When the ReadDirectoryChangesW call completes, its completion
routine watch_completion is automatically called. watch_completion
- stashes the received file events in a buffer used to communicate
- them to the main thread (using a critical section, so that several
- threads could use the same buffer), posts a special message,
- WM_EMACS_FILENOTIFY, to the Emacs's message queue, and returns.
- That causes the SleepEx function call inside watch_worker to
- return, and watch_worker then issues another call to
- ReadDirectoryChangesW. (Except when it does not, see below.)
+ stashes the received file events in a linked list used to
+ communicate them to the main thread (using a critical section, so
+ that several threads could alter the same linked list), posts a
+ special message, WM_EMACS_FILENOTIFY, to the Emacs's message queue,
+ and returns. That causes the WaitForSingleObjectEx function call
+ inside watch_worker to return, but the thread won't terminate until
+ the event telling to do so will be signaled. The completion
+ routine issued another call to ReadDirectoryChangesW as quickly as
+ possible. (Except when it does not, see below.)
In a GUI session, the WM_EMACS_FILENOTIFY message posted to the
message queue gets dispatched to the main Emacs window procedure,
which queues it for processing by w32_read_socket. When
- w32_read_socket sees this message, it accesses the buffer with file
+ w32_read_socket sees this message, it accesses the linked list with file
notifications (using a critical section), extracts the information,
converts it to a series of FILE_NOTIFY_EVENT events, and stuffs
them into the input event queue to be processed by keyboard.c input
procedures in console programs. That message wakes up
MsgWaitForMultipleObjects inside sys_select, which then signals to
its caller that some keyboard input is available. This causes
- w32_console_read_socket to be called, which accesses the buffer
+ w32_console_read_socket to be called, which accesses the linked list
with file notifications and stuffs them into the input event queue
for keyboard.c to process.
bound to a command. The default binding is file-notify-handle-event,
defined on subr.el.
- After w32_read_socket or w32_console_read_socket are done
- processing the notifications, they reset a flag signaling to all
- watch worker threads that the notifications buffer is available for
- more input.
+ Routines w32_read_socket or w32_console_read_socket process notifications
+ sets as long as some are available.
When the watch is removed by a call to w32notify-rm-watch, the main
- thread requests that the worker thread terminates by queuing an APC
- for the worker thread. The APC specifies the watch_end function to
- be called. watch_end calls CancelIo on the outstanding
- ReadDirectoryChangesW call and closes the handle on which the
- watched directory was open. When watch_end returns, the
- watch_completion function is called one last time with the
- ERROR_OPERATION_ABORTED status, which causes it to clean up and set
- a flag telling watch_worker to exit without issuing another
- ReadDirectoryChangesW call. Since watch_worker is the thread
- procedure of the worker thread, exiting it causes the thread to
- exit. The main thread waits for some time for the worker thread to
- exit, and if it doesn't, terminates it forcibly. */
+ thread requests that the worker thread terminates by signaling the
+ appropriate event and queuing an APC for the worker thread. The
+ APC specifies the watch_end function to be called. watch_end calls
+ CancelIo on the outstanding ReadDirectoryChangesW call. When
+ watch_end returns, the watch_completion function is called one last
+ time with the ERROR_OPERATION_ABORTED status, which causes it to
+ clean up and set a flag telling watch_worker to exit without
+ issuing another ReadDirectoryChangesW call. Since watch_worker is
+ the thread procedure of the worker thread, exiting it causes the
+ thread to exit. The main thread waits for some time for the worker
+ thread to exit, and if it doesn't, terminates it forcibly. */
#include <stddef.h>
#include <errno.h>
#include "frame.h" /* needed by termhooks.h */
#include "termhooks.h" /* for FILE_NOTIFY_EVENT */
+#define DIRWATCH_BUFFER_SIZE 16384
#define DIRWATCH_SIGNATURE 0x01233210
struct notification {
char *watchee; /* the file we are interested in, UTF-8 encoded */
HANDLE dir; /* handle to the watched directory */
HANDLE thr; /* handle to the thread that watches */
- volatile int terminate; /* if non-zero, request for the thread to terminate */
+ HANDLE terminate; /* event signaling the thread to terminate */
unsigned signature;
};
/* Used for communicating notifications to the main thread. */
-volatile int notification_buffer_in_use;
-BYTE file_notifications[16384];
-DWORD notifications_size;
-void *notifications_desc;
+struct notifications_set *notifications_set_head;
static Lisp_Object watch_list;
/* Signal to the main thread that we have file notifications for it to
process. */
static void
-send_notifications (BYTE *info, DWORD info_size, void *desc,
- volatile int *terminate)
+send_notifications (struct notifications_set *ns)
{
int done = 0;
struct frame *f = SELECTED_FRAME ();
- /* A single buffer is used to communicate all notifications to the
- main thread. Since both the main thread and several watcher
- threads could be active at the same time, we use a critical area
- and an "in-use" flag to synchronize them. A watcher thread can
- only put its notifications in the buffer if it acquires the
- critical area and finds the "in-use" flag reset. The main thread
- resets the flag after it is done processing notifications.
-
- FIXME: is there a better way of dealing with this? */
- while (!done && !*terminate)
- {
+ /* We add the current notification set to the linked list. Use the
+ critical section to make sure only one thread will access the
+ linked list. */
enter_crit ();
- if (!notification_buffer_in_use)
- {
- if (info_size)
- memcpy (file_notifications, info,
- min (info_size, sizeof (file_notifications)));
- notifications_size = min (info_size, sizeof (file_notifications));
- notifications_desc = desc;
- /* If PostMessage fails, the message queue is full. If that
- happens, the last thing they will worry about is file
- notifications. So we effectively discard the
- notification in that case. */
- if ((FRAME_TERMCAP_P (f)
- /* We send the message to the main (a.k.a. "Lisp")
- thread, where it will wake up MsgWaitForMultipleObjects
- inside sys_select, causing it to report that there's
- some keyboard input available. This will in turn cause
- w32_console_read_socket to be called, which will pick
- up the file notifications. */
- && PostThreadMessage (dwMainThreadId, WM_EMACS_FILENOTIFY, 0, 0))
- || (FRAME_W32_P (f)
- && PostMessage (FRAME_W32_WINDOW (f),
- WM_EMACS_FILENOTIFY, 0, 0))
- /* When we are running in batch mode, there's no one to
- send a message, so we just signal the data is
- available and hope sys_select will be called soon and
- will read the data. */
- || (FRAME_INITIAL_P (f) && noninteractive))
- notification_buffer_in_use = 1;
- done = 1;
- }
- leave_crit ();
- if (!done)
- Sleep (5);
- }
+ ns->next = notifications_set_head;
+ ns->prev = notifications_set_head->prev;
+ ns->prev->next = ns;
+ notifications_set_head->prev = ns;
+ leave_crit();
+
+ /* If PostMessage fails, the message queue is full. If that
+ happens, the last thing they will worry about is file
+ notifications. So we effectively discard the notification in
+ that case. */
+ if (FRAME_TERMCAP_P (f))
+ /* We send the message to the main (a.k.a. "Lisp") thread, where
+ it will wake up MsgWaitForMultipleObjects inside sys_select,
+ causing it to report that there's some keyboard input
+ available. This will in turn cause w32_console_read_socket to
+ be called, which will pick up the file notifications. */
+ PostThreadMessage (dwMainThreadId, WM_EMACS_FILENOTIFY, 0, 0);
+ else if (FRAME_W32_P (f))
+ PostMessage (FRAME_W32_WINDOW (f),
+ WM_EMACS_FILENOTIFY, 0, 0);
+ /* When we are running in batch mode, there's no one to send a
+ message, so we just signal the data is available and hope
+ sys_select will be called soon and will read the data. */
+ else if (FRAME_INITIAL_P (f) && noninteractive)
+ ;
}
/* An APC routine to cancel outstanding directory watch. Invoked by
HANDLE hdir = (HANDLE)arg;
if (hdir && hdir != INVALID_HANDLE_VALUE)
- {
- CancelIo (hdir);
- CloseHandle (hdir);
- }
+ CancelIo (hdir);
}
/* A completion routine (a.k.a. "APC function") for handling events
watch_completion (DWORD status, DWORD bytes_ret, OVERLAPPED *io_info)
{
struct notification *dirwatch;
+ DWORD _bytes;
+ struct notifications_set *ns = NULL;
+ BOOL terminate = FALSE;
/* Who knows what happened? Perhaps the OVERLAPPED structure was
freed by someone already? In any case, we cannot do anything
with this request, so just punt and skip it. FIXME: should we
raise the 'terminate' flag in this case? */
if (!io_info)
- return;
+ {
+ DebPrint(("watch_completion: io_info is null.\n"));
+ return;
+ }
/* We have a pointer to our dirwatch structure conveniently stashed
away in the hEvent member of the OVERLAPPED struct. According to
of the OVERLAPPED structure is not used by the system, so you can
use it yourself." */
dirwatch = (struct notification *)io_info->hEvent;
+
if (status == ERROR_OPERATION_ABORTED)
{
/* We've been called because the main thread told us to issue
CancelIo on the directory we watch, and watch_end did so.
- The directory handle is already closed. We should clean up
- and exit, signaling to the thread worker routine not to
- issue another call to ReadDirectoryChangesW. Note that we
- don't free the dirwatch object itself nor the memory consumed
- by its buffers; this is done by the main thread in
- remove_watch. Calling malloc/free from a thread other than
- the main thread is a no-no. */
- dirwatch->dir = NULL;
- dirwatch->terminate = 1;
+ We must exit, without issuing another call to
+ ReadDirectoryChangesW. */
+ return;
}
- else
+
+ /* We allocate a new set of notifications to be linked to the linked
+ list of notifications set. This will be processed by Emacs event
+ loop in the main thread. We need to duplicate the notifications
+ buffer, but not the dirwatch structure. */
+
+ /* Implementation note: In general, allocating memory in non-main
+ threads is a no-no in Emacs. We certainly cannot call xmalloc
+ and friends, because it can longjmp when allocation fails, which
+ will crash Emacs because the jmp_buf is set up to a location on
+ the main thread's stack. However, we can call 'malloc' directly,
+ since that is redirected to HeapAlloc that uses our private heap,
+ see w32heap.c, and that is thread-safe. */
+ ns = malloc (sizeof(struct notifications_set));
+ if (ns)
+ {
+ memset (ns, 0, sizeof(struct notifications_set));
+ ns->notifications = malloc (bytes_ret);
+ if (ns->notifications)
+ {
+ memcpy (ns->notifications, dirwatch->buf, bytes_ret);
+ ns->size = bytes_ret;
+ ns->desc = dirwatch;
+ }
+ else
+ {
+ free (ns);
+ ns = NULL;
+ }
+ }
+ if (ns == NULL)
+ DebPrint(("Out of memory. Notifications lost."));
+
+ /* Calling ReadDirectoryChangesW quickly to watch again for new
+ notifications. */
+ if (!ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf,
+ DIRWATCH_BUFFER_SIZE, dirwatch->subtree,
+ dirwatch->filter, &_bytes, dirwatch->io_info,
+ watch_completion))
{
- /* Tell the main thread we have notifications for it. */
- send_notifications (dirwatch->buf, bytes_ret, dirwatch,
- &dirwatch->terminate);
+ DebPrint (("ReadDirectoryChangesW error: %lu\n", GetLastError ()));
+ /* If this call fails, it means that the directory is not
+ watchable any more. We need to terminate the worker thread.
+ Still, we will wait until the current notifications have been
+ sent to the main thread. */
+ terminate = TRUE;
}
+
+ if (ns)
+ send_notifications(ns);
+
+ /* If we were asked to terminate the thread, then fire the event. */
+ if (terminate)
+ SetEvent(dirwatch->terminate);
}
/* Worker routine for the watch thread. */
watch_worker (LPVOID arg)
{
struct notification *dirwatch = (struct notification *)arg;
+ BOOL bErr;
+ DWORD _bytes = 0;
+ DWORD status;
+
+ if (dirwatch->dir)
+ {
+ bErr = ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf,
+ DIRWATCH_BUFFER_SIZE, dirwatch->subtree,
+ dirwatch->filter, &_bytes,
+ dirwatch->io_info, watch_completion);
+ if (!bErr)
+ {
+ DebPrint (("ReadDirectoryChangesW: %lu\n", GetLastError ()));
+ /* We cannot remove the dirwatch object from watch_list,
+ because we are in a separate thread. For the same
+ reason, we also cannot free memory consumed by the
+ buffers allocated for the dirwatch object. So we close
+ the directory handle, but do not free the object itself
+ or its buffers. We also don't touch the signature. This
+ way, remove_watch can still identify the object, remove
+ it, and free its memory. */
+ CloseHandle (dirwatch->dir);
+ dirwatch->dir = NULL;
+ return 1;
+ }
+ }
do {
- BOOL status;
- DWORD bytes_ret = 0;
-
- if (dirwatch->dir)
- {
- status = ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf, 16384,
- dirwatch->subtree, dirwatch->filter,
- &bytes_ret,
- dirwatch->io_info, watch_completion);
- if (!status)
- {
- DebPrint (("watch_worker, abnormal exit: %lu\n", GetLastError ()));
- /* We cannot remove the dirwatch object from watch_list,
- because we are in a separate thread. For the same
- reason, we also cannot free memory consumed by the
- buffers allocated for the dirwatch object. So we close
- the directory handle, but do not free the object itself
- or its buffers. We also don't touch the signature.
- This way, remove_watch can still identify the object,
- remove it, and free its memory. */
- CloseHandle (dirwatch->dir);
- dirwatch->dir = NULL;
- return 1;
- }
- }
- /* Sleep indefinitely until awoken by the I/O completion, which
- could be either a change notification or a cancellation of the
- watch. */
- SleepEx (INFINITE, TRUE);
- } while (!dirwatch->terminate);
+ status = WaitForSingleObjectEx(dirwatch->terminate, INFINITE, TRUE);
+ } while (status == WAIT_IO_COMPLETION);
+
+ /* The thread is about to terminate, so we clean up the dir handle. */
+ CloseHandle (dirwatch->dir);
+ dirwatch->dir = NULL;
return 0;
}
-
/* Launch a thread to watch changes to FILE in a directory open on
handle HDIR. */
static struct notification *
struct notification *dirwatch = xzalloc (sizeof (struct notification));
dirwatch->signature = DIRWATCH_SIGNATURE;
- dirwatch->buf = xmalloc (16384);
+ dirwatch->buf = xmalloc (DIRWATCH_BUFFER_SIZE);
dirwatch->io_info = xzalloc (sizeof(OVERLAPPED));
/* Stash a pointer to dirwatch structure for use by the completion
routine. According to MSDN documentation of ReadDirectoryChangesW:
dirwatch->subtree = subdirs;
dirwatch->filter = flags;
dirwatch->watchee = xstrdup (file);
- dirwatch->terminate = 0;
+
+ dirwatch->terminate = CreateEvent(NULL, FALSE, FALSE, NULL);
+
dirwatch->dir = hdir;
/* See w32proc.c where it calls CreateThread for the story behind
if (!dirwatch->thr)
{
+ CloseHandle(dirwatch->terminate);
xfree (dirwatch->buf);
xfree (dirwatch->io_info);
xfree (dirwatch->watchee);
xfree (dirwatch);
- dirwatch = NULL;
}
return dirwatch;
}
return NULL;
if ((dirwatch = start_watching (file, hdir, subdirs, flags)) == NULL)
- CloseHandle (hdir);
+ {
+ CloseHandle (hdir);
+ dirwatch->dir = NULL;
+ }
return dirwatch;
}
{
int i;
BOOL status;
- DWORD exit_code, err;
+ DWORD exit_code = 0, err;
/* Only the thread that issued the outstanding I/O call can call
CancelIo on it. (CancelIoEx is available only since Vista.)
to terminate. */
if (!QueueUserAPC (watch_end, dirwatch->thr, (ULONG_PTR)dirwatch->dir))
DebPrint (("QueueUserAPC failed (%lu)!\n", GetLastError ()));
- /* We also set the terminate flag, for when the thread is
- waiting on the critical section that never gets acquired.
- FIXME: is there a cleaner method? Using SleepEx there is a
- no-no, as that will lead to recursive APC invocations and
- stack overflow. */
- dirwatch->terminate = 1;
+
+ /* We also signal the thread that it can terminate. */
+ SetEvent(dirwatch->terminate);
+
/* Wait for the thread to exit. FIXME: is there a better method
that is not overly complex? */
for (i = 0; i < 50; i++)
break;
Sleep (10);
}
+
if ((status == FALSE && (err = GetLastError ()) == ERROR_INVALID_HANDLE)
|| exit_code == STILL_ACTIVE)
{
if (!(status == FALSE && err == ERROR_INVALID_HANDLE))
{
+ DebPrint(("Forcing thread termination.\n"));
TerminateThread (dirwatch->thr, 0);
if (dirwatch->dir)
CloseHandle (dirwatch->dir);
CloseHandle (dirwatch->thr);
dirwatch->thr = NULL;
}
+ CloseHandle(dirwatch->terminate);
xfree (dirwatch->buf);
xfree (dirwatch->io_info);
xfree (dirwatch->watchee);
xfree (dirwatch);
-
return 0;
}
else
switch (format)
{
case CF_UNICODETEXT:
- htext = convert_to_handle_as_coded (QUNICODE);
+ htext = convert_to_handle_as_coded (Qutf_16le_dos);
break;
case CF_TEXT:
case CF_OEMTEXT:
current_text = Qnil; staticpro (¤t_text);
current_coding_system = Qnil; staticpro (¤t_coding_system);
- DEFSYM (QUNICODE, "utf-16le-dos");
+ DEFSYM (Qutf_16le_dos, "utf-16le-dos");
QANSICP = Qnil; staticpro (&QANSICP);
QOEMCP = Qnil; staticpro (&QOEMCP);
}
QOEMCP = coding_from_cp (OEMCP);
if (os_subtype == OS_NT)
- Vselection_coding_system = QUNICODE;
+ Vselection_coding_system = Qutf_16le_dos;
else if (inhibit_window_system)
Vselection_coding_system = QOEMCP;
else
queue_notifications (struct input_event *event, W32Msg *msg, struct frame *f,
int *evcount)
{
- BYTE *p = file_notifications;
- FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
- const DWORD min_size
- = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
+ struct notifications_set *ns = NULL;
Lisp_Object frame;
+ int done = 0;
/* We cannot process notification before Emacs is fully initialized,
since we need the UTF-16LE coding-system to be set up. */
if (!initialized)
- {
- notification_buffer_in_use = 0;
- return;
- }
+ return;
XSETFRAME (frame, f);
- enter_crit ();
- if (notification_buffer_in_use)
+ while (!done)
{
- DWORD info_size = notifications_size;
- Lisp_Object cs = Qutf_16le;
- Lisp_Object obj = w32_get_watch_object (notifications_desc);
-
- /* notifications_size could be zero when the buffer of
- notifications overflowed on the OS level, or when the
- directory being watched was itself deleted. Do nothing in
- that case. */
- if (info_size
- && !NILP (obj) && CONSP (obj))
+ ns = NULL;
+
+ /* Find out if there is a record available in the linked list of
+ notifications sets. If so, unlink the set from the linked
+ list. Use critical section. */
+ enter_crit ();
+ if (notifications_set_head->next != notifications_set_head)
{
- Lisp_Object callback = XCDR (obj);
+ ns = notifications_set_head->next;
+ ns->prev->next = ns->next;
+ ns->next->prev = ns->prev;
+ }
+ else
+ done = 1;
+ leave_crit();
- while (info_size >= min_size)
+ if (ns)
+ {
+ BYTE *p = ns->notifications;
+ FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
+ const DWORD min_size
+ = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
+ DWORD info_size = ns->size;
+ Lisp_Object cs = Qutf_16le;
+ Lisp_Object obj = w32_get_watch_object (ns->desc);
+
+ /* notifications size could be zero when the buffer of
+ notifications overflowed on the OS level, or when the
+ directory being watched was itself deleted. Do nothing in
+ that case. */
+ if (info_size
+ && !NILP (obj) && CONSP (obj))
{
- Lisp_Object utf_16_fn
- = make_unibyte_string ((char *)fni->FileName,
- fni->FileNameLength);
- /* Note: mule-conf is preloaded, so utf-16le must
- already be defined at this point. */
- Lisp_Object fname
- = code_convert_string_norecord (utf_16_fn, cs, 0);
- Lisp_Object action = lispy_file_action (fni->Action);
-
- event->kind = FILE_NOTIFY_EVENT;
- event->timestamp = msg->msg.time;
- event->modifiers = 0;
- event->frame_or_window = callback;
- event->arg = list3 (make_pointer_integer (notifications_desc),
- action, fname);
- kbd_buffer_store_event (event);
- (*evcount)++;
-
- if (!fni->NextEntryOffset)
- break;
- p += fni->NextEntryOffset;
- fni = (PFILE_NOTIFY_INFORMATION)p;
- info_size -= fni->NextEntryOffset;
+ Lisp_Object callback = XCDR (obj);
+
+ while (info_size >= min_size)
+ {
+ Lisp_Object utf_16_fn
+ = make_unibyte_string ((char *)fni->FileName,
+ fni->FileNameLength);
+ /* Note: mule-conf is preloaded, so utf-16le must
+ already be defined at this point. */
+ Lisp_Object fname
+ = code_convert_string_norecord (utf_16_fn, cs, 0);
+ Lisp_Object action = lispy_file_action (fni->Action);
+
+ event->kind = FILE_NOTIFY_EVENT;
+ event->timestamp = msg->msg.time;
+ event->modifiers = 0;
+ event->frame_or_window = callback;
+ event->arg = list3 (make_pointer_integer (ns->desc),
+ action, fname);
+ kbd_buffer_store_event (event);
+ (*evcount)++;
+ if (!fni->NextEntryOffset)
+ break;
+ p += fni->NextEntryOffset;
+ fni = (PFILE_NOTIFY_INFORMATION)p;
+ info_size -= fni->NextEntryOffset;
+ }
}
+ /* Free this notifications set. */
+ xfree (ns->notifications);
+ xfree (ns);
}
- notification_buffer_in_use = 0;
}
- else
- DebPrint (("We were promised notifications, but in-use flag is zero!\n"));
- leave_crit ();
-
/* We've stuffed all the events ourselves, so w32_read_socket shouldn't. */
event->kind = NO_EVENT;
}
DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
GetCurrentProcess (), &hMainThread, 0, TRUE,
DUPLICATE_SAME_ACCESS);
+
+
}
DWORD WINAPI w32_msg_worker (void * arg);
extern void x_query_color (struct frame *, XColor *);
-extern volatile int notification_buffer_in_use;
-extern BYTE file_notifications[16384];
-extern DWORD notifications_size;
-extern void *notifications_desc;
+#define FILE_NOTIFICATIONS_SIZE 16384
+/* Notifications come in sets. We use a doubly linked list with a
+ sentinel to communicate those sets from the watching threads to the
+ main thread. */
+struct notifications_set {
+ LPBYTE notifications;
+ DWORD size;
+ void *desc;
+ struct notifications_set *next;
+ struct notifications_set *prev;
+};
+extern struct notifications_set *notifications_set_head;
extern Lisp_Object w32_get_watch_object (void *);
extern Lisp_Object lispy_file_action (DWORD);
extern int handle_file_notifications (struct input_event *);
extern void w32_initialize_display_info (Lisp_Object);
extern void initialize_w32_display (struct terminal *, int *, int *);
+#ifdef WINDOWSNT
+/* Keyboard hooks. */
+extern void setup_w32_kbdhook (void);
+extern void remove_w32_kbdhook (void);
+extern int check_w32_winkey_state (int);
+#define w32_kbdhook_active (os_subtype != OS_9X)
+#else
+#define w32_kbdhook_active 0
+#endif
+
/* Keypad command key support. W32 doesn't have virtual keys defined
for the function keys on the keypad (they are mapped to the standard
function keys), so we define our own. */
when the input queue is empty, so make it a manual reset event. */
input_available = CreateEvent (NULL, TRUE, FALSE, NULL);
+#if HAVE_W32NOTIFY
+ /* Initialize the linked list of notifications sets that will be
+ used to communicate between the watching worker threads and the
+ main thread. */
+ notifications_set_head = malloc (sizeof(struct notifications_set));
+ if (notifications_set_head)
+ {
+ memset (notifications_set_head, 0, sizeof(struct notifications_set));
+ notifications_set_head->next
+ = notifications_set_head->prev = notifications_set_head;
+ }
+ else
+ DebPrint(("Out of memory: can't initialize notifications sets."));
+#endif
+
#ifdef WINDOWSNT
keyboard_handle = input_available;
#endif /* WINDOWSNT */
CloseHandle (interrupt_handle);
interrupt_handle = NULL;
}
+
+#if HAVE_W32NOTIFY
+ if (notifications_set_head)
+ {
+ /* Free any remaining notifications set that could be left over. */
+ while (notifications_set_head->next != notifications_set_head)
+ {
+ struct notifications_set *ns = notifications_set_head->next;
+ notifications_set_head->next = ns->next;
+ ns->next->prev = notifications_set_head;
+ if (ns->notifications)
+ free (ns->notifications);
+ free (ns);
+ }
+ }
+ free (notifications_set_head);
+#endif
}
void
static bool window_resize_check (struct window *, bool);
static void window_resize_apply (struct window *, bool);
static void select_window_1 (Lisp_Object, bool);
+static void run_window_configuration_change_hook (struct frame *);
static struct window *set_window_fringes (struct window *, Lisp_Object,
Lisp_Object, Lisp_Object);
return make_number (decode_valid_window (window)->pixel_height);
}
+DEFUN ("window-pixel-width-before-size-change",
+ Fwindow_pixel_width_before_size_change,
+ Swindow_pixel_width_before_size_change, 0, 1, 0,
+ doc: /* Return pixel width of window WINDOW before last size changes.
+WINDOW must be a valid window and defaults to the selected one.
+
+The return value is the pixel width of WINDOW at the last time
+`window-size-change-functions' was run. It's zero if WINDOW was made
+after that. */)
+ (Lisp_Object window)
+{
+ return (make_number
+ (decode_valid_window (window)->pixel_width_before_size_change));
+}
+
+DEFUN ("window-pixel-height-before-size-change",
+ Fwindow_pixel_height_before_size_change,
+ Swindow_pixel_height_before_size_change, 0, 1, 0,
+ doc: /* Return pixel height of window WINDOW before last size changes.
+WINDOW must be a valid window and defaults to the selected one.
+
+The return value is the pixel height of WINDOW at the last time
+`window-size-change-functions' was run. It's zero if WINDOW was made
+after that. */)
+ (Lisp_Object window)
+{
+ return (make_number
+ (decode_valid_window (window)->pixel_height_before_size_change));
+}
+
DEFUN ("window-total-height", Fwindow_total_height, Swindow_total_height, 0, 2, 0,
doc: /* Return the height of window WINDOW in lines.
WINDOW must be a valid window and defaults to the selected one.
static Lisp_Object
-resize_root_window (Lisp_Object window, Lisp_Object delta, Lisp_Object horizontal, Lisp_Object ignore, Lisp_Object pixelwise)
+resize_root_window (Lisp_Object window, Lisp_Object delta,
+ Lisp_Object horizontal, Lisp_Object ignore,
+ Lisp_Object pixelwise)
{
- return call5 (Qwindow_resize_root_window, window, delta, horizontal, ignore, pixelwise);
+ return call5 (Qwindow__resize_root_window, window, delta,
+ horizontal, ignore, pixelwise);
}
/* Placeholder used by temacs -nw before window.el is loaded. */
Lisp_Object
sanitize_window_sizes (Lisp_Object frame, Lisp_Object horizontal)
{
- return call2 (Qwindow_sanitize_window_sizes, frame, horizontal);
+ return call2 (Qwindow__sanitize_window_sizes, frame, horizontal);
}
static Lisp_Object
window_pixel_to_total (Lisp_Object frame, Lisp_Object horizontal)
{
- return call2 (Qwindow_pixel_to_total, frame, horizontal);
+ return call2 (Qwindow__pixel_to_total, frame, horizontal);
}
Lisp_Object sibling, pwindow, swindow IF_LINT (= Qnil), delta;
ptrdiff_t startpos IF_LINT (= 0), startbyte IF_LINT (= 0);
int top IF_LINT (= 0), new_top;
+ bool resize_failed = false;
w = decode_valid_window (window);
XSETWINDOW (window, w);
fset_redisplay (f);
Vwindow_list = Qnil;
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
- bool resize_failed = false;
if (!WINDOW_LEAF_P (w))
{
Fselect_frame (frame, Qt);
}
-void
+static void
run_window_configuration_change_hook (struct frame *f)
{
ptrdiff_t count = SPECPDL_INDEX ();
return Qnil;
}
+
+/* Compare old and present pixel sizes of windows in tree rooted at W.
+ Return true iff any of these windows differs in size. */
+
+static bool
+window_size_changed (struct window *w)
+{
+ if (w->pixel_width != w->pixel_width_before_size_change
+ || w->pixel_height != w->pixel_height_before_size_change)
+ return true;
+
+ if (WINDOW_INTERNAL_P (w))
+ {
+ w = XWINDOW (w->contents);
+ while (w)
+ {
+ if (window_size_changed (w))
+ return true;
+
+ w = NILP (w->next) ? 0 : XWINDOW (w->next);
+ }
+ }
+
+ return false;
+}
+
+/* Set before size change pixel sizes of windows in tree rooted at W to
+ their present pixel sizes. */
+
+static void
+window_set_before_size_change_sizes (struct window *w)
+{
+ w->pixel_width_before_size_change = w->pixel_width;
+ w->pixel_height_before_size_change = w->pixel_height;
+
+ if (WINDOW_INTERNAL_P (w))
+ {
+ w = XWINDOW (w->contents);
+ while (w)
+ {
+ window_set_before_size_change_sizes (w);
+ w = NILP (w->next) ? 0 : XWINDOW (w->next);
+ }
+ }
+}
+
+
+void
+run_window_size_change_functions (Lisp_Object frame)
+{
+ struct frame *f = XFRAME (frame);
+ struct window *r = XWINDOW (FRAME_ROOT_WINDOW (f));
+ Lisp_Object functions = Vwindow_size_change_functions;
+
+ if (FRAME_WINDOW_CONFIGURATION_CHANGED (f)
+ || window_size_changed (r))
+ {
+ while (CONSP (functions))
+ {
+ if (!EQ (XCAR (functions), Qt))
+ safe_call1 (XCAR (functions), frame);
+ functions = XCDR (functions);
+ }
+
+ window_set_before_size_change_sizes (r);
+ FRAME_WINDOW_CONFIGURATION_CHANGED (f) = false;
+ }
+}
+
+
/* Make WINDOW display BUFFER. RUN_HOOKS_P means it's allowed
to run hooks. See make_frame for a case where it's not allowed.
KEEP_MARGINS_P means that the current margins, fringes, and
if (!(keep_margins_p && samebuf))
{ /* If we're not actually changing the buffer, don't reset hscroll
- and vscroll. This case happens for example when called from
- change_frame_size_1, where we use a dummy call to
- Fset_window_buffer on the frame's selected window (and no
- other) just in order to run window-configuration-change-hook
- (no longer true since change_frame_size_1 directly calls
- run_window_configuration_change_hook). Resetting hscroll and
- vscroll here is problematic for things like image-mode and
- doc-view-mode since it resets the image's position whenever we
- resize the frame. */
+ and vscroll. Resetting hscroll and vscroll here is problematic
+ for things like image-mode and doc-view-mode since it resets
+ the image's position whenever we resize the frame. */
w->hscroll = w->min_hscroll = w->hscroll_whole = 0;
w->suspend_auto_hscroll = false;
w->vscroll = 0;
w->start_at_line_beg = false;
w->force_start = false;
}
- /* Maybe we could move this into the `if' but it's not obviously safe and
- I doubt it's worth the trouble. */
- wset_redisplay (w);
+ wset_redisplay (w);
wset_update_mode_line (w);
/* We must select BUFFER to run the window-scroll-functions and to look up
if (run_hooks_p)
{
- if (! NILP (Vwindow_scroll_functions))
+ if (!NILP (Vwindow_scroll_functions))
run_hook_with_args_2 (Qwindow_scroll_functions, window,
Fmarker_position (w->start));
if (!samebuf)
w->phys_cursor_width = -1;
#endif
w->sequence_number = ++sequence_number;
+ w->pixel_width_before_size_change = 0;
+ w->pixel_height_before_size_change = 0;
w->scroll_bar_width = -1;
w->scroll_bar_height = -1;
w->column_number_displayed = -1;
window_resize_apply (r, horflag);
fset_redisplay (f);
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
adjust_frame_glyphs (f);
unblock_input ();
}
}
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
fset_redisplay (f);
}
p = XWINDOW (o->parent);
fset_redisplay (f);
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
new = make_window ();
n = XWINDOW (new);
wset_frame (n, frame);
fset_redisplay (f);
Vwindow_list = Qnil;
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
wset_next (w, Qnil); /* Don't delete w->next too. */
free_window_matrices (w);
}
else
unblock_input ();
-
- /* Must be run by the caller:
- run_window_configuration_change_hook (f); */
}
else
/* We failed: Relink WINDOW into window tree. */
{
root = FRAME_ROOT_WINDOW (f);
r = XWINDOW (root);
- height = call3 (Qwindow_resize_root_window_vertically,
+ height = call3 (Qwindow__resize_root_window_vertically,
root, make_number (- delta), pixelwise ? Qt : Qnil);
if (INTEGERP (height) && window_resize_check (r, false))
{
/* Enforce full redisplay of the frame. */
/* FIXME: Shouldn't window--resize-root-window-vertically do it? */
fset_redisplay (f);
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
adjust_frame_glyphs (f);
unblock_input ();
}
+ else
+ error ("Failed to grow minibuffer window");
+
}
}
{
root = FRAME_ROOT_WINDOW (f);
r = XWINDOW (root);
- delta = call3 (Qwindow_resize_root_window_vertically,
+ delta = call3 (Qwindow__resize_root_window_vertically,
root, make_number (height - unit),
pixelwise ? Qt : Qnil);
if (INTEGERP (delta) && window_resize_check (r, false))
/* Enforce full redisplay of the frame. */
/* FIXME: Shouldn't window--resize-root-window-vertically do it? */
fset_redisplay (f);
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
adjust_frame_glyphs (f);
unblock_input ();
}
one window frame here. The same routine will be needed when
shrinking the frame (and probably when making the initial
*scratch* window). For the moment leave things as they are. */
+ else
+ error ("Failed to shrink minibuffer window");
}
}
w->top_line = r->top_line + r->total_lines;
fset_redisplay (f);
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
adjust_frame_glyphs (f);
unblock_input ();
return Qt;
Lisp_Object window, buffer, start, pointm, old_pointm;
Lisp_Object pixel_left, pixel_top, pixel_height, pixel_width;
+ Lisp_Object pixel_height_before_size_change, pixel_width_before_size_change;
Lisp_Object left_col, top_line, total_cols, total_lines;
Lisp_Object normal_cols, normal_lines;
Lisp_Object hscroll, min_hscroll, hscroll_whole, suspend_auto_hscroll;
struct window *root_window;
struct window **leaf_windows;
ptrdiff_t i, k, n_leaf_windows;
+ /* Records whether a window has been added or removed wrt the
+ original configuration. */
+ bool window_changed = false;
+ /* Records whether a window has changed its buffer wrt the
+ original configuration. */
+ bool buffer_changed = false;
/* Don't do this within the main loop below: This may call Lisp
code and is thus potentially unsafe while input is blocked. */
p = SAVED_WINDOW_N (saved_windows, k);
window = p->window;
w = XWINDOW (window);
+
+ if (NILP (w->contents))
+ /* A dead window that will be resurrected, the window
+ configuration will change. */
+ window_changed = true;
+
if (BUFFERP (w->contents)
&& !EQ (w->contents, p->buffer)
&& BUFFER_LIVE_P (XBUFFER (p->buffer)))
}
fset_redisplay (f);
- FRAME_WINDOW_SIZES_CHANGED (f) = true;
/* Problem: Freeing all matrices and later allocating them again
is a serious redisplay flickering problem. What we would
w->pixel_top = XFASTINT (p->pixel_top);
w->pixel_width = XFASTINT (p->pixel_width);
w->pixel_height = XFASTINT (p->pixel_height);
+ w->pixel_width_before_size_change
+ = XFASTINT (p->pixel_width_before_size_change);
+ w->pixel_height_before_size_change
+ = XFASTINT (p->pixel_height_before_size_change);
w->left_col = XFASTINT (p->left_col);
w->top_line = XFASTINT (p->top_line);
w->total_cols = XFASTINT (p->total_cols);
if (BUFFERP (p->buffer) && BUFFER_LIVE_P (XBUFFER (p->buffer)))
/* If saved buffer is alive, install it. */
{
+ if (!EQ (w->contents, p->buffer))
+ /* Record buffer configuration change. */
+ buffer_changed = true;
wset_buffer (w, p->buffer);
w->start_at_line_beg = !NILP (p->start_at_line_beg);
set_marker_restricted (w->start, p->start, w->contents);
else if (!NILP (w->start))
/* Leaf window has no live buffer, get one. */
{
+ /* Record buffer configuration change. */
+ buffer_changed = true;
/* Get the buffer via other_buffer_safely in order to
avoid showing an unimportant buffer and, if necessary, to
recreate *scratch* in the course (part of Juanma's bs-show
/* Now, free glyph matrices in windows that were not reused. */
for (i = 0; i < n_leaf_windows; i++)
if (NILP (leaf_windows[i]->contents))
- free_window_matrices (leaf_windows[i]);
+ {
+ free_window_matrices (leaf_windows[i]);
+ window_changed = true;
+ }
/* Allow x_set_window_size again and apply frame size changes if
needed. */
/* Record the selected window's buffer here. The window should
already be the selected one from the call above. */
- select_window (data->current_window, Qnil, false);
+ if (WINDOW_LIVE_P (data->current_window))
+ select_window (data->current_window, Qnil, false);
/* Fselect_window will have made f the selected frame, so we
reselect the proper frame here. Fhandle_switch_frame will change the
if (FRAME_LIVE_P (XFRAME (data->selected_frame)))
do_switch_frame (data->selected_frame, 0, 0, Qnil);
- run_window_configuration_change_hook (f);
+ if (window_changed)
+ /* At least one window has been added or removed. Run
+ `window-configuration-change-hook' and make sure
+ `window-size-change-functions' get run later.
+
+ We have to do this in order to capture the following
+ scenario: Suppose our frame contains two live windows W1 and
+ W2 and ‘set-window-configuration’ replaces them by two
+ windows W3 and W4 that were dead the last time
+ run_window_size_change_functions was run. If W3 and W4 have
+ the same values for their old and new pixel sizes but these
+ values differ from those of W1 and W2, the sizes of our
+ frame's two live windows changed but window_size_changed has
+ no means to detect that fact.
+
+ Obviously, this will get us false positives, for example,
+ when we restore the original configuration with W1 and W2
+ before run_window_size_change_functions gets called. */
+ {
+ run_window_configuration_change_hook (f);
+ FRAME_WINDOW_CONFIGURATION_CHANGED (f) = true;
+ }
+ else if (buffer_changed)
+ /* At least one window has changed its buffer. Run
+ `window-configuration-change-hook' only. */
+ run_window_configuration_change_hook (f);
}
if (!NILP (new_current_buffer))
p->pixel_top = make_number (w->pixel_top);
p->pixel_width = make_number (w->pixel_width);
p->pixel_height = make_number (w->pixel_height);
+ p->pixel_width_before_size_change
+ = make_number (w->pixel_width_before_size_change);
+ p->pixel_height_before_size_change
+ = make_number (w->pixel_height_before_size_change);
p->left_col = make_number (w->left_col);
p->top_line = make_number (w->top_line);
p->total_cols = make_number (w->total_cols);
DEFSYM (Qwindow_valid_p, "window-valid-p");
DEFSYM (Qwindow_deletable_p, "window-deletable-p");
DEFSYM (Qdelete_window, "delete-window");
- DEFSYM (Qwindow_resize_root_window, "window--resize-root-window");
- DEFSYM (Qwindow_resize_root_window_vertically, "window--resize-root-window-vertically");
- DEFSYM (Qwindow_sanitize_window_sizes, "window--sanitize-window-sizes");
- DEFSYM (Qwindow_pixel_to_total, "window--pixel-to-total");
+ DEFSYM (Qwindow__resize_root_window, "window--resize-root-window");
+ DEFSYM (Qwindow__resize_root_window_vertically,
+ "window--resize-root-window-vertically");
+ DEFSYM (Qwindow__sanitize_window_sizes, "window--sanitize-window-sizes");
+ DEFSYM (Qwindow__pixel_to_total, "window--pixel-to-total");
DEFSYM (Qsafe, "safe");
DEFSYM (Qdisplay_buffer, "display-buffer");
DEFSYM (Qreplace_buffer_in_windows, "replace-buffer-in-windows");
with the relevant frame selected. */);
Vwindow_configuration_change_hook = Qnil;
+ DEFVAR_LISP ("window-size-change-functions", Vwindow_size_change_functions,
+ doc: /* Functions called during redisplay, if window sizes have changed.
+The value should be a list of functions that take one argument.
+During the first part of redisplay, for each frame, if any of its windows
+have changed size since the last redisplay, or have been split or deleted,
+all the functions in the list are called, with the frame as argument.
+If redisplay decides to resize the minibuffer window, it calls these
+functions on behalf of that as well. */);
+ Vwindow_size_change_functions = Qnil;
+
DEFVAR_LISP ("recenter-redisplay", Vrecenter_redisplay,
doc: /* Non-nil means `recenter' redraws entire frame.
If this option is non-nil, then the `recenter' command with a nil
defsubr (&Swindow_use_time);
defsubr (&Swindow_pixel_width);
defsubr (&Swindow_pixel_height);
+ defsubr (&Swindow_pixel_width_before_size_change);
+ defsubr (&Swindow_pixel_height_before_size_change);
defsubr (&Swindow_total_width);
defsubr (&Swindow_total_height);
defsubr (&Swindow_normal_size);
int pixel_width;
int pixel_height;
+ /* The pixel sizes of the window at the last time
+ `window-size-change-functions' was run. */
+ int pixel_width_before_size_change;
+ int pixel_height_before_size_change;
+
/* The size of the window. */
int total_cols;
int total_lines;
#define WINDOW_LEAF_P(W) \
(BUFFERP ((W)->contents))
-/* True if W is a member of horizontal combination. */
+/* Non-nil if W is internal. */
+#define WINDOW_INTERNAL_P(W) \
+ (WINDOWP ((W)->contents))
+/* True if W is a member of horizontal combination. */
#define WINDOW_HORIZONTAL_COMBINATION_P(W) \
- (WINDOWP ((W)->contents) && (W)->horizontal)
+ (WINDOW_INTERNAL_P (W) && (W)->horizontal)
/* True if W is a member of vertical combination. */
-
#define WINDOW_VERTICAL_COMBINATION_P(W) \
- (WINDOWP ((W)->contents) && !(W)->horizontal)
+ (WINDOW_INTERNAL_P (W) && !(W)->horizontal)
/* WINDOW's XFRAME. */
#define WINDOW_XFRAME(W) (XFRAME (WINDOW_FRAME ((W))))
|| WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (W))
#if (defined (HAVE_WINDOW_SYSTEM) \
- && ((defined (USE_TOOLKIT_SCROLL_BARS) && !defined (HAVE_NS)) \
+ && ((defined (USE_TOOLKIT_SCROLL_BARS)) \
|| defined (HAVE_NTGUI)))
# define USE_HORIZONTAL_SCROLL_BARS true
#else
extern void shrink_mini_window (struct window *, bool);
extern int window_relative_x_coord (struct window *, enum window_part, int);
-void run_window_configuration_change_hook (struct frame *f);
+void run_window_size_change_functions (Lisp_Object);
/* Make WINDOW display BUFFER. RUN_HOOKS_P means it's allowed
to run hooks. See make_frame for a case where it's not allowed. */
goto display_control;
}
+ /* Handle non-ascii hyphens in the mode where it only
+ gets highlighting. */
+
+ if (nonascii_hyphen_p && EQ (Vnobreak_char_display, Qt))
+ {
+ /* Merge `nobreak-space' into the current face. */
+ face_id = merge_faces (it->f, Qnobreak_hyphen, 0,
+ it->face_id);
+ XSETINT (it->ctl_chars[0], '-');
+ ctl_len = 1;
+ goto display_control;
+ }
+
/* Handle sequences that start with the "escape glyph". */
/* the default escape glyph is \. */
? merge_faces (it->f, Qt, lface_id, it->face_id)
: merge_escape_glyph_face (it));
- /* Draw non-ASCII hyphen with just highlighting: */
-
- if (nonascii_hyphen_p && EQ (Vnobreak_char_display, Qt))
- {
- XSETINT (it->ctl_chars[0], '-');
- ctl_len = 1;
- goto display_control;
- }
-
/* Draw non-ASCII space/hyphen with escape glyph: */
if (nonascii_space_p || nonascii_hyphen_p)
The optional argument FROM, if non-nil, specifies the first text
position and defaults to the minimum accessible position of the buffer.
-If FROM is t, use the minimum accessible position that is not a newline
-character. TO, if non-nil, specifies the last text position and
+If FROM is t, use the minimum accessible position that starts a
+non-empty line. TO, if non-nil, specifies the last text position and
defaults to the maximum accessible position of the buffer. If TO is t,
-use the maximum accessible position that is not a newline character.
+use the maximum accessible position that ends a non-empty line.
The optional argument X-LIMIT, if non-nil, specifies the maximum text
width that can be returned. X-LIMIT nil or omitted, means to use the
-pixel-width of WINDOW's body; use this if you do not intend to change
-the width of WINDOW. Use the maximum width WINDOW may assume if you
-intend to change WINDOW's width. In any case, text whose x-coordinate
-is beyond X-LIMIT is ignored. Since calculating the width of long lines
-can take some time, it's always a good idea to make this argument as
-small as possible; in particular, if the buffer contains long lines that
-shall be truncated anyway.
+pixel-width of WINDOW's body; use this if you want to know how high
+WINDOW should be become in order to fit all of its buffer's text with
+the width of WINDOW unaltered. Use the maximum width WINDOW may assume
+if you intend to change WINDOW's width. In any case, text whose
+x-coordinate is beyond X-LIMIT is ignored. Since calculating the width
+of long lines can take some time, it's always a good idea to make this
+argument as small as possible; in particular, if the buffer contains
+long lines that shall be truncated anyway.
The optional argument Y-LIMIT, if non-nil, specifies the maximum text
-height that can be returned. Text lines whose y-coordinate is beyond
-Y-LIMIT are ignored. Since calculating the text height of a large
-buffer can take some time, it makes sense to specify this argument if
-the size of the buffer is unknown.
+height (excluding the height of the mode- or header-line, if any) that
+can be returned. Text lines whose y-coordinate is beyond Y-LIMIT are
+ignored. Since calculating the text height of a large buffer can take
+some time, it makes sense to specify this argument if the size of the
+buffer is large or unknown.
Optional argument MODE-AND-HEADER-LINE nil or omitted means do not
include the height of the mode- or header-line of WINDOW in the return
ptrdiff_t start, end, pos;
struct text_pos startp;
void *itdata = NULL;
- int c, max_y = -1, x = 0, y = 0;
+ int c, max_x = 0, max_y = 0, x = 0, y = 0;
CHECK_BUFFER (buffer);
b = XBUFFER (buffer);
end = max (start, min (XINT (to), ZV));
}
- if (!NILP (y_limit))
- {
- CHECK_NUMBER (y_limit);
- max_y = min (XINT (y_limit), INT_MAX);
- }
+ if (!NILP (x_limit) && RANGED_INTEGERP (0, x_limit, INT_MAX))
+ max_x = XINT (x_limit);
+
+ if (NILP (y_limit))
+ max_y = INT_MAX;
+ else if (RANGED_INTEGERP (0, y_limit, INT_MAX))
+ max_y = XINT (y_limit);
itdata = bidi_shelve_cache ();
SET_TEXT_POS (startp, start, CHAR_TO_BYTE (start));
x = move_it_to (&it, end, -1, max_y, -1, MOVE_TO_POS | MOVE_TO_Y);
else
{
- CHECK_NUMBER (x_limit);
- it.last_visible_x = min (XINT (x_limit), INFINITY);
+ it.last_visible_x = max_x;
/* Actually, we never want move_it_to stop at to_x. But to make
sure that move_it_in_display_line_to always moves far enough,
- we set it to INT_MAX and specify MOVE_TO_X. */
- x = move_it_to (&it, end, INT_MAX, max_y, -1,
- MOVE_TO_POS | MOVE_TO_X | MOVE_TO_Y);
+ we set it to INT_MAX and specify MOVE_TO_X. Also bound width
+ value by X-LIMIT. */
+ x = min (move_it_to (&it, end, INT_MAX, max_y, -1,
+ MOVE_TO_POS | MOVE_TO_X | MOVE_TO_Y),
+ max_x);
}
- y = it.current_y + it.max_ascent + it.max_descent;
+ /* Subtract height of header-line which was counted automatically by
+ start_display. */
+ y = min (it.current_y + it.max_ascent + it.max_descent
+ - WINDOW_HEADER_LINE_HEIGHT (w),
+ max_y);
- if (!EQ (mode_and_header_line, Qheader_line)
- && !EQ (mode_and_header_line, Qt))
- /* Do not count the header-line which was counted automatically by
- start_display. */
- y = y - WINDOW_HEADER_LINE_HEIGHT (w);
+ if (EQ (mode_and_header_line, Qheader_line)
+ || EQ (mode_and_header_line, Qt))
+ /* Re-add height of header-line as requested. */
+ y = y + WINDOW_HEADER_LINE_HEIGHT (w);
if (EQ (mode_and_header_line, Qmode_line)
|| EQ (mode_and_header_line, Qt))
- /* Do count the mode-line which is not included automatically by
- start_display. */
+ /* Add height of mode-line as requested. */
y = y + WINDOW_MODE_LINE_HEIGHT (w);
bidi_unshelve_cache (itdata, false);
static void
ensure_echo_area_buffers (void)
{
- int i;
-
- for (i = 0; i < 2; ++i)
+ for (int i = 0; i < 2; i++)
if (!BUFFERP (echo_buffer[i])
|| !BUFFER_LIVE_P (XBUFFER (echo_buffer[i])))
{
- char name[30];
- Lisp_Object old_buffer;
- int j;
-
- old_buffer = echo_buffer[i];
- echo_buffer[i] = Fget_buffer_create
- (make_formatted_string (name, " *Echo Area %d*", i));
+ Lisp_Object old_buffer = echo_buffer[i];
+ static char const name_fmt[] = " *Echo Area %d*";
+ char name[sizeof name_fmt + INT_STRLEN_BOUND (int)];
+ AUTO_STRING_WITH_LEN (lname, name, sprintf (name, name_fmt, i));
+ echo_buffer[i] = Fget_buffer_create (lname);
bset_truncate_lines (XBUFFER (echo_buffer[i]), Qnil);
/* to force word wrap in echo area -
it was decided to postpone this*/
/* XBUFFER (echo_buffer[i])->word_wrap = Qt; */
- for (j = 0; j < 2; ++j)
+ for (int j = 0; j < 2; j++)
if (EQ (old_buffer, echo_area_buffer[j]))
echo_area_buffer[j] = echo_buffer[i];
}
&& !XBUFFER (w->contents)->text->redisplay)
continue;
- /* If a window on this frame changed size, report that to
- the user and clear the size-change flag. */
- if (FRAME_WINDOW_SIZES_CHANGED (f))
- {
- Lisp_Object functions;
-
- /* Clear flag first in case we get an error below. */
- FRAME_WINDOW_SIZES_CHANGED (f) = false;
- functions = Vwindow_size_change_functions;
-
- while (CONSP (functions))
- {
- if (!EQ (XCAR (functions), Qt))
- call1 (XCAR (functions), frame);
- functions = XCDR (functions);
- }
- }
-
+ run_window_size_change_functions (frame);
menu_bar_hooks_run = update_menu_bar (f, false, menu_bar_hooks_run);
#ifdef HAVE_WINDOW_SYSTEM
update_tool_bar (f, false);
specbind (Qinhibit_free_realized_faces, Qnil);
/* Record this function, so it appears on the profiler's backtraces. */
- record_in_backtrace (Qredisplay_internal, 0, 0);
+ record_in_backtrace (Qredisplay_internal_xC_functionx, 0, 0);
FOR_EACH_FRAME (tail, frame)
XFRAME (frame)->already_hscrolled_p = false;
it's too late for the hooks in window-size-change-functions,
which have been examined already in prepare_menu_bars. So in
that case we call the hooks here only for the selected frame. */
- if (sf->redisplay && FRAME_WINDOW_SIZES_CHANGED (sf))
+ if (sf->redisplay)
{
- Lisp_Object functions;
ptrdiff_t count1 = SPECPDL_INDEX ();
record_unwind_save_match_data ();
-
- /* Clear flag first in case we get an error below. */
- FRAME_WINDOW_SIZES_CHANGED (sf) = false;
- functions = Vwindow_size_change_functions;
-
- while (CONSP (functions))
- {
- if (!EQ (XCAR (functions), Qt))
- call1 (XCAR (functions), selected_frame);
- functions = XCDR (functions);
- }
-
+ run_window_size_change_functions (selected_frame);
unbind_to (count1, Qnil);
}
{
if (sf->redisplay)
{
- Lisp_Object functions;
ptrdiff_t count1 = SPECPDL_INDEX ();
record_unwind_save_match_data ();
-
- /* Clear flag first in case we get an error below. */
- FRAME_WINDOW_SIZES_CHANGED (sf) = false;
- functions = Vwindow_size_change_functions;
-
- while (CONSP (functions))
- {
- if (!EQ (XCAR (functions), Qt))
- call1 (XCAR (functions), selected_frame);
- functions = XCDR (functions);
- }
-
+ run_window_size_change_functions (selected_frame);
unbind_to (count1, Qnil);
}
}
else if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf))
{
- Lisp_Object mini_window = FRAME_MINIBUF_WINDOW (sf);
- struct frame *mini_frame;
-
displayed_buffer = XBUFFER (XWINDOW (selected_window)->contents);
/* Use list_of_error, not Qerror, so that
we catch only errors and don't run the debugger. */
list_of_error,
redisplay_window_error);
if (update_miniwindow_p)
- internal_condition_case_1 (redisplay_window_1, mini_window,
- list_of_error,
+ internal_condition_case_1 (redisplay_window_1,
+ FRAME_MINIBUF_WINDOW (sf), list_of_error,
redisplay_window_error);
/* Compare desired and current matrices, perform output. */
have put text on a frame other than the selected one, so the
above call to update_frame would not have caught it. Catch
it here. */
- mini_window = FRAME_MINIBUF_WINDOW (sf);
- mini_frame = XFRAME (WINDOW_FRAME (XWINDOW (mini_window)));
+ Lisp_Object mini_window = FRAME_MINIBUF_WINDOW (sf);
+ struct frame *mini_frame = XFRAME (WINDOW_FRAME (XWINDOW (mini_window)));
if (mini_frame != sf && FRAME_WINDOW_P (mini_frame))
{
bool last_line_misfit = false;
ptrdiff_t beg_unchanged, end_unchanged;
int frame_line_height;
+ bool use_desired_matrix;
SET_TEXT_POS (lpoint, PT, PT_BYTE);
opoint = lpoint;
startp = run_window_scroll_functions (window, it.current.pos);
/* Redisplay the window. */
- bool use_desired_matrix = false;
+ use_desired_matrix = false;
if (!current_matrix_up_to_date_p
|| windows_or_buffers_changed
|| f->cursor_type_changed
/* Non-nil means don't actually do any redisplay. */
DEFSYM (Qinhibit_redisplay, "inhibit-redisplay");
- DEFSYM (Qredisplay_internal, "redisplay_internal (C function)");
+ DEFSYM (Qredisplay_internal_xC_functionx, "redisplay_internal (C function)");
DEFVAR_BOOL("inhibit-message", inhibit_message,
doc: /* Non-nil means calls to `message' are not displayed.
/* Name and number of the face used to highlight escape glyphs. */
DEFSYM (Qescape_glyph, "escape-glyph");
- /* Name and number of the face used to highlight non-breaking spaces. */
+ /* Name and number of the face used to highlight non-breaking
+ spaces/hyphens. */
DEFSYM (Qnobreak_space, "nobreak-space");
+ DEFSYM (Qnobreak_hyphen, "nobreak-hyphen");
/* The symbol 'image' which is the car of the lists used to represent
images in Lisp. Also a tool bar style. */
doc: /* Control highlighting of non-ASCII space and hyphen chars.
If the value is t, Emacs highlights non-ASCII chars which have the
same appearance as an ASCII space or hyphen, using the `nobreak-space'
-or `escape-glyph' face respectively.
+or `nobreak-hyphen' face respectively.
U+00A0 (no-break space), U+00AD (soft hyphen), U+2010 (hyphen), and
U+2011 (non-breaking hyphen) are affected.
the buffer when it becomes large. */);
Vmessage_log_max = make_number (1000);
- DEFVAR_LISP ("window-size-change-functions", Vwindow_size_change_functions,
- doc: /* Functions called during redisplay, if window sizes have changed.
-The value should be a list of functions that take one argument.
-During the first part of redisplay, for each frame, if any of its windows
-have changed size since the last redisplay, or have been split or deleted,
-all the functions in the list are called, with the frame as argument.
-If redisplay decides to resize the minibuffer window, it calls these
-functions on behalf of that as well. */);
- Vwindow_size_change_functions = Qnil;
-
DEFVAR_LISP ("window-scroll-functions", Vwindow_scroll_functions,
doc: /* List of functions to call before redisplaying a window with scrolling.
Each function is called with two arguments, the window and its new
}
#endif /* not USE_X_TOOLKIT && not USE_GTK */
adjust_frame_glyphs (f);
- run_window_configuration_change_hook (f);
}
{
/* Remember the explicit font parameter, so we can re-apply it after
we've applied the `default' face settings. */
- AUTO_FRAME_ARG (arg, Qfont_param, font_param);
+ AUTO_FRAME_ARG (arg, Qfont_parameter, font_param);
x_set_frame_parameters (f, arg);
}
Tool tips
***********************************************************************/
-static Lisp_Object x_create_tip_frame (struct x_display_info *,
- Lisp_Object, Lisp_Object);
static void compute_tip_xy (struct frame *, Lisp_Object, Lisp_Object,
Lisp_Object, int, int, int *, int *);
when this happens. */
static Lisp_Object
-x_create_tip_frame (struct x_display_info *dpyinfo,
- Lisp_Object parms,
- Lisp_Object text)
+x_create_tip_frame (struct x_display_info *dpyinfo, Lisp_Object parms)
{
struct frame *f;
Lisp_Object frame;
int width, height;
ptrdiff_t count = SPECPDL_INDEX ();
bool face_change_before = face_change;
- Lisp_Object buffer;
- struct buffer *old_buffer;
int x_width = 0, x_height = 0;
if (!dpyinfo->terminal->name)
error ("Invalid frame name--not a string or nil");
frame = Qnil;
- f = make_frame (true);
+ f = make_frame (false);
+ f->wants_modeline = false;
XSETFRAME (frame, f);
-
- AUTO_STRING (tip, " *tip*");
- buffer = Fget_buffer_create (tip);
- /* Use set_window_buffer instead of Fset_window_buffer (see
- discussion of bug#11984, bug#12025, bug#12026). */
- set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false);
- old_buffer = current_buffer;
- set_buffer_internal_1 (XBUFFER (buffer));
- bset_truncate_lines (current_buffer, Qnil);
- specbind (Qinhibit_read_only, Qt);
- specbind (Qinhibit_modification_hooks, Qt);
- Ferase_buffer ();
- Finsert (1, &text);
- set_buffer_internal_1 (old_buffer);
-
record_unwind_protect (unwind_create_tip_frame, frame);
f->terminal = dpyinfo->terminal;
{
Lisp_Object bg = Fframe_parameter (frame, Qbackground_color);
- /* Set tip_frame here, so that */
- tip_frame = frame;
call2 (Qface_set_after_frame_default, frame, Qnil);
if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
}
+/* Hide tooltip. Delete its frame if DELETE is true. */
+static Lisp_Object
+x_hide_tip (bool delete)
+{
+ if (!NILP (tip_timer))
+ {
+ call1 (Qcancel_timer, tip_timer);
+ tip_timer = Qnil;
+ }
+
+
+ if (NILP (tip_frame)
+ || (!delete && FRAMEP (tip_frame)
+ && !FRAME_VISIBLE_P (XFRAME (tip_frame))))
+ return Qnil;
+ else
+ {
+ ptrdiff_t count;
+ Lisp_Object was_open = Qnil;
+
+ count = SPECPDL_INDEX ();
+ specbind (Qinhibit_redisplay, Qt);
+ specbind (Qinhibit_quit, Qt);
+
+#ifdef USE_GTK
+ {
+ /* When using system tooltip, tip_frame is the Emacs frame on
+ which the tip is shown. */
+ struct frame *f = XFRAME (tip_frame);
+
+ if (FRAME_LIVE_P (f) && xg_hide_tooltip (f))
+ {
+ tip_frame = Qnil;
+ was_open = Qt;
+ }
+ }
+#endif
+
+ if (FRAMEP (tip_frame))
+ {
+ if (delete)
+ {
+ delete_frame (tip_frame, Qnil);
+ tip_frame = Qnil;
+ }
+ else
+ x_make_frame_invisible (XFRAME (tip_frame));
+
+ was_open = Qt;
+
+#ifdef USE_LUCID
+ /* Bloodcurdling hack alert: The Lucid menu bar widget's
+ redisplay procedure is not called when a tip frame over
+ menu items is unmapped. Redisplay the menu manually... */
+ {
+ Widget w;
+ struct frame *f = SELECTED_FRAME ();
+ if (FRAME_X_P (f) && FRAME_LIVE_P (f))
+ {
+ w = f->output_data.x->menubar_widget;
+
+ if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen)
+ && w != NULL)
+ {
+ block_input ();
+ xlwmenu_redisplay (w);
+ unblock_input ();
+ }
+ }
+ }
+#endif /* USE_LUCID */
+ }
+ else
+ tip_frame = Qnil;
+
+ return unbind_to (count, was_open);
+ }
+}
+
DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
doc: /* Show STRING in a "tooltip" window on frame FRAME.
A tooltip window is a small X window displaying a string.
Text larger than the specified size is clipped. */)
(Lisp_Object string, Lisp_Object frame, Lisp_Object parms, Lisp_Object timeout, Lisp_Object dx, Lisp_Object dy)
{
- struct frame *f;
+ struct frame *f, *tip_f;
struct window *w;
int root_x, root_y;
struct buffer *old_buffer;
struct text_pos pos;
- int i, width, height;
- bool seen_reversed_p;
+ int width, height;
int old_windows_or_buffers_changed = windows_or_buffers_changed;
ptrdiff_t count = SPECPDL_INDEX ();
+ ptrdiff_t count_1;
+ Lisp_Object window, size;
+ AUTO_STRING (tip, " *tip*");
specbind (Qinhibit_redisplay, Qt);
if (NILP (last_show_tip_args))
last_show_tip_args = Fmake_vector (make_number (3), Qnil);
- if (!NILP (tip_frame))
+ if (FRAMEP (tip_frame) && FRAME_LIVE_P (XFRAME (tip_frame)))
{
Lisp_Object last_string = AREF (last_show_tip_args, 0);
Lisp_Object last_frame = AREF (last_show_tip_args, 1);
Lisp_Object last_parms = AREF (last_show_tip_args, 2);
- if (EQ (frame, last_frame)
- && !NILP (Fequal (last_string, string))
+ if (FRAME_VISIBLE_P (XFRAME (tip_frame))
+ && EQ (frame, last_frame)
+ && !NILP (Fequal_including_properties (last_string, string))
&& !NILP (Fequal (last_parms, parms)))
{
- struct frame *tip_f = XFRAME (tip_frame);
-
/* Only DX and DY have changed. */
+ tip_f = XFRAME (tip_frame);
if (!NILP (tip_timer))
{
Lisp_Object timer = tip_timer;
+
tip_timer = Qnil;
call1 (Qcancel_timer, timer);
}
XMoveWindow (FRAME_X_DISPLAY (tip_f), FRAME_X_WINDOW (tip_f),
root_x, root_y);
unblock_input ();
+
goto start_timer;
}
- }
+ else if (tooltip_reuse_hidden_frame && EQ (frame, last_frame))
+ {
+ bool delete = false;
+ Lisp_Object tail, elt, parm, last;
+
+ /* Check if every parameter in PARMS has the same value in
+ last_parms unless it should be ignored by means of
+ Vtooltip_reuse_hidden_frame_parameters. This may destruct
+ last_parms which, however, will be recreated below. */
+ for (tail = parms; CONSP (tail); tail = XCDR (tail))
+ {
+ elt = XCAR (tail);
+ parm = Fcar (elt);
+ /* The left, top, right and bottom parameters are handled
+ by compute_tip_xy so they can be ignored here. */
+ if (!EQ (parm, Qleft) && !EQ (parm, Qtop)
+ && !EQ (parm, Qright) && !EQ (parm, Qbottom))
+ {
+ last = Fassq (parm, last_parms);
+ if (NILP (Fequal (Fcdr (elt), Fcdr (last))))
+ {
+ /* We lost, delete the old tooltip. */
+ delete = true;
+ break;
+ }
+ else
+ last_parms = call2 (Qassq_delete_all, parm, last_parms);
+ }
+ else
+ last_parms = call2 (Qassq_delete_all, parm, last_parms);
+ }
- /* Hide a previous tip, if any. */
- Fx_hide_tip ();
+ /* Now check if every parameter in what is left of last_parms
+ with a non-nil value has an association in PARMS unless it
+ should be ignored by means of
+ Vtooltip_reuse_hidden_frame_parameters. */
+ for (tail = last_parms; CONSP (tail); tail = XCDR (tail))
+ {
+ elt = XCAR (tail);
+ parm = Fcar (elt);
+ if (!EQ (parm, Qleft) && !EQ (parm, Qtop) && !EQ (parm, Qright)
+ && !EQ (parm, Qbottom) && !NILP (Fcdr (elt)))
+ {
+ /* We lost, delete the old tooltip. */
+ delete = true;
+ break;
+ }
+ }
+
+ x_hide_tip (delete);
+ }
+ else
+ x_hide_tip (true);
+ }
+ else
+ x_hide_tip (true);
ASET (last_show_tip_args, 0, string);
ASET (last_show_tip_args, 1, frame);
ASET (last_show_tip_args, 2, parms);
- /* Add default values to frame parameters. */
- if (NILP (Fassq (Qname, parms)))
- parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
- if (NILP (Fassq (Qinternal_border_width, parms)))
- parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
- if (NILP (Fassq (Qborder_width, parms)))
- parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
- if (NILP (Fassq (Qbottom_divider_width, parms)))
- parms = Fcons (Fcons (Qbottom_divider_width, make_number (0)), parms);
- if (NILP (Fassq (Qright_divider_width, parms)))
- parms = Fcons (Fcons (Qright_divider_width, make_number (0)), parms);
- if (NILP (Fassq (Qborder_color, parms)))
- parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
- if (NILP (Fassq (Qbackground_color, parms)))
- parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
- parms);
-
- /* Create a frame for the tooltip, and record it in the global
- variable tip_frame. */
- frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string);
- f = XFRAME (frame);
-
- /* Set up the frame's root window. */
- w = XWINDOW (FRAME_ROOT_WINDOW (f));
+ if (!FRAMEP (tip_frame) || !FRAME_LIVE_P (XFRAME (tip_frame)))
+ {
+ /* Add default values to frame parameters. */
+ if (NILP (Fassq (Qname, parms)))
+ parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
+ if (NILP (Fassq (Qinternal_border_width, parms)))
+ parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
+ if (NILP (Fassq (Qborder_width, parms)))
+ parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
+ if (NILP (Fassq (Qborder_color, parms)))
+ parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
+ if (NILP (Fassq (Qbackground_color, parms)))
+ parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
+ parms);
+
+ /* Create a frame for the tooltip, and record it in the global
+ variable tip_frame. */
+ if (NILP (tip_frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms)))
+ /* Creating the tip frame failed. */
+ return unbind_to (count, Qnil);
+ }
+
+ tip_f = XFRAME (tip_frame);
+ window = FRAME_ROOT_WINDOW (tip_f);
+ set_window_buffer (window, Fget_buffer_create (tip), false, false);
+ w = XWINDOW (window);
+ w->pseudo_window_p = true;
+
+ /* Set up the frame's root window. Note: The following code does not
+ try to size the window or its frame correctly. Its only purpose is
+ to make the subsequent text size calculations work. The right
+ sizes should get installed when the toolkit gets back to us. */
w->left_col = 0;
w->top_line = 0;
w->pixel_left = 0;
w->total_lines = 40;
}
- w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (f);
- w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (f);
-
- FRAME_TOTAL_COLS (f) = w->total_cols;
- adjust_frame_glyphs (f);
- w->pseudo_window_p = true;
+ w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (tip_f);
+ w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (tip_f);
+ FRAME_TOTAL_COLS (tip_f) = w->total_cols;
+ adjust_frame_glyphs (tip_f);
- /* Display the tooltip text in a temporary buffer. */
+ /* Insert STRING into root window's buffer and fit the frame to the
+ buffer. */
+ count_1 = SPECPDL_INDEX ();
old_buffer = current_buffer;
- set_buffer_internal_1 (XBUFFER (XWINDOW (FRAME_ROOT_WINDOW (f))->contents));
+ set_buffer_internal_1 (XBUFFER (w->contents));
bset_truncate_lines (current_buffer, Qnil);
+ specbind (Qinhibit_read_only, Qt);
+ specbind (Qinhibit_modification_hooks, Qt);
+ specbind (Qinhibit_point_motion_hooks, Qt);
+ Ferase_buffer ();
+ Finsert (1, &string);
clear_glyph_matrix (w->desired_matrix);
clear_glyph_matrix (w->current_matrix);
SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
- try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
-
- /* Compute width and height of the tooltip. */
- width = height = 0;
- seen_reversed_p = false;
- for (i = 0; i < w->desired_matrix->nrows; ++i)
- {
- struct glyph_row *row = &w->desired_matrix->rows[i];
- struct glyph *last;
- int row_width;
-
- /* Stop at the first empty row at the end. */
- if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
- break;
-
- /* Let the row go over the full width of the frame. */
- row->full_width_p = true;
-
- row_width = row->pixel_width;
- if (row->used[TEXT_AREA])
- {
- /* There's a glyph at the end of rows that is used to place
- the cursor there. Don't include the width of this glyph. */
- if (!row->reversed_p)
- {
- last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
- if (NILP (last->object))
- row_width -= last->pixel_width;
- }
- else
- {
- /* There could be a stretch glyph at the beginning of R2L
- rows that is produced by extend_face_to_end_of_line.
- Don't count that glyph. */
- struct glyph *g = row->glyphs[TEXT_AREA];
-
- if (g->type == STRETCH_GLYPH && NILP (g->object))
- {
- row_width -= g->pixel_width;
- seen_reversed_p = true;
- }
- }
- }
-
- height += row->height;
- width = max (width, row_width);
- }
-
- /* If we've seen partial-length R2L rows, we need to re-adjust the
- tool-tip frame width and redisplay it again, to avoid over-wide
- tips due to the stretch glyph that extends R2L lines to full
- width of the frame. */
- if (seen_reversed_p)
- {
- /* w->total_cols and FRAME_TOTAL_COLS want the width in columns,
- not in pixels. */
- w->pixel_width = width;
- width /= WINDOW_FRAME_COLUMN_WIDTH (w);
- w->total_cols = width;
- FRAME_TOTAL_COLS (f) = width;
- SET_FRAME_WIDTH (f, width);
- adjust_frame_glyphs (f);
- clear_glyph_matrix (w->desired_matrix);
- clear_glyph_matrix (w->current_matrix);
- try_window (FRAME_ROOT_WINDOW (f), pos, 0);
- width = height = 0;
- /* Recompute width and height of the tooltip. */
- for (i = 0; i < w->desired_matrix->nrows; ++i)
- {
- struct glyph_row *row = &w->desired_matrix->rows[i];
- struct glyph *last;
- int row_width;
-
- if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row))
- break;
- row->full_width_p = true;
- row_width = row->pixel_width;
- if (row->used[TEXT_AREA] && !row->reversed_p)
- {
- last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
- if (NILP (last->object))
- row_width -= last->pixel_width;
- }
-
- height += row->height;
- width = max (width, row_width);
- }
- }
-
- /* Add the frame's internal border to the width and height the X
- window should have. */
- height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
- width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
-
- /* Move the tooltip window where the mouse pointer is. Resize and
- show it. */
- compute_tip_xy (f, parms, dx, dy, width, height, &root_x, &root_y);
-
+ try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
+ /* Calculate size of tooltip window. */
+ size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
+ make_number (w->pixel_height), Qnil);
+ /* Add the frame's internal border to calculated size. */
+ width = XINT (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+ height = XINT (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+
+ /* Calculate position of tooltip frame. */
+ compute_tip_xy (tip_f, parms, dx, dy, width, height, &root_x, &root_y);
+
+ /* Show tooltip frame. */
block_input ();
- XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ XMoveResizeWindow (FRAME_X_DISPLAY (tip_f), FRAME_X_WINDOW (tip_f),
root_x, root_y, width, height);
- XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
+ XMapRaised (FRAME_X_DISPLAY (tip_f), FRAME_X_WINDOW (tip_f));
unblock_input ();
- /* Draw into the window. */
w->must_be_updated_p = true;
update_single_window (w);
-
- /* Restore original current buffer. */
set_buffer_internal_1 (old_buffer);
+ unbind_to (count_1, Qnil);
windows_or_buffers_changed = old_windows_or_buffers_changed;
start_timer:
Value is t if tooltip was open, nil otherwise. */)
(void)
{
- ptrdiff_t count;
- Lisp_Object deleted, frame, timer;
-
- /* Return quickly if nothing to do. */
- if (NILP (tip_timer) && NILP (tip_frame))
- return Qnil;
-
- frame = tip_frame;
- timer = tip_timer;
- tip_frame = tip_timer = deleted = Qnil;
-
- count = SPECPDL_INDEX ();
- specbind (Qinhibit_redisplay, Qt);
- specbind (Qinhibit_quit, Qt);
-
- if (!NILP (timer))
- call1 (Qcancel_timer, timer);
-
-#ifdef USE_GTK
- {
- /* When using system tooltip, tip_frame is the Emacs frame on which
- the tip is shown. */
- struct frame *f = XFRAME (frame);
- if (FRAME_LIVE_P (f) && xg_hide_tooltip (f))
- frame = Qnil;
- }
-#endif
-
- if (FRAMEP (frame))
- {
- delete_frame (frame, Qnil);
- deleted = Qt;
-
-#ifdef USE_LUCID
- /* Bloodcurdling hack alert: The Lucid menu bar widget's
- redisplay procedure is not called when a tip frame over menu
- items is unmapped. Redisplay the menu manually... */
- {
- Widget w;
- struct frame *f = SELECTED_FRAME ();
- if (FRAME_X_P (f) && FRAME_LIVE_P (f))
- {
- w = f->output_data.x->menubar_widget;
-
- if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen)
- && w != NULL)
- {
- block_input ();
- xlwmenu_redisplay (w);
- unblock_input ();
- }
- }
- }
-#endif /* USE_LUCID */
- }
-
- return unbind_to (count, deleted);
+ return x_hide_tip (!tooltip_reuse_hidden_frame);
}
-
\f
/***********************************************************************
File selection dialog
default_name = xlispstrdup (font_param);
else
{
- font_param = Fframe_parameter (frame, Qfont_param);
+ font_param = Fframe_parameter (frame, Qfont_parameter);
if (STRINGP (font_param))
default_name = xlispstrdup (font_param);
}
DEFSYM (Qundefined_color, "undefined-color");
DEFSYM (Qcompound_text, "compound-text");
DEFSYM (Qcancel_timer, "cancel-timer");
- DEFSYM (Qfont_param, "font-parameter");
+ DEFSYM (Qfont_parameter, "font-parameter");
DEFSYM (Qmono, "mono");
+ DEFSYM (Qassq_delete_all, "assq-delete-all");
#ifdef USE_CAIRO
DEFSYM (Qpdf, "pdf");
static bool
libxml2_loaded_p (void)
{
- Lisp_Object found = Fassq (Qlibxml2_dll, Vlibrary_cache);
+ Lisp_Object found = Fassq (Qlibxml2, Vlibrary_cache);
return CONSP (found) && EQ (XCDR (found), Qt);
}
{
HMODULE library;
- if (!(library = w32_delayed_load (Qlibxml2_dll)))
+ if (!(library = w32_delayed_load (Qlibxml2)))
{
message1 ("libxml2 library not found");
return false;
if (! load_dll_functions (library))
goto bad_library;
- Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qt), Vlibrary_cache);
+ Vlibrary_cache = Fcons (Fcons (Qlibxml2, Qt), Vlibrary_cache);
return true;
}
bad_library:
- Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qnil), Vlibrary_cache);
+ Vlibrary_cache = Fcons (Fcons (Qlibxml2, Qnil), Vlibrary_cache);
return false;
#else /* !WINDOWSNT */
if (EQ (sym, QDELETE)) return dpyinfo->Xatom_DELETE;
if (EQ (sym, QMULTIPLE)) return dpyinfo->Xatom_MULTIPLE;
if (EQ (sym, QINCR)) return dpyinfo->Xatom_INCR;
- if (EQ (sym, QEMACS_TMP)) return dpyinfo->Xatom_EMACS_TMP;
+ if (EQ (sym, Q_EMACS_TMP_)) return dpyinfo->Xatom_EMACS_TMP;
if (EQ (sym, QTARGETS)) return dpyinfo->Xatom_TARGETS;
if (EQ (sym, QNULL)) return dpyinfo->Xatom_NULL;
if (!SYMBOLP (sym)) emacs_abort ();
if (atom == dpyinfo->Xatom_INCR)
return QINCR;
if (atom == dpyinfo->Xatom_EMACS_TMP)
- return QEMACS_TMP;
+ return Q_EMACS_TMP_;
if (atom == dpyinfo->Xatom_TARGETS)
return QTARGETS;
if (atom == dpyinfo->Xatom_NULL)
DEFSYM (QDELETE, "DELETE");
DEFSYM (QMULTIPLE, "MULTIPLE");
DEFSYM (QINCR, "INCR");
- DEFSYM (QEMACS_TMP, "_EMACS_TMP_");
+ DEFSYM (Q_EMACS_TMP_, "_EMACS_TMP_");
DEFSYM (QTARGETS, "TARGETS");
DEFSYM (QATOM, "ATOM");
DEFSYM (QCLIPBOARD_MANAGER, "CLIPBOARD_MANAGER");
props[props_idx]->vals[0].value = SDATA (user_login_name);
++props_idx;
- char *cwd = get_current_dir_name ();
+ char *cwd = emacs_get_current_dir_name ();
if (cwd)
{
props[props_idx] = &prop_ptr[props_idx];
ptrdiff_t name_len = 0;
/* libSM seems to crash if pwd is missing - see bug#18851. */
- if (! get_current_dir_name ())
+ if (! emacs_get_current_dir_name ())
{
fprintf (stderr, "Disabling session management due to pwd error: %s\n",
emacs_strerror (errno));
/* Force a redisplay sooner or later to update the
frame titles in case this is the second frame. */
record_asynch_buffer_change ();
-
-#ifdef USE_GTK
- xg_frame_resized (f, -1, -1);
-#endif
}
goto OTHER;
## Some targets:
## check: re-run all tests, writing to .log files.
-## check-maybe: run all tests whose .log file needs updating
+## check-maybe: run all tests which are outdated with their .log file
+## or the source files they are testing.
## filename.log: run tests from filename.el(c) if .log file needs updating
## filename: re-run tests from filename.el(c), with no logging
srcdir = @srcdir@
VPATH = $(srcdir)
+MKDIR_P = @MKDIR_P@
+
SEPCHAR = @SEPCHAR@
# We never change directory before running Emacs, so a relative file
# name is fine, and makes life easier. If we need to change
# directory, we can use emacs --chdir.
-EMACS = ../../src/emacs
+EMACS = ../src/emacs
EMACS_EXTRAOPT=
endif
-%.log: ${srcdir}/%.el
+%.log: %.el
@if grep '^;.*no-byte-compile: t' $< > /dev/null; then \
loadfile=$<; \
else \
fi; \
echo Testing $$loadfile; \
stat=OK ; \
+ ${MKDIR_P} $(dir $@) ; \
$(emacs) -l ert -l $$loadfile \
--eval "(ert-run-tests-batch-and-exit ${SELECTOR_ACTUAL})" ${WRITE_LOG}
-ELFILES = $(sort $(wildcard ${srcdir}/*.el))
-LOGFILES = $(patsubst %.el,%.log,$(notdir ${ELFILES}))
-TESTS = ${LOGFILES:.log=}
+ELFILES = $(shell find ${srcdir} -path "${srcdir}/manual" -prune -o \
+ -path "*resources" -prune -o -name "*el" -print)
+## .elc files may be in a different directory for out of source builds
+ELCFILES = $(patsubst %.el,%.elc, \
+ $(patsubst $(srcdir)%,.%,$(ELFILES)))
+LOGFILES = $(patsubst %.elc,%.log,${ELCFILES})
+LOGSAVEFILES = $(patsubst %.elc,%.log~,${ELCFILES})
+TESTS = $(subst ${srcdir}/,,$(LOGFILES:.log=))
## If we have to interrupt a hanging test, preserve the log so we can
## see what the problem was.
.PHONY: ${TESTS}
## The short aliases that always re-run the tests, with no logging.
+## Define an alias both with and without the directory name for ease
+## of use.
define test_template
$(1):
- @test ! -f $(1).log || mv $(1).log $(1).log~
- @${MAKE} $(1).log WRITE_LOG=
+ @test ! -f ./$(1).log || mv ./$(1).log ./$(1).log~
+ @${MAKE} ./$(1).log WRITE_LOG=
+
+$(notdir $(1)): $(1)
endef
$(foreach test,${TESTS},$(eval $(call test_template,${test})))
+## Include dependencies between test files and the files they test.
+## We could do this without the file and eval directly, but then we
+## would have to run Emacs for every make invocation, and it might not
+## be available during clean.
+-include make-test-deps.mk
## Rerun all default tests.
check: mostlyclean
@${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
check-expensive: mostlyclean
@${MAKE} check-doit SELECTOR="${SELECTOR_EXPENSIVE}"
-## Only re-run default tests whose .log is older than the test.
+## Re-run all tests which are outdated. A test is outdated if its
+## logfile is out-of-date with either the test file, or the source
+## files that the tests depend on. The source file dependencies are
+## determined by a heuristic and does not identify the full dependency
+## graph. See make-test-deps.emacs-lisp for details.
.PHONY: check-maybe
check-maybe:
@${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
.PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean
mostlyclean:
- -@for f in *.log; do test ! -f $$f || mv $$f $$f~; done
+ -@for f in ${LOGFILES}; do test ! -f $$f || mv $$f $$f~; done
clean:
- -rm -f *.log *.log~
+ -rm -f ${LOGFILES} ${LOGSAVEFILES}
+ -rm make-test-deps.mk
bootstrap-clean: clean
- -rm -f ${srcdir}/*.elc
+ -rm -f ${ELCFILES}
distclean: clean
rm -f Makefile
maintainer-clean: distclean bootstrap-clean
+make-test-deps.mk: $(ELFILES) make-test-deps.emacs-lisp
+ $(EMACS) --batch -l $(srcdir)/make-test-deps.emacs-lisp \
+ --eval "(make-test-deps \"$(srcdir)\")" \
+ 2> $@
# Makefile ends here.
"(ert)") or https://www.gnu.org/software/emacs/manual/html_node/ert/
for more information on writing and running tests.
-All ERT test files are supposed to run from subdirectory automated/.
-The Makefile in that directory supports the following targets:
+The Makefile in this directory supports the following targets:
* make check
Run all tests as defined in the directory. Expensive tests are
+++ /dev/null
-;;; abbrev-tests.el --- Test suite for abbrevs.
-
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
-
-;; Author: Eli Zaretskii <eliz@gnu.org>
-;; Keywords: abbrevs
-
-;; 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:
-
-;; `kill-all-abbrevs-test' will remove all user *and* system abbrevs
-;; if called noninteractively with the init file loaded.
-
-;;; Code:
-
-(require 'ert)
-(require 'abbrev)
-(require 'seq)
-
-;; set up test abbrev table and abbrev entry
-(defun setup-test-abbrev-table ()
- (defvar ert-test-abbrevs nil)
- (define-abbrev-table 'ert-test-abbrevs '(("a-e-t" "abbrev-ert-test")))
- (abbrev-table-put ert-test-abbrevs :ert-test "ert-test-value")
- ert-test-abbrevs)
-
-(ert-deftest copy-abbrev-table-test ()
- (defvar foo-abbrev-table nil) ; Avoid compiler warning
- (define-abbrev-table 'foo-abbrev-table
- '())
- (should (abbrev-table-p foo-abbrev-table))
- ;; Bug 21828
- (let ((new-foo-abbrev-table
- (condition-case nil
- (copy-abbrev-table foo-abbrev-table)
- (error nil))))
- (should (abbrev-table-p new-foo-abbrev-table)))
- (should-not (string-equal (buffer-name) "*Backtrace*")))
-
-(ert-deftest kill-all-abbrevs-test ()
- "Test undefining all defined abbrevs"
- (unless noninteractive
- (ert-skip "Cannot test kill-all-abbrevs in interactive mode"))
-
- (let ((num-tables 0))
- ;; ensure at least one abbrev exists
- (should (abbrev-table-p (setup-test-abbrev-table)))
- (setf num-tables (length abbrev-table-name-list))
- (kill-all-abbrevs)
-
- ;; no tables should have been removed/added
- (should (= num-tables (length abbrev-table-name-list)))
- ;; number of empty tables should be the same as number of tables
- (should (= num-tables (length (seq-filter
- (lambda (table)
- (abbrev-table-empty-p (symbol-value table)))
- abbrev-table-name-list))))))
-
-(ert-deftest abbrev-table-name-test ()
- "Test returning name of abbrev-table"
- (let ((ert-test-abbrevs (setup-test-abbrev-table))
- (no-such-table nil))
- (should (equal 'ert-test-abbrevs (abbrev-table-name ert-test-abbrevs)))
- (should (equal nil (abbrev-table-name no-such-table)))))
-
-(ert-deftest clear-abbrev-table-test ()
- "Test clearing single abbrev table"
- (let ((ert-test-abbrevs (setup-test-abbrev-table)))
- (should (equal "a-e-t" (symbol-name
- (abbrev-symbol "a-e-t" ert-test-abbrevs))))
- (should (equal "abbrev-ert-test" (symbol-value
- (abbrev-symbol "a-e-t" ert-test-abbrevs))))
-
- (clear-abbrev-table ert-test-abbrevs)
-
- (should (equal "nil" (symbol-name
- (abbrev-symbol "a-e-t" ert-test-abbrevs))))
- (should (equal nil (symbol-value
- (abbrev-symbol "a-e-t" ert-test-abbrevs))))
- (should (equal t (abbrev-table-empty-p ert-test-abbrevs)))))
-
-(provide 'abbrev-tests)
-
-;;; abbrev-tests.el ends here
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIELTCCAxWgAwIBAgIJAI6LqlFyaPRkMA0GCSqGSIb3DQEBCwUAMIGsMQswCQYD
+VQQGEwJBVTEYMBYGA1UECAwPTmV3IFNvdXRoIFdhbGVzMQ8wDQYDVQQHDAZTeWRu
+ZXkxITAfBgNVBAoMGEVtYWNzIFRlc3QgU2VydmljZXNzIExMQzESMBAGA1UECwwJ
+QXV0b21hdGVkMRcwFQYDVQQDDA50ZXN0LmVtYWNzLnpvdDEiMCAGCSqGSIb3DQEJ
+ARYTZW1hY3MtZGV2ZWxAZnNmLm9yZzAeFw0xNjAyMDgwNDA0MzJaFw0xNjAzMDkw
+NDA0MzJaMIGsMQswCQYDVQQGEwJBVTEYMBYGA1UECAwPTmV3IFNvdXRoIFdhbGVz
+MQ8wDQYDVQQHDAZTeWRuZXkxITAfBgNVBAoMGEVtYWNzIFRlc3QgU2VydmljZXNz
+IExMQzESMBAGA1UECwwJQXV0b21hdGVkMRcwFQYDVQQDDA50ZXN0LmVtYWNzLnpv
+dDEiMCAGCSqGSIb3DQEJARYTZW1hY3MtZGV2ZWxAZnNmLm9yZzCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAM52lP7k1rBpctBX1irRVgDerxqlFSTkvg8L
+WmRCfwm3XY8EZWqM/8Eex5soH7myRlWfUH/cKxbqScZqXotj0hlPxdRkM6gWgHS9
+Mml7wnz2LZGvD5PfMfs+yBHKAMrqortFXCKksHsYIJ66l9gJMm1G5XjWha6CaEr/
+k2bE5Ovw0fB2B4vH0OqhJzGyenJOspXZz1ttn3h3UC5fbDXS8fUM9k/FbgJKypWr
+zB3P12GcMR939FsR5sqa8nNoCMw+WBzs4XuM5Ad+s/UtEaZvmtwvLwmdB7cgCEyM
+x5gaM969SlpOmuy7dDTCCK3lBl6B5dgFKvVcChYwSW+xJz5tfL0CAwEAAaNQME4w
+HQYDVR0OBBYEFG3YhH7ZzEdOGstkT67uUh1RylNjMB8GA1UdIwQYMBaAFG3YhH7Z
+zEdOGstkT67uUh1RylNjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
+ADnJL2tBMnPepywA57yDfJz54FvrqRd+UAjSiB7/QySDpHnTM3b3sXWfwAkXPTjM
+c+jRW2kfdnL6OQW2tpcpPZANGnwK8MJrtGcbHhtPXjgDRhVZp64hsB7ayS+l0Dm7
+2ZBbi2SF8FgZVcQy0WD01ir2raSODo124dMrq+3aHP77YLbiNEKj+wFoDbndQ1FQ
+gtIJBE80FADoqc7LnBrpA20aVlfqhKZqe+leYDSZ+CE1iwlPdvD+RTUxVDs5EfpB
+qVOHDlzEfVmcMnddKTV8pNYuo93AG4s0KdrGG9RwSvtLaOoHd2i6RmIs+Yiumbau
+mXodMxxAEW/cM7Ita/2QVmk=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOdpT+5NawaXLQ
+V9Yq0VYA3q8apRUk5L4PC1pkQn8Jt12PBGVqjP/BHsebKB+5skZVn1B/3CsW6knG
+al6LY9IZT8XUZDOoFoB0vTJpe8J89i2Rrw+T3zH7PsgRygDK6qK7RVwipLB7GCCe
+upfYCTJtRuV41oWugmhK/5NmxOTr8NHwdgeLx9DqoScxsnpyTrKV2c9bbZ94d1Au
+X2w10vH1DPZPxW4CSsqVq8wdz9dhnDEfd/RbEebKmvJzaAjMPlgc7OF7jOQHfrP1
+LRGmb5rcLy8JnQe3IAhMjMeYGjPevUpaTprsu3Q0wgit5QZegeXYBSr1XAoWMElv
+sSc+bXy9AgMBAAECggEAaqHkIiGeoE5V9jTncAXeHWTlmyVX3k4luy9p6A5P/nyt
+3YevuXBJRzzWatQ2Tno8yUwXD3Ju7s7ie4/EdMmBYYFJ84AtDctRXPm6Z7B7qn6a
+2ntH2F+WOOUb/9QMxMCae44/H8VfQLQdZN2KPxHA8Z+ENPzW3mKL6vBE+PcIJLK2
+kTXQdCEIuUb1v4kxKYfjyyHAQ9yHvocUvZdodGHrpmWOr/2QCrqCjwiKnXyvdJMi
+JQ4a3dU+JG5Zwr2hScyeLgS4p+M3A2NY+oIACn2rCcsIKC6uvBK3wAbhssaY8z9c
+5kap862oMBNmPCxPuQTIIO7ptla0EWHktpFxnu7GIQKBgQDvKyXt82zGHiOZ9acx
+4fV7t3NF2MNd9fOn59NYWYRSs2gaEjit6BnsCgiKZOJJ2YFsggBiQMiWuEzwqIdW
+bOH8W5AubTxnE2OjeIpH5r8AXI6I/pKdOedM86oeElbL0p53OZqSqBK6vA5SnE76
+fZwC505h/mqH2E6AdKpcyL7sJwKBgQDc/jc4MkVnqF7xcYoJrYEbnkhwqRxIM+0Y
+HY2qXszWQPgjae3NK1rw/PEOATzWrHLvRS/utQ8yeLUAZIGsFY8+c1kjvkvl4ZK2
+OnsEOVLmEwjDqqnq3JFYCVSkXfLBGRD3wGldzkCQljOiGuJ/Co1rGHk7CfBmxX2p
+kxdts5OKewKBgQDTRsSc7Zs7cMh2a0GlmTyoa6iTHSeIy4rQ2sQimgGApSfjUBFt
+30l28G4XA4O7RT9FwZnhMeWA75JYTigwOsNvkNtPiAQB8mjksclGNxqnkRwA/RI7
+fjlMCzxOkFjIeWivXd2kjIDvIM1uQNKsCWZWUks12e/1zSmb5HPSvyuZpQKBgQDQ
+qVgKP604ysmav9HOgXy+Tx2nAoYpxp2/f2gbzZcrVfz1szdN2fnsQWh6CMEhEYMU
+WQeBJIRM65w72qp1iYXPOaqZDT0suWiFl4I/4sBbbO2BkssNb2Xs8iJxcCOeH8Td
+qVfTssNTwf7OuQPTYGtXC6ysCh5ra13Tl4cvlbdhsQKBgFHXP+919wSncLS+2ySD
+waBzG6GyVOgV+FE3DrM3Xp4S6fldWYAndKHQ1HjJVDY8SkC2Tk1D7QSQnmS+ZzYs
+YqzcnkPCTHLb6wCErs4ZiW0gn9xJnfxyv6wPujsayL4TMsmsqkj/IAB61UjwaA/a
+Z+rUw/WkcNPD59AD1J0eeSZu
+-----END PRIVATE KEY-----
--- /dev/null
+<div>foo</div><div>Bar</div>
--- /dev/null
+<div>foo</div><p>Bar</p>
--- /dev/null
+foo
+
+Bar
--- /dev/null
+<ul>
+ <li>
+ <div>
+ <p >This is the first paragraph of a list item.</div>
+ <p >This is the second paragraph of a list item.</li>
+ <li>
+ <div>This is the first paragraph of a list item.</div>
+ <div>This is the second paragraph of a list item.</div>
+ </li>
+</ul>
--- /dev/null
+* This is the first paragraph of a list item.
+
+ This is the second paragraph of a list item.
+
+* This is the first paragraph of a list item.
+ This is the second paragraph of a list item.
--- /dev/null
+<ol><li></li><li></li><li></li></ol>
--- /dev/null
+1%20
+2%20
+3%20
--- /dev/null
+<div class="gmail_extra">(progn</div><div class="gmail_extra"> (setq minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))</div><div class="gmail_extra"><br></div><div class="gmail_extra"> (defun turn-on-cursor-intangible-mode ()</div><div class="gmail_extra"> "Turns on cursor-intangible-mode."</div><div class="gmail_extra"> (interactive)</div><div class="gmail_extra"> (cursor-intangible-mode 1))</div><div class="gmail_extra"> (define-globalized-minor-mode global-cursor-intangible-mode cursor-intangible-mode turn-on-cursor-intangible-mode)</div><div class="gmail_extra"><br></div><div class="gmail_extra"> (global-cursor-intangible-mode 1))</div><div class="gmail_extra"><br></div>
--- /dev/null
+(progn
+ (setq minibuffer-prompt-properties '(read-only t cursor-intangible t face
+minibuffer-prompt))
+
+ (defun turn-on-cursor-intangible-mode ()
+ "Turns on cursor-intangible-mode."
+ (interactive)
+ (cursor-intangible-mode 1))
+ (define-globalized-minor-mode global-cursor-intangible-mode
+cursor-intangible-mode turn-on-cursor-intangible-mode)
+
+ (global-cursor-intangible-mode 1))
--- /dev/null
+<ul>
+<li></li>
+</ul>
+Lala
--- /dev/null
+*
+
+Lala
\ No newline at end of file
--- /dev/null
+#+TITLE: The Location of Emacs-Lisp Tests
+
+
+
+* The Main Emacs Repository
+
+The Emacs repository contains a very large number of Emacs-Lisp files, many of
+which pre-date both formal package support for Emacs and automated unit
+testing.
+
+All paths are relative to the Emacs root directory.
+
+** Source
+
+Lisp files are stored in the ~lisp~ directory or its sub-directories.
+Sub-directories are in many cases themed after packages (~gnus~, ~org~,
+~calc~), related functionality (~net~, ~emacs-lisp~, ~progmodes~) or status
+(~obsolete~).
+
+C source is stored in the ~src~ directory, which is flat.
+
+** Test Files
+
+Automated tests should be stored in the ~test/automated/lisp~ directory. Tests
+should reflect the directory structure of the source tree; so tests for files
+in the ~emacs-lisp~ source directory should reside in the
+~test/lisp/emacs-lisp~ directory.
+
+Tests should normally reside in a file with ~-tests~ added to the name of
+the tested source file; hence ~ert.el~ is tested in ~ert-tests.el~, or
+~pcase.el~ is tested in ~pcase-tests.el~. Exceptionally, tests for a
+single feature may be placed into multiple files of any name which are
+themselves placed in a directory named after the feature with ~-tests~
+appended, such as ~/test/lisp/emacs-lisp/eieio-tests~
+
+Where features of the C source are tested using Emacs-Lisp test files, these
+should reside in ~/test/src~ and be named after the C file.
+
+A few test suites which predate this scheme and do not fit cleanly
+into it are placed in ~/test/lisp/legacy~.
+
+There are also some test materials that cannot be run automatically
+(i.e. via ert). These should be placed in ~/test/manual~
+
+** Resource Files
+
+Resource files for tests (containing test data) should reside in a directory
+named after the feature with a ~-resources~ suffix, and located in the same
+directory as the feature. Hence, the lisp file ~flymake.el~ should have test
+files in ~/test/automated/lisp/progmodes/flymake-tests.el~ should reside in a
+directory called ~/test/automated/lisp/progmodes/flymake-resources~.
+
+No guidance is given for the organization of resource files inside the
+~-resource~ directory; files can be organized at the author's discretion.
--- /dev/null
+;;; abbrev-tests.el --- Test suite for abbrevs -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; Author: Eli Zaretskii <eliz@gnu.org>
+;; Keywords: abbrevs
+
+;; 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:
+
+;; `kill-all-abbrevs-test' will remove all user *and* system abbrevs
+;; if called noninteractively with the init file loaded.
+
+;;; Code:
+
+(require 'ert)
+(require 'abbrev)
+(require 'seq)
+
+;; set up test abbrev table and abbrev entry
+(defun setup-test-abbrev-table ()
+ (defvar ert-test-abbrevs nil)
+ (define-abbrev-table 'ert-test-abbrevs '(("a-e-t" "abbrev-ert-test")))
+ (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)))
+ (should (abbrev-table-empty-p (make-abbrev-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 (abbrev-table-p foo-abbrev-table))
+ ;; Bug 21828
+ (let ((new-foo-abbrev-table
+ (condition-case nil
+ (copy-abbrev-table foo-abbrev-table)
+ (error nil))))
+ (should (abbrev-table-p new-foo-abbrev-table)))
+ (should-not (string-equal (buffer-name) "*Backtrace*")))
+
+(ert-deftest abbrev-table-empty-p-test ()
+ (should-error (abbrev-table-empty-p 42))
+ (should-error (abbrev-table-empty-p "aoeu"))
+ (should-error (abbrev-table-empty-p '()))
+ (should-error (abbrev-table-empty-p []))
+ ;; Missing :abbrev-table-modiff counter:
+ (should-error (abbrev-table-empty-p (obarray-make)))
+ (let* ((table (obarray-make)))
+ (abbrev-table-put table :abbrev-table-modiff 42)
+ (should (abbrev-table-empty-p table))))
+
+(ert-deftest kill-all-abbrevs-test ()
+ "Test undefining all defined abbrevs"
+ (unless noninteractive
+ (ert-skip "Cannot test kill-all-abbrevs in interactive mode"))
+
+ (let ((num-tables 0))
+ ;; ensure at least one abbrev exists
+ (should (abbrev-table-p (setup-test-abbrev-table)))
+ (setf num-tables (length abbrev-table-name-list))
+ (kill-all-abbrevs)
+
+ ;; no tables should have been removed/added
+ (should (= num-tables (length abbrev-table-name-list)))
+ ;; number of empty tables should be the same as number of tables
+ (should (= num-tables (length (seq-filter
+ (lambda (table)
+ (abbrev-table-empty-p (symbol-value table)))
+ abbrev-table-name-list))))))
+
+(ert-deftest abbrev-table-name-test ()
+ "Test returning name of abbrev-table"
+ (let ((ert-test-abbrevs (setup-test-abbrev-table))
+ (no-such-table nil))
+ (should (equal 'ert-test-abbrevs (abbrev-table-name ert-test-abbrevs)))
+ (should (equal nil (abbrev-table-name no-such-table)))))
+
+(ert-deftest clear-abbrev-table-test ()
+ "Test clearing single abbrev table"
+ (let ((ert-test-abbrevs (setup-test-abbrev-table)))
+ (should (equal "abbrev-ert-test" (abbrev-expansion "a-e-t" ert-test-abbrevs)))
+ (clear-abbrev-table ert-test-abbrevs)
+ (should (equal nil (abbrev-expansion "a-e-t" ert-test-abbrevs)))
+ (should (equal t (abbrev-table-empty-p ert-test-abbrevs)))))
+
+(ert-deftest list-abbrevs-test ()
+ "Test generation of abbrev list buffer"
+ ;; Somewhat redundant as prepare-abbrev-list-buffer is also tested.
+ ;; all abbrevs
+ (let ((abbrev-buffer (prepare-abbrev-list-buffer)))
+ (should (equal "*Abbrevs*" (buffer-name abbrev-buffer)))
+ (kill-buffer abbrev-buffer))
+ ;; mode-specific abbrevs
+ (let ((abbrev-buffer (prepare-abbrev-list-buffer t)))
+ (should (equal "*Abbrevs*" (buffer-name abbrev-buffer)))
+ (kill-buffer abbrev-buffer)))
+
+(ert-deftest prepare-abbrev-list-buffer-test ()
+ "Test generation of abbrev list buffer"
+ ;; all abbrevs
+ (let ((ert-test-abbrevs (setup-test-abbrev-table)))
+ (with-current-buffer (prepare-abbrev-list-buffer)
+ ;; Check for a couple of abbrev-table names in buffer.
+ (should (and (progn
+ (goto-char (point-min))
+ (search-forward (symbol-name (abbrev-table-name ert-test-abbrevs))))
+ (progn
+ (goto-char (point-min))
+ (search-forward "global-abbrev-table"))))
+ (should (equal 'edit-abbrevs-mode major-mode))
+ (kill-buffer "*Abbrevs*")))
+
+ ;; mode-specific abbrevs (temp buffer uses fundamental-mode)
+ (with-temp-buffer
+ (prepare-abbrev-list-buffer t)
+ (with-current-buffer "*Abbrevs*"
+ (should (progn
+ (goto-char (point-min))
+ (search-forward "fundamental-mode-abbrev-table")))
+ (should-error (progn
+ (goto-char (point-min))
+ (search-forward "global-abbrev-table")))
+ (should-not (equal 'edit-abbrevs-mode major-mode))
+ (kill-buffer "*Abbrevs*"))))
+
+(ert-deftest insert-abbrevs-test ()
+ "Test inserting abbrev definitions into buffer"
+ (with-temp-buffer
+ (insert-abbrevs)
+ (should (progn
+ (goto-char (point-min))
+ (search-forward "global-abbrev-table")))))
+
+(ert-deftest edit-abbrevs-test ()
+ "Test editing abbrevs from buffer"
+ (defvar ert-edit-abbrevs-test-table nil)
+ (let ((ert-test-abbrevs (setup-test-abbrev-table)))
+ (with-temp-buffer
+ ;; insert test table and new abbrev, redefine, check definition
+ (goto-char (point-min))
+ (insert "(ert-edit-abbrevs-test-table)\n")
+ (insert "\n" "\"e-a-t\"\t" "0\t" "\"edit-abbrevs-test\"\n")
+ ;; check test table before redefine
+ (should (equal "abbrev-ert-test"
+ (abbrev-expansion "a-e-t" ert-test-abbrevs)))
+ (edit-abbrevs-redefine)
+ (should-not (abbrev-expansion "a-e-t" ert-test-abbrevs))
+ (should (equal "edit-abbrevs-test"
+ (abbrev-expansion "e-a-t" ert-edit-abbrevs-test-table))))))
+
+(ert-deftest define-abbrevs-test ()
+ "Test defining abbrevs from buffer"
+ (defvar ert-bad-abbrev-table nil)
+ (defvar ert-good-abbrev-table nil)
+ (defvar ert-redefine-abbrev-table nil)
+ (with-temp-buffer
+ ;; insert bad abbrev data and attempt define
+ (goto-char (point-min))
+ (insert "ert-bad-abbrev-table\n")
+ (insert "\n" "\"b-a-t\"\t" "0\t" "\n")
+ (should-not (define-abbrevs))
+ (should (equal nil (abbrev-expansion "b-a-t" ert-bad-abbrev-table)))
+ (delete-region (point-min) (point-max))
+ ;; try with valid abbrev data
+ (goto-char (point-min))
+ (insert "(ert-good-abbrev-table)\n")
+ (insert "\n" "\"g-a-t\"\t" "0\t" "\"good-abbrev-table\"\n")
+ (define-abbrevs)
+ (should (equal "good-abbrev-table"
+ (abbrev-expansion "g-a-t" ert-good-abbrev-table)))
+ ;; redefine from buffer
+ (delete-region (point-min) (point-max))
+ (insert "(ert-redefine-abbrev-table)\n")
+ (insert "\n" "\"r-a-t\"\t" "0\t" "\"redefine-abbrev-table\"\n")
+ ;; arg = kill-all-abbrevs
+ (define-abbrevs t)
+ (should (equal "redefine-abbrev-table"
+ (abbrev-expansion "r-a-t" ert-redefine-abbrev-table)))
+ (should (equal nil (abbrev-expansion "g-a-t" ert-good-abbrev-table)))))
+
+(ert-deftest read-write-abbrev-file-test ()
+ "Test reading and writing abbrevs from file"
+ (let ((temp-test-file (make-temp-file "ert-abbrev-test"))
+ (ert-test-abbrevs (setup-test-abbrev-table)))
+ (write-abbrev-file temp-test-file)
+ (clear-abbrev-table ert-test-abbrevs)
+ (should (abbrev-table-empty-p ert-test-abbrevs))
+ (read-abbrev-file temp-test-file)
+ (should (equal "abbrev-ert-test" (abbrev-expansion "a-e-t" ert-test-abbrevs)))
+ (delete-file temp-test-file)))
+
+(ert-deftest abbrev-edit-save-to-file-test ()
+ "Test saving abbrev definitions in buffer to file"
+ (defvar ert-save-test-table nil)
+ (let ((temp-test-file (make-temp-file "ert-abbrev-test"))
+ (ert-test-abbrevs (setup-test-abbrev-table)))
+ (with-temp-buffer
+ (goto-char (point-min))
+ (insert "(ert-save-test-table)\n")
+ (insert "\n" "\"s-a-t\"\t" "0\t" "\"save-abbrevs-test\"\n")
+ (should (equal "abbrev-ert-test"
+ (abbrev-expansion "a-e-t" ert-test-abbrevs)))
+ ;; clears abbrev tables
+ (abbrev-edit-save-to-file temp-test-file)
+ (should-not (abbrev-expansion "a-e-t" ert-test-abbrevs))
+ (read-abbrev-file temp-test-file)
+ (should (equal "save-abbrevs-test"
+ (abbrev-expansion "s-a-t" ert-save-test-table)))
+ (delete-file temp-test-file))))
+
+(provide 'abbrev-tests)
+
+;;; abbrev-tests.el ends here
(ignore-errors (delete-directory tmpdir1 'recursive))
(ignore-errors (delete-directory tmpdir2 'recursive)))))
-(ert-deftest auto-revert-test02-auto-revert-tail-mode ()
+;; This is inspired by Bug#23276.
+(ert-deftest auto-revert-test02-auto-revert-deleted-file ()
+ "Check autorevert for a deleted file."
+ :tags '(:expensive-test)
+
+ (let ((tmpfile (make-temp-file "auto-revert-test"))
+ buf)
+ (unwind-protect
+ (progn
+ (with-current-buffer (get-buffer-create "*Messages*")
+ (narrow-to-region (point-max) (point-max)))
+ (write-region "any text" nil tmpfile nil 'no-message)
+ (setq buf (find-file-noselect tmpfile))
+ (with-current-buffer buf
+ (should (string-equal (buffer-string) "any text"))
+ ;; `buffer-stale--default-function' checks for
+ ;; `verify-visited-file-modtime'. We must ensure that
+ ;; it returns nil.
+ (sleep-for 1)
+ (auto-revert-mode 1)
+ (should auto-revert-mode)
+
+ ;; Remove file while reverting. We simulate this by
+ ;; modifying `before-revert-hook'.
+ (add-hook
+ 'before-revert-hook
+ (lambda () (delete-file buffer-file-name))
+ nil t)
+ (with-current-buffer (get-buffer-create "*Messages*")
+ (narrow-to-region (point-max) (point-max)))
+ (sleep-for 1)
+ (write-region "another text" nil tmpfile nil 'no-message)
+
+ ;; Check, that the buffer hasn't been reverted. File
+ ;; notification should be disabled, falling back to
+ ;; polling.
+ (auto-revert--wait-for-revert buf)
+ (should (string-match "any text" (buffer-string)))
+ (should-not auto-revert-use-notify)
+
+ ;; Once the file has been recreated, the buffer shall be
+ ;; reverted.
+ (kill-local-variable 'before-revert-hook)
+ (with-current-buffer (get-buffer-create "*Messages*")
+ (narrow-to-region (point-max) (point-max)))
+ (sleep-for 1)
+ (write-region "another text" nil tmpfile nil 'no-message)
+
+ ;; Check, that the buffer has been reverted.
+ (auto-revert--wait-for-revert buf)
+ (should (string-match "another text" (buffer-string)))
+
+ ;; An empty file shall still be reverted.
+ (with-current-buffer (get-buffer-create "*Messages*")
+ (narrow-to-region (point-max) (point-max)))
+ (sleep-for 1)
+ (write-region "" nil tmpfile nil 'no-message)
+
+ ;; Check, that the buffer has been reverted.
+ (auto-revert--wait-for-revert buf)
+ (should (string-equal "" (buffer-string)))))
+
+ ;; Exit.
+ (with-current-buffer "*Messages*" (widen))
+ (ignore-errors
+ (with-current-buffer buf (set-buffer-modified-p nil))
+ (kill-buffer buf))
+ (ignore-errors (delete-file tmpfile)))))
+
+(ert-deftest auto-revert-test03-auto-revert-tail-mode ()
"Check autorevert tail mode."
;; `auto-revert-buffers' runs every 5". And we must wait, until the
;; file has been reverted.
(ignore-errors (kill-buffer buf))
(ignore-errors (delete-file tmpfile)))))
-(ert-deftest auto-revert-test03-auto-revert-mode-dired ()
+(ert-deftest auto-revert-test04-auto-revert-mode-dired ()
"Check autorevert for dired."
;; `auto-revert-buffers' runs every 5". And we must wait, until the
;; file has been reverted.
;;; Code:
(require 'ert)
+(require 'ert-x)
(require 'icalendar)
;; ======================================================================
(ert-deftest icalendar--create-uid ()
"Test for `icalendar--create-uid'."
(let* ((icalendar-uid-format "xxx-%t-%c-%h-%u-%s")
- t-ct
(icalendar--uid-count 77)
(entry-full "30.06.1964 07:01 blahblah")
(hash (format "%d" (abs (sxhash entry-full))))
(contents "DTSTART:19640630T070100\nblahblah")
- (username (or user-login-name "UNKNOWN_USER"))
- )
- (fset 't-ct (symbol-function 'current-time))
- (unwind-protect
- (progn
- (fset 'current-time (lambda () '(1 2 3)))
- (should (= 77 icalendar--uid-count))
- (should (string= (concat "xxx-123-77-" hash "-" username "-19640630")
- (icalendar--create-uid entry-full contents)))
- (should (= 78 icalendar--uid-count)))
- ;; restore 'current-time
- (fset 'current-time (symbol-function 't-ct)))
+ (username (or user-login-name "UNKNOWN_USER")))
+ (ert-with-function-mocked current-time (lambda () '(1 2 3))
+ (should (= 77 icalendar--uid-count))
+ (should (string= (concat "xxx-123-77-" hash "-" username "-19640630")
+ (icalendar--create-uid entry-full contents)))
+ (should (= 78 icalendar--uid-count)))
(setq contents "blahblah")
(setq icalendar-uid-format "yyy%syyy")
(should (string= (concat "yyyDTSTARTyyy")
--- /dev/null
+;; parse-time-tests.el --- Test suite for parse-time.el
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Ingebrigtsen <larsi@gnus.org>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'parse-time)
+
+(ert-deftest parse-time-tests ()
+ (should (equal (parse-time-string "Mon, 22 Feb 2016 19:35:42 +0100")
+ '(42 35 19 22 2 2016 1 nil 3600)))
+ (should (equal (parse-time-string "22 Feb 2016 19:35:42 +0100")
+ '(42 35 19 22 2 2016 nil nil 3600)))
+ (should (equal (parse-time-string "22 Feb 2016 +0100")
+ '(nil nil nil 22 2 2016 nil nil 3600)))
+ (should (equal (parse-time-string "Mon, 22 Feb 16 19:35:42 +0100")
+ '(42 35 19 22 2 2016 1 nil 3600)))
+ (should (equal (parse-time-string "Mon, 22 February 2016 19:35:42 +0100")
+ '(42 35 19 22 2 2016 1 nil 3600)))
+ (should (equal (parse-time-string "Mon, 22 feb 2016 19:35:42 +0100")
+ '(42 35 19 22 2 2016 1 nil 3600)))
+ (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 +0100")
+ '(42 35 19 22 2 2016 1 nil 3600)))
+ (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 PDT")
+ '(42 35 19 22 2 2016 1 t -25200))))
+
+(provide 'parse-time-tests)
+
+;;; parse-time-tests.el ends here
--- /dev/null
+;;; dired-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'dired)
+
+
+(ert-deftest dired-autoload ()
+ "Tests to see whether dired-x has been autoloaded"
+ (should
+ (fboundp 'dired-jump))
+ (should
+ (autoloadp
+ (symbol-function
+ 'dired-jump))))
+
+(provide 'dired-tests)
+;; dired-tests.el ends here
(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
(should (equal (c x) (lisp x))))))
+(defun ert--dummy-id (a)
+ "Identity function. Used for tests only."
+ a)
+
+(ert-deftest ert-with-function-mocked ()
+ (let ((mock-id (lambda (_) 21)))
+ (should (eq 42 (ert--dummy-id 42)))
+
+ (ert-with-function-mocked ert--dummy-id nil
+ (fset 'ert--dummy-id mock-id)
+ (should (eq 21 (ert--dummy-id 42))))
+ (should (eq 42 (ert--dummy-id 42)))
+
+ (ert-with-function-mocked ert--dummy-id mock-id
+ (should (eq 21 (ert--dummy-id 42))))
+ (should (eq 42 (ert--dummy-id 42)))
+
+ (should
+ (catch 'exit
+ (ert-with-function-mocked ert--dummy-id mock-id
+ (should (eq 21 (ert--dummy-id 42))))
+ (throw 'exit t)))
+ (should (eq 42 (ert--dummy-id 42)))
+
+ (should
+ (string= "Foo"
+ (condition-case err
+ (progn
+ (ert-with-function-mocked ert--dummy-id mock-id
+ (should (eq 21 (ert--dummy-id 42))))
+ (user-error "Foo"))
+ (user-error (cadr err)))))
+ (should (eq 42 (ert--dummy-id 42)))
+
+ (should
+ (string= "`ert--dummy-id' unexpectedly called."
+ (condition-case err
+ (ert-with-function-mocked ert--dummy-id nil
+ (ert--dummy-id 42))
+ (ert-test-failed (cadr err)))))
+ (should (eq 42 (ert--dummy-id 42)))))
+
+
(provide 'ert-x-tests)
;;; ert-x-tests.el ends here
--- /dev/null
+;;; lisp-tests.el --- Test Lisp editing commands -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2013-2016 Free Software Foundation, Inc.
+
+;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
+;; Keywords: internal
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Testing of `forward-sexp' and related functions.
+
+;;; Code:
+
+(require 'ert)
+(require 'python)
+
+(ert-deftest lisp-forward-sexp-1-empty-parens ()
+ "Test basics of \\[forward-sexp]."
+ (with-temp-buffer
+ (insert "()")
+ (goto-char (point-min))
+ (should (null
+ (forward-sexp 1)))))
+
+(ert-deftest lisp-forward-sexp-1-error-mismatch ()
+ "Test basics of \\[forward-sexp]."
+ (with-temp-buffer
+ (insert "(")
+ (goto-char (point-min))
+ (should-error
+ (forward-sexp 1))))
+
+(ert-deftest lisp-backward-sexp-1-empty-parens ()
+ "Test basics of \\[backward-sexp]."
+ (with-temp-buffer
+ (insert "()")
+ (should (null
+ (forward-sexp -1)))))
+
+(ert-deftest lisp-backward-sexp-1-error-mismatch ()
+ "Test mismatched parens with \\[backward-sexp]."
+ (with-temp-buffer
+ (insert "(")
+ (should-error
+ (forward-sexp -1))))
+
+(ert-deftest lisp-forward-sexp-1-eobp ()
+ "Test \\[forward-sexp] at `eobp'."
+ (with-temp-buffer
+ (insert "()")
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp 1)))))
+
+(ert-deftest lisp-backward-sexp-1-eobp ()
+ "Test \\[backward-sexp] at `bobp'."
+ (with-temp-buffer
+ (insert "()")
+ (goto-char (point-min))
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp -1)))))
+
+(ert-deftest lisp-forward-sexp-2-eobp ()
+ "Test \\[forward-sexp] beyond `eobp'."
+ (with-temp-buffer
+ (insert "()")
+ (goto-char (point-min))
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp 2)))
+ (should (eobp))))
+
+(ert-deftest lisp-backward-sexp-2-bobp ()
+ "Test \\[backward-sexp] beyond `bobp'."
+ (with-temp-buffer
+ (insert "()")
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp -2)))
+ (should (bobp))))
+
+(ert-deftest lisp-forward-sexp-2-eobp-and-subsequent ()
+ "Test \\[forward-sexp] beyond `eobp' and again."
+ (with-temp-buffer
+ (insert "()")
+ (goto-char (point-min))
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp 2)))
+ (should (eobp))
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp 1)))))
+
+(ert-deftest lisp-backward-sexp-2-bobp-and-subsequent ()
+ "Test \\[backward-sexp] ahead of `bobp' and again."
+ (with-temp-buffer
+ (insert "()")
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp -2)))
+ (should (bobp))
+ (should (null ;; (should-error ;; No, per #13994
+ (forward-sexp -1)))))
+
+(ert-deftest lisp-delete-pair-parens ()
+ "Test \\[delete-pair] with parens."
+ (with-temp-buffer
+ (insert "(foo)")
+ (goto-char (point-min))
+ (delete-pair)
+ (should (string-equal "foo" (buffer-string)))))
+
+(ert-deftest lisp-delete-pair-quotation-marks ()
+ "Test \\[delete-pair] with quotation marks."
+ (with-temp-buffer
+ (insert "\"foo\"")
+ (goto-char (point-min))
+ (delete-pair)
+ (should (string-equal "foo" (buffer-string)))))
+
+(ert-deftest lisp-delete-pair-quotes-in-text-mode ()
+ "Test \\[delete-pair] against string in Text Mode for #15014."
+ (with-temp-buffer
+ (text-mode)
+ (insert "\"foo\"")
+ (goto-char (point-min))
+ (delete-pair)
+ (should (string-equal "fo\"" (buffer-string)))))
+
+(ert-deftest lisp-delete-pair-quotes-text-mode-syntax-table ()
+ "Test \\[delete-pair] with modified Text Mode syntax for #15014."
+ (with-temp-buffer
+ (text-mode)
+ (let ((st (copy-syntax-table text-mode-syntax-table)))
+ (with-syntax-table st
+ ;; (modify-syntax-entry ?\" "." text-mode-syntax-table)
+ (modify-syntax-entry ?\" "$" st)
+ (insert "\"foo\"")
+ (goto-char (point-min))
+ (delete-pair)
+ (should (string-equal "foo" (buffer-string)))))))
+
+(ert-deftest lisp-forward-sexp-elisp-inside-symbol ()
+ "Test \\[forward-sexp] on symbol in Emacs Lisp Mode for #20492."
+ (with-temp-buffer
+ (emacs-lisp-mode)
+ (insert "hide-ifdef-env ")
+ (insert (concat (number-sequence 32 126)))
+ (goto-char (point-min))
+ (re-search-forward "hide" nil t) ;; (forward-char 4)
+ (should (looking-at "-"))
+ (forward-sexp)
+ (should (looking-at " "))))
+
+(ert-deftest lisp-forward-sexp-elisp-quoted-symbol ()
+ "Test \\[forward-sexp] on symbol in Emacs Lisp Mode for #20492."
+ (with-temp-buffer
+ (emacs-lisp-mode)
+ (insert "`hide-ifdef-env'.")
+ (goto-char (point-min))
+ (re-search-forward "hide" nil t) ;; (forward-char 5)
+ (should (= ?- (char-after)))
+ (forward-sexp)
+ (should (= ?. (char-before)))))
+
+(ert-deftest lisp-forward-sexp-python-triple-quoted-string ()
+ "Test \\[forward-sexp] on Python doc strings for #11321."
+ (with-temp-buffer
+ (insert "\"\"\"Triple-quoted string\"\"\"")
+ (goto-char (point-min))
+ (let ((python-indent-guess-indent-offset nil))
+ (python-mode))
+ (forward-sexp)
+ (should (eobp))))
+
+(ert-deftest lisp-forward-sexp-python-triple-quotes-string ()
+ "Test \\[forward-sexp] on Python doc strings for #11321."
+ (with-temp-buffer
+ (insert "'''Triple-quoted string'''")
+ (goto-char (point-min))
+ (let ((python-indent-guess-indent-offset nil))
+ (python-mode))
+ (forward-sexp)
+ (should (eobp))))
+
+(ert-deftest lisp-forward-sexp-emacs-lisp-semi-char-error ()
+ "Test \\[forward-sexp] on expression with unquoted semicolon per #4030."
+ (with-temp-buffer
+ (emacs-lisp-mode)
+ (insert "(insert ?;)")
+ (goto-char (point-min))
+ (should-error (forward-sexp)))) ;; FIXME: Shouldn't be an error.
+
+(ert-deftest lisp-forward-sexp-emacs-lisp-quote-char ()
+ "Test \\[forward-sexp] on expression with unquoted quote per #4030."
+ (with-temp-buffer
+ (emacs-lisp-mode)
+ (insert "(insert ?\")")
+ (goto-char (point-min))
+ (should-error (forward-sexp)))) ;; FIXME: Shouldn't be an error.
+
+(provide 'lisp-tests)
+;;; lisp-tests.el ends here
(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
(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))
(ert-deftest package-test-macro-compilation ()
"Install a package which includes a dependency."
- (with-package-test (:basedir "data/package")
+ (with-package-test (:basedir "package-resources")
(package-install-file (expand-file-name "macro-problem-package-1.0/"))
(require 'macro-problem)
;; `macro-problem-func' uses a macro from `macro-aux'.
(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)))
(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
(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)
(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)
(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)
(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)
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
(with-test-sequences (seq '())
(should (seq-empty-p (seq-take-while #'test-sequences-oddp seq)))))
+(ert-deftest test-seq-map-indexed ()
+ (should (equal (seq-map-indexed (lambda (elt i)
+ (list elt i))
+ nil)
+ nil))
+ (should (equal (seq-map-indexed (lambda (elt i)
+ (list elt i))
+ '(a b c d))
+ '((a 0) (b 1) (c 2) (d 3)))))
+
(ert-deftest test-seq-filter ()
(with-test-sequences (seq '(6 7 8 9 10))
(should (equal (seq-filter #'test-sequences-evenp seq) '(6 8 10)))
(should (= (seq-position seq 'a #'eq) 0))
(should (null (seq-position seq (make-symbol "a") #'eq)))))
+(ert-deftest test-seq-sort-by ()
+ (let ((seq ["x" "xx" "xxx"]))
+ (should (equal (seq-sort-by #'seq-length #'> seq)
+ ["xxx" "xx" "x"]))))
+
(provide 'seq-tests)
;;; seq-tests.el ends here
--- /dev/null
+;;; erc-track-tests.el --- Tests for erc-track.
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Mario Lang <mlang@delysid.org>
+;; Author: Vivek Dasmohapatra <vivek@etla.org>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'erc-track)
+
+(ert-deftest erc-track--shorten-aggressive-nil ()
+ "Test non-aggressive erc track buffer name shortening."
+ (let (erc-track-shorten-aggressively)
+ (should
+ (equal (erc-unique-channel-names '("#emacs" "#vi" "#electronica" "#folk")
+ '("#emacs" "#vi"))
+ '("#em" "#vi")))
+ (should
+ (equal (erc-unique-channel-names '("#linux-de" "#linux-fr")
+ '("#linux-de" "#linux-fr"))
+ '("#linux-de" "#linux-fr")))
+ (should
+ (equal (erc-unique-channel-names
+ '("#dunnet" "#lisp" "#sawfish" "#fsf" "#guile" "#testgnome"
+ "#gnu" "#fsbot" "#hurd" "#hurd-bunny" "#emacs")
+ '("#hurd-bunny" "#hurd" "#sawfish" "#lisp"))
+ '("#hurd-" "#hurd" "#s" "#l")))
+ (should
+ (equal (erc-unique-substrings '("#emacs" "#vi" "#electronica" "#folk"))
+ '("#em" "#vi" "#el" "#f")))
+ (should
+ (equal (erc-unique-channel-names
+ '("#emacs" "#burse" "+linux.de" "#starwars"
+ "#bitlbee" "+burse" "#ratpoison")
+ '("+linux.de" "#starwars" "#burse"))
+ '("+l" "#s" "#bu")))
+ (should
+ (equal (erc-unique-channel-names '("fsbot" "#emacs" "deego") '("fsbot"))
+ '("fs")))
+ (should
+ (equal (erc-unique-channel-names '("fsbot" "#emacs" "deego")
+ '("fsbot")
+ (lambda (s) (> (length s) 4)) 1)
+ '("f")))
+ (should
+ (equal (erc-unique-channel-names '("fsbot" "#emacs" "deego")
+ '("fsbot")
+ (lambda (s) (> (length s) 4)) 2)
+ '("fs")))
+ (should
+ (equal (erc-unique-channel-names '("deego" "#hurd" "#hurd-bunny" "#emacs")
+ '("#hurd" "#hurd-bunny"))
+ '("#hurd" "#hurd-")))
+ (should
+ (and
+ (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
+ (not (erc-unique-substring-1 "a" '("xyz" "xab")))
+ (equal (erc-unique-substrings '("abc" "xyz" "xab")) '("abc" "xyz" "xab"))
+ (equal (erc-unique-substrings '("abc" "abcdefg")) '("abc" "abcd")))) ))
+
+(ert-deftest erc-track--shorten-aggressive-t ()
+ "Test aggressive erc track buffer name shortening."
+ (let ((erc-track-shorten-aggressively t))
+ (should
+ (equal (erc-unique-channel-names '("#emacs" "#vi" "#electronica" "#folk")
+ '("#emacs" "#vi"))
+ '("#em" "#v")))
+ (should
+ (equal (erc-unique-channel-names '("#linux-de" "#linux-fr")
+ '("#linux-de" "#linux-fr"))
+ '("#linux-d" "#linux-f")))
+ (should
+ (equal (erc-unique-substrings '("#emacs" "#vi" "#electronica" "#folk"))
+ '("#em" "#v" "#el" "#f")))
+ (should
+ (and
+ (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
+ (not (erc-unique-substring-1 "a" '("xyz" "xab")))
+ (equal (erc-unique-substrings '("abc" "xyz" "xab")) '("ab" "xy" "xa"))
+ (equal (erc-unique-substrings '("abc" "abcdefg")) '("abc" "abcd")))) ))
+
+(ert-deftest erc-track--shorten-aggressive-max ()
+ "Test maximally aggressive erc track buffer name shortening."
+ (let ((erc-track-shorten-aggressively 'max))
+ (should
+ (equal (erc-unique-channel-names '("#emacs" "#vi" "#electronica" "#folk")
+ '("#emacs" "#vi"))
+ '("#e" "#v"))) ))
+
+(ert-deftest erc-track--erc-faces-in ()
+ "`erc-faces-in' should pick up both 'face and 'font-lock-face properties."
+ (let ((str0 "is bold")
+ (str1 "is bold")
+ ;;(char-property-alias-alist '((face font-lock-face)))
+ )
+ (put-text-property 3 (length str0) 'font-lock-face
+ '(bold erc-current-nick-face) str0)
+ (put-text-property 3 (length str1) 'face
+ '(bold erc-current-nick-face) str1)
+ (should (erc-faces-in str0))
+ (should (erc-faces-in str1)) ))
(setq desc
(file-notify-add-watch
file-notify-test-remote-temporary-file-directory
- '(change) 'ignore))))
+ '(change) #'ignore))))
(setq file-notify--test-remote-enabled-checked (cons t desc))
(when desc (file-notify-rm-watch desc))))
;; Return result.
(message "Library: `%s'" (file-notify--test-library))
(should
(setq file-notify--test-desc
- (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
+ (file-notify-add-watch temporary-file-directory '(change) #'ignore)))
;; Cleanup.
(file-notify--test-cleanup))
;; Check, that different valid parameters are accepted.
(should
(setq file-notify--test-desc
- (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
+ (file-notify-add-watch temporary-file-directory '(change) #'ignore)))
(file-notify-rm-watch file-notify--test-desc)
(should
(setq file-notify--test-desc
(file-notify-add-watch
- temporary-file-directory '(attribute-change) 'ignore)))
+ temporary-file-directory '(attribute-change) #'ignore)))
(file-notify-rm-watch file-notify--test-desc)
(should
(setq file-notify--test-desc
(file-notify-add-watch
- temporary-file-directory '(change attribute-change) 'ignore)))
+ temporary-file-directory '(change attribute-change) #'ignore)))
(file-notify-rm-watch file-notify--test-desc)
(write-region "any text" nil file-notify--test-tmpfile nil 'no-message)
(should
(setq file-notify--test-desc
(file-notify-add-watch
- file-notify--test-tmpfile '(change attribute-change) 'ignore)))
+ file-notify--test-tmpfile '(change attribute-change) #'ignore)))
(file-notify-rm-watch file-notify--test-desc)
(delete-file file-notify--test-tmpfile)
(should
(equal (should-error
(file-notify-add-watch
- file-notify--test-tmpfile1 '(change attribute-change) 'ignore))
+ file-notify--test-tmpfile1 '(change attribute-change) #'ignore))
`(file-notify-error
"Directory does not exist" ,file-notify--test-tmpfile)))
(setq file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpfile
- '(change) 'file-notify--test-event-handler)))
+ '(change) #'file-notify--test-event-handler)))
(file-notify--test-with-events
(cond
;; cygwin recognizes only `deleted' and `stopped' events.
(setq file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpfile
- '(change) 'file-notify--test-event-handler)))
+ '(change) #'file-notify--test-event-handler)))
(file-notify--test-with-events
(cond
;; cygwin recognizes only `deleted' and `stopped' events.
'((changed deleted stopped)
(changed changed deleted stopped)))
(t '(changed changed deleted stopped)))
- (read-event nil nil file-notify--test-read-event-timeout)
(write-region
"another text" nil file-notify--test-tmpfile nil 'no-message)
(read-event nil nil file-notify--test-read-event-timeout)
file-notify--test-desc
(file-notify-add-watch
temporary-file-directory
- '(change) 'file-notify--test-event-handler)))
+ '(change) #'file-notify--test-event-handler)))
(file-notify--test-with-events
(cond
;; w32notify does not raise `deleted' and `stopped'
((string-equal (file-notify--test-library) "kqueue")
'(created changed deleted stopped))
(t '(created changed deleted deleted stopped)))
- (read-event nil nil file-notify--test-read-event-timeout)
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
(read-event nil nil file-notify--test-read-event-timeout)
- (delete-directory temporary-file-directory 'recursive))
+ (delete-directory temporary-file-directory 'recursive))
(file-notify-rm-watch file-notify--test-desc))
;; Check copy of files inside a directory.
file-notify--test-desc
(file-notify-add-watch
temporary-file-directory
- '(change) 'file-notify--test-event-handler)))
+ '(change) #'file-notify--test-event-handler)))
(file-notify--test-with-events
(cond
;; w32notify does not distinguish between `changed' and
'(created changed created changed deleted stopped))
(t '(created changed created changed
deleted deleted deleted stopped)))
- (read-event nil nil file-notify--test-read-event-timeout)
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
(read-event nil nil file-notify--test-read-event-timeout)
(read-event nil nil file-notify--test-read-event-timeout)
(set-file-times file-notify--test-tmpfile '(0 0))
(read-event nil nil file-notify--test-read-event-timeout)
- (delete-directory temporary-file-directory 'recursive))
+ (delete-directory temporary-file-directory 'recursive))
(file-notify-rm-watch file-notify--test-desc))
;; Check rename of files inside a directory.
file-notify--test-desc
(file-notify-add-watch
temporary-file-directory
- '(change) 'file-notify--test-event-handler)))
+ '(change) #'file-notify--test-event-handler)))
(file-notify--test-with-events
(cond
;; w32notify does not raise `deleted' and `stopped'
((string-equal (file-notify--test-library) "kqueue")
'(created changed renamed deleted stopped))
(t '(created changed renamed deleted deleted stopped)))
- (read-event nil nil file-notify--test-read-event-timeout)
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
(read-event nil nil file-notify--test-read-event-timeout)
(rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
;; After the rename, we won't get events anymore.
(read-event nil nil file-notify--test-read-event-timeout)
- (delete-directory temporary-file-directory 'recursive))
+ (delete-directory temporary-file-directory 'recursive))
(file-notify-rm-watch file-notify--test-desc))
;; Check attribute change. Does not work for cygwin.
(setq file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpfile
- '(attribute-change) 'file-notify--test-event-handler)))
+ '(attribute-change) #'file-notify--test-event-handler)))
(file-notify--test-with-events
(cond
;; w32notify does not distinguish between `changed' and
- ;; `attribute-changed'.
+ ;; `attribute-changed'. Under MS Windows 7, we get
+ ;; four `changed' events, and under MS Windows 10 just
+ ;; two. Strange.
((string-equal (file-notify--test-library) "w32notify")
- '(changed changed changed changed))
+ '((changed changed)
+ (changed changed changed changed)))
;; For kqueue and in the remote case, `write-region'
;; raises also an `attribute-changed' event.
((or (string-equal (file-notify--test-library) "kqueue")
(file-remote-p temporary-file-directory))
'(attribute-changed attribute-changed attribute-changed))
(t '(attribute-changed attribute-changed)))
- (read-event nil nil file-notify--test-read-event-timeout)
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
(read-event nil nil file-notify--test-read-event-timeout)
(file-notify-add-watch
file-notify--test-tmpfile
'(change) #'file-notify--test-event-handler)))
+ (should (file-notify-valid-p file-notify--test-desc))
(file-notify--test-with-events
(cond
;; cygwin recognizes only `deleted' and `stopped' events.
'((changed deleted stopped)
(changed changed deleted stopped)))
(t '(changed changed deleted stopped)))
- (should (file-notify-valid-p file-notify--test-desc))
- (read-event nil nil file-notify--test-read-event-timeout)
(write-region
"another text" nil file-notify--test-tmpfile nil 'no-message)
(read-event nil nil file-notify--test-read-event-timeout)
(file-notify-add-watch
temporary-file-directory
'(change) #'file-notify--test-event-handler)))
+ (should (file-notify-valid-p file-notify--test-desc))
(file-notify--test-with-events
(cond
;; w32notify does not raise `deleted' and `stopped' events
((string-equal (file-notify--test-library) "kqueue")
'(created changed deleted stopped))
(t '(created changed deleted deleted stopped)))
- (should (file-notify-valid-p file-notify--test-desc))
- (read-event nil nil file-notify--test-read-event-timeout)
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
(read-event nil nil file-notify--test-read-event-timeout)
(unwind-protect
(progn
- (setq file-notify--test-tmpfile
- (file-name-as-directory (file-notify--test-make-temp-name)))
- (make-directory file-notify--test-tmpfile)
+ (should
+ (setq file-notify--test-tmpfile
+ (make-temp-file "file-notify-test-parent" t)))
(should
(setq file-notify--test-desc
(file-notify-add-watch
(unwind-protect
(progn
- (setq file-notify--test-tmpfile
- (file-name-as-directory (file-notify--test-make-temp-name)))
- (make-directory file-notify--test-tmpfile)
+ (should
+ (setq file-notify--test-tmpfile
+ (make-temp-file "file-notify-test-parent" t)))
(should
(setq file-notify--test-desc
(file-notify-add-watch
;; Under cygwin events arrive in random order. Impossible to define a test.
(skip-unless (not (eq system-type 'cygwin)))
- (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
- (make-directory file-notify--test-tmpfile)
+ (should
+ (setq file-notify--test-tmpfile
+ (make-temp-file "file-notify-test-parent" t)))
(should
(setq file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpfile
- '(change) 'file-notify--test-event-handler)))
+ '(change) #'file-notify--test-event-handler)))
(unwind-protect
(let ((n 1000)
source-file-list target-file-list
(file-notify--deftest-remote file-notify-test08-watched-file-in-watched-dir
"Check `file-notify-test08-watched-file-in-watched-dir' for remote files.")
+(ert-deftest file-notify-test09-sufficient-resources ()
+ "Check that file notification does not use too many resources."
+ :tags '(:expensive-test)
+ (skip-unless (file-notify--test-local-enabled))
+ ;; This test is intended for kqueue only.
+ (skip-unless (string-equal (file-notify--test-library) "kqueue"))
+
+ (should
+ (setq file-notify--test-tmpfile
+ (make-temp-file "file-notify-test-parent" t)))
+ (unwind-protect
+ (let ((temporary-file-directory file-notify--test-tmpfile)
+ descs)
+ (should-error
+ (while t
+ ;; We watch directories, because we want to reach the upper
+ ;; limit. Watching a file might not be sufficient, because
+ ;; most of the libraries implement this as watching the
+ ;; upper directory.
+ (setq file-notify--test-tmpfile1
+ (make-temp-file "file-notify-test-parent" t)
+ descs
+ (cons
+ (should
+ (file-notify-add-watch
+ file-notify--test-tmpfile1 '(change) #'ignore))
+ descs)))
+ :type 'file-notify-error)
+ ;; Remove watches. If we don't do it prior removing
+ ;; directories, Emacs crashes in batch mode.
+ (dolist (desc descs)
+ (file-notify-rm-watch desc))
+ ;; Remove directories.
+ (delete-directory file-notify--test-tmpfile 'recursive))
+
+ ;; Cleanup.
+ (file-notify--test-cleanup)))
+
+(file-notify--deftest-remote file-notify-test09-sufficient-resources
+ "Check `file-notify-test09-sufficient-resources' for remote files.")
+
(defun file-notify-test-all (&optional interactive)
"Run all tests for \\[file-notify]."
(interactive "p")
(point)))))
(set-buffer-modified-p nil))))
+
+(ert-deftest message-strip-subject-trailing-was ()
+ (ert-with-function-mocked message-talkative-question nil
+ (with-temp-buffer
+ (let ((no-was "Re: Foo ")
+ (with-was "Re: Foo \t (was: Bar ) ")
+ (stripped-was "Re: Foo")
+ reply)
+
+ ;; Test unconditional stripping
+ (setq-local message-subject-trailing-was-query t)
+ (should (string= no-was (message-strip-subject-trailing-was no-was)))
+ (should (string= stripped-was
+ (message-strip-subject-trailing-was with-was)))
+
+ ;; Test asking
+ (setq-local message-subject-trailing-was-query 'ask)
+ (fset 'message-talkative-question
+ (lambda (_ question show text)
+ (should (string= "Strip `(was: <old subject>)' in subject? "
+ question))
+ (should show)
+ (should (string-match
+ (concat
+ "Strip `(was: <old subject>)' in subject "
+ "and use the new one instead\\?\n\n"
+ "Current subject is: \"\\(.*\\)\"\n\n"
+ "New subject would be: \"\\(.*\\)\"\n\n"
+ "See the variable "
+ "`message-subject-trailing-was-query' "
+ "to get rid of this query.")
+ text))
+ (should (string= (match-string 1 text) with-was))
+ (should (string= (match-string 2 text) stripped-was))
+ reply))
+ (message-strip-subject-trailing-was with-was)
+ (should (string= with-was
+ (message-strip-subject-trailing-was with-was)))
+ (setq reply t)
+ (should (string= stripped-was
+ (message-strip-subject-trailing-was with-was)))))))
+
+
(provide 'message-mode-tests)
;;; message-mode-tests.el ends here
--- /dev/null
+;;; htmlfontify-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'htmlfontify)
+
+(ert-deftest htmlfontify-autoload ()
+ "Tests to see whether reftex-auc has been autoloaded"
+ (should
+ (fboundp 'htmlfontify-load-rgb-file))
+ (should
+ (autoloadp
+ (symbol-function
+ 'htmlfontify-load-rgb-file))))
+
+(provide 'htmlfontify-tests)
+;; htmlfontify-tests.el ends here
--- /dev/null
+;;; ibuffer-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'ibuffer)
+
+(ert-deftest ibuffer-autoload ()
+ "Tests to see whether reftex-auc has been autoloaded"
+ (should
+ (fboundp 'ibuffer-mark-unsaved-buffers))
+ (should
+ (autoloadp
+ (symbol-function
+ 'ibuffer-mark-unsaved-buffers))))
+
+(provide 'ibuffer-tests)
+;; ibuffer-tests.el ends here
--- /dev/null
+;;; rmail-tests.el --- Test suite. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(require 'ert)
+(require 'rmail)
+
+
+(ert-deftest rmail-autoload ()
+ "Tests to see whether reftex-auc has been autoloaded"
+ (should
+ (fboundp 'rmail-edit-current-message))
+ (should
+ (autoloadp
+ (symbol-function
+ 'rmail-edit-current-message))))
+
+(provide 'rmail-tests)
+;; rmail-tests.el ends here
--- /dev/null
+;;; network-stream-tests.el --- tests for network processes -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Ingebrigtsen <larsi@gnus.org>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+
+;;; Code:
+
+(require 'gnutls)
+
+(ert-deftest make-local-unix-server ()
+ (skip-unless (featurep 'make-network-process '(:family local)))
+ (let* ((file (make-temp-name "/tmp/server-test"))
+ (server
+ (make-network-process
+ :name "server"
+ :server t
+ :buffer (get-buffer-create "*server*")
+ :noquery t
+ :family 'local
+ :service file)))
+ (should (equal (process-contact server :local) file))
+ (delete-file (process-contact server :local))))
+
+(ert-deftest make-ipv4-tcp-server-with-unspecified-port ()
+ (let ((server
+ (make-network-process
+ :name "server"
+ :server t
+ :noquery t
+ :family 'ipv4
+ :service t
+ :host 'local)))
+ (should (and (arrayp (process-contact server :local))
+ (numberp (aref (process-contact server :local) 4))
+ (> (aref (process-contact server :local) 4) 0)))
+ (delete-process server)))
+
+(ert-deftest make-ipv4-tcp-server-with-specified-port ()
+ (let ((server
+ (make-network-process
+ :name "server"
+ :server t
+ :noquery t
+ :family 'ipv4
+ :service 57869
+ :host 'local)))
+ (should (and (arrayp (process-contact server :local))
+ (= (aref (process-contact server :local) 4) 57869)))
+ (delete-process server)))
+
+(defun make-server (host)
+ (make-network-process
+ :name "server"
+ :server t
+ :noquery t
+ :family 'ipv4
+ :coding 'raw-text-unix
+ :buffer (get-buffer-create "*server*")
+ :service t
+ :sentinel 'server-sentinel
+ :filter 'server-process-filter
+ :host host))
+
+(defun server-sentinel (_proc _msg)
+ )
+
+(defun server-process-filter (proc string)
+ (message "Received %s" string)
+ (let ((prev (process-get proc 'previous-string)))
+ (when prev
+ (setq string (concat prev string))
+ (process-put proc 'previous-string nil)))
+ (if (and (not (string-match "\n" string))
+ (> (length string) 0))
+ (process-put proc 'previous-string string))
+ (let ((command (split-string string)))
+ (cond
+ ((equal (car command) "echo")
+ (process-send-string proc (concat (cadr command) "\n")))
+ (t
+ ))))
+
+(ert-deftest echo-server-with-dns ()
+ (let* ((server (make-server (system-name)))
+ (port (aref (process-contact server :local) 4))
+ (proc (make-network-process :name "foo"
+ :buffer (generate-new-buffer "*foo*")
+ :host (system-name)
+ :service port)))
+ (with-current-buffer (process-buffer proc)
+ (process-send-string proc "echo foo")
+ (sleep-for 0.1)
+ (should (equal (buffer-string) "foo\n")))
+ (delete-process server)))
+
+(ert-deftest echo-server-with-localhost ()
+ (let* ((server (make-server 'local))
+ (port (aref (process-contact server :local) 4))
+ (proc (make-network-process :name "foo"
+ :buffer (generate-new-buffer "*foo*")
+ :host "localhost"
+ :service port)))
+ (with-current-buffer (process-buffer proc)
+ (process-send-string proc "echo foo")
+ (sleep-for 0.1)
+ (should (equal (buffer-string) "foo\n")))
+ (delete-process server)))
+
+(ert-deftest echo-server-with-ip ()
+ (let* ((server (make-server 'local))
+ (port (aref (process-contact server :local) 4))
+ (proc (make-network-process :name "foo"
+ :buffer (generate-new-buffer "*foo*")
+ :host "127.0.0.1"
+ :service port)))
+ (with-current-buffer (process-buffer proc)
+ (process-send-string proc "echo foo")
+ (sleep-for 0.1)
+ (should (equal (buffer-string) "foo\n")))
+ (delete-process server)))
+
+(ert-deftest echo-server-nowait ()
+ (let* ((server (make-server 'local))
+ (port (aref (process-contact server :local) 4))
+ (proc (make-network-process :name "foo"
+ :buffer (generate-new-buffer "*foo*")
+ :host "localhost"
+ :nowait t
+ :service port)))
+ (should (eq (process-status proc) 'connect))
+ (while (eq (process-status proc) 'connect)
+ (sit-for 0.1))
+ (with-current-buffer (process-buffer proc)
+ (process-send-string proc "echo foo")
+ (sleep-for 0.1)
+ (should (equal (buffer-string) "foo\n")))
+ (delete-process server)))
+
+(defun make-tls-server (port)
+ (start-process "gnutls" (generate-new-buffer "*tls*")
+ "gnutls-serv" "--http"
+ "--x509keyfile" "data/net/key.pem"
+ "--x509certfile" "data/net/cert.pem"
+ "--port" (format "%s" port)))
+
+(ert-deftest connect-to-tls-ipv4-wait ()
+ (skip-unless (executable-find "gnutls-serv"))
+ (skip-unless (gnutls-available-p))
+ (let ((server (make-tls-server 44332))
+ (times 0)
+ proc status)
+ (sleep-for 1)
+ (with-current-buffer (process-buffer server)
+ (message "gnutls-serv: %s" (buffer-string)))
+
+ ;; It takes a while for gnutls-serv to start.
+ (while (and (null (ignore-errors
+ (setq proc (make-network-process
+ :name "bar"
+ :buffer (generate-new-buffer "*foo*")
+ :host "localhost"
+ :service 44332))))
+ (< (setq times (1+ times)) 10))
+ (sit-for 0.1))
+ (should proc)
+ (gnutls-negotiate :process proc
+ :type 'gnutls-x509pki
+ :hostname "localhost")
+ (delete-process server)
+ (setq status (gnutls-peer-status proc))
+ (should (consp status))
+ (delete-process proc)
+ ;; This sleep-for is needed for the native MS-Windows build. If
+ ;; it is removed, the next test mysteriously fails because the
+ ;; initial part of the echo is not received.
+ (sleep-for 0.1)
+ (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
+ (should (stringp issuer))
+ (setq issuer (split-string issuer ","))
+ (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
+
+(ert-deftest connect-to-tls-ipv4-nowait ()
+ (skip-unless (executable-find "gnutls-serv"))
+ (skip-unless (gnutls-available-p))
+ (let ((server (make-tls-server 44331))
+ (times 0)
+ proc status)
+ (sleep-for 1)
+ (with-current-buffer (process-buffer server)
+ (message "gnutls-serv: %s" (buffer-string)))
+
+ ;; It takes a while for gnutls-serv to start.
+ (while (and (null (ignore-errors
+ (setq proc (make-network-process
+ :name "bar"
+ :buffer (generate-new-buffer "*foo*")
+ :nowait t
+ :tls-parameters
+ (cons 'gnutls-x509pki
+ (gnutls-boot-parameters
+ :hostname "localhost"))
+ :host "localhost"
+ :service 44331))))
+ (< (setq times (1+ times)) 10))
+ (sit-for 0.1))
+ (should proc)
+ (while (eq (process-status proc) 'connect)
+ (sit-for 0.1))
+ (delete-process server)
+ (setq status (gnutls-peer-status proc))
+ (should (consp status))
+ (delete-process proc)
+ (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
+ (should (stringp issuer))
+ (setq issuer (split-string issuer ","))
+ (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
+
+(ert-deftest connect-to-tls-ipv6-nowait ()
+ (skip-unless (executable-find "gnutls-serv"))
+ (skip-unless (gnutls-available-p))
+ (skip-unless (not (eq system-type 'windows-nt)))
+ (skip-unless (featurep 'make-network-process '(:family ipv6)))
+ (let ((server (make-tls-server 44333))
+ (times 0)
+ proc status)
+ (sleep-for 1)
+ (with-current-buffer (process-buffer server)
+ (message "gnutls-serv: %s" (buffer-string)))
+
+ ;; It takes a while for gnutls-serv to start.
+ (while (and (null (ignore-errors
+ (setq proc (make-network-process
+ :name "bar"
+ :buffer (generate-new-buffer "*foo*")
+ :family 'ipv6
+ :nowait t
+ :tls-parameters
+ (cons 'gnutls-x509pki
+ (gnutls-boot-parameters
+ :hostname "localhost"))
+ :host "::1"
+ :service 44333))))
+ (< (setq times (1+ times)) 10))
+ (sit-for 0.1))
+ (should proc)
+ (while (eq (process-status proc) 'connect)
+ (sit-for 0.1))
+ (delete-process server)
+ (setq status (gnutls-peer-status proc))
+ (should (consp status))
+ (delete-process proc)
+ (let ((issuer (plist-get (plist-get status :certificate) :issuer)))
+ (should (stringp issuer))
+ (setq issuer (split-string issuer ","))
+ (should (equal (nth 3 issuer) "O=Emacs Test Servicess LLC")))))
+
+;;; network-stream-tests.el ends here
--- /dev/null
+;;; network-stream-tests.el --- tests for network processes -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Lars Ingebrigtsen <larsi@gnus.org>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'shr)
+
+(defun shr-test (name)
+ (with-temp-buffer
+ (insert-file-contents (format "data/shr/%s.html" name))
+ (let ((dom (libxml-parse-html-region (point-min) (point-max)))
+ (shr-width 80)
+ (shr-use-fonts nil))
+ (erase-buffer)
+ (shr-insert-document dom)
+ (cons (buffer-substring-no-properties (point-min) (point-max))
+ (with-temp-buffer
+ (insert-file-contents (format "data/shr/%s.txt" name))
+ (while (re-search-forward "%\\([0-9A-F][0-9A-F]\\)" nil t)
+ (replace-match (string (string-to-number (match-string 1) 16))
+ t t))
+ (buffer-string))))))
+
+(ert-deftest rendering ()
+ (skip-unless (fboundp 'libxml-parse-html-region))
+ (dolist (file (directory-files "data/shr" nil "\\.html\\'"))
+ (let* ((name (replace-regexp-in-string "\\.html\\'" "" file))
+ (result (shr-test name)))
+ (unless (equal (car result) (cdr result))
+ (should (not (list name (car result) (cdr result))))))))
+
+(require 'shr)
+
+;;; shr-stream-tests.el ends here
(should
(string-equal (file-name-nondirectory "/method:host:/path/to/file/") ""))
(should-not
- (unhandled-file-name-directory "/method:host:/path/to/file")))
+ (unhandled-file-name-directory "/method:host:/path/to/file"))
+
+ ;; Bug#10085.
+ (dolist (n-e '(nil t))
+ (let ((non-essential n-e))
+ (dolist (file
+ `(,(file-remote-p tramp-test-temporary-file-directory 'method)
+ ,(file-remote-p tramp-test-temporary-file-directory 'host)))
+ (unless (zerop (length file))
+ (setq file (format "/%s:" file))
+ (should (string-equal (directory-file-name file) file))
+ (should
+ (string-equal (file-name-as-directory file) (concat file "./")))
+ (should (string-equal (file-name-directory file) file))
+ (should (string-equal (file-name-nondirectory file) "")))))))
(ert-deftest tramp-test07-file-exists-p ()
"Check `file-exist-p', `write-region' and `delete-file'."
1 nil 302 "\\lib\\python\\Products\\PythonScripts\\PythonScript.py")
("File \"/tmp/foo.py\", line 10"
1 nil 10 "/tmp/foo.py")
+ ;; cmake cmake-info
+ ("CMake Error at CMakeLists.txt:23 (hurz):"
+ 1 nil 23 "CMakeLists.txt")
+ ("CMake Warning at cmake/modules/UseUG.cmake:73 (find_package):"
+ 1 nil 73 "cmake/modules/UseUG.cmake")
+ (" cmake/modules/DuneGridMacros.cmake:19 (include)"
+ 1 nil 19 "cmake/modules/DuneGridMacros.cmake")
;; comma
("\"foo.f\", line 3: Error: syntax error near end of statement"
1 nil 3 "foo.f")
(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")
))
(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
(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
(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 ())))
(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"))
)
(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")
))
(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
(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
(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:")
))
(elisp--xref-find-definitions (eval '(provide 'stephe-leake-feature)))
nil)
+(ert-deftest elisp--preceding-sexp--char-name ()
+ (with-temp-buffer
+ (emacs-lisp-mode)
+ (insert "?\\N{HEAVY CHECK MARK}")
+ (should (equal (elisp--preceding-sexp) ?\N{HEAVY CHECK MARK}))))
+
(provide 'elisp-mode-tests)
;;; elisp-mode-tests.el ends here
(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
-;;; keyswap.el --- swap BS and DEL keys
+;;; ps-print-tests.el --- Test suite for ps-print.el -*- lexical-binding: t; -*-
-;; Copyright (C) 1992, 2001-2016 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
-;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
-;; Keywords: terminals
-;; Obsolete-since: 22.1
+;; Author: Phillip Lord <phillip.lord@russet.org.uk>
;; This file is part of GNU Emacs.
;;; Commentary:
-;; This package is meant to be called by other terminal packages.
-
;;; Code:
-
-(let ((the-table (make-string 128 0)))
- (let ((i 0))
- (while (< i 128)
- (aset the-table i i)
- (setq i (1+ i))))
- ;; Swap ^H and DEL
- (aset the-table ?\177 ?\^h)
- (aset the-table ?\^h ?\177)
- (setq keyboard-translate-table the-table))
-
-;;; keyswap.el ends here
+(require 'ps-print)
+(require 'ert)
+
+;;; Autoload tests
+(ert-deftest ps-mule-autoload ()
+ "Tests to see whether ps-mule has been autoloaded"
+ (should
+ (fboundp 'ps-mule-initialize))
+ (should
+ (autoloadp
+ (symbol-function
+ 'ps-mule-initialize))))
--- /dev/null
+;;; css-mode-tests.el --- Test suite for CSS mode -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Simen Heggestøyl <simenheg@gmail.com>
+;; Keywords: internal
+
+;; This file is part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'css-mode)
+(require 'ert)
+(require 'seq)
+
+(ert-deftest css-test-property-values ()
+ ;; The `float' property has a flat value list.
+ (should
+ (equal (sort (css--property-values "float") #'string-lessp)
+ '("left" "none" "right")))
+
+ ;; The `list-style' property refers to several other properties.
+ (should
+ (equal (sort (css--property-values "list-style") #'string-lessp)
+ (sort (seq-uniq
+ (append (css--property-values "list-style-type")
+ (css--property-values "list-style-position")
+ (css--property-values "list-style-image")))
+ #'string-lessp)))
+
+ ;; The `position' property is tricky because it's also the name of a
+ ;; value class.
+ (should
+ (equal (sort (css--property-values "position") #'string-lessp)
+ '("absolute" "fixed" "relative" "static")))
+
+ ;; The `background-position' property should refer to the `position'
+ ;; value class, not the property of the same name.
+ (should
+ (equal (css--property-values "background-position")
+ (css--value-class-lookup 'position)))
+
+ ;; Check that the `color' property doesn't cause infinite recursion
+ ;; because it refers to the value class of the same name.
+ (should (= (length (css--property-values "color")) 18)))
+
+(ert-deftest css-test-property-value-cache ()
+ "Test that `css--property-value-cache' is in use."
+ (should-not (gethash "word-wrap" css--property-value-cache))
+ (let ((word-wrap-values (css--property-values "word-wrap")))
+ (should (equal (gethash "word-wrap" css--property-value-cache)
+ word-wrap-values))))
+
+(ert-deftest css-test-property-values-no-duplicates ()
+ "Test that `css--property-values' returns no duplicates."
+ ;; The `flex' property is prone to duplicate values; if they aren't
+ ;; removed, it'll contain at least two instances of `auto'.
+ (should
+ (equal (sort (css--property-values "flex") #'string-lessp)
+ '("auto" "calc()" "content" "none"))))
+
+(ert-deftest css-test-value-class-lookup ()
+ (should
+ (equal (sort (css--value-class-lookup 'position) #'string-lessp)
+ '("bottom" "calc()" "center" "left" "right" "top"))))
+
+(provide 'css-mode-tests)
+;;; css-mode-tests.el ends here
(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.
--- /dev/null
+;;; url-auth-tests.el --- Test suite for url-auth.
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; Author: Jarno Malmari <jarno@malmari.fi>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Test HTTP authentication methods.
+
+;;; Code:
+
+(require 'ert)
+(require 'url-auth)
+
+(defvar url-auth-test-challenges nil
+ "List of challenges for testing.
+Each challenge is a plist. Values are as presented by the
+server's WWW-Authenticate header field.")
+
+;; Set explicitly for easier modification for re-runs.
+(setq url-auth-test-challenges
+ (list
+ (list :qop "auth"
+ :nonce "uBr3+qkQBybTr/dKWkmpUqVO7SaEwWYzyTKO7g==$"
+ :uri "/random/path"
+ :method "GET"
+ :realm "Some test realm"
+ :cnonce "YWU4NDcxYWMxMDAxMjlkMjAwMDE4MjI5MDAwMGY4NGQ="
+ :nc "00000001"
+ :username "jytky"
+ :password "xi5Ac2HEfKt1lKKO05DCSqsK0u7hqqtsT"
+ :expected-ha1 "af521db3a83abd91262fead04fa31892"
+ :expected-ha2 "e490a6a147c79404b365d1f6059ddda5"
+ :expected-response "ecb6396e93b9e09e31f19264cfd8f854")
+ (list :nonce "a1be8a3065e00c5bf190ad499299aea5"
+ :opaque "d7c2a27230fc8c74bb6e06be8c9cd189"
+ :realm "The Test Realm"
+ :username "user"
+ :password "passwd"
+ :uri "/digest-auth/auth/user/passwd"
+ :method "GET"
+ :expected-ha1 "19c41161a8720edaeb7922ef8531137d"
+ :expected-ha2 "b44272ea65ee4af7fb26c5dba58f6863"
+ :expected-response "46c47a6d8e1fa95a3efcf49724af3fe7")
+ (list :nonce "servernonce"
+ :username "user"
+ :password "passwd"
+ :realm "The Test Realm 1"
+ :uri "/digest-auth/auth/user/passwd"
+ :method "GET"
+ :expected-ha1 "00f848f943c9a05dd06c932a7334f120"
+ :expected-ha2 "b44272ea65ee4af7fb26c5dba58f6863"
+ :expected-response "b8a48cdc9aa9e514509a5a5c53d4e8cf")
+ (list :nonce "servernonce"
+ :username "user"
+ :password "passwd"
+ :realm "The Test Realm 2"
+ :uri "/digest-auth/auth/user/passwd"
+ :method "GET"
+ :expected-ha1 "74d6abd3651d6b8260733d8a4c37ec1a"
+ :expected-ha2 "b44272ea65ee4af7fb26c5dba58f6863"
+ :expected-response "0d84884d967e04440efc77e9e2b5b561")))
+
+(ert-deftest url-auth-test-digest-create-key ()
+ "Check user credentials in their hashed form."
+ (dolist (challenge url-auth-test-challenges)
+ (let ((key (url-digest-auth-create-key (plist-get challenge :username)
+ (plist-get challenge :password)
+ (plist-get challenge :realm)
+ (plist-get challenge :method)
+ (plist-get challenge :uri))))
+ (should (= (length key) 2))
+ (should (string= (nth 0 key) (plist-get challenge :expected-ha1)))
+ (should (string= (nth 1 key) (plist-get challenge :expected-ha2)))
+ )))
+
+(ert-deftest url-auth-test-digest-auth-retrieve-cache ()
+ "Check how the entry point retrieves cached authentication.
+Essential is how realms and paths are matched."
+
+ (let* ((url-digest-auth-storage
+ '(("example.org:80"
+ ("/path/auth1" "auth1user" "key")
+ ("/path" "pathuser" "key")
+ ("/" "rootuser" "key")
+ ("realm1" "realm1user" "key")
+ ("realm2" "realm2user" "key")
+ ("/path/auth2" "auth2user" "key"))
+ ("example.org:443"
+ ("realm" "secure_user" "key"))
+ ("rootless.org:80" ; no "/" entry for this on purpose
+ ("/path" "pathuser" "key")
+ ("realm" "realmuser" "key"))))
+ (attrs (list (cons "nonce" "servernonce")))
+ auth)
+
+ (dolist (row (list
+ ;; If :expected-user is `nil' it indicates
+ ;; authentication information shouldn't be found.
+
+ ;; non-existent server
+ (list :url "http://other.com/path"
+ :realm nil :expected-user nil)
+
+ ;; unmatched port
+ (list :url "http://example.org:444/path"
+ :realm nil :expected-user nil)
+
+ ;; root, no realm
+ (list :url "http://example.org/"
+ :realm nil :expected-user "rootuser")
+
+ ;; root, no realm, explicit port
+ (list :url "http://example.org:80/"
+ :realm nil :expected-user "rootuser")
+
+ (list :url "http://example.org/unknown"
+ :realm nil :expected-user "rootuser")
+
+ ;; realm specified, overrides any path
+ (list :url "http://example.org/"
+ :realm "realm1" :expected-user "realm1user")
+
+ ;; realm specified, overrides any path
+ (list :url "http://example.org/"
+ :realm "realm2" :expected-user "realm2user")
+
+ ;; authentication determined by path
+ (list :url "http://example.org/path/auth1/query"
+ :realm nil :expected-user "auth1user")
+
+ ;; /path shadows /path/auth2, hence pathuser is expected
+ (list :url "http://example.org/path/auth2/query"
+ :realm nil :expected-user "pathuser")
+
+ (list :url "https://example.org/path"
+ :realm nil :expected-user "secure_user")
+
+ ;; not really secure user but using the same port
+ (list :url "http://example.org:443/path"
+ :realm nil :expected-user "secure_user")
+
+ ;; preferring realm user over path, even though no
+ ;; realm specified (not sure why)
+ (list :url "http://rootless.org/"
+ :realm nil :expected-user "realmuser")
+ ;; second variant for the same case
+ (list :url "http://rootless.org/unknown/path"
+ :realm nil :expected-user "realmuser")
+
+ ;; path match
+ (list :url "http://rootless.org/path/query?q=a"
+ :realm nil :expected-user "pathuser")
+
+ ;; path match, realm match, prefer realm
+ (list :url "http://rootless.org/path/query?q=a"
+ :realm "realm" :expected-user "realmuser")
+ ))
+ (setq auth (url-digest-auth (plist-get row :url)
+ nil nil
+ (plist-get row :realm) attrs))
+ (if (plist-get row :expected-user)
+ (progn (should auth)
+ (should (string-match ".*username=\"\\(.*?\\)\".*" auth))
+ (should (string= (match-string 1 auth)
+ (plist-get row :expected-user))))
+ (should-not auth)))))
+
+(ert-deftest url-auth-test-digest-auth ()
+ "Check common authorization string contents.
+Challenges with qop are not checked for response since a unique
+cnonce is used for generating them which is not mocked by the
+test and cannot be passed by arguments to `url-digest-auth'."
+ (dolist (challenge url-auth-test-challenges)
+ (let* ((attrs (append
+ (list (cons "nonce" (plist-get challenge :nonce)))
+ (if (plist-get challenge :qop)
+ (list (cons "qop" (plist-get challenge :qop))))))
+ (url (concat "http://example.org" (plist-get challenge :uri)))
+ url-digest-auth-storage
+ auth)
+ ;; Add authentication info to cache so `url-digest-auth' can
+ ;; complete without prompting minibuffer input.
+ (setq url-digest-auth-storage
+ (list
+ (list "example.org:80"
+ (cons (or (plist-get challenge :realm) "/")
+ (cons (plist-get challenge :username)
+ (url-digest-auth-create-key
+ (plist-get challenge :username)
+ (plist-get challenge :password)
+ (plist-get challenge :realm)
+ (plist-get challenge :method)
+ (plist-get challenge :uri)))))))
+ (setq auth (url-digest-auth (url-generic-parse-url url) nil nil
+ (plist-get challenge :realm) attrs))
+ (should auth)
+ (should (string-prefix-p "Digest " auth))
+ (should (string-match ".*username=\"\\(.*?\\)\".*" auth))
+ (should (string= (match-string 1 auth)
+ (plist-get challenge :username)))
+ (should (string-match ".*realm=\"\\(.*?\\)\".*" auth))
+ (should (string= (match-string 1 auth)
+ (plist-get challenge :realm)))
+
+ (if (plist-member challenge :qop)
+ (progn
+ ;; We don't know these, just check that they exists.
+ (should (string-match-p ".*response=\".*?\".*" auth))
+ ;; url-digest-auth doesn't return these AFAICS.
+;;; (should (string-match-p ".*nc=\".*?\".*" auth))
+;;; (should (string-match-p ".*cnonce=\".*?\".*" auth))
+ )
+ (should (string-match ".*response=\"\\(.*?\\)\".*" auth))
+ (should (string= (match-string 1 auth)
+ (plist-get challenge :expected-response))))
+ )))
+
+(ert-deftest url-auth-test-digest-auth-opaque ()
+ "Check that `opaque' value is added to result when presented by
+the server."
+ (let* ((url-digest-auth-storage
+ '(("example.org:80" ("/" "user" "key"))))
+ (attrs (list (cons "nonce" "anynonce")))
+ auth)
+ ;; Get authentication info from cache without `opaque'.
+ (setq auth (url-digest-auth "http://example.org/path" nil nil nil attrs))
+ (should auth)
+ (should-not (string-match-p "opaque=" auth))
+
+ ;; Add `opaque' to attributes.
+ (push (cons "opaque" "opaque-value") attrs)
+ (setq auth (url-digest-auth "http://example.org/path" nil nil nil attrs))
+ (should auth)
+ (should (string-match ".*opaque=\"\\(.*?\\)\".*" auth))
+ (should (string= (match-string 1 auth) "opaque-value"))))
+
+(provide 'url-auth-tests)
+;;; url-auth-tests.el ends here
;;; Code:
(require 'ert)
+(require 'ert-x)
(require 'vc-bzr)
(require 'vc-dir)
(while (vc-dir-busy)
(sit-for 0.1))
(vc-dir-mark-all-files t)
- (let ((f (symbol-function 'y-or-n-p)))
- (unwind-protect
- (progn
- (fset 'y-or-n-p (lambda (prompt) t))
- (vc-next-action nil))
- (fset 'y-or-n-p f)))
+ (ert-with-function-mocked y-or-n-p (lambda (_) t)
+ (vc-next-action nil))
(should (get-buffer "*vc-log*")))
(delete-directory homedir t))))
(require 'ert)
(require 'vc)
+(declare-function w32-application-type "w32proc")
+
;; The working horses.
(defvar vc-test--cleanup-hook nil
(defun vc-test--revision-granularity-function (backend)
"Run the `vc-revision-granularity' backend function."
- (funcall (intern (downcase (format "vc-%s-revision-granularity" backend)))))
+ (vc-call-backend backend 'revision-granularity))
(defun vc-test--create-repo-function (backend)
"Run the `vc-create-repo' backend function.
;; Save exit.
(ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
-;; Why isn't there `vc-unregister'?
+;; FIXME: Why isn't there `vc-unregister'?
(defun vc-test--unregister-function (backend file)
"Run the `vc-unregister' backend function.
-For backends which dont support it, `vc-not-supported' is signalled."
-
- (let ((symbol (intern (downcase (format "vc-%s-unregister" backend)))))
- (if (functionp symbol)
- (funcall symbol file)
- ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
- (signal 'vc-not-supported (list 'unregister backend)))))
+For backends which don't support it, `vc-not-supported' is signalled."
+ ;; CVS, SVN, SCCS, SRC and Mtn are not supported, and will signal
+ ;; `vc-not-supported'.
+ (prog1
+ (vc-call-backend backend 'unregister file)
+ (vc-file-clearprops file)))
+
+(defmacro vc-test--run-maybe-unsupported-function (func &rest args)
+ "Run FUNC with ARGS as arguments.
+Catch the `vc-not-supported' error."
+ `(let (err)
+ (condition-case err
+ (funcall ,func ,@args)
+ (vc-not-supported 'vc-not-supported)
+ (t (signal (car err) (cdr err))))))
(defun vc-test--register (backend)
- "Register and unregister a file."
+ "Register and unregister a file.
+This checks also `vc-backend' and `vc-responsible-backend'."
(let ((vc-handled-backends `(,backend))
(default-directory
;; Create empty repository.
(make-directory default-directory)
(vc-test--create-repo-function backend)
+ ;; For file oriented backends CVS, RCS and SVN the backend is
+ ;; returned, and the directory is registered already.
+ (should (if (vc-backend default-directory)
+ (vc-registered default-directory)
+ (not (vc-registered default-directory))))
+ (should (eq (vc-responsible-backend default-directory) backend))
(let ((tmp-name1 (expand-file-name "foo" default-directory))
(tmp-name2 "bla"))
;; Register files. Check for it.
(write-region "foo" nil tmp-name1 nil 'nomessage)
(should (file-exists-p tmp-name1))
+ (should-not (vc-backend tmp-name1))
+ (should (eq (vc-responsible-backend tmp-name1) backend))
(should-not (vc-registered tmp-name1))
+
(write-region "bla" nil tmp-name2 nil 'nomessage)
(should (file-exists-p tmp-name2))
+ (should-not (vc-backend tmp-name2))
+ (should (eq (vc-responsible-backend tmp-name2) backend))
(should-not (vc-registered tmp-name2))
+
(vc-register (list backend (list tmp-name1 tmp-name2)))
(should (file-exists-p tmp-name1))
+ (should (eq (vc-backend tmp-name1) backend))
+ (should (eq (vc-responsible-backend tmp-name1) backend))
(should (vc-registered tmp-name1))
+
(should (file-exists-p tmp-name2))
+ (should (eq (vc-backend tmp-name2) backend))
+ (should (eq (vc-responsible-backend tmp-name2) backend))
(should (vc-registered tmp-name2))
+ ;; `vc-backend' accepts also a list of files,
+ ;; `vc-responsible-backend' doesn't.
+ (should (vc-backend (list tmp-name1 tmp-name2)))
+
;; Unregister the files.
- (condition-case err
- (progn
- (vc-test--unregister-function backend tmp-name1)
- (should-not (vc-registered tmp-name1))
- (vc-test--unregister-function backend tmp-name2)
- (should-not (vc-registered tmp-name2)))
- ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
- (vc-not-supported t))
- ;; The files shall still exist.
+ (unless (eq (vc-test--run-maybe-unsupported-function
+ 'vc-test--unregister-function backend tmp-name1)
+ 'vc-not-supported)
+ (should-not (vc-backend tmp-name1))
+ (should-not (vc-registered tmp-name1)))
+ (unless (eq (vc-test--run-maybe-unsupported-function
+ 'vc-test--unregister-function backend tmp-name2)
+ 'vc-not-supported)
+ (should-not (vc-backend tmp-name2))
+ (should-not (vc-registered tmp-name2)))
+
+ ;; The files shall still exist.
(should (file-exists-p tmp-name1))
(should (file-exists-p tmp-name2))))
'vc-test--cleanup-hook
`(lambda () (delete-directory ,default-directory 'recursive)))
- ;; Create empty repository. Check repository state.
+ ;; Create empty repository.
(make-directory default-directory)
(vc-test--create-repo-function backend)
- ;; nil: Hg Mtn RCS
- ;; added: Git
- ;; unregistered: CVS SCCS SRC
- ;; up-to-date: Bzr SVN
- (message "vc-state1 %s" (vc-state default-directory))
- ;;(should (eq (vc-state default-directory)
- ;;(vc-state default-directory backend)))
- (should (memq (vc-state default-directory)
- '(nil added unregistered up-to-date)))
-
(let ((tmp-name (expand-file-name "foo" default-directory)))
- ;; Check state of an empty file.
+ ;; Check state of a nonexistent file.
- ;; nil: Hg Mtn SRC SVN
- ;; added: Git
- ;; unregistered: RCS SCCS
- ;; up-to-date: Bzr CVS
(message "vc-state2 %s" (vc-state tmp-name))
- ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name)
- '(nil added unregistered up-to-date)))
+ (should (null (vc-state tmp-name)))
;; Write a new file. Check state.
(write-region "foo" nil tmp-name nil 'nomessage)
- ;; nil: Mtn
- ;; added: Git
- ;; unregistered: Hg RCS SCCS SRC SVN
- ;; up-to-date: Bzr CVS
(message "vc-state3 %s" (vc-state tmp-name))
- ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name)
- '(nil added unregistered up-to-date)))
+ (should (null (vc-state tmp-name)))
;; Register a file. Check state.
(vc-register
(list backend (list (file-name-nondirectory tmp-name))))
- ;; added: Git Mtn
- ;; unregistered: Hg RCS SCCS SRC SVN
- ;; up-to-date: Bzr CVS
+ ;; FIXME: nil is definitely wrong.
+ ;; nil: SRC
+ ;; added: Bzr CVS Git Hg Mtn SVN
+ ;; up-to-date: RCS SCCS
(message "vc-state4 %s" (vc-state tmp-name))
- ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name)
- '(nil added unregistered up-to-date)))
+ (should (memq (vc-state tmp-name) '(nil added up-to-date)))
;; Unregister the file. Check state.
- (condition-case nil
- (progn
- (vc-test--unregister-function backend tmp-name)
-
- ;; added: Git
- ;; unregistered: Hg RCS
- ;; unsupported: CVS Mtn SCCS SRC SVN
- ;; up-to-date: Bzr
- (message "vc-state5 %s" (vc-state tmp-name))
- ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name)
- '(nil added unregistered up-to-date))))
- (vc-not-supported (message "vc-state5 unsupported")))))
+ (if (eq (vc-test--run-maybe-unsupported-function
+ 'vc-test--unregister-function backend tmp-name)
+ 'vc-not-supported)
+ (message "vc-state5 unsupported")
+ ;; nil: Bzr Git Hg RCS
+ ;; unsupported: CVS Mtn SCCS SRC SVN
+ (message "vc-state5 %s" (vc-state tmp-name))
+ (should (null (vc-state tmp-name))))))
;; Save exit.
(ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
(make-directory default-directory)
(vc-test--create-repo-function backend)
- ;; nil: CVS Git Mtn RCS SCCS
- ;; "0": Bzr Hg SRC SVN
+ ;; FIXME: Is the value for SVN correct?
+ ;; nil: Bzr CVS Git Hg Mtn RCS SCCS SRC
+ ;; "0": SVN
(message
"vc-working-revision1 %s" (vc-working-revision default-directory))
- ;;(should (eq (vc-working-revision default-directory)
- ;;(vc-working-revision default-directory backend)))
- (should (member (vc-working-revision default-directory) '(nil "0")))
+ (should (member (vc-working-revision default-directory) '(nil "0")))
(let ((tmp-name (expand-file-name "foo" default-directory)))
;; Check initial working revision, should be nil until
;; it's registered.
- ;; nil: CVS Git Mtn RCS SCCS SVN
- ;; "0": Bzr Hg SRC
(message "vc-working-revision2 %s" (vc-working-revision tmp-name))
- ;;(should (eq (vc-working-revision tmp-name)
- ;;(vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0")))
+ (should-not (vc-working-revision tmp-name))
;; Write a new file. Check working revision.
(write-region "foo" nil tmp-name nil 'nomessage)
- ;; nil: CVS Git Mtn RCS SCCS SVN
- ;; "0": Bzr Hg SRC
(message "vc-working-revision3 %s" (vc-working-revision tmp-name))
- ;;(should (eq (vc-working-revision tmp-name)
- ;;(vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0")))
+ (should-not (vc-working-revision tmp-name))
;; Register a file. Check working revision.
(vc-register
(list backend (list (file-name-nondirectory tmp-name))))
- ;; nil: Mtn Git RCS SCCS
+ ;; XXX: nil is fine, at least in Git's case, because
+ ;; `vc-register' only makes the file `added' in this case.
+ ;; nil: Git Mtn
;; "0": Bzr CVS Hg SRC SVN
+ ;; "1.1": RCS SCCS
(message "vc-working-revision4 %s" (vc-working-revision tmp-name))
- ;;(should (eq (vc-working-revision tmp-name)
- ;;(vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0")))
+ (should (member (vc-working-revision tmp-name) '(nil "0" "1.1")))
+
+ ;; TODO: Call `vc-checkin', and check the resulting
+ ;; working revision. None of the return values should be
+ ;; nil then.
;; Unregister the file. Check working revision.
- (condition-case nil
- (progn
- (vc-test--unregister-function backend tmp-name)
-
- ;; nil: Git RCS
- ;; "0": Bzr Hg
- ;; unsupported: CVS Mtn SCCS SRC SVN
- (message
- "vc-working-revision5 %s" (vc-working-revision tmp-name))
- ;;(should (eq (vc-working-revision tmp-name)
- ;;(vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0"))))
- (vc-not-supported (message "vc-working-revision5 unsupported")))))
+ (if (eq (vc-test--run-maybe-unsupported-function
+ 'vc-test--unregister-function backend tmp-name)
+ 'vc-not-supported)
+ (message "vc-working-revision5 unsupported")
+ ;; nil: Bzr Git Hg RCS
+ ;; unsupported: CVS Mtn SCCS SRC SVN
+ (message "vc-working-revision5 %s" (vc-working-revision tmp-name))
+ (should-not (vc-working-revision tmp-name)))))
;; Save exit.
(ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
(vc-test--create-repo-function backend)
;; Surprisingly, none of the backends returns 'announce.
- ;; nil: RCS
;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
+ ;; locking: RCS SCCS
(message
"vc-checkout-model1 %s"
(vc-checkout-model backend default-directory))
'(announce implicit locking)))
(let ((tmp-name (expand-file-name "foo" default-directory)))
- ;; Check checkout model of an empty file.
+ ;; Check checkout model of a nonexistent file.
- ;; nil: RCS
;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
+ ;; locking: RCS SCCS
(message
"vc-checkout-model2 %s" (vc-checkout-model backend tmp-name))
(should (memq (vc-checkout-model backend tmp-name)
;; Write a new file. Check checkout model.
(write-region "foo" nil tmp-name nil 'nomessage)
- ;; nil: RCS
;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
+ ;; locking: RCS SCCS
(message
"vc-checkout-model3 %s" (vc-checkout-model backend tmp-name))
(should (memq (vc-checkout-model backend tmp-name)
(vc-register
(list backend (list (file-name-nondirectory tmp-name))))
- ;; nil: RCS
;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
+ ;; locking: RCS SCCS
(message
"vc-checkout-model4 %s" (vc-checkout-model backend tmp-name))
(should (memq (vc-checkout-model backend tmp-name)
'(announce implicit locking)))
;; Unregister the file. Check checkout model.
- (condition-case nil
- (progn
- (vc-test--unregister-function backend tmp-name)
-
- ;; nil: RCS
- ;; implicit: Bzr Git Hg
- ;; unsupported: CVS Mtn SCCS SRC SVN
- (message
- "vc-checkout-model5 %s" (vc-checkout-model backend tmp-name))
- (should (memq (vc-checkout-model backend tmp-name)
- '(announce implicit locking))))
- (vc-not-supported (message "vc-checkout-model5 unsupported")))))
+ (if (eq (vc-test--run-maybe-unsupported-function
+ 'vc-test--unregister-function backend tmp-name)
+ 'vc-not-supported)
+ (message "vc-checkout-model5 unsupported")
+ ;; implicit: Bzr Git Hg
+ ;; locking: RCS
+ ;; unsupported: CVS Mtn SCCS SRC SVN
+ (message
+ "vc-checkout-model5 %s" (vc-checkout-model backend tmp-name))
+ (should (memq (vc-checkout-model backend tmp-name)
+ '(announce implicit locking))))))
;; Save exit.
(ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
,(intern (format "vc-test-%s04-checkout-model" backend-string)) ()
,(format "Check `vc-checkout-model' for the %s backend."
backend-string)
- ;; FIXME make this pass.
- :expected-result ,(if (equal backend 'RCS) :failed :passed)
(skip-unless
(ert-test-passed-p
(ert-test-most-recent-result
--- /dev/null
+;; -*- emacs-lisp -*-
+
+;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file generates dependencies between test files and the files
+;; that they test.
+
+;; It has an .emacs-lisp extension because it makes the Makefile easier!
+
+(require 'seq)
+
+(defun make-test-deps (src-dir)
+ (let ((src-dir (file-truename src-dir)))
+ (message
+ "%s"
+ (concat
+ (make-test-deps-lisp src-dir)
+ (make-test-deps-src src-dir)))))
+
+(defun make-test-deps-lisp (src-dir)
+ (mapconcat
+ (lambda (file-without-suffix)
+ (format "./%s-tests.log: %s/../%s.el\n"
+ file-without-suffix
+ src-dir
+ file-without-suffix))
+ (make-test-test-files src-dir "lisp") ""))
+
+(defun make-test-deps-src (src-dir)
+ (mapconcat
+ (lambda (file-without-suffix)
+ (format "./%s-tests.log: %s/../%s.c\n"
+ file-without-suffix
+ src-dir
+ file-without-suffix))
+ (make-test-test-files src-dir "src") ""))
+
+(defun make-test-test-files (src-dir sub-src-dir)
+ (make-test-munge-files
+ src-dir
+ (directory-files-recursively
+ (concat src-dir "/" sub-src-dir)
+ ".*-tests.el$")))
+
+(defun make-test-munge-files (src-dir files)
+ (make-test-sans-suffix
+ (make-test-de-stem
+ src-dir
+ (make-test-no-legacy
+ (make-test-no-test-dir
+ (make-test-no-resources
+ files))))))
+
+(defun make-test-sans-suffix (files)
+ (mapcar
+ (lambda (file)
+ (substring file 0 -9))
+ files))
+
+(defun make-test-de-stem (stem files)
+ (mapcar
+ (lambda (file)
+ (substring
+ file
+ (+ 1 (length stem))))
+ files))
+
+(defun make-test-no-legacy (list)
+ (make-test-remove list "legacy/"))
+
+(defun make-test-no-resources (list)
+ (make-test-remove list "-resources/"))
+
+(defun make-test-no-test-dir (list)
+ (make-test-remove list "-tests/"))
+
+(defun make-test-remove (list match)
+ (seq-remove
+ (lambda (file)
+ (string-match-p match file))
+ list))
${PROLSRC} ${PYTSRC} ${RBSRC} ${TEXSRC} ${YSRC}
NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz
-ETAGS_PROG=../../lib-src/etags
-CTAGS_PROG=../../lib-src/ctags
+ETAGS_PROG=../../../lib-src/etags
+CTAGS_PROG=../../../lib-src/ctags
REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
xx="this line is here because of a fontlock bug
#include "main.hpp"
#pragma ident "@(#)functions.cpp 1.0 98/11/12 (c) Rupak Rathore"
-// Constructor default argument initialises to today's values
+// Constructor default argument initializes to today's values
void Date::setDate ( int d , int m , int y ){
time_t t;
struct tm * ptm;
if ( date != NULL )
delete date;
date = NULL;
- if ( d == 0 && m == 0 && y == 0 ) // explicity called or default constructor hence leave it.
+ if ( d == 0 && m == 0 && y == 0 ) //Explicitly called or default constructor hence leave it.
return;
- if ( d < 0 && m < 0 && d < 0 ) // Special instruction to intialise to today's value
+ if ( d < 0 && m < 0 && d < 0 ) //Special instruction to initialize to today's value
d=m=y=0;
date = new tm;
ptm=localtime ( &t ) ;
Since then, the original authors Richard I. Shrager, A.Jutan, Ray Muzic, and
Sean Brennan agreed to put it under the <A
HREF="http://www.gnu.org/licenses/gpl.html">GPL</A>. Matthias Jueschke tested
-the program using a non-linear optimisation <A
+the program using a non-linear optimization <A
HREF="http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml">test suite</A>,
and was satisfied with the results.
--- /dev/null
+class A
+ def a()
+ super(" do ")
+ end
+ def b()
+ end
+end
+
+module A
+ class B
+ ABC = 4
+
+ def foo!
+ end
+
+ def self._bar?(abc)
+ end
+
+ class << self
+ def qux=(tee)
+ end
+ end
+ end
+end
+
+A::Constant = 5
+
+# def foo_in_comment
+# end
-;;; finalizer-tests.el --- Finalizer tests -*- lexical-binding: t -*-
+;;; alloc-tests.el --- alloc tests -*- lexical-binding: t -*-
;; Copyright (C) 2015-2016 Free Software Foundation, Inc.
-;;; zlib-tests.el --- Test suite for zlib.
+;;; decompress-tests.el --- Test suite for decompress.
;; Copyright (C) 2013-2016 Free Software Foundation, Inc.
(buffer-string))
"foo\n"))))
-(provide 'zlib-tests)
+(provide 'decompress-tests)
-;;; zlib-tests.el ends here.
+;;; decompress-tests.el ends here.
(string-collate-lessp
a b (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8")))))
'("Adrian" "Ævar" "Agustín" "Eli"))))
+
+(ert-deftest fns-tests-string-version-lessp ()
+ (should (string-version-lessp "foo2.png" "foo12.png"))
+ (should (not (string-version-lessp "foo12.png" "foo2.png")))
+ (should (string-version-lessp "foo12.png" "foo20000.png"))
+ (should (not (string-version-lessp "foo20000.png" "foo12.png")))
+ (should (string-version-lessp "foo.png" "foo2.png"))
+ (should (not (string-version-lessp "foo2.png" "foo.png")))
+ (should (equal (sort '("foo12.png" "foo2.png" "foo1.png")
+ 'string-version-lessp)
+ '("foo1.png" "foo2.png" "foo12.png")))
+ (should (string-version-lessp "foo2" "foo1234"))
+ (should (not (string-version-lessp "foo1234" "foo2")))
+ (should (string-version-lessp "foo.png" "foo2"))
+ (should (string-version-lessp "foo1.25.5.png" "foo1.125.5"))
+ (should (string-version-lessp "2" "1245"))
+ (should (not (string-version-lessp "1245" "2"))))
+
+(ert-deftest fns-tests-func-arity ()
+ (should (equal (func-arity 'car) '(1 . 1)))
+ (should (equal (func-arity 'caar) '(1 . 1)))
+ (should (equal (func-arity 'format) '(1 . many)))
+ (require 'info)
+ (should (equal (func-arity 'Info-goto-node) '(1 . 3)))
+ (should (equal (func-arity (lambda (&rest x))) '(0 . many)))
+ (should (equal (func-arity (eval (lambda (x &optional y)) nil)) '(1 . 2)))
+ (should (equal (func-arity (eval (lambda (x &optional y)) t)) '(1 . 2)))
+ (should (equal (func-arity 'let) '(1 . unevalled))))
+
+(ert-deftest fns-tests-hash-buffer ()
+ (should (equal (sha1 "foo") "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"))
+ (should (equal (with-temp-buffer
+ (insert "foo")
+ (buffer-hash))
+ (sha1 "foo")))
+ ;; This tests whether the presence of a gap in the middle of the
+ ;; buffer is handled correctly.
+ (should (equal (with-temp-buffer
+ (insert "foo")
+ (goto-char 2)
+ (insert " ")
+ (backward-delete-char 1)
+ (buffer-hash))
+ (sha1 "foo"))))
--- /dev/null
+;;; lread-tests.el --- tests for lread.c -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Philipp Stephani <phst@google.com>
+
+;; This file is part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Unit tests for code in src/lread.c.
+
+;;; Code:
+
+(ert-deftest lread-char-number ()
+ (should (equal (read "?\\N{U+A817}") #xA817)))
+
+(ert-deftest lread-char-name-1 ()
+ (should (equal (read "?\\N{SYLOTI NAGRI LETTER \n DHO}")
+ #xA817)))
+(ert-deftest lread-char-name-2 ()
+ (should (equal (read "?\\N{BED}") #x1F6CF)))
+(ert-deftest lread-char-name-3 ()
+ (should (equal (read "?\\N{U+BED}") #xBED)))
+(ert-deftest lread-char-name-4 ()
+ (should (equal (read "?\\N{VARIATION SELECTOR-1}") #xFE00)))
+(ert-deftest lread-char-name-5 ()
+ (should (equal (read "?\\N{VARIATION SELECTOR-16}") #xFE0F)))
+(ert-deftest lread-char-name-6 ()
+ (should (equal (read "?\\N{VARIATION SELECTOR-17}") #xE0100)))
+(ert-deftest lread-char-name-7 ()
+ (should (equal (read "?\\N{VARIATION SELECTOR-256}") #xE01EF)))
+(ert-deftest lread-char-name-8 ()
+ (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-F900}") #xF900)))
+(ert-deftest lread-char-name-9 ()
+ (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-FAD9}") #xFAD9)))
+(ert-deftest lread-char-name-10 ()
+ (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2F800}") #x2F800)))
+(ert-deftest lread-char-name-11 ()
+ (should (equal (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2FA1D}") #x2FA1D)))
+
+(ert-deftest lread-char-invalid-number ()
+ (should-error (read "?\\N{U+110000}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-char-invalid-name-1 ()
+ (should-error (read "?\\N{DOES NOT EXIST}")) :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-2 ()
+ (should-error (read "?\\N{VARIATION SELECTOR-0}")) :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-3 ()
+ (should-error (read "?\\N{VARIATION SELECTOR-257}"))
+ :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-4 ()
+ (should-error (read "?\\N{VARIATION SELECTOR--0}"))
+ :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-5 ()
+ (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-F8FF}"))
+ :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-6 ()
+ (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-FADA}"))
+ :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-7 ()
+ (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2F7FF}"))
+ :type 'invalid-read-syntax)
+(ert-deftest lread-char-invalid-name-8 ()
+ (should-error (read "?\\N{CJK COMPATIBILITY IDEOGRAPH-2FA1E}"))
+ :type 'invalid-read-syntax)
+
+(ert-deftest lread-char-non-ascii-name ()
+ (should-error (read "?\\N{LATIN CAPITAL LETTER Ø}")
+ :type 'invalid-read-syntax))
+
+(ert-deftest lread-char-empty-name ()
+ (should-error (read "?\\N{}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-char-surrogate-1 ()
+ (should-error (read "?\\N{U+D800}") :type 'invalid-read-syntax))
+(ert-deftest lread-char-surrogate-2 ()
+ (should-error (read "?\\N{U+D801}") :type 'invalid-read-syntax))
+(ert-deftest lread-char-surrogate-3 ()
+ (should-error (read "?\\N{U+Dffe}") :type 'invalid-read-syntax))
+(ert-deftest lread-char-surrogate-4 ()
+ (should-error (read "?\\N{U+DFFF}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-string-char-number-1 ()
+ (should (equal (read "\"a\\N{U+A817}b\"") "a\uA817b")))
+(ert-deftest lread-string-char-number-2 ()
+ (should-error (read "?\\N{0.5}") :type 'invalid-read-syntax))
+(ert-deftest lread-string-char-number-3 ()
+ (should-error (read "?\\N{U+-0}") :type 'invalid-read-syntax))
+
+(ert-deftest lread-string-char-name ()
+ (should (equal (read "\"a\\N{SYLOTI NAGRI LETTER DHO}b\"") "a\uA817b")))
+
+;;; lread-tests.el ends here