Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs

This commit is contained in:
Michael R. Mauger 2017-07-24 22:15:04 -04:00
commit df1a71272e
202 changed files with 6981 additions and 1697 deletions

2
.gitignore vendored
View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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/.

View file

@ -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.
#

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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}%

View file

@ -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.

View file

@ -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
View file

@ -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.

View file

@ -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)

View file

@ -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"))))

View file

@ -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"))))

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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))))

View file

@ -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))))))

View file

@ -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"))))

View file

@ -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

View file

@ -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
View 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
}

View file

@ -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;

View file

@ -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.

View file

@ -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' \

View file

@ -99,6 +99,8 @@
int _file; \
unsigned int _flag; \
} *) fp)
# elif defined __VMS /* OpenVMS */
# define fp_ ((struct _iobuf *) fp)
# else
# define fp_ fp
# endif

View file

@ -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@

View file

@ -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) \

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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))

View 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

View file

@ -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? Its 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)

View file

@ -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)

View file

@ -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

View file

@ -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)))

View file

@ -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.

View file

@ -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)

View file

@ -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 "-------")

View file

@ -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)

View file

@ -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.

View file

@ -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))

View file

@ -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

View file

@ -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

View file

@ -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'.

View file

@ -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

View file

@ -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)

View file

@ -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))

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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))

View file

@ -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" ) ;; LATIN SMALL LIGATURE 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

View file

@ -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.

View file

@ -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).")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View file

@ -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))

View file

@ -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]

View file

@ -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

View file

@ -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))

View file

@ -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

View file

@ -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.

View file

@ -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)))

View file

@ -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

View file

@ -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)

View file

@ -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)))

View file

@ -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

View file

@ -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???
)

View file

@ -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