mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
This commit is contained in:
commit
df1a71272e
202 changed files with 6981 additions and 1697 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -111,7 +111,6 @@ lisp/mh-e/mh-autoloads.el
|
|||
lisp/subdirs.el
|
||||
|
||||
# Dependencies.
|
||||
.deps/
|
||||
deps/
|
||||
|
||||
# Logs and temporaries.
|
||||
|
|
@ -138,6 +137,7 @@ gmon.out
|
|||
oo/
|
||||
oo-spd/
|
||||
src/*.map
|
||||
vgcore.*[0-9]
|
||||
|
||||
# Tests.
|
||||
test/manual/biditest.txt
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ image: debian:unstable
|
|||
|
||||
before_script:
|
||||
- apt update -qq
|
||||
- apt install -y -qq build-essential autoconf automake libncurses-dev gnutls-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y -qq -o=Dpkg::Use-Pty=0 libc-dev gcc make autoconf automake libncurses-dev gnutls-dev
|
||||
|
||||
stages:
|
||||
- test
|
||||
|
|
|
|||
170
CONTRIBUTE
170
CONTRIBUTE
|
|
@ -26,6 +26,7 @@ admin/notes/git-workflow.
|
|||
|
||||
** Getting involved with development
|
||||
|
||||
Discussion about Emacs development takes place on emacs-devel@gnu.org.
|
||||
You can subscribe to the emacs-devel@gnu.org mailing list, paying
|
||||
attention to postings with subject lines containing "emacs-announce",
|
||||
as these discuss important events like feature freezes. See
|
||||
|
|
@ -35,11 +36,85 @@ own copy of the repository, and discuss proposed changes on the
|
|||
mailing list. Frequent contributors to Emacs can request write access
|
||||
there.
|
||||
|
||||
** Committing changes by others
|
||||
Bug reports and fixes, feature requests and patches/implementations
|
||||
should be sent to bug-gnu-emacs@gnu.org, the bug/feature list. This
|
||||
is coupled to the http://debbugs.gnu.org tracker. It is best to use
|
||||
the command 'M-x report-emacs-bug RET' to report issues to the tracker
|
||||
(described below). Be prepared to receive comments and requests for
|
||||
changes in your patches, following your submission.
|
||||
|
||||
If committing changes written by someone else, commit in their name,
|
||||
not yours. You can use 'git commit --author="AUTHOR"' to specify a
|
||||
change's author.
|
||||
The Savannah info page http://savannah.gnu.org/mail/?group=emacs
|
||||
describes how to subscribe to the mailing lists, or see the list
|
||||
archives.
|
||||
|
||||
To email a patch you can use a shell command like 'git format-patch -1'
|
||||
to create a file, and then attach the file to your email. This nicely
|
||||
packages the patch's commit message and changes. To send just one
|
||||
such patch without additional remarks, you can use a command like
|
||||
'git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch'.
|
||||
|
||||
** Issue tracker (a.k.a. "bug tracker")
|
||||
|
||||
The Emacs issue tracker at http://debbugs.gnu.org lets you view bug
|
||||
reports and search the database for bugs matching several criteria.
|
||||
Messages posted to the bug-gnu-emacs@gnu.org mailing list, mentioned
|
||||
above, are recorded by the tracker with the corresponding bugs/issues.
|
||||
|
||||
GNU ELPA has a 'debbugs' package that allows accessing the tracker
|
||||
database from Emacs.
|
||||
|
||||
Bugs needs regular attention. A large backlog of bugs is
|
||||
disheartening to the developers, and a culture of ignoring bugs is
|
||||
harmful to users, who expect software that works. Bugs have to be
|
||||
regularly looked at and acted upon. Not all bugs are critical, but at
|
||||
the least, each bug needs to be regularly re-reviewed to make sure it
|
||||
is still reproducible.
|
||||
|
||||
The process of going through old or new bugs and acting on them is
|
||||
called bug triage. This process is described in the file
|
||||
admin/notes/bug-triage.
|
||||
|
||||
** Documenting your changes
|
||||
|
||||
Any change that matters to end-users should have an entry in etc/NEWS.
|
||||
|
||||
Doc-strings should be updated together with the code.
|
||||
|
||||
Think about whether your change requires updating the manuals. If you
|
||||
know it does not, mark the NEWS entry with "---". If you know
|
||||
that *all* the necessary documentation updates have been made, mark
|
||||
the entry with "+++". Otherwise do not mark it.
|
||||
|
||||
If your change requires updating the manuals to document new
|
||||
functions/commands/variables/faces, then use the proper Texinfo
|
||||
command to index them; for instance, use @vindex for variables and
|
||||
@findex for functions/commands. For the full list of predefine indices, see
|
||||
http://www.gnu.org/software/texinfo/manual/texinfo/html_node/Predefined-Indices.html
|
||||
or run the shell command 'info "(texinfo)Predefined Indices"'.
|
||||
|
||||
For more specific tips on Emacs's doc style, see
|
||||
http://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html
|
||||
Use 'checkdoc' to check for documentation errors before submitting a patch.
|
||||
|
||||
** Testing your changes
|
||||
|
||||
Please test your changes before committing them or sending them to the
|
||||
list. If possible, add a new test along with any bug fix or new
|
||||
functionality you commit (of course, some changes cannot be easily
|
||||
tested).
|
||||
|
||||
Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See
|
||||
http://www.gnu.org/software/emacs/manual/html_node/ert/
|
||||
or run 'info "(ert)"' for for more information on writing and running
|
||||
tests.
|
||||
|
||||
If your test lasts longer than some few seconds, mark it in its
|
||||
'ert-deftest' definition with ":tags '(:expensive-test)".
|
||||
|
||||
To run tests on the entire Emacs tree, run "make check" from the
|
||||
top-level directory. Most tests are in the directory "test/". From
|
||||
the "test/" directory, run "make <filename>" to run the tests for
|
||||
<filename>.el(c). See "test/README" for more information.
|
||||
|
||||
** Commit messages
|
||||
|
||||
|
|
@ -176,6 +251,12 @@ them right the first time, so here are guidelines for formatting them:
|
|||
with Emacs commands like 'C-x 4 a', and commit the change using the
|
||||
shell command 'vc-dwim --commit'. Type 'vc-dwim --help' for more.
|
||||
|
||||
** Committing changes by others
|
||||
|
||||
If committing changes written by someone else, commit in their name,
|
||||
not yours. You can use 'git commit --author="AUTHOR"' to specify a
|
||||
change's author.
|
||||
|
||||
** Branches
|
||||
|
||||
Future development normally takes place on the master branch.
|
||||
|
|
@ -218,87 +299,6 @@ This repository does not contain the Emacs Lisp package archive
|
|||
(elpa.gnu.org). See admin/notes/elpa for how to access the GNU ELPA
|
||||
repository.
|
||||
|
||||
** Emacs Mailing lists.
|
||||
|
||||
Discussion about Emacs development takes place on emacs-devel@gnu.org.
|
||||
|
||||
Bug reports and fixes, feature requests and implementations should be
|
||||
sent to bug-gnu-emacs@gnu.org, the bug/feature list. This is coupled
|
||||
to the http://debbugs.gnu.org tracker.
|
||||
|
||||
The Savannah info page http://savannah.gnu.org/mail/?group=emacs
|
||||
describes how to subscribe to the mailing lists, or see the list
|
||||
archives.
|
||||
|
||||
To email a patch you can use a shell command like 'git format-patch -1'
|
||||
to create a file, and then attach the file to your email. This nicely
|
||||
packages the patch's commit message and changes. To send just one
|
||||
such patch without additional remarks, you can use a command like
|
||||
'git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch'.
|
||||
|
||||
** Issue tracker (a.k.a. "bug tracker")
|
||||
|
||||
The Emacs issue tracker at http://debbugs.gnu.org lets you view bug
|
||||
reports and search the database for bugs matching several criteria.
|
||||
Messages posted to the bug-gnu-emacs@gnu.org mailing list, mentioned
|
||||
above, are recorded by the tracker with the corresponding bugs/issues.
|
||||
|
||||
GNU ELPA has a 'debbugs' package that allows accessing the tracker
|
||||
database from Emacs.
|
||||
|
||||
Bugs needs regular attention. A large backlog of bugs is
|
||||
disheartening to the developers, and a culture of ignoring bugs is
|
||||
harmful to users, who expect software that works. Bugs have to be
|
||||
regularly looked at and acted upon. Not all bugs are critical, but at
|
||||
the least, each bug needs to be regularly re-reviewed to make sure it
|
||||
is still reproducible.
|
||||
|
||||
The process of going through old or new bugs and acting on them is
|
||||
called bug triage. This process is described in the file
|
||||
admin/notes/bug-triage.
|
||||
|
||||
** Documenting your changes
|
||||
|
||||
Any change that matters to end-users should have an entry in etc/NEWS.
|
||||
|
||||
Doc-strings should be updated together with the code.
|
||||
|
||||
Think about whether your change requires updating the manuals. If you
|
||||
know it does not, mark the NEWS entry with "---". If you know
|
||||
that *all* the necessary documentation updates have been made, mark
|
||||
the entry with "+++". Otherwise do not mark it.
|
||||
|
||||
If your change requires updating the manuals to document new
|
||||
functions/commands/variables/faces, then use the proper Texinfo
|
||||
command to index them; for instance, use @vindex for variables and
|
||||
@findex for functions/commands. For the full list of predefine indices, see
|
||||
http://www.gnu.org/software/texinfo/manual/texinfo/html_node/Predefined-Indices.html
|
||||
or run the shell command 'info "(texinfo)Predefined Indices"'.
|
||||
|
||||
For more specific tips on Emacs's doc style, see
|
||||
http://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html
|
||||
Use 'checkdoc' to check for documentation errors before submitting a patch.
|
||||
|
||||
** Testing your changes
|
||||
|
||||
Please test your changes before committing them or sending them to the
|
||||
list. If possible, add a new test along with any bug fix or new
|
||||
functionality you commit (of course, some changes cannot be easily
|
||||
tested).
|
||||
|
||||
Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See
|
||||
http://www.gnu.org/software/emacs/manual/html_node/ert/
|
||||
or run 'info "(ert)"' for for more information on writing and running
|
||||
tests.
|
||||
|
||||
If your test lasts longer than some few seconds, mark it in its
|
||||
'ert-deftest' definition with ":tags '(:expensive-test)".
|
||||
|
||||
To run tests on the entire Emacs tree, run "make check" from the
|
||||
top-level directory. Most tests are in the directory "test/". From
|
||||
the "test/" directory, run "make <filename>" to run the tests for
|
||||
<filename>.el(c). See "test/README" for more information.
|
||||
|
||||
** Understanding Emacs internals
|
||||
|
||||
The best way to understand Emacs internals is to read the code. Some
|
||||
|
|
|
|||
|
|
@ -30,15 +30,15 @@ GNULIB_MODULES='
|
|||
careadlinkat close-stream
|
||||
count-leading-zeros count-one-bits count-trailing-zeros
|
||||
crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512
|
||||
diffseq dtoastr dtotimespec dup2 environ execinfo faccessat
|
||||
diffseq dtoastr dtotimespec dup2 environ execinfo explicit_bzero faccessat
|
||||
fcntl fcntl-h fdatasync fdopendir
|
||||
filemode filevercmp flexmember fstatat fsync
|
||||
getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog
|
||||
ignore-value intprops largefile lstat
|
||||
manywarnings memrchr minmax mkostemp mktime
|
||||
manywarnings memrchr minmax mkostemp mktime nstrftime
|
||||
pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat
|
||||
sig2str socklen stat-time std-gnu11 stdalign stddef stdio
|
||||
stpcpy strftime strtoimax symlink sys_stat
|
||||
stpcpy strtoimax symlink sys_stat
|
||||
sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub
|
||||
update-copyright unlocked-io utimens
|
||||
vla warnings
|
||||
|
|
|
|||
|
|
@ -6,13 +6,12 @@ See the end of the file for license conditions.
|
|||
NOTES FOR EMACS CONTINUOUS BUILD ON HYDRA
|
||||
|
||||
A continuous build for Emacs can be found at
|
||||
http://hydra.nixos.org/jobset/gnu/emacs-trunk
|
||||
http://hydra.nixos.org/jobset/gnu/emacs-24
|
||||
https://hydra.nixos.org/jobset/gnu/emacs-trunk
|
||||
|
||||
* It builds Emacs on various platforms.
|
||||
Sometimes jobs fail due to hydra problems rather than Emacs problems.
|
||||
Eg it seems like the cygwin build will never work again.
|
||||
http://lists.gnu.org/archive/html/hydra-users/2013-08/msg00000.html
|
||||
Eg it seems like the darwin build will never work again.
|
||||
https://lists.gnu.org/archive/html/hydra-users/2016-01/msg00000.html
|
||||
|
||||
* Mail notifications
|
||||
In addition to the web interface, Hydra can send notifications by
|
||||
|
|
@ -21,7 +20,7 @@ SUCCEEDED to FAILED. It sends notifications about build status in
|
|||
Emacs trunk to emacs-buildstatus@gnu.org.
|
||||
|
||||
If you want to receive these notifications, please subscribe at
|
||||
http://lists.gnu.org/mailman/listinfo/emacs-buildstatus
|
||||
https://lists.gnu.org/mailman/listinfo/emacs-buildstatus
|
||||
|
||||
* The Emacs jobset consists of the following jobs:
|
||||
|
||||
|
|
@ -31,23 +30,29 @@ by running make-dist to create a tarball. If this job fails, all the
|
|||
others will too (because they use the tarball as input).
|
||||
|
||||
** The 'build' job
|
||||
which starts from the tarball and does a normal build
|
||||
which starts from the tarball and does a normal build.
|
||||
|
||||
** The 'coverage' job
|
||||
does a gcov build and then runs 'make check'. Fails if any test fails.
|
||||
does a gcov build and then runs 'make check-expensive'. Fails if any
|
||||
test fails.
|
||||
|
||||
* Nix expressions
|
||||
The recipe for GNU Emacs are available via Git:
|
||||
http://git.savannah.gnu.org/cgit/hydra-recipes.git/tree/emacs
|
||||
https://git.savannah.gnu.org/cgit/hydra-recipes.git/tree/emacs
|
||||
|
||||
To modify the build job, email the patch to hydra-users@gnu.org. The
|
||||
build recipes are written in the Nix language.
|
||||
|
||||
* Identifying hydra
|
||||
Lisp packages, Makefiles, scripts, and other software could determine
|
||||
whether they run on hydra by checking for the environment variable
|
||||
EMACS_HYDRA_CI.
|
||||
|
||||
* Other Information
|
||||
For a list of other GNU packages that have a continuous build on
|
||||
Hydra, see http://hydra.nixos.org/project/gnu
|
||||
Hydra, see https://hydra.nixos.org/project/gnu
|
||||
|
||||
See http://www.gnu.org/software/devel.html#Hydra for more information.
|
||||
See https://www.gnu.org/software/devel.html#Hydra for more information.
|
||||
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
|
|
|||
|
|
@ -15,9 +15,10 @@ Emacs uses the following files from the Unicode Character Database
|
|||
. BidiBrackets.txt
|
||||
. IVD_Sequences.txt
|
||||
. NormalizationTest.txt
|
||||
. SpecialCasing.txt
|
||||
. BidiCharacterTest.txt
|
||||
|
||||
First, the first 6 files need to be copied into admin/unidata/, and
|
||||
First, the first 7 files need to be copied into admin/unidata/, and
|
||||
then Emacs should be rebuilt for them to take effect. Rebuilding
|
||||
Emacs updates several derived files elsewhere in the Emacs source
|
||||
tree, mainly in lisp/international/.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# BidiBrackets-9.0.0.txt
|
||||
# Date: 2016-06-07, 22:30:00 GMT [AG, LI, KW]
|
||||
# © 2016 Unicode®, Inc.
|
||||
# BidiBrackets-10.0.0.txt
|
||||
# Date: 2017-04-12, 17:30:00 GMT [AG, LI, KW]
|
||||
# © 2017 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
|
||||
#
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
# For documentation, see http://www.unicode.org/reports/tr44/
|
||||
#
|
||||
# Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties
|
||||
#
|
||||
#
|
||||
# This file is a normative contributory data file in the Unicode
|
||||
# Character Database.
|
||||
#
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
# BidiMirroring-9.0.0.txt
|
||||
# Date: 2016-01-21, 22:00:00 GMT [KW, LI]
|
||||
# © 2016 Unicode®, Inc.
|
||||
# BidiMirroring-10.0.0.txt
|
||||
# Date: 2017-04-12, 17:30:00 GMT [KW, LI]
|
||||
# © 2017 Unicode®, Inc.
|
||||
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
||||
#
|
||||
# Unicode Character Database
|
||||
# For documentation, see http://www.unicode.org/reports/tr44/
|
||||
#
|
||||
# Bidi_Mirroring_Glyph Property
|
||||
#
|
||||
#
|
||||
# This file is an informative contributory data file in the
|
||||
# Unicode Character Database.
|
||||
#
|
||||
|
|
@ -15,20 +15,20 @@
|
|||
# value, for which there is another Unicode character that typically has a glyph
|
||||
# that is the mirror image of the original character's glyph.
|
||||
#
|
||||
# The repertoire covered by the file is Unicode 9.0.0.
|
||||
#
|
||||
# The repertoire covered by the file is Unicode 10.0.0.
|
||||
#
|
||||
# The file contains a list of lines with mappings from one code point
|
||||
# to another one for character-based mirroring.
|
||||
# Note that for "real" mirroring, a rendering engine needs to select
|
||||
# appropriate alternative glyphs, and that many Unicode characters do not
|
||||
# have a mirror-image Unicode character.
|
||||
#
|
||||
#
|
||||
# Each mapping line contains two fields, separated by a semicolon (';').
|
||||
# Each of the two fields contains a code point represented as a
|
||||
# variable-length hexadecimal value with 4 to 6 digits.
|
||||
# A comment indicates where the characters are "BEST FIT" mirroring.
|
||||
#
|
||||
# Code points for which Bidi_Mirrored=Yes, but for which no appropriate
|
||||
#
|
||||
# Code points for which Bidi_Mirrored=Yes, but for which no appropriate
|
||||
# characters exist with mirrored glyphs, are
|
||||
# listed as comments at the end of the file.
|
||||
#
|
||||
|
|
@ -38,14 +38,14 @@
|
|||
# point has the default value for the Bidi_Mirroring_Glyph property,
|
||||
# that means that no other character exists whose glyph is suitable
|
||||
# for character-based mirroring.
|
||||
#
|
||||
#
|
||||
# For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm,
|
||||
# at http://www.unicode.org/unicode/reports/tr9/
|
||||
#
|
||||
#
|
||||
# This file was originally created by Markus Scherer.
|
||||
# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler,
|
||||
# and for subsequent versions by Ken Whistler and Laurentiu Iancu.
|
||||
#
|
||||
#
|
||||
# ############################################################
|
||||
#
|
||||
# Property: Bidi_Mirroring_Glyph
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Blocks-9.0.0.txt
|
||||
# Date: 2016-02-05, 23:48:00 GMT [KW]
|
||||
# © 2016 Unicode®, Inc.
|
||||
# Blocks-10.0.0.txt
|
||||
# Date: 2017-04-12, 17:30:00 GMT [KW]
|
||||
# © 2017 Unicode®, Inc.
|
||||
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
||||
#
|
||||
# Unicode Character Database
|
||||
|
|
@ -14,12 +14,12 @@
|
|||
# Note: When comparing block names, casing, whitespace, hyphens,
|
||||
# and underbars are ignored.
|
||||
# For example, "Latin Extended-A" and "latin extended a" are equivalent.
|
||||
# For more information on the comparison of property values,
|
||||
# For more information on the comparison of property values,
|
||||
# see UAX #44: http://www.unicode.org/reports/tr44/
|
||||
#
|
||||
# All block ranges start with a value where (cp MOD 16) = 0,
|
||||
# and end with a value where (cp MOD 16) = 15. In other words,
|
||||
# the last hexadecimal digit of the start of range is ...0
|
||||
# the last hexadecimal digit of the start of range is ...0
|
||||
# and the last hexadecimal digit of the end of range is ...F.
|
||||
# This constraint on block ranges guarantees that allocations
|
||||
# are done in terms of whole columns, and that code chart display
|
||||
|
|
@ -51,6 +51,7 @@
|
|||
07C0..07FF; NKo
|
||||
0800..083F; Samaritan
|
||||
0840..085F; Mandaic
|
||||
0860..086F; Syriac Supplement
|
||||
08A0..08FF; Arabic Extended-A
|
||||
0900..097F; Devanagari
|
||||
0980..09FF; Bengali
|
||||
|
|
@ -253,9 +254,12 @@ FFF0..FFFF; Specials
|
|||
11680..116CF; Takri
|
||||
11700..1173F; Ahom
|
||||
118A0..118FF; Warang Citi
|
||||
11A00..11A4F; Zanabazar Square
|
||||
11A50..11AAF; Soyombo
|
||||
11AC0..11AFF; Pau Cin Hau
|
||||
11C00..11C6F; Bhaiksuki
|
||||
11C70..11CBF; Marchen
|
||||
11D00..11D5F; Masaram Gondi
|
||||
12000..123FF; Cuneiform
|
||||
12400..1247F; Cuneiform Numbers and Punctuation
|
||||
12480..1254F; Early Dynastic Cuneiform
|
||||
|
|
@ -270,6 +274,8 @@ FFF0..FFFF; Specials
|
|||
17000..187FF; Tangut
|
||||
18800..18AFF; Tangut Components
|
||||
1B000..1B0FF; Kana Supplement
|
||||
1B100..1B12F; Kana Extended-A
|
||||
1B170..1B2FF; Nushu
|
||||
1BC00..1BC9F; Duployan
|
||||
1BCA0..1BCAF; Shorthand Format Controls
|
||||
1D000..1D0FF; Byzantine Musical Symbols
|
||||
|
|
@ -300,6 +306,7 @@ FFF0..FFFF; Specials
|
|||
2A700..2B73F; CJK Unified Ideographs Extension C
|
||||
2B740..2B81F; CJK Unified Ideographs Extension D
|
||||
2B820..2CEAF; CJK Unified Ideographs Extension E
|
||||
2CEB0..2EBEF; CJK Unified Ideographs Extension F
|
||||
2F800..2FA1F; CJK Compatibility Ideographs Supplement
|
||||
E0000..E007F; Tags
|
||||
E0100..E01EF; Variation Selectors Supplement
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@
|
|||
#
|
||||
# History:
|
||||
#
|
||||
# 2016-08-15 Combined registration of the MSARG collection and of
|
||||
# sequences in that collection.
|
||||
#
|
||||
# 2014-05-16 Combined registration of the Moji_Joho collection and of
|
||||
# sequences in that collection.
|
||||
#
|
||||
|
|
@ -11,17 +14,17 @@
|
|||
# collection. Registration of additional sequences in the
|
||||
# Hanyo-Denshi collection.
|
||||
#
|
||||
# 2010-11-14 Combined registration of the Hanyo-Denshi collection and of
|
||||
# sequences in that collection.
|
||||
# 2010-11-14 Combined registration of the Hanyo-Denshi collection and
|
||||
# of sequences in that collection.
|
||||
#
|
||||
# 2007-12-14 Combined registration of the Adobe-Japan1 collection and of
|
||||
# sequences in that collection.
|
||||
# 2007-12-14 Combined registration of the Adobe-Japan1 collection and
|
||||
# of sequences in that collection.
|
||||
#
|
||||
# This file is part of the Unicode Ideographic Variation Database (IVD).
|
||||
# For more details on the IVD, see UTS #37:
|
||||
# http://www.unicode.org/reports/tr37/
|
||||
#
|
||||
# Copyright 2006-2014 Unicode, Inc.
|
||||
# Copyright 2006-2016 Unicode, Inc.
|
||||
# For terms of use, see: http://www.unicode.org/terms_of_use.html
|
||||
#
|
||||
3402 E0100; Adobe-Japan1; CID+13698
|
||||
|
|
@ -268,6 +271,9 @@
|
|||
36C3 E0100; Hanyo-Denshi; IA1426
|
||||
36C3 E0101; Hanyo-Denshi; TK01020180
|
||||
36C3 E0102; Hanyo-Denshi; TK01020240
|
||||
36C7 E0100; MSARG; MA_9856
|
||||
36C7 E0101; MSARG; ME_36C7_001
|
||||
36C7 E0102; MSARG; ME_36C7_002
|
||||
36CF E0100; Adobe-Japan1; CID+17494
|
||||
36EE E0100; Moji_Joho; MJ000648
|
||||
36EE E0101; Moji_Joho; MJ000649
|
||||
|
|
@ -4847,6 +4853,8 @@
|
|||
5554 E0101; Hanyo-Denshi; TK01014490
|
||||
5556 E0100; Adobe-Japan1; CID+4394
|
||||
5557 E0100; Adobe-Japan1; CID+4395
|
||||
5557 E0101; MSARG; MB_B0E8
|
||||
5557 E0102; MSARG; ME_5557_001
|
||||
5558 E0100; Adobe-Japan1; CID+21280
|
||||
555A E0100; Adobe-Japan1; CID+21281
|
||||
555A E0101; Hanyo-Denshi; JB2162
|
||||
|
|
@ -8319,6 +8327,8 @@
|
|||
5EF8 E0100; Adobe-Japan1; CID+4762
|
||||
5EF8 E0101; Moji_Joho; MJ011106
|
||||
5EF8 E0102; Moji_Joho; MJ011107
|
||||
5EF8 E0103; MSARG; MA_9059
|
||||
5EF8 E0104; MSARG; ME_5EF8_001
|
||||
5EF9 E0100; Adobe-Japan1; CID+16853
|
||||
5EF9 E0101; Moji_Joho; MJ011108
|
||||
5EF9 E0102; Moji_Joho; MJ011109
|
||||
|
|
@ -8529,6 +8539,8 @@
|
|||
5F55 E0100; Moji_Joho; MJ011232
|
||||
5F55 E0101; Hanyo-Denshi; KS112100
|
||||
5F55 E0101; Moji_Joho; MJ057475
|
||||
5F55 E0102; MSARG; MD_5F55
|
||||
5F55 E0103; MSARG; ME_5F55_001
|
||||
5F56 E0100; Adobe-Japan1; CID+4780
|
||||
5F56 E0101; Hanyo-Denshi; JA5533
|
||||
5F56 E0101; Moji_Joho; MJ011233
|
||||
|
|
@ -26361,6 +26373,8 @@
|
|||
8846 E0105; Hanyo-Denshi; KS386520
|
||||
8846 E0105; Moji_Joho; MJ058677
|
||||
8846 E0106; Hanyo-Denshi; TK01083450
|
||||
8846 E0107; MSARG; MA_8FBC
|
||||
8846 E0108; MSARG; ME_8846_001
|
||||
8848 E0100; Adobe-Japan1; CID+22465
|
||||
8849 E0100; Adobe-Japan1; CID+22466
|
||||
884A E0100; Adobe-Japan1; CID+18635
|
||||
|
|
@ -31073,6 +31087,8 @@
|
|||
93C5 E0101; Hanyo-Denshi; JB6930
|
||||
93C5 E0102; Hanyo-Denshi; TK01093900
|
||||
93C6 E0100; Adobe-Japan1; CID+8679
|
||||
93C6 E0101; MSARG; MA_9264
|
||||
93C6 E0102; MSARG; ME_93C6_001
|
||||
93C7 E0100; Adobe-Japan1; CID+18865
|
||||
93C8 E0100; Adobe-Japan1; CID+7029
|
||||
93C8 E0101; Hanyo-Denshi; JA7926
|
||||
|
|
@ -32678,6 +32694,8 @@
|
|||
98EB E0102; Moji_Joho; MJ028359
|
||||
98EB E0103; Hanyo-Denshi; FT2689
|
||||
98EB E0103; Moji_Joho; MJ028358
|
||||
98EC E0100; MSARG; MA_914B
|
||||
98EC E0101; MSARG; ME_98EC_001
|
||||
98ED E0100; Adobe-Japan1; CID+4289
|
||||
98ED E0101; Hanyo-Denshi; JA5012
|
||||
98ED E0101; Moji_Joho; MJ028362
|
||||
|
|
@ -33545,6 +33563,8 @@
|
|||
9AE3 E0100; Adobe-Japan1; CID+7278
|
||||
9AE4 E0100; Adobe-Japan1; CID+22934
|
||||
9AE5 E0100; Adobe-Japan1; CID+19007
|
||||
9AE5 E0101; MSARG; MD_9AE5
|
||||
9AE5 E0102; MSARG; ME_9AE5_001
|
||||
9AE6 E0100; Adobe-Japan1; CID+7279
|
||||
9AE7 E0100; Adobe-Japan1; CID+22935
|
||||
9AE9 E0100; Adobe-Japan1; CID+19008
|
||||
|
|
@ -35487,6 +35507,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
|
|||
20C50 E0101; Moji_Joho; MJ057161
|
||||
20C74 E0100; Hanyo-Denshi; KS041540
|
||||
20C74 E0101; Hanyo-Denshi; TK01014200
|
||||
20C98 E0100; MSARG; MD_20C98
|
||||
20C98 E0101; MSARG; ME_20C98_001
|
||||
20C9C E0100; Hanyo-Denshi; TK01014280
|
||||
20C9C E0101; Hanyo-Denshi; TK01014620
|
||||
20D45 E0100; Adobe-Japan1; CID+17359
|
||||
|
|
@ -35689,6 +35711,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
|
|||
21A41 E0101; Hanyo-Denshi; TK01022390
|
||||
21A62 E0100; Hanyo-Denshi; KS082510
|
||||
21A62 E0101; Hanyo-Denshi; TK01022590
|
||||
21A74 E0100; MSARG; MD_21A74
|
||||
21A74 E0101; MSARG; ME_21A74_001
|
||||
21AA2 E0100; Moji_Joho; MJ034079
|
||||
21AA2 E0101; Moji_Joho; MJ034080
|
||||
21B33 E0100; Hanyo-Denshi; KS084630
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# NormalizationTest-9.0.0.txt
|
||||
# Date: 2016-04-04, 11:41:55 GMT
|
||||
# © 2016 Unicode®, Inc.
|
||||
# NormalizationTest-10.0.0.txt
|
||||
# Date: 2017-03-08, 08:41:55 GMT
|
||||
# © 2017 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
|
||||
#
|
||||
|
|
@ -17653,6 +17653,10 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
|
|||
0061 0CBC 3099 093C 0334 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062; # (a◌಼◌゙◌़◌̴b; a◌̴◌಼◌़◌゙b; a◌̴◌಼◌़◌゙b; a◌̴◌಼◌़◌゙b; a◌̴◌಼◌़◌゙b; ) LATIN SMALL LETTER A, KANNADA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 0CCD 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062; # (a◌ְ◌्◌゙◌್b; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KANNADA SIGN VIRAMA, LATIN SMALL LETTER B
|
||||
0061 0CCD 05B0 094D 3099 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062; # (a◌್◌ְ◌्◌゙b; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; ) LATIN SMALL LETTER A, KANNADA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 0D3B 0062;0061 3099 094D 0D3B 05B0 0062;0061 3099 094D 0D3B 05B0 0062;0061 3099 094D 0D3B 05B0 0062;0061 3099 094D 0D3B 05B0 0062; # (a◌ְ◌्◌゙◌഻b; a◌゙◌्◌഻◌ְb; a◌゙◌्◌഻◌ְb; a◌゙◌्◌഻◌ְb; a◌゙◌्◌഻◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MALAYALAM SIGN VERTICAL BAR VIRAMA, LATIN SMALL LETTER B
|
||||
0061 0D3B 05B0 094D 3099 0062;0061 3099 0D3B 094D 05B0 0062;0061 3099 0D3B 094D 05B0 0062;0061 3099 0D3B 094D 05B0 0062;0061 3099 0D3B 094D 05B0 0062; # (a◌഻◌ְ◌्◌゙b; a◌゙◌഻◌्◌ְb; a◌゙◌഻◌्◌ְb; a◌゙◌഻◌्◌ְb; a◌゙◌഻◌्◌ְb; ) LATIN SMALL LETTER A, MALAYALAM SIGN VERTICAL BAR VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 0D3C 0062;0061 3099 094D 0D3C 05B0 0062;0061 3099 094D 0D3C 05B0 0062;0061 3099 094D 0D3C 05B0 0062;0061 3099 094D 0D3C 05B0 0062; # (a◌ְ◌्◌゙◌഼b; a◌゙◌्◌഼◌ְb; a◌゙◌्◌഼◌ְb; a◌゙◌्◌഼◌ְb; a◌゙◌्◌഼◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MALAYALAM SIGN CIRCULAR VIRAMA, LATIN SMALL LETTER B
|
||||
0061 0D3C 05B0 094D 3099 0062;0061 3099 0D3C 094D 05B0 0062;0061 3099 0D3C 094D 05B0 0062;0061 3099 0D3C 094D 05B0 0062;0061 3099 0D3C 094D 05B0 0062; # (a◌഼◌ְ◌्◌゙b; a◌゙◌഼◌्◌ְb; a◌゙◌഼◌्◌ְb; a◌゙◌഼◌्◌ְb; a◌゙◌഼◌्◌ְb; ) LATIN SMALL LETTER A, MALAYALAM SIGN CIRCULAR VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 0D4D 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062; # (a◌ְ◌्◌゙◌്b; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MALAYALAM SIGN VIRAMA, LATIN SMALL LETTER B
|
||||
0061 0D4D 05B0 094D 3099 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062; # (a◌്◌ְ◌्◌゙b; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; ) LATIN SMALL LETTER A, MALAYALAM SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 0DCA 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062; # (a◌ְ◌्◌゙◌්b; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SINHALA SIGN AL-LAKUNA, LATIN SMALL LETTER B
|
||||
|
|
@ -17999,6 +18003,14 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
|
|||
0061 1DF4 0315 0300 05AE 0062;0061 05AE 1DF4 0300 0315 0062;0061 05AE 1DF4 0300 0315 0062;0061 05AE 1DF4 0300 0315 0062;0061 05AE 1DF4 0300 0315 0062; # (a◌ᷴ◌̕◌̀◌֮b; a◌֮◌ᷴ◌̀◌̕b; a◌֮◌ᷴ◌̀◌̕b; a◌֮◌ᷴ◌̀◌̕b; a◌֮◌ᷴ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER U WITH DIAERESIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
|
||||
0061 0315 0300 05AE 1DF5 0062;00E0 05AE 1DF5 0315 0062;0061 05AE 0300 1DF5 0315 0062;00E0 05AE 1DF5 0315 0062;0061 05AE 0300 1DF5 0315 0062; # (a◌̕◌̀◌֮◌᷵b; à◌֮◌᷵◌̕b; a◌֮◌̀◌᷵◌̕b; à◌֮◌᷵◌̕b; a◌֮◌̀◌᷵◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING UP TACK ABOVE, LATIN SMALL LETTER B
|
||||
0061 1DF5 0315 0300 05AE 0062;0061 05AE 1DF5 0300 0315 0062;0061 05AE 1DF5 0300 0315 0062;0061 05AE 1DF5 0300 0315 0062;0061 05AE 1DF5 0300 0315 0062; # (a◌᷵◌̕◌̀◌֮b; a◌֮◌᷵◌̀◌̕b; a◌֮◌᷵◌̀◌̕b; a◌֮◌᷵◌̀◌̕b; a◌֮◌᷵◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING UP TACK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
|
||||
0061 035C 0315 0300 1DF6 0062;00E0 0315 1DF6 035C 0062;0061 0300 0315 1DF6 035C 0062;00E0 0315 1DF6 035C 0062;0061 0300 0315 1DF6 035C 0062; # (a◌͜◌̕◌̀◌᷶b; à◌̕◌᷶◌͜b; a◌̀◌̕◌᷶◌͜b; à◌̕◌᷶◌͜b; a◌̀◌̕◌᷶◌͜b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, COMBINING KAVYKA ABOVE RIGHT, LATIN SMALL LETTER B
|
||||
0061 1DF6 035C 0315 0300 0062;00E0 1DF6 0315 035C 0062;0061 0300 1DF6 0315 035C 0062;00E0 1DF6 0315 035C 0062;0061 0300 1DF6 0315 035C 0062; # (a◌᷶◌͜◌̕◌̀b; à◌᷶◌̕◌͜b; a◌̀◌᷶◌̕◌͜b; à◌᷶◌̕◌͜b; a◌̀◌᷶◌̕◌͜b; ) LATIN SMALL LETTER A, COMBINING KAVYKA ABOVE RIGHT, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
|
||||
0061 0300 05AE 1D16D 1DF7 0062;00E0 1D16D 05AE 1DF7 0062;0061 1D16D 05AE 1DF7 0300 0062;00E0 1D16D 05AE 1DF7 0062;0061 1D16D 05AE 1DF7 0300 0062; # (a◌̀◌𝅭֮◌᷷b; à𝅭◌֮◌᷷b; a𝅭◌֮◌᷷◌̀b; à𝅭◌֮◌᷷b; a𝅭◌֮◌᷷◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, COMBINING KAVYKA ABOVE LEFT, LATIN SMALL LETTER B
|
||||
0061 1DF7 0300 05AE 1D16D 0062;00E0 1D16D 1DF7 05AE 0062;0061 1D16D 1DF7 05AE 0300 0062;00E0 1D16D 1DF7 05AE 0062;0061 1D16D 1DF7 05AE 0300 0062; # (a◌᷷◌̀◌𝅭֮b; à𝅭◌᷷◌֮b; a𝅭◌᷷◌֮◌̀b; à𝅭◌᷷◌֮b; a𝅭◌᷷◌֮◌̀b; ) LATIN SMALL LETTER A, COMBINING KAVYKA ABOVE LEFT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B
|
||||
0061 0300 05AE 1D16D 1DF8 0062;00E0 1D16D 05AE 1DF8 0062;0061 1D16D 05AE 1DF8 0300 0062;00E0 1D16D 05AE 1DF8 0062;0061 1D16D 05AE 1DF8 0300 0062; # (a◌̀◌𝅭֮◌᷸b; à𝅭◌֮◌᷸b; a𝅭◌֮◌᷸◌̀b; à𝅭◌֮◌᷸b; a𝅭◌֮◌᷸◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, COMBINING DOT ABOVE LEFT, LATIN SMALL LETTER B
|
||||
0061 1DF8 0300 05AE 1D16D 0062;00E0 1D16D 1DF8 05AE 0062;0061 1D16D 1DF8 05AE 0300 0062;00E0 1D16D 1DF8 05AE 0062;0061 1D16D 1DF8 05AE 0300 0062; # (a◌᷸◌̀◌𝅭֮b; à𝅭◌᷸◌֮b; a𝅭◌᷸◌֮◌̀b; à𝅭◌᷸◌֮b; a𝅭◌᷸◌֮◌̀b; ) LATIN SMALL LETTER A, COMBINING DOT ABOVE LEFT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B
|
||||
0061 059A 0316 302A 1DF9 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062; # (a◌֚◌̖◌〪◌᷹b; a◌〪◌̖◌᷹◌֚b; a◌〪◌̖◌᷹◌֚b; a◌〪◌̖◌᷹◌֚b; a◌〪◌̖◌᷹◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING WIDE INVERTED BRIDGE BELOW, LATIN SMALL LETTER B
|
||||
0061 1DF9 059A 0316 302A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 0316 059A 0062; # (a◌᷹◌֚◌̖◌〪b; a◌〪◌᷹◌̖◌֚b; a◌〪◌᷹◌̖◌֚b; a◌〪◌᷹◌̖◌֚b; a◌〪◌᷹◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING WIDE INVERTED BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
|
||||
0061 0315 0300 05AE 1DFB 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 0315 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 0315 0062; # (a◌̕◌̀◌֮◌᷻b; à◌֮◌᷻◌̕b; a◌֮◌̀◌᷻◌̕b; à◌֮◌᷻◌̕b; a◌֮◌̀◌᷻◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DELETION MARK, LATIN SMALL LETTER B
|
||||
0061 1DFB 0315 0300 05AE 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062; # (a◌᷻◌̕◌̀◌֮b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DELETION MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
|
||||
0061 035D 035C 0315 1DFC 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062; # (a◌͝◌͜◌̕◌᷼b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE INVERTED BREVE BELOW, LATIN SMALL LETTER B
|
||||
|
|
@ -18397,8 +18409,20 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
|
|||
0061 116B7 3099 093C 0334 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062; # (a◌𑚷◌゙◌़◌̴b; a◌̴◌𑚷◌़◌゙b; a◌̴◌𑚷◌़◌゙b; a◌̴◌𑚷◌़◌゙b; a◌̴◌𑚷◌़◌゙b; ) LATIN SMALL LETTER A, TAKRI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 1172B 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062; # (a◌ְ◌्◌゙◌𑜫b; a◌゙◌्◌𑜫◌ְb; a◌゙◌्◌𑜫◌ְb; a◌゙◌्◌𑜫◌ְb; a◌゙◌्◌𑜫◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, AHOM SIGN KILLER, LATIN SMALL LETTER B
|
||||
0061 1172B 05B0 094D 3099 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062; # (a◌𑜫◌ְ◌्◌゙b; a◌゙◌𑜫◌्◌ְb; a◌゙◌𑜫◌्◌ְb; a◌゙◌𑜫◌्◌ְb; a◌゙◌𑜫◌्◌ְb; ) LATIN SMALL LETTER A, AHOM SIGN KILLER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 11A34 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062; # (a◌ְ◌्◌゙◌𑨴b; a◌゙◌्◌𑨴◌ְb; a◌゙◌्◌𑨴◌ְb; a◌゙◌्◌𑨴◌ְb; a◌゙◌्◌𑨴◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, ZANABAZAR SQUARE SIGN VIRAMA, LATIN SMALL LETTER B
|
||||
0061 11A34 05B0 094D 3099 0062;0061 3099 11A34 094D 05B0 0062;0061 3099 11A34 094D 05B0 0062;0061 3099 11A34 094D 05B0 0062;0061 3099 11A34 094D 05B0 0062; # (a◌𑨴◌ְ◌्◌゙b; a◌゙◌𑨴◌्◌ְb; a◌゙◌𑨴◌्◌ְb; a◌゙◌𑨴◌्◌ְb; a◌゙◌𑨴◌्◌ְb; ) LATIN SMALL LETTER A, ZANABAZAR SQUARE SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 11A47 0062;0061 3099 094D 11A47 05B0 0062;0061 3099 094D 11A47 05B0 0062;0061 3099 094D 11A47 05B0 0062;0061 3099 094D 11A47 05B0 0062; # (a◌ְ◌्◌゙◌𑩇b; a◌゙◌्◌𑩇◌ְb; a◌゙◌्◌𑩇◌ְb; a◌゙◌्◌𑩇◌ְb; a◌゙◌्◌𑩇◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, ZANABAZAR SQUARE SUBJOINER, LATIN SMALL LETTER B
|
||||
0061 11A47 05B0 094D 3099 0062;0061 3099 11A47 094D 05B0 0062;0061 3099 11A47 094D 05B0 0062;0061 3099 11A47 094D 05B0 0062;0061 3099 11A47 094D 05B0 0062; # (a◌𑩇◌ְ◌्◌゙b; a◌゙◌𑩇◌्◌ְb; a◌゙◌𑩇◌्◌ְb; a◌゙◌𑩇◌्◌ְb; a◌゙◌𑩇◌्◌ְb; ) LATIN SMALL LETTER A, ZANABAZAR SQUARE SUBJOINER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 11A99 0062;0061 3099 094D 11A99 05B0 0062;0061 3099 094D 11A99 05B0 0062;0061 3099 094D 11A99 05B0 0062;0061 3099 094D 11A99 05B0 0062; # (a◌ְ◌्◌゙◌𑪙b; a◌゙◌्◌𑪙◌ְb; a◌゙◌्◌𑪙◌ְb; a◌゙◌्◌𑪙◌ְb; a◌゙◌्◌𑪙◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SOYOMBO SUBJOINER, LATIN SMALL LETTER B
|
||||
0061 11A99 05B0 094D 3099 0062;0061 3099 11A99 094D 05B0 0062;0061 3099 11A99 094D 05B0 0062;0061 3099 11A99 094D 05B0 0062;0061 3099 11A99 094D 05B0 0062; # (a◌𑪙◌ְ◌्◌゙b; a◌゙◌𑪙◌्◌ְb; a◌゙◌𑪙◌्◌ְb; a◌゙◌𑪙◌्◌ְb; a◌゙◌𑪙◌्◌ְb; ) LATIN SMALL LETTER A, SOYOMBO SUBJOINER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 11C3F 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062; # (a◌ְ◌्◌゙◌𑰿b; a◌゙◌्◌𑰿◌ְb; a◌゙◌्◌𑰿◌ְb; a◌゙◌्◌𑰿◌ְb; a◌゙◌्◌𑰿◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BHAIKSUKI SIGN VIRAMA, LATIN SMALL LETTER B
|
||||
0061 11C3F 05B0 094D 3099 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062; # (a◌𑰿◌ְ◌्◌゙b; a◌゙◌𑰿◌्◌ְb; a◌゙◌𑰿◌्◌ְb; a◌゙◌𑰿◌्◌ְb; a◌゙◌𑰿◌्◌ְb; ) LATIN SMALL LETTER A, BHAIKSUKI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 3099 093C 0334 11D42 0062;0061 0334 093C 11D42 3099 0062;0061 0334 093C 11D42 3099 0062;0061 0334 093C 11D42 3099 0062;0061 0334 093C 11D42 3099 0062; # (a◌゙◌़◌̴◌𑵂b; a◌̴◌़◌𑵂◌゙b; a◌̴◌़◌𑵂◌゙b; a◌̴◌़◌𑵂◌゙b; a◌̴◌़◌𑵂◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, MASARAM GONDI SIGN NUKTA, LATIN SMALL LETTER B
|
||||
0061 11D42 3099 093C 0334 0062;0061 0334 11D42 093C 3099 0062;0061 0334 11D42 093C 3099 0062;0061 0334 11D42 093C 3099 0062;0061 0334 11D42 093C 3099 0062; # (a◌𑵂◌゙◌़◌̴b; a◌̴◌𑵂◌़◌゙b; a◌̴◌𑵂◌़◌゙b; a◌̴◌𑵂◌़◌゙b; a◌̴◌𑵂◌़◌゙b; ) LATIN SMALL LETTER A, MASARAM GONDI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 11D44 0062;0061 3099 094D 11D44 05B0 0062;0061 3099 094D 11D44 05B0 0062;0061 3099 094D 11D44 05B0 0062;0061 3099 094D 11D44 05B0 0062; # (a◌ְ◌्◌゙◌𑵄b; a◌゙◌्◌𑵄◌ְb; a◌゙◌्◌𑵄◌ְb; a◌゙◌्◌𑵄◌ְb; a◌゙◌्◌𑵄◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MASARAM GONDI SIGN HALANTA, LATIN SMALL LETTER B
|
||||
0061 11D44 05B0 094D 3099 0062;0061 3099 11D44 094D 05B0 0062;0061 3099 11D44 094D 05B0 0062;0061 3099 11D44 094D 05B0 0062;0061 3099 11D44 094D 05B0 0062; # (a◌𑵄◌ְ◌्◌゙b; a◌゙◌𑵄◌्◌ְb; a◌゙◌𑵄◌्◌ְb; a◌゙◌𑵄◌्◌ְb; a◌゙◌𑵄◌्◌ְb; ) LATIN SMALL LETTER A, MASARAM GONDI SIGN HALANTA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 05B0 094D 3099 11D45 0062;0061 3099 094D 11D45 05B0 0062;0061 3099 094D 11D45 05B0 0062;0061 3099 094D 11D45 05B0 0062;0061 3099 094D 11D45 05B0 0062; # (a◌ְ◌्◌゙◌𑵅b; a◌゙◌्◌𑵅◌ְb; a◌゙◌्◌𑵅◌ְb; a◌゙◌्◌𑵅◌ְb; a◌゙◌्◌𑵅◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MASARAM GONDI VIRAMA, LATIN SMALL LETTER B
|
||||
0061 11D45 05B0 094D 3099 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062; # (a◌𑵅◌ְ◌्◌゙b; a◌゙◌𑵅◌्◌ְb; a◌゙◌𑵅◌्◌ְb; a◌゙◌𑵅◌्◌ְb; a◌゙◌𑵅◌्◌ְb; ) LATIN SMALL LETTER A, MASARAM GONDI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
|
||||
0061 093C 0334 16AF0 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062; # (a◌़◌̴◌𖫰b; a◌̴◌𖫰◌़b; a◌̴◌𖫰◌़b; a◌̴◌𖫰◌़b; a◌̴◌𖫰◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING HIGH TONE, LATIN SMALL LETTER B
|
||||
0061 16AF0 093C 0334 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062; # (a◌𖫰◌़◌̴b; a◌𖫰◌̴◌़b; a◌𖫰◌̴◌़b; a◌𖫰◌̴◌़b; a◌𖫰◌̴◌़b; ) LATIN SMALL LETTER A, BASSA VAH COMBINING HIGH TONE, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
|
||||
0061 093C 0334 16AF1 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062; # (a◌़◌̴◌𖫱b; a◌̴◌𖫱◌़b; a◌̴◌𖫱◌़b; a◌̴◌𖫱◌़b; a◌̴◌𖫱◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING LOW TONE, LATIN SMALL LETTER B
|
||||
|
|
|
|||
|
|
@ -5,26 +5,30 @@ copyright.html.
|
|||
|
||||
The names, URLs, and dates for these files are as follows.
|
||||
|
||||
BidiBrackets.txt
|
||||
http://www.unicode.org/Public/UNIDATA/BidiBrackets.txt
|
||||
2017-04-20
|
||||
|
||||
BidiMirroring.txt
|
||||
http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt
|
||||
2013-12-17
|
||||
2017-04-20
|
||||
|
||||
IVD_Sequences.txt
|
||||
http://www.unicode.org/ivd/data/2014-05-16/IVD_Sequences.txt
|
||||
2014-05-16
|
||||
http://www.unicode.org/ivd/
|
||||
2016-08-15
|
||||
|
||||
UnicodeData.txt
|
||||
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
|
||||
2014-03-10
|
||||
2017-03-07
|
||||
|
||||
Blocks.txt
|
||||
http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
|
||||
2014-11-10
|
||||
2017-04-20
|
||||
|
||||
NormalizationTest.txt
|
||||
http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
|
||||
2016-07-16
|
||||
2017-03-08
|
||||
|
||||
SpecialCasing.txt
|
||||
http://unicode.org/Public/UNIDATA/SpecialCasing.txt
|
||||
2016-03-03
|
||||
2017-04-20
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# SpecialCasing-9.0.0.txt
|
||||
# Date: 2016-03-02, 18:55:13 GMT
|
||||
# © 2016 Unicode®, Inc.
|
||||
# SpecialCasing-10.0.0.txt
|
||||
# Date: 2017-04-14, 05:40:43 GMT
|
||||
# © 2017 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
|
||||
#
|
||||
|
|
@ -197,7 +197,7 @@ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
|
|||
|
||||
# ================================================================================
|
||||
# Conditional Mappings
|
||||
# The remainder of this file provides conditional casing data used to produce
|
||||
# The remainder of this file provides conditional casing data used to produce
|
||||
# full case mappings.
|
||||
# ================================================================================
|
||||
# Language-Insensitive Mappings
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
6
build-aux/config.guess
vendored
6
build-aux/config.guess
vendored
|
|
@ -2,7 +2,7 @@
|
|||
# Attempt to guess a canonical system name.
|
||||
# Copyright 1992-2017 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2017-05-27'
|
||||
timestamp='2017-07-19'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
|
|
@ -1429,8 +1429,8 @@ cat >&2 <<EOF
|
|||
$0: unable to guess system type
|
||||
|
||||
This script (version $timestamp), has failed to recognize the
|
||||
operating system you are using. If your script is old, overwrite
|
||||
config.guess and config.sub with the latest versions from:
|
||||
operating system you are using. If your script is old, overwrite *all*
|
||||
copies of config.guess and config.sub with the latest versions from:
|
||||
|
||||
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
|
||||
and
|
||||
|
|
|
|||
109
configure.ac
109
configure.ac
|
|
@ -352,7 +352,8 @@ OPTION_DEFAULT_OFF([w32], [use native MS Windows GUI in a Cygwin build])
|
|||
|
||||
OPTION_DEFAULT_ON([gpm],[don't use -lgpm for mouse support on a GNU/Linux console])
|
||||
OPTION_DEFAULT_ON([dbus],[don't compile with D-Bus support])
|
||||
OPTION_DEFAULT_ON([gconf],[don't compile with GConf support])
|
||||
AC_ARG_WITH([gconf],[AS_HELP_STRING([--with-gconf],
|
||||
[compile with Gconf support (Gsettings replaces this)])],[],[with_gconf=maybe])
|
||||
OPTION_DEFAULT_ON([gsettings],[don't compile with GSettings support])
|
||||
OPTION_DEFAULT_ON([selinux],[don't compile with SELinux support])
|
||||
OPTION_DEFAULT_ON([gnutls],[don't use -lgnutls for SSL/TLS support])
|
||||
|
|
@ -2506,7 +2507,8 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${HAVE_W32}"
|
|||
if test "${with_imagemagick}" != "no"; then
|
||||
## 6.3.5 is the earliest version known to work; see Bug#17339.
|
||||
## 6.8.2 makes Emacs crash; see Bug#13867.
|
||||
IMAGEMAGICK_MODULE="Wand >= 6.3.5 Wand != 6.8.2"
|
||||
## 7 and later have not been ported to; See Bug#25967.
|
||||
IMAGEMAGICK_MODULE="Wand >= 6.3.5 Wand != 6.8.2 Wand < 7"
|
||||
EMACS_CHECK_MODULES([IMAGEMAGICK], [$IMAGEMAGICK_MODULE])
|
||||
|
||||
if test $HAVE_IMAGEMAGICK = yes; then
|
||||
|
|
@ -2775,6 +2777,7 @@ if test "${HAVE_X11}" = "yes" && test "${with_gsettings}" = "yes"; then
|
|||
AC_DEFINE(HAVE_GSETTINGS, 1, [Define to 1 if using GSettings.])
|
||||
SETTINGS_CFLAGS="$GSETTINGS_CFLAGS"
|
||||
SETTINGS_LIBS="$GSETTINGS_LIBS"
|
||||
test "$with_gconf" = "yes" || with_gconf=no
|
||||
fi
|
||||
CFLAGS=$old_CFLAGS
|
||||
LIBS=$old_LIBS
|
||||
|
|
@ -2784,7 +2787,7 @@ fi
|
|||
dnl GConf has been tested under GNU/Linux only.
|
||||
dnl The version is really arbitrary, it is about the same age as Gtk+ 2.6.
|
||||
HAVE_GCONF=no
|
||||
if test "${HAVE_X11}" = "yes" && test "${with_gconf}" = "yes"; then
|
||||
if test "${HAVE_X11}" = "yes" && test "${with_gconf}" != "no"; then
|
||||
EMACS_CHECK_MODULES([GCONF], [gconf-2.0 >= 2.13])
|
||||
if test "$HAVE_GCONF" = yes; then
|
||||
AC_DEFINE(HAVE_GCONF, 1, [Define to 1 if using GConf.])
|
||||
|
|
@ -2831,6 +2834,87 @@ if test "${with_gnutls}" = "yes" ; then
|
|||
AC_DEFINE(HAVE_GNUTLS, 1, [Define if using GnuTLS.])
|
||||
EMACS_CHECK_MODULES([LIBGNUTLS3], [gnutls >= 3.0.0],
|
||||
[AC_DEFINE(HAVE_GNUTLS3, 1, [Define if using GnuTLS v3.])], [])
|
||||
|
||||
AC_CACHE_CHECK([for GnuTLS v3 with HMAC], [emacs_cv_gnutls3_hmac],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
#include <gnutls/gnutls.h>
|
||||
#include <gnutls/crypto.h>
|
||||
]], [[
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
gnutls_hmac_hd_t handle;
|
||||
gnutls_hmac_deinit (handle, NULL);
|
||||
}
|
||||
]])],
|
||||
[emacs_cv_gnutls3_hmac=yes],
|
||||
[emacs_cv_gnutls3_hmac=no])])
|
||||
if test "$emacs_cv_gnutls3_hmac" = yes; then
|
||||
AC_DEFINE([HAVE_GNUTLS3_HMAC], [1],
|
||||
[Define if using GnuTLS v3 with HMAC support.])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for GnuTLS v3 with AEAD], [emacs_cv_gnutls3_aead],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
#include <gnutls/gnutls.h>
|
||||
#include <gnutls/crypto.h>
|
||||
]], [[
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
gnutls_aead_cipher_hd_t handle;
|
||||
gnutls_aead_cipher_deinit (handle);
|
||||
}
|
||||
]])],
|
||||
[emacs_cv_gnutls3_aead=yes],
|
||||
[emacs_cv_gnutls3_aead=no])])
|
||||
if test "$emacs_cv_gnutls3_aead" = yes; then
|
||||
AC_DEFINE([HAVE_GNUTLS3_AEAD], [1],
|
||||
[Define if using GnuTLS v3 with AEAD support.])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for GnuTLS v3 with cipher], [emacs_cv_gnutls3_cipher],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
#include <gnutls/gnutls.h>
|
||||
#include <gnutls/crypto.h>
|
||||
]], [[
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
gnutls_cipher_hd_t handle;
|
||||
gnutls_cipher_encrypt2 (handle, NULL, 0, NULL, 0);
|
||||
gnutls_cipher_deinit (handle);
|
||||
}
|
||||
]])],
|
||||
[emacs_cv_gnutls3_cipher=yes],
|
||||
[emacs_cv_gnutls3_cipher=no])])
|
||||
if test "$emacs_cv_gnutls3_cipher" = yes; then
|
||||
AC_DEFINE([HAVE_GNUTLS3_CIPHER], [1],
|
||||
[Define if using GnuTLS v3 with cipher support.])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for GnuTLS v3 with digest], [emacs_cv_gnutls3_digest],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
#include <gnutls/gnutls.h>
|
||||
#include <gnutls/crypto.h>
|
||||
]], [[
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
gnutls_hash_hd_t handle;
|
||||
gnutls_hash_deinit (handle, NULL);
|
||||
}
|
||||
]])],
|
||||
[emacs_cv_gnutls3_digest=yes],
|
||||
[emacs_cv_gnutls3_digest=no])])
|
||||
if test "$emacs_cv_gnutls3_digest" = yes; then
|
||||
AC_DEFINE([HAVE_GNUTLS3_DIGEST], [1],
|
||||
[Define if using GnuTLS v3 with digest support.])
|
||||
fi
|
||||
fi
|
||||
|
||||
# Windows loads GnuTLS dynamically
|
||||
|
|
@ -3476,27 +3560,22 @@ AC_SUBST(LIBZ)
|
|||
LIBMODULES=
|
||||
HAVE_MODULES=no
|
||||
MODULES_OBJ=
|
||||
MODULES_SUFFIX=
|
||||
case $opsys in
|
||||
cygwin|mingw32) MODULES_SUFFIX=".dll" ;;
|
||||
*) MODULES_SUFFIX=".so" ;;
|
||||
esac
|
||||
if test "${with_modules}" != "no"; then
|
||||
case $opsys in
|
||||
gnu|gnu-linux)
|
||||
LIBMODULES="-ldl"
|
||||
MODULES_SUFFIX=".so"
|
||||
HAVE_MODULES=yes
|
||||
;;
|
||||
cygwin|mingw32)
|
||||
MODULES_SUFFIX=".dll"
|
||||
HAVE_MODULES=yes
|
||||
;;
|
||||
darwin)
|
||||
MODULES_SUFFIX=".so"
|
||||
cygwin|mingw32|darwin)
|
||||
HAVE_MODULES=yes
|
||||
;;
|
||||
*)
|
||||
# BSD systems have dlopen in libc.
|
||||
AC_CHECK_FUNC([dlopen],
|
||||
[MODULES_SUFFIX=".so"
|
||||
HAVE_MODULES=yes])
|
||||
AC_CHECK_FUNC([dlopen], [HAVE_MODULES=yes])
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
@ -5383,7 +5462,7 @@ AS_ECHO([" Does Emacs use -lXaw3d? ${HAVE_XAW3D
|
|||
Does Emacs use a png library? ${HAVE_PNG} $LIBPNG
|
||||
Does Emacs use -lrsvg-2? ${HAVE_RSVG}
|
||||
Does Emacs use cairo? ${HAVE_CAIRO}
|
||||
Does Emacs use imagemagick? ${HAVE_IMAGEMAGICK}
|
||||
Does Emacs use imagemagick (version 6)? ${HAVE_IMAGEMAGICK}
|
||||
Does Emacs support sound? ${HAVE_SOUND}
|
||||
Does Emacs use -lgpm? ${HAVE_GPM}
|
||||
Does Emacs use -ldbus? ${HAVE_DBUS}
|
||||
|
|
|
|||
|
|
@ -630,7 +630,8 @@ Display the line number of point.
|
|||
@item M-x line-number-mode
|
||||
@itemx M-x column-number-mode
|
||||
Toggle automatic display of the current line number or column number.
|
||||
@xref{Optional Mode Line}.
|
||||
@xref{Optional Mode Line}. If you want to have a line number
|
||||
displayed before each line, see @ref{Display Custom}.
|
||||
|
||||
@item M-=
|
||||
Display the number of lines, words, and characters that are present in
|
||||
|
|
|
|||
|
|
@ -1701,7 +1701,7 @@ and mouse events:
|
|||
(global-set-key (kbd "C-c y") 'clipboard-yank)
|
||||
(global-set-key (kbd "C-M-q") 'query-replace)
|
||||
(global-set-key (kbd "<f5>") 'flyspell-mode)
|
||||
(global-set-key (kbd "C-<f5>") 'linum-mode)
|
||||
(global-set-key (kbd "C-<f5>") 'display-line-numbers-mode)
|
||||
(global-set-key (kbd "C-<right>") 'forward-sentence)
|
||||
(global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill)
|
||||
@end example
|
||||
|
|
|
|||
|
|
@ -1115,7 +1115,7 @@ parent directory.
|
|||
@findex dired-next-dirline
|
||||
@kindex > @r{(Dired)}
|
||||
@item >
|
||||
Move down to the next directory-file line (@code{dired-prev-dirline}).
|
||||
Move down to the next directory-file line (@code{dired-next-dirline}).
|
||||
@end table
|
||||
|
||||
@node Hiding Subdirectories
|
||||
|
|
|
|||
|
|
@ -1333,7 +1333,7 @@ characters in the buffer, which means that @samp{k} for 10^3, @samp{M}
|
|||
for 10^6, @samp{G} for 10^9, etc., are used to abbreviate.
|
||||
|
||||
@cindex line number display
|
||||
@cindex display of line number
|
||||
@cindex display of current line number
|
||||
@findex line-number-mode
|
||||
The current line number of point appears in the mode line when Line
|
||||
Number mode is enabled. Use the command @kbd{M-x line-number-mode} to
|
||||
|
|
@ -1710,6 +1710,66 @@ variable @code{visual-line-fringe-indicators}.
|
|||
This section describes variables that control miscellaneous aspects
|
||||
of the appearance of the Emacs screen. Beginning users can skip it.
|
||||
|
||||
@vindex display-line-numbers
|
||||
@cindex number lines in a buffer
|
||||
@cindex display line numbers
|
||||
If you want to have Emacs display line numbers for every line in the
|
||||
buffer, customize the buffer-local variable
|
||||
@code{display-line-numbers}; it is @code{nil} by default. This
|
||||
variable can have several different values to support various modes of
|
||||
line-number display:
|
||||
|
||||
@table @asis
|
||||
@item @code{t}
|
||||
Display (an absolute) line number before each non-continuation screen
|
||||
line that displays buffer text. If the line is a continuation line,
|
||||
or if the entire screen line displays a display or an overlay string,
|
||||
that line will not be numbered.
|
||||
|
||||
@item @code{relative}
|
||||
Display relative line numbers before non-continuation lines which show
|
||||
buffer text. The line numbers are relative to the line showing point,
|
||||
so the numbers grow both up and down as lines become farther from the
|
||||
current line.
|
||||
|
||||
@item @code{visual}
|
||||
This value causes Emacs to count lines visually: only lines actually
|
||||
shown on the display will be counted (disregarding any lines in
|
||||
invisible parts of text), and lines which wrap to consume more than
|
||||
one screen line will be numbered that many times. The displayed
|
||||
numbers are relative, as with @code{relative} value above. This is
|
||||
handy in modes that fold text, such as Outline mode (@pxref{Outline
|
||||
Mode}), and need to move by exact number of screen lines.
|
||||
|
||||
@item anything else
|
||||
Any other non-@code{nil} value is treated as @code{t}.
|
||||
@end table
|
||||
|
||||
@vindex display-line-numbers-current-absolute
|
||||
When Emacs displays relative line numbers, you can control the number
|
||||
displayed before the current line, the line showing point. By
|
||||
default, Emacs displays the absolute number of the current line there,
|
||||
even though all the other line numbers are relative. If you customize
|
||||
the variable @code{display-line-numbers-current-absolute} to a
|
||||
@code{nil} value, the number displayed for the current line will be
|
||||
zero. This is handy if you don't care about the number of the current
|
||||
line, and want to leave more horizontal space for text in large
|
||||
buffers.
|
||||
|
||||
@vindex display-line-numbers-widen
|
||||
In a narrowed buffer (@pxref{Narrowing}) lines are normally numbered
|
||||
starting at the beginning of the narrowing. However, if you customize
|
||||
the variable @code{display-line-numbers-widen} to a non-@code{nil}
|
||||
value, line numbers will disregard any narrowing and will start at the
|
||||
first character of the buffer.
|
||||
|
||||
@cindex line-number face
|
||||
The line numbers are displayed in a special face @code{line-number}.
|
||||
The current line number is displayed in a different face,
|
||||
@code{line-number-current-line}, so you can make the current line's
|
||||
number have a distinct appearance, which will help locating the line
|
||||
showing point.
|
||||
|
||||
@vindex visible-bell
|
||||
If the variable @code{visible-bell} is non-@code{nil}, Emacs attempts
|
||||
to make the whole screen blink when it would normally make an audible bell
|
||||
|
|
|
|||
|
|
@ -254,6 +254,7 @@ Restart the Aspell/Ispell/Hunspell process, using @var{dict} as the dictionary.
|
|||
Kill the Aspell/Ispell/Hunspell subprocess.
|
||||
@item M-@key{TAB}
|
||||
@itemx @key{ESC} @key{TAB}
|
||||
@itemx C-M-i
|
||||
Complete the word before point based on the spelling dictionary
|
||||
(@code{ispell-complete-word}).
|
||||
@item M-x flyspell-mode
|
||||
|
|
|
|||
|
|
@ -575,7 +575,8 @@ font names in X resource files.
|
|||
If you are running Emacs on the GNOME desktop, you can tell Emacs to
|
||||
use the default system font by setting the variable
|
||||
@code{font-use-system-font} to @code{t} (the default is @code{nil}).
|
||||
For this to work, Emacs must have been compiled with Gconf support.
|
||||
For this to work, Emacs must have been compiled with support for
|
||||
Gsettings (or the older Gconf).
|
||||
|
||||
@item
|
||||
Use the command line option @samp{-fn} (or @samp{--font}). @xref{Font
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ versions of a source file, storing information such as the creation
|
|||
time of each version, who made it, and a description of what was
|
||||
changed.
|
||||
|
||||
@cindex VC
|
||||
The Emacs version control interface is called @dfn{VC}@. VC
|
||||
commands work with several different version control systems;
|
||||
currently, it supports Bazaar, CVS, Git, Mercurial, Monotone, RCS,
|
||||
|
|
|
|||
|
|
@ -225,10 +225,12 @@ Font-Lock mode automatically highlights certain textual units found in
|
|||
programs. It is enabled globally by default, but you can disable it
|
||||
in individual buffers. @xref{Faces}.
|
||||
|
||||
@findex linum-mode
|
||||
@cindex Linum mode
|
||||
@findex display-line-numbers-mode
|
||||
@cindex display-line-numbers-mode
|
||||
@item
|
||||
Linum mode displays each line's line number in the window's left margin.
|
||||
Display Line Numbers mode is a convenience wrapper around
|
||||
@code{display-line-numbers}, setting it using the value of
|
||||
@code{display-line-numbers-type}. @xref{Display Custom}.
|
||||
|
||||
@item
|
||||
Outline minor mode provides similar facilities to the major mode
|
||||
|
|
|
|||
|
|
@ -1774,15 +1774,15 @@ Chars}).
|
|||
@cindex bidirectional editing
|
||||
@cindex right-to-left text
|
||||
|
||||
Emacs supports editing text written in scripts, such as Arabic and
|
||||
Hebrew, whose natural ordering of horizontal text for display is from
|
||||
right to left. However, digits and Latin text embedded in these
|
||||
scripts are still displayed left to right. It is also not uncommon to
|
||||
have small portions of text in Arabic or Hebrew embedded in an otherwise
|
||||
Latin document; e.g., as comments and strings in a program source
|
||||
file. For these reasons, text that uses these scripts is actually
|
||||
@dfn{bidirectional}: a mixture of runs of left-to-right and
|
||||
right-to-left characters.
|
||||
Emacs supports editing text written in scripts, such as Arabic,
|
||||
Farsi, and Hebrew, whose natural ordering of horizontal text for
|
||||
display is from right to left. However, digits and Latin text
|
||||
embedded in these scripts are still displayed left to right. It is
|
||||
also not uncommon to have small portions of text in Arabic or Hebrew
|
||||
embedded in an otherwise Latin document; e.g., as comments and strings
|
||||
in a program source file. For these reasons, text that uses these
|
||||
scripts is actually @dfn{bidirectional}: a mixture of runs of
|
||||
left-to-right and right-to-left characters.
|
||||
|
||||
This section describes the facilities and options provided by Emacs
|
||||
for editing bidirectional text.
|
||||
|
|
@ -1811,15 +1811,21 @@ directionality when they are displayed. The default value is
|
|||
|
||||
@cindex base direction of paragraphs
|
||||
@cindex paragraph, base direction
|
||||
@vindex bidi-paragraph-start-re
|
||||
@vindex bidi-paragraph-separate-re
|
||||
Each paragraph of bidirectional text can have its own @dfn{base
|
||||
direction}, either right-to-left or left-to-right. (Paragraph
|
||||
@c paragraph-separate etc have no influence on this?
|
||||
boundaries are empty lines, i.e., lines consisting entirely of
|
||||
whitespace characters.) Text in left-to-right paragraphs begins on
|
||||
the screen at the left margin of the window and is truncated or
|
||||
continued when it reaches the right margin. By contrast, text in
|
||||
right-to-left paragraphs is displayed starting at the right margin and
|
||||
is continued or truncated at the left margin.
|
||||
direction}, either right-to-left or left-to-right. Text in
|
||||
left-to-right paragraphs begins on the screen at the left margin of
|
||||
the window and is truncated or continued when it reaches the right
|
||||
margin. By contrast, text in right-to-left paragraphs is displayed
|
||||
starting at the right margin and is continued or truncated at the left
|
||||
margin. By default, paragraph boundaries are empty lines, i.e., lines
|
||||
consisting entirely of whitespace characters. To change that, you can
|
||||
customize the two variables @code{bidi-paragraph-start-re} and
|
||||
@code{bidi-paragraph-separate-re}, whose values should be regular
|
||||
expressions (strings); e.g., to have a single newline start a new
|
||||
paragraph, set both of these variables to @code{"^"}. These two
|
||||
variables are buffer-local (@pxref{Locals}).
|
||||
|
||||
@vindex bidi-paragraph-direction
|
||||
Emacs determines the base direction of each paragraph dynamically,
|
||||
|
|
|
|||
|
|
@ -582,6 +582,8 @@ word search (@code{isearch-forward-word}).
|
|||
Search for @var{words}, using a forward nonincremental word search.
|
||||
@item M-s w C-r @key{RET} @var{words} @key{RET}
|
||||
Search backward for @var{words}, using a nonincremental word search.
|
||||
@item M-s M-w
|
||||
Search the Web for the text in region.
|
||||
@end table
|
||||
|
||||
@kindex M-s w
|
||||
|
|
@ -617,12 +619,15 @@ toggling lax whitespace matching (@pxref{Lax Search, lax space
|
|||
matching}) has no effect on them.
|
||||
|
||||
@kindex M-s M-w
|
||||
@findex eww-search-word
|
||||
@findex eww-search-words
|
||||
@vindex eww-search-prefix
|
||||
Search the Web for the text in region. This command performs an
|
||||
Internet search for the words in region using the search engine whose
|
||||
@acronym{URL} is specified by the variable @code{eww-search-prefix}.
|
||||
@xref{Basics, EWW, , eww, The Emacs Web Wowser Manual}.
|
||||
To search the Web for the text in region, type @kbd{M-s M-w}. This
|
||||
command performs an Internet search for the words in region using the
|
||||
search engine whose @acronym{URL} is specified by the variable
|
||||
@code{eww-search-prefix} (@pxref{Basics, EWW, , eww, The Emacs Web
|
||||
Wowser Manual}). If the region is not active, or doesn't contain any
|
||||
words, this command prompts the user for a URL or keywords to search.
|
||||
|
||||
|
||||
@node Symbol Search
|
||||
@section Symbol Search
|
||||
|
|
|
|||
|
|
@ -250,6 +250,11 @@ specified if @samp{off}.
|
|||
Gamma correction for colors, equivalent to the frame parameter
|
||||
@code{screen-gamma}.
|
||||
|
||||
@item @code{scrollBar} (class @code{ScrollBar})
|
||||
@cindex tool bar
|
||||
If the value of this resource is @samp{off} or @samp{false} or
|
||||
@samp{0}, Emacs disables Scroll Bar mode at startup (@pxref{Scroll Bars}).
|
||||
|
||||
@item @code{scrollBarWidth} (class @code{ScrollBarWidth})
|
||||
@cindex scrollbar width
|
||||
The scroll bar width in pixels, equivalent to the frame parameter
|
||||
|
|
|
|||
|
|
@ -2045,6 +2045,23 @@ selected window. The value includes the line spacing of the line
|
|||
(@pxref{Line Height}).
|
||||
@end defun
|
||||
|
||||
When a buffer is displayed with line numbers (@pxref{Display Custom,,,
|
||||
emacs, The GNU Emacs Manual}), it is sometimes useful to know the
|
||||
width taken for displaying the line numbers. The following function
|
||||
is for Lisp programs which need this information for layout
|
||||
calculations.
|
||||
|
||||
@defun line-number-display-width &optional pixelwise
|
||||
This function returns the width used for displaying the line numbers
|
||||
in the selected window. Optional argument @var{pixelwise}, if
|
||||
non-@code{nil}, means return the value in pixels; otherwise the value
|
||||
is returned in column units of the font defined for the
|
||||
@code{line-number} face. If line numbers are not displayed in the
|
||||
selected window, the value is zero. Use @code{with-selected-window}
|
||||
(@pxref{Selecting Windows}) if you need this information about another
|
||||
window.
|
||||
@end defun
|
||||
|
||||
|
||||
@node Line Height
|
||||
@section Line Height
|
||||
|
|
@ -5288,6 +5305,17 @@ and if @code{:height} is set it will have precedence over
|
|||
wish. @code{:max-width} and @code{:max-height} will always preserve
|
||||
the aspect ratio.
|
||||
|
||||
If both @code{:width} and @code{:max-height} has been set (but
|
||||
@code{:height} has not been set), then @code{:max-height} will have
|
||||
precedence. The same is the case for the opposite combination: The
|
||||
``max'' keyword has precedence. That is, if you have a 200x100 image
|
||||
and specify that @code{:width} should be 400 and @code{:max-height}
|
||||
should be 150, you'll end up with an image that is 300x150: Preserving
|
||||
the aspect ratio and not exceeding the ``max'' setting. This
|
||||
combination of parameters is a useful way of saying ``display this
|
||||
image as large as possible, but no larger than the available display
|
||||
area''.
|
||||
|
||||
@item :scale @var{scale}
|
||||
This should be a number, where values higher than 1 means to increase
|
||||
the size, and lower means to decrease the size. For instance, a value
|
||||
|
|
@ -7428,6 +7456,35 @@ truncated or continued when the text reaches the right margin.
|
|||
Right-to-left paragraphs are displayed beginning at the right margin,
|
||||
and are continued or truncated at the left margin.
|
||||
|
||||
@cindex paragraph-start, and bidirectional display
|
||||
@cindex paragraph-separate, and bidirectional display
|
||||
Where exactly paragraphs start and end, for the purpose of the Emacs
|
||||
@acronym{UBA} implementation, is determined by the following two
|
||||
buffer-local variables (note that that @code{paragraph-start} and
|
||||
@code{paragraph-separate} have no influence on this). By default both
|
||||
of these variables are @code{nil}, and paragraphs are bounded by empty
|
||||
lines, i.e., lines that consist entirely of zero or more whitespace
|
||||
characters followed by a newline.
|
||||
|
||||
@defvar bidi-paragraph-start-re
|
||||
If non-@code{nil}, this variable's value should be a regular
|
||||
expression matching a line that starts or separates two paragraphs.
|
||||
The regular expression is always matched after a newline, so it is
|
||||
best to anchor it, i.e., begin it with a @code{"^"}.
|
||||
@end defvar
|
||||
|
||||
@defvar bidi-paragraph-separate-re
|
||||
If non-@code{nil}, this variable's value should be a regular
|
||||
expression matching a line separates two paragraphs. The regular
|
||||
expression is always matched after a newline, so it is best to anchor
|
||||
it, i.e., begin it with a @code{"^"}.
|
||||
@end defvar
|
||||
|
||||
If you modify any of these two variables, you should normally modify
|
||||
both, to make sure they describe paragraphs consistently. For
|
||||
example, to have each new line start a new paragraph for
|
||||
bidi-reordering purposes, set both variables to @code{"^"}.
|
||||
|
||||
By default, Emacs determines the base direction of each paragraph by
|
||||
looking at the text at its beginning. The precise method of
|
||||
determining the base direction is specified by the @acronym{UBA}; in a
|
||||
|
|
|
|||
|
|
@ -1196,6 +1196,7 @@ Text
|
|||
* Decompression:: Dealing with compressed data.
|
||||
* Base 64:: Conversion to or from base 64 encoding.
|
||||
* Checksum/Hash:: Computing cryptographic hashes.
|
||||
* GnuTLS Cryptography:: Cryptographic algorithms imported from GnuTLS.
|
||||
* Parsing HTML/XML:: Parsing HTML and XML.
|
||||
* Atomic Changes:: Installing several buffer changes atomically.
|
||||
* Change Hooks:: Supplying functions to be run when text is changed.
|
||||
|
|
|
|||
|
|
@ -1511,12 +1511,12 @@ respects. A property list behaves like an association list in which
|
|||
each key can occur only once. @xref{Property Lists}, for a comparison
|
||||
of property lists and association lists.
|
||||
|
||||
@defun assoc key alist
|
||||
@defun assoc key alist &optional testfn
|
||||
This function returns the first association for @var{key} in
|
||||
@var{alist}, comparing @var{key} against the alist elements using
|
||||
@code{equal} (@pxref{Equality Predicates}). It returns @code{nil} if no
|
||||
association in @var{alist} has a @sc{car} @code{equal} to @var{key}.
|
||||
For example:
|
||||
@var{testfn} if non-nil, or @code{equal} if nil (@pxref{Equality
|
||||
Predicates}). It returns @code{nil} if no association in @var{alist}
|
||||
has a @sc{car} equal to @var{key}. For example:
|
||||
|
||||
@smallexample
|
||||
(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))
|
||||
|
|
@ -1561,11 +1561,11 @@ this as reverse @code{assoc}, finding the key for a given value.
|
|||
@defun assq key alist
|
||||
This function is like @code{assoc} in that it returns the first
|
||||
association for @var{key} in @var{alist}, but it makes the comparison
|
||||
using @code{eq} instead of @code{equal}. @code{assq} returns @code{nil}
|
||||
if no association in @var{alist} has a @sc{car} @code{eq} to @var{key}.
|
||||
This function is used more often than @code{assoc}, since @code{eq} is
|
||||
faster than @code{equal} and most alists use symbols as keys.
|
||||
@xref{Equality Predicates}.
|
||||
using @code{eq}. @code{assq} returns @code{nil} if no association in
|
||||
@var{alist} has a @sc{car} @code{eq} to @var{key}. This function is
|
||||
used more often than @code{assoc}, since @code{eq} is faster than
|
||||
@code{equal} and most alists use symbols as keys. @xref{Equality
|
||||
Predicates}.
|
||||
|
||||
@smallexample
|
||||
(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))
|
||||
|
|
@ -1589,16 +1589,20 @@ keys may not be symbols:
|
|||
@end smallexample
|
||||
@end defun
|
||||
|
||||
@defun alist-get key alist &optional default remove
|
||||
This function is like @code{assq}, but instead of returning the entire
|
||||
association for @var{key} in @var{alist},
|
||||
@w{@code{(@var{key} . @var{value})}}, it returns just the @var{value}.
|
||||
If @var{key} is not found in @var{alist}, it returns @var{default}.
|
||||
@defun alist-get key alist &optional default remove testfn
|
||||
This function is similar to @code{assq}. It finds the first
|
||||
association @w{@code{(@var{key} . @var{value})}} by comparing
|
||||
@var{key} with @var{alist} elements, and, if found, returns the
|
||||
@var{value} of that association. If no association is found, the
|
||||
function returns @var{default}. Comparison of @var{key} against
|
||||
@var{alist} elements uses the function specified by @var{testfn},
|
||||
defaulting to @code{eq}.
|
||||
|
||||
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-@code{nil} means to remove
|
||||
@var{key} from @var{alist} if the new value is @code{eql} to @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-@code{nil}
|
||||
means to remove @var{key}'s association from @var{alist} if the new
|
||||
value is @code{eql} to @var{default}.
|
||||
@end defun
|
||||
|
||||
@defun rassq value alist
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ the character after point.
|
|||
* Decompression:: Dealing with compressed data.
|
||||
* Base 64:: Conversion to or from base 64 encoding.
|
||||
* Checksum/Hash:: Computing cryptographic hashes.
|
||||
* GnuTLS Cryptography:: Cryptographic algorithms imported from GnuTLS.
|
||||
* Parsing HTML/XML:: Parsing HTML and XML.
|
||||
* Atomic Changes:: Installing several buffer changes atomically.
|
||||
* Change Hooks:: Supplying functions to be run when text is changed.
|
||||
|
|
@ -4235,6 +4236,7 @@ A marker represents a buffer position to jump to.
|
|||
A string is text saved in the register.
|
||||
|
||||
@item a rectangle
|
||||
@cindex rectangle, as contents of a register
|
||||
A rectangle is represented by a list of strings.
|
||||
|
||||
@item @code{(@var{window-configuration} @var{position})}
|
||||
|
|
@ -4436,6 +4438,11 @@ similar theoretical weakness also exists in SHA-1. Therefore, for
|
|||
security-related applications you should use the other hash types,
|
||||
such as SHA-2.
|
||||
|
||||
@defun secure-hash-algorithms
|
||||
This function returns a list of symbols representing algorithms that
|
||||
@code{secure-hash} can use.
|
||||
@end defun
|
||||
|
||||
@defun secure-hash algorithm object &optional start end binary
|
||||
This function returns a hash for @var{object}. The argument
|
||||
@var{algorithm} is a symbol stating which hash to compute: one of
|
||||
|
|
@ -4494,6 +4501,200 @@ It should be somewhat more efficient on larger buffers than
|
|||
@c according to what we find useful.
|
||||
@end defun
|
||||
|
||||
@node GnuTLS Cryptography
|
||||
@section GnuTLS Cryptography
|
||||
@cindex MD5 checksum
|
||||
@cindex SHA hash
|
||||
@cindex hash, cryptographic
|
||||
@cindex cryptographic hash
|
||||
@cindex AEAD cipher
|
||||
@cindex cipher, AEAD
|
||||
@cindex symmetric cipher
|
||||
@cindex cipher, symmetric
|
||||
|
||||
If compiled with GnuTLS, Emacs offers built-in cryptographic support.
|
||||
Following the GnuTLS API terminology, the available tools are digests,
|
||||
MACs, symmetric ciphers, and AEAD ciphers.
|
||||
|
||||
The terms used herein, such as IV (Initialization Vector), require
|
||||
some familiarity with cryptography and will not be defined in detail.
|
||||
Please consult @uref{https://www.gnutls.org/} for specific
|
||||
documentation which may help you understand the terminology and
|
||||
structure of the GnuTLS library.
|
||||
|
||||
@menu
|
||||
* Format of GnuTLS Cryptography Inputs::
|
||||
* GnuTLS Cryptographic Functions::
|
||||
@end menu
|
||||
|
||||
@node Format of GnuTLS Cryptography Inputs
|
||||
@subsection Format of GnuTLS Cryptography Inputs
|
||||
@cindex format of gnutls cryptography inputs
|
||||
@cindex gnutls cryptography inputs format
|
||||
|
||||
The inputs to GnuTLS cryptographic functions can be specified in
|
||||
several ways, both as primitive Emacs Lisp types or as lists.
|
||||
|
||||
The list form is currently similar to how @code{md5} and
|
||||
@code{secure-hash} operate.
|
||||
|
||||
@table @code
|
||||
@item @var{buffer}
|
||||
Simply passing a buffer as input means the whole buffer should be used.
|
||||
|
||||
@item @var{string}
|
||||
A string as input will be used directly. It may be modified by the
|
||||
function (unlike most other Emacs Lisp functions) to reduce the chance
|
||||
of exposing sensitive data after the function does its work.
|
||||
|
||||
@item (@var{buffer-or-string} @var{start} @var{end} @var{coding-system} @var{noerror})
|
||||
This specifies a buffer or a string as described above, but an
|
||||
optional range can be specified with @var{start} and @var{end}.
|
||||
|
||||
In addition an optional @var{coding-system} can be specified if needed.
|
||||
|
||||
The last optional item, @var{noerror}, overrides the normal error when
|
||||
the text can't be encoded using the specified or chosen coding system.
|
||||
When @var{noerror} is non-@code{nil}, this function silently uses
|
||||
@code{raw-text} coding instead.
|
||||
|
||||
@item (@code{iv-auto} @var{length})
|
||||
This will generate an IV (Initialization Vector) of the specified
|
||||
length using the GnuTLS @code{GNUTLS_RND_NONCE} generator and pass it
|
||||
to the function. This ensures that the IV is unpredictable and
|
||||
unlikely to be reused in the same session. The actual value of the IV
|
||||
is returned by the function as described below.
|
||||
|
||||
@end table
|
||||
|
||||
@node GnuTLS Cryptographic Functions
|
||||
@subsection GnuTLS Cryptographic Functions
|
||||
@cindex gnutls cryptographic functions
|
||||
|
||||
@defun gnutls-digests
|
||||
This function returns the alist of the GnuTLS digest algorithms.
|
||||
|
||||
Each entry has a key which represents the algorithm, followed by a
|
||||
plist with internal details about the algorithm. The plist will have
|
||||
@code{:type gnutls-digest-algorithm} and also will have the key
|
||||
@code{:digest-algorithm-length 64} to indicate the size, in bytes, of
|
||||
the resulting digest.
|
||||
|
||||
There is a name parallel between GnuTLS MAC and digest algorithms but
|
||||
they are separate things internally and should not be mixed.
|
||||
@end defun
|
||||
|
||||
@defun gnutls-hash-digest digest-method input
|
||||
The @var{digest-method} can be the whole plist from
|
||||
@code{gnutls-digests}, or just the symbol key, or a string with the
|
||||
name of that symbol.
|
||||
|
||||
The @var{input} can be specified as a buffer or string or in other
|
||||
ways (@pxref{Format of GnuTLS Cryptography Inputs}).
|
||||
|
||||
This function returns @code{nil} on error, and signals a Lisp error if
|
||||
the @var{digest-method} or @var{input} are invalid. On success, it
|
||||
returns a list of a binary string (the output) and the IV used.
|
||||
@end defun
|
||||
|
||||
@defun gnutls-macs
|
||||
This function returns the alist of the GnuTLS MAC algorithms.
|
||||
|
||||
Each entry has a key which represents the algorithm, followed by a
|
||||
plist with internal details about the algorithm. The plist will have
|
||||
@code{:type gnutls-mac-algorithm} and also will have the keys
|
||||
@code{:mac-algorithm-length} @code{:mac-algorithm-keysize}
|
||||
@code{:mac-algorithm-noncesize} to indicate the size, in bytes, of the
|
||||
resulting hash, the key, and the nonce respectively.
|
||||
|
||||
The nonce is currently unused and only some MACs support it.
|
||||
|
||||
There is a name parallel between GnuTLS MAC and digest algorithms but
|
||||
they are separate things internally and should not be mixed.
|
||||
@end defun
|
||||
|
||||
@defun gnutls-hash-mac hash-method key input
|
||||
The @var{hash-method} can be the whole plist from
|
||||
@code{gnutls-macs}, or just the symbol key, or a string with the
|
||||
name of that symbol.
|
||||
|
||||
The @var{key} can be specified as a buffer or string or in other ways
|
||||
(@pxref{Format of GnuTLS Cryptography Inputs}). The @var{key} will be
|
||||
wiped after use if it's a string.
|
||||
|
||||
The @var{input} can be specified as a buffer or string or in other
|
||||
ways (@pxref{Format of GnuTLS Cryptography Inputs}).
|
||||
|
||||
This function returns @code{nil} on error, and signals a Lisp error if
|
||||
the @var{hash-method} or @var{key} or @var{input} are invalid.
|
||||
|
||||
On success, it returns a list of a binary string (the output) and the
|
||||
IV used.
|
||||
@end defun
|
||||
|
||||
@defun gnutls-ciphers
|
||||
This function returns the alist of the GnuTLS ciphers.
|
||||
|
||||
Each entry has a key which represents the cipher, followed by a plist
|
||||
with internal details about the algorithm. The plist will have
|
||||
@code{:type gnutls-symmetric-cipher} and also will have the keys
|
||||
@code{:cipher-aead-capable} set to @code{nil} or @code{t} to indicate
|
||||
AEAD capability; and @code{:cipher-tagsize} @code{:cipher-blocksize}
|
||||
@code{:cipher-keysize} @code{:cipher-ivsize} to indicate the size, in
|
||||
bytes, of the tag, block size of the resulting data, the key, and the
|
||||
IV respectively.
|
||||
@end defun
|
||||
|
||||
@defun gnutls-symmetric-encrypt cipher key iv input &optional aead_auth
|
||||
The @var{cipher} can be the whole plist from
|
||||
@code{gnutls-ciphers}, or just the symbol key, or a string with the
|
||||
name of that symbol.
|
||||
|
||||
The @var{key} can be specified as a buffer or string or in other ways
|
||||
(@pxref{Format of GnuTLS Cryptography Inputs}). The @var{key} will be
|
||||
wiped after use if it's a string.
|
||||
|
||||
The @var{iv} and @var{input} and the optional @var{aead_auth} can be
|
||||
specified as a buffer or string or in other ways (@pxref{Format of
|
||||
GnuTLS Cryptography Inputs}).
|
||||
|
||||
@var{aead_auth} is only checked with AEAD ciphers, that is, ciphers whose
|
||||
plist has @code{:cipher-aead-capable t}. Otherwise it's ignored.
|
||||
|
||||
This function returns @code{nil} on error, and signals a Lisp error if
|
||||
the @var{cipher} or @var{key}, @var{iv}, or @var{input} are invalid,
|
||||
or if @var{aead_auth} was specified with an AEAD cipher and was
|
||||
invalid.
|
||||
|
||||
On success, it returns a list of a binary string (the output) and the
|
||||
IV used.
|
||||
@end defun
|
||||
|
||||
@defun gnutls-symmetric-decrypt cipher key iv input &optional aead_auth
|
||||
The @var{cipher} can be the whole plist from
|
||||
@code{gnutls-ciphers}, or just the symbol key, or a string with the
|
||||
name of that symbol.
|
||||
|
||||
The @var{key} can be specified as a buffer or string or in other ways
|
||||
(@pxref{Format of GnuTLS Cryptography Inputs}). The @var{key} will be
|
||||
wiped after use if it's a string.
|
||||
|
||||
The @var{iv} and @var{input} and the optional @var{aead_auth} can be
|
||||
specified as a buffer or string or in other ways (@pxref{Format of
|
||||
GnuTLS Cryptography Inputs}).
|
||||
|
||||
@var{aead_auth} is only checked with AEAD ciphers, that is, ciphers whose
|
||||
plist has @code{:cipher-aead-capable t}. Otherwise it's ignored.
|
||||
|
||||
This function returns @code{nil} on decryption error, and signals a
|
||||
Lisp error if the @var{cipher} or @var{key}, @var{iv}, or @var{input}
|
||||
are invalid, or if @var{aead_auth} was specified with an AEAD cipher
|
||||
and was invalid.
|
||||
|
||||
On success, it returns a list of a binary string (the output) and the
|
||||
IV used.
|
||||
@end defun
|
||||
|
||||
@node Parsing HTML/XML
|
||||
@section Parsing HTML and XML
|
||||
@cindex parsing html
|
||||
|
|
|
|||
|
|
@ -292,7 +292,13 @@ Self-insert an expression. The right-parenthesis is inserted for you
|
|||
(@code{ses-read-cell}). To access another cell's value, just use its
|
||||
identifier in your expression. Whenever the other cell is changed,
|
||||
this cell's formula will be reevaluated. While typing in the
|
||||
expression, you can use @kbd{M-@key{TAB}} to complete symbol names.
|
||||
expression, you can use the following keys:
|
||||
@table @kbd
|
||||
@item M-@key{TAB}
|
||||
to complete symbol names, and
|
||||
@item C-h C-n
|
||||
to list the named cells symbols in a help buffer.
|
||||
@end table
|
||||
|
||||
@item ' @r{(apostrophe)}
|
||||
Enter a symbol (ses-read-symbol). @acronym{SES} remembers all symbols that have
|
||||
|
|
@ -458,11 +464,22 @@ Enter the default printer for the spreadsheet
|
|||
(@code{ses-read-default-printer}).
|
||||
@end table
|
||||
|
||||
The @code{ses-read-@var{xxx}-printer} commands have their own
|
||||
minibuffer history, which is preloaded with the set of all printers
|
||||
used in this spreadsheet, plus the standard printers (@pxref{Standard
|
||||
printer functions}) and the local printers (@pxref{Local printer
|
||||
functions}).
|
||||
The @code{ses-read-@var{xxx}-printer} allows the following commands during editing:
|
||||
|
||||
@table @kbd
|
||||
@item @key{arrow-up}
|
||||
@itemx @key{arrow-down}
|
||||
To browse history: the @code{ses-read-@var{xxx}-printer} commands have
|
||||
their own minibuffer history, which is preloaded with the set of all
|
||||
printers used in this spreadsheet, plus the standard printers
|
||||
(@pxref{Standard printer functions}) and the local printers
|
||||
(@pxref{Local printer functions}).
|
||||
@item @key{TAB}
|
||||
To complete the local printer symbols, and
|
||||
@item C-h C-p
|
||||
To list the local printers in a help buffer.
|
||||
@end table
|
||||
|
||||
|
||||
@node Standard printer functions
|
||||
@subsection Standard printer functions
|
||||
|
|
|
|||
|
|
@ -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{2017-06-04.19}
|
||||
\def\texinfoversion{2017-07-04.16}
|
||||
%
|
||||
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
|
||||
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
|
|
@ -11009,7 +11009,6 @@
|
|||
\DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
|
||||
\DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
|
||||
\DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
|
||||
\DeclareUnicodeCharacter{2127}{\ensuremath\mho}%
|
||||
\DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
|
||||
\DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
|
||||
\DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
|
||||
|
|
@ -11025,7 +11024,6 @@
|
|||
\DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
|
||||
\DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
|
||||
\DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
|
||||
\DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}%
|
||||
\DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
|
||||
\DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
|
||||
\DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
|
||||
|
|
@ -11034,8 +11032,6 @@
|
|||
\DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
|
||||
\DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
|
||||
\DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
|
||||
\DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}%
|
||||
\DeclareUnicodeCharacter{2201}{\ensuremath\complement}%
|
||||
\DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
|
||||
\DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
|
||||
\DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
|
||||
|
|
@ -11069,8 +11065,6 @@
|
|||
\DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
|
||||
\DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
|
||||
\DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
|
||||
\DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}%
|
||||
\DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}%
|
||||
\DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
|
||||
\DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
|
||||
\DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
|
||||
|
|
@ -11085,8 +11079,6 @@
|
|||
\DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
|
||||
\DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
|
||||
\DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
|
||||
\DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}%
|
||||
\DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}%
|
||||
\DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
|
||||
\DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
|
||||
\DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
|
||||
|
|
@ -11102,12 +11094,11 @@
|
|||
\DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
|
||||
\DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
|
||||
%
|
||||
\DeclareUnicodeCharacter{25A1}{\ensuremath\Box}%
|
||||
\DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
|
||||
\DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
|
||||
\DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
|
||||
\DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
|
||||
\DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}%
|
||||
\DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
|
||||
\DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
|
||||
\DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
|
||||
\DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
|
||||
|
|
@ -11129,7 +11120,6 @@
|
|||
\DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
|
||||
\DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
|
||||
\DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
|
||||
\DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}%
|
||||
\DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
|
||||
\DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
|
||||
\DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ copy and modify this GNU manual.''
|
|||
@c Entries for @command{install-info} to use
|
||||
@dircategory Emacs network features
|
||||
@direntry
|
||||
* TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
|
||||
* @value{tramp}: (tramp). Transparent Remote Access, Multiple Protocol
|
||||
Emacs remote file access via ssh and scp.
|
||||
@end direntry
|
||||
|
||||
|
|
@ -77,8 +77,8 @@ You can find the latest version of this document on the web at
|
|||
@ifhtml
|
||||
The latest release of @value{tramp} is available for
|
||||
@uref{https://ftp.gnu.org/gnu/tramp/, download}, or you may see
|
||||
@ref{Obtaining Tramp} for more details, including the Git server
|
||||
details.
|
||||
@ref{Obtaining @value{tramp}} for more details, including the Git
|
||||
server details.
|
||||
|
||||
@value{tramp} also has a @uref{https://savannah.gnu.org/projects/tramp/,
|
||||
Savannah Project Page}.
|
||||
|
|
@ -97,11 +97,12 @@ There is a mailing list for @value{tramp}, available at
|
|||
|
||||
For the end user:
|
||||
|
||||
* Obtaining Tramp:: How to obtain @value{tramp}.
|
||||
* Obtaining @value{tramp}:: How to obtain @value{tramp}.
|
||||
* History:: History of @value{tramp}.
|
||||
@ifset installchapter
|
||||
* Installation:: Installing @value{tramp} with your Emacs.
|
||||
@end ifset
|
||||
* Quick Start Guide:: Short introduction how to use @value{tramp}.
|
||||
* Configuration:: Configuring @value{tramp} for use.
|
||||
* Usage:: An overview of the operation of @value{tramp}.
|
||||
* Bug Reports:: Reporting Bugs and Problems.
|
||||
|
|
@ -192,7 +193,7 @@ and related programs. If these programs can successfully pass
|
|||
more secure alternative to @command{ftp} and other older access
|
||||
methods.
|
||||
|
||||
@value{tramp} on Windows operating systems is integrated with the
|
||||
@value{tramp} on MS Windows operating systems is integrated with the
|
||||
PuTTY package, and uses the @command{plink} program.
|
||||
|
||||
@value{tramp} mostly operates transparently in the background using
|
||||
|
|
@ -207,7 +208,7 @@ benefit of direct integration of @value{tramp} in Emacs.
|
|||
|
||||
@value{tramp} can transfer files using any number of available host
|
||||
programs for remote files, such as @command{rcp}, @command{scp},
|
||||
@command{rsync} or (under Windows) @command{pscp}. @value{tramp}
|
||||
@command{rsync} or (under MS Windows) @command{pscp}. @value{tramp}
|
||||
provides easy ways to specify these programs and customize them to
|
||||
specific files, hosts, or access methods.
|
||||
|
||||
|
|
@ -314,9 +315,9 @@ behind the scenes when you open a file with @value{tramp}.
|
|||
|
||||
|
||||
@c For the end user
|
||||
@node Obtaining Tramp
|
||||
@node Obtaining @value{tramp}
|
||||
@chapter Obtaining @value{tramp}
|
||||
@cindex obtaining Tramp
|
||||
@cindex obtaining @value{tramp}
|
||||
|
||||
@value{tramp} is included as part of Emacs (since Emacs version 22.1).
|
||||
|
||||
|
|
@ -354,7 +355,7 @@ From behind a firewall:
|
|||
@end example
|
||||
|
||||
@noindent
|
||||
Tramp developers:
|
||||
@value{tramp} developers:
|
||||
|
||||
@example
|
||||
] @strong{git clone login@@git.sv.gnu.org:/srv/git/tramp.git}
|
||||
|
|
@ -403,7 +404,7 @@ July 2002, @value{tramp} unified file names with Ange FTP@. In July
|
|||
2004, proxy hosts replaced multi-hop methods. Running commands on
|
||||
remote hosts was introduced in December 2005. Support for gateways
|
||||
since April 2007 (and removed in December 2016). GVFS integration
|
||||
started in February 2009. Remote commands on Windows hosts since
|
||||
started in February 2009. Remote commands on MS Windows hosts since
|
||||
September 2011. Ad-hoc multi-hop methods (with a changed syntax)
|
||||
re-enabled in November 2011. In November 2012, added Juergen
|
||||
Hoetzel's @file{tramp-adb.el}.
|
||||
|
|
@ -418,6 +419,147 @@ XEmacs support was stopped in January 2016. Since March 2017,
|
|||
@end ifset
|
||||
|
||||
|
||||
@node Quick Start Guide
|
||||
@chapter Short introduction how to use @value{tramp}
|
||||
@cindex quick start guide
|
||||
|
||||
@value{tramp} extends the Emacs file name syntax by a remote
|
||||
component. A remote file name looks always like
|
||||
@file{@trampfn{method,user@@host,/path/to/file}}.
|
||||
|
||||
You can use remote files exactly like ordinary files, that means you
|
||||
could open a file or directory by @kbd{C-x C-f
|
||||
@trampfn{method,user@@host,/path/to/file} @key{RET}}, edit the file,
|
||||
and save it. You can also mix local files and remote files in file
|
||||
operations with two arguments, like @code{copy-file} or
|
||||
@code{rename-file}. And finally, you can run even processes on a
|
||||
remote host, when the buffer you call the process from has a remote
|
||||
@code{default-directory}.
|
||||
|
||||
|
||||
@anchor{Quick Start Guide: File name syntax}
|
||||
@section File name syntax
|
||||
@cindex file name syntax
|
||||
|
||||
Remote file names are prepended by the @code{method}, @code{user} and
|
||||
@code{host} parts. All of them, and also the local file name part,
|
||||
are optional, in case of a missing part a default value is assumed.
|
||||
The default value for an empty local file name part is the remote
|
||||
user's home directory. The shortest remote file name is
|
||||
@file{@trampfn{-,,}}, therefore. The @samp{-} notation for the
|
||||
default host is used for syntactical reasons, @ref{Default Host}.
|
||||
|
||||
The @code{method} part describes the connection method used to reach
|
||||
the remote host, see below.
|
||||
|
||||
The @code{user} part is the user name for accessing the remote host.
|
||||
For the @option{smb} method, this could also require a domain name, in
|
||||
this case it is written as @code{user%domain}.
|
||||
|
||||
The @code{host} part must be a host name which could be resolved on
|
||||
your local host. It could be a short host name, a fully qualified
|
||||
domain name, an IPv4 or IPv6 address, @ref{File name syntax}. Some
|
||||
connection methods support also a notation of the port to be used, in
|
||||
this case it is written as @code{host#port}.
|
||||
|
||||
|
||||
@anchor{Quick Start Guide: @option{ssh} and @option{plink} methods}
|
||||
@section Using @option{ssh} and @option{plink}
|
||||
@cindex method ssh
|
||||
@cindex ssh method
|
||||
@cindex method plink
|
||||
@cindex plink method
|
||||
|
||||
If your local host runs an SSH client, and the remote host runs an SSH
|
||||
server, the most simple remote file name is
|
||||
@file{@trampfn{ssh,user@@host,/path/to/file}}. The remote file name
|
||||
@file{@trampfn{ssh,,}} opens a remote connection to yourself on the
|
||||
local host, and is taken often for testing @value{tramp}.
|
||||
|
||||
On MS Windows, PuTTY is often used as SSH client. Its @command{plink}
|
||||
method can be used there to open a connection to a remote host running
|
||||
an @command{ssh} server:
|
||||
@file{@trampfn{plink,user@@host,/path/to/file}}.
|
||||
|
||||
|
||||
@anchor{Quick Start Guide: @option{su}, @option{sudo} and @option{sg} methods}
|
||||
@section Using @option{su}, @option{sudo} and @option{sg}
|
||||
@cindex method su
|
||||
@cindex su method
|
||||
@cindex method sudo
|
||||
@cindex sudo method
|
||||
@cindex method sg
|
||||
@cindex sg method
|
||||
|
||||
Sometimes, it is necessary to work on your local host under different
|
||||
permissions. For this, you could use the @option{su} or @option{sudo}
|
||||
connection method. Both methods use @samp{root} as default user name
|
||||
and the return value of @code{(system-name)} as default host name.
|
||||
Therefore, it is convenient to open a file as
|
||||
@file{@trampfn{sudo,,/path/to/file}}.
|
||||
|
||||
The method @option{sg} stands for ``switch group''; the changed group
|
||||
must be used here as user name. The default host name is the same.
|
||||
|
||||
|
||||
@anchor{Quick Start Guide: @option{smb} method}
|
||||
@section Using @command{smbclient}
|
||||
@cindex method smb
|
||||
@cindex smb method
|
||||
@cindex ms windows (with smb method)
|
||||
@cindex smbclient
|
||||
|
||||
In order to access a remote MS Windows host or Samba server, the
|
||||
@command{smbclient} client is used. The remote file name syntax is
|
||||
@file{@trampfn{smb,user%domain@@host,/path/to/file}}. The first part
|
||||
of the local file name is the share exported by the remote host,
|
||||
@samp{path} in this example.
|
||||
|
||||
|
||||
@anchor{Quick Start Guide: GVFS-based methods}
|
||||
@section Using GVFS-based methods
|
||||
@cindex methods, gvfs
|
||||
@cindex gvfs based methods
|
||||
@cindex method sftp
|
||||
@cindex sftp method
|
||||
@cindex method afp
|
||||
@cindex afp method
|
||||
@cindex method dav
|
||||
@cindex method davs
|
||||
@cindex dav method
|
||||
@cindex davs method
|
||||
|
||||
On systems, which have installed the virtual file system for the Gnome
|
||||
Desktop (GVFS), its offered methods could be used by @value{tramp}.
|
||||
Examples are @file{@trampfn{sftp,user@@host,/path/to/file}},
|
||||
@file{@trampfn{afp,user@@host,/path/to/file}} (accessing Apple's AFP
|
||||
file system), @file{@trampfn{dav,user@@host,/path/to/file}} and
|
||||
@file{@trampfn{davs,user@@host,/path/to/file}} (for WebDAV shares).
|
||||
|
||||
|
||||
@anchor{Quick Start Guide: Google Drive}
|
||||
@section Using Google Drive
|
||||
@cindex method gdrive
|
||||
@cindex gdrive method
|
||||
@cindex google drive
|
||||
|
||||
Another GVFS-based method allows to access a Google Drive file system.
|
||||
The file name syntax is here always
|
||||
@file{@trampfn{gdrive,john.doe@@gmail.com,/path/to/file}}.
|
||||
@samp{john.doe@@gmail.com} stands here for your Google Drive account.
|
||||
|
||||
|
||||
@anchor{Quick Start Guide: Android}
|
||||
@section Using Android
|
||||
@cindex method adb
|
||||
@cindex adb method
|
||||
@cindex android
|
||||
|
||||
An Android device, which is connected via USB to your local host, can
|
||||
be accessed via the @command{adb} command. No user or host name is
|
||||
needed. The file name syntax is @file{@trampfn{adb,,/path/to/file}}.
|
||||
|
||||
|
||||
@node Configuration
|
||||
@chapter Configuring @value{tramp}
|
||||
@cindex configuration
|
||||
|
|
@ -610,16 +752,16 @@ continue connecting?''. @value{tramp} cannot handle such questions.
|
|||
Connections will have to be setup where logins can proceed without
|
||||
such questions.
|
||||
|
||||
@option{sshx} is useful for Windows users when @command{ssh} triggers
|
||||
an error about allocating a pseudo tty. This happens due to missing
|
||||
shell prompts that confuses @value{tramp}.
|
||||
@option{sshx} is useful for MS Windows users when @command{ssh}
|
||||
triggers an error about allocating a pseudo tty. This happens due to
|
||||
missing shell prompts that confuses @value{tramp}.
|
||||
|
||||
@option{sshx} supports the @samp{-p} argument.
|
||||
|
||||
@item @option{krlogin}
|
||||
@cindex method krlogin
|
||||
@cindex krlogin method
|
||||
@cindex Kerberos (with krlogin method)
|
||||
@cindex kerberos (with krlogin method)
|
||||
|
||||
This method is also similar to @option{ssh}. It uses the
|
||||
@command{krlogin -x} command only for remote host login.
|
||||
|
|
@ -627,7 +769,7 @@ This method is also similar to @option{ssh}. It uses the
|
|||
@item @option{ksu}
|
||||
@cindex method ksu
|
||||
@cindex ksu method
|
||||
@cindex Kerberos (with ksu method)
|
||||
@cindex kerberos (with ksu method)
|
||||
|
||||
This is another method from the Kerberos suite. It behaves like @option{su}.
|
||||
|
||||
|
|
@ -635,7 +777,7 @@ This is another method from the Kerberos suite. It behaves like @option{su}.
|
|||
@cindex method plink
|
||||
@cindex plink method
|
||||
|
||||
@option{plink} method is for Windows users with the PuTTY
|
||||
@option{plink} method is for MS Windows users with the PuTTY
|
||||
implementation of SSH@. It uses @samp{plink -ssh} to log in to the
|
||||
remote host.
|
||||
|
||||
|
|
@ -648,9 +790,9 @@ session.
|
|||
@cindex method plinkx
|
||||
@cindex plinkx method
|
||||
|
||||
Another method using PuTTY on Windows with session names instead of
|
||||
host names. @option{plinkx} calls @samp{plink -load @var{session} -t}.
|
||||
User names and port numbers must be defined in the session.
|
||||
Another method using PuTTY on MS Windows with session names instead of
|
||||
host names. @option{plinkx} calls @samp{plink -load @var{session}
|
||||
-t}. User names and port numbers must be defined in the session.
|
||||
|
||||
Check the @samp{Share SSH connections if possible} control for that
|
||||
session.
|
||||
|
|
@ -730,9 +872,9 @@ This method supports the @samp{-p} argument.
|
|||
in performance to @option{scp}. @option{scpx} uses @samp{ssh -t -t
|
||||
@var{host} -l @var{user} /bin/sh} to open a connection.
|
||||
|
||||
@option{scpx} is useful for Windows users when @command{ssh} triggers
|
||||
an error about allocating a pseudo tty. This happens due to missing
|
||||
shell prompts that confuses @value{tramp}.
|
||||
@option{scpx} is useful for MS Windows users when @command{ssh}
|
||||
triggers an error about allocating a pseudo tty. This happens due to
|
||||
missing shell prompts that confuses @value{tramp}.
|
||||
|
||||
This method supports the @samp{-p} argument.
|
||||
|
||||
|
|
@ -742,17 +884,17 @@ This method supports the @samp{-p} argument.
|
|||
@cindex pscp method
|
||||
@cindex pscp (with pscp method)
|
||||
@cindex plink (with pscp method)
|
||||
@cindex PuTTY (with pscp method)
|
||||
@cindex putty (with pscp method)
|
||||
@cindex method psftp
|
||||
@cindex psftp method
|
||||
@cindex pscp (with psftp method)
|
||||
@cindex plink (with psftp method)
|
||||
@cindex PuTTY (with psftp method)
|
||||
@cindex putty (with psftp method)
|
||||
|
||||
These methods are similar to @option{scp} or @option{sftp}, but they
|
||||
use the @command{plink} command to connect to the remote host, and
|
||||
they use @command{pscp} or @command{psftp} for transferring the files.
|
||||
These programs are part of PuTTY, an SSH implementation for Windows.
|
||||
These programs are part of PuTTY, an SSH implementation for MS Windows.
|
||||
|
||||
Check the @samp{Share SSH connections if possible} control for that
|
||||
session.
|
||||
|
|
@ -805,6 +947,8 @@ capable of servicing requests from @value{tramp}.
|
|||
@item @option{smb}
|
||||
@cindex method smb
|
||||
@cindex smb method
|
||||
@cindex ms windows (with smb method)
|
||||
@cindex smbclient
|
||||
|
||||
This non-native @value{tramp} method connects via the Server Message
|
||||
Block (SMB) networking protocol to hosts running file servers that are
|
||||
|
|
@ -831,15 +975,16 @@ handling}.
|
|||
|
||||
To accommodate user name/domain name syntax required by MS Windows
|
||||
authorization, @value{tramp} provides for an extended syntax in
|
||||
@code{user%domain} format (where user is user name, @code{%} is the
|
||||
percent symbol, and domain is the windows domain name). An example:
|
||||
@code{user%domain} format (where @code{user} is the user name,
|
||||
@code{%} is the percent symbol, and @code{domain} is the MS Windows
|
||||
domain name). An example:
|
||||
|
||||
@example
|
||||
@trampfn{smb,daniel%BIZARRE@@melancholia,/daniel$$/.emacs}
|
||||
@end example
|
||||
|
||||
where user @code{daniel} connects as a domain user to the SMB host
|
||||
@code{melancholia} in the windows domain @code{BIZARRE} to edit
|
||||
@code{melancholia} in the MS Windows domain @code{BIZARRE} to edit
|
||||
@file{.emacs} located in the home directory (share @code{daniel$}).
|
||||
|
||||
Alternatively, for local WINS users (as opposed to domain users),
|
||||
|
|
@ -876,6 +1021,7 @@ can.
|
|||
@item @option{adb}
|
||||
@cindex method adb
|
||||
@cindex adb method
|
||||
@cindex android (with adb method)
|
||||
|
||||
This method uses Android Debug Bridge program for accessing Android
|
||||
devices. The Android Debug Bridge must be installed locally for
|
||||
|
|
@ -949,7 +1095,7 @@ but with SSL encryption. Both methods support the port numbers.
|
|||
@item @option{gdrive}
|
||||
@cindex method gdrive
|
||||
@cindex gdrive method
|
||||
@cindex Google Drive
|
||||
@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
|
||||
|
|
@ -981,8 +1127,8 @@ that for security reasons refuse @command{ssh} connections.
|
|||
@cindex method synce
|
||||
@cindex synce method
|
||||
|
||||
@option{synce} method allows connecting to Windows Mobile devices. It
|
||||
uses GVFS for mounting remote files and directories via FUSE and
|
||||
@option{synce} method allows connecting to MS Windows Mobile devices.
|
||||
It uses GVFS for mounting remote files and directories via FUSE and
|
||||
requires the SYNCE-GVFS plugin.
|
||||
|
||||
@end table
|
||||
|
|
@ -1070,7 +1216,7 @@ access and it has the most reasonable security protocols, use
|
|||
@end example
|
||||
|
||||
If @option{ssh} is unavailable for whatever reason, look for other
|
||||
obvious options. For Windows, try the @option{plink} method. For
|
||||
obvious options. For MS Windows, try the @option{plink} method. For
|
||||
Kerberos, try @option{krlogin}.
|
||||
|
||||
For editing local files as @option{su} or @option{sudo} methods, try
|
||||
|
|
@ -1289,8 +1435,8 @@ restricted shell:
|
|||
|
||||
@node Firewalls
|
||||
@section Passing firewalls
|
||||
@cindex HTTP tunnel
|
||||
@cindex proxy hosts, HTTP tunnel
|
||||
@cindex http tunnel
|
||||
@cindex proxy hosts, http tunnel
|
||||
|
||||
Sometimes, it is not possible to reach a remote host directly. A
|
||||
firewall might be in the way, which could be passed via a proxy
|
||||
|
|
@ -1746,8 +1892,8 @@ Similar localization may be necessary for handling wrong password
|
|||
prompts, for which @value{tramp} uses @option{tramp-wrong-passwd-regexp}.
|
||||
|
||||
@item @command{tset} and other questions
|
||||
@cindex Unix command tset
|
||||
@cindex tset Unix command
|
||||
@cindex unix command tset
|
||||
@cindex tset unix command
|
||||
@vindex tramp-terminal-type
|
||||
|
||||
To suppress inappropriate prompts for terminal type, @value{tramp}
|
||||
|
|
@ -1847,7 +1993,7 @@ Then re-set the prompt string in @file{~/.emacs_SHELLNAME} as follows:
|
|||
|
||||
@example
|
||||
@group
|
||||
# Reset the prompt for remote Tramp shells.
|
||||
# Reset the prompt for remote @value{tramp} shells.
|
||||
if [ "$@{INSIDE_EMACS/*tramp*/tramp@}" == "tramp" ] ; then
|
||||
PS1="[\u@@\h \w]$ "
|
||||
fi
|
||||
|
|
@ -1859,8 +2005,8 @@ fi
|
|||
@end ifinfo
|
||||
|
||||
@item @command{busybox} / @command{nc}
|
||||
@cindex Unix command nc
|
||||
@cindex nc Unix command
|
||||
@cindex unix command nc
|
||||
@cindex nc unix command
|
||||
|
||||
@value{tramp}'s @option{nc} method uses the @command{nc} command to
|
||||
install and execute a listener as follows (see @code{tramp-methods}):
|
||||
|
|
@ -1891,7 +2037,7 @@ where @samp{192.168.0.1} is the remote host IP address
|
|||
|
||||
@node Android shell setup
|
||||
@section Android shell setup hints
|
||||
@cindex android shell setup
|
||||
@cindex android shell setup for ssh
|
||||
|
||||
@value{tramp} uses the @option{adb} method to access Android devices.
|
||||
Android devices provide a restricted shell access through an USB
|
||||
|
|
@ -2072,12 +2218,12 @@ to direct all auto saves to that location.
|
|||
|
||||
@node Windows setup hints
|
||||
@section Issues with Cygwin ssh
|
||||
@cindex Cygwin, issues
|
||||
@cindex cygwin, issues
|
||||
|
||||
This section is incomplete. Please share your solutions.
|
||||
|
||||
@cindex method sshx with Cygwin
|
||||
@cindex sshx method with Cygwin
|
||||
@cindex method sshx with cygwin
|
||||
@cindex sshx method with cygwin
|
||||
|
||||
Cygwin's @command{ssh} works only with a Cygwin version of Emacs. To
|
||||
check for compatibility: type @kbd{M-x eshell}, and start @kbd{ssh
|
||||
|
|
@ -2091,34 +2237,34 @@ Some older versions of Cygwin's @command{ssh} work with the
|
|||
@option{sshx} access method. Consult Cygwin's FAQ at
|
||||
@uref{https://cygwin.com/faq/} for details.
|
||||
|
||||
@cindex Cygwin and fakecygpty
|
||||
@cindex fakecygpty and Cygwin
|
||||
@cindex cygwin and fakecygpty
|
||||
@cindex fakecygpty and cygwin
|
||||
|
||||
On @uref{https://www.emacswiki.org/emacs/SshWithNTEmacs, the Emacs
|
||||
Wiki} it is explained how to use the helper program @code{fakecygpty}
|
||||
to fix this problem.
|
||||
|
||||
@cindex method scpx with Cygwin
|
||||
@cindex scpx method with Cygwin
|
||||
@cindex method scpx with cygwin
|
||||
@cindex scpx method with cygwin
|
||||
|
||||
When using the @option{scpx} access method, Emacs may call
|
||||
@command{scp} with Windows file naming, such as @code{c:/foo}. But
|
||||
@command{scp} with MS Windows file naming, such as @code{c:/foo}. But
|
||||
the version of @command{scp} that is installed with Cygwin does not
|
||||
know about Windows file naming, which causes it to incorrectly look
|
||||
know about MS Windows file naming, which causes it to incorrectly look
|
||||
for a host named @code{c}.
|
||||
|
||||
A workaround: write a wrapper script for @option{scp} to convert
|
||||
Windows file names to Cygwin file names.
|
||||
|
||||
@cindex Cygwin and ssh-agent
|
||||
@cindex SSH_AUTH_SOCK and Emacs on Windows
|
||||
@cindex cygwin and ssh-agent
|
||||
@cindex SSH_AUTH_SOCK and emacs on ms windows
|
||||
|
||||
When using the @command{ssh-agent} on Windows for password-less
|
||||
When using the @command{ssh-agent} on MS Windows for password-less
|
||||
interaction, @option{ssh} methods depend on the environment variable
|
||||
@env{SSH_AUTH_SOCK}. But this variable is not set when Emacs is
|
||||
started from a Desktop shortcut and authentication fails.
|
||||
|
||||
One workaround is to use a Windows based SSH Agent, such as
|
||||
One workaround is to use an MS Windows based SSH Agent, such as
|
||||
Pageant. It is part of the Putty Suite of tools.
|
||||
|
||||
The fallback is to start Emacs from a shell.
|
||||
|
|
@ -2716,11 +2862,11 @@ Arguments of the program to be debugged must be literal, can take
|
|||
relative or absolute paths, but not remote paths.
|
||||
|
||||
|
||||
@subsection Running remote processes on Windows hosts
|
||||
@subsection Running remote processes on MS Windows hosts
|
||||
@cindex winexe
|
||||
@cindex powershell
|
||||
|
||||
@command{winexe} runs processes on a remote Windows host, and
|
||||
@command{winexe} runs processes on a remote MS Windows host, and
|
||||
@value{tramp} can use it for @code{process-file} and
|
||||
@code{start-file-process}.
|
||||
|
||||
|
|
@ -2730,7 +2876,7 @@ processes triggered from @value{tramp}.
|
|||
|
||||
@option{explicit-shell-file-name} and @option{explicit-*-args} have to
|
||||
be set properly so @kbd{M-x shell} can open a proper remote shell on a
|
||||
Windows host. To open @command{cmd}, set it as follows:
|
||||
MS Windows host. To open @command{cmd}, set it as follows:
|
||||
|
||||
@lisp
|
||||
@group
|
||||
|
|
@ -3283,7 +3429,7 @@ Redefine another key sequence in Emacs for @kbd{C-x C-f}:
|
|||
(interactive)
|
||||
(find-file
|
||||
(read-file-name
|
||||
"Find Tramp file: "
|
||||
"Find @value{tramp} file: "
|
||||
"@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))))
|
||||
@end group
|
||||
@end lisp
|
||||
|
|
@ -3353,7 +3499,7 @@ The minibuffer expands for further editing.
|
|||
|
||||
@item Use bookmarks:
|
||||
|
||||
Use bookmarks to save Tramp file names.
|
||||
Use bookmarks to save @value{tramp} file names.
|
||||
@ifinfo
|
||||
@pxref{Bookmarks, , , emacs}.
|
||||
@end ifinfo
|
||||
|
|
@ -3736,4 +3882,3 @@ strings from being written to @file{*trace-output*}.
|
|||
@c * Explain how tramp.el works in principle: open a shell on a remote
|
||||
@c host and then send commands to it.
|
||||
@c * Consistent small or capitalized words especially in menus.
|
||||
@c * Make a unique declaration of @trampfn.
|
||||
|
|
|
|||
|
|
@ -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.2
|
||||
@set trampver 2.3.3-pre
|
||||
|
||||
@c Other flags from configuration
|
||||
@set instprefix /usr/local
|
||||
|
|
|
|||
154
etc/NEWS
154
etc/NEWS
|
|
@ -97,9 +97,28 @@ Terminal is automatically initialized to use 24-bit colors if the
|
|||
required capabilities are found in terminfo. See the FAQ node
|
||||
"Colors on a TTY" for more information.
|
||||
|
||||
+++
|
||||
** Emacs now obeys the X resource "scrollBar" at startup.
|
||||
The effect is similar to that of "toolBar" resource on the tool bar.
|
||||
|
||||
|
||||
* Changes in Emacs 26.1
|
||||
|
||||
+++
|
||||
** The function 'assoc' now takes an optional third argument 'testfn'.
|
||||
This argument, when non-nil, is used for comparison instead of
|
||||
'equal'.
|
||||
|
||||
---
|
||||
** New variable 'executable-prefix-env' for inserting magic signatures.
|
||||
This variable affects the format of the interpreter magic number
|
||||
inserted by 'executable-set-magic'. If non-nil, the magic number now
|
||||
takes the form "#!/usr/bin/env interpreter", otherwise the value
|
||||
determined by 'executable-prefix', which is by default
|
||||
"#!/path/to/interpreter". By default, 'executable-prefix-env' is nil,
|
||||
so the default behavior is not changed.
|
||||
|
||||
+++
|
||||
** The variable 'emacs-version' no longer includes the build number.
|
||||
This is now stored separately in a new variable, 'emacs-build-number'.
|
||||
|
||||
|
|
@ -353,6 +372,12 @@ variable of this kind to swap modifiers in Emacs.
|
|||
---
|
||||
** New input methods: 'cyrillic-tuvan', 'polish-prefix'.
|
||||
|
||||
---
|
||||
** The 'dutch' input method no longer attempts to support Turkish too.
|
||||
Also, it no longer converts 'IJ' and 'ij' to the compatibility
|
||||
characters U+0132 LATIN CAPITAL LIGATURE IJ and U+0133 LATIN SMALL
|
||||
LIGATURE IJ.
|
||||
|
||||
+++
|
||||
** File name quoting by adding the prefix "/:" is now possible for the
|
||||
local part of a remote file name. Thus, if you have a directory named
|
||||
|
|
@ -405,10 +430,74 @@ display of raw bytes from octal to hex.
|
|||
** You can now provide explicit field numbers in format specifiers.
|
||||
For example, '(format "%2$s %1$s" "X" "Y")' produces "Y X".
|
||||
|
||||
+++
|
||||
** 'comment-indent-function' values may now return a cons to specify a
|
||||
range of indentation.
|
||||
|
||||
+++
|
||||
** Emacs now supports optional display of line numbers in the buffer.
|
||||
This is similar to what linum-mode provides, but much faster and
|
||||
doesn't usurp the display margin for the line numbers. Customize the
|
||||
buffer-local variable 'display-line-numbers' to activate this optional
|
||||
display. Alternatively, you can use the `display-line-numbers-mode'
|
||||
minor mode or the global `global-display-line-numbers-mode'. When
|
||||
using these modes, customize `display-line-numbers-type' with the same
|
||||
value as you would use with `display-line-numbers'.
|
||||
|
||||
If `display-line-numbers' is set to t, Emacs will display the number
|
||||
of each line before the line. If set to 'relative', Emacs will
|
||||
display the line number relative to the line showing point, with that
|
||||
line's number displayed as absolute. If set to 'visual', Emacs will
|
||||
display a relative number for every screen line, i.e. it will count
|
||||
screen lines rather than buffer lines. The default is nil, which
|
||||
doesn't display the line numbers.
|
||||
|
||||
In 'relative' and 'visual' modes, the variable
|
||||
'display-line-numbers-current-absolute' controls what number is
|
||||
displayed for the line showing point. By default, this variable's
|
||||
value is t, which means display the absolute line number for the line
|
||||
showing point. Customizing this variable to a nil value will cause
|
||||
Emacs to show zero instead, which preserves horizontal space of the
|
||||
window in large buffers.
|
||||
|
||||
Line numbers are not displayed at all in minibuffer windows and in
|
||||
tooltips, as they are not useful there.
|
||||
|
||||
The new face 'line-number' is used to display the line numbers. The
|
||||
new face 'line-number-current-line' can be customized to display the
|
||||
current line's number differently from all the other line numbers; by
|
||||
default these two faces are identical.
|
||||
|
||||
You can also customize the new buffer-local variable
|
||||
'display-line-numbers-width' to specify a fixed minimal with of the
|
||||
area allocated to line-number display. The default is nil, meaning
|
||||
that Emacs will dynamically calculate the area width, enlarging or
|
||||
shrinking it as needed. Setting it to a non-negative integer
|
||||
specifies that as the minimal width; selecting a value that is large
|
||||
enough to display all line numbers in a buffer will then keep the
|
||||
line-number display area of constant width at all times, if that is
|
||||
desired.
|
||||
|
||||
When using `display-line-numbers-mode', you can customize the variable
|
||||
`display-line-numbers-grow-only' to a non-nil value; this means that
|
||||
Emacs may grow the above area width dynamically, but never shrink it.
|
||||
Under this mode, customizing the variable
|
||||
`display-line-numbers-width-start' to a non-nil value will cause Emacs
|
||||
to set `display-line-numbers-width' to the minimum width necessary to
|
||||
display all line numbers in the current buffer when first visiting it.
|
||||
|
||||
Lisp programs can disable line-number display for a particular screen
|
||||
line by putting the 'display-line-numbers-disable' text property or
|
||||
overlay property on the first character of that screen line. This is
|
||||
intended for add-on packages that need a finer control of the display.
|
||||
|
||||
Lisp programs that need to know how much screen estate is used up for
|
||||
line-number display in a window can use the new function
|
||||
'line-number-display-width'.
|
||||
|
||||
Linum mode and all similar packages are henceforth becoming obsolete.
|
||||
Users and developers are encouraged to switch to this new feature
|
||||
instead.
|
||||
|
||||
|
||||
* Editing Changes in Emacs 26.1
|
||||
|
||||
|
|
@ -500,11 +589,19 @@ current buffer with the contents of the accessible portion of a
|
|||
different buffer while keeping point, mark, markers, and text
|
||||
properties as intact as possible.
|
||||
|
||||
+++
|
||||
** More user control of reordering bidirectional text for display.
|
||||
The two new variables, 'bidi-paragraph-start-re' and
|
||||
'bidi-paragraph-separate-re', allow customization of what exactly are
|
||||
paragraphs, for the purposes of bidirectional display.
|
||||
|
||||
|
||||
* Changes in Specialized Modes and Packages in Emacs 26.1
|
||||
|
||||
** Dired
|
||||
You can now use '`?`' in 'dired-do-shell-command'; as ' ? ', it gets replaced
|
||||
|
||||
+++
|
||||
*** You can now use '`?`' in 'dired-do-shell-command'; as ' ? ', it gets replaced
|
||||
by the current file name.
|
||||
|
||||
*** html2text is now marked obsolete.
|
||||
|
|
@ -638,6 +735,18 @@ this is controlled by the 'wdired-create-parent-directories' variable.
|
|||
*** 'W' is now bound to 'browse-url-of-dired-file', and is useful for
|
||||
viewing HTML files and the like.
|
||||
|
||||
** Grep
|
||||
|
||||
---
|
||||
*** Grep commands will now use GNU grep's '--null' option if
|
||||
available, which allows distinguishing the filename from contents if
|
||||
they contain colons. This can be controlled by the new custom option
|
||||
'grep-use-null-filename-separator'.
|
||||
|
||||
*** The grep/rgrep/lgrep functions will now ask about saving files
|
||||
before running. This is controlled by the 'grep-save-buffers'
|
||||
variable.
|
||||
|
||||
** Edebug
|
||||
|
||||
*** Edebug can be prevented from pausing 1 second after reaching a
|
||||
|
|
@ -701,6 +810,14 @@ Ido mode is active.
|
|||
'image-scaling-factor' variable (if Emacs supports scaling the images
|
||||
in question).
|
||||
|
||||
+++
|
||||
*** It's now possible to specify aspect-ratio preserving combinations
|
||||
of :width/:max-height and :height/:max-width keywords. In either
|
||||
case, the "max" keywords win. (Previously some combinations would,
|
||||
depending on the aspect ratio of the image, just be ignored and in
|
||||
other instances this would lead to the aspect ratio not being
|
||||
preserved.)
|
||||
|
||||
+++
|
||||
*** Images inserted with 'insert-image' and related functions get a
|
||||
keymap put into the text properties (or overlays) that span the
|
||||
|
|
@ -978,10 +1095,6 @@ things like forward-word in readline work.
|
|||
** hideshow mode got four key bindings that are analogous to outline
|
||||
mode bindings: 'C-c @ C-a', 'C-c @ C-t', 'C-c @ C-d', and 'C-c @ C-e.'
|
||||
|
||||
** The grep/rgrep/lgrep functions will now ask about saving files
|
||||
before running. This is controlled by the 'grep-save-buffers'
|
||||
variable.
|
||||
|
||||
---
|
||||
** Customizable variable 'query-replace-from-to-separator'
|
||||
now doesn't propertize the string value of the separator.
|
||||
|
|
@ -1041,6 +1154,10 @@ instead of its first.
|
|||
renamed to 'lread--old-style-backquotes'. No user code should use
|
||||
this variable.
|
||||
|
||||
** To avoid confusion caused by "smart quotes", the reader no longer
|
||||
accepts Lisp symbols which begin with the following quotation
|
||||
characters: ‘’‛“”‟〞"', unless they are escaped with backslash.
|
||||
|
||||
+++
|
||||
** Module functions are now implemented slightly differently; in
|
||||
particular, the function 'internal--module-call' has been removed.
|
||||
|
|
@ -1050,9 +1167,26 @@ break.
|
|||
|
||||
* Lisp Changes in Emacs 26.1
|
||||
|
||||
+++
|
||||
** New optional argument TESTFN in 'alist-get', 'map-elt' and 'map-put'.
|
||||
|
||||
** New function 'seq-set-equal-p' to check if SEQUENCE1 and SEQUENCE2
|
||||
contain the same elements, regardless of the order.
|
||||
|
||||
** Checksum/Hash
|
||||
|
||||
+++
|
||||
** New function 'secure-hash-algorithms' to list the algorithms that
|
||||
'secure-hash' supports.
|
||||
See the node "(elisp) Checksum/Hash" in the ELisp manual for details.
|
||||
|
||||
+++
|
||||
** Emacs now exposes the GnuTLS cryptographic API with the functions
|
||||
'gnutls-macs' and 'gnutls-hash-mac'; 'gnutls-digests' and
|
||||
'gnutls-hash-digest'; 'gnutls-ciphers' and 'gnutls-symmetric-encrypt'
|
||||
and 'gnutls-symmetric-decrypt'.
|
||||
See the node "(elisp) GnuTLS Cryptography" in the ELisp manual for details.
|
||||
|
||||
+++
|
||||
** Emacs now supports records for user-defined types, via the new
|
||||
functions 'make-record', 'record', and 'recordp'. Records are now
|
||||
|
|
@ -1418,9 +1552,12 @@ For details see the section "Mouse Window Auto-selection" in the Elisp
|
|||
manual.
|
||||
|
||||
---
|
||||
** 'tcl-auto-fill-mode' is now declared obsolete. It's functionality
|
||||
** 'tcl-auto-fill-mode' is now declared obsolete. Its functionality
|
||||
can be replicated simply by setting 'comment-auto-fill-only-comments'.
|
||||
|
||||
** New pcase pattern 'rx' to match against a rx-style regular
|
||||
expression.
|
||||
|
||||
|
||||
* Changes in Emacs 26.1 on Non-Free Operating Systems
|
||||
|
||||
|
|
@ -1466,6 +1603,9 @@ debugger has been attached to it.
|
|||
** 'set-mouse-position' and 'set-mouse-absolute-pixel-position' work
|
||||
on macOS.
|
||||
|
||||
** Emacs can now be run as a GUI application from the command line on
|
||||
macOS.
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
This file is part of GNU Emacs.
|
||||
|
|
|
|||
|
|
@ -3367,7 +3367,7 @@ be strings that are compared case-insensitively.
|
|||
(sxhash (upcase a)))
|
||||
|
||||
(define-hash-table-test 'case-fold 'case-fold-string=
|
||||
'case-fold-string-hash))
|
||||
'case-fold-string-hash)
|
||||
|
||||
(make-hash-table :test 'case-fold)
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
;; Author: Fabrice Niessen <(concat "fniessen" at-sign "pirilampo.org")>
|
||||
;; URL: https://github.com/fniessen/emacs-leuven-theme
|
||||
;; Version: 20140929.1232
|
||||
;; Version: 20170715.0521
|
||||
;; Keywords: color theme
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
@ -600,6 +600,15 @@ Semantic, and Ansi-Color faces are included -- and much more...")
|
|||
`(rainbow-delimiters-depth-9-face ((,class (:foreground "#887070"))))
|
||||
`(rainbow-delimiters-mismatched-face ((,class ,paren-unmatched)))
|
||||
`(rainbow-delimiters-unmatched-face ((,class ,paren-unmatched)))
|
||||
`(realgud-overlay-arrow1 ((,class (:foreground "#005522"))))
|
||||
`(realgud-overlay-arrow2 ((,class (:foreground "#c18401"))))
|
||||
`(realgud-overlay-arrow3 ((,class (:foreground "#909183"))))
|
||||
`(realgud-bp-disabled-face ((,class (:foreground "#909183"))))
|
||||
`(realgud-bp-line-enabled-face ((,class (:underline "red"))))
|
||||
`(realgud-bp-line-disabled-face ((,class (:underline "#909183"))))
|
||||
`(realgud-file-name ((,class :foreground "#005522")))
|
||||
`(realgud-line-number ((,class :foreground "#A535AE")))
|
||||
`(realgud-backtrace-number ((,class :foreground "#A535AE" :weight bold)))
|
||||
`(recover-this-file ((,class (:weight bold :background "#FF3F3F"))))
|
||||
`(rng-error ((,class (:weight bold :foreground "red" :background "#FBE3E4"))))
|
||||
`(sh-heredoc ((,class (:foreground "blue" :background "#EEF5FE"))))
|
||||
|
|
|
|||
|
|
@ -602,18 +602,16 @@ jarring angry fruit salad look to reduce eye fatigue.")
|
|||
'(paren-no-match-face ((t (:bold t :background "white" :foreground "red"))))
|
||||
'(query-replace ((t (:foreground "brown4" :background "palevioletred2"))))
|
||||
'(region ((t (:background "blue3"))))
|
||||
|
||||
`(realgud-overlay-arrow1 ((t (:foreground "medium sea green"))))
|
||||
`(realgud-overlay-arrow2 ((t (:foreground "white"))))
|
||||
`(realgud-overlay-arrow3 ((t (:foreground "indian red"))))
|
||||
`(realgud-bp-enabled-face ((t (:inherit error))))
|
||||
`(realgud-bp-disabled-face ((t (:underline t))))
|
||||
`(realgud-bp-line-enabled-face ((t (:foreground "orange"))))
|
||||
`(realgud-bp-line-disabled-face ((t (:underline t))))
|
||||
`(realgud-file-name ((t (:foreground "cyan"))))
|
||||
`(realgud-line-number ((t (:foreground "yellow"))))
|
||||
`(realgud-backtrace-number ((t (:foreground "yellow" :weight bold))))))
|
||||
|
||||
'(realgud-overlay-arrow1 ((t (:foreground "medium sea green"))))
|
||||
'(realgud-overlay-arrow2 ((t (:foreground "white"))))
|
||||
'(realgud-overlay-arrow3 ((t (:foreground "indian red"))))
|
||||
'(realgud-bp-enabled-face ((t (:inherit error))))
|
||||
'(realgud-bp-disabled-face ((t (:underline t))))
|
||||
'(realgud-bp-line-enabled-face ((t (:foreground "orange"))))
|
||||
'(realgud-bp-line-disabled-face ((t (:underline t))))
|
||||
'(realgud-file-name ((t (:foreground "cyan"))))
|
||||
'(realgud-line-number ((t (:foreground "yellow"))))
|
||||
'(realgud-backtrace-number ((t (:foreground "yellow" :weight bold))))
|
||||
'(scroll-bar ((t (:background "grey75" :foreground "WhiteSmoke"))))
|
||||
'(secondary-selection ((t (:background "SkyBlue4"))))
|
||||
'(semantic-dirty-token-face ((t (:background "lightyellow"))))
|
||||
|
|
|
|||
|
|
@ -140,6 +140,16 @@ Semantic, and Ansi-Color faces are included.")
|
|||
;; Flyspell faces
|
||||
`(flyspell-duplicate ((,class (:underline ,orange-1))))
|
||||
`(flyspell-incorrect ((,class (:underline ,red-1))))
|
||||
;; Realgud
|
||||
`(realgud-overlay-arrow1 ((,class (:foreground "green"))))
|
||||
`(realgud-overlay-arrow2 ((,class (:foreground ,orange-1))))
|
||||
`(realgud-overlay-arrow3 ((,class (:foreground ,plum-0))))
|
||||
`(realgud-bp-disabled-face ((,class (:foreground ,blue-3))))
|
||||
`(realgud-bp-line-enabled-face ((,class (:underline "red"))))
|
||||
`(realgud-bp-line-disabled-face ((,class (:underline ,blue-3))))
|
||||
`(realgud-file-name ((,class :foreground ,blue-1)))
|
||||
`(realgud-line-number ((,class :foreground ,plum-0)))
|
||||
`(realgud-backtrace-number ((,class :foreground ,plum-0 :weight bold)))
|
||||
;; Semantic faces
|
||||
`(semantic-decoration-on-includes ((,class (:underline ,alum-4))))
|
||||
`(semantic-decoration-on-private-members-face
|
||||
|
|
|
|||
|
|
@ -124,6 +124,16 @@ Semantic, and Ansi-Color faces are included.")
|
|||
;; Flyspell
|
||||
`(flyspell-duplicate ((,class (:underline ,orange-1))))
|
||||
`(flyspell-incorrect ((,class (:underline ,red-1))))
|
||||
;; Realgud
|
||||
`(realgud-overlay-arrow1 ((,class (:foreground "dark green"))))
|
||||
`(realgud-overlay-arrow2 ((,class (:foreground "#7a4c02"))))
|
||||
`(realgud-overlay-arrow3 ((,class (:foreground ,orange-1))))
|
||||
`(realgud-bp-disabled-face ((,class (:foreground ,plum-1))))
|
||||
`(realgud-bp-line-enabled-face ((,class (:underline "red"))))
|
||||
`(realgud-bp-line-disabled-face ((,class (:underline ,plum-1))))
|
||||
`(realgud-file-name ((,class :foreground "dark green")))
|
||||
`(realgud-line-number ((,class :foreground ,blue-3)))
|
||||
`(realgud-backtrace-number ((,class :foreground ,blue-3 :weight bold)))
|
||||
;; Semantic faces
|
||||
`(semantic-decoration-on-includes ((,class (:underline ,cham-4))))
|
||||
`(semantic-decoration-on-private-members-face
|
||||
|
|
|
|||
|
|
@ -118,16 +118,16 @@
|
|||
'(outline-6 ((t (:foreground "light salmon" :weight bold))))
|
||||
'(outline-7 ((t (:foreground "pale goldenrod" :weight bold))))
|
||||
'(outline-8 ((t (:foreground "OliveDrab1" :weight bold))))
|
||||
`(realgud-overlay-arrow1 ((t (:foreground "medium spring green"))))
|
||||
`(realgud-overlay-arrow2 ((t (:foreground "OliveDrab1"))))
|
||||
`(realgud-overlay-arrow3 ((t (:foreground "light salmon"))))
|
||||
`(realgud-bp-enabled-face ((t (:inherit error))))
|
||||
`(realgud-bp-disabled-face ((t (:foreground "gray35"))))
|
||||
`(realgud-bp-line-enabled-face ((t (:foreground "light salmon"))))
|
||||
`(realgud-bp-line-disabled-face ((t (:foreground "medium spring green"))))
|
||||
`(realgud-file-name ((t (:foreground "dark khaki"))))
|
||||
`(realgud-line-number ((t (:foreground "cyan3"))))
|
||||
`(realgud-backtrace-number ((t (:foreground "cyan3" :weight bold))))))
|
||||
'(realgud-overlay-arrow1 ((t (:foreground "medium spring green"))))
|
||||
'(realgud-overlay-arrow2 ((t (:foreground "OliveDrab1"))))
|
||||
'(realgud-overlay-arrow3 ((t (:foreground "light salmon"))))
|
||||
'(realgud-bp-enabled-face ((t (:inherit error))))
|
||||
'(realgud-bp-disabled-face ((t (:foreground "gray35"))))
|
||||
'(realgud-bp-line-enabled-face ((t (:foreground "light salmon"))))
|
||||
'(realgud-bp-line-disabled-face ((t (:foreground "medium spring green"))))
|
||||
'(realgud-file-name ((t (:foreground "dark khaki"))))
|
||||
'(realgud-line-number ((t (:foreground "cyan3"))))
|
||||
'(realgud-backtrace-number ((t (:foreground "cyan3" :weight bold))))
|
||||
'(rcirc-my-nick ((t (:foreground "SpringGreen1" :weight bold))) t)
|
||||
'(rcirc-other-nick ((t (:foreground "dodger blue"))) t)
|
||||
'(rcirc-track-keyword ((t (:foreground "DodgerBlue" :weight bold))) t)
|
||||
|
|
|
|||
|
|
@ -90,6 +90,15 @@ Used and created by Tassilo Horn.")
|
|||
'(outline-7 ((t (:inherit font-lock-builtin-face :weight bold))))
|
||||
'(outline-8 ((t (:inherit font-lock-string-face :weight bold))))
|
||||
'(rcirc-my-nick ((t (:foreground "LightSkyBlue" :weight bold))))
|
||||
'(realgud-overlay-arrow1 ((t (:foreground "dark green"))))
|
||||
'(realgud-overlay-arrow2 ((t (:foreground "#c18401"))))
|
||||
'(realgud-overlay-arrow3 ((t (:foreground "gray60"))))
|
||||
'(realgud-bp-disabled-face ((t (:foreground "gray60"))))
|
||||
'(realgud-bp-line-enabled-face ((t (:underline "red"))))
|
||||
'(realgud-bp-line-disabled-face ((t (:underline "gray60"))))
|
||||
'(realgud-file-name ((t :foreground "dark green")))
|
||||
'(realgud-line-number ((t :foreground "#0184bc")))
|
||||
'(realgud-backtrace-number ((t :foreground "#0184bc" :weight bold)))
|
||||
'(region ((t (:background "lightgoldenrod1"))))
|
||||
'(show-paren-match ((t (:background "Cyan1" :weight bold))))
|
||||
'(show-paren-mismatch ((t (:background "deep pink" :weight bold))))
|
||||
|
|
|
|||
|
|
@ -75,8 +75,8 @@ of green, brown, and blue.")
|
|||
`(realgud-overlay-arrow3 ((,class (:foreground "wheat"))))
|
||||
`(realgud-bp-enabled-face ((,class (:inherit error))))
|
||||
`(realgud-bp-disabled-face ((,class (:foreground "dark slate gray"))))
|
||||
`(realgud-bp-line-enabled-face ((,class (:foreground "salmon"))))
|
||||
`(realgud-bp-line-disabled-face ((,class (:foreground "dark slate gray"))))
|
||||
`(realgud-bp-line-enabled-face ((,class (:underline "SpringGreen3"))))
|
||||
`(realgud-bp-line-disabled-face ((,class (:underline "salmon"))))
|
||||
`(realgud-file-name ((,class (:foreground "dark khaki"))))
|
||||
`(realgud-line-number ((,class (:foreground "dark cyan"))))
|
||||
`(realgud-backtrace-number ((,class (:foreground "dark cyan" :weight bold))))))
|
||||
|
|
|
|||
|
|
@ -83,6 +83,16 @@
|
|||
`(outline-4 ((,class (:foreground "RoyalBlue"))))
|
||||
`(outline-5 ((,class (:foreground "DeepSkyBlue"))))
|
||||
`(primary-selection ((,class (:background "blue3"))))
|
||||
`(realgud-overlay-arrow1 ((,class (:foreground "DarkGreen"))))
|
||||
`(realgud-overlay-arrow2 ((,class (:foreground "DarkOliveGreen"))))
|
||||
`(realgud-overlay-arrow3 ((,class (:foreground "gray60"))))
|
||||
`(realgud-bp-disabled-face ((,class (:foreground "gray60"))))
|
||||
`(realgud-bp-line-enabled-face ((,class (:underline "red"))))
|
||||
`(realgud-bp-line-disabled-face ((,class (:underline "gray60"))))
|
||||
`(realgud-file-name ((,class :foreground "DarkGreen")))
|
||||
`(realgud-line-number ((,class :foreground "blue3")))
|
||||
`(realgud-backtrace-number ((,class :foreground "blue3" :weight bold)))
|
||||
|
||||
`(region ((,class (:background "SkyBlue1"))))
|
||||
`(show-paren-match-face ((,class (:background "dodgerblue1" :foreground "white"))))
|
||||
`(show-paren-mismatch-face ((,class (:background "red1" :foreground "white"))))
|
||||
|
|
|
|||
|
|
@ -373,6 +373,7 @@ static void readline (linebuffer *, FILE *);
|
|||
static long readline_internal (linebuffer *, FILE *, char const *);
|
||||
static bool nocase_tail (const char *);
|
||||
static void get_tag (char *, char **);
|
||||
static void get_lispy_tag (char *);
|
||||
|
||||
static void analyze_regex (char *);
|
||||
static void free_regexps (void);
|
||||
|
|
@ -5347,7 +5348,7 @@ L_getit (void)
|
|||
/* Ok, then skip "(" before name in (defstruct (foo)) */
|
||||
dbp = skip_spaces (dbp);
|
||||
}
|
||||
get_tag (dbp, NULL);
|
||||
get_lispy_tag (dbp);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -5549,14 +5550,14 @@ Scheme_functions (FILE *inf)
|
|||
if (strneq (bp, "(def", 4) || strneq (bp, "(DEF", 4))
|
||||
{
|
||||
bp = skip_non_spaces (bp+4);
|
||||
/* Skip over open parens and white space. Don't continue past
|
||||
'\0'. */
|
||||
while (*bp && notinname (*bp))
|
||||
/* Skip over open parens and white space.
|
||||
Don't continue past '\0' or '='. */
|
||||
while (*bp && notinname (*bp) && *bp != '=')
|
||||
bp++;
|
||||
get_tag (bp, NULL);
|
||||
get_lispy_tag (bp);
|
||||
}
|
||||
if (LOOKING_AT (bp, "(SET!") || LOOKING_AT (bp, "(set!"))
|
||||
get_tag (bp, NULL);
|
||||
get_lispy_tag (bp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6591,6 +6592,22 @@ get_tag (register char *bp, char **namepp)
|
|||
*namepp = savenstr (bp, cp - bp);
|
||||
}
|
||||
|
||||
/* Similar to get_tag, but include '=' as part of the tag. */
|
||||
static void
|
||||
get_lispy_tag (register char *bp)
|
||||
{
|
||||
register char *cp = bp;
|
||||
|
||||
if (*bp != '\0')
|
||||
{
|
||||
/* Go till you get to white space or a syntactic break */
|
||||
for (cp = bp + 1; !notinname (*cp) || *cp == '='; cp++)
|
||||
continue;
|
||||
make_tag (bp, cp - bp, true,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Read a line of text from `stream' into `lbp', excluding the
|
||||
* newline or CR-NL, if any. Return the number of characters read from
|
||||
|
|
|
|||
|
|
@ -667,7 +667,9 @@ close_emacs_globals (ptrdiff_t num_symbols)
|
|||
"#ifndef DEFINE_SYMBOLS\n"
|
||||
"extern\n"
|
||||
"#endif\n"
|
||||
"struct Lisp_Symbol alignas (GCALIGNMENT) lispsym[%td];\n"),
|
||||
"struct {\n"
|
||||
" struct Lisp_Symbol alignas (GCALIGNMENT) s;\n"
|
||||
"} lispsym[%td];\n"),
|
||||
num_symbols);
|
||||
}
|
||||
|
||||
|
|
|
|||
48
lib/explicit_bzero.c
Normal file
48
lib/explicit_bzero.c
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/* Erasure of sensitive data, generic implementation.
|
||||
Copyright (C) 2016-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* An assembler implementation of explicit_bzero can be created as an
|
||||
assembler alias of an optimized bzero implementation.
|
||||
Architecture-specific implementations also need to define
|
||||
__explicit_bzero_chk. */
|
||||
|
||||
#if !_LIBC
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* glibc-internal users use __explicit_bzero_chk, and explicit_bzero
|
||||
redirects to that. */
|
||||
#undef explicit_bzero
|
||||
|
||||
/* Set LEN bytes of S to 0. The compiler will not delete a call to
|
||||
this function, even if S is dead after the call. */
|
||||
void
|
||||
explicit_bzero (void *s, size_t len)
|
||||
{
|
||||
#ifdef HAVE_EXPLICIT_MEMSET
|
||||
explicit_memset (s, 0, len);
|
||||
#else
|
||||
memset (s, '\0', len);
|
||||
# ifdef __GNUC__
|
||||
/* Compiler barrier. */
|
||||
asm volatile ("" ::: "memory");
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
|
@ -41,7 +41,7 @@ __fpending (FILE *fp)
|
|||
return fp->_ptr - fp->_buffer;
|
||||
#elif defined __minix /* Minix */
|
||||
return fp_->_ptr - fp_->_buf;
|
||||
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel */
|
||||
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
|
||||
return (fp_->_ptr ? fp_->_ptr - fp_->_base : 0);
|
||||
#elif defined __UCLIBC__ /* uClibc */
|
||||
return (fp->__modeflags & __FLAG_WRITING ? fp->__bufpos - fp->__bufstart : 0);
|
||||
|
|
@ -51,8 +51,6 @@ __fpending (FILE *fp)
|
|||
return fp->__bufp - fp->__buffer;
|
||||
#elif defined EPLAN9 /* Plan9 */
|
||||
return fp->wp - fp->buf;
|
||||
#elif defined __VMS /* VMS */
|
||||
return (*fp)->_ptr - (*fp)->_base;
|
||||
#else
|
||||
# error "Please port gnulib fpending.c to your platform!"
|
||||
return 1;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* getdtablesize() function for platforms that don't have it.
|
||||
/* getdtablesize() function: Return maximum possible file descriptor value + 1.
|
||||
Copyright (C) 2008-2017 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2008.
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stat --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=tzset --avoid=unsetenv --avoid=utime --avoid=utime-h --gnu-make --makefile-name=gnulib.mk.in --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-leading-zeros count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 diffseq dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp flexmember fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr minmax mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strftime strtoimax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unlocked-io update-copyright utimens vla warnings
|
||||
# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stat --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=tzset --avoid=unsetenv --avoid=utime --avoid=utime-h --gnu-make --makefile-name=gnulib.mk.in --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-leading-zeros count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 diffseq dtoastr dtotimespec dup2 environ execinfo explicit_bzero faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp flexmember fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr minmax mkostemp mktime nstrftime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strtoimax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unlocked-io update-copyright utimens vla warnings
|
||||
|
||||
|
||||
MOSTLYCLEANFILES += core *.stackdump
|
||||
|
|
@ -125,6 +125,7 @@ GNULIB_DUP2 = @GNULIB_DUP2@
|
|||
GNULIB_DUP3 = @GNULIB_DUP3@
|
||||
GNULIB_ENVIRON = @GNULIB_ENVIRON@
|
||||
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
|
||||
GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@
|
||||
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
|
||||
GNULIB_FCHDIR = @GNULIB_FCHDIR@
|
||||
GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
|
||||
|
|
@ -390,6 +391,7 @@ HAVE_DPRINTF = @HAVE_DPRINTF@
|
|||
HAVE_DUP2 = @HAVE_DUP2@
|
||||
HAVE_DUP3 = @HAVE_DUP3@
|
||||
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
|
||||
HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
|
||||
HAVE_FACCESSAT = @HAVE_FACCESSAT@
|
||||
HAVE_FCHDIR = @HAVE_FCHDIR@
|
||||
HAVE_FCHMODAT = @HAVE_FCHMODAT@
|
||||
|
|
@ -1356,6 +1358,17 @@ EXTRA_libgnu_a_SOURCES += execinfo.c
|
|||
endif
|
||||
## end gnulib module execinfo
|
||||
|
||||
## begin gnulib module explicit_bzero
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_explicit_bzero))
|
||||
|
||||
|
||||
EXTRA_DIST += explicit_bzero.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += explicit_bzero.c
|
||||
|
||||
endif
|
||||
## end gnulib module explicit_bzero
|
||||
|
||||
## begin gnulib module faccessat
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_faccessat))
|
||||
|
||||
|
|
@ -1798,6 +1811,16 @@ EXTRA_libgnu_a_SOURCES += mktime.c
|
|||
endif
|
||||
## end gnulib module mktime-internal
|
||||
|
||||
## begin gnulib module nstrftime
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_nstrftime))
|
||||
|
||||
libgnu_a_SOURCES += nstrftime.c
|
||||
|
||||
EXTRA_DIST += strftime.h
|
||||
|
||||
endif
|
||||
## end gnulib module nstrftime
|
||||
|
||||
## begin gnulib module openat-h
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_openat-h))
|
||||
|
||||
|
|
@ -2386,16 +2409,6 @@ EXTRA_libgnu_a_SOURCES += stpcpy.c
|
|||
endif
|
||||
## end gnulib module stpcpy
|
||||
|
||||
## begin gnulib module strftime
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_strftime))
|
||||
|
||||
libgnu_a_SOURCES += strftime.c
|
||||
|
||||
EXTRA_DIST += strftime.h
|
||||
|
||||
endif
|
||||
## end gnulib module strftime
|
||||
|
||||
## begin gnulib module string
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_string))
|
||||
|
||||
|
|
@ -2411,6 +2424,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
|||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
|
||||
-e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \
|
||||
-e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
|
||||
-e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
|
||||
-e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
|
||||
|
|
@ -2449,7 +2463,8 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
|||
-e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
|
||||
-e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
|
||||
< $(srcdir)/string.in.h | \
|
||||
sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
|
||||
sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
|
||||
-e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
|
||||
-e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
|
||||
-e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
|
||||
-e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@
|
|||
int _file; \
|
||||
unsigned int _flag; \
|
||||
} *) fp)
|
||||
# elif defined __VMS /* OpenVMS */
|
||||
# define fp_ ((struct _iobuf *) fp)
|
||||
# else
|
||||
# define fp_ fp
|
||||
# endif
|
||||
|
|
|
|||
|
|
@ -74,6 +74,23 @@
|
|||
/* The definition of _GL_WARN_ON_USE is copied here. */
|
||||
|
||||
|
||||
/* Clear a block of memory. The compiler will not delete a call to
|
||||
this function, even if the block is dead after the call. */
|
||||
#if @GNULIB_EXPLICIT_BZERO@
|
||||
# if ! @HAVE_EXPLICIT_BZERO@
|
||||
_GL_FUNCDECL_SYS (explicit_bzero, void,
|
||||
(void *__dest, size_t __n) _GL_ARG_NONNULL ((1)));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n));
|
||||
_GL_CXXALIASWARN (explicit_bzero);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef explicit_bzero
|
||||
# if HAVE_RAW_DECL_EXPLICIT_BZERO
|
||||
_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - "
|
||||
"use gnulib module explicit_bzero for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Find the index of the least-significant set bit. */
|
||||
#if @GNULIB_FFSL@
|
||||
# if !@HAVE_FFSL@
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ typedef size_t __xalloc_count_type;
|
|||
#if 7 <= __GNUC__
|
||||
# define xalloc_oversized(n, s) \
|
||||
__builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1)
|
||||
#elif 5 <= __GNUC__ && !__STRICT_ANSI__
|
||||
#elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__
|
||||
# define xalloc_oversized(n, s) \
|
||||
(__builtin_constant_p (n) && __builtin_constant_p (s) \
|
||||
? __xalloc_oversized (n, s) \
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
;;; todo-mode.el --- facilities for making and maintaining todo lists
|
||||
;;; todo-mode.el --- facilities for making and maintaining todo lists -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 1997, 1999, 2001-2017 Free Software Foundation, Inc.
|
||||
|
||||
|
|
@ -72,14 +72,14 @@ file truenames in `todo-directory' with the extension
|
|||
\".todo\". With non-nil ARCHIVES return the list of archive file
|
||||
truenames (those with the extension \".toda\")."
|
||||
(let ((files (if (file-exists-p todo-directory)
|
||||
(mapcar 'file-truename
|
||||
(mapcar #'file-truename
|
||||
(directory-files todo-directory t
|
||||
(if archives "\\.toda$" "\\.todo$") t)))))
|
||||
(if archives "\\.toda\\'" "\\.todo\\'") t)))))
|
||||
(sort files (lambda (s1 s2) (let ((cis1 (upcase s1))
|
||||
(cis2 (upcase s2)))
|
||||
(string< cis1 cis2))))))
|
||||
|
||||
(defcustom todo-files-function 'todo-files
|
||||
(defcustom todo-files-function #'todo-files
|
||||
"Function returning the value of the variable `todo-files'.
|
||||
This function should take an optional argument that, if non-nil,
|
||||
makes it return the value of the variable `todo-archives'."
|
||||
|
|
@ -188,6 +188,15 @@ The final element is \"*\", indicating an unspecified month.")
|
|||
"Array of abbreviated month names, in order.
|
||||
The final element is \"*\", indicating an unspecified month.")
|
||||
|
||||
(with-no-warnings
|
||||
;; FIXME: These vars lack a prefix, but this is out of our control, because
|
||||
;; they're defined by Calendar, e.g. for calendar-date-display-form.
|
||||
(defvar dayname)
|
||||
(defvar monthname)
|
||||
(defvar day)
|
||||
(defvar month)
|
||||
(defvar year))
|
||||
|
||||
(defconst todo-date-pattern
|
||||
(let ((dayname (diary-name-pattern calendar-day-name-array nil t)))
|
||||
(concat "\\(?4:\\(?5:" dayname "\\)\\|"
|
||||
|
|
@ -198,7 +207,7 @@ The final element is \"*\", indicating an unspecified month.")
|
|||
(month "\\(?7:[0-9]+\\|\\*\\)")
|
||||
(day "\\(?8:[0-9]+\\|\\*\\)")
|
||||
(year "-?\\(?9:[0-9]+\\|\\*\\)"))
|
||||
(mapconcat 'eval calendar-date-display-form ""))
|
||||
(mapconcat #'eval calendar-date-display-form ""))
|
||||
"\\)"))
|
||||
"Regular expression matching a todo item date header.")
|
||||
|
||||
|
|
@ -260,7 +269,7 @@ This function is the value of the user variable
|
|||
(let ((file (todo-short-file-name todo-current-todo-file)))
|
||||
(format "%s category %d: %s" file todo-category-number cat)))
|
||||
|
||||
(defcustom todo-mode-line-function 'todo-mode-line-control
|
||||
(defcustom todo-mode-line-function #'todo-mode-line-control
|
||||
"Function that returns a mode line control for Todo mode buffers.
|
||||
The function expects one argument holding the name of the current
|
||||
todo category. The resulting control becomes the local value of
|
||||
|
|
@ -555,13 +564,15 @@ This lacks the extension and directory components."
|
|||
(when (stringp file)
|
||||
(file-name-sans-extension (file-name-nondirectory file))))
|
||||
|
||||
(defun todo--files-type-list ()
|
||||
(mapcar (lambda (f) (list 'const (todo-short-file-name f)))
|
||||
(funcall todo-files-function)))
|
||||
|
||||
(defcustom todo-default-todo-file (todo-short-file-name
|
||||
(car (funcall todo-files-function)))
|
||||
"Todo file visited by first session invocation of `todo-show'."
|
||||
:type (when todo-files
|
||||
`(radio ,@(mapcar (lambda (f) (list 'const f))
|
||||
(mapcar 'todo-short-file-name
|
||||
(funcall todo-files-function)))))
|
||||
`(radio ,@(todo--files-type-list)))
|
||||
:group 'todo)
|
||||
|
||||
(defcustom todo-show-current-file t
|
||||
|
|
@ -598,9 +609,7 @@ Otherwise, `todo-show' always visits `todo-default-todo-file'."
|
|||
|
||||
(defcustom todo-category-completions-files nil
|
||||
"List of files for building `todo-read-category' completions."
|
||||
:type `(set ,@(mapcar (lambda (f) (list 'const f))
|
||||
(mapcar 'todo-short-file-name
|
||||
(funcall todo-files-function))))
|
||||
:type `(set ,@(todo--files-type-list))
|
||||
:group 'todo)
|
||||
|
||||
(defcustom todo-completion-ignore-case nil
|
||||
|
|
@ -707,11 +716,12 @@ and done items are always shown on visiting a category."
|
|||
(let ((rxfiles (directory-files todo-directory t
|
||||
".*\\.todr$" t)))
|
||||
(when (and rxfiles (> (length rxfiles) 1))
|
||||
(let ((rxf (mapcar 'todo-short-file-name rxfiles)))
|
||||
(let ((rxf (mapcar #'todo-short-file-name rxfiles)))
|
||||
(setq fi-file (todo-absolute-file-name
|
||||
(completing-read
|
||||
"Choose a regexp items file: "
|
||||
rxf) 'regexp))))))
|
||||
rxf)
|
||||
'regexp))))))
|
||||
(if (file-exists-p fi-file)
|
||||
(progn
|
||||
(set-window-buffer
|
||||
|
|
@ -823,7 +833,7 @@ buries it and restores state as needed."
|
|||
(when (buffer-live-p buf) (kill-buffer buf)))
|
||||
((eq major-mode 'todo-mode)
|
||||
(todo-save)
|
||||
(bury-buffer)))))
|
||||
(quit-window)))))
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;;; Navigation between and within categories
|
||||
|
|
@ -857,7 +867,7 @@ category is the first)."
|
|||
(zerop (todo-get-count 'done))
|
||||
(not (zerop (todo-get-count 'archived))))
|
||||
(setq todo-category-number
|
||||
(apply (if back '1- '1+) (list todo-category-number)))))
|
||||
(funcall (if back #'1- #'1+) todo-category-number))))
|
||||
(todo-category-select)
|
||||
(goto-char (point-min)))
|
||||
|
||||
|
|
@ -1117,7 +1127,8 @@ these files, also rename them accordingly."
|
|||
(snname (todo-short-file-name nname))
|
||||
(files (directory-files todo-directory t
|
||||
(concat ".*" (regexp-quote soname)
|
||||
".*\\.tod[aorty]$") t)))
|
||||
".*\\.tod[aorty]$")
|
||||
t)))
|
||||
(dolist (f files)
|
||||
(let* ((sfname (todo-short-file-name f))
|
||||
(fext (file-name-extension f t))
|
||||
|
|
@ -1363,10 +1374,12 @@ todo or done items."
|
|||
(let ((buffer-read-only)
|
||||
(beg (re-search-backward
|
||||
(concat "^" (regexp-quote (concat todo-category-beg cat))
|
||||
"\n") nil t))
|
||||
"\n")
|
||||
nil t))
|
||||
(end (if (re-search-forward
|
||||
(concat "\n\\(" (regexp-quote todo-category-beg)
|
||||
".*\n\\)") nil t)
|
||||
".*\n\\)")
|
||||
nil t)
|
||||
(match-beginning 1)
|
||||
(point-max))))
|
||||
(remove-overlays beg end)
|
||||
|
|
@ -1475,7 +1488,8 @@ the archive of the file moved to, creating it if it does not exist."
|
|||
(goto-char (point-max))
|
||||
(re-search-backward
|
||||
(concat "^" (regexp-quote todo-category-beg)
|
||||
"\\(" (regexp-quote cat) "\\)$") nil t)
|
||||
"\\(" (regexp-quote cat) "\\)$")
|
||||
nil t)
|
||||
(replace-match new nil nil nil 1))
|
||||
(setq todo-categories
|
||||
(append todo-categories (list (cons (or new cat) counts))))
|
||||
|
|
@ -1746,7 +1760,7 @@ consist of the the last todo items and the first done items."
|
|||
(let ((cat (todo-current-category)))
|
||||
(unless (> n 1) (setq n 1))
|
||||
(catch 'end
|
||||
(dotimes (i n)
|
||||
(dotimes (_ n)
|
||||
(let* ((marks (assoc cat todo-categories-with-marks))
|
||||
(ov (progn
|
||||
(unless (looking-at todo-item-start)
|
||||
|
|
@ -2134,7 +2148,8 @@ the item at point."
|
|||
(todo-item-start)
|
||||
(re-search-forward
|
||||
(concat " \\[" (regexp-quote todo-comment-string)
|
||||
": \\([^]]+\\)\\]") end t)))
|
||||
": \\([^]]+\\)\\]")
|
||||
end t)))
|
||||
(prompt (if comment "Edit comment: " "Enter a comment: "))
|
||||
(buffer-read-only nil))
|
||||
;; When there are marked items, user can invoke todo-edit-item
|
||||
|
|
@ -2150,7 +2165,8 @@ the item at point."
|
|||
(todo-item-start)
|
||||
(if (re-search-forward (concat " \\["
|
||||
(regexp-quote todo-comment-string)
|
||||
": \\([^]]+\\)\\]") end t)
|
||||
": \\([^]]+\\)\\]")
|
||||
end t)
|
||||
(if comment-delete
|
||||
(when (todo-y-or-n-p "Delete comment? ")
|
||||
(delete-region (match-beginning 0) (match-end 0)))
|
||||
|
|
@ -2182,7 +2198,8 @@ the item at point."
|
|||
(cons item 0))))))
|
||||
(when include-header
|
||||
(while (not (string-match (concat todo-date-string-start
|
||||
todo-date-pattern) new))
|
||||
todo-date-pattern)
|
||||
new))
|
||||
(setq new (read-from-minibuffer
|
||||
"Item must start with a date: " new))))
|
||||
;; Ensure lines following hard newlines are indented.
|
||||
|
|
@ -2211,7 +2228,8 @@ made in the number or names of categories."
|
|||
(regex "\\(\n\\)[^[:blank:]]")
|
||||
(buf (buffer-base-buffer)))
|
||||
(while (not (string-match (concat todo-date-string-start
|
||||
todo-date-pattern) item))
|
||||
todo-date-pattern)
|
||||
item))
|
||||
(setq item (read-from-minibuffer
|
||||
"Item must start with a date: " item)))
|
||||
;; Ensure lines following hard newlines are indented.
|
||||
|
|
@ -2270,8 +2288,7 @@ made in the number or names of categories."
|
|||
"\\)\\(?2: " diary-time-regexp "\\)?"
|
||||
(regexp-quote todo-nondiary-end) "?")
|
||||
(line-end-position) t)
|
||||
(let* ((odate (match-string-no-properties 1))
|
||||
(otime (match-string-no-properties 2))
|
||||
(let* ((otime (match-string-no-properties 2))
|
||||
(odayname (match-string-no-properties 5))
|
||||
(omonthname (match-string-no-properties 6))
|
||||
(omonth (match-string-no-properties 7))
|
||||
|
|
@ -2382,7 +2399,8 @@ made in the number or names of categories."
|
|||
(calendar-current-date))))
|
||||
(date (calendar-gregorian-from-absolute
|
||||
(+ (calendar-absolute-from-gregorian
|
||||
(list mm dd yy)) inc)))
|
||||
(list mm dd yy))
|
||||
inc)))
|
||||
(adjmm (nth 0 date)))
|
||||
;; Set year and month(name) to adjusted values.
|
||||
(unless (string= year "*")
|
||||
|
|
@ -2396,7 +2414,7 @@ made in the number or names of categories."
|
|||
;; If year, month or day date string components were
|
||||
;; changed, rebuild the date string.
|
||||
(when (memq what '(year month day))
|
||||
(setq ndate (mapconcat 'eval calendar-date-display-form ""))))
|
||||
(setq ndate (mapconcat #'eval calendar-date-display-form ""))))
|
||||
(when ndate (replace-match ndate nil nil nil 1))
|
||||
;; Add new time string to the header, if it was supplied.
|
||||
(when ntime
|
||||
|
|
@ -2423,7 +2441,7 @@ made in the number or names of categories."
|
|||
(when marked (goto-char (point-min)))
|
||||
(while (not (eobp))
|
||||
(unless (and marked (not (todo-marked-item-p)))
|
||||
(let* ((beg (todo-item-start))
|
||||
(let* ((_beg (todo-item-start))
|
||||
(lim (save-excursion (todo-item-end)))
|
||||
(end (save-excursion
|
||||
(or (todo-time-string-matcher lim)
|
||||
|
|
@ -2470,7 +2488,7 @@ items."
|
|||
(while (not (eobp))
|
||||
(if (todo-done-item-p) ; We've gone too far.
|
||||
(throw 'stop nil)
|
||||
(let* ((beg (todo-item-start))
|
||||
(let* ((_beg (todo-item-start))
|
||||
(lim (save-excursion (todo-item-end)))
|
||||
(end (save-excursion
|
||||
(or (todo-time-string-matcher lim)
|
||||
|
|
@ -2682,9 +2700,7 @@ section in the category moved to."
|
|||
(not marked))
|
||||
(let* ((buffer-read-only)
|
||||
(file1 todo-current-todo-file)
|
||||
(num todo-category-number)
|
||||
(item (todo-item-string))
|
||||
(diary-item (todo-diary-item-p))
|
||||
(done-item (and (todo-done-item-p) item))
|
||||
(omark (save-excursion (todo-item-start) (point-marker)))
|
||||
(todo 0)
|
||||
|
|
@ -2956,7 +2972,8 @@ comments without asking."
|
|||
;; affirmed, omit subsequent comments without asking.
|
||||
(when (re-search-forward
|
||||
(concat " \\[" (regexp-quote todo-comment-string)
|
||||
": [^]]+\\]") end t)
|
||||
": [^]]+\\]")
|
||||
end t)
|
||||
(unwind-protect
|
||||
(if (eq first 'first)
|
||||
(setq first
|
||||
|
|
@ -3216,7 +3233,8 @@ the only category in the archive, the archive file is deleted."
|
|||
(let* ((cat (todo-current-category))
|
||||
(tbuf (find-file-noselect
|
||||
(concat (file-name-sans-extension todo-current-todo-file)
|
||||
".todo") t))
|
||||
".todo")
|
||||
t))
|
||||
(marked (assoc cat todo-categories-with-marks))
|
||||
(item (concat (todo-item-string) "\n"))
|
||||
(marked-count 0)
|
||||
|
|
@ -3241,7 +3259,8 @@ the only category in the archive, the archive file is deleted."
|
|||
;; one, add it.
|
||||
(unless (re-search-forward
|
||||
(concat "^" (regexp-quote (concat todo-category-beg cat))
|
||||
"$") nil t)
|
||||
"$")
|
||||
nil t)
|
||||
(todo-add-category nil cat)
|
||||
(setq newcat t))
|
||||
;; Go to top of category's done section.
|
||||
|
|
@ -3449,9 +3468,9 @@ decreasing or increasing its number."
|
|||
(unless prompt (setq priority candidate)))
|
||||
(let* ((lower (< curnum priority)) ; Priority is being lowered.
|
||||
(head (butlast todo-categories
|
||||
(apply (if lower 'identity '1+)
|
||||
(list (- maxnum priority)))))
|
||||
(tail (nthcdr (apply (if lower 'identity '1-) (list priority))
|
||||
(funcall (if lower #'identity #'1+)
|
||||
(- maxnum priority))))
|
||||
(tail (nthcdr (funcall (if lower #'identity #'1-) priority)
|
||||
todo-categories))
|
||||
;; Category's name and items counts list.
|
||||
(catcons (nth (1- curnum) todo-categories))
|
||||
|
|
@ -3537,7 +3556,7 @@ decreasing or increasing its number."
|
|||
"Return adjusted length of category label button.
|
||||
The adjustment ensures proper tabular alignment in Todo
|
||||
Categories mode."
|
||||
(let* ((categories (mapcar 'car todo-categories))
|
||||
(let* ((categories (mapcar #'car todo-categories))
|
||||
(longest (todo-longest-category-name-length categories))
|
||||
(catlablen (length todo-categories-category-label))
|
||||
(lc-diff (- longest catlablen)))
|
||||
|
|
@ -3623,24 +3642,24 @@ LABEL determines which type of count is sorted."
|
|||
ov)
|
||||
(insert-button str 'face nil
|
||||
'action
|
||||
`(lambda (button)
|
||||
(let ((key (todo-label-to-key ,label)))
|
||||
(if (and (member key todo-descending-counts)
|
||||
(eq key 'alpha))
|
||||
(progn
|
||||
;; If display is alphabetical, switch back to
|
||||
;; category priority order.
|
||||
(todo-display-sorted nil)
|
||||
(setq todo-descending-counts
|
||||
(delete key todo-descending-counts)))
|
||||
(todo-display-sorted key)))))
|
||||
(lambda (_button)
|
||||
(let ((key (todo-label-to-key label)))
|
||||
(if (and (member key todo-descending-counts)
|
||||
(eq key 'alpha))
|
||||
(progn
|
||||
;; If display is alphabetical, switch back to
|
||||
;; category priority order.
|
||||
(todo-display-sorted nil)
|
||||
(setq todo-descending-counts
|
||||
(delete key todo-descending-counts)))
|
||||
(todo-display-sorted key)))))
|
||||
(setq ov (make-overlay beg end))
|
||||
(overlay-put ov 'face 'todo-button)))
|
||||
|
||||
(defun todo-total-item-counts ()
|
||||
"Return a list of total item counts for the current file."
|
||||
(mapcar (lambda (i) (apply '+ (mapcar (lambda (l) (aref l i))
|
||||
(mapcar 'cdr todo-categories))))
|
||||
(mapcar (lambda (i) (apply #'+ (mapcar (lambda (x) (aref (cdr x) i))
|
||||
todo-categories)))
|
||||
(list 0 1 2 3)))
|
||||
|
||||
(defvar todo-categories-category-number 0
|
||||
|
|
@ -3685,9 +3704,10 @@ which is the value of the user option
|
|||
(not (zerop (todo-get-count 'archived cat))))
|
||||
'todo-archived-only
|
||||
nil)
|
||||
'action `(lambda (button) (let ((buf (current-buffer)))
|
||||
(todo-jump-to-category nil ,cat)
|
||||
(kill-buffer buf))))
|
||||
'action (lambda (_button)
|
||||
(let ((buf (current-buffer)))
|
||||
(todo-jump-to-category nil cat)
|
||||
(kill-buffer buf))))
|
||||
;; Highlight the sorted count column.
|
||||
(let* ((beg (+ opoint 7 (length str)))
|
||||
end ovl)
|
||||
|
|
@ -3766,8 +3786,8 @@ which is the value of the user option
|
|||
(delete-region (point) (point-max))
|
||||
;; Fill in the table with buttonized lines, each showing a category and
|
||||
;; its item counts.
|
||||
(mapc (lambda (cat) (todo-insert-category-line cat sortkey))
|
||||
(mapcar 'car cats))
|
||||
(dolist (cat cats)
|
||||
(todo-insert-category-line (car cat) sortkey))
|
||||
(newline)
|
||||
;; Add a line showing item count totals.
|
||||
(insert (make-string (+ 4 (length todo-categories-number-separator)) 32)
|
||||
|
|
@ -3823,7 +3843,8 @@ face."
|
|||
(when (looking-at todo-done-string-start)
|
||||
(setq in-done t))
|
||||
(re-search-backward (concat "^" (regexp-quote todo-category-beg)
|
||||
"\\(.*\\)\n") nil t)
|
||||
"\\(.*\\)\n")
|
||||
nil t)
|
||||
(setq cat (match-string-no-properties 1))
|
||||
(todo-category-number cat)
|
||||
(todo-category-select)
|
||||
|
|
@ -3885,9 +3906,7 @@ This variable should be set interactively by
|
|||
|
||||
(defcustom todo-filter-files nil
|
||||
"List of default files for multifile item filtering."
|
||||
:type `(set ,@(mapcar (lambda (f) (list 'const f))
|
||||
(mapcar 'todo-short-file-name
|
||||
(funcall todo-files-function))))
|
||||
:type `(set ,@(todo--files-type-list))
|
||||
:group 'todo-filtered)
|
||||
|
||||
(defcustom todo-filter-done-items nil
|
||||
|
|
@ -4067,19 +4086,17 @@ regexp items."
|
|||
(widget-insert "Select files for generating the top priorities list.\n\n")
|
||||
(setq todo-multiple-filter-files-widget
|
||||
(widget-create
|
||||
`(set ,@(mapcar (lambda (x) (list 'const x))
|
||||
(mapcar 'todo-short-file-name
|
||||
(funcall todo-files-function))))))
|
||||
`(set ,@(todo--files-type-list))))
|
||||
(widget-insert "\n")
|
||||
(widget-create 'push-button
|
||||
:notify (lambda (widget &rest ignore)
|
||||
:notify (lambda (&rest _)
|
||||
(setq todo-multiple-filter-files 'quit)
|
||||
(quit-window t)
|
||||
(exit-recursive-edit))
|
||||
"Cancel")
|
||||
(widget-insert " ")
|
||||
(widget-create 'push-button
|
||||
:notify (lambda (&rest ignore)
|
||||
:notify (lambda (&rest _)
|
||||
(setq todo-multiple-filter-files
|
||||
(mapcar (lambda (f)
|
||||
(file-truename
|
||||
|
|
@ -4137,7 +4154,7 @@ multifile commands for further details."
|
|||
;; Pressed `cancel' in t-m-f-f file selection dialog.
|
||||
(keyboard-quit)
|
||||
(concat todo-directory
|
||||
(mapconcat 'todo-short-file-name flist "-")
|
||||
(mapconcat #'todo-short-file-name flist "-")
|
||||
(cond (top ".todt")
|
||||
(diary ".tody")
|
||||
(regexp ".todr")))))
|
||||
|
|
@ -4150,10 +4167,11 @@ multifile commands for further details."
|
|||
(todo-filter-items-1 (cons 'top new) flist))
|
||||
((and (not new) file-exists)
|
||||
(when (and rxfiles (> (length rxfiles) 1))
|
||||
(let ((rxf (mapcar 'todo-short-file-name rxfiles)))
|
||||
(let ((rxf (mapcar #'todo-short-file-name rxfiles)))
|
||||
(setq fname (todo-absolute-file-name
|
||||
(completing-read "Choose a regexp items file: "
|
||||
rxf) 'regexp))))
|
||||
rxf)
|
||||
'regexp))))
|
||||
(find-file fname)
|
||||
(unless (derived-mode-p 'todo-filtered-items-mode)
|
||||
(todo-filtered-items-mode))
|
||||
|
|
@ -4164,12 +4182,13 @@ multifile commands for further details."
|
|||
(dolist (s (split-string (todo-short-file-name fname) "-"))
|
||||
(setq bufname (if bufname
|
||||
(concat bufname (if (member s (mapcar
|
||||
'todo-short-file-name
|
||||
#'todo-short-file-name
|
||||
todo-files))
|
||||
", " "-") s)
|
||||
", " "-")
|
||||
s)
|
||||
s)))
|
||||
(rename-buffer (format (concat "%s for file" (if multi "s" "")
|
||||
" \"%s\"") buf bufname))))
|
||||
(rename-buffer (format (concat "%s for file" (if multi "s" "") " \"%s\"")
|
||||
buf bufname))))
|
||||
|
||||
(defun todo-filter-items-1 (filter file-list)
|
||||
"Build a list of items by applying FILTER to FILE-LIST.
|
||||
|
|
@ -4235,7 +4254,8 @@ the values of FILTER and FILE-LIST."
|
|||
todo-top-priorities)))
|
||||
(while (re-search-forward
|
||||
(concat "^" (regexp-quote todo-category-beg)
|
||||
"\\(.+\\)\n") nil t)
|
||||
"\\(.+\\)\n")
|
||||
nil t)
|
||||
(setq cat (match-string 1))
|
||||
(let (cnum)
|
||||
;; Unless the number of top priorities to show was
|
||||
|
|
@ -4389,7 +4409,8 @@ its priority has changed, and `same' otherwise."
|
|||
"\\]"
|
||||
(regexp-quote todo-nondiary-end)) "?"
|
||||
"\\(?4: \\[\\(?3:(archive) \\)?\\(?2:.*:\\)?"
|
||||
"\\(?1:.*\\)\\]\\).*$") str)
|
||||
"\\(?1:.*\\)\\]\\).*$")
|
||||
str)
|
||||
(let ((cat (match-string 1 str))
|
||||
(file (match-string 2 str))
|
||||
(archive (string= (match-string 3 str) "(archive) "))
|
||||
|
|
@ -4504,8 +4525,13 @@ If the file already exists, overwrite it only on confirmation."
|
|||
;;; Printing Todo mode buffers
|
||||
;; -----------------------------------------------------------------------------
|
||||
|
||||
(defcustom todo-print-buffer-function 'ps-print-buffer-with-faces
|
||||
"Function called by the command `todo-print-buffer'."
|
||||
(defcustom todo-print-buffer-function #'ps-print-buffer-with-faces
|
||||
"Function called by `todo-print-buffer' to print Todo mode buffers.
|
||||
The function should take an optional argument whose non-nil value
|
||||
is a string naming a file to save the print image to; calling
|
||||
`todo-print-buffer-to-file' prompts for the file name, which is
|
||||
passed to this function. Calling this function with no or a nil
|
||||
argument sends the image to the printer."
|
||||
:type 'symbol
|
||||
:group 'todo)
|
||||
|
||||
|
|
@ -4531,8 +4557,7 @@ otherwise, send it to the default printer."
|
|||
'face 'todo-prefix-string))
|
||||
(num 0)
|
||||
(fill-prefix (make-string todo-indent-to-here 32))
|
||||
(content (buffer-string))
|
||||
file)
|
||||
(content (buffer-string)))
|
||||
(with-current-buffer (get-buffer-create buf)
|
||||
(insert content)
|
||||
(goto-char (point-min))
|
||||
|
|
@ -4556,10 +4581,9 @@ otherwise, send it to the default printer."
|
|||
(goto-char (point-min))
|
||||
(insert header)
|
||||
(newline 2)
|
||||
(if to-file
|
||||
(let ((file (read-file-name "Print to file: ")))
|
||||
(funcall todo-print-buffer-function file))
|
||||
(funcall todo-print-buffer-function)))
|
||||
(funcall todo-print-buffer-function
|
||||
(if to-file nil
|
||||
(read-file-name "Print to file: "))))
|
||||
(kill-buffer buf)))
|
||||
|
||||
(defun todo-print-buffer-to-file ()
|
||||
|
|
@ -4596,7 +4620,7 @@ Helper function for `todo-convert-legacy-files'."
|
|||
(time (match-string 4))
|
||||
dayname)
|
||||
(replace-match "")
|
||||
(insert (mapconcat 'eval calendar-date-display-form "")
|
||||
(insert (mapconcat #'eval calendar-date-display-form "")
|
||||
(when time (concat " " time)))))
|
||||
|
||||
(defun todo-convert-legacy-files ()
|
||||
|
|
@ -4720,7 +4744,8 @@ name in `todo-directory'. See also the documentation string of
|
|||
(unless (save-excursion
|
||||
(re-search-backward
|
||||
(concat "^" (regexp-quote todo-category-beg)
|
||||
"\\(.*\\)$") nil t)
|
||||
"\\(.*\\)$")
|
||||
nil t)
|
||||
(string= (match-string 1) cat))
|
||||
;; Else move it to its category.
|
||||
(setq item (buffer-substring-no-properties beg end))
|
||||
|
|
@ -4734,7 +4759,8 @@ name in `todo-directory'. See also the documentation string of
|
|||
(forward-line)
|
||||
(if (re-search-forward
|
||||
(concat "^" (regexp-quote todo-category-beg)
|
||||
"\\(.*\\)$") nil t)
|
||||
"\\(.*\\)$")
|
||||
nil t)
|
||||
(progn (goto-char (match-beginning 0))
|
||||
(newline)
|
||||
(forward-line -1))
|
||||
|
|
@ -4828,10 +4854,7 @@ buffer, clean up the state and return nil."
|
|||
(setq todo-files (funcall todo-files-function))
|
||||
(setq todo-archives (funcall todo-files-function t))
|
||||
t)
|
||||
(let* ((files (append todo-files todo-archives))
|
||||
(tctf todo-current-todo-file)
|
||||
(tgctf todo-global-current-todo-file)
|
||||
(tdtf (todo-absolute-file-name todo-default-todo-file)))
|
||||
(let* ((files (append todo-files todo-archives)))
|
||||
(unless (or (not todo-current-todo-file)
|
||||
(member todo-current-todo-file files))
|
||||
(setq todo-current-todo-file nil))
|
||||
|
|
@ -4850,7 +4873,7 @@ buffer, clean up the state and return nil."
|
|||
"Return the number of category CAT in this todo file.
|
||||
The buffer-local variable `todo-category-number' holds this
|
||||
number as its value."
|
||||
(let ((categories (mapcar 'car todo-categories)))
|
||||
(let ((categories (mapcar #'car todo-categories)))
|
||||
(setq todo-category-number
|
||||
;; Increment by one, so that the number of the first
|
||||
;; category is one rather than zero.
|
||||
|
|
@ -4880,7 +4903,8 @@ number as its value."
|
|||
(todo-prefix-overlays)
|
||||
(goto-char (point-min))
|
||||
(if (re-search-forward (concat "\n\\(" (regexp-quote todo-category-done)
|
||||
"\\)") nil t)
|
||||
"\\)")
|
||||
nil t)
|
||||
(progn
|
||||
(setq done-start (match-beginning 0))
|
||||
(setq done-sep-start (match-beginning 1))
|
||||
|
|
@ -5264,7 +5288,8 @@ Overrides `diary-goto-entry'."
|
|||
(when (eq major-mode 'todo-mode)
|
||||
(let ((opoint (point)))
|
||||
(re-search-backward (concat "^" (regexp-quote todo-category-beg)
|
||||
"\\(.*\\)\n") nil t)
|
||||
"\\(.*\\)\n")
|
||||
nil t)
|
||||
(todo-category-number (match-string 1))
|
||||
(todo-category-select)
|
||||
(goto-char opoint))))))
|
||||
|
|
@ -5647,8 +5672,7 @@ already entered and those still available."
|
|||
(defvar todo-edit-item--prompt "Press a key (so far `e'): ")
|
||||
|
||||
(defun todo-edit-item--next-key (params &optional arg)
|
||||
(let* ((map (make-sparse-keymap))
|
||||
(p->k (mapconcat (lambda (elt)
|
||||
(let* ((p->k (mapconcat (lambda (elt)
|
||||
(format "%s=>%s"
|
||||
(propertize (cdr elt) 'face
|
||||
'todo-key-prompt)
|
||||
|
|
@ -5736,14 +5760,14 @@ have been removed."
|
|||
todo-global-current-todo-file)
|
||||
(todo-absolute-file-name todo-default-todo-file)))
|
||||
(files (or (unless archive
|
||||
(mapcar 'todo-absolute-file-name
|
||||
(mapcar #'todo-absolute-file-name
|
||||
todo-category-completions-files))
|
||||
(list curfile)))
|
||||
listall listf)
|
||||
;; If file was just added, it has no category completions.
|
||||
(unless (zerop (buffer-size (find-buffer-visiting curfile)))
|
||||
(unless (member curfile todo-archives)
|
||||
(add-to-list 'files curfile))
|
||||
(cl-pushnew curfile files :test #'equal))
|
||||
(dolist (f files listall)
|
||||
(with-current-buffer (find-file-noselect f 'nowarn)
|
||||
(if archive
|
||||
|
|
@ -5783,7 +5807,7 @@ return the absolute truename of a todo archive file. With non-nil
|
|||
MUSTMATCH the name of an existing file must be chosen;
|
||||
otherwise, a new file name is allowed."
|
||||
(let* ((completion-ignore-case todo-completion-ignore-case)
|
||||
(files (mapcar 'todo-short-file-name
|
||||
(files (mapcar #'todo-short-file-name
|
||||
;; (funcall todo-files-function archive)))
|
||||
(if archive todo-archives todo-files)))
|
||||
(file (completing-read prompt files nil mustmatch nil nil
|
||||
|
|
@ -5832,7 +5856,8 @@ categories from `todo-category-completions-files'."
|
|||
(todo-read-file-name (concat "Choose a" (if archive
|
||||
"n archive"
|
||||
" todo")
|
||||
" file: ") archive t)))
|
||||
" file: ")
|
||||
archive t)))
|
||||
(completions (unless file0 (todo-category-completions archive)))
|
||||
(categories (cond (file0
|
||||
(with-current-buffer
|
||||
|
|
@ -5873,7 +5898,7 @@ categories from `todo-category-completions-files'."
|
|||
(if (atom catfil)
|
||||
catfil
|
||||
(todo-absolute-file-name
|
||||
(let ((files (mapcar 'todo-short-file-name catfil)))
|
||||
(let ((files (mapcar #'todo-short-file-name catfil)))
|
||||
(completing-read (format str cat) files)))))))
|
||||
;; Default to the current file.
|
||||
(unless file0 (setq file0 todo-current-todo-file))
|
||||
|
|
@ -5907,7 +5932,7 @@ categories from `todo-category-completions-files'."
|
|||
"Prompt for new NAME for TYPE until it is valid, then return it.
|
||||
TYPE can be either of the symbols `file' or `category'."
|
||||
(let ((categories todo-categories)
|
||||
(files (mapcar 'todo-short-file-name todo-files))
|
||||
(files (mapcar #'todo-short-file-name todo-files))
|
||||
prompt)
|
||||
(while
|
||||
(and
|
||||
|
|
@ -5981,8 +6006,8 @@ number of the last the day of the month."
|
|||
(setq monthname (completing-read
|
||||
"Month name (RET for current month, * for any month): "
|
||||
mlist nil t nil nil
|
||||
(calendar-month-name (calendar-extract-month
|
||||
(calendar-current-date)) t))
|
||||
(calendar-month-name
|
||||
(calendar-extract-month (calendar-current-date)) t))
|
||||
month (1+ (- (length mlist)
|
||||
(length (or (member monthname mlist)
|
||||
(member monthname mablist))))))
|
||||
|
|
@ -6023,7 +6048,7 @@ number of the last the day of the month."
|
|||
(if (memq 'month calendar-date-display-form)
|
||||
month
|
||||
monthname)))
|
||||
(mapconcat 'eval calendar-date-display-form ""))))
|
||||
(mapconcat #'eval calendar-date-display-form ""))))
|
||||
|
||||
(defun todo-read-dayname ()
|
||||
"Choose name of a day of the week with completion and return it."
|
||||
|
|
@ -6088,8 +6113,8 @@ the empty string (i.e., no time string)."
|
|||
"The :set function for user option `todo-show-current-file'."
|
||||
(custom-set-default symbol value)
|
||||
(if value
|
||||
(add-hook 'pre-command-hook 'todo-show-current-file nil t)
|
||||
(remove-hook 'pre-command-hook 'todo-show-current-file t)))
|
||||
(add-hook 'pre-command-hook #'todo-show-current-file nil t)
|
||||
(remove-hook 'pre-command-hook #'todo-show-current-file t)))
|
||||
|
||||
(defun todo-reset-prefix (symbol value)
|
||||
"The :set function for `todo-prefix' and `todo-number-prefix'."
|
||||
|
|
@ -6228,6 +6253,8 @@ the empty string (i.e., no time string)."
|
|||
|
||||
(defun todo-reevaluate-filelist-defcustoms ()
|
||||
"Reevaluate defcustoms that provide choice list of todo files."
|
||||
;; FIXME: This is hideous! I don't know enough about Custom to
|
||||
;; offer something better, but please ask on emacs-devel!
|
||||
(custom-set-default 'todo-default-todo-file
|
||||
(symbol-value 'todo-default-todo-file))
|
||||
(todo-reevaluate-default-file-defcustom)
|
||||
|
|
@ -6242,15 +6269,15 @@ the empty string (i.e., no time string)."
|
|||
Called after adding or deleting a todo file. If the value of
|
||||
`todo-default-todo-file' before calling this function was
|
||||
associated with an existing file, keep that value."
|
||||
;; FIXME: This is hideous! I don't know enough about Custom to
|
||||
;; offer something better, but please ask on emacs-devel!
|
||||
;; (let ((curval todo-default-todo-file))
|
||||
(eval
|
||||
(defcustom todo-default-todo-file (todo-short-file-name
|
||||
(car (funcall todo-files-function)))
|
||||
"Todo file visited by first session invocation of `todo-show'."
|
||||
:type (when todo-files
|
||||
`(radio ,@(mapcar (lambda (f) (list 'const f))
|
||||
(mapcar 'todo-short-file-name
|
||||
(funcall todo-files-function)))))
|
||||
`(radio ,@(todo--files-type-list)))
|
||||
:group 'todo))
|
||||
;; (when (and curval (file-exists-p (todo-absolute-file-name curval)))
|
||||
;; (custom-set-default 'todo-default-todo-file curval)
|
||||
|
|
@ -6261,21 +6288,21 @@ associated with an existing file, keep that value."
|
|||
(defun todo-reevaluate-category-completions-files-defcustom ()
|
||||
"Reevaluate defcustom of `todo-category-completions-files'.
|
||||
Called after adding or deleting a todo file."
|
||||
;; FIXME: This is hideous! I don't know enough about Custom to
|
||||
;; offer something better, but please ask on emacs-devel!
|
||||
(eval (defcustom todo-category-completions-files nil
|
||||
"List of files for building `todo-read-category' completions."
|
||||
:type `(set ,@(mapcar (lambda (f) (list 'const f))
|
||||
(mapcar 'todo-short-file-name
|
||||
(funcall todo-files-function))))
|
||||
:type `(set ,@(todo--files-type-list))
|
||||
:group 'todo)))
|
||||
|
||||
(defun todo-reevaluate-filter-files-defcustom ()
|
||||
"Reevaluate defcustom of `todo-filter-files'.
|
||||
Called after adding or deleting a todo file."
|
||||
;; FIXME: This is hideous! I don't know enough about Custom to
|
||||
;; offer something better, but please ask on emacs-devel!
|
||||
(eval (defcustom todo-filter-files nil
|
||||
"List of files for multifile item filtering."
|
||||
:type `(set ,@(mapcar (lambda (f) (list 'const f))
|
||||
(mapcar 'todo-short-file-name
|
||||
(funcall todo-files-function))))
|
||||
:type `(set ,@(todo--files-type-list))
|
||||
:group 'todo)))
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
|
|
@ -6292,7 +6319,8 @@ Called after adding or deleting a todo file."
|
|||
(defun todo-diary-nonmarking-matcher (lim)
|
||||
"Search for diary nonmarking symbol within LIM for font-locking."
|
||||
(re-search-forward (concat "^\\(?1:" (regexp-quote diary-nonmarking-symbol)
|
||||
"\\)" todo-date-pattern) lim t))
|
||||
"\\)" todo-date-pattern)
|
||||
lim t))
|
||||
|
||||
(defun todo-date-string-matcher (lim)
|
||||
"Search for todo item date string within LIM for font-locking."
|
||||
|
|
@ -6302,14 +6330,16 @@ Called after adding or deleting a todo file."
|
|||
(defun todo-time-string-matcher (lim)
|
||||
"Search for todo item time string within LIM for font-locking."
|
||||
(re-search-forward (concat todo-date-string-start todo-date-pattern
|
||||
" \\(?1:" diary-time-regexp "\\)") lim t))
|
||||
" \\(?1:" diary-time-regexp "\\)")
|
||||
lim t))
|
||||
|
||||
(defun todo-diary-expired-matcher (lim)
|
||||
"Search for expired diary item date within LIM for font-locking."
|
||||
(when (re-search-forward (concat "^\\(?:"
|
||||
(regexp-quote diary-nonmarking-symbol)
|
||||
"\\)?\\(?1:" todo-date-pattern "\\) \\(?2:"
|
||||
diary-time-regexp "\\)?") lim t)
|
||||
diary-time-regexp "\\)?")
|
||||
lim t)
|
||||
(let* ((date (match-string-no-properties 1))
|
||||
(time (match-string-no-properties 2))
|
||||
;; Function days-between requires a non-empty time string.
|
||||
|
|
@ -6464,8 +6494,6 @@ Filtered Items mode following todo (not done) items."
|
|||
|
||||
(defvar todo-mode-map
|
||||
(let ((map (make-keymap)))
|
||||
;; Don't suppress digit keys, so they can supply prefix arguments.
|
||||
(suppress-keymap map)
|
||||
(dolist (kb todo-key-bindings-t)
|
||||
(define-key map (nth 0 kb) (nth 1 kb)))
|
||||
(dolist (kb todo-key-bindings-t+a+f)
|
||||
|
|
@ -6479,7 +6507,6 @@ Filtered Items mode following todo (not done) items."
|
|||
|
||||
(defvar todo-archive-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(suppress-keymap map)
|
||||
(dolist (kb todo-key-bindings-t+a+f)
|
||||
(define-key map (nth 0 kb) (nth 1 kb)))
|
||||
(dolist (kb todo-key-bindings-t+a)
|
||||
|
|
@ -6498,7 +6525,6 @@ Filtered Items mode following todo (not done) items."
|
|||
|
||||
(defvar todo-categories-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(suppress-keymap map)
|
||||
(define-key map "c" 'todo-sort-categories-alphabetically-or-numerically)
|
||||
(define-key map "t" 'todo-sort-categories-by-todo)
|
||||
(define-key map "y" 'todo-sort-categories-by-diary)
|
||||
|
|
@ -6517,7 +6543,6 @@ Filtered Items mode following todo (not done) items."
|
|||
|
||||
(defvar todo-filtered-items-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(suppress-keymap map)
|
||||
(dolist (kb todo-key-bindings-t+a+f)
|
||||
(define-key map (nth 0 kb) (nth 1 kb)))
|
||||
(dolist (kb todo-key-bindings-t+f)
|
||||
|
|
@ -6651,9 +6676,9 @@ Added to `window-configuration-change-hook' in Todo mode."
|
|||
(defun todo-modes-set-1 ()
|
||||
"Make some settings that apply to multiple Todo modes."
|
||||
(setq-local font-lock-defaults '(todo-font-lock-keywords t))
|
||||
(setq-local revert-buffer-function 'todo-revert-buffer)
|
||||
(setq-local revert-buffer-function #'todo-revert-buffer)
|
||||
(setq-local tab-width todo-indent-to-here)
|
||||
(setq-local indent-line-function 'todo-indent)
|
||||
(setq-local indent-line-function #'todo-indent)
|
||||
(when todo-wrap-lines
|
||||
(visual-line-mode)
|
||||
(setq wrap-prefix (make-string todo-indent-to-here 32))))
|
||||
|
|
@ -6671,13 +6696,13 @@ Added to `window-configuration-change-hook' in Todo mode."
|
|||
(setq buffer-read-only t)
|
||||
(setq-local todo--item-headers-hidden nil)
|
||||
(setq-local desktop-save-buffer 'todo-desktop-save-buffer)
|
||||
(setq-local hl-line-range-function 'todo-hl-line-range))
|
||||
(setq-local hl-line-range-function #'todo-hl-line-range))
|
||||
|
||||
(defun todo-modes-set-3 ()
|
||||
"Make some settings that apply to multiple Todo modes."
|
||||
(setq-local todo-categories (todo-set-categories))
|
||||
(setq-local todo-category-number 1)
|
||||
;; (add-hook 'find-file-hook 'todo-display-as-todo-file nil t)
|
||||
;; (add-hook 'find-file-hook #'todo-display-as-todo-file nil t)
|
||||
)
|
||||
|
||||
(put 'todo-mode 'mode-class 'special)
|
||||
|
|
@ -6700,13 +6725,13 @@ Added to `window-configuration-change-hook' in Todo mode."
|
|||
(setq-local todo-current-todo-file (file-truename (buffer-file-name))))
|
||||
(setq-local todo-show-done-only nil)
|
||||
(setq-local todo-categories-with-marks nil)
|
||||
;; (add-hook 'find-file-hook 'todo-add-to-buffer-list nil t)
|
||||
(add-hook 'post-command-hook 'todo-update-buffer-list nil t)
|
||||
;; (add-hook 'find-file-hook #'todo-add-to-buffer-list nil t)
|
||||
(add-hook 'post-command-hook #'todo-update-buffer-list nil t)
|
||||
(when todo-show-current-file
|
||||
(add-hook 'pre-command-hook 'todo-show-current-file nil t))
|
||||
(add-hook 'pre-command-hook #'todo-show-current-file nil t))
|
||||
(add-hook 'window-configuration-change-hook
|
||||
'todo-reset-and-enable-done-separator nil t)
|
||||
(add-hook 'kill-buffer-hook 'todo-reset-global-current-todo-file nil t)))
|
||||
#'todo-reset-and-enable-done-separator nil t)
|
||||
(add-hook 'kill-buffer-hook #'todo-reset-global-current-todo-file nil t)))
|
||||
|
||||
(put 'todo-archive-mode 'mode-class 'special)
|
||||
|
||||
|
|
|
|||
|
|
@ -584,6 +584,38 @@ since it could result in memory overflow and make Emacs crash."
|
|||
(const :tag "Grow only" :value grow-only))
|
||||
"25.1")
|
||||
(display-raw-bytes-as-hex display boolean "26.1")
|
||||
(display-line-numbers display-line-numbers
|
||||
(choice
|
||||
(const :tag "Off (nil)" :value nil)
|
||||
(const :tag "Absolute line numbers"
|
||||
:value t)
|
||||
(const :tag "Relative line numbers"
|
||||
:value relative)
|
||||
(const :tag "Visually relative line numbers"
|
||||
:value visual))
|
||||
"26.1")
|
||||
(display-line-numbers-width display-line-numbers
|
||||
(choice
|
||||
(const :tag "Dynamically computed"
|
||||
:value nil)
|
||||
(integer :menu-tag "Fixed number of columns"
|
||||
:value 2
|
||||
:format "%v"))
|
||||
"26.1")
|
||||
(display-line-numbers-current-absolute display-line-numbers
|
||||
(choice
|
||||
(const :tag "Display actual number of current line"
|
||||
:value t)
|
||||
(const :tag "Display zero as number of current line"
|
||||
:value nil))
|
||||
"26.1")
|
||||
(display-line-numbers-widen display-line-numbers
|
||||
(choice
|
||||
(const :tag "Disregard narrowing when calculating line numbers"
|
||||
:value t)
|
||||
(const :tag "Count lines from beginning of narrowed region"
|
||||
:value nil))
|
||||
"26.1")
|
||||
;; xfaces.c
|
||||
(scalable-fonts-allowed display boolean "22.1")
|
||||
;; xfns.c
|
||||
|
|
|
|||
|
|
@ -1623,10 +1623,14 @@ Special value `always' suppresses confirmation."
|
|||
(setq default-directory to
|
||||
dired-directory (expand-file-name;; this is correct
|
||||
;; with and without wildcards
|
||||
(file-name-nondirectory dired-directory)
|
||||
(file-name-nondirectory (if (stringp dired-directory)
|
||||
dired-directory
|
||||
(car dired-directory)))
|
||||
to))
|
||||
(let ((new-name (file-name-nondirectory
|
||||
(directory-file-name dired-directory))))
|
||||
(directory-file-name (if (stringp dired-directory)
|
||||
dired-directory
|
||||
(car dired-directory))))))
|
||||
;; try to rename buffer, but just leave old name if new
|
||||
;; name would already exist (don't try appending "<%d>")
|
||||
(or (get-buffer new-name)
|
||||
|
|
|
|||
|
|
@ -546,7 +546,9 @@ Should never be used as marker by the user or other packages.")
|
|||
(interactive)
|
||||
(let ((dired-omit-mode nil)) (revert-buffer)) ;; Show omitted files
|
||||
(dired-mark-unmarked-files (dired-omit-regexp) nil nil dired-omit-localp
|
||||
(dired-omit-case-fold-p dired-directory)))
|
||||
(dired-omit-case-fold-p (if (stringp dired-directory)
|
||||
dired-directory
|
||||
(car dired-directory)))))
|
||||
|
||||
(defcustom dired-omit-extensions
|
||||
(append completion-ignored-extensions
|
||||
|
|
@ -591,7 +593,9 @@ This functions works by temporarily binding `dired-marker-char' to
|
|||
(let ((dired-marker-char dired-omit-marker-char))
|
||||
(when dired-omit-verbose (message "Omitting..."))
|
||||
(if (dired-mark-unmarked-files omit-re nil nil dired-omit-localp
|
||||
(dired-omit-case-fold-p dired-directory))
|
||||
(dired-omit-case-fold-p (if (stringp dired-directory)
|
||||
dired-directory
|
||||
(car dired-directory))))
|
||||
(progn
|
||||
(setq count (dired-do-kill-lines
|
||||
nil
|
||||
|
|
|
|||
|
|
@ -785,7 +785,7 @@ Type \\[describe-mode] after entering Dired for more info.
|
|||
If DIRNAME is already in a Dired buffer, that buffer is used without refresh."
|
||||
;; Cannot use (interactive "D") because of wildcards.
|
||||
(interactive (dired-read-dir-and-switches ""))
|
||||
(switch-to-buffer (dired-noselect dirname switches)))
|
||||
(pop-to-buffer-same-window (dired-noselect dirname switches)))
|
||||
|
||||
;;;###autoload (define-key ctl-x-4-map "d" 'dired-other-window)
|
||||
;;;###autoload
|
||||
|
|
@ -872,13 +872,15 @@ periodically reverts at specified time intervals."
|
|||
:version "23.2")
|
||||
|
||||
(defun dired-internal-noselect (dir-or-list &optional switches mode)
|
||||
;; If there is an existing dired buffer for DIRNAME, just leave
|
||||
;; buffer as it is (don't even call dired-revert).
|
||||
;; If DIR-OR-LIST is a string and there is an existing dired buffer
|
||||
;; for it, just leave buffer as it is (don't even call dired-revert).
|
||||
;; This saves time especially for deep trees or with ange-ftp.
|
||||
;; The user can type `g' easily, and it is more consistent with find-file.
|
||||
;; But if SWITCHES are given they are probably different from the
|
||||
;; buffer's old value, so call dired-sort-other, which does
|
||||
;; revert the buffer.
|
||||
;; Revert the buffer if DIR-OR-LIST is a cons or `dired-directory'
|
||||
;; is a cons and DIR-OR-LIST is a string.
|
||||
;; A pity we can't possibly do "Directory has changed - refresh? "
|
||||
;; like find-file does.
|
||||
;; Optional argument MODE is passed to dired-find-buffer-nocreate,
|
||||
|
|
@ -898,6 +900,11 @@ periodically reverts at specified time intervals."
|
|||
(setq dired-directory dir-or-list)
|
||||
;; this calls dired-revert
|
||||
(dired-sort-other switches))
|
||||
;; Always revert when `dir-or-list' is a cons. Also revert
|
||||
;; if `dired-directory' is a cons but `dir-or-list' is not.
|
||||
((or (consp dir-or-list) (consp dired-directory))
|
||||
(setq dired-directory dir-or-list)
|
||||
(revert-buffer))
|
||||
;; Always revert regardless of whether it has changed or not.
|
||||
((eq dired-auto-revert-buffer t)
|
||||
(revert-buffer))
|
||||
|
|
|
|||
106
lisp/display-line-numbers.el
Normal file
106
lisp/display-line-numbers.el
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
;;; display-line-numbers.el --- interface for display-line-numbers -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
;; Keywords: convenience
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Provides a minor mode interface for `display-line-numbers'.
|
||||
;;
|
||||
;; Toggle display of line numbers with M-x display-line-numbers-mode.
|
||||
;; To enable line numbering in all buffers, use M-x
|
||||
;; global-display-line-numbers-mode. To change the default type of
|
||||
;; line numbers displayed, customize display-line-numbers-type.
|
||||
|
||||
;; NOTE: Customization variables for `display-line-numbers' itself are
|
||||
;; defined in cus-start.el.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defgroup display-line-numbers nil
|
||||
"Display line numbers in the buffer."
|
||||
:group 'display)
|
||||
|
||||
;;;###autoload
|
||||
(defcustom display-line-numbers-type t
|
||||
"The default type of line numbers to use in `display-line-numbers-mode'.
|
||||
See `display-line-numbers' for value options."
|
||||
:group 'display-line-numbers
|
||||
:type '(choice (const :tag "Relative line numbers" relative)
|
||||
(const :tag "Relative visual line numbers" visual)
|
||||
(other :tag "Absolute line numbers" t))
|
||||
:version "26.1")
|
||||
|
||||
(defcustom display-line-numbers-grow-only nil
|
||||
"If non-nil, do not shrink line number width."
|
||||
:group 'display-line-numbers
|
||||
:type 'boolean
|
||||
:version "26.1")
|
||||
|
||||
(defcustom display-line-numbers-width-start nil
|
||||
"If non-nil, count number of lines to use for line number width.
|
||||
When `display-line-numbers-mode' is turned on,
|
||||
`display-line-numbers-width' is set to the minimum width necessary
|
||||
to display all line numbers in the buffer."
|
||||
:group 'display-line-numbers
|
||||
:type 'boolean
|
||||
:version "26.1")
|
||||
|
||||
(defun display-line-numbers-update-width ()
|
||||
"Prevent the line number width from shrinking."
|
||||
(let ((width (line-number-display-width)))
|
||||
(when (> width (or display-line-numbers-width 1))
|
||||
(setq display-line-numbers-width width))))
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode display-line-numbers-mode
|
||||
"Toggle display of line numbers in the buffer.
|
||||
This uses `display-line-numbers' internally.
|
||||
|
||||
To change the type of line numbers displayed by default,
|
||||
customize `display-line-numbers-type'. To change the type while
|
||||
the mode is on, set `display-line-numbers' directly."
|
||||
:lighter nil
|
||||
(if display-line-numbers-mode
|
||||
(progn
|
||||
(when display-line-numbers-width-start
|
||||
(setq display-line-numbers-width
|
||||
(length (number-to-string
|
||||
(count-lines (point-min) (point-max))))))
|
||||
(when display-line-numbers-grow-only
|
||||
(add-hook 'pre-command-hook #'display-line-numbers-update-width nil t))
|
||||
(setq display-line-numbers display-line-numbers-type))
|
||||
(remove-hook 'pre-command-hook #'display-line-numbers-update-width t)
|
||||
(setq display-line-numbers nil)))
|
||||
|
||||
(defun display-line-numbers--turn-on ()
|
||||
"Turn on `display-line-numbers-mode'."
|
||||
(unless (or (minibufferp)
|
||||
;; taken from linum.el
|
||||
(and (daemonp) (null (frame-parameter nil 'client))))
|
||||
(display-line-numbers-mode)))
|
||||
|
||||
;;;###autoload
|
||||
(define-globalized-minor-mode global-display-line-numbers-mode
|
||||
display-line-numbers-mode display-line-numbers--turn-on)
|
||||
|
||||
(provide 'display-line-numbers)
|
||||
|
||||
;;; display-line-numbers.el ends here
|
||||
|
|
@ -469,56 +469,50 @@ This requotes when a quoting key is typed."
|
|||
(and (not electric-quote-context-sensitive)
|
||||
(eq last-command-event ?\`)))
|
||||
(not (run-hook-with-args-until-success
|
||||
'electric-quote-inhibit-functions)))
|
||||
(let ((start
|
||||
(if (and comment-start comment-use-syntax)
|
||||
(when (or electric-quote-comment electric-quote-string)
|
||||
(let* ((syntax (syntax-ppss))
|
||||
(beg (nth 8 syntax)))
|
||||
(and beg
|
||||
(or (and electric-quote-comment (nth 4 syntax))
|
||||
(and electric-quote-string (nth 3 syntax)))
|
||||
;; Do not requote a quote that starts or ends
|
||||
;; a comment or string.
|
||||
(eq beg (nth 8 (save-excursion
|
||||
(syntax-ppss (1- (point)))))))))
|
||||
(and electric-quote-paragraph
|
||||
(derived-mode-p 'text-mode)
|
||||
;; FIXME: Why is the next form there? It’s never
|
||||
;; nil.
|
||||
(or (eq last-command-event ?\`)
|
||||
(save-excursion (backward-paragraph) (point)))))))
|
||||
(pcase electric-quote-chars
|
||||
(`(,q< ,q> ,q<< ,q>>)
|
||||
(when start
|
||||
(save-excursion
|
||||
(let ((backtick ?\`))
|
||||
(if (or (eq last-command-event ?\`)
|
||||
(and electric-quote-context-sensitive
|
||||
(save-excursion
|
||||
(backward-char)
|
||||
(or (bobp) (bolp)
|
||||
(memq (char-before) (list q< q<<))
|
||||
(memq (char-syntax (char-before))
|
||||
'(?\s ?\())))
|
||||
(setq backtick ?\')))
|
||||
(cond ((search-backward (string q< backtick) (- (point) 2) t)
|
||||
(replace-match (string q<<))
|
||||
(when (and electric-pair-mode
|
||||
(eq (cdr-safe
|
||||
(assq q< electric-pair-text-pairs))
|
||||
(char-after)))
|
||||
(delete-char 1))
|
||||
(setq last-command-event q<<))
|
||||
((search-backward (string backtick) (1- (point)) t)
|
||||
(replace-match (string q<))
|
||||
(setq last-command-event q<)))
|
||||
(cond ((search-backward (string q> ?') (- (point) 2) t)
|
||||
(replace-match (string q>>))
|
||||
(setq last-command-event q>>))
|
||||
((search-backward "'" (1- (point)) t)
|
||||
(replace-match (string q>))
|
||||
(setq last-command-event q>))))))))))))
|
||||
'electric-quote-inhibit-functions))
|
||||
(if (derived-mode-p 'text-mode)
|
||||
electric-quote-paragraph
|
||||
(and comment-start comment-use-syntax
|
||||
(or electric-quote-comment electric-quote-string)
|
||||
(let* ((syntax (syntax-ppss))
|
||||
(beg (nth 8 syntax)))
|
||||
(and beg
|
||||
(or (and electric-quote-comment (nth 4 syntax))
|
||||
(and electric-quote-string (nth 3 syntax)))
|
||||
;; Do not requote a quote that starts or ends
|
||||
;; a comment or string.
|
||||
(eq beg (nth 8 (save-excursion
|
||||
(syntax-ppss (1- (point)))))))))))
|
||||
(pcase electric-quote-chars
|
||||
(`(,q< ,q> ,q<< ,q>>)
|
||||
(save-excursion
|
||||
(let ((backtick ?\`))
|
||||
(if (or (eq last-command-event ?\`)
|
||||
(and electric-quote-context-sensitive
|
||||
(save-excursion
|
||||
(backward-char)
|
||||
(or (bobp) (bolp)
|
||||
(memq (char-before) (list q< q<<))
|
||||
(memq (char-syntax (char-before))
|
||||
'(?\s ?\())))
|
||||
(setq backtick ?\')))
|
||||
(cond ((search-backward (string q< backtick) (- (point) 2) t)
|
||||
(replace-match (string q<<))
|
||||
(when (and electric-pair-mode
|
||||
(eq (cdr-safe
|
||||
(assq q< electric-pair-text-pairs))
|
||||
(char-after)))
|
||||
(delete-char 1))
|
||||
(setq last-command-event q<<))
|
||||
((search-backward (string backtick) (1- (point)) t)
|
||||
(replace-match (string q<))
|
||||
(setq last-command-event q<)))
|
||||
(cond ((search-backward (string q> ?') (- (point) 2) t)
|
||||
(replace-match (string q>>))
|
||||
(setq last-command-event q>>))
|
||||
((search-backward "'" (1- (point)) t)
|
||||
(replace-match (string q>))
|
||||
(setq last-command-event q>))))))))))
|
||||
|
||||
(put 'electric-quote-post-self-insert-function 'priority 10)
|
||||
|
||||
|
|
|
|||
|
|
@ -1263,12 +1263,6 @@ when printing the error message."
|
|||
|
||||
(defun byte-compile-arglist-signature (arglist)
|
||||
(cond
|
||||
;; New style byte-code arglist.
|
||||
((integerp arglist)
|
||||
(cons (logand arglist 127) ;Mandatory.
|
||||
(if (zerop (logand arglist 128)) ;No &rest.
|
||||
(lsh arglist -8)))) ;Nonrest.
|
||||
;; Old style byte-code, or interpreted function.
|
||||
((listp arglist)
|
||||
(let ((args 0)
|
||||
opts
|
||||
|
|
@ -1289,6 +1283,19 @@ when printing the error message."
|
|||
;; Unknown arglist.
|
||||
(t '(0))))
|
||||
|
||||
(defun byte-compile--function-signature (f)
|
||||
;; Similar to help-function-arglist, except that it returns the info
|
||||
;; in a different format.
|
||||
(and (eq 'macro (car-safe f)) (setq f (cdr f)))
|
||||
;; Advice wrappers have "catch all" args, so fetch the actual underlying
|
||||
;; function to find the real arguments.
|
||||
(while (advice--p f) (setq f (advice--cdr f)))
|
||||
(if (eq (car-safe f) 'declared)
|
||||
(byte-compile-arglist-signature (nth 1 f))
|
||||
(condition-case nil
|
||||
(let ((sig (func-arity f)))
|
||||
(if (numberp (cdr sig)) sig (list (car sig))))
|
||||
(error '(0)))))
|
||||
|
||||
(defun byte-compile-arglist-signatures-congruent-p (old new)
|
||||
(not (or
|
||||
|
|
@ -1330,19 +1337,7 @@ when printing the error message."
|
|||
(defun byte-compile-callargs-warn (form)
|
||||
(let* ((def (or (byte-compile-fdefinition (car form) nil)
|
||||
(byte-compile-fdefinition (car form) t)))
|
||||
(sig (if (and def (not (eq def t)))
|
||||
(progn
|
||||
(and (eq (car-safe def) 'macro)
|
||||
(eq (car-safe (cdr-safe def)) 'lambda)
|
||||
(setq def (cdr def)))
|
||||
(byte-compile-arglist-signature
|
||||
(if (memq (car-safe def) '(declared lambda))
|
||||
(nth 1 def)
|
||||
(if (byte-code-function-p def)
|
||||
(aref def 0)
|
||||
'(&rest def)))))
|
||||
(if (subrp (symbol-function (car form)))
|
||||
(subr-arity (symbol-function (car form))))))
|
||||
(sig (byte-compile--function-signature def))
|
||||
(ncall (length (cdr form))))
|
||||
;; Check many or unevalled from subr-arity.
|
||||
(if (and (cdr-safe sig)
|
||||
|
|
@ -1461,15 +1456,7 @@ extra args."
|
|||
(and initial (symbolp initial)
|
||||
(setq old (byte-compile-fdefinition initial nil)))
|
||||
(when (and old (not (eq old t)))
|
||||
(and (eq 'macro (car-safe old))
|
||||
(eq 'lambda (car-safe (cdr-safe old)))
|
||||
(setq old (cdr old)))
|
||||
(let ((sig1 (byte-compile-arglist-signature
|
||||
(pcase old
|
||||
(`(lambda ,args . ,_) args)
|
||||
(`(closure ,_ ,args . ,_) args)
|
||||
((pred byte-code-function-p) (aref old 0))
|
||||
(_ '(&rest def)))))
|
||||
(let ((sig1 (byte-compile--function-signature old))
|
||||
(sig2 (byte-compile-arglist-signature arglist)))
|
||||
(unless (byte-compile-arglist-signatures-congruent-p sig1 sig2)
|
||||
(byte-compile-set-symbol-position name)
|
||||
|
|
|
|||
|
|
@ -182,8 +182,7 @@ SPECIALIZERS-FUNCTION takes as first argument a tag value TAG
|
|||
origname))
|
||||
(if generic
|
||||
(cl-assert (eq name (cl--generic-name generic)))
|
||||
(setf (cl--generic name) (setq generic (cl--generic-make name)))
|
||||
(defalias name (cl--generic-make-function generic)))
|
||||
(setf (cl--generic name) (setq generic (cl--generic-make name))))
|
||||
generic))
|
||||
|
||||
;;;###autoload
|
||||
|
|
@ -1210,5 +1209,18 @@ Used internally for the (major-mode MODE) context specializers."
|
|||
(progn (cl-assert (null modes)) mode)
|
||||
`(derived-mode ,mode . ,modes))))
|
||||
|
||||
;;; Support for unloading.
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((x (head cl-defmethod)))
|
||||
(pcase-let*
|
||||
((`(,name ,qualifiers . ,specializers) (cdr x))
|
||||
(generic (cl-generic-ensure-function name 'noerror)))
|
||||
(when generic
|
||||
(let* ((mt (cl--generic-method-table generic))
|
||||
(me (cl--generic-member-method specializers qualifiers mt)))
|
||||
(when me
|
||||
(setf (cl--generic-method-table generic) (delq (car me) mt)))))))
|
||||
|
||||
|
||||
(provide 'cl-generic)
|
||||
;;; cl-generic.el ends here
|
||||
|
|
|
|||
|
|
@ -288,14 +288,6 @@ If true return the decimal value of digit CHAR in RADIX."
|
|||
(let ((n (aref cl-digit-char-table char)))
|
||||
(and n (< n (or radix 10)) n)))
|
||||
|
||||
(defun cl--random-time ()
|
||||
(let* ((time (copy-sequence (current-time-string))) (i (length time)) (v 0))
|
||||
(while (>= (cl-decf i) 0) (setq v (+ (* v 3) (aref time i))))
|
||||
v))
|
||||
|
||||
(defvar cl--random-state
|
||||
(vector 'cl--random-state-tag -1 30 (cl--random-time)))
|
||||
|
||||
(defconst cl-most-positive-float nil
|
||||
"The largest value that a Lisp float can hold.
|
||||
If your system supports infinities, this is the largest finite value.
|
||||
|
|
@ -639,7 +631,7 @@ If ALIST is non-nil, the new pairs are prepended to it."
|
|||
(require 'cl-seq))
|
||||
|
||||
(defun cl--old-struct-type-of (orig-fun object)
|
||||
(or (and (vectorp object)
|
||||
(or (and (vectorp object) (> (length object) 0)
|
||||
(let ((tag (aref object 0)))
|
||||
(when (and (symbolp tag)
|
||||
(string-prefix-p "cl-struct-" (symbol-name tag)))
|
||||
|
|
|
|||
|
|
@ -906,7 +906,7 @@ circular objects. Let `read' read everything else."
|
|||
;; with the object itself, wherever it occurs.
|
||||
(forward-char 1)
|
||||
(let ((obj (edebug-read-storing-offsets stream)))
|
||||
(substitute-object-in-subtree obj placeholder)
|
||||
(lread--substitute-object-in-subtree obj placeholder t)
|
||||
(throw 'return (setf (cdr elem) obj)))))
|
||||
((eq ?# (following-char))
|
||||
;; #n# returns a previously read object.
|
||||
|
|
|
|||
|
|
@ -160,6 +160,10 @@ This is used to determine if `eldoc-idle-delay' is changed by the user.")
|
|||
It should receive the same arguments as `message'.")
|
||||
|
||||
(defun eldoc-edit-message-commands ()
|
||||
"Return an obarray containing common editing commands.
|
||||
|
||||
When `eldoc-print-after-edit' is non-nil, ElDoc messages are only
|
||||
printed after commands contained in this obarray."
|
||||
(let ((cmds (make-vector 31 0))
|
||||
(re (regexp-opt '("delete" "insert" "edit" "electric" "newline"))))
|
||||
(mapatoms (lambda (s)
|
||||
|
|
@ -211,16 +215,21 @@ expression point is on."
|
|||
|
||||
;;;###autoload
|
||||
(defun turn-on-eldoc-mode ()
|
||||
"Turn on `eldoc-mode' if the buffer has eldoc support enabled.
|
||||
"Turn on `eldoc-mode' if the buffer has ElDoc support enabled.
|
||||
See `eldoc-documentation-function' for more detail."
|
||||
(when (eldoc--supported-p)
|
||||
(eldoc-mode 1)))
|
||||
|
||||
(defun eldoc--supported-p ()
|
||||
"Non-nil if an ElDoc function is set for this buffer."
|
||||
(not (memq eldoc-documentation-function '(nil ignore))))
|
||||
|
||||
|
||||
(defun eldoc-schedule-timer ()
|
||||
"Ensure `eldoc-timer' is running.
|
||||
|
||||
If the user has changed `eldoc-idle-delay', update the timer to
|
||||
reflect the change."
|
||||
(or (and eldoc-timer
|
||||
(memq eldoc-timer timer-idle-list)) ;FIXME: Why?
|
||||
(setq eldoc-timer
|
||||
|
|
@ -229,8 +238,7 @@ See `eldoc-documentation-function' for more detail."
|
|||
(lambda ()
|
||||
(when (or eldoc-mode
|
||||
(and global-eldoc-mode
|
||||
(not (memq eldoc-documentation-function
|
||||
'(nil ignore)))))
|
||||
(eldoc--supported-p)))
|
||||
(eldoc-print-current-symbol-info))))))
|
||||
|
||||
;; If user has changed the idle delay, update the timer.
|
||||
|
|
@ -268,16 +276,19 @@ Otherwise work like `message'."
|
|||
(force-mode-line-update)))
|
||||
(apply 'message format-string args)))
|
||||
|
||||
(defun eldoc-message (&rest args)
|
||||
(defun eldoc-message (&optional format-string &rest args)
|
||||
"Display FORMAT-STRING formatted with ARGS as an ElDoc message.
|
||||
|
||||
Store the message (if any) in `eldoc-last-message', and return it."
|
||||
(let ((omessage eldoc-last-message))
|
||||
(setq eldoc-last-message
|
||||
(cond ((eq (car args) eldoc-last-message) eldoc-last-message)
|
||||
((null (car args)) nil)
|
||||
(cond ((eq format-string eldoc-last-message) eldoc-last-message)
|
||||
((null format-string) nil)
|
||||
;; If only one arg, no formatting to do, so put it in
|
||||
;; eldoc-last-message so eq test above might succeed on
|
||||
;; subsequent calls.
|
||||
((null (cdr args)) (car args))
|
||||
(t (apply #'format-message args))))
|
||||
((null args) format-string)
|
||||
(t (apply #'format-message format-string args))))
|
||||
;; In emacs 19.29 and later, and XEmacs 19.13 and later, all messages
|
||||
;; are recorded in a log. Do not put eldoc messages in that log since
|
||||
;; they are Legion.
|
||||
|
|
@ -289,6 +300,7 @@ Otherwise work like `message'."
|
|||
eldoc-last-message)
|
||||
|
||||
(defun eldoc--message-command-p (command)
|
||||
"Return non-nil if COMMAND is in `eldoc-message-commands'."
|
||||
(and (symbolp command)
|
||||
(intern-soft (symbol-name command) eldoc-message-commands)))
|
||||
|
||||
|
|
@ -299,6 +311,7 @@ Otherwise work like `message'."
|
|||
;; before the next command executes, which does away with the flicker.
|
||||
;; This doesn't seem to be required for Emacs 19.28 and earlier.
|
||||
(defun eldoc-pre-command-refresh-echo-area ()
|
||||
"Reprint `eldoc-last-message' in the echo area."
|
||||
(and eldoc-last-message
|
||||
(not (minibufferp)) ;We don't use the echo area when in minibuffer.
|
||||
(if (and (eldoc-display-message-no-interference-p)
|
||||
|
|
@ -310,6 +323,7 @@ Otherwise work like `message'."
|
|||
|
||||
;; Decide whether now is a good time to display a message.
|
||||
(defun eldoc-display-message-p ()
|
||||
"Return non-nil when it is appropriate to display an ElDoc message."
|
||||
(and (eldoc-display-message-no-interference-p)
|
||||
;; If this-command is non-nil while running via an idle
|
||||
;; timer, we're still in the middle of executing a command,
|
||||
|
|
@ -322,6 +336,7 @@ Otherwise work like `message'."
|
|||
;; Check various conditions about the current environment that might make
|
||||
;; it undesirable to print eldoc messages right this instant.
|
||||
(defun eldoc-display-message-no-interference-p ()
|
||||
"Return nil if displaying a message would cause interference."
|
||||
(not (or executing-kbd-macro (bound-and-true-p edebug-active))))
|
||||
|
||||
|
||||
|
|
@ -347,6 +362,7 @@ variable) is taken into account if the major mode specific function does not
|
|||
return any documentation.")
|
||||
|
||||
(defun eldoc-print-current-symbol-info ()
|
||||
"Print the text produced by `eldoc-documentation-function'."
|
||||
;; This is run from post-command-hook or some idle timer thing,
|
||||
;; so we need to be careful that errors aren't ignored.
|
||||
(with-demoted-errors "eldoc error: %s"
|
||||
|
|
@ -361,6 +377,13 @@ return any documentation.")
|
|||
;; truncated or eliminated entirely from the output to make room for the
|
||||
;; description.
|
||||
(defun eldoc-docstring-format-sym-doc (prefix doc &optional face)
|
||||
"Combine PREFIX and DOC, and shorten the result to fit in the echo area.
|
||||
|
||||
When PREFIX is a symbol, propertize its symbol name with FACE
|
||||
before combining it with DOC. If FACE is not provided, just
|
||||
apply the nil face.
|
||||
|
||||
See also: `eldoc-echo-area-use-multiline-p'."
|
||||
(when (symbolp prefix)
|
||||
(setq prefix (concat (propertize (symbol-name prefix) 'face face) ": ")))
|
||||
(let* ((ea-multi eldoc-echo-area-use-multiline-p)
|
||||
|
|
@ -390,22 +413,26 @@ return any documentation.")
|
|||
;; These functions do display-command table management.
|
||||
|
||||
(defun eldoc-add-command (&rest cmds)
|
||||
"Add each of CMDS to the obarray `eldoc-message-commands'."
|
||||
(dolist (name cmds)
|
||||
(and (symbolp name)
|
||||
(setq name (symbol-name name)))
|
||||
(set (intern name eldoc-message-commands) t)))
|
||||
|
||||
(defun eldoc-add-command-completions (&rest names)
|
||||
"Pass every prefix completion of NAMES to `eldoc-add-command'."
|
||||
(dolist (name names)
|
||||
(apply #'eldoc-add-command (all-completions name obarray 'commandp))))
|
||||
|
||||
(defun eldoc-remove-command (&rest cmds)
|
||||
"Remove each of CMDS from the obarray `eldoc-message-commands'."
|
||||
(dolist (name cmds)
|
||||
(and (symbolp name)
|
||||
(setq name (symbol-name name)))
|
||||
(unintern name eldoc-message-commands)))
|
||||
|
||||
(defun eldoc-remove-command-completions (&rest names)
|
||||
"Pass every prefix completion of NAMES to `eldoc-remove-command'."
|
||||
(dolist (name names)
|
||||
(apply #'eldoc-remove-command
|
||||
(all-completions name eldoc-message-commands))))
|
||||
|
|
@ -418,9 +445,9 @@ return any documentation.")
|
|||
"down-list" "end-of-" "exchange-point-and-mark" "forward-" "goto-"
|
||||
"handle-select-window" "indent-for-tab-command" "left-" "mark-page"
|
||||
"mark-paragraph" "mouse-set-point" "move-" "move-beginning-of-"
|
||||
"move-end-of-" "newline" "next-" "other-window" "pop-global-mark" "previous-"
|
||||
"recenter" "right-" "scroll-" "self-insert-command" "split-window-"
|
||||
"up-list")
|
||||
"move-end-of-" "newline" "next-" "other-window" "pop-global-mark"
|
||||
"previous-" "recenter" "right-" "scroll-" "self-insert-command"
|
||||
"split-window-" "up-list")
|
||||
|
||||
(provide 'eldoc)
|
||||
|
||||
|
|
|
|||
|
|
@ -136,8 +136,15 @@ Emacs bug 6581 at URL `http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6581'."
|
|||
;; ert-test objects. It designates an anonymous test.
|
||||
(error "Attempt to define a test named nil"))
|
||||
(put symbol 'ert--test definition)
|
||||
;; Register in load-history, so `symbol-file' can find us, and so
|
||||
;; unload-feature can unload our tests.
|
||||
(cl-pushnew `(ert-deftest . ,symbol) current-load-list :test #'equal)
|
||||
definition)
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((x (head ert-deftest)))
|
||||
(let ((name (cdr x)))
|
||||
(put name 'ert--test nil)))
|
||||
|
||||
(defun ert-make-test-unbound (symbol)
|
||||
"Make SYMBOL name no test. Return SYMBOL."
|
||||
(cl-remprop symbol 'ert--test)
|
||||
|
|
@ -214,12 +221,6 @@ description of valid values for RESULT-TYPE.
|
|||
,@(when tags-supplied-p
|
||||
`(:tags ,tags))
|
||||
:body (lambda () ,@body)))
|
||||
;; This hack allows `symbol-file' to associate `ert-deftest'
|
||||
;; forms with files, and therefore enables `find-function' to
|
||||
;; work with tests. However, it leads to warnings in
|
||||
;; `unload-feature', which doesn't know how to undefine tests
|
||||
;; and has no mechanism for extension.
|
||||
(push '(ert-deftest . ,name) current-load-list)
|
||||
',name))))
|
||||
|
||||
;; We use these `put' forms in addition to the (declare (indent)) in
|
||||
|
|
@ -1512,7 +1513,7 @@ Ran \\([0-9]+\\) tests, \\([0-9]+\\) results as expected\
|
|||
(message "%d files contained unexpected results:" (length unexpected))
|
||||
(mapc (lambda (l) (message " %s" l)) unexpected))
|
||||
;; More details on hydra, where the logs are harder to get to.
|
||||
(when (and (getenv "NIX_STORE")
|
||||
(when (and (getenv "EMACS_HYDRA_CI")
|
||||
(not (zerop (+ nunexpected nskipped))))
|
||||
(message "\nDETAILS")
|
||||
(message "-------")
|
||||
|
|
|
|||
|
|
@ -377,10 +377,12 @@ The return value is the last VAL in the list.
|
|||
`(with-current-buffer ,buf (set (make-local-variable ,var) ,v))))
|
||||
|
||||
(gv-define-expander alist-get
|
||||
(lambda (do key alist &optional default remove)
|
||||
(lambda (do key alist &optional default remove testfn)
|
||||
(macroexp-let2 macroexp-copyable-p k key
|
||||
(gv-letplace (getter setter) alist
|
||||
(macroexp-let2 nil p `(assq ,k ,getter)
|
||||
(macroexp-let2 nil p `(if (and ,testfn (not (eq ,testfn 'eq)))
|
||||
(assoc ,k ,getter ,testfn)
|
||||
(assq ,k ,getter))
|
||||
(funcall do (if (null default) `(cdr ,p)
|
||||
`(if ,p (cdr ,p) ,default))
|
||||
(lambda (v)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
;; Author: Nicolas Petton <nicolas@petton.fr>
|
||||
;; Keywords: convenience, map, hash-table, alist, array
|
||||
;; Version: 1.1
|
||||
;; Version: 1.2
|
||||
;; Package: map
|
||||
|
||||
;; Maintainer: emacs-devel@gnu.org
|
||||
|
|
@ -93,11 +93,13 @@ Returns the result of evaluating the form associated with MAP-VAR's type."
|
|||
((arrayp ,map-var) ,(plist-get args :array))
|
||||
(t (error "Unsupported map: %s" ,map-var)))))
|
||||
|
||||
(defun map-elt (map key &optional default)
|
||||
(defun map-elt (map key &optional default testfn)
|
||||
"Lookup KEY in MAP and return its associated value.
|
||||
If KEY is not found, return DEFAULT which defaults to nil.
|
||||
|
||||
If MAP is a list, `eql' is used to lookup KEY.
|
||||
If MAP is a list, `eql' is used to lookup KEY. Optional argument
|
||||
TESTFN, if non-nil, means use its function definition instead of
|
||||
`eql'.
|
||||
|
||||
MAP can be a list, hash-table or array."
|
||||
(declare
|
||||
|
|
@ -106,30 +108,31 @@ MAP can be a list, hash-table or array."
|
|||
(gv-letplace (mgetter msetter) `(gv-delay-error ,map)
|
||||
(macroexp-let2* nil
|
||||
;; Eval them once and for all in the right order.
|
||||
((key key) (default default))
|
||||
((key key) (default default) (testfn testfn))
|
||||
`(if (listp ,mgetter)
|
||||
;; Special case the alist case, since it can't be handled by the
|
||||
;; map--put function.
|
||||
,(gv-get `(alist-get ,key (gv-synthetic-place
|
||||
,mgetter ,msetter)
|
||||
,default)
|
||||
,default nil ,testfn)
|
||||
do)
|
||||
,(funcall do `(map-elt ,mgetter ,key ,default)
|
||||
(lambda (v) `(map--put ,mgetter ,key ,v)))))))))
|
||||
(map--dispatch map
|
||||
:list (alist-get key map default)
|
||||
:list (alist-get key map default nil testfn)
|
||||
:hash-table (gethash key map default)
|
||||
:array (if (and (>= key 0) (< key (seq-length map)))
|
||||
(seq-elt map key)
|
||||
default)))
|
||||
|
||||
(defmacro map-put (map key value)
|
||||
(defmacro map-put (map key value &optional testfn)
|
||||
"Associate KEY with VALUE in MAP and return VALUE.
|
||||
If KEY is already present in MAP, replace the associated value
|
||||
with VALUE.
|
||||
When MAP is a list, test equality with TESTFN if non-nil, otherwise use `eql'.
|
||||
|
||||
MAP can be a list, hash-table or array."
|
||||
`(setf (map-elt ,map ,key) ,value))
|
||||
`(setf (map-elt ,map ,key nil ,testfn) ,value))
|
||||
|
||||
(defun map-delete (map key)
|
||||
"Delete KEY from MAP and return MAP.
|
||||
|
|
|
|||
|
|
@ -385,6 +385,18 @@ of the piece of advice."
|
|||
|
||||
(defun advice--defalias-fset (fsetfun symbol newdef)
|
||||
(unless fsetfun (setq fsetfun #'fset))
|
||||
;; `newdef' shouldn't include advice wrappers, since that's what *we* manage!
|
||||
;; So if `newdef' includes advice wrappers, it's usually because someone
|
||||
;; naively took (symbol-function F) and then passed that back to `defalias':
|
||||
;; let's strip them away.
|
||||
(cond
|
||||
((advice--p newdef) (setq newdef (advice--cd*r newdef)))
|
||||
((and (eq 'macro (car-safe newdef))
|
||||
(advice--p (cdr newdef)))
|
||||
(setq newdef `(macro . ,(advice--cd*r (cdr newdef))))))
|
||||
;; The saved-rewrite is specific to the current value, so since we are about
|
||||
;; to overwrite that current value with new value, the old saved-rewrite is
|
||||
;; not relevant any more.
|
||||
(when (get symbol 'advice--saved-rewrite)
|
||||
(put symbol 'advice--saved-rewrite nil))
|
||||
(setq newdef (advice--normalize symbol newdef))
|
||||
|
|
|
|||
|
|
@ -930,6 +930,5 @@ QPAT can take the following forms:
|
|||
((or (stringp qpat) (integerp qpat) (symbolp qpat)) `',qpat)
|
||||
(t (error "Unknown QPAT: %S" qpat))))
|
||||
|
||||
|
||||
(provide 'pcase)
|
||||
;;; pcase.el ends here
|
||||
|
|
|
|||
|
|
@ -1169,6 +1169,62 @@ enclosed in `(and ...)'.
|
|||
(rx-to-string `(and ,@regexps) t))
|
||||
(t
|
||||
(rx-to-string (car regexps) t))))
|
||||
|
||||
|
||||
(pcase-defmacro rx (&rest regexps)
|
||||
"Build a `pcase' pattern matching `rx' regexps.
|
||||
The REGEXPS are interpreted as by `rx'. The pattern matches if
|
||||
the regular expression so constructed matches the object, as if
|
||||
by `string-match'.
|
||||
|
||||
In addition to the usual `rx' constructs, REGEXPS can contain the
|
||||
following constructs:
|
||||
|
||||
(let VAR FORM...) creates a new explicitly numbered submatch
|
||||
that matches FORM and binds the match to
|
||||
VAR.
|
||||
(backref VAR) creates a backreference to the submatch
|
||||
introduced by a previous (let VAR ...)
|
||||
construct.
|
||||
|
||||
The VARs are associated with explicitly numbered submatches
|
||||
starting from 1. Multiple occurrences of the same VAR refer to
|
||||
the same submatch.
|
||||
|
||||
If a case matches, the match data is modified as usual so you can
|
||||
use it in the case body, but you still have to pass the correct
|
||||
string as argument to `match-string'."
|
||||
(let* ((vars ())
|
||||
(rx-constituents
|
||||
`((let
|
||||
,(lambda (form)
|
||||
(rx-check form)
|
||||
(let ((var (cadr form)))
|
||||
(cl-check-type var symbol)
|
||||
(let ((i (or (cl-position var vars :test #'eq)
|
||||
(prog1 (length vars)
|
||||
(setq vars `(,@vars ,var))))))
|
||||
(rx-form `(submatch-n ,(1+ i) ,@(cddr form))))))
|
||||
1 nil)
|
||||
(backref
|
||||
,(lambda (form)
|
||||
(rx-check form)
|
||||
(rx-backref
|
||||
`(backref ,(let ((var (cadr form)))
|
||||
(if (integerp var) var
|
||||
(1+ (cl-position var vars :test #'eq)))))))
|
||||
1 1
|
||||
,(lambda (var)
|
||||
(cond ((integerp var) (rx-check-backref var))
|
||||
((memq var vars) t)
|
||||
(t (error "rx `backref' variable must be one of %s: %s"
|
||||
vars var)))))
|
||||
,@rx-constituents))
|
||||
(regexp (rx-to-string `(seq ,@regexps) :no-group)))
|
||||
`(and (pred (string-match ,regexp))
|
||||
,@(cl-loop for i from 1
|
||||
for var in vars
|
||||
collect `(app (match-string ,i) ,var)))))
|
||||
|
||||
;; ;; sregex.el replacement
|
||||
|
||||
|
|
|
|||
|
|
@ -161,14 +161,25 @@ If N is negative, find the previous or Nth previous match."
|
|||
"Move to end of Nth next prompt in the buffer.
|
||||
See `eshell-prompt-regexp'."
|
||||
(interactive "p")
|
||||
(forward-paragraph n)
|
||||
(if eshell-highlight-prompt
|
||||
(progn
|
||||
(while (< n 0)
|
||||
(while (and (re-search-backward eshell-prompt-regexp nil t)
|
||||
(not (get-text-property (match-beginning 0) 'read-only))))
|
||||
(setq n (1+ n)))
|
||||
(while (> n 0)
|
||||
(while (and (re-search-forward eshell-prompt-regexp nil t)
|
||||
(not (get-text-property (match-beginning 0) 'read-only))))
|
||||
(setq n (1- n))))
|
||||
(re-search-forward eshell-prompt-regexp nil t n))
|
||||
(eshell-skip-prompt))
|
||||
|
||||
(defun eshell-previous-prompt (n)
|
||||
"Move to end of Nth previous prompt in the buffer.
|
||||
See `eshell-prompt-regexp'."
|
||||
(interactive "p")
|
||||
(eshell-next-prompt (- (1+ n))))
|
||||
(beginning-of-line) ; Don't count prompt on current line.
|
||||
(eshell-next-prompt (- n)))
|
||||
|
||||
(defun eshell-skip-prompt ()
|
||||
"Skip past the text matching regexp `eshell-prompt-regexp'.
|
||||
|
|
|
|||
|
|
@ -102,11 +102,16 @@ a font height that isn't optimal."
|
|||
;; Monospace Serif is an Emacs invention, intended to work around
|
||||
;; portability problems when using Courier. It should work well
|
||||
;; when combined with Monospaced and with other standard fonts.
|
||||
;; One of its uses is for 'tex-verbatim' and 'Info-quoted' faces,
|
||||
;; so the result must be different from the default face's font,
|
||||
;; and must be monospaced.
|
||||
("Monospace Serif"
|
||||
|
||||
;; This looks good on GNU/Linux.
|
||||
"Courier 10 Pitch"
|
||||
;; This looks good on MS-Windows and OS X.
|
||||
;; This looks good on MS-Windows and OS X. Note that this is
|
||||
;; actually a sans-serif font, but it's here for lack of a better
|
||||
;; alternative.
|
||||
"Consolas"
|
||||
;; This looks good on macOS. "Courier" looks good too, but is
|
||||
;; jagged on GNU/Linux and so is listed later as "courier".
|
||||
|
|
@ -2465,6 +2470,33 @@ If you set `term-file-prefix' to nil, this function does nothing."
|
|||
:version "21.1"
|
||||
:group 'basic-faces)
|
||||
|
||||
;; Definition stolen from linum.el.
|
||||
(defface line-number
|
||||
'((t :inherit (shadow default)))
|
||||
"Face for displaying line numbers.
|
||||
This face is used when `display-line-numbers' is non-nil.
|
||||
|
||||
If you customize the font of this face, make sure it is a
|
||||
monospaced font, otherwise line numbers will not line up,
|
||||
and text lines might move horizontally as you move through
|
||||
the buffer."
|
||||
:version "26.1"
|
||||
:group 'basic-faces)
|
||||
|
||||
(defface line-number-current-line
|
||||
'((t :inherit line-number))
|
||||
"Face for displaying the current line number.
|
||||
This face is used when `display-line-numbers' is non-nil.
|
||||
|
||||
If you customize the font of this face, make sure it is a
|
||||
monospaced font, otherwise line numbers will not line up,
|
||||
and text lines might move horizontally as you move through
|
||||
the buffer. Similarly, making this face's font different
|
||||
from that of the `line-number' face could produce such
|
||||
unwanted effects."
|
||||
:version "26.1"
|
||||
:group 'basic-faces)
|
||||
|
||||
(defface escape-glyph
|
||||
'((((background dark)) :foreground "cyan")
|
||||
;; See the comment in minibuffer-prompt for
|
||||
|
|
|
|||
|
|
@ -434,8 +434,11 @@ and toggle it if ARG is `toggle'."
|
|||
(not (and buffer-auto-save-file-name
|
||||
auto-save-visited-file-name)))))))
|
||||
|
||||
;; The 'set' part is so we don't get a warning for using this variable
|
||||
;; above, while still catching code that _sets_ the variable to get
|
||||
;; the same effect as the new auto-save-visited-mode.
|
||||
(make-obsolete-variable 'auto-save-visited-file-name 'auto-save-visited-mode
|
||||
"Emacs 26.1")
|
||||
"Emacs 26.1" 'set)
|
||||
|
||||
(defcustom save-abbrevs t
|
||||
"Non-nil means save word abbrevs too when files are saved.
|
||||
|
|
@ -2540,7 +2543,7 @@ since only a single case-insensitive search through the alist is made."
|
|||
("\\.[ckz]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode)
|
||||
("\\.bash\\'" . sh-mode)
|
||||
("\\(/\\|\\`\\)\\.\\(bash_\\(profile\\|history\\|log\\(in\\|out\\)\\)\\|z?log\\(in\\|out\\)\\)\\'" . sh-mode)
|
||||
("\\(/\\|\\`\\)\\.\\(shrc\\|[kz]shrc\\|bashrc\\|t?cshrc\\|esrc\\)\\'" . sh-mode)
|
||||
("\\(/\\|\\`\\)\\.\\(shrc\\|zshrc\\|m?kshrc\\|bashrc\\|t?cshrc\\|esrc\\)\\'" . sh-mode)
|
||||
("\\(/\\|\\`\\)\\.\\([kz]shenv\\|xinitrc\\|startxrc\\|xsession\\)\\'" . sh-mode)
|
||||
("\\.m?spec\\'" . sh-mode)
|
||||
("\\.m[mes]\\'" . nroff-mode)
|
||||
|
|
|
|||
|
|
@ -1482,6 +1482,7 @@ FRAME."
|
|||
|
||||
(declare-function w32-mouse-absolute-pixel-position "w32fns.c")
|
||||
(declare-function x-mouse-absolute-pixel-position "xfns.c")
|
||||
(declare-function ns-mouse-absolute-pixel-position "nsfns.c")
|
||||
|
||||
(defun mouse-absolute-pixel-position ()
|
||||
"Return absolute position of mouse cursor in pixels.
|
||||
|
|
@ -1494,6 +1495,8 @@ position (0, 0) of the selected frame's terminal."
|
|||
(x-mouse-absolute-pixel-position))
|
||||
((eq frame-type 'w32)
|
||||
(w32-mouse-absolute-pixel-position))
|
||||
((eq frame-type 'ns)
|
||||
(ns-mouse-absolute-pixel-position))
|
||||
(t
|
||||
(cons 0 0)))))
|
||||
|
||||
|
|
@ -2458,7 +2461,13 @@ See also `toggle-frame-maximized'."
|
|||
(make-obsolete-variable
|
||||
'window-system-version "it does not give useful information." "24.3")
|
||||
|
||||
;; Variables which should trigger redisplay of the current buffer.
|
||||
;; Variables whose change of value should trigger redisplay of the
|
||||
;; current buffer.
|
||||
;; To test whether a given variable needs to be added to this list,
|
||||
;; write a simple interactive function that changes the variable's
|
||||
;; value and bind that function to a simple key, like F5. If typing
|
||||
;; F5 then produces the correct effect, the variable doesn't need
|
||||
;; to be in this list; otherwise, it does.
|
||||
(mapc (lambda (var)
|
||||
(add-variable-watcher var (symbol-function 'set-buffer-redisplay)))
|
||||
'(line-spacing
|
||||
|
|
@ -2466,6 +2475,10 @@ See also `toggle-frame-maximized'."
|
|||
line-prefix
|
||||
wrap-prefix
|
||||
truncate-lines
|
||||
display-line-numbers
|
||||
display-line-numbers-width
|
||||
display-line-numbers-current-absolute
|
||||
display-line-numbers-widen
|
||||
bidi-paragraph-direction
|
||||
bidi-display-reordering))
|
||||
|
||||
|
|
|
|||
|
|
@ -9780,8 +9780,11 @@ If ARG is a negative number, hide the unwanted header lines."
|
|||
(inhibit-point-motion-hooks t)
|
||||
(hidden (if (numberp arg)
|
||||
(>= arg 0)
|
||||
(or (not (looking-at "[^ \t\n]+:"))
|
||||
(gnus-article-hidden-text-p 'headers))))
|
||||
(or
|
||||
;; The case where there's no visible header
|
||||
;; that matches `gnus-visible-headers'.
|
||||
(looking-at "\n?\\'")
|
||||
(gnus-article-hidden-text-p 'headers))))
|
||||
s e)
|
||||
(delete-region (point-min) (point-max))
|
||||
(with-current-buffer gnus-original-article-buffer
|
||||
|
|
|
|||
|
|
@ -564,7 +564,6 @@ FILE is the file where FUNCTION was probably defined."
|
|||
"Return information about FUNCTION.
|
||||
Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)."
|
||||
(let* ((advised (and (symbolp function)
|
||||
(featurep 'nadvice)
|
||||
(advice--p (advice--symbol-function function))))
|
||||
;; If the function is advised, use the symbol that has the
|
||||
;; real definition, if that symbol is already set up.
|
||||
|
|
|
|||
|
|
@ -1384,6 +1384,9 @@ If PRESERVE-NAMES is non-nil, return a formal arglist that uses
|
|||
the same names as used in the original source code, when possible."
|
||||
;; Handle symbols aliased to other symbols.
|
||||
(if (and (symbolp def) (fboundp def)) (setq def (indirect-function def)))
|
||||
;; Advice wrappers have "catch all" args, so fetch the actual underlying
|
||||
;; function to find the real arguments.
|
||||
(while (advice--p def) (setq def (advice--cdr def)))
|
||||
;; If definition is a macro, find the function inside it.
|
||||
(if (eq (car-safe def) 'macro) (setq def (cdr def)))
|
||||
(cond
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ with L, LRE, or LRO Unicode bidi character type.")
|
|||
(modify-category-entry '(#xF900 . #xFAFF) ?C)
|
||||
(modify-category-entry '(#xF900 . #xFAFF) ?c)
|
||||
(modify-category-entry '(#xF900 . #xFAFF) ?|)
|
||||
(modify-category-entry '(#x1B170 . #x1B2FF) ?c)
|
||||
(modify-category-entry '(#x20000 . #x2FFFF) ?|)
|
||||
(modify-category-entry '(#x20000 . #x2FFFF) ?C)
|
||||
(modify-category-entry '(#x20000 . #x2FFFF) ?c)
|
||||
|
|
@ -221,6 +222,8 @@ with L, LRE, or LRO Unicode bidi character type.")
|
|||
(modify-category-entry #x30A0 ?H)
|
||||
(modify-category-entry #x30FC ?H)
|
||||
|
||||
(modify-category-entry '(#x1B000 . #x1B1FF) ?j)
|
||||
|
||||
|
||||
;; JISX0208
|
||||
(map-charset-chars #'modify-syntax-entry 'japanese-jisx0208 "_" #x2121 #x227E)
|
||||
|
|
@ -1196,10 +1199,11 @@ with L, LRE, or LRO Unicode bidi character type.")
|
|||
(#xFE30 . #xFE6F)
|
||||
(#xFF01 . #xFF60)
|
||||
(#xFFE0 . #xFFE6)
|
||||
(#x16FE0 . #x16FE0)
|
||||
(#x16FE0 . #x16FE1)
|
||||
(#x17000 . #x187EC)
|
||||
(#x18800 . #x18AF2)
|
||||
(#x1B000 . #x1B001)
|
||||
(#x1B000 . #x1B11E)
|
||||
(#x1B170 . #x1B2FB)
|
||||
(#x1F004 . #x1F004)
|
||||
(#x1F0CF . #x1F0CF)
|
||||
(#x1F18E . #x1F18E)
|
||||
|
|
@ -1229,15 +1233,13 @@ with L, LRE, or LRO Unicode bidi character type.")
|
|||
(#x1F6CC . #x1F6CC)
|
||||
(#x1F6D0 . #x1F6D2)
|
||||
(#x1F6EB . #x1F6EC)
|
||||
(#x1F6F4 . #x1F6F6)
|
||||
(#x1F910 . #x1F91E)
|
||||
(#x1F920 . #x1F927)
|
||||
(#x1F930 . #x1F930)
|
||||
(#x1F933 . #x1F93E)
|
||||
(#x1F940 . #x1F94B)
|
||||
(#x1F950 . #x1F95E)
|
||||
(#x1F980 . #x1F991)
|
||||
(#x1F6F4 . #x1F6F8)
|
||||
(#x1F910 . #x1F93E)
|
||||
(#x1F940 . #x1F94C)
|
||||
(#x1F950 . #x1F96B)
|
||||
(#x1F980 . #x1F997)
|
||||
(#x1F9C0 . #x1F9C0)
|
||||
(#x1F9D0 . #x1F9E6)
|
||||
(#x20000 . #x2FFFF)
|
||||
(#x30000 . #x3FFFF))))
|
||||
(dolist (elt l)
|
||||
|
|
|
|||
|
|
@ -227,9 +227,12 @@
|
|||
(modi #x11600)
|
||||
(takri #x11680)
|
||||
(warang-citi #x118A1)
|
||||
(zanabazar-square #x11A00)
|
||||
(soyombo #x11A50)
|
||||
(pau-cin-hau #x11AC0)
|
||||
(bhaiksuki #x11C00)
|
||||
(marchen #x11C72)
|
||||
(masaram-gondi #x11D00)
|
||||
(cuneiform #x12000)
|
||||
(cuneiform-numbers-and-punctuation #x12400)
|
||||
(mro #x16A40)
|
||||
|
|
@ -237,6 +240,7 @@
|
|||
(pahawh-hmong #x16B11)
|
||||
(tangut #x17000)
|
||||
(tangut-components #x18800)
|
||||
(nushu #x1B170)
|
||||
(duployan-shorthand #x1BC20)
|
||||
(byzantine-musical-symbol #x1D000)
|
||||
(musical-symbol #x1D100)
|
||||
|
|
|
|||
|
|
@ -2945,8 +2945,10 @@ on encoding."
|
|||
;; (#x17000 . #x187FF) Tangut Ideographs
|
||||
;; (#x18800 . #x18AFF) Tangut Components
|
||||
;; (#x18B00 . #x1AFFF) unused
|
||||
(#x1B000 . #x1B0FF)
|
||||
;; (#x1B100 . #x1BBFF) unused
|
||||
(#x1B000 . #x1B12F)
|
||||
;; (#x1B130 . #x1B16F) unused
|
||||
(#x1B170 . #x1B2FF)
|
||||
;; (#x1B300 . #x1BBFF) unused
|
||||
(#x1BC00 . #x1BCAF)
|
||||
;; (#x1BCB0 . #x1CFFF) unused
|
||||
(#x1D000 . #x1FFFF)
|
||||
|
|
|
|||
|
|
@ -565,7 +565,8 @@ Use \\[kmacro-insert-counter] to insert (and increment) the macro counter.
|
|||
The counter value can be set or modified via \\[kmacro-set-counter] and \\[kmacro-add-counter].
|
||||
The format of the counter can be modified via \\[kmacro-set-format].
|
||||
|
||||
Use \\[kmacro-name-last-macro] to give it a permanent name.
|
||||
Use \\[kmacro-name-last-macro] to give it a name that will remain valid even
|
||||
after another macro is defined.
|
||||
Use \\[kmacro-bind-to-key] to bind it to a key sequence."
|
||||
(interactive "P")
|
||||
(if (or defining-kbd-macro executing-kbd-macro)
|
||||
|
|
@ -628,8 +629,8 @@ just the last key in the key sequence that you used to call this
|
|||
command. See `kmacro-call-repeat-key' and `kmacro-call-repeat-with-arg'
|
||||
for details on how to adjust or disable this behavior.
|
||||
|
||||
To make a macro permanent so you can call it even after defining
|
||||
others, use \\[kmacro-name-last-macro]."
|
||||
To give a macro a name so you can call it even after defining others,
|
||||
use \\[kmacro-name-last-macro]."
|
||||
(interactive "p")
|
||||
(let ((repeat-key (and (or (and (null no-repeat)
|
||||
(> (length (this-single-command-keys)) 1))
|
||||
|
|
@ -730,8 +731,8 @@ With \\[universal-argument], call second macro in macro ring."
|
|||
With numeric prefix ARG, repeat macro that many times.
|
||||
Zero argument means repeat until there is an error.
|
||||
|
||||
To give a macro a permanent name, so you can call it
|
||||
even after defining other macros, use \\[kmacro-name-last-macro]."
|
||||
To give a macro a name, so you can call it even after defining other
|
||||
macros, use \\[kmacro-name-last-macro]."
|
||||
(interactive "P")
|
||||
(if defining-kbd-macro
|
||||
(kmacro-end-macro nil))
|
||||
|
|
|
|||
|
|
@ -1152,7 +1152,7 @@ Doubling the postfix separates the letter and postfix: e.g. a^^ -> a^
|
|||
(quail-define-package
|
||||
"dutch" "Dutch" "NL" t
|
||||
"Dutch character mixfix input method.
|
||||
Caters for French and Turkish as well as Dutch.
|
||||
Caters for French and Dutch.
|
||||
|
||||
| | examples
|
||||
------------+---------+----------
|
||||
|
|
@ -1163,8 +1163,6 @@ Caters for French and Turkish as well as Dutch.
|
|||
acute | \\=' | a\\=' -> á
|
||||
grave | \\=` | a\\=` -> à
|
||||
circumflex | ^ | a^ -> â
|
||||
Turkish | various | i/ -> ı s, -> ş g^ -> ğ I/ -> İ
|
||||
| | S, -> Ş G^ -> Ğ
|
||||
------------+---------+----------
|
||||
| prefix |
|
||||
------------+---------+----------
|
||||
|
|
@ -1176,9 +1174,6 @@ Doubling the postfix separates the letter and postfix: e.g. a\\='\\=' -> a\\='
|
|||
(quail-define-rules
|
||||
("fl." ?ƒ) ;; LATIN SMALL LETTER F WITH HOOK (florin currency symbol)
|
||||
("eur." ?€) ;; EURO SIGN
|
||||
;; “The 25th letter of the Dutch alphabet.”
|
||||
("ij" ?ij) ;; LATIN SMALL LIGATURE IJ
|
||||
("IJ" ?IJ) ;; LATIN CAPITAL LIGATURE IJ
|
||||
;; “Trema on the second letter of vowel pair.” Yudit uses `:', not `"'.
|
||||
("\"a" ?ä) ;; LATIN SMALL LETTER A WITH DIAERESIS
|
||||
("\"e" ?ë) ;; LATIN SMALL LETTER E WITH DIAERESIS
|
||||
|
|
@ -1226,15 +1221,6 @@ Doubling the postfix separates the letter and postfix: e.g. a\\='\\=' -> a\\='
|
|||
("I^" ?Î) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
||||
("O^" ?Ô) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
||||
("U^" ?Û) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
||||
;; “Follow the example of the Dutch POSIX locale, using ISO-8859-9 to
|
||||
;; cater to the many Turks in Dutch society.” Perhaps German methods
|
||||
;; should do so too. Follow turkish-alt-postfix here.
|
||||
("i/" ?ı) ;; LATIN SMALL LETTER I WITH NO DOT
|
||||
("s," ?ş) ;; LATIN SMALL LETTER S WITH CEDILLA
|
||||
("g^" ?ğ) ;; LATIN SMALL LETTER G WITH BREVE
|
||||
("I/" ?İ) ;; LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||||
("S," ?Ş) ;; LATIN CAPITAL LETTER S WITH CEDILLA
|
||||
("G^" ?Ğ) ;; LATIN CAPITAL LETTER G WITH BREVE
|
||||
)
|
||||
|
||||
;; Originally from Yudit, discussed with Albertas Agejevas
|
||||
|
|
|
|||
|
|
@ -162,6 +162,65 @@ documentation of `unload-feature' for details.")
|
|||
;; mode, or proposed is not nil and not major-mode, and so we use it.
|
||||
(funcall (or proposed 'fundamental-mode)))))))
|
||||
|
||||
(cl-defgeneric loadhist-unload-element (x)
|
||||
"Unload an element from the `load-history'."
|
||||
(message "Unexpected element %S in load-history" x))
|
||||
|
||||
;; In `load-history', the definition of a previously autoloaded
|
||||
;; function is represented by 2 entries: (t . SYMBOL) comes before
|
||||
;; (defun . SYMBOL) and says we should restore SYMBOL's autoload when
|
||||
;; we undefine it.
|
||||
;; So we use this auxiliary variable to keep track of the last (t . SYMBOL)
|
||||
;; that occurred.
|
||||
(defvar loadhist--restore-autoload
|
||||
"If non-nil, this is a symbol for which we should
|
||||
restore a previous autoload if possible.")
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((x (head t)))
|
||||
(setq loadhist--restore-autoload (cdr x)))
|
||||
|
||||
(defun loadhist--unload-function (x)
|
||||
(let ((fun (cdr x)))
|
||||
(when (fboundp fun)
|
||||
(when (fboundp 'ad-unadvise)
|
||||
(ad-unadvise fun))
|
||||
(let ((aload (get fun 'autoload)))
|
||||
(defalias fun
|
||||
(if (and aload (eq fun loadhist--restore-autoload))
|
||||
(cons 'autoload aload)
|
||||
nil)))))
|
||||
(setq loadhist--restore-autoload nil))
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((x (head defun)))
|
||||
(loadhist--unload-function x))
|
||||
(cl-defmethod loadhist-unload-element ((x (head autoload)))
|
||||
(loadhist--unload-function x))
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((_ (head require))) nil)
|
||||
(cl-defmethod loadhist-unload-element ((_ (head defface))) nil)
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((x (head provide)))
|
||||
;; Remove any feature names that this file provided.
|
||||
(setq features (delq (cdr x) features)))
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((x symbol))
|
||||
;; Kill local values as much as possible.
|
||||
(dolist (buf (buffer-list))
|
||||
(with-current-buffer buf
|
||||
(if (and (boundp x) (timerp (symbol-value x)))
|
||||
(cancel-timer (symbol-value x)))
|
||||
(kill-local-variable x)))
|
||||
(if (and (boundp x) (timerp (symbol-value x)))
|
||||
(cancel-timer (symbol-value x)))
|
||||
;; Get rid of the default binding if we can.
|
||||
(unless (local-variable-if-set-p x)
|
||||
(makunbound x)))
|
||||
|
||||
(cl-defmethod loadhist-unload-element ((x (head define-type)))
|
||||
(let* ((name (cdr x)))
|
||||
;; Remove the struct.
|
||||
(setf (cl--find-class name) nil)))
|
||||
|
||||
;;;###autoload
|
||||
(defun unload-feature (feature &optional force)
|
||||
"Unload the library that provided FEATURE.
|
||||
|
|
@ -200,9 +259,6 @@ something strange, such as redefining an Emacs function."
|
|||
(prin1-to-string dependents) file))))
|
||||
(let* ((unload-function-defs-list (feature-symbols feature))
|
||||
(file (pop unload-function-defs-list))
|
||||
;; If non-nil, this is a symbol for which we should
|
||||
;; restore a previous autoload if possible.
|
||||
restore-autoload
|
||||
(name (symbol-name feature))
|
||||
(unload-hook (intern-soft (concat name "-unload-hook")))
|
||||
(unload-func (intern-soft (concat name "-unload-function"))))
|
||||
|
|
@ -250,38 +306,7 @@ something strange, such as redefining an Emacs function."
|
|||
(when (symbolp elt)
|
||||
(elp-restore-function elt))))
|
||||
|
||||
(dolist (x unload-function-defs-list)
|
||||
(if (consp x)
|
||||
(pcase (car x)
|
||||
;; Remove any feature names that this file provided.
|
||||
(`provide
|
||||
(setq features (delq (cdr x) features)))
|
||||
((or `defun `autoload)
|
||||
(let ((fun (cdr x)))
|
||||
(when (fboundp fun)
|
||||
(when (fboundp 'ad-unadvise)
|
||||
(ad-unadvise fun))
|
||||
(let ((aload (get fun 'autoload)))
|
||||
(if (and aload (eq fun restore-autoload))
|
||||
(fset fun (cons 'autoload aload))
|
||||
(fmakunbound fun))))))
|
||||
;; (t . SYMBOL) comes before (defun . SYMBOL)
|
||||
;; and says we should restore SYMBOL's autoload
|
||||
;; when we undefine it.
|
||||
(`t (setq restore-autoload (cdr x)))
|
||||
((or `require `defface) nil)
|
||||
(_ (message "Unexpected element %s in load-history" x)))
|
||||
;; Kill local values as much as possible.
|
||||
(dolist (buf (buffer-list))
|
||||
(with-current-buffer buf
|
||||
(if (and (boundp x) (timerp (symbol-value x)))
|
||||
(cancel-timer (symbol-value x)))
|
||||
(kill-local-variable x)))
|
||||
(if (and (boundp x) (timerp (symbol-value x)))
|
||||
(cancel-timer (symbol-value x)))
|
||||
;; Get rid of the default binding if we can.
|
||||
(unless (local-variable-if-set-p x)
|
||||
(makunbound x))))
|
||||
(mapc #'loadhist-unload-element unload-function-defs-list)
|
||||
;; Delete the load-history element for this file.
|
||||
(setq load-history (delq (assoc file load-history) load-history))))
|
||||
;; Don't return load-history, it is not useful.
|
||||
|
|
|
|||
|
|
@ -245,11 +245,11 @@ to fail to line up, e.g. if month names are not all of the same length."
|
|||
"Format to display integer GIDs.")
|
||||
(defvar ls-lisp-gid-s-fmt " %s"
|
||||
"Format to display user group names.")
|
||||
(defvar ls-lisp-filesize-d-fmt "%d"
|
||||
(defvar ls-lisp-filesize-d-fmt " %d"
|
||||
"Format to display integer file sizes.")
|
||||
(defvar ls-lisp-filesize-f-fmt "%.0f"
|
||||
(defvar ls-lisp-filesize-f-fmt " %.0f"
|
||||
"Format to display float file sizes.")
|
||||
(defvar ls-lisp-filesize-b-fmt "%.0f"
|
||||
(defvar ls-lisp-filesize-b-fmt " %.0f"
|
||||
"Format to display file sizes in blocks (for the -s switch).")
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
|
|
|||
|
|
@ -2828,8 +2828,6 @@ The current mail message becomes the message displayed."
|
|||
(re-search-forward "mime-version: 1.0" nil t))
|
||||
(let ((rmail-buffer mbox-buf)
|
||||
(rmail-view-buffer view-buf))
|
||||
(setq showing-message t)
|
||||
(message "Showing message %d..." msg)
|
||||
(set (make-local-variable 'rmail-mime-decoded) t)
|
||||
(funcall rmail-show-mime-function))
|
||||
(setq body-start (search-forward "\n\n" nil t))
|
||||
|
|
|
|||
|
|
@ -1101,17 +1101,77 @@ The selected font will be the default on both the existing and future frames."
|
|||
:button (:radio . (eq tool-bar-mode nil))))
|
||||
menu)))
|
||||
|
||||
(defun menu-bar-display-line-numbers-mode (type)
|
||||
(setq display-line-numbers-type type)
|
||||
(if global-display-line-numbers-mode
|
||||
(global-display-line-numbers-mode)
|
||||
(display-line-numbers-mode)))
|
||||
|
||||
(defvar menu-bar-showhide-line-numbers-menu
|
||||
(let ((menu (make-sparse-keymap "Line Numbers")))
|
||||
|
||||
(bindings--define-key menu [visual]
|
||||
`(menu-item "Visual Line Numbers"
|
||||
,(lambda ()
|
||||
(interactive)
|
||||
(menu-bar-display-line-numbers-mode 'visual)
|
||||
(message "Visual line numbers enabled"))
|
||||
:help "Enable visual line numbers"
|
||||
:button (:radio . (eq display-line-numbers 'visual))
|
||||
:visible (menu-bar-menu-frame-live-and-visible-p)))
|
||||
|
||||
(bindings--define-key menu [relative]
|
||||
`(menu-item "Relative Line Numbers"
|
||||
,(lambda ()
|
||||
(interactive)
|
||||
(menu-bar-display-line-numbers-mode 'relative)
|
||||
(message "Relative line numbers enabled"))
|
||||
:help "Enable relative line numbers"
|
||||
:button (:radio . (eq display-line-numbers 'relative))
|
||||
:visible (menu-bar-menu-frame-live-and-visible-p)))
|
||||
|
||||
(bindings--define-key menu [absolute]
|
||||
`(menu-item "Absolute Line Numbers"
|
||||
,(lambda ()
|
||||
(interactive)
|
||||
(menu-bar-display-line-numbers-mode t)
|
||||
(setq display-line-numbers t)
|
||||
(message "Absolute line numbers enabled"))
|
||||
:help "Enable absolute line numbers"
|
||||
:button (:radio . (eq display-line-numbers t))
|
||||
:visible (menu-bar-menu-frame-live-and-visible-p)))
|
||||
|
||||
(bindings--define-key menu [none]
|
||||
`(menu-item "No Line Numbers"
|
||||
,(lambda ()
|
||||
(interactive)
|
||||
(menu-bar-display-line-numbers-mode nil)
|
||||
(message "Line numbers disabled"))
|
||||
:help "Disable line numbers"
|
||||
:button (:radio . (null display-line-numbers))
|
||||
:visible (menu-bar-menu-frame-live-and-visible-p)))
|
||||
|
||||
(bindings--define-key menu [global]
|
||||
(menu-bar-make-mm-toggle global-display-line-numbers-mode
|
||||
"Global Line Numbers Mode"
|
||||
"Set line numbers globally"))
|
||||
menu))
|
||||
|
||||
(defvar menu-bar-showhide-menu
|
||||
(let ((menu (make-sparse-keymap "Show/Hide")))
|
||||
|
||||
(bindings--define-key menu [display-line-numbers]
|
||||
`(menu-item "Line Numbers for All Lines"
|
||||
,menu-bar-showhide-line-numbers-menu))
|
||||
|
||||
(bindings--define-key menu [column-number-mode]
|
||||
(menu-bar-make-mm-toggle column-number-mode
|
||||
"Column Numbers"
|
||||
"Column Numbers in Mode Line"
|
||||
"Show the current column number in the mode line"))
|
||||
|
||||
(bindings--define-key menu [line-number-mode]
|
||||
(menu-bar-make-mm-toggle line-number-mode
|
||||
"Line Numbers"
|
||||
"Line Numbers in Mode Line"
|
||||
"Show the current line number in the mode line"))
|
||||
|
||||
(bindings--define-key menu [size-indication-mode]
|
||||
|
|
|
|||
|
|
@ -945,6 +945,7 @@ If EXTERNAL, browse the URL using `shr-external-browser'."
|
|||
(when (and (buffer-name buffer)
|
||||
(not (plist-get status :error)))
|
||||
(url-store-in-cache image-buffer)
|
||||
(goto-char (point-min))
|
||||
(when (or (search-forward "\n\n" nil t)
|
||||
(search-forward "\r\n\r\n" nil t))
|
||||
(let ((data (shr-parse-image-data)))
|
||||
|
|
@ -998,7 +999,7 @@ element is the data blob and the second element is the content-type."
|
|||
(create-image data nil t :ascent 100
|
||||
:format content-type))
|
||||
((eq content-type 'image/svg+xml)
|
||||
(create-image data 'imagemagick t :ascent 100))
|
||||
(create-image data 'svg t :ascent 100))
|
||||
((eq size 'full)
|
||||
(ignore-errors
|
||||
(shr-rescale-image data content-type
|
||||
|
|
|
|||
|
|
@ -136,7 +136,11 @@ Returns DEFAULT if not set."
|
|||
(tramp-message key 8 "%s %s %s" file property value)
|
||||
(when (>= tramp-verbose 10)
|
||||
(let* ((var (intern (concat "tramp-cache-get-count-" property)))
|
||||
(val (or (and (boundp var) (symbol-value var)) 0)))
|
||||
(val (or (bound-and-true-p var)
|
||||
(progn
|
||||
(add-hook 'tramp-cache-unload-hook
|
||||
(lambda () (makunbound var)))
|
||||
0))))
|
||||
(set var (1+ val))))
|
||||
value))
|
||||
|
||||
|
|
@ -156,7 +160,11 @@ Returns VALUE."
|
|||
(tramp-message key 8 "%s %s %s" file property value)
|
||||
(when (>= tramp-verbose 10)
|
||||
(let* ((var (intern (concat "tramp-cache-set-count-" property)))
|
||||
(val (or (and (boundp var) (symbol-value var)) 0)))
|
||||
(val (or (bound-and-true-p var)
|
||||
(progn
|
||||
(add-hook 'tramp-cache-unload-hook
|
||||
(lambda () (makunbound var)))
|
||||
0))))
|
||||
(set var (1+ val))))
|
||||
value))
|
||||
|
||||
|
|
|
|||
|
|
@ -3432,7 +3432,9 @@ the result will be a local, non-Tramp, file name."
|
|||
`((,(tramp-file-name-regexp) . tramp-vc-file-name-handler))))
|
||||
|
||||
;; Here we collect only file names, which need an operation.
|
||||
(ignore-errors (tramp-run-real-handler 'vc-registered (list file)))
|
||||
(tramp-with-demoted-errors
|
||||
v "Error in 1st pass of `vc-registered': %s"
|
||||
(tramp-run-real-handler 'vc-registered (list file)))
|
||||
(tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
|
||||
|
||||
;; Send just one command, in order to fill the cache.
|
||||
|
|
@ -3493,7 +3495,8 @@ the result will be a local, non-Tramp, file name."
|
|||
v vc-hg-program (tramp-get-remote-path v)))))
|
||||
(setq vc-handled-backends (remq 'Hg vc-handled-backends)))
|
||||
;; Run.
|
||||
(ignore-errors
|
||||
(tramp-with-demoted-errors
|
||||
v "Error in 2nd pass of `vc-registered': %s"
|
||||
(tramp-run-real-handler 'vc-registered (list file))))))))
|
||||
|
||||
;;;###tramp-autoload
|
||||
|
|
|
|||
|
|
@ -1641,6 +1641,18 @@ an input event arrives. The other arguments are passed to `tramp-error'."
|
|||
(when (tramp-file-name-equal-p vec (car tramp-current-connection))
|
||||
(setcdr tramp-current-connection (current-time)))))))
|
||||
|
||||
(defmacro tramp-with-demoted-errors (vec-or-proc format &rest body)
|
||||
"Execute BODY while redirecting the error message to `tramp-message'.
|
||||
BODY is executed like wrapped by `with-demoted-errors'. FORMAT
|
||||
is a format-string containing a %-sequence meaning to substitute
|
||||
the resulting error message."
|
||||
(declare (debug (symbolp body))
|
||||
(indent 2))
|
||||
(let ((err (make-symbol "err")))
|
||||
`(condition-case-unless-debug ,err
|
||||
(progn ,@body)
|
||||
(error (tramp-message ,vec-or-proc 3 ,format ,err) nil))))
|
||||
|
||||
(defmacro with-parsed-tramp-file-name (filename var &rest body)
|
||||
"Parse a Tramp filename and make components available in the body.
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
;; Maintainer: Michael Albinus <michael.albinus@gmx.de>
|
||||
;; Keywords: comm, processes
|
||||
;; Package: tramp
|
||||
;; Version: 2.3.2
|
||||
;; Version: 2.3.3-pre
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
;; should be changed only there.
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-version "2.3.2"
|
||||
(defconst tramp-version "2.3.3-pre"
|
||||
"This version of Tramp.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
;; Check for Emacs version.
|
||||
(let ((x (if (>= emacs-major-version 24)
|
||||
"ok"
|
||||
(format "Tramp 2.3.2 is not fit for %s"
|
||||
(format "Tramp 2.3.3-pre is not fit for %s"
|
||||
(when (string-match "^.*$" (emacs-version))
|
||||
(match-string 0 (emacs-version)))))))
|
||||
(unless (string-match "\\`ok\\'" x) (error "%s" x)))
|
||||
|
|
|
|||
|
|
@ -1843,19 +1843,25 @@ with a brace block."
|
|||
(unless (eq where 'at-header)
|
||||
(c-backward-to-nth-BOF-{ 1 where)
|
||||
(c-beginning-of-decl-1))
|
||||
(when (looking-at c-typedef-key)
|
||||
(goto-char (match-end 0))
|
||||
(c-forward-syntactic-ws))
|
||||
|
||||
;; Pick out the defun name, according to the type of defun.
|
||||
(cond
|
||||
;; struct, union, enum, or similar:
|
||||
((and (looking-at c-type-prefix-key)
|
||||
(progn (c-forward-token-2 2) ; over "struct foo "
|
||||
(or (eq (char-after) ?\{)
|
||||
(looking-at c-symbol-key)))) ; "struct foo bar ..."
|
||||
(save-match-data (c-forward-token-2))
|
||||
(when (eq (char-after) ?\{)
|
||||
(c-backward-token-2)
|
||||
(looking-at c-symbol-key))
|
||||
(match-string-no-properties 0))
|
||||
((looking-at c-type-prefix-key)
|
||||
(let ((key-pos (point)))
|
||||
(c-forward-token-2 1) ; over "struct ".
|
||||
(cond
|
||||
((looking-at c-symbol-key) ; "struct foo { ..."
|
||||
(buffer-substring-no-properties key-pos (match-end 0)))
|
||||
((eq (char-after) ?{) ; "struct { ... } foo"
|
||||
(when (c-go-list-forward)
|
||||
(c-forward-syntactic-ws)
|
||||
(when (looking-at c-symbol-key) ; a bit bogus - there might
|
||||
; be several identifiers.
|
||||
(match-string-no-properties 0)))))))
|
||||
|
||||
((looking-at "DEFUN\\s-*(") ;"DEFUN\\_>") think of XEmacs!
|
||||
;; DEFUN ("file-name-directory", Ffile_name_directory, Sfile_name_directory, ...) ==> Ffile_name_directory
|
||||
|
|
@ -1900,7 +1906,8 @@ with a brace block."
|
|||
(c-backward-syntactic-ws))
|
||||
(setq name-end (point))
|
||||
(c-back-over-compound-identifier)
|
||||
(buffer-substring-no-properties (point) name-end)))))))))
|
||||
(and (looking-at c-symbol-start)
|
||||
(buffer-substring-no-properties (point) name-end))))))))))
|
||||
|
||||
(defun c-declaration-limits (near)
|
||||
;; Return a cons of the beginning and end positions of the current
|
||||
|
|
|
|||
|
|
@ -417,6 +417,17 @@ to it is returned. This function does not modify the point or the mark."
|
|||
;; Emacs.
|
||||
`(setq mark-active ,activate)))
|
||||
|
||||
(defmacro c-set-keymap-parent (map parent)
|
||||
(cond
|
||||
;; XEmacs
|
||||
((cc-bytecomp-fboundp 'set-keymap-parents)
|
||||
`(set-keymap-parents ,map ,parent))
|
||||
;; Emacs
|
||||
((cc-bytecomp-fboundp 'set-keymap-parent)
|
||||
`(set-keymap-parent ,map ,parent))
|
||||
;; incompatible
|
||||
(t (error "CC Mode is incompatible with this version of Emacs"))))
|
||||
|
||||
(defmacro c-delete-and-extract-region (start end)
|
||||
"Delete the text between START and END and return it."
|
||||
(if (cc-bytecomp-fboundp 'delete-and-extract-region)
|
||||
|
|
@ -1266,6 +1277,7 @@ with value CHAR in the region [FROM to)."
|
|||
(def-edebug-spec cc-eval-when-compile (&rest def-form))
|
||||
(def-edebug-spec c-point t)
|
||||
(def-edebug-spec c-set-region-active t)
|
||||
(def-edebug-spec c-set-keymap-parent t)
|
||||
(def-edebug-spec c-safe t)
|
||||
(def-edebug-spec c-save-buffer-state let*)
|
||||
(def-edebug-spec c-tentative-buffer-changes t)
|
||||
|
|
|
|||
|
|
@ -6089,7 +6089,8 @@ comment at the start of cc-engine.el for more info."
|
|||
|
||||
(defsubst c-clear-found-types ()
|
||||
;; Clears `c-found-types'.
|
||||
(setq c-found-types (make-vector 53 0)))
|
||||
(setq c-found-types
|
||||
(make-hash-table :test #'equal :weakness nil)))
|
||||
|
||||
(defun c-add-type (from to)
|
||||
;; Add the given region as a type in `c-found-types'. If the region
|
||||
|
|
@ -6103,29 +6104,27 @@ comment at the start of cc-engine.el for more info."
|
|||
;;
|
||||
;; This function might do hidden buffer changes.
|
||||
(let ((type (c-syntactic-content from to c-recognize-<>-arglists)))
|
||||
(unless (intern-soft type c-found-types)
|
||||
(unintern (substring type 0 -1) c-found-types)
|
||||
(intern type c-found-types))))
|
||||
(unless (gethash type c-found-types)
|
||||
(remhash (substring type 0 -1) c-found-types)
|
||||
(puthash type t c-found-types))))
|
||||
|
||||
(defun c-unfind-type (name)
|
||||
;; Remove the "NAME" from c-found-types, if present.
|
||||
(unintern name c-found-types))
|
||||
(remhash name c-found-types))
|
||||
|
||||
(defsubst c-check-type (from to)
|
||||
;; Return non-nil if the given region contains a type in
|
||||
;; `c-found-types'.
|
||||
;;
|
||||
;; This function might do hidden buffer changes.
|
||||
(intern-soft (c-syntactic-content from to c-recognize-<>-arglists)
|
||||
c-found-types))
|
||||
(gethash (c-syntactic-content from to c-recognize-<>-arglists) c-found-types))
|
||||
|
||||
(defun c-list-found-types ()
|
||||
;; Return all the types in `c-found-types' as a sorted list of
|
||||
;; strings.
|
||||
(let (type-list)
|
||||
(mapatoms (lambda (type)
|
||||
(setq type-list (cons (symbol-name type)
|
||||
type-list)))
|
||||
(maphash (lambda (type _)
|
||||
(setq type-list (cons type type-list)))
|
||||
c-found-types)
|
||||
(sort type-list 'string-lessp)))
|
||||
|
||||
|
|
@ -7059,6 +7058,7 @@ comment at the start of cc-engine.el for more info."
|
|||
;; This function might do hidden buffer changes.
|
||||
|
||||
(let ((start (point))
|
||||
(old-found-types (copy-hash-table c-found-types))
|
||||
;; If `c-record-type-identifiers' is set then activate
|
||||
;; recording of any found types that constitute an argument in
|
||||
;; the arglist.
|
||||
|
|
@ -7074,6 +7074,7 @@ comment at the start of cc-engine.el for more info."
|
|||
(nconc c-record-found-types c-record-type-identifiers)))
|
||||
t)
|
||||
|
||||
(setq c-found-types old-found-types)
|
||||
(goto-char start)
|
||||
nil)))
|
||||
|
||||
|
|
|
|||
|
|
@ -225,18 +225,7 @@ control). See \"cc-mode.el\" for more info."
|
|||
|
||||
(defun c-make-inherited-keymap ()
|
||||
(let ((map (make-sparse-keymap)))
|
||||
;; Necessary to use `cc-bytecomp-fboundp' below since this
|
||||
;; function is called from top-level forms that are evaluated
|
||||
;; while cc-bytecomp is active when one does M-x eval-buffer.
|
||||
(cond
|
||||
;; Emacs
|
||||
((cc-bytecomp-fboundp 'set-keymap-parent)
|
||||
(set-keymap-parent map c-mode-base-map))
|
||||
;; XEmacs
|
||||
((fboundp 'set-keymap-parents)
|
||||
(set-keymap-parents map c-mode-base-map))
|
||||
;; incompatible
|
||||
(t (error "CC Mode is incompatible with this version of Emacs")))
|
||||
(c-set-keymap-parent map c-mode-base-map)
|
||||
map))
|
||||
|
||||
(defun c-define-abbrev-table (name defs &optional doc)
|
||||
|
|
@ -276,6 +265,8 @@ control). See \"cc-mode.el\" for more info."
|
|||
nil
|
||||
|
||||
(setq c-mode-base-map (make-sparse-keymap))
|
||||
(when (boundp 'prog-mode-map)
|
||||
(c-set-keymap-parent c-mode-base-map prog-mode-map))
|
||||
|
||||
;; Separate M-BS from C-M-h. The former should remain
|
||||
;; backward-kill-word.
|
||||
|
|
@ -446,27 +437,36 @@ preferably use the `c-mode-menu' language constant directly."
|
|||
t))))
|
||||
|
||||
(defun c-unfind-coalesced-tokens (beg end)
|
||||
;; unless the non-empty region (beg end) is entirely WS and there's at
|
||||
;; least one character of WS just before or after this region, remove
|
||||
;; the tokens which touch the region from `c-found-types' should they
|
||||
;; be present.
|
||||
(or (c-partial-ws-p beg end)
|
||||
(save-excursion
|
||||
(progn
|
||||
(goto-char beg)
|
||||
(or (eq beg (point-min))
|
||||
(c-skip-ws-backward (1- beg))
|
||||
(/= (point) beg)
|
||||
(= (c-backward-token-2) 1)
|
||||
(c-unfind-type (buffer-substring-no-properties
|
||||
(point) beg)))
|
||||
(goto-char end)
|
||||
(or (eq end (point-max))
|
||||
(c-skip-ws-forward (1+ end))
|
||||
(/= (point) end)
|
||||
(progn (forward-char) (c-end-of-current-token) nil)
|
||||
(c-unfind-type (buffer-substring-no-properties
|
||||
end (point))))))))
|
||||
;; If removing the region (beg end) would coalesce an identifier ending at
|
||||
;; beg with an identifier (fragment) beginning at end, or an identifier
|
||||
;; fragment ending at beg with an identifier beginning at end, remove the
|
||||
;; pertinent identifier(s) from `c-found-types'.
|
||||
(save-excursion
|
||||
(when (< beg end)
|
||||
(goto-char beg)
|
||||
(when
|
||||
(and (not (bobp))
|
||||
(progn (c-backward-syntactic-ws) (eq (point) beg))
|
||||
(/= (skip-chars-backward c-symbol-chars (1- (point))) 0)
|
||||
(progn (goto-char beg) (c-forward-syntactic-ws) (<= (point) end))
|
||||
(> (point) beg)
|
||||
(goto-char end)
|
||||
(looking-at c-symbol-char-key))
|
||||
(goto-char beg)
|
||||
(c-simple-skip-symbol-backward)
|
||||
(c-unfind-type (buffer-substring-no-properties (point) beg)))
|
||||
|
||||
(goto-char end)
|
||||
(when
|
||||
(and (not (eobp))
|
||||
(progn (c-forward-syntactic-ws) (eq (point) end))
|
||||
(looking-at c-symbol-char-key)
|
||||
(progn (c-backward-syntactic-ws) (>= (point) beg))
|
||||
(< (point) end)
|
||||
(/= (skip-chars-backward c-symbol-chars (1- (point))) 0))
|
||||
(goto-char (1+ end))
|
||||
(c-end-of-current-token)
|
||||
(c-unfind-type (buffer-substring-no-properties end (point)))))))
|
||||
|
||||
;; c-maybe-stale-found-type records a place near the region being
|
||||
;; changed where an element of `found-types' might become stale. It
|
||||
|
|
|
|||
|
|
@ -3734,7 +3734,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
|
|||
"\\(\\`\n?\\|^\n\\)=" ; POD
|
||||
"\\|"
|
||||
;; One extra () before this:
|
||||
"<<" ; HERE-DOC
|
||||
"<<~?" ; HERE-DOC
|
||||
"\\(" ; 1 + 1
|
||||
;; First variant "BLAH" or just ``.
|
||||
"[ \t]*" ; Yes, whitespace is allowed!
|
||||
|
|
@ -4000,7 +4000,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
|
|||
(setq b (point))
|
||||
;; We do not search to max, since we may be called from
|
||||
;; some hook of fontification, and max is random
|
||||
(or (and (re-search-forward (concat "^" qtag "$")
|
||||
(or (and (re-search-forward (concat "^[ \t]*" qtag "$")
|
||||
stop-point 'toend)
|
||||
;;;(eq (following-char) ?\n) ; XXXX WHY???
|
||||
)
|
||||
|
|
|
|||
|
|
@ -83,13 +83,21 @@ When this is `function', only ask when called non-interactively."
|
|||
:type 'regexp
|
||||
:group 'executable)
|
||||
|
||||
|
||||
(defcustom executable-prefix "#!"
|
||||
"Interpreter magic number prefix inserted when there was no magic number."
|
||||
:version "24.3" ; "#! " -> "#!"
|
||||
"Interpreter magic number prefix inserted when there was no magic number.
|
||||
Use of `executable-prefix-env' is preferable to this option."
|
||||
:version "26.1" ; deprecated
|
||||
:type 'string
|
||||
:group 'executable)
|
||||
|
||||
(defcustom executable-prefix-env nil
|
||||
"If non-nil, use \"/usr/bin/env\" in interpreter magic number.
|
||||
If this variable is non-nil, the interpreter magic number inserted
|
||||
by `executable-set-magic' will be \"#!/usr/bin/env INTERPRETER\",
|
||||
otherwise it will be \"#!/path/to/INTERPRETER\"."
|
||||
:version "26.1"
|
||||
:type 'boolean
|
||||
:group 'executable)
|
||||
|
||||
(defcustom executable-chmod 73
|
||||
"After saving, if the file is not executable, set this mode.
|
||||
|
|
@ -199,7 +207,7 @@ command to find the next error. The buffer is also in `comint-mode' and
|
|||
(defun executable-set-magic (interpreter &optional argument
|
||||
no-query-flag insert-flag)
|
||||
"Set this buffer's interpreter to INTERPRETER with optional ARGUMENT.
|
||||
The variables `executable-magicless-file-regexp', `executable-prefix',
|
||||
The variables `executable-magicless-file-regexp', `executable-prefix-env',
|
||||
`executable-insert', `executable-query' and `executable-chmod' control
|
||||
when and how magic numbers are inserted or replaced and scripts made
|
||||
executable."
|
||||
|
|
@ -220,6 +228,14 @@ executable."
|
|||
(and argument (string< "" argument) " ")
|
||||
argument))
|
||||
|
||||
;; For backward compatibilty, allow `executable-prefix-env' to be
|
||||
;; overriden by custom `executable-prefix'.
|
||||
(if (string-match "#!\\([ \t]*/usr/bin/env[ \t]*\\)?$" executable-prefix)
|
||||
(if executable-prefix-env
|
||||
(setq argument (concat "/usr/bin/env "
|
||||
(file-name-nondirectory argument))))
|
||||
(setq argument (concat (substring executable-prefix 2) argument)))
|
||||
|
||||
(or buffer-read-only
|
||||
(if buffer-file-name
|
||||
(string-match executable-magicless-file-regexp
|
||||
|
|
@ -241,15 +257,13 @@ executable."
|
|||
;; Make buffer visible before question.
|
||||
(switch-to-buffer (current-buffer))
|
||||
(y-or-n-p (format-message
|
||||
"Replace magic number by `%s%s'? "
|
||||
executable-prefix argument))))
|
||||
"Replace magic number by `#!%s'? "
|
||||
argument))))
|
||||
(progn
|
||||
(replace-match argument t t nil 1)
|
||||
(message "Magic number changed to `%s'"
|
||||
(concat executable-prefix argument)))))
|
||||
(insert executable-prefix argument ?\n)
|
||||
(message "Magic number changed to `%s'"
|
||||
(concat executable-prefix argument)))))
|
||||
(message "Magic number changed to `#!%s'" argument))))
|
||||
(insert "#!" argument ?\n)
|
||||
(message "Magic number changed to `#!%s'" argument))))
|
||||
interpreter)
|
||||
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue