Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
This commit is contained in:
commit
90ab699c4f
335 changed files with 32035 additions and 7700 deletions
|
@ -2,7 +2,7 @@
|
|||
(sentence-end-double-space . t)
|
||||
(fill-column . 70)))
|
||||
(c-mode . ((c-file-style . "GNU")
|
||||
(c-noise-macro-with-parens-names . ("IF_LINT"))))
|
||||
(c-noise-macro-names . ("NONVOLATILE" "UNINIT"))))
|
||||
(objc-mode . ((c-file-style . "GNU")))
|
||||
(log-edit-mode . ((log-edit-font-lock-gnu-style . t)
|
||||
(log-edit-setup-add-author . t)))
|
||||
|
|
3831
ChangeLog.2
3831
ChangeLog.2
File diff suppressed because it is too large
Load diff
|
@ -156,7 +156,6 @@ HAVE_GETLOADAVG
|
|||
HAVE_GETOPT_H
|
||||
HAVE_GETOPT_LONG_ONLY
|
||||
HAVE_GETPAGESIZE
|
||||
HAVE_GETPEERNAME
|
||||
HAVE_GETPT
|
||||
HAVE_GETPWENT
|
||||
HAVE_GETRLIMIT
|
||||
|
@ -234,7 +233,7 @@ HAVE_NET_IF_DL_H
|
|||
HAVE_NET_IF_H
|
||||
HAVE_NLIST_H
|
||||
HAVE_OTF_GET_VARIATION_GLYPHS
|
||||
HAVE_PERSONALITY_LINUX32
|
||||
HAVE_PERSONALITY_ADDR_NO_RANDOMIZE
|
||||
HAVE_PNG
|
||||
HAVE_PNG_H
|
||||
HAVE_POSIX_MEMALIGN
|
||||
|
|
|
@ -45,7 +45,9 @@ files.")
|
|||
'(
|
||||
(nil "A\\. N\\. Other") ; unknown author 2014-12-03, later removed
|
||||
("Aaron S. Hawley" "Aaron Hawley")
|
||||
("Alan Third" "Alan J Third")
|
||||
("Alexandru Harsanyi" "Alex Harsanyi")
|
||||
("Álvar Jesús Ibeas Martín" "Álvar Ibeas")
|
||||
("Andrew Csillag" "Drew Csillag")
|
||||
("Anna M. Bigatti" "Anna Bigatti")
|
||||
("Barry A. Warsaw" "Barry A. Warsaw, Century Computing, Inc."
|
||||
|
@ -61,6 +63,7 @@ files.")
|
|||
("David J. Biesack" "David Biesack")
|
||||
("David De La Harpe Golden" "David Golden")
|
||||
("David Gillespie" "Dave Gillespie")
|
||||
("David S. Goldberg" "Dave Goldberg")
|
||||
("David Kågedal" "David K..edal")
|
||||
("David M. Koppelman" "David Koppelman")
|
||||
("David M. Smith" "David Smith" "David M Smith")
|
||||
|
@ -72,6 +75,7 @@ files.")
|
|||
("Eric M. Ludlam" "Eric Ludlam")
|
||||
("Eric S. Raymond" "Eric Raymond")
|
||||
("Fabián Ezequiel Gallina" "Fabian Ezequiel Gallina" "Fabi.n E\\. Gallina")
|
||||
("Francis Litterio" "Fran Litterio")
|
||||
("Francis J. Wright" "Dr Francis J. Wright" "Francis Wright")
|
||||
("François Pinard" "Francois Pinard")
|
||||
("Francesco Potortì" "Francesco Potorti" "Francesco Potorti`")
|
||||
|
@ -122,11 +126,12 @@ files.")
|
|||
("Michaël Cadilhac" "Michael Cadilhac")
|
||||
("Michael I. Bushnell" "Michael I Bushnell" "Michael I. Bushnell, p/BSG")
|
||||
("Michael R. Cook" "Michael Cook")
|
||||
("Michael Sperber" "Michael Sperber \\[Mr. Preprocessor\\]")
|
||||
("Michael Sperber" "Mike Sperber" "Michael Sperber \\[Mr. Preprocessor\\]")
|
||||
("Mikio Nakajima" "Nakajima Mikio")
|
||||
("Nelson Jose dos Santos Ferreira" "Nelson Ferreira")
|
||||
("Noorul Islam" "Noorul Islam K M")
|
||||
;;; ("Tetsurou Okazaki" "OKAZAKI Tetsurou") ; FIXME?
|
||||
("Óscar Fuentes" "Oscar Fuentes")
|
||||
("Paul Eggert" "Paul R\\. Eggert")
|
||||
("Pavel Janík" "Pavel Janík Ml." "Pavel Janik Ml." "Pavel Janik")
|
||||
("Pavel Kobiakov" "Pavel Kobyakov")
|
||||
|
@ -136,6 +141,7 @@ files.")
|
|||
("Peter S. Galbraith" "Peter S Galbraith" "Peter Galbraith")
|
||||
("Peter Runestig" "Peter 'luna' Runestig")
|
||||
("Piotr Zieliński" "Piotr Zielinski")
|
||||
("Przemysław Wojnowski" "Przemyslaw Wojnowski")
|
||||
("Rainer Schöpf" "Rainer Schoepf")
|
||||
("Raja R. Harinath" "Raja R Harinath")
|
||||
("Richard G. Bielawski" "Richard G Bielawski" "Richard Bielawski")
|
||||
|
@ -143,13 +149,16 @@ files.")
|
|||
("Richard M. Stallman" "Richard Stallman" "rms@gnu.org")
|
||||
("Robert J. Chassell" "Bob Chassell")
|
||||
("Roberto Huelga Díaz" "Roberto Huelga")
|
||||
("Rodney J. Whitby" "Rod Whitby")
|
||||
("Roland B. Roberts" "Roland B Roberts" "Roland Roberts")
|
||||
("Ron Schnell" "Ronnie Schnell")
|
||||
("Rui-Tao Dong" "Rui-Tao Dong ~{6-HpLN~}")
|
||||
("Sacha Chua" "Sandra Jean Chua")
|
||||
("Sam Steingold" "Sam Shteingold")
|
||||
("Satyaki Das" "Indexed search by Satyaki Das")
|
||||
("Sébastien Vauban" "Sebastien Vauban")
|
||||
("Sergey Litvinov" "Litvinov Sergey")
|
||||
("Shun-ichi Goto" "Shun-ichi GOTO")
|
||||
;; There are other Stefans.
|
||||
;;; ("Stefan Monnier" "Stefan")
|
||||
("Steven L. Baur" "SL Baur" "Steven L Baur")
|
||||
|
@ -186,12 +195,14 @@ If REALNAME is nil, ignore that author.")
|
|||
;; FIXME seems it would be less fragile to check for O', Mc, etc.
|
||||
(defconst authors-fixed-case
|
||||
'("Barry O'Reilly"
|
||||
"Brian McKenna"
|
||||
"Brian van den Broek"
|
||||
"Bryan O'Sullivan"
|
||||
"Christian von Roques"
|
||||
"Christophe de Dinechin"
|
||||
"Craig McDaniel"
|
||||
"Daniel LaLiberte"
|
||||
"Daniel McClanahan"
|
||||
"David J. MacKenzie"
|
||||
"David McCabe"
|
||||
"David O'Toole"
|
||||
|
@ -222,6 +233,7 @@ If REALNAME is nil, ignore that author.")
|
|||
"Shun-ichi Goto"
|
||||
"Thomas DeWeese"
|
||||
"Tijs van Bakel"
|
||||
"Titus von der Malsburg"
|
||||
"Yu-ji Hosokawa")
|
||||
"List of authors whose names cannot be simply capitalized.")
|
||||
|
||||
|
@ -280,6 +292,7 @@ Changes to files matching one of the regexps in this list are not listed.")
|
|||
"gfdl.1"
|
||||
"texi/Makefile.in"
|
||||
"autodeps.mk"
|
||||
"lwlib/autodeps.mk"
|
||||
"oldXMenu/autodeps.mk"
|
||||
"src/autodeps.mk"
|
||||
"Imakefile" "icons/sink.ico" "aixcc.lex"
|
||||
|
@ -371,9 +384,11 @@ Changes to files matching one of the regexps in this list are not listed.")
|
|||
"lib/qset-acl.c" "lib/qcopy-acl.c" "lib/file-has-acl.c"
|
||||
;; files from old MS Windows build procedures
|
||||
"makefile.w32-in"
|
||||
"admin/unidata/makefile.w32-in"
|
||||
"unidata/makefile.w32-in"
|
||||
"lib/makefile.w32-in"
|
||||
"leim/makefile.w32-in"
|
||||
"lisp/makefile.w32-in"
|
||||
"src/makefile.w32-in"
|
||||
"nt/emacs-src.tags"
|
||||
"doc/emacs/makefile.w32-in"
|
||||
|
@ -692,8 +707,9 @@ Changes to files in this list are not listed.")
|
|||
"net/zone-mode.el" "xesam.el"
|
||||
"term/mac-win.el" "sup-mouse.el"
|
||||
"term/apollo.el"
|
||||
"term/vt102.el" "term/vt125.el" "term/vt201.el" "term/vt220.el" "term/vt300.el"
|
||||
"term/vt320.el" "term/vt400.el" "term/vt420.el"
|
||||
"term/vt102.el" "term/vt125.el" "term/vt201.el" "term/vt220.el"
|
||||
"term/vt240.el" "term/vt300.el" "term/vt320.el" "term/vt400.el"
|
||||
"term/vt420.el"
|
||||
"url-https.el"
|
||||
"org-mac-message.el" "org-mew.el" "org-w3m.el" "org-vm.el" "org-wl.el"
|
||||
"org-mks.el" "org-remember.el" "org-xoxo.el" "org-docbook.el"
|
||||
|
@ -738,6 +754,7 @@ Changes to files in this list are not listed.")
|
|||
"emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
|
||||
"test-distrib.c" "testfile"
|
||||
"tpu-edt.doc" ; see below
|
||||
"lisp/obsolete/vc-mcvs.el"
|
||||
)
|
||||
"File names which are valid, but no longer exist (or cannot be found)
|
||||
in the repository.")
|
||||
|
@ -829,11 +846,14 @@ in the repository.")
|
|||
("emulation/crisp.el" . "crisp.el")
|
||||
("emulation/tpu-edt.el" . "tpu-edt.el")
|
||||
("emulation/tpu-extras.el" . "tpu-extras.el")
|
||||
("emulation/tpu-mapper.el" . "tpu-mapper.el")
|
||||
("emulation/vi.el" . "vi.el")
|
||||
("emulation/vip.el" . "vip.el")
|
||||
("emulation/ws-mode.el" . "ws-mode.el")
|
||||
("mail/mailpost.el" . "mailpost.el")
|
||||
("net/eudcb-ph.el" . "eudcb-ph.el")
|
||||
("play/bruce.el" . "bruce.el")
|
||||
("lisp/play/landmark.el" . "landmark.el")
|
||||
("play/yow.el" . "yow.el")
|
||||
("patcomp.el" . "patcomp.el")
|
||||
("emulation/ws-mode.el" . "ws-mode.el")
|
||||
|
@ -886,6 +906,8 @@ in the repository.")
|
|||
("ED.WORSHIP" . "JOKES")
|
||||
("GNU.JOKES" . "JOKES")
|
||||
("CHARACTERS" . "TODO")
|
||||
("lisp/character-fold.el" . "lisp/char-fold.el")
|
||||
("test/automated/character-fold-tests.el" . "test/automated/char-fold-tests.el")
|
||||
("images/gnus/mail_send.xpm" . "mail-send.xpm") ; still in images/gnus
|
||||
;; Renamed within same directory.
|
||||
("schema/xhtml-basic-form.rnc" . "xhtml-bform.rnc" )
|
||||
|
@ -912,6 +934,7 @@ in the repository.")
|
|||
("grammars" . "grammars")
|
||||
;; Moved from lisp/emacs-lisp/ to admin/.
|
||||
("emacs-lisp/authors.el" . "authors.el")
|
||||
("emacs-lisp/find-gc.el" . "admin/find-gc.el")
|
||||
;; From etc to lisp/cedet/semantic/.
|
||||
("grammars/bovine-grammar.el" . "bovine/grammar.el")
|
||||
("grammars/wisent-grammar.el" . "wisent/grammar.el")
|
||||
|
|
|
@ -14,6 +14,7 @@ Emacs uses the following files from the Unicode Character Database
|
|||
. BidiMirroring.txt
|
||||
. BidiBrackets.txt
|
||||
. IVD_Sequences.txt
|
||||
. NormalizationTest.txt
|
||||
|
||||
First, these files need to be copied into admin/unidata/, and then
|
||||
Emacs should be rebuilt for them to take effect. Rebuilding Emacs
|
||||
|
@ -48,6 +49,14 @@ might need to be updated because it knows about used and unused ranges
|
|||
of Unicode codepoints, which a new release of the Unicode Standard
|
||||
could change.
|
||||
|
||||
Finally, test normalization functions against NormalizationTests.txt,
|
||||
in the test/ directory run:
|
||||
|
||||
make lisp/international/ucs-normalize-tests
|
||||
|
||||
See commentary in test/lisp/international/ucs-normalize-tests.el
|
||||
regarding failing lines.
|
||||
|
||||
Problems, fixmes and other unicode-related issues
|
||||
-------------------------------------------------------------
|
||||
|
||||
|
@ -131,8 +140,6 @@ regard to completeness.
|
|||
* Need multibyte text in menus, e.g. for the above. (Not specific to
|
||||
Unicode -- see Emacs etc/TODO, but now mostly works with gtk.)
|
||||
|
||||
* There's currently no support for Unicode normalization.
|
||||
|
||||
* Populate char-width-table correctly for Unicode characters and
|
||||
worry about what happens when double-width charsets covering
|
||||
non-CJK characters are unified.
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# BidiBrackets-9.0.0.txt
|
||||
# Date: 2016-01-21, 22:00:00 GMT [AG, LI, KW]
|
||||
# Date: 2016-06-07, 22:30:00 GMT [AG, LI, KW]
|
||||
# © 2016 Unicode®, Inc.
|
||||
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
|
||||
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
||||
#
|
||||
# Unicode Character Database
|
||||
|
@ -28,6 +29,12 @@
|
|||
# vice versa, and their Bidi_Paired_Bracket_Type (bpt) property values are
|
||||
# Open (o) and Close (c), respectively.
|
||||
#
|
||||
# The brackets with ticks U+298D LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
|
||||
# through U+2990 RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER are paired the
|
||||
# same way their glyphs form mirror pairs, according to their bmg property
|
||||
# values. They are not paired on the basis of a diagonal or antidiagonal
|
||||
# matching of the corner ticks inferred from code point order.
|
||||
#
|
||||
# For legacy reasons, the characters U+FD3E ORNATE LEFT PARENTHESIS and
|
||||
# U+FD3F ORNATE RIGHT PARENTHESIS do not mirror in bidirectional display
|
||||
# and therefore do not form a bracket pair.
|
||||
|
|
18777
admin/unidata/NormalizationTest.txt
Normal file
18777
admin/unidata/NormalizationTest.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -20,3 +20,7 @@ http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
|
|||
Blocks.txt
|
||||
http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
|
||||
2014-11-10
|
||||
|
||||
NormalizationTest.txt
|
||||
http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
|
||||
2016-07-16
|
||||
|
|
|
@ -20179,10 +20179,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
|
|||
11C34;BHAIKSUKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
|
||||
11C35;BHAIKSUKI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
|
||||
11C36;BHAIKSUKI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
|
||||
11C38;BHAIKSUKI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
|
||||
11C39;BHAIKSUKI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
|
||||
11C3A;BHAIKSUKI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
|
||||
11C3B;BHAIKSUKI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
|
||||
11C38;BHAIKSUKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
|
||||
11C39;BHAIKSUKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
|
||||
11C3A;BHAIKSUKI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
|
||||
11C3B;BHAIKSUKI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
|
||||
11C3C;BHAIKSUKI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
|
||||
11C3D;BHAIKSUKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
|
||||
11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
|
||||
|
|
|
@ -76,7 +76,7 @@
|
|||
<td valign="top" class="navColCell"><a href="#7">Miscellaneous</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" class="navColCell"><a href="#Exhibit1">Data Files and
|
||||
<td valign="top" class="navColCell"><a href="#License">Data Files and
|
||||
Software License Agreement (Exhibit 1)</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -108,7 +108,7 @@
|
|||
<td>
|
||||
|
||||
<blockquote>
|
||||
<h1>Unicode Terms of Use</h1>
|
||||
<h1>Unicode® Terms of Use</h1>
|
||||
|
||||
<p>For the general privacy policy governing access to this site, see
|
||||
the
|
||||
|
@ -131,7 +131,7 @@ <h1>Unicode Terms of Use</h1>
|
|||
<ol type="A">
|
||||
<li><u><a name="1"></a>Unicode Copyright.</u>
|
||||
<ol>
|
||||
<li>Copyright © 1991-2014 Unicode, Inc. All rights reserved.</li>
|
||||
<li>Copyright © 1991-2016 Unicode, Inc. All rights reserved.</li>
|
||||
<li>Certain documents and files on this website contain a legend
|
||||
indicating that "Modification is permitted." Any person is
|
||||
hereby authorized, without fee, to modify such documents and
|
||||
|
@ -139,13 +139,13 @@ <h1>Unicode Terms of Use</h1>
|
|||
Standard, subject to Terms and Conditions herein.</li>
|
||||
<li>Any person is hereby authorized, without fee, to view, use,
|
||||
reproduce, and distribute all documents and files solely for
|
||||
informational purposes in the creation of products supporting
|
||||
informational purposes and in the creation of products supporting
|
||||
the Unicode Standard, subject to the Terms and Conditions
|
||||
herein.</li>
|
||||
<li>Further specifications of rights and restrictions pertaining
|
||||
to the use of the particular set of data files known as the
|
||||
"Unicode Character Database" can be found in <a href="#Exhibit1">
|
||||
Exhibit 1</a>.</li>
|
||||
"Unicode Character Database" can be found in the
|
||||
<a href="#License">License</a>.</li>
|
||||
<li>Each version of the Unicode Standard has further
|
||||
specifications of rights and restrictions of use. For the book
|
||||
editions (Unicode 5.0 and earlier), these are found on the back
|
||||
|
@ -247,35 +247,35 @@ <h1>Unicode Terms of Use</h1>
|
|||
|
||||
<blockquote>
|
||||
<h3 align="center"><a name="Exhibit1">EXHIBIT 1</a><br>
|
||||
UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE</h3>
|
||||
<a name="License">UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE</a></h3>
|
||||
|
||||
<pre>
|
||||
Unicode Data Files include all data files under the directories
|
||||
http://www.unicode.org/Public/, http://www.unicode.org/reports/,
|
||||
http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and
|
||||
http://www.unicode.org/utility/trac/browser/.
|
||||
|
||||
<p>Unicode Data Files include all data files under the directories
|
||||
<a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>, <a href="http://www.unicode.org/reports/">http://www.unicode.org/reports/</a>, and <a title="http://www.unicode.org/cldr/data/" onClick="return top.js.OpenExtLink(window,event,this)" target="_blank" href="http://www.unicode.org/cldr/data/">
|
||||
http://www.unicode.org/cldr/data/</a>.
|
||||
Unicode Data Files do not include PDF online code charts under the
|
||||
directory <a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>.
|
||||
Software includes any source code published in the Unicode Standard
|
||||
or under the directories <a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>,
|
||||
<a href="http://www.unicode.org/reports/">http://www.unicode.org/reports/</a>, and <a title="http://www.unicode.org/cldr/data/" onClick="return top.js.OpenExtLink(window,event,this)" target="_blank" href="http://www.unicode.org/cldr/data/">
|
||||
http://www.unicode.org/cldr/data/</a>.</p>
|
||||
directory http://www.unicode.org/Public/.
|
||||
|
||||
<p>NOTICE TO USER: Carefully read the following legal agreement.
|
||||
Software includes any source code published in the Unicode Standard
|
||||
or under the directories
|
||||
http://www.unicode.org/Public/, http://www.unicode.org/reports/,
|
||||
http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and
|
||||
http://www.unicode.org/utility/trac/browser/.
|
||||
|
||||
NOTICE TO USER: Carefully read the following legal agreement.
|
||||
BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
|
||||
DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
|
||||
YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
|
||||
TERMS AND CONDITIONS OF THIS AGREEMENT.
|
||||
IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
|
||||
THE DATA FILES OR SOFTWARE.</p>
|
||||
THE DATA FILES OR SOFTWARE.
|
||||
|
||||
<div align="center">
|
||||
COPYRIGHT AND PERMISSION NOTICE
|
||||
|
||||
<table class="simple"><tr><td>
|
||||
<pre>COPYRIGHT AND PERMISSION NOTICE
|
||||
|
||||
Copyright © 1991-2014 Unicode, Inc. All rights reserved.
|
||||
Distributed under the Terms of Use in
|
||||
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a>.
|
||||
Copyright © 1991-2016 Unicode, Inc. All rights reserved.
|
||||
Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Unicode data files and any associated documentation
|
||||
|
@ -284,14 +284,11 @@ <h3 align="center"><a name="Exhibit1">EXHIBIT 1</a><br>
|
|||
without restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, and/or sell copies of
|
||||
the Data Files or Software, and to permit persons to whom the Data Files
|
||||
or Software are furnished to do so, provided that
|
||||
(a) this copyright and permission notice appear with all copies
|
||||
of the Data Files or Software,
|
||||
(b) this copyright and permission notice appear in associated
|
||||
documentation, and
|
||||
(c) there is clear notice in each modified Data File or in the Software
|
||||
as well as in the documentation associated with the Data File(s) or
|
||||
Software that the data or software has been modified.
|
||||
or Software are furnished to do so, provided that either
|
||||
(a) this copyright and permission notice appear with all copies
|
||||
of the Data Files or Software, or
|
||||
(b) this copyright and permission notice appear in associated
|
||||
Documentation.
|
||||
|
||||
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
|
@ -307,10 +304,8 @@ <h3 align="center"><a name="Exhibit1">EXHIBIT 1</a><br>
|
|||
Except as contained in this notice, the name of a copyright holder
|
||||
shall not be used in advertising or otherwise to promote the sale,
|
||||
use or other dealings in these Data Files or Software without prior
|
||||
written authorization of the copyright holder.</pre>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
|
||||
written authorization of the copyright holder.
|
||||
</pre>
|
||||
|
||||
</blockquote>
|
||||
|
||||
|
|
93
configure.ac
93
configure.ac
|
@ -1643,15 +1643,17 @@ AC_CHECK_HEADERS_ONCE(
|
|||
sys/resource.h
|
||||
sys/utsname.h pwd.h utmp.h util.h)
|
||||
|
||||
AC_MSG_CHECKING(if personality LINUX32 can be set)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/personality.h>]], [[personality (PER_LINUX32)]])],
|
||||
emacs_cv_personality_linux32=yes,
|
||||
emacs_cv_personality_linux32=no)
|
||||
AC_MSG_RESULT($emacs_cv_personality_linux32)
|
||||
|
||||
if test $emacs_cv_personality_linux32 = yes; then
|
||||
AC_DEFINE(HAVE_PERSONALITY_LINUX32, 1,
|
||||
[Define to 1 if personality LINUX32 can be set.])
|
||||
AC_CACHE_CHECK([for ADDR_NO_RANDOMIZE],
|
||||
[emacs_cv_personality_addr_no_randomize],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <sys/personality.h>]],
|
||||
[[personality (personality (0xffffffff)
|
||||
| ADDR_NO_RANDOMIZE)]])],
|
||||
[emacs_cv_personality_addr_no_randomize=yes],
|
||||
[emacs_cv_personality_addr_no_randomize=no])])
|
||||
if test $emacs_cv_personality_addr_no_randomize = yes; then
|
||||
AC_DEFINE([HAVE_PERSONALITY_ADDR_NO_RANDOMIZE], [1],
|
||||
[Define to 1 if personality flag ADDR_NO_RANDOMIZE exists.])
|
||||
fi
|
||||
|
||||
# Note that Solaris has sys/sysinfo.h which defines struct
|
||||
|
@ -2177,8 +2179,8 @@ 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"
|
||||
GNU_MALLOC=no
|
||||
GNU_MALLOC_reason=" (only before dumping)"
|
||||
GMALLOC_OBJ=gmalloc.o
|
||||
VMLIMIT_OBJ=
|
||||
else
|
||||
|
@ -3245,34 +3247,29 @@ fi
|
|||
|
||||
### Use -lXpm if available, unless '--with-xpm=no'.
|
||||
### mingw32 doesn't use -lXpm, since it loads the library dynamically.
|
||||
### In the Cygwin-w32 build, we need to use /usr/include/noX/X11/xpm.h
|
||||
### rather than /usr/include/X11/xpm.h, so we set CPPFLAGS (and
|
||||
### LDFLAGS) accordingly.
|
||||
### The Cygwin-w32 build uses <noX/xpm.h> instead of <X11/xpm.h>, so
|
||||
### we need to set LDFLAGS accordingly.
|
||||
HAVE_XPM=no
|
||||
LIBXPM=
|
||||
if test "${HAVE_W32}" = "yes" && test "${opsys}" = "cygwin"; then
|
||||
if test "${with_xpm}" != "no"; then
|
||||
SAVE_CPPFLAGS="$CPPFLAGS"
|
||||
SAVE_LDFLAGS="$LDFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS -I/usr/include/noX"
|
||||
LDFLAGS="$LDFLAGS -L/usr/lib/noX"
|
||||
AC_CHECK_HEADER(X11/xpm.h,
|
||||
AC_CHECK_HEADER(noX/xpm.h,
|
||||
[AC_CHECK_LIB(Xpm, XpmReadFileToImage, HAVE_XPM=yes)])
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
AC_MSG_CHECKING(for XpmReturnAllocPixels preprocessor define)
|
||||
AC_EGREP_CPP(no_return_alloc_pixels,
|
||||
[#include "X11/xpm.h"
|
||||
[#include "noX/xpm.h"
|
||||
#ifndef XpmReturnAllocPixels
|
||||
no_return_alloc_pixels
|
||||
#endif
|
||||
], HAVE_XPM=no, HAVE_XPM=yes)
|
||||
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
REAL_CPPFLAGS="$REAL_CPPFLAGS -I/usr/include/noX"
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
CPPFLAGS="$SAVE_CPPFLAGS"
|
||||
LDFLAGS="$SAVE_LDFLAGS"
|
||||
fi
|
||||
fi
|
||||
|
@ -3571,9 +3568,9 @@ fi
|
|||
AC_SUBST(LIBGIF)
|
||||
|
||||
dnl Check for required libraries.
|
||||
MISSING=
|
||||
WITH_NO=
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
MISSING=""
|
||||
WITH_NO=""
|
||||
test "${with_xpm}" != "no" && test "${HAVE_XPM}" != "yes" &&
|
||||
MISSING="libXpm" && WITH_NO="--with-xpm=no"
|
||||
test "${with_jpeg}" != "no" && test "${HAVE_JPEG}" != "yes" &&
|
||||
|
@ -3584,15 +3581,16 @@ if test "${HAVE_X11}" = "yes"; then
|
|||
MISSING="$MISSING libgif/libungif" && WITH_NO="$WITH_NO --with-gif=no"
|
||||
test "${with_tiff}" != "no" && test "${HAVE_TIFF}" != "yes" &&
|
||||
MISSING="$MISSING libtiff" && WITH_NO="$WITH_NO --with-tiff=no"
|
||||
|
||||
if test "X${MISSING}" != X; then
|
||||
AC_MSG_ERROR([The following required libraries were not found:
|
||||
fi
|
||||
test "${with_gnutls}" != "no" && test "${HAVE_GNUTLS}" != "yes" &&
|
||||
MISSING="$MISSING gnutls" && WITH_NO="$WITH_NO --with-gnutls=no"
|
||||
if test "X${MISSING}" != X; then
|
||||
AC_MSG_ERROR([The following required libraries were not found:
|
||||
$MISSING
|
||||
Maybe some development libraries/packages are missing?
|
||||
If you don't want to link with them give
|
||||
$WITH_NO
|
||||
as options to configure])
|
||||
fi
|
||||
fi
|
||||
|
||||
### Use -lgpm if available, unless '--with-gpm=no'.
|
||||
|
@ -3848,7 +3846,7 @@ lrand48 random rint \
|
|||
select getpagesize setlocale newlocale \
|
||||
getrlimit setrlimit shutdown \
|
||||
pthread_sigmask strsignal setitimer \
|
||||
sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
|
||||
sendto recvfrom getsockname getifaddrs freeifaddrs \
|
||||
gai_strerror sync \
|
||||
getpwent endpwent getgrent endgrent \
|
||||
cfmakeraw cfsetspeed copysign __executable_start log2)
|
||||
|
@ -4292,23 +4290,32 @@ else
|
|||
[Returns true if character is any form of separator.])
|
||||
fi
|
||||
|
||||
AH_TEMPLATE(NO_EDITRES, [Define if XEditRes should not be used.])
|
||||
|
||||
case $opsys in
|
||||
aix4-2)
|
||||
dnl Unfortunately without libXmu we cannot support EditRes.
|
||||
if test "x$ac_cv_search_XmuConvertStandardSelection" = xno; then
|
||||
AC_DEFINE(NO_EDITRES, 1)
|
||||
if test "$USE_X_TOOLKIT" != "none"; then
|
||||
have_editres=yes
|
||||
case $opsys in
|
||||
hpux*)
|
||||
dnl Assar Westerlund <assar@sics.se> says this is necessary
|
||||
dnl for HP-UX 10.20, and that it works for HP-UX 0 as well.
|
||||
have_editres=no
|
||||
;;
|
||||
esac
|
||||
if test "$have_editres" != no && test ! -z "$LIBXMU"; then
|
||||
OLDLIBS="$LIBS"
|
||||
dnl See libXmu.a check above.
|
||||
if test x$HAVE_X11XTR6 = xyes; then
|
||||
LIBS="-lXt -lSM -lICE $LIBXMU"
|
||||
else
|
||||
OTHERLIBS="-lXt -$LIBXMU"
|
||||
fi
|
||||
;;
|
||||
|
||||
hpux*)
|
||||
dnl Assar Westerlund <assar@sics.se> says this is necessary for
|
||||
dnl HP-UX 10.20, and that it works for HP-UX 0 as well.
|
||||
AC_DEFINE(NO_EDITRES, 1)
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_TRY_LINK(
|
||||
[#include <X11/Intrinsic.h>
|
||||
#include <X11/Xmu/Editres.h>],
|
||||
[_XEditResCheckMessages (0, 0, 0, 0);],
|
||||
[AC_DEFINE([X_TOOLKIT_EDITRES], 1,
|
||||
[Define to 1 if we should use XEditRes.])])
|
||||
LIBS=$OLDLIBS
|
||||
fi
|
||||
fi
|
||||
|
||||
case $opsys in
|
||||
sol2* | unixware )
|
||||
|
|
|
@ -550,13 +550,16 @@ Mark (with @samp{*}) all files whose @emph{contents} contain a match for
|
|||
the regular expression @var{regexp}
|
||||
(@code{dired-mark-files-containing-regexp}). This command is like
|
||||
@kbd{% m}, except that it searches the file contents instead of the file
|
||||
name. Note that if a file is visited in an Emacs buffer, this command
|
||||
will look in the buffer without revisiting the file, so the results
|
||||
name. Note that if a file is visited in an Emacs buffer,
|
||||
and @code{dired-always-read-filesystem} is @code{nil} (the default), this
|
||||
command will look in the buffer without revisiting the file, so the results
|
||||
might be inconsistent with the file on disk if its contents has changed
|
||||
since it was last visited. If you don't want this, you may wish
|
||||
reverting the files you have visited in your buffers, or turning on
|
||||
the @code{auto-revert} mode in those buffers, before invoking this
|
||||
command. @xref{Reverting}.
|
||||
command. @xref{Reverting}. If you prefer that this command always revisit
|
||||
the file, without having to revert the file or enable @code{auto-revert}
|
||||
mode, you might want to set @code{dired-always-read-filesystem} to non-@code{nil}.
|
||||
|
||||
@item C-/
|
||||
@itemx C-x u
|
||||
|
|
|
@ -853,9 +853,15 @@ to alter the amount of fontification applied by Font Lock mode, for
|
|||
major modes that support this feature. The value should be a number
|
||||
(with 1 representing a minimal amount of fontification; some modes
|
||||
support levels as high as 3); or @code{t}, meaning ``as high as
|
||||
possible'' (the default). You can also specify different numbers for
|
||||
particular major modes; for example, to use level 1 for C/C++ modes,
|
||||
and the default level otherwise, use the value
|
||||
possible'' (the default). To be effective for a given file buffer,
|
||||
the customization of @code{font-lock-maximum-decoration} should be
|
||||
done @emph{before} the file is visited; if you already have the file
|
||||
visited in a buffer when you customize this variable, kill the buffer
|
||||
and visit the file again after the customization.
|
||||
|
||||
You can also specify different numbers for particular major modes; for
|
||||
example, to use level 1 for C/C++ modes, and the default level
|
||||
otherwise, use the value
|
||||
|
||||
@example
|
||||
'((c-mode . 1) (c++-mode . 1)))
|
||||
|
|
|
@ -701,7 +701,7 @@ after it visits the file. (This marks the buffer as modified, and you
|
|||
can undo it.) If the value is @code{visit-save}, Emacs adds such
|
||||
newlines both on visiting and on saving. If the value is @code{nil},
|
||||
Emacs leaves the end of the file unchanged; any other non-@code{nil}
|
||||
value means to asks you whether to add a newline. The default is
|
||||
value means Emacs asks you whether to add a newline. The default is
|
||||
@code{nil}.
|
||||
|
||||
@vindex mode-require-final-newline
|
||||
|
|
|
@ -97,7 +97,8 @@ ring; on a second click, kill it (@code{mouse-save-then-kill}).
|
|||
invoked by clicking with the left mouse button, @kbd{mouse-1}, in the
|
||||
text area of a window. This moves point to the position where you
|
||||
clicked. If that window was not the selected window, it becomes the
|
||||
selected window.
|
||||
selected window. You can also activate a region by double-clicking
|
||||
mouse-1 (@pxref{Word and Line Mouse}).
|
||||
|
||||
@vindex x-mouse-click-focus-ignore-position
|
||||
Normally, if the frame you clicked in was not the selected frame, it
|
||||
|
@ -215,7 +216,7 @@ also copied to the kill ring.
|
|||
|
||||
@table @kbd
|
||||
@item Double-mouse-1
|
||||
Select the text around the word which you click on.
|
||||
Select the text around the word or character which you click on.
|
||||
|
||||
Double-clicking on a character with symbol syntax (such as
|
||||
underscore, in C mode) selects the symbol surrounding that character.
|
||||
|
@ -226,6 +227,17 @@ ends. Double-clicking on a character with string-delimiter syntax
|
|||
constant (Emacs uses heuristics to figure out whether that character
|
||||
is the beginning or the end of it).
|
||||
|
||||
Double-clicking on the beginning of a parenthetical grouping or
|
||||
beginning string-delimiter moves point to the end of the region,
|
||||
scrolling the buffer display forward if necessary to show the new
|
||||
location of point. Double-clicking on the end of a parenthetical
|
||||
grouping or end string-delimiter keeps point at the end of the region
|
||||
by default, so the beginning of the region will not be visible if it
|
||||
is above the top of the window; setting the user option
|
||||
@code{mouse-select-region-move-to-beginning} to non-nil changes this
|
||||
to move point to the beginning of the region, scrolling the display
|
||||
backward if necessary.
|
||||
|
||||
@item Double-Drag-mouse-1
|
||||
Select the text you drag across, in the form of whole words.
|
||||
|
||||
|
@ -1011,7 +1023,7 @@ scroll bar height, change the @code{scroll-bar-height} frame parameter
|
|||
|
||||
On graphical displays, you can use @dfn{window dividers} in order to
|
||||
separate windows visually. Window dividers are bars that can be dragged
|
||||
with the mouse, thus allowing to easily resize adjacent windows.
|
||||
with the mouse, thus allowing you to easily resize adjacent windows.
|
||||
|
||||
@findex window-divider-mode
|
||||
To toggle the display of window dividers, use the command @kbd{M-x
|
||||
|
|
|
@ -1923,7 +1923,7 @@ Like @code{lpr-buffer} but print only the current region.
|
|||
@findex lpr-region
|
||||
@vindex lpr-switches
|
||||
@vindex lpr-commands
|
||||
On most operating system, the above hardcopy commands submit files
|
||||
On most operating systems, the above hardcopy commands submit files
|
||||
for printing by calling the @command{lpr} program. To change the
|
||||
printer program, customize the variable @code{lpr-command}. To
|
||||
specify extra switches to give the printer program, customize the list
|
||||
|
|
|
@ -1977,7 +1977,7 @@ in @code{event-modifiers}. For example:
|
|||
|
||||
@defun mouse-movement-p object
|
||||
This function returns non-@code{nil} if @var{object} is a mouse movement
|
||||
event.
|
||||
event. @xref{Motion Events}.
|
||||
@end defun
|
||||
|
||||
@defun event-convert-list list
|
||||
|
|
|
@ -438,7 +438,7 @@ Emacs commands for operating on compiler output can be used on these
|
|||
messages.
|
||||
|
||||
When an error is due to invalid syntax in the program, the byte
|
||||
compiler might get confused about the errors' exact location. One way
|
||||
compiler might get confused about the error's exact location. One way
|
||||
to investigate is to switch to the buffer @w{@file{ *Compiler
|
||||
Input*}}. (This buffer name starts with a space, so it does not show
|
||||
up in the Buffer Menu.) This buffer contains the program being
|
||||
|
|
|
@ -1996,15 +1996,17 @@ newline.
|
|||
|
||||
If the property value is @code{t}, the newline character has no
|
||||
effect on the displayed height of the line---the visible contents
|
||||
alone determine the height. This is useful for tiling small images
|
||||
(or image slices) without adding blank areas between the images.
|
||||
alone determine the height. The @code{line-spacing} property,
|
||||
described below, is also ignored in this case. This is useful for
|
||||
tiling small images (or image slices) without adding blank areas
|
||||
between the images.
|
||||
|
||||
If the property value is a list of the form @code{(@var{height}
|
||||
@var{total})}, that adds extra space @emph{below} the display line.
|
||||
First Emacs uses @var{height} as a height spec to control extra space
|
||||
@emph{above} the line; then it adds enough space @emph{below} the line
|
||||
to bring the total line height up to @var{total}. In this case, the
|
||||
other ways to specify the line spacing are ignored.
|
||||
to bring the total line height up to @var{total}. In this case, any
|
||||
value of @code{line-spacing} property for the newline is ignored.
|
||||
|
||||
@cindex height spec
|
||||
Any other kind of property value is a height spec, which translates
|
||||
|
@ -2054,9 +2056,10 @@ overrides line spacings specified for the frame.
|
|||
|
||||
@kindex line-spacing @r{(text property)}
|
||||
Finally, a newline can have a @code{line-spacing} text or overlay
|
||||
property that overrides the default frame line spacing and the buffer
|
||||
local @code{line-spacing} variable, for the display line ending in
|
||||
that newline.
|
||||
property that can enlarge the default frame line spacing and the
|
||||
buffer local @code{line-spacing} variable: if its value is larger than
|
||||
the buffer or frame defaults, that larger value is used instead, for
|
||||
the display line ending in that newline.
|
||||
|
||||
One way or another, these mechanisms specify a Lisp value for the
|
||||
spacing of each line. The value is a height spec, and it translates
|
||||
|
@ -5347,6 +5350,41 @@ that describe the outer circumference of the polygon.
|
|||
@end lisp
|
||||
@end defun
|
||||
|
||||
@defun svg-text svg text &rest args
|
||||
Add a text to @var{svg}.
|
||||
|
||||
@lisp
|
||||
(svg-text
|
||||
svg "This is a text"
|
||||
:font-size "40"
|
||||
:font-weight "bold"
|
||||
:stroke "black"
|
||||
:fill "white"
|
||||
:font-family "impact"
|
||||
:letter-spacing "4pt"
|
||||
:x 300
|
||||
:y 400
|
||||
:stroke-width 1)
|
||||
@end lisp
|
||||
@end defun
|
||||
|
||||
@defun svg-embed svg image image-type datap &rest args
|
||||
Add an embedded (raster) image to @var{svg}. If @var{datap} is
|
||||
@code{nil}, @var{IMAGE} should be a file name; if not, it should be a
|
||||
binary string containing the image data. @var{image-type} should be a
|
||||
@acronym{MIME} image type, for instance @samp{"image/jpeg"}.
|
||||
|
||||
@lisp
|
||||
(svg-embed svg "~/rms.jpg" "image/jpeg" nil
|
||||
:width "100px" :height "100px"
|
||||
:x "50px" :y "75px")
|
||||
@end lisp
|
||||
@end defun
|
||||
|
||||
@defun svg-remove svg id
|
||||
Remove the element with identifier @code{id} from the @code{svg}.
|
||||
@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
|
||||
|
|
|
@ -3238,7 +3238,9 @@ end position.
|
|||
|
||||
One responsibility of @var{from-fn} is to make sure that the beginning
|
||||
of the file no longer matches @var{regexp}. Otherwise it is likely to
|
||||
get called again.
|
||||
get called again. Also, @var{from-fn} must not involve buffers or
|
||||
files other than the one being decoded, otherwise the internal buffer
|
||||
used for formatting might be overwritten.
|
||||
|
||||
@item to-fn
|
||||
A shell command or function to encode data in this format---that is, to
|
||||
|
@ -3269,6 +3271,10 @@ file, it intermixes the specified annotations at the corresponding
|
|||
positions. All this takes place without modifying the buffer.
|
||||
@end itemize
|
||||
|
||||
@var{to-fn} must not involve buffers or files other than the one being
|
||||
encoded, otherwise the internal buffer used for formatting might be
|
||||
overwritten.
|
||||
|
||||
@item modify
|
||||
A flag, @code{t} if the encoding function modifies the buffer, and
|
||||
@code{nil} if it works by returning a list of annotations.
|
||||
|
|
|
@ -341,7 +341,21 @@ lots of bindings; for just a few, the sparse keymap is better.
|
|||
@end defun
|
||||
|
||||
@defun copy-keymap keymap
|
||||
This function returns a copy of @var{keymap}. Any keymaps that
|
||||
This function returns a copy of @var{keymap}. This is almost never
|
||||
needed. If you want a keymap that's like another yet with a few
|
||||
changes, you should use map inheritance rather than copying.
|
||||
I.e., something like:
|
||||
|
||||
@example
|
||||
@group
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(set-keymap-parent map <theirmap>)
|
||||
(define-key map ...)
|
||||
...)
|
||||
@end group
|
||||
@end example
|
||||
|
||||
When performing @code{copy-keymap}, any keymaps that
|
||||
appear directly as bindings in @var{keymap} are also copied recursively,
|
||||
and so on to any number of levels. However, recursive copying does not
|
||||
take place when the definition of a character is a symbol whose function
|
||||
|
@ -1368,7 +1382,7 @@ default global map.
|
|||
The function @code{substitute-key-definition} scans a keymap for
|
||||
keys that have a certain binding and rebinds them with a different
|
||||
binding. Another feature which is cleaner and can often produce the
|
||||
same results to remap one command into another (@pxref{Remapping
|
||||
same results is to remap one command into another (@pxref{Remapping
|
||||
Commands}).
|
||||
|
||||
@defun substitute-key-definition olddef newdef keymap &optional oldmap
|
||||
|
|
|
@ -1556,12 +1556,16 @@ keys may not be symbols:
|
|||
@end smallexample
|
||||
@end defun
|
||||
|
||||
@defun alist-get key value &optional default
|
||||
@defun alist-get key value &optional default remove
|
||||
This function is like @code{assq}, but instead of returning the entire
|
||||
association for @var{key}, @code{(@var{key} . @var{value})}, it
|
||||
returns just the @var{value}. It returns @var{default} if @var{key}
|
||||
is not found in @var{alist}, defaulting to @code{nil} if @var{default}
|
||||
is omitted.
|
||||
returns just the @var{value}. If @var{key} is not found in
|
||||
@var{alist} it returns @var{default}.
|
||||
|
||||
This is a generalized variable (@pxref{Generalized Variables}) that
|
||||
can be used to change a value with @code{setf}. When using it to set
|
||||
a value, optional argument @var{remove} non-nil means to remove
|
||||
@var{key} from @var{alist} if the new value is @code{eql} to @var{default}.
|
||||
@end defun
|
||||
|
||||
@defun rassq value alist
|
||||
|
|
|
@ -848,8 +848,8 @@ loaded, into the current Emacs session. This means that the facilities
|
|||
associated with @var{feature} are or will be available for other Lisp
|
||||
programs.
|
||||
|
||||
The direct effect of calling @code{provide} is if not already in
|
||||
@var{features} then to add @var{feature} to the front of that list and
|
||||
The direct effect of calling @code{provide} is to add @var{feature} to
|
||||
the front of @code{features} if it is not already in that list and
|
||||
call any @code{eval-after-load} code waiting for it (@pxref{Hooks for
|
||||
Loading}). The argument @var{feature} must be a symbol.
|
||||
@code{provide} returns @var{feature}.
|
||||
|
|
|
@ -340,10 +340,10 @@ text is inserted at its position. If @var{type} is @code{nil},
|
|||
This function reports the current insertion type of @var{marker}.
|
||||
@end defun
|
||||
|
||||
Most functions that create markers, without an argument allowing to
|
||||
specify the insertion type, create them with insertion type
|
||||
@code{nil}. Also, the mark has, by default, insertion type
|
||||
@code{nil}.
|
||||
All functions that create markers without accepting an argument that
|
||||
specifies the insertion type, create them with insertion type
|
||||
@code{nil} (@pxref{Creating Markers}). Also, the mark has, by
|
||||
default, insertion type @code{nil}.
|
||||
|
||||
@node Moving Markers
|
||||
@section Moving Marker Positions
|
||||
|
|
|
@ -750,8 +750,8 @@ list contains elements of any other type, those are ignored.
|
|||
If @var{collection} is an obarray (@pxref{Creating Symbols}), the names
|
||||
of all symbols in the obarray form the set of permissible completions.
|
||||
|
||||
If @var{collection} is a hash table, then the keys that are strings
|
||||
are the possible completions. Other keys are ignored.
|
||||
If @var{collection} is a hash table, then the keys that are strings or
|
||||
symbols are the possible completions. Other keys are ignored.
|
||||
|
||||
You can also use a function as @var{collection}. Then the function is
|
||||
solely responsible for performing completion; @code{try-completion}
|
||||
|
|
|
@ -799,10 +799,9 @@ if @var{parent} is @code{nil}. (Again, a @code{nil} value is
|
|||
|
||||
@item :group
|
||||
If this is specified, the value should be the customization group for
|
||||
this mode. (Not all major modes have one.) Only the (still
|
||||
experimental and unadvertised) command @code{customize-mode} currently
|
||||
uses this. @code{define-derived-mode} does @emph{not} automatically
|
||||
define the specified customization group.
|
||||
this mode. (Not all major modes have one.) The command
|
||||
@code{customize-mode} uses this. @code{define-derived-mode} does
|
||||
@emph{not} automatically define the specified customization group.
|
||||
|
||||
@item :after-hook
|
||||
This optional keyword specifies a single Lisp form to evaluate as the
|
||||
|
@ -913,7 +912,7 @@ follow these conventions: they may run the parent's mode hook too early,
|
|||
or fail to run @code{after-change-major-mode-hook}. If you encounter
|
||||
such a major mode, please correct it to follow these conventions.
|
||||
|
||||
When you defined a major mode using @code{define-derived-mode}, it
|
||||
When you define a major mode using @code{define-derived-mode}, it
|
||||
automatically makes sure these conventions are followed. If you
|
||||
define a major mode ``by hand'', not using @code{define-derived-mode},
|
||||
use the following functions to handle these conventions automatically.
|
||||
|
@ -1066,7 +1065,7 @@ to invert the sort order.
|
|||
@defun tabulated-list-init-header
|
||||
This function computes and sets @code{header-line-format} for the
|
||||
Tabulated List buffer (@pxref{Header Lines}), and assigns a keymap to
|
||||
the header line to allow sort entries by clicking on column headers.
|
||||
the header line to allow sorting entries by clicking on column headers.
|
||||
|
||||
Modes derived from Tabulated List mode should call this after setting
|
||||
the above variables (in particular, only after setting
|
||||
|
|
|
@ -590,10 +590,12 @@ any buffer, whether or not it is currently displayed in some window.
|
|||
@deffn Command move-to-window-line count
|
||||
This function moves point with respect to the text currently displayed
|
||||
in the selected window. It moves point to the beginning of the screen
|
||||
line @var{count} screen lines from the top of the window. If
|
||||
@var{count} is negative, that specifies a position
|
||||
@w{@minus{}@var{count}} lines from the bottom (or the last line of the
|
||||
buffer, if the buffer ends above the specified screen position).
|
||||
line @var{count} screen lines from the top of the window; zero means
|
||||
the topmost line. If @var{count} is negative, that specifies a
|
||||
position @w{@minus{}@var{count}} lines from the bottom (or the last
|
||||
line of the buffer, if the buffer ends above the specified screen
|
||||
position); thus, @var{count} of -1 specifies the last fully visible
|
||||
screen line of the window.
|
||||
|
||||
If @var{count} is @code{nil}, then point moves to the beginning of the
|
||||
line in the middle of the window. If the absolute value of @var{count}
|
||||
|
@ -604,8 +606,8 @@ location onto the screen.
|
|||
|
||||
In an interactive call, @var{count} is the numeric prefix argument.
|
||||
|
||||
The value returned is the window line number point has moved to, with
|
||||
the top line in the window numbered 0.
|
||||
The value returned is the screen line number point has moved to,
|
||||
relative to the top line of the window.
|
||||
@end deffn
|
||||
|
||||
@vindex move-to-window-group-line-function
|
||||
|
|
|
@ -506,7 +506,7 @@ inputinput@point{}
|
|||
@defun call-process-shell-command command &optional infile destination display
|
||||
This function executes the shell command @var{command} synchronously.
|
||||
The arguments are handled as in @code{call-process}. An old calling
|
||||
convention allowed to pass any number of additional arguments after
|
||||
convention allowed passing any number of additional arguments after
|
||||
@var{display}, which were concatenated to @var{command}; this is still
|
||||
supported, but strongly discouraged.
|
||||
@end defun
|
||||
|
@ -515,7 +515,7 @@ supported, but strongly discouraged.
|
|||
This function is like @code{call-process-shell-command}, but uses
|
||||
@code{process-file} internally. Depending on @code{default-directory},
|
||||
@var{command} can be executed also on remote hosts. An old calling
|
||||
convention allowed to pass any number of additional arguments after
|
||||
convention allowed passing any number of additional arguments after
|
||||
@var{display}, which were concatenated to @var{command}; this is still
|
||||
supported, but strongly discouraged.
|
||||
@end defun
|
||||
|
@ -1382,10 +1382,10 @@ subprocess with a @code{SIGHUP} signal (@pxref{Signals to Processes}).
|
|||
@end defun
|
||||
|
||||
If the process's buffer is displayed in a window, your Lisp program
|
||||
may wish telling the process the dimensions of that window, so that
|
||||
may wish to tell the process the dimensions of that window, so that
|
||||
the process could adapt its output to those dimensions, much as it
|
||||
adapts to the screen dimensions. The following functions allow to
|
||||
communicate this kind of information to processes; however, not all
|
||||
adapts to the screen dimensions. The following functions allow
|
||||
communicating this kind of information to processes; however, not all
|
||||
systems support the underlying functionality, so it is best to provide
|
||||
fallbacks, e.g., via command-line arguments or environment variables.
|
||||
|
||||
|
|
|
@ -668,7 +668,7 @@ The strings are compared by the numeric values of their characters.
|
|||
For instance, @var{str1} is considered less than @var{str2} if
|
||||
its first differing character has a smaller numeric value. If
|
||||
@var{ignore-case} is non-@code{nil}, characters are converted to
|
||||
lower-case before comparing them. Unibyte strings are converted to
|
||||
upper-case before comparing them. Unibyte strings are converted to
|
||||
multibyte for comparison (@pxref{Text Representations}), so that a
|
||||
unibyte string and its conversion to multibyte are always regarded as
|
||||
equal.
|
||||
|
@ -685,7 +685,8 @@ specified portion) is less.
|
|||
This function works like @code{assoc}, except that @var{key} must be a
|
||||
string or symbol, and comparison is done using @code{compare-strings}.
|
||||
Symbols are converted to strings before testing.
|
||||
If @var{case-fold} is non-@code{nil}, it ignores case differences.
|
||||
If @var{case-fold} is non-@code{nil}, @var{key} and the elements of
|
||||
@var{alist} are converted to upper-case before comparison.
|
||||
Unlike @code{assoc}, this function can also match elements of the alist
|
||||
that are strings or symbols rather than conses. In particular, @var{alist} can
|
||||
be a list of strings or symbols rather than an actual alist.
|
||||
|
@ -833,7 +834,8 @@ arguments @var{objects} are the computed values to be formatted.
|
|||
|
||||
The characters in @var{string}, other than the format specifications,
|
||||
are copied directly into the output, including their text properties,
|
||||
if any.
|
||||
if any. Any text properties of the format specifications are copied
|
||||
to the produced string representations of the argument @var{objects}.
|
||||
@end defun
|
||||
|
||||
@defun format-message string &rest objects
|
||||
|
|
|
@ -1376,10 +1376,10 @@ before executing each key sequence, so that each undo normally undoes
|
|||
the effects of one command. A few exceptional commands are
|
||||
@dfn{amalgamating}: these commands generally cause small changes to
|
||||
buffers, so with these a boundary is inserted only every 20th command,
|
||||
allowing to undo them as a group. By default, commands
|
||||
allowing the changes to be undone as a group. By default, the commands
|
||||
@code{self-insert-command}, which produces self-inserting input
|
||||
characters (@pxref{Commands for Insertion}), and @code{delete-char}
|
||||
which deletes characters (@pxref{Deletion}) are amalgamating.
|
||||
characters (@pxref{Commands for Insertion}), and @code{delete-char},
|
||||
which deletes characters (@pxref{Deletion}), are amalgamating.
|
||||
Where a command affects the contents of several buffers, as may happen,
|
||||
for example, when a function on the @code{post-command-hook} affects a
|
||||
buffer other than the @code{current-buffer}, then @code{undo-boundary}
|
||||
|
@ -4614,6 +4614,9 @@ to be inserted between the textual elements.
|
|||
|
||||
@item dom-parent @var{dom} @var{node}
|
||||
Return the parent of @var{node} in @var{dom}.
|
||||
|
||||
@item dom-remove @var{dom} @var{node}
|
||||
Remove @var{node} from @var{dom}.
|
||||
@end table
|
||||
|
||||
The following are functions for altering the @acronym{DOM}.
|
||||
|
|
|
@ -6727,9 +6727,11 @@ Macros which needn't (or mustn't) be followed by a semicolon when you
|
|||
invoke them, @dfn{macros with semicolons}, are very common. These can
|
||||
cause @ccmode{} to parse the next line wrongly as a
|
||||
@code{statement-cont} (@pxref{Function Symbols}) and thus mis-indent
|
||||
it.
|
||||
it. At the top level, a macro invocation before a defun start can
|
||||
cause, for example, @code{c-beginning-of-defun} (@kbd{C-M-a}) not to
|
||||
find the correct start of the current function.
|
||||
|
||||
You can prevent this by specifying which macros have semicolons. It
|
||||
You can prevent these by specifying which macros have semicolons. It
|
||||
doesn't matter whether or not such a macro has a parameter list:
|
||||
|
||||
@defopt c-macro-names-with-semicolon
|
||||
|
|
|
@ -148,6 +148,11 @@ the beginning:
|
|||
You may wish to add such a statement to your init file, if you
|
||||
make frequent use of features from this package.
|
||||
|
||||
Code that only uses macros from this package can enclose the above in
|
||||
@code{eval-when-compile}. Internally, this library is divided into
|
||||
several files, @pxref{Organization}. Your code should only ever load
|
||||
the main @file{cl-lib} file, which will load the others as needed.
|
||||
|
||||
@node Organization
|
||||
@section Organization
|
||||
|
||||
|
@ -3364,7 +3369,7 @@ was @code{nil} for all elements.
|
|||
@defun cl-notevery predicate seq &rest more-seqs
|
||||
This function calls @var{predicate} on each element of the sequence(s)
|
||||
in turn; it returns a non-@code{nil} value as soon as @var{predicate}
|
||||
returns @code{nil} for any element, or @code{t} if the predicate was
|
||||
returns @code{nil} for any element, or @code{nil} if the predicate was
|
||||
true for all elements.
|
||||
@end defun
|
||||
|
||||
|
|
|
@ -828,6 +828,7 @@ Various
|
|||
* Thwarting Email Spam:: Simple ways to avoid unsolicited commercial email.
|
||||
* Spam Package:: A package for filtering and processing spam.
|
||||
* The Gnus Registry:: A package for tracking messages by Message-ID.
|
||||
* The Gnus Cloud:: A package for synchronizing Gnus marks.
|
||||
* Other modes:: Interaction with other modes.
|
||||
* Various Various:: Things that are really various.
|
||||
|
||||
|
@ -22208,6 +22209,7 @@ to you, using @kbd{G b u} and updating the group will usually fix this.
|
|||
* Thwarting Email Spam:: Simple ways to avoid unsolicited commercial email.
|
||||
* Spam Package:: A package for filtering and processing spam.
|
||||
* The Gnus Registry:: A package for tracking messages by Message-ID.
|
||||
* The Gnus Cloud:: A package for synchronizing Gnus marks.
|
||||
* Other modes:: Interaction with other modes.
|
||||
* Various Various:: Things that are really various.
|
||||
@end menu
|
||||
|
@ -26166,6 +26168,100 @@ default this is just @code{(marks)} so the custom registry marks are
|
|||
precious.
|
||||
@end defvar
|
||||
|
||||
@node The Gnus Cloud
|
||||
@section The Gnus Cloud
|
||||
@cindex cloud
|
||||
@cindex gnus-cloud
|
||||
@cindex synchronization
|
||||
@cindex sync
|
||||
@cindex synch
|
||||
|
||||
The Gnus Cloud is a way to synchronize marks and general files and
|
||||
data across multiple machines.
|
||||
|
||||
Very often, you want all your marks (what articles you've read, which
|
||||
ones were important, and so on) to be synchronized between several
|
||||
machines. With IMAP, that's built into the protocol, so you can read
|
||||
nnimap groups from many machines and they are automatically
|
||||
synchronized. But NNTP, nnrss, and many other backends do not store
|
||||
marks, so you have to do it locally.
|
||||
|
||||
The Gnus Cloud package stores the marks, plus any files you choose, on
|
||||
an IMAP server in a special folder. It's like a
|
||||
DropTorrentSyncBoxOakTree(TM).
|
||||
|
||||
@menu
|
||||
* Gnus Cloud Setup::
|
||||
* Gnus Cloud Usage::
|
||||
@end menu
|
||||
|
||||
@node Gnus Cloud Setup
|
||||
@subsection Gnus Cloud Setup
|
||||
|
||||
Setting up the Gnus Cloud takes less than a minute. From the Group
|
||||
buffer:
|
||||
|
||||
Press @kbd{^} to go to the Server buffer. Here you'll see all the
|
||||
servers that Gnus knows. @xref{Server Buffer}.
|
||||
|
||||
Then press @kbd{i} to mark any servers as cloud-synchronized (their marks are synchronized).
|
||||
|
||||
Then press @kbd{I} to mark a single server as the cloud host (it must
|
||||
be an IMAP server, and will host a special IMAP folder with all the
|
||||
synchronization data). This will set the variable
|
||||
@code{gnus-cloud-method} (using the Customize facilities), then ask
|
||||
you to optionally upload your first CloudSynchronizationDataPack(TM).
|
||||
|
||||
@node Gnus Cloud Usage
|
||||
@subsection Gnus Cloud Usage
|
||||
|
||||
After setting up, you can use these shortcuts from the Group buffer:
|
||||
|
||||
@table @kbd
|
||||
@item ~ RET
|
||||
@item ~ d
|
||||
@findex gnus-cloud-download-all-data
|
||||
@cindex cloud, download
|
||||
Download the latest Gnus Cloud data.
|
||||
|
||||
@item ~ u
|
||||
@item ~ ~
|
||||
@findex gnus-cloud-upload-all-data
|
||||
@cindex cloud, download
|
||||
Upload the local Gnus Cloud data. Creates a new
|
||||
CloudSynchronizationDataPack(TM).
|
||||
|
||||
@end table
|
||||
|
||||
But wait, there's more. Of course there's more. So much more. You can
|
||||
customize all of the following.
|
||||
|
||||
@defvar gnus-cloud-synced-files
|
||||
These are the files that will be part of every
|
||||
CloudSynchronizationDataPack(TM). They are included in every upload,
|
||||
so don't synchronize a lot of large files. Files under 100Kb are best.
|
||||
@end defvar
|
||||
|
||||
@defvar gnus-cloud-storage-method
|
||||
This is a choice from several storage methods. It's highly recommended
|
||||
to use the EPG facilities. It will be automatic if have GnuPG
|
||||
installed and EPG loaded. Otherwise, you could use Base64+gzip,
|
||||
Base64, or no encoding.
|
||||
@end defvar
|
||||
|
||||
@defvar gnus-cloud-interactive
|
||||
When this is set, and by default it is, the Gnus Cloud package will
|
||||
ask you for confirmation here and there. Leave it on until you're
|
||||
comfortable with the package.
|
||||
@end defvar
|
||||
|
||||
|
||||
@defvar gnus-cloud-method
|
||||
The name of the IMAP server to store the
|
||||
CloudSynchronizationDataPack(TM)s. It's easiest to set this from the
|
||||
Server buffer (@pxref{Gnus Cloud Setup}).
|
||||
@end defvar
|
||||
|
||||
@node Other modes
|
||||
@section Interaction with other modes
|
||||
|
||||
|
|
|
@ -67,7 +67,6 @@ Message mode buffers.
|
|||
* Interface:: Setting up message buffers.
|
||||
* Commands:: Commands you can execute in message mode buffers.
|
||||
* Variables:: Customizing the message buffers.
|
||||
* Compatibility:: Making Message backwards compatible.
|
||||
* Appendices:: More technical things.
|
||||
* GNU Free Documentation License:: The license for this documentation.
|
||||
* Index:: Variable, function and concept index.
|
||||
|
@ -2587,22 +2586,6 @@ An @dfn{action} can be either: a normal function, or a list where the
|
|||
a form to be @code{eval}ed.
|
||||
|
||||
|
||||
@node Compatibility
|
||||
@chapter Compatibility
|
||||
@cindex compatibility
|
||||
|
||||
Message uses virtually only its own variables---older @code{mail-}
|
||||
variables aren't consulted. To force Message to take those variables
|
||||
into account, you can put the following in your @file{.emacs} file:
|
||||
|
||||
@lisp
|
||||
(require 'messcompat)
|
||||
@end lisp
|
||||
|
||||
This will initialize many Message variables from the values in the
|
||||
corresponding mail variables.
|
||||
|
||||
|
||||
@node Appendices
|
||||
@chapter Appendices
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
% Load plain if necessary, i.e., if running under initex.
|
||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||
%
|
||||
\def\texinfoversion{2016-05-28.16}
|
||||
\def\texinfoversion{2016-06-18.21}
|
||||
%
|
||||
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
|
||||
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
|
@ -1192,6 +1192,7 @@
|
|||
\ifx\pdfescapestring\thisisundefined
|
||||
% No primitive available; should we give a warning or log?
|
||||
% Many times it won't matter.
|
||||
\xdef#1{#1}%
|
||||
\else
|
||||
% The expandable \pdfescapestring primitive escapes parentheses,
|
||||
% backslashes, and other special chars.
|
||||
|
@ -1311,8 +1312,10 @@
|
|||
% We have to set dummies so commands such as @code, and characters
|
||||
% such as \, aren't expanded when present in a section title.
|
||||
\indexnofonts
|
||||
\turnoffactive
|
||||
\makevalueexpandable
|
||||
\turnoffactive
|
||||
% Use ASCII approximations in destination names.
|
||||
\passthroughcharsfalse
|
||||
\def\pdfdestname{#1}%
|
||||
\txiescapepdf\pdfdestname
|
||||
\safewhatsit{\pdfdest name{\pdfdestname} xyz}%
|
||||
|
@ -1357,8 +1360,21 @@
|
|||
\fi
|
||||
%
|
||||
% Also escape PDF chars in the display string.
|
||||
\edef\pdfoutlinetext{#1}%
|
||||
\txiescapepdf\pdfoutlinetext
|
||||
\bgroup
|
||||
\ifx \declaredencoding \latone
|
||||
% The PDF format can use an extended form of Latin-1 in bookmark
|
||||
% strings. See Appendix D of the PDF Reference, Sixth Edition, for
|
||||
% the "PDFDocEncoding".
|
||||
\passthroughcharstrue
|
||||
\fi
|
||||
\ifx \declaredencoding \utfeight
|
||||
% TODO: the PDF format can use UTF-16 in bookmark strings, but the
|
||||
% code for this isn't done yet.
|
||||
\fi
|
||||
\globaldefs=1
|
||||
\edef\pdfoutlinetext{#1}%
|
||||
\txiescapepdf\pdfoutlinetext
|
||||
\egroup
|
||||
%
|
||||
\pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
|
||||
}
|
||||
|
@ -5948,18 +5964,32 @@
|
|||
\global\advance\dimen@ by 1pt
|
||||
\repeat
|
||||
}%
|
||||
\multiply\dimen@ii by 4
|
||||
\divide\dimen@ii by 5
|
||||
\ifdim\ht3<\dimen@ii
|
||||
% Column heights are too different, so don't make their bottoms
|
||||
% flush with each other. The glue at the end of the second column
|
||||
% allows a second column to stretch, reducing the difference in
|
||||
% height between the two.
|
||||
\setbox0=\vbox to\dimen@{\unvbox1\vfill}%
|
||||
\setbox2=\vbox to\dimen@{\unvbox3\vskip 0pt plus 0.3\ht0}%
|
||||
\ifdim2\ht1>\vsize
|
||||
% The left column has come out longer than the page itself. (Note
|
||||
% that we have doubled \vsize for the double columns, so
|
||||
% the actual height of the page is 0.5\vsize). Just split the last
|
||||
% of the double column material roughly in half.
|
||||
\setbox2=\box0
|
||||
\setbox0 = \vsplit2 to \dimen@ii
|
||||
\setbox0=\vbox to\dimen@ii{\unvbox0}%
|
||||
\setbox2=\vbox to\dimen@ii{\unvbox2}%
|
||||
\else
|
||||
\setbox0=\vbox to\dimen@{\unvbox1}%
|
||||
\setbox2=\vbox to\dimen@{\unvbox3}%
|
||||
\multiply\dimen@ii by 5
|
||||
\divide\dimen@ii by 4
|
||||
\global\setbox3 = \copy0
|
||||
\global\setbox1 = \vsplit3 to \dimen@ii
|
||||
\global\setbox\balancedcolumns=\vbox{\pagesofar}%
|
||||
\ifdim\ht3<\dimen@ii
|
||||
% Column heights are too different, so don't make their bottoms
|
||||
% flush with each other. The glue at the end of the second column
|
||||
% allows a second column to stretch, reducing the difference in
|
||||
% height between the two.
|
||||
\setbox0=\vbox to\dimen@{\unvbox1\vfill}%
|
||||
\setbox2=\vbox to\dimen@{\unvbox3\vskip 0pt plus 0.3\ht0}%
|
||||
\else
|
||||
\setbox0=\vbox to\dimen@{\unvbox1}%
|
||||
\setbox2=\vbox to\dimen@{\unvbox3}%
|
||||
\fi
|
||||
\fi
|
||||
\fi
|
||||
%
|
||||
|
@ -10250,7 +10280,7 @@
|
|||
\countUTFx = "80
|
||||
\countUTFy = "C2
|
||||
\def\UTFviiiTmp{%
|
||||
\gdef~{
|
||||
\gdef~{%
|
||||
\ifpassthroughchars $\fi}}%
|
||||
\UTFviiiLoop
|
||||
|
||||
|
@ -10301,6 +10331,15 @@
|
|||
\fi
|
||||
}
|
||||
|
||||
% These macros are used here to construct the name of a control
|
||||
% sequence to be defined.
|
||||
\def\UTFviiiTwoOctetsName#1#2{%
|
||||
\csname u8:#1\string #2\endcsname}%
|
||||
\def\UTFviiiThreeOctetsName#1#2#3{%
|
||||
\csname u8:#1\string #2\string #3\endcsname}%
|
||||
\def\UTFviiiFourOctetsName#1#2#3#4{%
|
||||
\csname u8:#1\string #2\string #3\string #4\endcsname}%
|
||||
|
||||
% For UTF-8 byte sequence (TeX, e-TeX and pdfTeX)
|
||||
% Definition macro to replace the Unicode character
|
||||
% Definition macro that is used by @U command
|
||||
|
@ -10317,17 +10356,18 @@
|
|||
\countUTFz = "#1\relax
|
||||
\begingroup
|
||||
\parseXMLCharref
|
||||
|
||||
% Give \u8:... its definition. The sequence of seven \expandafter's
|
||||
% expands after the \gdef three times, e.g.
|
||||
%
|
||||
% Access definitions of characters given UTF-8 sequences
|
||||
\def\UTFviiiTwoOctets##1##2{%
|
||||
\csname u8:##1\string ##2\endcsname}%
|
||||
\def\UTFviiiThreeOctets##1##2##3{%
|
||||
\csname u8:##1\string ##2\string ##3\endcsname}%
|
||||
\def\UTFviiiFourOctets##1##2##3##4{%
|
||||
\csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
|
||||
\expandafter\expandafter\expandafter\expandafter
|
||||
\expandafter\expandafter\expandafter
|
||||
\gdef\UTFviiiTmp{#2}%
|
||||
% 1. \UTFviiTwoOctetsName B1 B2
|
||||
% 2. \csname u8:B1 \string B2 \endcsname
|
||||
% 3. \u8: B1 B2 (a single control sequence token)
|
||||
%
|
||||
\expandafter\expandafter
|
||||
\expandafter\expandafter
|
||||
\expandafter\expandafter
|
||||
\expandafter\gdef \UTFviiiTmp{#2}%
|
||||
%
|
||||
\expandafter\ifx\csname uni:#1\endcsname \relax \else
|
||||
\message{Internal error, already defined: #1}%
|
||||
|
@ -10337,37 +10377,53 @@
|
|||
\expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
|
||||
\endgroup}
|
||||
%
|
||||
% Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp.
|
||||
% Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
|
||||
% to the corresponding UTF-8 sequence.
|
||||
\gdef\parseXMLCharref{%
|
||||
\ifnum\countUTFz < "A0\relax
|
||||
\errhelp = \EMsimple
|
||||
\errmessage{Cannot define Unicode char value < 00A0}%
|
||||
\else\ifnum\countUTFz < "800\relax
|
||||
\parseUTFviiiA,%
|
||||
\parseUTFviiiB C\UTFviiiTwoOctets.,%
|
||||
\parseUTFviiiB C\UTFviiiTwoOctetsName.,%
|
||||
\else\ifnum\countUTFz < "10000\relax
|
||||
\parseUTFviiiA;%
|
||||
\parseUTFviiiA,%
|
||||
\parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
|
||||
\parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}%
|
||||
\else
|
||||
\parseUTFviiiA;%
|
||||
\parseUTFviiiA,%
|
||||
\parseUTFviiiA!%
|
||||
\parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
|
||||
\parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}%
|
||||
\fi\fi\fi
|
||||
}
|
||||
|
||||
% Extract a byte from the end of the UTF-8 representation of \countUTFx.
|
||||
% It must be a non-initial byte in the sequence.
|
||||
% Change \uccode of #1 for it to be used in \parseUTFviiiB as one
|
||||
% of the bytes.
|
||||
\gdef\parseUTFviiiA#1{%
|
||||
\countUTFx = \countUTFz
|
||||
\divide\countUTFz by 64
|
||||
\countUTFy = \countUTFz
|
||||
\countUTFy = \countUTFz % Save to be the future value of \countUTFz.
|
||||
\multiply\countUTFz by 64
|
||||
|
||||
% \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract
|
||||
% in order to get the last five bits.
|
||||
\advance\countUTFx by -\countUTFz
|
||||
|
||||
% Convert this to the byte in the UTF-8 sequence.
|
||||
\advance\countUTFx by 128
|
||||
\uccode `#1\countUTFx
|
||||
\countUTFz = \countUTFy}
|
||||
|
||||
% Used to set \UTFviiiTmp to a UTF-8 byte sequence
|
||||
% Used to put a UTF-8 byte sequence into \UTFviiiTmp
|
||||
% #1 is the increment for \countUTFz to yield a the first byte of the UTF-8
|
||||
% sequence.
|
||||
% #2 is one of the \UTFviii*OctetsName macros.
|
||||
% #3 is always a full stop (.)
|
||||
% #4 is a template for the other bytes in the sequence. The values for these
|
||||
% bytes is substituted in here with \uppercase using the \uccode's.
|
||||
\gdef\parseUTFviiiB#1#2#3#4{%
|
||||
\advance\countUTFz by "#10\relax
|
||||
\uccode `#3\countUTFz
|
||||
|
|
|
@ -565,7 +565,7 @@ remote host.
|
|||
@command{ssh} can also take extra parameters as port numbers. For
|
||||
example, a host on port 42 is specified as @file{host#42} (the real
|
||||
host name, a hash sign, then a port number). It is the same as passing
|
||||
@code{-p 42} to the @command{ssh} command.
|
||||
@samp{-p 42} to the @command{ssh} command.
|
||||
|
||||
@item @option{telnet}
|
||||
@cindex method telnet
|
||||
|
@ -832,7 +832,7 @@ Since SMB shares end in the @code{$} character, @value{tramp} must use
|
|||
substitutions.
|
||||
|
||||
When @value{tramp} is not specific about the share name or uses the
|
||||
generic remote directory @code{/}, @command{smbclient} returns all
|
||||
generic remote directory @file{/}, @command{smbclient} returns all
|
||||
available shares.
|
||||
|
||||
Since SMB authentication is based on each SMB share, @value{tramp}
|
||||
|
@ -957,6 +957,22 @@ syntax requires a leading volume (share) name, for example:
|
|||
based on standard protocols, such as HTTP@. @option{davs} does the same
|
||||
but with SSL encryption. Both methods support the port numbers.
|
||||
|
||||
@item @option{gdrive}
|
||||
@cindex method gdrive
|
||||
@cindex gdrive method
|
||||
@cindex Google Drive
|
||||
|
||||
Via the @option{gdrive} method it is possible to access your Google
|
||||
Drive online storage. User and host name of the remote file name are
|
||||
your email address of the Google Drive credentials, like
|
||||
@file{@trampfn{gdrive,john.doe@@gmail.com,/}}. These credentials must
|
||||
be populated in your @command{Online Accounts} application outside Emacs.
|
||||
|
||||
Since Google Drive uses cryptic blob file names internally,
|
||||
@value{tramp} works with the @code{display-name} of the files. This
|
||||
could produce unexpected behaviour in case two files in the same
|
||||
directory have the same @code{display-name}, such a situation must be avoided.
|
||||
|
||||
@item @option{obex}
|
||||
@cindex method obex
|
||||
@cindex obex method
|
||||
|
@ -986,8 +1002,8 @@ requires the SYNCE-GVFS plugin.
|
|||
@vindex tramp-gvfs-methods
|
||||
This custom option is a list of external methods for GVFS@. By
|
||||
default, this list includes @option{afp}, @option{dav}, @option{davs},
|
||||
@option{obex}, @option{sftp} and @option{synce}. Other methods to
|
||||
include are: @option{ftp} and @option{smb}.
|
||||
@option{gdrive}, @option{obex}, @option{sftp} and @option{synce}.
|
||||
Other methods to include are: @option{ftp} and @option{smb}.
|
||||
@end defopt
|
||||
|
||||
|
||||
|
@ -1650,13 +1666,16 @@ shown below for @value{tramp} to use when connecting.
|
|||
|
||||
Another way to find the remote path is to use the path assigned to the
|
||||
remote user by the remote host. @value{tramp} does not normally retain
|
||||
this remote path after logging. However, @code{tramp-own-remote-path}
|
||||
this remote path after login. However, @code{tramp-own-remote-path}
|
||||
preserves the path value, which can be used to update
|
||||
@code{tramp-remote-path}.
|
||||
|
||||
@lisp
|
||||
(add-to-list 'tramp-remote-path 'tramp-own-remote-path)
|
||||
@end lisp
|
||||
|
||||
@strong{Note} that this works only if your remote @command{/bin/sh}
|
||||
shell supports the login argument @samp{-l}.
|
||||
@end defopt
|
||||
|
||||
When remote search paths are changed, local @value{tramp} caches must
|
||||
|
@ -1848,7 +1867,7 @@ install and execute a listener as follows (see @code{tramp-methods}):
|
|||
@end example
|
||||
|
||||
The above command-line syntax has changed with @command{busybox}
|
||||
versions. If @command{nc} refuses the @command{-p} parameter, then
|
||||
versions. If @command{nc} refuses the @samp{-p} parameter, then
|
||||
overwrite as follows:
|
||||
|
||||
@lisp
|
||||
|
@ -1876,9 +1895,9 @@ Applications such as @code{SSHDroid} that run @command{sshd} process
|
|||
on the Android device can accept any @option{ssh}-based methods
|
||||
provided these settings are adjusted:
|
||||
|
||||
@code{sh} must be specified for remote shell since Android devices do
|
||||
not provide @code{/bin/sh}. @code{sh} will then invoke whatever shell is
|
||||
installed on the device with this setting:
|
||||
@command{sh} must be specified for remote shell since Android devices
|
||||
do not provide @command{/bin/sh}. @command{sh} will then invoke
|
||||
whatever shell is installed on the device with this setting:
|
||||
|
||||
@lisp
|
||||
(add-to-list 'tramp-connection-properties
|
||||
|
@ -2854,9 +2873,9 @@ To test if this is the case, open a remote shell and check if the output
|
|||
of @command{ls} is in color.
|
||||
|
||||
To disable @acronym{ANSI} escape sequences from the remote hosts,
|
||||
disable @option{--color=yes} or @option{--color=auto} in the remote
|
||||
host's @file{.bashrc} or @file{.profile}. Turn this alias on and off
|
||||
to see if file name completion works.
|
||||
disable @samp{--color=yes} or @samp{--color=auto} in the remote host's
|
||||
@file{.bashrc} or @file{.profile}. Turn this alias on and off to see
|
||||
if file name completion works.
|
||||
|
||||
@item
|
||||
File name completion does not work in directories with large number of
|
||||
|
@ -2869,7 +2888,7 @@ shell's limit on length of command lines and hang. @value{tramp} uses
|
|||
globbing.
|
||||
|
||||
To test if globbing hangs, open a shell on the remote host and then
|
||||
run @samp{ls -d * ..?* > /dev/null}.
|
||||
run @command{ls -d * ..?* > /dev/null}.
|
||||
|
||||
When testing, ensure the remote shell is the same shell
|
||||
(@command{/bin/sh}, @command{ksh} or @command{bash}), that
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
@c In the Tramp GIT, the version number is auto-frobbed from
|
||||
@c configure.ac, so you should edit that file and run
|
||||
@c "autoconf && ./configure" to change the version number.
|
||||
@set trampver 2.3.0-pre
|
||||
@set trampver 2.3.1-pre
|
||||
|
||||
@c Other flags from configuration
|
||||
@set instprefix /usr/local
|
||||
|
|
17
etc/AUTHORS
17
etc/AUTHORS
|
@ -351,14 +351,13 @@ and changed ada-mode.texi frames.texi generic-x.el texinfo.el
|
|||
|
||||
Artem Chuprina: changed message.el
|
||||
|
||||
Artur Malabarba: wrote character-fold-tests.el faces-tests.el
|
||||
isearch-tests.el let-alist.el simple-test.el sort-tests.el
|
||||
tabulated-list-test.el
|
||||
and changed package.el isearch.el character-fold.el files.el
|
||||
tabulated-list.el package-test.el menu-bar.el faces.el files-x.el
|
||||
help-fns.el replace.el align.el bytecomp.el custom.texi cl-lib-tests.el
|
||||
custom.el map.el simple.el subr-tests.el variables.texi bindings.el
|
||||
and 39 other files
|
||||
Artur Malabarba: wrote char-fold-tests.el faces-tests.el isearch-tests.el
|
||||
let-alist.el simple-test.el sort-tests.el tabulated-list-test.el
|
||||
and changed package.el isearch.el lisp/char-fold.el files.el
|
||||
tabulated-list.el package-test.el menu-bar.el
|
||||
test/automated/char-fold-tests.el faces.el files-x.el help-fns.el
|
||||
replace.el align.el bytecomp.el custom.texi cl-lib-tests.el custom.el
|
||||
map.el simple.el subr-tests.el variables.texi and 40 other files
|
||||
|
||||
Arun Persaud: changed org-agenda.el org-src.el
|
||||
|
||||
|
@ -3683,7 +3682,7 @@ Prestoo Ten: changed screen.el
|
|||
|
||||
Primoz Peterlin: changed TUTORIAL.sl
|
||||
|
||||
Przemyslaw Wojnowski: changed cl-lib-tests.el
|
||||
Przemysław Wojnowski: changed cl-lib-tests.el
|
||||
|
||||
Przemysław Wojnowski: wrote obarray-tests.el sgml-mode-tests.el
|
||||
and changed obarray.el sgml-mode.el
|
||||
|
|
79
etc/NEWS
79
etc/NEWS
|
@ -25,6 +25,9 @@ otherwise leave it unmarked.
|
|||
|
||||
* Installation Changes in Emacs 25.2
|
||||
|
||||
** By default libgnutls is now required when building Emacs.
|
||||
Use 'configure --with-gnutls=no' to build even when GnuTLS is missing.
|
||||
|
||||
** 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
|
||||
|
@ -56,6 +59,13 @@ affected by this, as SGI stopped supporting IRIX in December 2013.
|
|||
|
||||
* Changes in Emacs 25.2
|
||||
|
||||
+++
|
||||
** The new user option 'mouse-select-region-move-to-beginning'
|
||||
controls the position of point when double-clicking mouse-1 on the end
|
||||
of a parenthetical grouping or string-delimiter: the default value nil
|
||||
keeps point at the end of the region, setting it to non-nil moves
|
||||
point to the beginning of the region.
|
||||
|
||||
---
|
||||
** '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
|
||||
|
@ -187,9 +197,47 @@ questions, with a handy way to display help texts.
|
|||
'undo', undo the last replacement; bound to 'u'.
|
||||
'undo-all', undo all replacements; bound to 'U'.
|
||||
|
||||
** 'delete-trailing-whitespace' deletes whitespace after form feed.
|
||||
In modes where form feed was treated as a whitespace character,
|
||||
'delete-trailing-whitespace' would keep lines containing it unchanged.
|
||||
It now deletes whitespace after the last form feed thus behaving the
|
||||
same as in modes where the character is not whitespace.
|
||||
|
||||
|
||||
* Changes in Specialized Modes and Packages in Emacs 25.2
|
||||
|
||||
** Ibuffer
|
||||
|
||||
---
|
||||
*** A new command 'ibuffer-copy-buffername-as-kill'; bound
|
||||
to 'B'.
|
||||
|
||||
---
|
||||
*** New command 'ibuffer-change-marks'; bound to '* c'.
|
||||
|
||||
---
|
||||
*** A new command 'ibuffer-mark-by-locked' to mark
|
||||
all locked buffers; bound to '% L'.
|
||||
|
||||
---
|
||||
*** A new option 'ibuffer-locked-char' to indicate
|
||||
locked buffers; Ibuffer shows a new column displaying
|
||||
'ibuffer-locked-char' for locked buffers.
|
||||
|
||||
---
|
||||
*** A new command 'ibuffer-unmark-all-marks' to unmark
|
||||
all buffers without asking confirmation; bound to
|
||||
'U'; 'ibuffer-do-replace-regexp' bound to 'r'.
|
||||
|
||||
---
|
||||
*** A new command `ibuffer-mark-by-content-regexp' to mark buffers
|
||||
whose content matches a regexp; bound to '% g'.
|
||||
|
||||
---
|
||||
*** Two new options `ibuffer-never-search-content-name' and
|
||||
`ibuffer-never-search-content-mode' used by
|
||||
`ibuffer-mark-by-content-regexp'.
|
||||
|
||||
** Compilation mode
|
||||
|
||||
---
|
||||
|
@ -197,6 +245,14 @@ questions, with a handy way to display help texts.
|
|||
|
||||
** Dired
|
||||
|
||||
+++
|
||||
*** A New option 'dired-always-read-filesystem' default to nil.
|
||||
If non-nil, buffers visiting files are reverted before search them;
|
||||
for instance, in 'dired-mark-files-containing-regexp' a non-nil value
|
||||
of this option means the file is revisited in a temporary buffer;
|
||||
this temporary buffer is the actual buffer searched: the original buffer
|
||||
visiting the file is not modified.
|
||||
|
||||
+++
|
||||
*** In wdired, when editing files to contain slash characters,
|
||||
the resulting directories are automatically created. Whether to do
|
||||
|
@ -302,6 +358,10 @@ different group ID.
|
|||
+++
|
||||
*** New connection method "doas" for OpenBSD hosts.
|
||||
|
||||
+++
|
||||
*** New connection method "gdrive", which allows to access Google
|
||||
Drive onsite repositories.
|
||||
|
||||
---
|
||||
** 'auto-revert-use-notify' is set back to t in 'global-auto-revert-mode'.
|
||||
|
||||
|
@ -357,6 +417,13 @@ string is computed dynamically based on 'url-privacy-level'.
|
|||
colorful faces to make it more obvious to the user what the state is.
|
||||
See the 'vc-faces' customization group.
|
||||
|
||||
** CC mode
|
||||
|
||||
*** Opening a .h file will turn C or C++ mode depending on language used.
|
||||
This is done with the help of 'c-or-c++-mode' function which analyses
|
||||
contents of the buffer to determine whether it's a C or C++ source
|
||||
file.
|
||||
|
||||
|
||||
* New Modes and Packages in Emacs 25.2
|
||||
|
||||
|
@ -394,6 +461,9 @@ function 'check-declare-errmsg' has been removed.
|
|||
|
||||
* Lisp Changes in Emacs 25.2
|
||||
|
||||
** New function undo-amalgamate-change-group to get rid of undo-boundaries
|
||||
between two states.
|
||||
|
||||
** New var `definition-prefixes' is a hashtable mapping prefixes to the
|
||||
files where corresponding definitions can be found. This can be used
|
||||
to fetch definitions that are not yet loaded, for example for `C-h f'.
|
||||
|
@ -411,9 +481,6 @@ 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.
|
||||
|
@ -499,6 +566,9 @@ ABBR is a time zone abbreviation. The affected functions are
|
|||
*** New basic face 'fixed-pitch-serif', for a fixed-width font with serifs.
|
||||
The Info-quoted and tex-verbatim faces now default to inheriting from it.
|
||||
|
||||
** New built-in function `mapcan' which avoids unnecessary consing (and garbage
|
||||
collection).
|
||||
|
||||
|
||||
* Changes in Emacs 25.2 on Non-Free Operating Systems
|
||||
|
||||
|
@ -2173,7 +2243,8 @@ codeset is "UTF-8" (as in "en_US.UTF-8"). This is needed because
|
|||
MS-Windows doesn't support UTF-8 as codeset in its locales.
|
||||
|
||||
+++
|
||||
** New function 'alist-get', which is also a valid place (aka lvalue).
|
||||
** New function 'alist-get', which is a generalized variable
|
||||
suitable for use with 'setf'.
|
||||
|
||||
+++
|
||||
** New function 'funcall-interactively', which works like 'funcall'
|
||||
|
|
|
@ -388,7 +388,6 @@ w32_window_app (void)
|
|||
directly into the argv array of the child process. */
|
||||
|
||||
int w32_execvp (const char *, char **);
|
||||
extern int execvp (const char*, char **);
|
||||
|
||||
int
|
||||
w32_execvp (const char *path, char **argv)
|
||||
|
|
|
@ -491,7 +491,7 @@ write_c_args (char *func, char *buf, int minargs, int maxargs)
|
|||
{
|
||||
char *p;
|
||||
bool in_ident = false;
|
||||
char *ident_start IF_LINT (= NULL);
|
||||
char *ident_start UNINIT;
|
||||
ptrdiff_t ident_length = 0;
|
||||
|
||||
fputs ("(fn", stdout);
|
||||
|
|
|
@ -98,7 +98,7 @@ getppid (void)
|
|||
getppid_parent = OpenProcess (SYNCHRONIZE, FALSE, atoi (ppid));
|
||||
if (!getppid_parent)
|
||||
{
|
||||
printf ("Failed to open handle to parent process: %d\n",
|
||||
printf ("Failed to open handle to parent process: %lu\n",
|
||||
GetLastError ());
|
||||
exit (1);
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ getppid (void)
|
|||
return 1;
|
||||
case WAIT_FAILED:
|
||||
default:
|
||||
printf ("Checking parent status failed: %d\n", GetLastError ());
|
||||
printf ("Checking parent status failed: %lu\n", GetLastError ());
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
@ -258,16 +258,6 @@ fchown (int fd, unsigned uid, unsigned gid)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Place a wrapper around the MSVC version of ctime. It returns NULL
|
||||
on network directories, so we handle that case here.
|
||||
(Ulrich Leodolter, 1/11/95). */
|
||||
char *
|
||||
sys_ctime (const time_t *t)
|
||||
{
|
||||
char *str = (char *) ctime (t);
|
||||
return (str ? str : "Sun Jan 01 00:00:00 1970");
|
||||
}
|
||||
|
||||
FILE *
|
||||
sys_fopen (const char * path, const char * mode)
|
||||
{
|
||||
|
|
|
@ -222,24 +222,35 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
|
|||
? (a) < (min) >> (b) \
|
||||
: (max) >> (b) < (a))
|
||||
|
||||
/* True if __builtin_add_overflow (A, B, P) works when P is null. */
|
||||
#define _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL (7 <= __GNUC__)
|
||||
|
||||
/* The _GL*_OVERFLOW macros have the same restrictions as the
|
||||
*_RANGE_OVERFLOW macros, except that they do not assume that operands
|
||||
(e.g., A and B) have the same type as MIN and MAX. Instead, they assume
|
||||
that the result (e.g., A + B) has that type. */
|
||||
#define _GL_ADD_OVERFLOW(a, b, min, max) \
|
||||
((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \
|
||||
: (a) < 0 ? (b) <= (a) + (b) \
|
||||
: (b) < 0 ? (a) <= (a) + (b) \
|
||||
: (a) + (b) < (b))
|
||||
#define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \
|
||||
((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \
|
||||
: (a) < 0 ? 1 \
|
||||
: (b) < 0 ? (a) - (b) <= (a) \
|
||||
: (a) < (b))
|
||||
#define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \
|
||||
(((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \
|
||||
|| INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
|
||||
#if _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL
|
||||
# define _GL_ADD_OVERFLOW(a, b, min, max)
|
||||
__builtin_add_overflow (a, b, (__typeof__ ((a) + (b)) *) 0)
|
||||
# define _GL_SUBTRACT_OVERFLOW(a, b, min, max)
|
||||
__builtin_sub_overflow (a, b, (__typeof__ ((a) - (b)) *) 0)
|
||||
# define _GL_MULTIPLY_OVERFLOW(a, b, min, max)
|
||||
__builtin_mul_overflow (a, b, (__typeof__ ((a) * (b)) *) 0)
|
||||
#else
|
||||
# define _GL_ADD_OVERFLOW(a, b, min, max) \
|
||||
((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \
|
||||
: (a) < 0 ? (b) <= (a) + (b) \
|
||||
: (b) < 0 ? (a) <= (a) + (b) \
|
||||
: (a) + (b) < (b))
|
||||
# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \
|
||||
((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \
|
||||
: (a) < 0 ? 1 \
|
||||
: (b) < 0 ? (a) - (b) <= (a) \
|
||||
: (a) < (b))
|
||||
# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \
|
||||
(((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \
|
||||
|| INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
|
||||
#endif
|
||||
#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \
|
||||
((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \
|
||||
: (a) < 0 ? (b) <= (a) + (b) - 1 \
|
||||
|
@ -304,8 +315,12 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
|
|||
_GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
|
||||
#define INT_SUBTRACT_OVERFLOW(a, b) \
|
||||
_GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
|
||||
#define INT_NEGATE_OVERFLOW(a) \
|
||||
INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
|
||||
#if _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL
|
||||
# define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a)
|
||||
#else
|
||||
# define INT_NEGATE_OVERFLOW(a) \
|
||||
INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
|
||||
#endif
|
||||
#define INT_MULTIPLY_OVERFLOW(a, b) \
|
||||
_GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
|
||||
#define INT_DIVIDE_OVERFLOW(a, b) \
|
||||
|
@ -325,7 +340,7 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
|
|||
_GL_INT_MINIMUM (0 * (b) + (a)), \
|
||||
_GL_INT_MAXIMUM (0 * (b) + (a)))
|
||||
|
||||
/* Compute A + B, A - B, A * B, respectively, storing the result into *R.
|
||||
/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R.
|
||||
Return 1 if the result overflows. See above for restrictions. */
|
||||
#define INT_ADD_WRAPV(a, b, r) \
|
||||
_GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW)
|
||||
|
@ -350,9 +365,10 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
|
|||
# define _GL__GENERIC_BOGUS 0
|
||||
#endif
|
||||
|
||||
/* Store A <op> B into *R, where OP specifies the operation.
|
||||
BUILTIN is the builtin operation, and OVERFLOW the overflow predicate.
|
||||
See above for restrictions. */
|
||||
/* Store the low-order bits of A <op> B into *R, where OP specifies
|
||||
the operation. BUILTIN is the builtin operation, and OVERFLOW the
|
||||
overflow predicate. Return 1 if the result overflows. See above
|
||||
for restrictions. */
|
||||
#if 5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)
|
||||
# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r)
|
||||
#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
|
||||
|
@ -403,7 +419,8 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
|
|||
/* Store the low-order bits of A <op> B into *R, where the operation
|
||||
is given by OP. Use the unsigned type UT for calculation to avoid
|
||||
overflow problems. *R's type is T, with extremal values TMIN and
|
||||
TMAX. T must be a signed integer type. */
|
||||
TMAX. T must be a signed integer type. Return 1 if the result
|
||||
overflows. */
|
||||
#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
|
||||
(sizeof ((a) op (b)) < sizeof (t) \
|
||||
? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \
|
||||
|
|
|
@ -20,15 +20,13 @@
|
|||
|
||||
#include <stddef.h>
|
||||
|
||||
/* Default for (non-Clang) compilers that lack __has_builtin. */
|
||||
#ifndef __has_builtin
|
||||
# define __has_builtin(x) 0
|
||||
#endif
|
||||
|
||||
/* Return 1 if an array of N objects, each of size S, cannot exist due
|
||||
to size arithmetic overflow. S must be positive and N must be
|
||||
nonnegative. This is a macro, not a function, so that it
|
||||
works correctly even when SIZE_MAX < N.
|
||||
|
||||
/* True if N * S would overflow in a size calculation.
|
||||
This expands to a constant expression if N and S are both constants.
|
||||
By gnulib convention, SIZE_MAX represents overflow in size
|
||||
calculations, so the conservative dividend to use here is
|
||||
SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
|
||||
|
@ -36,12 +34,38 @@
|
|||
sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
|
||||
exactly-SIZE_MAX allocations on such hosts; this avoids a test and
|
||||
branch when S is known to be 1. */
|
||||
#if 5 <= __GNUC__ || __has_builtin (__builtin_mul_overflow)
|
||||
# define xalloc_oversized(n, s) \
|
||||
({ size_t __xalloc_size; __builtin_mul_overflow (n, s, &__xalloc_size); })
|
||||
#else
|
||||
# define xalloc_oversized(n, s) \
|
||||
#define __xalloc_oversized(n, s) \
|
||||
((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
|
||||
|
||||
|
||||
/* Return 1 if an array of N objects, each of size S, cannot exist due
|
||||
to size arithmetic overflow. S must be positive and N must be
|
||||
nonnegative. This is a macro, not a function, so that it
|
||||
works correctly even when SIZE_MAX < N. */
|
||||
|
||||
/* GCC 7 __builtin_mul_overflow should easily compute this. See:
|
||||
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68120 */
|
||||
#if 7 <= __GNUC__
|
||||
# define xalloc_oversized(n, s) __builtin_mul_overflow (n, s, (size_t *) NULL)
|
||||
|
||||
/* GCC 5 and Clang __builtin_mul_overflow needs a temporary, and
|
||||
should be used only for non-constant operands, so that
|
||||
xalloc_oversized is a constant expression if both arguments are.
|
||||
Do not use this if pedantic, since pedantic GCC issues a diagnostic
|
||||
for ({ ... }). */
|
||||
#elif ((5 <= __GNUC__ \
|
||||
|| (__has_builtin (__builtin_mul_overflow) \
|
||||
&& __has_builtin (__builtin_constant_p))) \
|
||||
&& !__STRICT_ANSI__)
|
||||
# define xalloc_oversized(n, s) \
|
||||
(__builtin_constant_p (n) && __builtin_constant_p (s) \
|
||||
? __xalloc_oversized (n, s) \
|
||||
: ({ size_t __xalloc_size; __builtin_mul_overflow (n, s, &__xalloc_size); }))
|
||||
|
||||
/* Other compilers use integer division; this may be slower but is
|
||||
more portable. */
|
||||
#else
|
||||
# define xalloc_oversized(n, s) __xalloc_oversized (n, s)
|
||||
#endif
|
||||
|
||||
#endif /* !XALLOC_OVERSIZED_H_ */
|
||||
|
|
|
@ -1155,7 +1155,7 @@ FILE is the file from which we obtained this token."
|
|||
(point-min)
|
||||
(point-max))))))
|
||||
|
||||
(defun auto-source--symbol-keyword (symbol)
|
||||
(defun auth-source--symbol-keyword (symbol)
|
||||
(intern (format ":%s" symbol)))
|
||||
|
||||
(defun auth-source-netrc-normalize (alist filename)
|
||||
|
@ -1191,7 +1191,7 @@ FILE is the file from which we obtained this token."
|
|||
(setq lexv (funcall token-decoder lexv)))
|
||||
lexv))))
|
||||
(setq ret (plist-put ret
|
||||
(auto-source--symbol-keyword k)
|
||||
(auth-source--symbol-keyword k)
|
||||
v))))
|
||||
ret))
|
||||
alist))
|
||||
|
@ -1268,7 +1268,7 @@ See `auth-source-search' for details on SPEC."
|
|||
;; fill in the valist with whatever data we may have from the search
|
||||
;; we complete the first value if it's a list and use the value otherwise
|
||||
(dolist (br base-required)
|
||||
(let ((val (plist-get spec (auto-source--symbol-keyword br))))
|
||||
(let ((val (plist-get spec (auth-source--symbol-keyword br))))
|
||||
(when val
|
||||
(let ((br-choice (cond
|
||||
;; all-accepting choice (predicate is t)
|
||||
|
@ -1280,7 +1280,7 @@ See `auth-source-search' for details on SPEC."
|
|||
|
||||
;; for extra required elements, see if the spec includes a value for them
|
||||
(dolist (er create-extra)
|
||||
(let ((k (auto-source--symbol-keyword er))
|
||||
(let ((k (auth-source--symbol-keyword er))
|
||||
(keys (loop for i below (length spec) by 2
|
||||
collect (nth i spec))))
|
||||
(when (memq k keys)
|
||||
|
@ -1292,7 +1292,7 @@ See `auth-source-search' for details on SPEC."
|
|||
;; take the first element if the data is a list
|
||||
(data (or (auth-source-netrc-element-or-first data)
|
||||
(plist-get current-data
|
||||
(auto-source--symbol-keyword r))))
|
||||
(auth-source--symbol-keyword r))))
|
||||
;; this is the default to be offered
|
||||
(given-default (auth-source--aget
|
||||
auth-source-creation-defaults r))
|
||||
|
@ -1382,7 +1382,7 @@ See `auth-source-search' for details on SPEC."
|
|||
|
||||
(when data
|
||||
(setq artificial (plist-put artificial
|
||||
(auto-source--symbol-keyword r)
|
||||
(auth-source--symbol-keyword r)
|
||||
(if (eq r 'secret)
|
||||
(lexical-let ((data data))
|
||||
(lambda () data))
|
||||
|
@ -1840,7 +1840,7 @@ entries for git.gnus.org:
|
|||
|
||||
(defun auth-source-macos-keychain-result-append (result generic k v)
|
||||
(push v result)
|
||||
(push (auto-source--symbol-keyword
|
||||
(push (auth-source--symbol-keyword
|
||||
(cond
|
||||
((equal k "acct") "user")
|
||||
;; for generic keychains, creator is host, service is port
|
||||
|
@ -1957,7 +1957,7 @@ entries for git.gnus.org:
|
|||
;; fill in the valist with whatever data we may have from the search
|
||||
;; we complete the first value if it's a list and use the value otherwise
|
||||
(dolist (br base-required)
|
||||
(let ((val (plist-get spec (auto-source--symbol-keyword br))))
|
||||
(let ((val (plist-get spec (auth-source--symbol-keyword br))))
|
||||
(when val
|
||||
(let ((br-choice (cond
|
||||
;; all-accepting choice (predicate is t)
|
||||
|
@ -1969,7 +1969,7 @@ entries for git.gnus.org:
|
|||
|
||||
;; for extra required elements, see if the spec includes a value for them
|
||||
(dolist (er create-extra)
|
||||
(let ((k (auto-source--symbol-keyword er))
|
||||
(let ((k (auth-source--symbol-keyword er))
|
||||
(keys (loop for i below (length spec) by 2
|
||||
collect (nth i spec))))
|
||||
(when (memq k keys)
|
||||
|
@ -1981,7 +1981,7 @@ entries for git.gnus.org:
|
|||
;; take the first element if the data is a list
|
||||
(data (or (auth-source-netrc-element-or-first data)
|
||||
(plist-get current-data
|
||||
(auto-source--symbol-keyword r))))
|
||||
(auth-source--symbol-keyword r))))
|
||||
;; this is the default to be offered
|
||||
(given-default (auth-source--aget
|
||||
auth-source-creation-defaults r))
|
||||
|
@ -2041,10 +2041,10 @@ entries for git.gnus.org:
|
|||
(if (member r base-secret)
|
||||
(setq secret-artificial
|
||||
(plist-put secret-artificial
|
||||
(auto-source--symbol-keyword r)
|
||||
(auth-source--symbol-keyword r)
|
||||
data))
|
||||
(setq artificial (plist-put artificial
|
||||
(auto-source--symbol-keyword r)
|
||||
(auth-source--symbol-keyword r)
|
||||
data))))))
|
||||
(plstore-put (oref backend data)
|
||||
(sha1 (format "%s@%s:%s"
|
||||
|
|
|
@ -1633,6 +1633,7 @@ calc-kill calc-kill-region calc-yank))))
|
|||
(not (equal var '(calc-mode-save-mode)))
|
||||
(calc-save-modes))))
|
||||
(if calc-embedded-info (calc-embedded-modes-change var))
|
||||
(calc-set-mode-line)
|
||||
(symbol-value (car var)))))
|
||||
|
||||
(defun calc-toggle-banner ()
|
||||
|
|
|
@ -317,7 +317,9 @@
|
|||
(list 'calcFunc-hms a))
|
||||
((math-negp a)
|
||||
(math-neg (math-to-hms (math-neg a) ang)))
|
||||
((eq (or ang calc-angle-mode) 'rad)
|
||||
((eq (or ang
|
||||
(and (not math-simplifying-units) calc-angle-mode))
|
||||
'rad)
|
||||
(math-to-hms (math-div a (math-pi-over-180)) 'deg))
|
||||
((memq (car-safe a) '(cplx polar)) a)
|
||||
(t
|
||||
|
@ -354,12 +356,16 @@
|
|||
(if (eq (car-safe a) 'sdev)
|
||||
(math-make-sdev (math-from-hms (nth 1 a) ang)
|
||||
(math-from-hms (nth 2 a) ang))
|
||||
(if (eq (or ang calc-angle-mode) 'rad)
|
||||
(if (eq (or ang
|
||||
(and (not math-simplifying-units) calc-angle-mode))
|
||||
'rad)
|
||||
(list 'calcFunc-rad a)
|
||||
(list 'calcFunc-deg a)))))
|
||||
((math-negp a)
|
||||
(math-neg (math-from-hms (math-neg a) ang)))
|
||||
((eq (or ang calc-angle-mode) 'rad)
|
||||
((eq (or ang
|
||||
(and (not math-simplifying-units) calc-angle-mode))
|
||||
'rad)
|
||||
(math-mul (math-from-hms a 'deg) (math-pi-over-180)))
|
||||
(t
|
||||
(math-add (math-div (math-add (math-div (nth 3 a)
|
||||
|
|
|
@ -763,12 +763,14 @@ If this can't be done, return NIL."
|
|||
(defun math-to-radians (a) ; [N N]
|
||||
(cond ((eq (car-safe a) 'hms)
|
||||
(math-from-hms a 'rad))
|
||||
((memq calc-angle-mode '(deg hms))
|
||||
((and (not math-simplifying-units)
|
||||
(memq calc-angle-mode '(deg hms)))
|
||||
(math-mul a (math-pi-over-180)))
|
||||
(t a)))
|
||||
|
||||
(defun math-from-radians (a) ; [N N]
|
||||
(cond ((eq calc-angle-mode 'deg)
|
||||
(cond ((and (not math-simplifying-units)
|
||||
(eq calc-angle-mode 'deg))
|
||||
(if (math-constp a)
|
||||
(math-div a (math-pi-over-180))
|
||||
(list 'calcFunc-deg a)))
|
||||
|
@ -779,14 +781,16 @@ If this can't be done, return NIL."
|
|||
(defun math-to-radians-2 (a &optional force-symbolic) ; [N N]
|
||||
(cond ((eq (car-safe a) 'hms)
|
||||
(math-from-hms a 'rad))
|
||||
((memq calc-angle-mode '(deg hms))
|
||||
((and (not math-simplifying-units)
|
||||
(memq calc-angle-mode '(deg hms)))
|
||||
(if (or calc-symbolic-mode force-symbolic)
|
||||
(math-div (math-mul a '(var pi var-pi)) 180)
|
||||
(math-mul a (math-pi-over-180))))
|
||||
(t a)))
|
||||
|
||||
(defun math-from-radians-2 (a &optional force-symbolic) ; [N N]
|
||||
(cond ((memq calc-angle-mode '(deg hms))
|
||||
(cond ((and (not math-simplifying-units)
|
||||
(memq calc-angle-mode '(deg hms)))
|
||||
(if (or calc-symbolic-mode force-symbolic)
|
||||
(math-div (math-mul 180 a) '(var pi var-pi))
|
||||
(math-div a (math-pi-over-180))))
|
||||
|
|
|
@ -191,7 +191,7 @@ TIME should be either a time value or a date-time string."
|
|||
(time-subtract nil time))
|
||||
|
||||
;;;###autoload
|
||||
(define-obsolete-function-alias 'subtract-time 'time-subtract "26.1")
|
||||
(define-obsolete-function-alias 'subtract-time 'time-subtract "25.2")
|
||||
|
||||
;;;###autoload
|
||||
(defun date-to-day (date)
|
||||
|
|
|
@ -532,9 +532,9 @@ non-nil, the amount returned will be relative to past time worked."
|
|||
(message "%s" string)
|
||||
string)))
|
||||
|
||||
(define-obsolete-function-alias 'timeclock-time-to-seconds 'float-time "26.1")
|
||||
(define-obsolete-function-alias 'timeclock-time-to-seconds 'float-time "25.2")
|
||||
(define-obsolete-function-alias 'timeclock-seconds-to-time 'seconds-to-time
|
||||
"26.1")
|
||||
"25.2")
|
||||
|
||||
;; Should today-only be removed in favor of timeclock-relative? - gm
|
||||
(defsubst timeclock-when-to-leave (&optional today-only)
|
||||
|
|
|
@ -5750,8 +5750,11 @@ With non-nil argument FILE prompt for a file and complete only
|
|||
against categories in that file; otherwise complete against all
|
||||
categories from `todo-category-completions-files'."
|
||||
;; Allow SPC to insert spaces, for adding new category names.
|
||||
(let ((map minibuffer-local-completion-map))
|
||||
(define-key map " " nil)
|
||||
(let ((minibuffer-local-completion-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(set-keymap-parent map minibuffer-local-completion-map)
|
||||
(define-key map " " nil)
|
||||
map)))
|
||||
(let* ((add (eq match-type 'add))
|
||||
(archive (eq match-type 'archive))
|
||||
(file0 (when (and file (> (length todo-files) 1))
|
||||
|
|
|
@ -64,12 +64,12 @@
|
|||
|
||||
|
||||
(defcustom project-linux-compile-target-command (concat ede-make-command " -k -C %s SUBDIRS=%s")
|
||||
"*Default command used to compile a target."
|
||||
"Default command used to compile a target."
|
||||
:group 'project-linux
|
||||
:type 'string)
|
||||
|
||||
(defcustom project-linux-compile-project-command (concat ede-make-command " -k -C %s")
|
||||
"*Default command used to compile a project."
|
||||
"Default command used to compile a project."
|
||||
:group 'project-linux
|
||||
:type 'string)
|
||||
|
||||
|
|
|
@ -53,17 +53,17 @@
|
|||
)
|
||||
|
||||
(defcustom project-am-compile-project-command nil
|
||||
"*Default command used to compile a project."
|
||||
"Default command used to compile a project."
|
||||
:group 'project-am
|
||||
:type '(choice (const nil) string))
|
||||
|
||||
(defcustom project-am-compile-target-command (concat ede-make-command " -k %s")
|
||||
"*Default command used to compile a project."
|
||||
"Default command used to compile a project."
|
||||
:group 'project-am
|
||||
:type 'string)
|
||||
|
||||
(defcustom project-am-debug-target-function 'gdb
|
||||
"*Default Emacs command used to debug a target."
|
||||
"Default Emacs command used to debug a target."
|
||||
:group 'project-am
|
||||
:type 'function) ; make this be a list some day
|
||||
|
||||
|
|
|
@ -55,12 +55,12 @@
|
|||
t)
|
||||
|
||||
(defcustom ede-simple-save-directory "~/.ede"
|
||||
"*Directory where simple EDE project overlays are saved."
|
||||
"Directory where simple EDE project overlays are saved."
|
||||
:group 'ede
|
||||
:type 'directory)
|
||||
|
||||
(defcustom ede-simple-save-file-name "ProjSimple.ede"
|
||||
"*File name used for simple project wrappers."
|
||||
"File name used for simple project wrappers."
|
||||
:group 'ede
|
||||
:type 'string)
|
||||
|
||||
|
|
|
@ -296,7 +296,7 @@ Return the defined symbol as a special spp lex token."
|
|||
;;; Conditional Skipping
|
||||
;;
|
||||
(defcustom semantic-c-obey-conditional-section-parsing-flag t
|
||||
"*Non-nil means to interpret preprocessor #if sections.
|
||||
"Non-nil means to interpret preprocessor #if sections.
|
||||
This implies that some blocks of code will not be parsed based on the
|
||||
values of the conditions in the #if blocks."
|
||||
:group 'c
|
||||
|
|
|
@ -149,8 +149,10 @@ compound strings."
|
|||
(nth 1 form))
|
||||
(t nil)))
|
||||
|
||||
(defvar semantic-elisp-store-documentation-in-tag nil
|
||||
"*When non-nil, store documentation strings in the created tags.")
|
||||
(defcustom semantic-elisp-store-documentation-in-tag nil
|
||||
"When non-nil, store documentation strings in the created tags."
|
||||
:type 'boolean
|
||||
:group 'semantic)
|
||||
|
||||
(defun semantic-elisp-do-doc (str)
|
||||
"Return STR as a documentation string IF they are enabled."
|
||||
|
|
|
@ -568,7 +568,7 @@ if INLINE, then completion is happening inline in a buffer."
|
|||
(:underline "yellow"))
|
||||
(((class color) (background light))
|
||||
(:underline "brown")))
|
||||
"*Face used to show the region being completed inline.
|
||||
"Face used to show the region being completed inline.
|
||||
The face is used in `semantic-complete-inline-tag-engine'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
@ -1370,7 +1370,7 @@ This object type doesn't do focus, so will never have a focus object."
|
|||
;; Traditional displayor
|
||||
(defcustom semantic-completion-displayor-format-tag-function
|
||||
#'semantic-format-tag-name
|
||||
"*A Tag format function to use when showing completions."
|
||||
"A Tag format function to use when showing completions."
|
||||
:group 'semantic
|
||||
:type semantic-format-tag-custom-list)
|
||||
|
||||
|
@ -1871,7 +1871,7 @@ Use this to enable custom editing.")
|
|||
|
||||
(defcustom semantic-complete-inline-analyzer-displayor-class
|
||||
'semantic-displayor-traditional
|
||||
"*Class for displayor to use with inline completion."
|
||||
"Class for displayor to use with inline completion."
|
||||
:group 'semantic
|
||||
:type semantic-complete-inline-custom-type
|
||||
)
|
||||
|
@ -2075,7 +2075,7 @@ completion works."
|
|||
|
||||
(defcustom semantic-complete-inline-analyzer-idle-displayor-class
|
||||
'semantic-displayor-ghost
|
||||
"*Class for displayor to use with inline completion at idle time."
|
||||
"Class for displayor to use with inline completion at idle time."
|
||||
:group 'semantic
|
||||
:type semantic-complete-inline-custom-type
|
||||
)
|
||||
|
|
|
@ -902,7 +902,7 @@ instead."
|
|||
This makes it appear more like the results of a `semantic-find-' call.
|
||||
This is like `semanticdb-strip-find-results', except the input list RESULTS
|
||||
will be changed."
|
||||
(apply #'nconc (mapcar #'cdr results)))
|
||||
(mapcan #'cdr results))
|
||||
|
||||
(defun semanticdb-find-results-p (resultp)
|
||||
"Non-nil if RESULTP is in the form of a semanticdb search result.
|
||||
|
|
|
@ -814,7 +814,7 @@ local variable."
|
|||
;; associated databases.
|
||||
|
||||
(defcustom semanticdb-project-roots nil
|
||||
"*List of directories, where each directory is the root of some project.
|
||||
"List of directories, where each directory is the root of some project.
|
||||
All subdirectories of a root project are considered a part of one project.
|
||||
Values in this string can be overridden by project management programs
|
||||
via the `semanticdb-project-root-functions' variable."
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
;;
|
||||
(defface semantic-decoration-on-includes
|
||||
nil
|
||||
"*Overlay Face used on includes that are not in some other state.
|
||||
"Overlay Face used on includes that are not in some other state.
|
||||
Used by the decoration style: `semantic-decoration-on-includes'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
@ -119,7 +119,7 @@ Used by the decoration style: `semantic-decoration-on-includes'."
|
|||
(:background "#900000"))
|
||||
(((class color) (background light))
|
||||
(:background "#fff0f0")))
|
||||
"*Face used to show includes that cannot be found.
|
||||
"Face used to show includes that cannot be found.
|
||||
Used by the decoration style: `semantic-decoration-on-unknown-includes'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
@ -182,7 +182,7 @@ Used by the decoration style: `semantic-decoration-on-unknown-includes'."
|
|||
(:background "#009000"))
|
||||
(((class color) (background light))
|
||||
(:background "#f0fdf0")))
|
||||
"*Face used to show includes that have no file, but do have a DB table.
|
||||
"Face used to show includes that have no file, but do have a DB table.
|
||||
Used by the decoration style: `semantic-decoration-on-fileless-includes'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
@ -245,7 +245,7 @@ Used by the decoration style: `semantic-decoration-on-fileless-includes'."
|
|||
(:background "#555500"))
|
||||
(((class color) (background light))
|
||||
(:background "#ffff55")))
|
||||
"*Face used to show includes that have not yet been parsed.
|
||||
"Face used to show includes that have not yet been parsed.
|
||||
Used by the decoration style: `semantic-decoration-on-unparsed-includes'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
|
|
@ -455,7 +455,7 @@ Does not provide overlines for prototypes.")
|
|||
(:overline "cyan"))
|
||||
(((class color) (background light))
|
||||
(:overline "blue")))
|
||||
"*Face used to show long tags in.
|
||||
"Face used to show long tags in.
|
||||
Used by decoration style: `semantic-tag-boundary'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
@ -504,7 +504,7 @@ Used by decoration style: `semantic-tag-boundary'."
|
|||
(:background "#200000"))
|
||||
(((class color) (background light))
|
||||
(:background "#8fffff")))
|
||||
"*Face used to show privately scoped tags in.
|
||||
"Face used to show privately scoped tags in.
|
||||
Used by the decoration style: `semantic-decoration-on-private-members'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
@ -526,7 +526,7 @@ Use a primary decoration."
|
|||
(:background "#000020"))
|
||||
(((class color) (background light))
|
||||
(:background "#fffff8")))
|
||||
"*Face used to show protected scoped tags in.
|
||||
"Face used to show protected scoped tags in.
|
||||
Used by the decoration style: `semantic-decoration-on-protected-members'."
|
||||
:group 'semantic-faces)
|
||||
|
||||
|
|
|
@ -559,14 +559,14 @@ Optional argument COLOR means highlight the prototype with font-lock colors."
|
|||
;;; UML display styles
|
||||
;;
|
||||
(defcustom semantic-uml-colon-string " : "
|
||||
"*String used as a color separator between parts of a UML string.
|
||||
"String used as a color separator between parts of a UML string.
|
||||
In UML, a variable may appear as `varname : type'.
|
||||
Change this variable to change the output separator."
|
||||
:group 'semantic
|
||||
:type 'string)
|
||||
|
||||
(defcustom semantic-uml-no-protection-string ""
|
||||
"*String used to describe when no protection is specified.
|
||||
"String used to describe when no protection is specified.
|
||||
Used by `semantic-format-tag-uml-protection-to-string'."
|
||||
:group 'semantic
|
||||
:type 'string)
|
||||
|
|
|
@ -146,7 +146,7 @@ Completion options are calculated with `semantic-analyze-possible-completions'."
|
|||
|
||||
(defcustom semantic-ia-completion-menu-format-tag-function
|
||||
'semantic-format-tag-uml-concise-prototype
|
||||
"*Function used to convert a tag to a string during completion."
|
||||
"Function used to convert a tag to a string during completion."
|
||||
:group 'semantic
|
||||
:type semantic-format-tag-custom-list)
|
||||
|
||||
|
|
|
@ -141,7 +141,7 @@ Use the command `semantic-idle-scheduler-mode' to change this variable.")
|
|||
(make-variable-buffer-local 'semantic-idle-scheduler-mode)
|
||||
|
||||
(defcustom semantic-idle-scheduler-max-buffer-size 0
|
||||
"*Maximum size in bytes of buffers where idle-scheduler is enabled.
|
||||
"Maximum size in bytes of buffers where idle-scheduler is enabled.
|
||||
If this value is less than or equal to 0, idle-scheduler is enabled in
|
||||
all buffers regardless of their size."
|
||||
:group 'semantic
|
||||
|
@ -303,13 +303,13 @@ call additional functions registered with the timer calls."
|
|||
;; Unlike the shorter timer, the WORK timer will kick of tasks that
|
||||
;; may take a long time to complete.
|
||||
(defcustom semantic-idle-work-parse-neighboring-files-flag nil
|
||||
"*Non-nil means to parse files in the same dir as the current buffer.
|
||||
"Non-nil means to parse files in the same dir as the current buffer.
|
||||
Disable to prevent lots of excessive parsing in idle time."
|
||||
:group 'semantic
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom semantic-idle-work-update-headers-flag nil
|
||||
"*Non-nil means to parse through header files in idle time.
|
||||
"Non-nil means to parse through header files in idle time.
|
||||
Disable to prevent idle time parsing of many files. If completion
|
||||
is called that work will be done then instead."
|
||||
:group 'semantic
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
|
||||
;;;###autoload
|
||||
(defcustom semantic-imenu-summary-function 'semantic-format-tag-abbreviate
|
||||
"*Function to use when creating items in Imenu.
|
||||
"Function to use when creating items in Imenu.
|
||||
Some useful functions are found in `semantic-format-tag-functions'."
|
||||
:group 'semantic-imenu
|
||||
:type semantic-format-tag-custom-list)
|
||||
|
@ -65,20 +65,20 @@ Some useful functions are found in `semantic-format-tag-functions'."
|
|||
|
||||
;;;###autoload
|
||||
(defcustom semantic-imenu-bucketize-file t
|
||||
"*Non-nil if tags in a file are to be grouped into buckets."
|
||||
"Non-nil if tags in a file are to be grouped into buckets."
|
||||
:group 'semantic-imenu
|
||||
:type 'boolean)
|
||||
(make-variable-buffer-local 'semantic-imenu-bucketize-file)
|
||||
|
||||
(defcustom semantic-imenu-adopt-external-members t
|
||||
"*Non-nil if types in a file should adopt externally defined members.
|
||||
"Non-nil if types in a file should adopt externally defined members.
|
||||
C++ and CLOS can define methods that are not in the body of a class
|
||||
definition."
|
||||
:group 'semantic-imenu
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom semantic-imenu-buckets-to-submenu t
|
||||
"*Non-nil if buckets of tags are to be turned into submenus.
|
||||
"Non-nil if buckets of tags are to be turned into submenus.
|
||||
This option is ignored if `semantic-imenu-bucketize-file' is nil."
|
||||
:group 'semantic-imenu
|
||||
:type 'boolean)
|
||||
|
@ -86,7 +86,7 @@ This option is ignored if `semantic-imenu-bucketize-file' is nil."
|
|||
|
||||
;;;###autoload
|
||||
(defcustom semantic-imenu-expand-type-members t
|
||||
"*Non-nil if types should have submenus with members in them."
|
||||
"Non-nil if types should have submenus with members in them."
|
||||
:group 'semantic-imenu
|
||||
:type 'boolean)
|
||||
(make-variable-buffer-local 'semantic-imenu-expand-type-members)
|
||||
|
@ -94,7 +94,7 @@ This option is ignored if `semantic-imenu-bucketize-file' is nil."
|
|||
'semantic-imenu-expand-type-members "23.2")
|
||||
|
||||
(defcustom semantic-imenu-bucketize-type-members t
|
||||
"*Non-nil if members of a type should be grouped into buckets.
|
||||
"Non-nil if members of a type should be grouped into buckets.
|
||||
A nil value means to keep them in the same order.
|
||||
Overridden to nil if `semantic-imenu-bucketize-file' is nil."
|
||||
:group 'semantic-imenu
|
||||
|
@ -104,7 +104,7 @@ Overridden to nil if `semantic-imenu-bucketize-file' is nil."
|
|||
'semantic-imenu-bucketize-type-members "23.2")
|
||||
|
||||
(defcustom semantic-imenu-sort-bucket-function nil
|
||||
"*Function to use when sorting tags in the buckets of functions.
|
||||
"Function to use when sorting tags in the buckets of functions.
|
||||
See `semantic-bucketize' and the FILTER argument for more details on this function."
|
||||
:group 'semantic-imenu
|
||||
:type '(radio (const :tag "No Sorting" nil)
|
||||
|
@ -120,7 +120,7 @@ See `semantic-bucketize' and the FILTER argument for more details on this functi
|
|||
(make-variable-buffer-local 'semantic-imenu-sort-bucket-function)
|
||||
|
||||
(defcustom semantic-imenu-index-directory nil
|
||||
"*Non nil to index the entire directory for tags.
|
||||
"Non nil to index the entire directory for tags.
|
||||
Doesn't actually parse the entire directory, but displays tags for all files
|
||||
currently listed in the current Semantic database.
|
||||
This variable has no meaning if semanticdb is not active."
|
||||
|
@ -128,7 +128,7 @@ This variable has no meaning if semanticdb is not active."
|
|||
:type 'boolean)
|
||||
|
||||
(defcustom semantic-imenu-auto-rebuild-directory-indexes nil
|
||||
"*If non-nil automatically rebuild directory index imenus.
|
||||
"If non-nil automatically rebuild directory index imenus.
|
||||
That is when a directory index imenu is updated, automatically rebuild
|
||||
other buffer local ones based on the same semanticdb."
|
||||
:group 'semantic-imenu
|
||||
|
@ -498,7 +498,7 @@ Clears all imenu menus that may be depending on the database."
|
|||
"Function to convert semantic tags into `which-function' text.")
|
||||
|
||||
(defcustom semantic-which-function-use-color nil
|
||||
"*Use color when displaying the current function with `which-function'."
|
||||
"Use color when displaying the current function with `which-function'."
|
||||
:group 'semantic-imenu
|
||||
:type 'boolean)
|
||||
|
||||
|
|
|
@ -1239,7 +1239,7 @@ of type `spp-macro-undef' is to be created."
|
|||
;; written yet.
|
||||
;;
|
||||
(defcustom semantic-lex-spp-use-headers-flag nil
|
||||
"*Non-nil means to pre-parse headers as we go.
|
||||
"Non-nil means to pre-parse headers as we go.
|
||||
For languages that use the Semantic pre-processor, this can
|
||||
improve the accuracy of parsed files where include files
|
||||
can change the state of what's parsed in the current file.
|
||||
|
@ -1306,8 +1306,10 @@ where a valid symbol is 'system, or nil."
|
|||
;;
|
||||
;; These routines are for saving macro lists into an EIEIO persistent
|
||||
;; file.
|
||||
(defvar semantic-lex-spp-macro-max-length-to-save 200
|
||||
"*Maximum length of an SPP macro before we opt to not save it.")
|
||||
(defcustom semantic-lex-spp-macro-max-length-to-save 200
|
||||
"Maximum length of an SPP macro before we opt to not save it."
|
||||
:type 'integer
|
||||
:group 'semantic)
|
||||
|
||||
;;;###autoload
|
||||
(defun semantic-lex-spp-table-write-slot-value (value)
|
||||
|
|
|
@ -739,8 +739,10 @@ a LOCAL option.")
|
|||
|
||||
;; Stack of nested blocks.
|
||||
(defvar semantic-lex-block-stack nil)
|
||||
;;(defvar semantic-lex-timeout 5
|
||||
;; "*Number of sections of lexing before giving up.")
|
||||
;;(defcustom semantic-lex-timeout 5
|
||||
;; "Number of sections of lexing before giving up."
|
||||
;; :type 'integer
|
||||
;; :group 'semantic)
|
||||
|
||||
(defsubst semantic-lex-debug-break (token)
|
||||
"Break during lexical analysis at TOKEN."
|
||||
|
|
|
@ -263,7 +263,7 @@ If ARG is positive or nil, enable, if it is negative, disable."
|
|||
'semantic-mru-bookmark-mode (if global-semantic-mru-bookmark-mode 1 -1)))
|
||||
|
||||
(defcustom semantic-mru-bookmark-mode-hook nil
|
||||
"*Hook run at the end of function `semantic-mru-bookmark-mode'."
|
||||
"Hook run at the end of function `semantic-mru-bookmark-mode'."
|
||||
:group 'semantic
|
||||
:type 'hook)
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
(declare-function semanticdb-file-stream "semantic/db")
|
||||
|
||||
(defcustom semantic-sb-autoexpand-length 1
|
||||
"*Length of a semantic bucket to autoexpand in place.
|
||||
"Length of a semantic bucket to autoexpand in place.
|
||||
This will replace the named bucket that would have usually occurred here."
|
||||
:group 'speedbar
|
||||
:type 'integer)
|
||||
|
@ -49,12 +49,12 @@ Make this buffer local for modes that have different types of tags
|
|||
that should be ignored.")
|
||||
|
||||
(defcustom semantic-sb-button-format-tag-function 'semantic-format-tag-abbreviate
|
||||
"*Function called to create the text for a but from a token."
|
||||
"Function called to create the text for a but from a token."
|
||||
:group 'speedbar
|
||||
:type semantic-format-tag-custom-list)
|
||||
|
||||
(defcustom semantic-sb-info-format-tag-function 'semantic-format-tag-summarize
|
||||
"*Function called to create the text for info display from a token."
|
||||
"Function called to create the text for info display from a token."
|
||||
:group 'speedbar
|
||||
:type semantic-format-tag-custom-list)
|
||||
|
||||
|
|
|
@ -76,10 +76,12 @@
|
|||
(declare-function ede-up-directory "ede/files")
|
||||
|
||||
;;; Code:
|
||||
(defvar semantic-symref-tool 'detect
|
||||
"*The active symbol reference tool name.
|
||||
(defcustom semantic-symref-tool 'detect
|
||||
"The active symbol reference tool name.
|
||||
The tool symbol can be 'detect, or a symbol that is the name of
|
||||
a tool that can be used for symbol referencing.")
|
||||
a tool that can be used for symbol referencing."
|
||||
:type 'symbol
|
||||
:group 'semantic)
|
||||
(make-variable-buffer-local 'semantic-symref-tool)
|
||||
|
||||
;;; TOOL SETUP
|
||||
|
|
|
@ -81,7 +81,7 @@ Optional argument MODE specifies the `major-mode' to test."
|
|||
(if (null (cdr args))
|
||||
args
|
||||
`("(" ,@args
|
||||
,@(apply #'nconc (mapcar (lambda (s) `("-o" "-name" ,s)) pat))
|
||||
,@(mapcan (lambda (s) `("-o" "-name" ,s)) pat)
|
||||
")"))))))
|
||||
|
||||
(defvar grepflags)
|
||||
|
|
|
@ -187,8 +187,10 @@ If optional LEFT is non-nil insert spaces on left."
|
|||
(defvar wisent-new-log-flag nil
|
||||
"Non-nil means to start a new report.")
|
||||
|
||||
(defvar wisent-verbose-flag nil
|
||||
"*Non-nil means to report verbose information on generated parser.")
|
||||
(defcustom wisent-verbose-flag nil
|
||||
"Non-nil means to report verbose information on generated parser."
|
||||
:group 'wisent
|
||||
:type 'boolean)
|
||||
|
||||
(defun wisent-toggle-verbose-flag ()
|
||||
"Toggle whether to report verbose information on generated parser."
|
||||
|
@ -2261,12 +2263,14 @@ tables so that there is no longer a conflict."
|
|||
(setq i (1+ i))))
|
||||
rrc-count))
|
||||
|
||||
(defvar wisent-expected-conflicts nil
|
||||
"*If non-nil suppress the warning about shift/reduce conflicts.
|
||||
(defcustom wisent-expected-conflicts nil
|
||||
"If non-nil suppress the warning about shift/reduce conflicts.
|
||||
It is a decimal integer N that says there should be no warning if
|
||||
there are N shift/reduce conflicts and no reduce/reduce conflicts. A
|
||||
warning is given if there are either more or fewer conflicts, or if
|
||||
there are any reduce/reduce conflicts.")
|
||||
there are any reduce/reduce conflicts."
|
||||
:group 'wisent
|
||||
:type '(choice (const nil) integer))
|
||||
|
||||
(defun wisent-total-conflicts ()
|
||||
"Report the total number of conflicts."
|
||||
|
|
|
@ -127,8 +127,9 @@ POSITIONS are available."
|
|||
(apply #'max (mapcar #'cdr pl))))))
|
||||
|
||||
;;; Reporting
|
||||
(defvar wisent-parse-verbose-flag nil
|
||||
"*Non-nil means to issue more messages while parsing.")
|
||||
(defcustom wisent-parse-verbose-flag nil
|
||||
"Non-nil means to issue more messages while parsing."
|
||||
:type 'boolean)
|
||||
|
||||
(defun wisent-parse-toggle-verbose-flag ()
|
||||
"Toggle whether to issue more messages while parsing."
|
||||
|
|
|
@ -55,7 +55,7 @@ Once an insertion set is done, these fields will be activated.")
|
|||
(:underline "green"))
|
||||
(((class color) (background light))
|
||||
(:underline "green4")))
|
||||
"*Face used to specify editable fields from a template."
|
||||
"Face used to specify editable fields from a template."
|
||||
:group 'semantic-faces)
|
||||
|
||||
(defcustom srecode-fields-exit-confirmation nil
|
||||
|
|
|
@ -197,10 +197,6 @@
|
|||
:link '(custom-manual "(emacs)Emulation")
|
||||
:group 'editing)
|
||||
|
||||
(defgroup mouse nil
|
||||
"Mouse support."
|
||||
:group 'editing)
|
||||
|
||||
(defgroup outlines nil
|
||||
"Support for hierarchical outlining."
|
||||
:group 'wp)
|
||||
|
@ -406,10 +402,6 @@
|
|||
"Input from the keyboard."
|
||||
:group 'environment)
|
||||
|
||||
(defgroup mouse nil
|
||||
"Input from the mouse."
|
||||
:group 'environment)
|
||||
|
||||
(defgroup menu nil
|
||||
"Input from the menus."
|
||||
:group 'environment)
|
||||
|
@ -1072,9 +1064,10 @@ are shown; the contents of those subgroups are initially hidden."
|
|||
|
||||
;;;###autoload
|
||||
(defun customize-mode (mode)
|
||||
"Customize options related to the current major mode.
|
||||
If a prefix \\[universal-argument] was given (or if the current major mode has no known group),
|
||||
then prompt for the MODE to customize."
|
||||
"Customize options related to a major or minor mode.
|
||||
By default the current major mode is used. With a prefix
|
||||
argument or if the current major mode has no known group, prompt
|
||||
for the MODE to customize."
|
||||
(interactive
|
||||
(list
|
||||
(let ((completion-regexp-list '("-mode\\'"))
|
||||
|
@ -1083,8 +1076,8 @@ then prompt for the MODE to customize."
|
|||
major-mode
|
||||
(intern
|
||||
(completing-read (if group
|
||||
(format "Major mode (default %s): " major-mode)
|
||||
"Major mode: ")
|
||||
(format "Mode (default %s): " major-mode)
|
||||
"Mode: ")
|
||||
obarray
|
||||
'custom-group-of-mode
|
||||
t nil nil (if group (symbol-name major-mode))))))))
|
||||
|
|
|
@ -312,7 +312,7 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
|
|||
(const :tag "Always" t)
|
||||
(repeat (symbol :tag "Parameter")))
|
||||
"25.1")
|
||||
(tooltip-reuse-hidden-frame tooltip boolean "26.1")
|
||||
(tooltip-reuse-hidden-frame tooltip boolean "25.2")
|
||||
;; fringe.c
|
||||
(overflow-newline-into-fringe fringe boolean)
|
||||
;; image.c
|
||||
|
|
|
@ -277,12 +277,12 @@ This function is semi-obsolete. Use `get-char-code-property'."
|
|||
'general-category (intern val))
|
||||
val)))
|
||||
(list "Combining class"
|
||||
(let ((val (nth 1 fields)))
|
||||
(let ((val (nth 2 fields)))
|
||||
(or (char-code-property-description
|
||||
'canonical-combining-class (intern val))
|
||||
val)))
|
||||
(list "Bidi category"
|
||||
(let ((val (nth 1 fields)))
|
||||
(let ((val (nth 3 fields)))
|
||||
(or (char-code-property-description
|
||||
'bidi-class (intern val))
|
||||
val)))
|
||||
|
|
|
@ -1402,7 +1402,7 @@ after that many seconds of idle time."
|
|||
(or coding-system-for-read
|
||||
(cdr (assq 'buffer-file-coding-system
|
||||
desktop-buffer-locals))))
|
||||
(buf (find-file-noselect buffer-filename)))
|
||||
(buf (find-file-noselect buffer-filename :nowarn)))
|
||||
(condition-case nil
|
||||
(switch-to-buffer buf)
|
||||
(error (pop-to-buffer buf)))
|
||||
|
|
|
@ -39,7 +39,6 @@
|
|||
;; 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.
|
||||
|
@ -2763,7 +2762,7 @@ REGEXP should use constructs supported by your local `grep' command."
|
|||
(lambda (s) (concat s "/"))
|
||||
grep-find-ignored-directories)
|
||||
grep-find-ignored-files))
|
||||
(xrefs (cl-mapcan
|
||||
(xrefs (mapcan
|
||||
(lambda (file)
|
||||
(xref-collect-matches regexp "*" file
|
||||
(and (file-directory-p file)
|
||||
|
|
|
@ -255,6 +255,18 @@ new Dired buffers."
|
|||
:version "24.4"
|
||||
:group 'dired)
|
||||
|
||||
(defcustom dired-always-read-filesystem nil
|
||||
"Non-nil means revert buffers visiting files before searching them.
|
||||
By default, commands like `dired-mark-files-containing-regexp' will
|
||||
search any buffers visiting the marked files without reverting them,
|
||||
even if they were changed on disk. When this option is non-nil, such
|
||||
buffers are always reverted in a temporary buffer before searching
|
||||
them: the search is performed on the temporary buffer, the original
|
||||
buffer visiting the file is not modified."
|
||||
:type 'boolean
|
||||
:version "25.2"
|
||||
:group 'dired)
|
||||
|
||||
;; Internal variables
|
||||
|
||||
(defvar dired-marker-char ?* ; the answer is 42
|
||||
|
@ -303,7 +315,7 @@ The directory name must be absolute, but need not be fully expanded.")
|
|||
|
||||
(put 'dired-actual-switches 'safe-local-variable 'dired-safe-switches-p)
|
||||
|
||||
(defvar dired-re-inode-size "[0-9 \t]*"
|
||||
(defvar dired-re-inode-size "[0-9 \t]*[.,0-9]*[BkKMGTPEZY]?[ \t]*"
|
||||
"Regexp for optional initial inode and file size as made by `ls -i -s'.")
|
||||
|
||||
;; These regexps must be tested at beginning-of-line, but are also
|
||||
|
@ -3359,7 +3371,8 @@ object files--just `.o' will mark more than you might think."
|
|||
A prefix argument means to unmark them instead.
|
||||
`.' and `..' are never marked.
|
||||
|
||||
Note that if a file is visited in an Emacs buffer, this command will
|
||||
Note that if a file is visited in an Emacs buffer, and
|
||||
`dired-always-read-filesystem' is nil, this command will
|
||||
look in the buffer without revisiting the file, so the results might
|
||||
be inconsistent with the file on disk if its contents has changed
|
||||
since it was last visited."
|
||||
|
@ -3379,7 +3392,7 @@ since it was last visited."
|
|||
(message "Checking %s" fn)
|
||||
;; For now we do it inside emacs
|
||||
;; Grep might be better if there are a lot of files
|
||||
(if prebuf
|
||||
(if (and prebuf (not dired-always-read-filesystem))
|
||||
(with-current-buffer prebuf
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
|
|
11
lisp/dom.el
11
lisp/dom.el
|
@ -139,6 +139,16 @@ ATTRIBUTE would typically be `class', `id' or the like."
|
|||
(cons dom matches)
|
||||
matches)))
|
||||
|
||||
(defun dom-remove-node (dom node)
|
||||
"Remove NODE from DOM."
|
||||
;; If we're removing the top level node, just return nil.
|
||||
(dolist (child (dom-children dom))
|
||||
(cond
|
||||
((eq node child)
|
||||
(delq node dom))
|
||||
((not (stringp child))
|
||||
(dom-remove-node child node)))))
|
||||
|
||||
(defun dom-parent (dom node)
|
||||
"Return the parent of NODE in DOM."
|
||||
(if (memq node (dom-children dom))
|
||||
|
@ -151,6 +161,7 @@ ATTRIBUTE would typically be `class', `id' or the like."
|
|||
result)))
|
||||
|
||||
(defun dom-previous-sibling (dom node)
|
||||
"Return the previous sibling of NODE in DOM."
|
||||
(when-let (parent (dom-parent dom node))
|
||||
(let ((siblings (dom-children parent))
|
||||
(previous nil))
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
:group 'mail)
|
||||
|
||||
(defcustom ecomplete-database-file "~/.ecompleterc"
|
||||
"*The name of the file to store the ecomplete data."
|
||||
"The name of the file to store the ecomplete data."
|
||||
:group 'ecomplete
|
||||
:type 'file)
|
||||
|
||||
|
|
|
@ -736,20 +736,22 @@ FILE's modification time."
|
|||
package--builtin-versions))
|
||||
(princ "\n")))))
|
||||
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(skip-chars-forward " \t\n\f")
|
||||
(cond
|
||||
((looking-at (regexp-quote generate-autoload-cookie))
|
||||
;; If not done yet, figure out where to insert this text.
|
||||
(unless output-start
|
||||
(setq output-start (autoload--setup-output
|
||||
otherbuf outbuf absfile load-name)))
|
||||
(autoload--print-cookie-text output-start load-name file))
|
||||
((looking-at ";")
|
||||
;; Don't read the comment.
|
||||
(forward-line 1))
|
||||
(t
|
||||
;; Do not insert autoload entries for excluded files.
|
||||
(unless (member absfile autoload-excludes)
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(skip-chars-forward " \t\n\f")
|
||||
(cond
|
||||
((looking-at (regexp-quote generate-autoload-cookie))
|
||||
;; If not done yet, figure out where to insert this text.
|
||||
(unless output-start
|
||||
(setq output-start (autoload--setup-output
|
||||
otherbuf outbuf absfile load-name)))
|
||||
(autoload--print-cookie-text output-start load-name file))
|
||||
((looking-at ";")
|
||||
;; Don't read the comment.
|
||||
(forward-line 1))
|
||||
(t
|
||||
;; Avoid (defvar <foo>) by requiring a trailing space.
|
||||
;; Also, ignore this prefix business
|
||||
;; for ;;;###tramp-autoload and friends.
|
||||
|
@ -767,8 +769,8 @@ FILE's modification time."
|
|||
"define-erc-response-handler"
|
||||
"defun-rcirc-command"))))
|
||||
(push (match-string 2) defs))
|
||||
(forward-sexp 1)
|
||||
(forward-line 1))))))
|
||||
(forward-sexp 1)
|
||||
(forward-line 1)))))))
|
||||
|
||||
(when (and autoload-compute-prefixes defs)
|
||||
;; This output needs to always go in the main loaddefs.el,
|
||||
|
@ -1058,9 +1060,7 @@ write its autoloads into the specified file instead."
|
|||
((not (stringp file)))
|
||||
((or (not (file-exists-p file))
|
||||
;; Remove duplicates as well, just in case.
|
||||
(member file done)
|
||||
;; If the file is actually excluded.
|
||||
(member (expand-file-name file) autoload-excludes))
|
||||
(member file done))
|
||||
;; Remove the obsolete section.
|
||||
(setq changed t)
|
||||
(autoload-remove-section (match-beginning 0)))
|
||||
|
@ -1086,7 +1086,6 @@ write its autoloads into the specified file instead."
|
|||
(let ((no-autoloads-time (or last-time '(0 0 0 0))) file-time)
|
||||
(dolist (file files)
|
||||
(cond
|
||||
((member (expand-file-name file) autoload-excludes) nil)
|
||||
;; Passing nil as second argument forces
|
||||
;; autoload-generate-file-autoloads to look for the right
|
||||
;; spot where to insert each autoloads section.
|
||||
|
|
|
@ -173,7 +173,9 @@ the elements themselves.
|
|||
(defun cl-mapcan (cl-func cl-seq &rest cl-rest)
|
||||
"Like `cl-mapcar', but nconc's together the values returned by the function.
|
||||
\n(fn FUNCTION SEQUENCE...)"
|
||||
(apply 'nconc (apply 'cl-mapcar cl-func cl-seq cl-rest)))
|
||||
(if cl-rest
|
||||
(apply 'nconc (apply 'cl-mapcar cl-func cl-seq cl-rest))
|
||||
(mapcan cl-func cl-seq)))
|
||||
|
||||
;;;###autoload
|
||||
(defun cl-mapcon (cl-func cl-list &rest cl-rest)
|
||||
|
|
|
@ -353,6 +353,26 @@ the specializer used will be the one returned by BODY."
|
|||
,nbody))))))
|
||||
(f (error "Unexpected macroexpansion result: %S" f))))))
|
||||
|
||||
(put 'cl-defmethod 'function-documentation
|
||||
'(cl--generic-make-defmethod-docstring))
|
||||
|
||||
(defun cl--generic-make-defmethod-docstring ()
|
||||
;; FIXME: Copy&paste from pcase--make-docstring.
|
||||
(let* ((main (documentation (symbol-function 'cl-defmethod) 'raw))
|
||||
(ud (help-split-fundoc main 'cl-defmethod)))
|
||||
;; So that eg emacs -Q -l cl-lib --eval "(documentation 'pcase)" works,
|
||||
;; where cl-lib is anything using pcase-defmacro.
|
||||
(require 'help-fns)
|
||||
(with-temp-buffer
|
||||
(insert (or (cdr ud) main))
|
||||
(insert "\n\n\tCurrently supported forms for TYPE:\n\n")
|
||||
(dolist (method (reverse (cl--generic-method-table
|
||||
(cl--generic 'cl-generic-generalizers))))
|
||||
(let* ((info (cl--generic-method-info method)))
|
||||
(when (nth 2 info)
|
||||
(insert (nth 2 info) "\n\n"))))
|
||||
(let ((combined-doc (buffer-string)))
|
||||
(if ud (help-add-fundoc-usage combined-doc (car ud)) combined-doc)))))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro cl-defmethod (name args &rest body)
|
||||
|
@ -370,15 +390,17 @@ modifies how the method is combined with other methods, including:
|
|||
:after - Method will be called after the primary
|
||||
:around - Method will be called around everything else
|
||||
The absence of QUALIFIER means this is a \"primary\" method.
|
||||
The set of acceptable qualifiers and their meaning is defined
|
||||
\(and can be extended) by the methods of `cl-generic-combine-methods'.
|
||||
|
||||
TYPE can be one of the basic types (see the full list and their
|
||||
hierarchy in `cl--generic-typeof-types'), CL struct type, or an
|
||||
EIEIO class.
|
||||
ARGS can also include so-called context specializers, introduced by
|
||||
`&context' (which should appear right after the mandatory arguments,
|
||||
before any &optional or &rest). They have the form (EXPR TYPE) where
|
||||
EXPR is an Elisp expression whose value should match TYPE for the
|
||||
method to be applicable.
|
||||
|
||||
Other than that, TYPE can also be of the form `(eql VAL)' in
|
||||
which case this method will be invoked when the argument is `eql'
|
||||
to VAL, or `(head VAL)', in which case the argument is required
|
||||
to be a cons with VAL as its head.
|
||||
The set of acceptable TYPEs (also called \"specializers\") is defined
|
||||
\(and can be extended) by the various methods of `cl-generic-generalizers'.
|
||||
|
||||
\(fn NAME [QUALIFIER] ARGS &rest [DOCSTRING] BODY)"
|
||||
(declare (doc-string 3) (indent 2)
|
||||
|
@ -464,7 +486,8 @@ to be a cons with VAL as its head.
|
|||
(cons method mt)
|
||||
;; Keep the ordering; important for methods with :extra qualifiers.
|
||||
(mapcar (lambda (x) (if (eq x (car me)) method x)) mt)))
|
||||
(cl-pushnew `(cl-defmethod . (,(cl--generic-name generic) . ,specializers))
|
||||
(cl-pushnew `(cl-defmethod . (,(cl--generic-name generic)
|
||||
,qualifiers . ,specializers))
|
||||
current-load-list :test #'equal)
|
||||
;; FIXME: Try to avoid re-constructing a new function if the old one
|
||||
;; is still valid (e.g. still empty method cache)?
|
||||
|
@ -737,7 +760,7 @@ methods.")
|
|||
(fset 'cl-generic-combine-methods #'cl--generic-standard-method-combination))
|
||||
|
||||
(cl-defmethod cl-generic-generalizers (specializer)
|
||||
"Support for the catch-all t specializer."
|
||||
"Support for the catch-all t specializer which always matches."
|
||||
(if (eq specializer t) (list cl--generic-t-generalizer)
|
||||
(error "Unknown specializer %S" specializer)))
|
||||
|
||||
|
@ -909,8 +932,9 @@ MET-NAME is a cons (SYMBOL . SPECIALIZERS)."
|
|||
(let* ((info (cl--generic-method-info method)))
|
||||
;; FIXME: Add hyperlinks for the types as well.
|
||||
(insert (format "%s%S" (nth 0 info) (nth 1 info)))
|
||||
(let* ((met-name (cons function
|
||||
(cl--generic-method-specializers method)))
|
||||
(let* ((met-name `(,function
|
||||
,(cl--generic-method-qualifiers method)
|
||||
. ,(cl--generic-method-specializers method)))
|
||||
(file (find-lisp-object-file-name met-name 'cl-defmethod)))
|
||||
(when file
|
||||
(insert (substitute-command-keys " in `"))
|
||||
|
@ -994,7 +1018,8 @@ The value returned is a list of elements of the form
|
|||
(lambda (tag &rest _) (if (eq (car-safe tag) 'head) (list tag))))
|
||||
|
||||
(cl-defmethod cl-generic-generalizers :extra "head" (specializer)
|
||||
"Support for the `(head VAL)' specializers."
|
||||
"Support for (head VAL) specializers.
|
||||
These match if the argument is a cons cell whose car is `eql' to VAL."
|
||||
;; We have to implement `head' here using the :extra qualifier,
|
||||
;; since we can't use the `head' specializer to implement itself.
|
||||
(if (not (eq (car-safe specializer) 'head))
|
||||
|
@ -1014,7 +1039,8 @@ The value returned is a list of elements of the form
|
|||
(lambda (tag &rest _) (if (eq (car-safe tag) 'eql) (list tag))))
|
||||
|
||||
(cl-defmethod cl-generic-generalizers ((specializer (head eql)))
|
||||
"Support for the `(eql VAL)' specializers."
|
||||
"Support for (eql VAL) specializers.
|
||||
These match if the argument is `eql' to VAL."
|
||||
(puthash (cadr specializer) specializer cl--generic-eql-used)
|
||||
(list cl--generic-eql-generalizer))
|
||||
|
||||
|
@ -1069,7 +1095,7 @@ The value returned is a list of elements of the form
|
|||
#'cl--generic-struct-specializers)
|
||||
|
||||
(cl-defmethod cl-generic-generalizers :extra "cl-struct" (type)
|
||||
"Support for dispatch on cl-struct types."
|
||||
"Support for dispatch on types defined by `cl-defstruct'."
|
||||
(or
|
||||
(when (symbolp type)
|
||||
;; Use the "cl--struct-class*" (inlinable) functions/macros rather than
|
||||
|
@ -1113,7 +1139,8 @@ The value returned is a list of elements of the form
|
|||
(and (symbolp tag) (assq tag cl--generic-typeof-types))))
|
||||
|
||||
(cl-defmethod cl-generic-generalizers :extra "typeof" (type)
|
||||
"Support for dispatch on builtin types."
|
||||
"Support for dispatch on builtin types.
|
||||
See the full list and their hierarchy in `cl--generic-typeof-types'."
|
||||
;; FIXME: Add support for other types accepted by `cl-typep' such
|
||||
;; as `character', `atom', `face', `function', ...
|
||||
(or
|
||||
|
@ -1151,7 +1178,8 @@ The value returned is a list of elements of the form
|
|||
#'cl--generic-derived-specializers)
|
||||
|
||||
(cl-defmethod cl-generic-generalizers ((_specializer (head derived-mode)))
|
||||
"Support for the `(derived-mode MODE)' specializers."
|
||||
"Support for (derived-mode MODE) specializers.
|
||||
Used internally for the (major-mode MODE) context specializers."
|
||||
(list cl--generic-derived-generalizer))
|
||||
|
||||
(cl-generic-define-context-rewriter major-mode (mode &rest modes)
|
||||
|
|
|
@ -851,9 +851,9 @@ This is compatible with Common Lisp, but note that `defun' and
|
|||
"The Common Lisp `loop' macro.
|
||||
Valid clauses include:
|
||||
For clauses:
|
||||
for VAR from/upfrom/downfrom EXPR1 to/upto/downto/above/below EXPR2 by EXPR3
|
||||
for VAR from/upfrom/downfrom EXPR1 to/upto/downto/above/below EXPR2 [by EXPR3]
|
||||
for VAR = EXPR1 then EXPR2
|
||||
for VAR in/on/in-ref LIST by FUNC
|
||||
for VAR in/on/in-ref LIST [by FUNC]
|
||||
for VAR across/across-ref ARRAY
|
||||
for VAR being:
|
||||
the elements of/of-ref SEQUENCE [using (index VAR2)]
|
||||
|
@ -1808,6 +1808,27 @@ Labels have lexical scope and dynamic extent."
|
|||
`(throw ',catch-tag ',label))))
|
||||
,@macroexpand-all-environment)))))
|
||||
|
||||
(defun cl--prog (binder bindings body)
|
||||
(let (decls)
|
||||
(while (eq 'declare (car-safe (car body)))
|
||||
(push (pop body) decls))
|
||||
`(cl-block nil
|
||||
(,binder ,bindings
|
||||
,@(nreverse decls)
|
||||
(cl-tagbody . ,body)))))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro cl-prog (bindings &rest body)
|
||||
"Run BODY like a `cl-tagbody' after setting up the BINDINGS.
|
||||
Shorthand for (cl-block nil (let BINDINGS (cl-tagbody BODY)))"
|
||||
(cl--prog 'let bindings body))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro cl-prog* (bindings &rest body)
|
||||
"Run BODY like a `cl-tagbody' after setting up the BINDINGS.
|
||||
Shorthand for (cl-block nil (let* BINDINGS (cl-tagbody BODY)))"
|
||||
(cl--prog 'let* bindings body))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro cl-do-symbols (spec &rest body)
|
||||
"Loop over all symbols.
|
||||
|
|
|
@ -116,6 +116,16 @@
|
|||
(defun cl-reduce (cl-func cl-seq &rest cl-keys)
|
||||
"Reduce two-argument FUNCTION across SEQ.
|
||||
\nKeywords supported: :start :end :from-end :initial-value :key
|
||||
|
||||
Return the result of calling FUNCTION with the first and the
|
||||
second element of SEQ, then calling FUNCTION with that result and
|
||||
the third element of SEQ, then with that result and the fourth
|
||||
element of SEQ, etc.
|
||||
|
||||
If :INITIAL-VALUE is specified, it is added to the front of SEQ.
|
||||
If SEQ is empty, return :INITIAL-VALUE and FUNCTION is not
|
||||
called.
|
||||
|
||||
\n(fn FUNCTION SEQ [KEYWORD VALUE]...)"
|
||||
(cl--parsing-keywords (:from-end (:start 0) :end :initial-value :key) ()
|
||||
(or (listp cl-seq) (setq cl-seq (append cl-seq nil)))
|
||||
|
|
|
@ -154,7 +154,6 @@
|
|||
every
|
||||
some
|
||||
mapcon
|
||||
mapcan
|
||||
mapl
|
||||
maplist
|
||||
map
|
||||
|
|
|
@ -1065,6 +1065,7 @@ method invocation orders of the involved classes."
|
|||
(eieio--class-precedence-list (symbol-value tag))))))
|
||||
|
||||
(cl-defmethod cl-generic-generalizers :extra "class" (specializer)
|
||||
"Support for dispatch on types defined by EIEIO's `defclass'."
|
||||
;; CLHS says:
|
||||
;; A class must be defined before it can be used as a parameter
|
||||
;; specializer in a defmethod form.
|
||||
|
@ -1093,6 +1094,8 @@ method invocation orders of the involved classes."
|
|||
#'eieio--generic-subclass-specializers)
|
||||
|
||||
(cl-defmethod cl-generic-generalizers ((_specializer (head subclass)))
|
||||
"Support for (subclass CLASS) specializers.
|
||||
These match if the argument is the name of a subclass of CLASS."
|
||||
(list eieio--generic-subclass-generalizer))
|
||||
|
||||
(provide 'eieio-core)
|
||||
|
|
|
@ -285,46 +285,6 @@ BUFFER defaults to current buffer. Does not modify BUFFER."
|
|||
(kill-buffer clone)))))))
|
||||
|
||||
|
||||
(defmacro ert-with-function-mocked (name mock &rest body)
|
||||
"Mocks function NAME with MOCK and run BODY.
|
||||
|
||||
Once BODY finishes (be it normally by returning a value or
|
||||
abnormally by throwing or signaling), the old definition of
|
||||
function NAME is restored.
|
||||
|
||||
BODY may further change the mock with `fset'.
|
||||
|
||||
If MOCK is nil, the function NAME is mocked with a function
|
||||
`ert-fail'ing when called.
|
||||
|
||||
For example:
|
||||
|
||||
;; Regular use, function is mocked inside the BODY:
|
||||
(should (eq 2 (+ 1 1)))
|
||||
(ert-with-function-mocked ((+ (lambda (a b) (- a b))))
|
||||
(should (eq 0 (+ 1 1))))
|
||||
(should (eq 2 (+ 1 1)))
|
||||
|
||||
;; Macro correctly recovers from a throw or signal:
|
||||
(should
|
||||
(catch 'done
|
||||
(ert-with-function-mocked ((+ (lambda (a b) (- a b))))
|
||||
(should (eq 0 (+ 1 1))))
|
||||
(throw 'done t)))
|
||||
(should (eq 2 (+ 1 1)))
|
||||
"
|
||||
(declare (indent 2))
|
||||
(let ((old-var (make-symbol "old-var"))
|
||||
(mock-var (make-symbol "mock-var")))
|
||||
`(let ((,old-var (symbol-function (quote ,name))) (,mock-var ,mock))
|
||||
(fset (quote ,name)
|
||||
(or ,mock-var (lambda (&rest _)
|
||||
(ert-fail (concat "`" ,(symbol-name name)
|
||||
"' unexpectedly called.")))))
|
||||
(unwind-protect
|
||||
(progn ,@body)
|
||||
(fset (quote ,name) ,old-var)))))
|
||||
|
||||
(provide 'ert-x)
|
||||
|
||||
;;; ert-x.el ends here
|
||||
|
|
|
@ -261,7 +261,7 @@ Assumes the caller has bound `macroexpand-all-environment'."
|
|||
(format "%s quoted with ' rather than with #'"
|
||||
(list 'lambda (nth 1 f) '...))
|
||||
(macroexp--expand-all `(,fun ,arg1 ,f . ,args))))
|
||||
(`(funcall (,(or 'quote 'function) ,(and f (pred symbolp)) . ,_) . ,args)
|
||||
(`(funcall #',(and f (pred symbolp)) . ,args)
|
||||
;; Rewrite (funcall #'foo bar) to (foo bar), in case `foo'
|
||||
;; has a compiler-macro.
|
||||
(macroexp--expand-all `(,f . ,args)))
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
;; Author: Nicolas Petton <nicolas@petton.fr>
|
||||
;; Keywords: convenience, map, hash-table, alist, array
|
||||
;; Version: 1.0
|
||||
;; Version: 1.1
|
||||
;; Package: map
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
|
@ -43,6 +43,7 @@
|
|||
;;; Code:
|
||||
|
||||
(require 'seq)
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
|
||||
(pcase-defmacro map (&rest args)
|
||||
"Build a `pcase' pattern matching map elements.
|
||||
|
@ -200,6 +201,16 @@ MAP can be a list, hash-table or array."
|
|||
function
|
||||
map))
|
||||
|
||||
(defun map-do (function map)
|
||||
"Apply FUNCTION to each element of MAP and return nil.
|
||||
FUNCTION.is called with two arguments, the key and the value."
|
||||
(funcall (map--dispatch map
|
||||
:list #'map--do-alist
|
||||
:hash-table #'maphash
|
||||
:array #'map--do-array)
|
||||
function
|
||||
map))
|
||||
|
||||
(defun map-keys-apply (function map)
|
||||
"Return the result of applying FUNCTION to each key of MAP.
|
||||
|
||||
|
@ -249,7 +260,7 @@ MAP can be a list, hash-table or array."
|
|||
:hash-table (zerop (hash-table-count map))))
|
||||
|
||||
(defun map-contains-key (map key &optional testfn)
|
||||
"Return non-nil if MAP contain KEY, nil otherwise.
|
||||
"If MAP contain KEY return KEY, nil otherwise.
|
||||
Equality is defined by TESTFN if non-nil or by `equal' if nil.
|
||||
|
||||
MAP can be a list, hash-table or array."
|
||||
|
@ -282,27 +293,33 @@ MAP can be a list, hash-table or array."
|
|||
"Merge into a map of type TYPE all the key/value pairs in MAPS.
|
||||
|
||||
MAP can be a list, hash-table or array."
|
||||
(let (result)
|
||||
(let ((result (map-into (pop maps) type)))
|
||||
(while maps
|
||||
;; FIXME: When `type' is `list', we get an O(N^2) behavior.
|
||||
;; For small tables, this is fine, but for large tables, we
|
||||
;; should probably use a hash-table internally which we convert
|
||||
;; to an alist in the end.
|
||||
(map-apply (lambda (key value)
|
||||
(setf (map-elt result key) value))
|
||||
(pop maps)))
|
||||
(map-into result type)))
|
||||
(setf (map-elt result key) value))
|
||||
(pop maps)))
|
||||
result))
|
||||
|
||||
(defun map-merge-with (type function &rest maps)
|
||||
"Merge into a map of type TYPE all the key/value pairs in MAPS.
|
||||
When two maps contain the same key, call FUNCTION on the two
|
||||
values and use the value returned by it.
|
||||
MAP can be a list, hash-table or array."
|
||||
(let (result)
|
||||
(let ((result (map-into (pop maps) type))
|
||||
(not-found (cons nil nil)))
|
||||
(while maps
|
||||
(map-apply (lambda (key value)
|
||||
(setf (map-elt result key)
|
||||
(if (map-contains-key result key)
|
||||
(funcall function (map-elt result key) value)
|
||||
value)))
|
||||
(pop maps)))
|
||||
(map-into result type)))
|
||||
(cl-callf (lambda (old)
|
||||
(if (eq old not-found)
|
||||
value
|
||||
(funcall function old value)))
|
||||
(map-elt result key not-found)))
|
||||
(pop maps)))
|
||||
result))
|
||||
|
||||
(defun map-into (map type)
|
||||
"Convert the map MAP into a map of type TYPE.
|
||||
|
@ -347,6 +364,20 @@ MAP can be a list, hash-table or array."
|
|||
(setq index (1+ index))))
|
||||
map)))
|
||||
|
||||
(defun map--do-alist (function alist)
|
||||
"Private function used to iterate over ALIST using FUNCTION."
|
||||
(seq-do (lambda (pair)
|
||||
(funcall function
|
||||
(car pair)
|
||||
(cdr pair)))
|
||||
alist))
|
||||
|
||||
(defun map--do-array (function array)
|
||||
"Private function used to iterate over ARRAY using FUNCTION."
|
||||
(seq-do-indexed (lambda (elt index)
|
||||
(funcall function index elt))
|
||||
array))
|
||||
|
||||
(defun map--into-hash-table (map)
|
||||
"Convert MAP into a hash-table."
|
||||
(let ((ht (make-hash-table :size (map-length map)
|
||||
|
|
|
@ -114,7 +114,10 @@ Each element has the form (WHERE BYTECODE STACK) where:
|
|||
(usage (help-split-fundoc origdoc function)))
|
||||
(setq usage (if (null usage)
|
||||
(let ((arglist (help-function-arglist flist)))
|
||||
(help--make-usage-docstring function arglist))
|
||||
;; "[Arg list not available until function
|
||||
;; definition is loaded]", bug#21299
|
||||
(if (stringp arglist) t
|
||||
(help--make-usage-docstring function arglist)))
|
||||
(setq origdoc (cdr usage)) (car usage)))
|
||||
(help-add-fundoc-usage (concat docstring origdoc) usage))))
|
||||
|
||||
|
|
|
@ -103,6 +103,47 @@
|
|||
(if (integerp val) `(t . ,val) val)
|
||||
i))))
|
||||
|
||||
;; (defun radix-tree--trim (tree string i)
|
||||
;; (if (= i (length string))
|
||||
;; tree
|
||||
;; (pcase tree
|
||||
;; (`((,prefix . ,ptree) . ,rtree)
|
||||
;; (let* ((ni (+ i (length prefix)))
|
||||
;; (cmp (compare-strings prefix nil nil string i ni))
|
||||
;; ;; FIXME: We could compute nrtree more efficiently
|
||||
;; ;; whenever cmp is not -1 or 1.
|
||||
;; (nrtree (radix-tree--trim rtree string i)))
|
||||
;; (if (eq t cmp)
|
||||
;; (pcase (radix-tree--trim ptree string ni)
|
||||
;; (`nil nrtree)
|
||||
;; (`((,pprefix . ,pptree))
|
||||
;; `((,(concat prefix pprefix) . ,pptree) . ,nrtree))
|
||||
;; (nptree `((,prefix . ,nptree) . ,nrtree)))
|
||||
;; (let ((n (if (< cmp 0) (- -1 cmp) (- cmp 1))))
|
||||
;; (cond
|
||||
;; ((equal (+ n i) (length string))
|
||||
;; `((,prefix . ,ptree) . ,nrtree))
|
||||
;; (t nrtree))))))
|
||||
;; (val val))))
|
||||
|
||||
(defun radix-tree--prefixes (tree string i prefixes)
|
||||
(pcase tree
|
||||
(`((,prefix . ,ptree) . ,rtree)
|
||||
(let* ((ni (+ i (length prefix)))
|
||||
(cmp (compare-strings prefix nil nil string i ni))
|
||||
;; FIXME: We could compute prefixes more efficiently
|
||||
;; whenever cmp is not -1 or 1.
|
||||
(prefixes (radix-tree--prefixes rtree string i prefixes)))
|
||||
(if (eq t cmp)
|
||||
(radix-tree--prefixes ptree string ni prefixes)
|
||||
prefixes)))
|
||||
(val
|
||||
(if (null val)
|
||||
prefixes
|
||||
(cons (cons (substring string 0 i)
|
||||
(if (eq (car-safe val) t) (cdr val) val))
|
||||
prefixes)))))
|
||||
|
||||
(defun radix-tree--subtree (tree string i)
|
||||
(if (equal (length string) i) tree
|
||||
(pcase tree
|
||||
|
@ -143,6 +184,16 @@ If not found, return nil."
|
|||
"Return the subtree of TREE rooted at the prefix STRING."
|
||||
(radix-tree--subtree tree string 0))
|
||||
|
||||
;; (defun radix-tree-trim (tree string)
|
||||
;; "Return a TREE which only holds entries \"related\" to STRING.
|
||||
;; \"Related\" is here defined as entries where there's a `string-prefix-p' relation
|
||||
;; between STRING and the key."
|
||||
;; (radix-tree-trim tree string 0))
|
||||
|
||||
(defun radix-tree-prefixes (tree string)
|
||||
"Return an alist of all bindings in TREE for prefixes of STRING."
|
||||
(radix-tree--prefixes tree string 0 nil))
|
||||
|
||||
(eval-and-compile
|
||||
(pcase-defmacro radix-tree-leaf (vpat)
|
||||
;; FIXME: We'd like to use a negative pattern (not consp), but pcase
|
||||
|
@ -181,8 +232,15 @@ PREFIX is only used internally."
|
|||
|
||||
(defun radix-tree-count (tree)
|
||||
(let ((i 0))
|
||||
(radix-tree-iter-mappings tree (lambda (_ _) (setq i (1+ i))))
|
||||
(radix-tree-iter-mappings tree (lambda (_k _v) (setq i (1+ i))))
|
||||
i))
|
||||
|
||||
(defun radix-tree-from-map (map)
|
||||
;; Aka (cl-defmethod map-into (map (type (eql radix-tree)))) ...)
|
||||
(require 'map)
|
||||
(let ((rt nil))
|
||||
(map-apply (lambda (k v) (setq rt (radix-tree-insert rt k v))) map)
|
||||
rt))
|
||||
|
||||
(provide 'radix-tree)
|
||||
;;; radix-tree.el ends here
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
;; Author: Nicolas Petton <nicolas@petton.fr>
|
||||
;; Keywords: sequences
|
||||
;; Version: 2.14
|
||||
;; Version: 2.18
|
||||
;; Package: seq
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
|
@ -117,6 +117,16 @@ Return SEQUENCE."
|
|||
|
||||
(defalias 'seq-each #'seq-do)
|
||||
|
||||
(defun seq-do-indexed (function sequence)
|
||||
"Apply FUNCTION to each element of SEQUENCE and return nil.
|
||||
Unlike `seq-map', FUNCTION takes two arguments: the element of
|
||||
the sequence, and its index within the sequence."
|
||||
(let ((index 0))
|
||||
(seq-do (lambda (elt)
|
||||
(funcall function elt index)
|
||||
(setq index (1+ index)))
|
||||
sequence)))
|
||||
|
||||
(cl-defgeneric seqp (sequence)
|
||||
"Return non-nil if SEQUENCE is a sequence, nil otherwise."
|
||||
(sequencep sequence))
|
||||
|
@ -339,7 +349,8 @@ found or not."
|
|||
"Return the first element in SEQUENCE that is equal to ELT.
|
||||
Equality is defined by TESTFN if non-nil or by `equal' if nil."
|
||||
(seq-some (lambda (e)
|
||||
(funcall (or testfn #'equal) elt e))
|
||||
(when (funcall (or testfn #'equal) elt e)
|
||||
e))
|
||||
sequence))
|
||||
|
||||
(cl-defgeneric seq-position (sequence elt &optional testfn)
|
||||
|
@ -471,10 +482,7 @@ If no element is found, return nil."
|
|||
|
||||
(cl-defmethod seq-drop ((list list) n)
|
||||
"Optimized implementation of `seq-drop' for lists."
|
||||
(while (and list (> n 0))
|
||||
(setq list (cdr list)
|
||||
n (1- n)))
|
||||
list)
|
||||
(nthcdr n list))
|
||||
|
||||
(cl-defmethod seq-take ((list list) n)
|
||||
"Optimized implementation of `seq-take' for lists."
|
||||
|
|
|
@ -198,6 +198,171 @@ to bind a single value, BINDINGS can just be a plain tuple."
|
|||
(substring string 0 (- (length string) (length suffix)))
|
||||
string))
|
||||
|
||||
(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)))
|
||||
|
||||
(provide 'subr-x)
|
||||
|
||||
;;; subr-x.el ends here
|
||||
|
|
|
@ -316,6 +316,9 @@ END) suitable for `syntax-propertize-function'."
|
|||
(unless (eq funs
|
||||
(cdr syntax-propertize-extend-region-functions))
|
||||
(setq funs syntax-propertize-extend-region-functions)))))
|
||||
;; Flush ppss cache between the original value of `start' and that
|
||||
;; set above by syntax-propertize-extend-region-functions.
|
||||
(syntax-ppss-flush-cache start)
|
||||
;; Move the limit before calling the function, so the function
|
||||
;; can use syntax-ppss.
|
||||
(setq syntax-propertize--done end)
|
||||
|
|
|
@ -631,7 +631,7 @@
|
|||
(viper-over-whitespace-line))
|
||||
(indent-to-left-margin))
|
||||
(viper-add-newline-at-eob-if-necessary)
|
||||
(viper-complete-complex-command-for-undo)
|
||||
(viper-adjust-undo)
|
||||
|
||||
(if (eq viper-current-state 'emacs-state)
|
||||
(viper-restore-cursor-color 'after-emacs-mode)
|
||||
|
@ -1570,7 +1570,7 @@ If the prefix argument ARG is non-nil, it is used instead of `val'."
|
|||
(if (and (eolp) (not (bolp)))
|
||||
(backward-char 1))
|
||||
))
|
||||
(viper-complete-complex-command-for-undo) ; take care of undo
|
||||
(viper-adjust-undo) ; take care of undo
|
||||
;; If the prev cmd was rotating the command ring, this means that `.' has
|
||||
;; just executed a command from that ring. So, push it on the ring again.
|
||||
;; If we are just executing previous command , then don't push viper-d-com
|
||||
|
@ -1670,7 +1670,6 @@ invokes the command before that, etc."
|
|||
|
||||
(undo-start)
|
||||
(undo-more 2)
|
||||
(viper-complete-complex-command-for-undo)
|
||||
;;(setq undo-beg-posn (or undo-beg-posn (point))
|
||||
;; undo-end-posn (or undo-end-posn (point)))
|
||||
;;(setq undo-beg-posn (or undo-beg-posn before-undo-pt)
|
||||
|
@ -1710,17 +1709,21 @@ invokes the command before that, etc."
|
|||
;; The following two functions are used to set up undo properly.
|
||||
;; In VI, unlike Emacs, if you open a line, say, and add a bunch of lines,
|
||||
;; they are undone all at once.
|
||||
(defun viper-complete-complex-command-for-undo ()
|
||||
(setq undo-auto-disable-boundaries nil)
|
||||
(setq viper-undo-in-complex-command nil)
|
||||
(undo-boundary))
|
||||
(viper-deflocalvar viper--undo-change-group-handle nil)
|
||||
(put 'viper--undo-change-group-handle 'permanent-local t)
|
||||
|
||||
(defun viper-adjust-undo ()
|
||||
(when viper--undo-change-group-handle
|
||||
(undo-amalgamate-change-group
|
||||
(prog1 viper--undo-change-group-handle
|
||||
(setq viper--undo-change-group-handle nil)))))
|
||||
|
||||
(defun viper-set-complex-command-for-undo ()
|
||||
(when (not viper-undo-in-complex-command)
|
||||
(setq undo-auto-disable-boundaries t)
|
||||
(setq viper-undo-in-complex-command t)
|
||||
(undo-boundary)))
|
||||
(and (listp buffer-undo-list)
|
||||
(not viper--undo-change-group-handle)
|
||||
(setq viper--undo-change-group-handle
|
||||
(prepare-change-group))))
|
||||
|
||||
|
||||
;;; Viper's destructive Command ring utilities
|
||||
|
||||
|
@ -2588,7 +2591,7 @@ These keys are ESC, RET, and LineFeed."
|
|||
(delete-char 1 t)
|
||||
(insert char))
|
||||
|
||||
(viper-complete-complex-command-for-undo)
|
||||
(viper-adjust-undo)
|
||||
(backward-char arg)
|
||||
))
|
||||
|
||||
|
|
|
@ -369,10 +369,6 @@ Use `\\[viper-set-expert-level]' to change this.")
|
|||
|
||||
;; VI-style Undo
|
||||
|
||||
;; Used to 'undo' complex commands, such as replace and insert commands.
|
||||
(viper-deflocalvar viper-undo-in-complex-command nil)
|
||||
(put 'viper-undo-in-complex-command 'permanent-local t)
|
||||
|
||||
(defcustom viper-keep-point-on-undo nil
|
||||
"Non-nil means not to move point while undoing commands.
|
||||
This style is different from Emacs and Vi. Try it to see if
|
||||
|
@ -781,7 +777,7 @@ Related buffers can be cycled through via :R and :P commands."
|
|||
"^@end \\|" ; texinfo
|
||||
")\n\n[ \t\n]*\\|" ; lisp
|
||||
"\\.\\s-*$") ; prolog
|
||||
"*Regexps to end Headings/Sections. Used by [].")
|
||||
"Regexps to end Headings/Sections. Used by [].")
|
||||
|
||||
|
||||
;; These two vars control the interaction of jumps performed by ' and `.
|
||||
|
|
22
lisp/epg.el
22
lisp/epg.el
|
@ -604,9 +604,13 @@ callback data (if any)."
|
|||
(setq process-environment
|
||||
(cons (concat "GPG_TTY=" terminal-name)
|
||||
(cons "TERM=xterm" process-environment))))
|
||||
;; Start the Emacs Pinentry server if allow-emacs-pinentry is set
|
||||
;; in ~/.gnupg/gpg-agent.conf.
|
||||
;; Automatically start the Emacs Pinentry server if appropriate.
|
||||
(when (and (fboundp 'pinentry-start)
|
||||
;; Emacs Pinentry is useless if Emacs has no interactive session.
|
||||
(not noninteractive)
|
||||
;; Prefer pinentry-mode over Emacs Pinentry.
|
||||
(null (epg-context-pinentry-mode context))
|
||||
;; Check if the allow-emacs-pinentry option is set.
|
||||
(executable-find epg-gpgconf-program)
|
||||
(with-temp-buffer
|
||||
(when (= (call-process epg-gpgconf-program nil t nil
|
||||
|
@ -1749,12 +1753,7 @@ If optional 3rd argument MODE is t or `detached', it makes a detached signature.
|
|||
If it is nil or `normal', it makes a normal signature.
|
||||
Otherwise, it makes a cleartext signature."
|
||||
(let ((input-file
|
||||
(unless (or (eq (epg-context-protocol context) 'CMS)
|
||||
(condition-case nil
|
||||
(progn
|
||||
(epg-check-configuration (epg-configuration))
|
||||
t)
|
||||
(error)))
|
||||
(unless (eq (epg-context-protocol context) 'CMS)
|
||||
(epg--make-temp-file "epg-input")))
|
||||
(coding-system-for-write 'binary))
|
||||
(unwind-protect
|
||||
|
@ -1861,12 +1860,7 @@ If RECIPIENTS is nil, it performs symmetric encryption."
|
|||
If RECIPIENTS is nil, it performs symmetric encryption."
|
||||
(let ((input-file
|
||||
(unless (or (not sign)
|
||||
(eq (epg-context-protocol context) 'CMS)
|
||||
(condition-case nil
|
||||
(progn
|
||||
(epg-check-configuration (epg-configuration))
|
||||
t)
|
||||
(error)))
|
||||
(eq (epg-context-protocol context) 'CMS))
|
||||
(epg--make-temp-file "epg-input")))
|
||||
(coding-system-for-write 'binary))
|
||||
(unwind-protect
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue