mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-22 07:09:54 +00:00
Merge from origin/emacs-25
d4b93e1
Minor fixes in global-auto-composition-mode02b037b
Allow arithmetic operators inside C++ template constructs.44b16f6
Avoid crashes in semi-malformed 'condition-case'652e5b4
Allow arithmetic operators inside C++ template constructs.d9ea795
Fix regression with 'recent-keys' and keyboard macros903603f
Fix wording in a doc-view.el commentcf79616
; Spelling fixesf8bf1b3
CONTRIBUTE cleanups and updatesf3aaca3
Port USE_STACK_LISP_OBJECTS fix to Clang1834ac7
Port to x86 GCC 4.3.1 and earlier8482949
Fix point movement under 'scroll-conservatively'c1313b5
Replace colon in file name (not legal on Windows)f7af26c
Fix a typo in edt.texi8badf95
Make 'mmap_realloc' on MS-Windows more reliable856cd94
Grep alias `all' shall not match parent directory
This commit is contained in:
commit
220613e089
213
CONTRIBUTE
213
CONTRIBUTE
@ -1,48 +1,51 @@
|
||||
This file contains information on Emacs developer processes.
|
||||
* How developers contribute to GNU Emacs
|
||||
|
||||
For information on contributing to Emacs as a non-developer, see
|
||||
(info "(emacs)Contributing") or
|
||||
Here is how software developers can contribute to Emacs. (Non-developers: see
|
||||
http://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html
|
||||
or run the shell command 'info "(emacs)Contributing"'.)
|
||||
|
||||
* Information for Emacs Developers.
|
||||
** The Emacs repository
|
||||
|
||||
An "Emacs Developer" is someone who contributes a lot of code or
|
||||
documentation to the Emacs repository. Generally, they have write
|
||||
access to the Emacs git repository on Savannah
|
||||
https://savannah.gnu.org/git/?group=emacs.
|
||||
Emacs development uses Git on Savannah for its main repository.
|
||||
Briefly, the following shell commands build and run Emacs from scratch:
|
||||
|
||||
** Write access to the Emacs repository.
|
||||
git config --global user.name 'Your Name'
|
||||
git config --global user.email 'your.name@example.com'
|
||||
git config --global transfer.fsckObjects true
|
||||
git clone git://git.sv.gnu.org/emacs.git
|
||||
cd emacs
|
||||
./autogen.sh
|
||||
./configure
|
||||
make
|
||||
src/emacs
|
||||
|
||||
Once you become a frequent contributor to Emacs, we can consider
|
||||
giving you write access to the version-control repository. Request
|
||||
access on the emacs-devel@gnu.org mailing list. Also, be sure to
|
||||
subscribe to the emacs-devel@gnu.org mailing list and include the
|
||||
"emacs-announce" topic, so that you get the announcements about
|
||||
feature freeze and other important events.
|
||||
For more details, see
|
||||
http://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs and
|
||||
http://www.emacswiki.org/emacs/GitForEmacsDevs or see the file
|
||||
admin/notes/git-workflow.
|
||||
|
||||
** Using the Emacs repository
|
||||
** Getting involved with development
|
||||
|
||||
Emacs uses Git for the source code repository.
|
||||
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
|
||||
http://lists.gnu.org/mailman/listinfo/emacs-devel for mailing list
|
||||
instructions and archives. You can develop and commit changes in your
|
||||
own copy of the repository, and discuss proposed changes on the
|
||||
mailing list. Frequent contributors to Emacs can request write access
|
||||
there.
|
||||
|
||||
See http://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs to get
|
||||
started, and http://www.emacswiki.org/emacs/GitForEmacsDevs for more
|
||||
advanced information.
|
||||
** Committing changes by others
|
||||
|
||||
Alternately, see admin/notes/git-workflow.
|
||||
|
||||
If committing changes written by someone else, make the commit in
|
||||
their name, not yours. Git distinguishes between the author
|
||||
and the committer; use the --author option on the commit command to
|
||||
specify the actual author; the committer defaults to you.
|
||||
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.
|
||||
|
||||
** Commit messages
|
||||
|
||||
Emacs development no longer stores descriptions of new changes in
|
||||
ChangeLog files. Instead, a single ChangeLog file is generated from
|
||||
the commit messages when a release is prepared. So changes you commit
|
||||
should not touch any of the ChangeLog files in the repository, but
|
||||
instead should contain the log entries in the commit message. Here is
|
||||
an example of a commit message (indented):
|
||||
Ordinarily, a change you commit should contain a log entry in its
|
||||
commit message and should not touch the repository's ChangeLog files.
|
||||
Here is an example commit message (indented):
|
||||
|
||||
Deactivate shifted region
|
||||
|
||||
@ -53,12 +56,13 @@ an example of a commit message (indented):
|
||||
* src/frame.c (Fhandle_switch_frame, Fselected_frame):
|
||||
Deactivate the mark.
|
||||
|
||||
Below are some rules and recommendations for formatting commit
|
||||
messages:
|
||||
Occasionally, commit messages are collected and prepended to a
|
||||
ChangeLog file, where they can be corrected. It saves time to get
|
||||
them right the first time, so here are guidelines for formatting them:
|
||||
|
||||
- Start with a single unindented summary line explaining the change;
|
||||
do not end this line with a period. If that line starts with a
|
||||
semi-colon and a space "; ", the log message will be ignored when
|
||||
semicolon and a space "; ", the commit message will be ignored when
|
||||
generating the ChangeLog file. Use this for minor commits that do
|
||||
not need separate ChangeLog entries, such as changes in etc/NEWS.
|
||||
|
||||
@ -104,19 +108,19 @@ messages:
|
||||
the rationale for a change; that can be done in the commit message
|
||||
between the summary line and the file entries.
|
||||
|
||||
- Emacs generally follows the GNU coding standards when it comes to
|
||||
ChangeLogs:
|
||||
http://www.gnu.org/prep/standards/html_node/Change-Logs.html or
|
||||
"(info (standards)Change Logs"). One exception is that we still
|
||||
sometimes quote `like-this' (as the standards used to recommend)
|
||||
rather than 'like-this' (as they do now), because `...' is so widely
|
||||
used elsewhere in Emacs.
|
||||
- Emacs generally follows the GNU coding standards for ChangeLogs: see
|
||||
http://www.gnu.org/prep/standards/html_node/Change-Logs.html
|
||||
or run 'info "(standards)Change Logs"'. One exception is that
|
||||
commits still sometimes quote `like-this' (as the standards used to
|
||||
recommend) rather than 'like-this' or ‘like this’ (as they do now),
|
||||
as `...' is so widely used elsewhere in Emacs.
|
||||
|
||||
- Some of the rules in the GNU coding standards section 5.2
|
||||
"Commenting Your Work" also apply to ChangeLog entries: they must be
|
||||
in English, and be complete sentences starting with a capital and
|
||||
ending with a period (except the summary line should not end in a
|
||||
period).
|
||||
- Some commenting rules in the GNU coding standards also apply
|
||||
to ChangeLog entries: they must be in English, and be complete
|
||||
sentences starting with a capital and ending with a period (except
|
||||
the summary line should not end in a period). See
|
||||
http://www.gnu.org/prep/standards/html_node/Comments.html
|
||||
or run 'info "(standards)Comments"'.
|
||||
|
||||
They are preserved indefinitely, and have a reasonable chance of
|
||||
being read in the future, so it's better that they have good
|
||||
@ -145,15 +149,15 @@ messages:
|
||||
will suffice.
|
||||
|
||||
- There is no need to mention files such as NEWS and MAINTAINERS, or
|
||||
to indicate regeneration of files such as 'configure', in the
|
||||
to indicate regeneration of files such as 'lib/gnulib.mk', in the
|
||||
ChangeLog entry. "There is no need" means you don't have to, but
|
||||
you can if you want to.
|
||||
|
||||
** Generating ChangeLog entries
|
||||
|
||||
- You can use various Emacs functions to ease the process of writing
|
||||
ChangeLog entries; see (info "(emacs)Change Log Commands") or
|
||||
http://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html.
|
||||
- You can use Emacs functions to write ChangeLog entries; see
|
||||
http://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html
|
||||
or run 'info "(emacs)Change Log Commands"'.
|
||||
|
||||
- If you use Emacs VC, one way to format ChangeLog entries is to create
|
||||
a top-level ChangeLog file manually, and update it with 'C-x 4 a' as
|
||||
@ -171,32 +175,33 @@ messages:
|
||||
|
||||
** Branches
|
||||
|
||||
Development normally takes places on the trunk.
|
||||
Sometimes specialized features are developed on separate branches
|
||||
before possibly being merged to the trunk.
|
||||
|
||||
Development is discussed on the emacs-devel mailing list.
|
||||
|
||||
The trunk branch is named "master" in git; release branches are named
|
||||
"emacs-nn" where "nn" is the major version.
|
||||
Future development normally takes place on the master branch.
|
||||
Sometimes specialized features are developed on other branches before
|
||||
possibly being merged to the master. Release branches are named
|
||||
"emacs-NN" where NN is the major version number, and are mainly
|
||||
intended for more-conservative changes such as bug fixes. Typically,
|
||||
collective development is active on the master branch and possibly on
|
||||
the current release branch. Periodically, the current release branch
|
||||
is merged into the master, using the gitmerge function described in
|
||||
admin/notes-git-workflow.
|
||||
|
||||
If you are fixing a bug that exists in the current release, be sure to
|
||||
commit it to the release branch; it will be merged to the master
|
||||
branch later.
|
||||
branch later by the gitmerge function.
|
||||
|
||||
However, if you know that the change will be difficult to merge to
|
||||
master (eg because the code on master has changed a lot), you can
|
||||
However, if you know that the change will be difficult to merge to the
|
||||
master (e.g., because the code on master has changed a lot), you can
|
||||
apply the change to both master and branch yourself. It could also
|
||||
happen that a change is cherry-picked from master to the release
|
||||
branch, and so doesn't need to be merged back. In these cases,
|
||||
indicate in the release branch commit log that there is no need to
|
||||
merge the commit to master; start the commit message with "Backport:".
|
||||
gitmerge.el will then exclude that commit from the merge to trunk.
|
||||
say in the release branch commit message that there is no need to merge
|
||||
the commit to master, by starting the commit message with "Backport:".
|
||||
The gitmerge function excludes these commits from the merge to the master.
|
||||
|
||||
Some changes should not be merged to master at all, for whatever
|
||||
reasons. These should be marked by including something like "Do not
|
||||
merge to master" or anything that matches gitmerge-skip-regexp (see
|
||||
gitmerge.el) in the log message.
|
||||
admin/gitmerge.el) in the commit message.
|
||||
|
||||
** Other process information
|
||||
|
||||
@ -206,10 +211,11 @@ 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 tracker at http://debbugs.gnu.org .
|
||||
to the http://debbugs.gnu.org tracker.
|
||||
|
||||
You can subscribe to the mailing lists, or see the list archives,
|
||||
by following links from http://savannah.gnu.org/mail/?group=emacs .
|
||||
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
|
||||
@ -219,11 +225,10 @@ such patch without additional remarks, you can use a command like
|
||||
|
||||
** Issue tracker (a.k.a. "bug tracker")
|
||||
|
||||
The Emacs issue tracker is at http://debbugs.gnu.org/. The form
|
||||
presented by that page allows to 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.
|
||||
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.
|
||||
@ -239,7 +244,7 @@ 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.
|
||||
|
||||
** Document your changes.
|
||||
** Documenting your changes
|
||||
|
||||
Any change that matters to end-users should have an entry in etc/NEWS.
|
||||
|
||||
@ -250,21 +255,21 @@ 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.
|
||||
|
||||
Please see (info "(elisp)Documentation Tips") or
|
||||
https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html
|
||||
for more specific tips on Emacs's doc style. Use 'checkdoc' to check
|
||||
for documentation errors before submitting a patch.
|
||||
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.
|
||||
|
||||
** Test your changes.
|
||||
** 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 (info
|
||||
"(ert)") or https://www.gnu.org/software/emacs/manual/html_node/ert/
|
||||
for more information on writing and running tests.
|
||||
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)".
|
||||
@ -293,27 +298,26 @@ If your test file contains the tests "test-foo", "test2-foo" and
|
||||
"test-foo-remote", and you want to run only the former two tests, you
|
||||
could use a regexp: "make <filename> SELECTOR='\"foo$$\"'" .
|
||||
|
||||
** Understanding Emacs Internals.
|
||||
** Understanding Emacs internals
|
||||
|
||||
The best way to understand Emacs Internals is to read the code,
|
||||
but the nodes "Tips" and "GNU Emacs Internals" in the Appendix
|
||||
of the Emacs Lisp Reference Manual may also help. Some source files,
|
||||
such as xdisp.c, have large commentaries describing the design and
|
||||
implementation in more detail.
|
||||
The best way to understand Emacs internals is to read the code. Some
|
||||
source files, such as xdisp.c, have extensive comments describing the
|
||||
design and implementation. The following resources may also help:
|
||||
|
||||
http://www.gnu.org/software/emacs/manual/html_node/elisp/Tips.html
|
||||
http://www.gnu.org/software/emacs/manual/html_node/elisp/GNU-Emacs-Internals.html
|
||||
|
||||
or run 'info "(elisp)Tips"' or 'info "(elisp)GNU Emacs Internals"'.
|
||||
|
||||
The file etc/DEBUG describes how to debug Emacs bugs.
|
||||
|
||||
*** Non-ASCII characters in Emacs files
|
||||
|
||||
If you introduce non-ASCII characters into Emacs source files, it is a
|
||||
good idea to add a 'coding' cookie to the file to state its encoding.
|
||||
Please use the UTF-8 encoding unless it cannot do the job for some
|
||||
good reason. As of Emacs 24.4, it is no longer necessary to have
|
||||
explicit 'coding' cookies in *.el files if they are encoded in UTF-8,
|
||||
but other files need them even if encoded in UTF-8. However, if
|
||||
an *.el file is intended for use with older Emacs versions (e.g. if
|
||||
it's also distributed via ELPA), having an explicit encoding
|
||||
specification is still a good idea.
|
||||
If you introduce non-ASCII characters into Emacs source files, use the
|
||||
UTF-8 encoding unless it cannot do the job for some good reason.
|
||||
Although it is generally a good idea to add 'coding:' cookies to
|
||||
non-ASCII source files, cookies are not needed in UTF-8-encoded *.el
|
||||
files intended for use only with Emacs version 24.5 and later.
|
||||
|
||||
*** Useful files in the admin/ directory
|
||||
|
||||
@ -335,15 +339,15 @@ changed heuristic to deduce that a file was renamed. So if you are
|
||||
planning to make extensive changes to a file after renaming it (or
|
||||
moving it to another directory), you should:
|
||||
|
||||
- create a feature branch
|
||||
- Create a feature branch.
|
||||
|
||||
- commit the rename without any changes
|
||||
- Commit the rename without any changes.
|
||||
|
||||
- make other changes
|
||||
- Make other changes.
|
||||
|
||||
- merge the feature branch to trunk, _not_ squashing the commits into
|
||||
one. The commit message on this merge should summarize the renames
|
||||
and all the changes.
|
||||
- Merge the feature branch to the master branch, instead of squashing
|
||||
the commits into one. The commit message on this merge should
|
||||
summarize the renames and all the changes.
|
||||
|
||||
|
||||
|
||||
@ -365,4 +369,5 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
Local variables:
|
||||
mode: outline
|
||||
paragraph-separate: "[ ]*$"
|
||||
coding: utf-8
|
||||
end:
|
||||
|
@ -13864,7 +13864,7 @@
|
||||
(unexec): Don't search for bss style sections by name. Instead,
|
||||
use the last PT_LOAD header address range covered by p_memsz
|
||||
but not p_filesz and match any SHT_NOBITS section in that
|
||||
address range. Simplify initialisation of section header vars.
|
||||
address range. Simplify initialization of section header vars.
|
||||
Don't assume that section headers are above bss segment. Move
|
||||
copying of bss area out of section loop. Align .data2 section
|
||||
to 1, since it now covers the entire bss area. For SHT_NOBITS
|
||||
@ -13923,7 +13923,7 @@
|
||||
Separate out some of the more mechanical changes so following patches
|
||||
are smaller.
|
||||
|
||||
* src/unexelf.c (unexec): Rearrange initialisation of program
|
||||
* src/unexelf.c (unexec): Rearrange initialization of program
|
||||
header vars. Use pointer vars in loops rather than indexing
|
||||
section header array via macros. Simplify _OBJC_ sym code
|
||||
and reloc handling code.
|
||||
|
@ -19,17 +19,15 @@ Initial setup
|
||||
=============
|
||||
|
||||
Then we want to clone the repository. We normally want to have both
|
||||
the current trunk and the emacs-24 branch.
|
||||
the current master and the emacs-25 branch.
|
||||
|
||||
mkdir ~/emacs
|
||||
cd ~/emacs
|
||||
git clone <membername>@git.sv.gnu.org:/srv/git/emacs.git
|
||||
mv emacs trunk
|
||||
(cd trunk; git config push.default current)
|
||||
./trunk/admin/git-new-workdir trunk emacs-24
|
||||
cd emacs-24
|
||||
git checkout emacs-24
|
||||
git config push.default current
|
||||
git clone <membername>@git.sv.gnu.org:/srv/git/emacs.git master
|
||||
(cd master; git config push.default current)
|
||||
./master/admin/git-new-workdir master emacs-25
|
||||
cd emacs-25
|
||||
git checkout emacs-25
|
||||
|
||||
You now have both branches conveniently accessible, and you can do
|
||||
"git pull" in them once in a while to keep updated.
|
||||
@ -59,13 +57,13 @@ you commit your change locally and then send a patch file as a bug report
|
||||
as described in ../../CONTRIBUTE.
|
||||
|
||||
|
||||
Backporting to emacs-24
|
||||
Backporting to emacs-25
|
||||
=======================
|
||||
|
||||
If you have applied a fix to the trunk, but then decide that it should
|
||||
be applied to the emacs-24 branch, too, then
|
||||
If you have applied a fix to the master, but then decide that it should
|
||||
be applied to the emacs-25 branch, too, then
|
||||
|
||||
cd ~/emacs/trunk
|
||||
cd ~/emacs/master
|
||||
git log
|
||||
|
||||
and find the commit you're looking for. Then find the commit ID,
|
||||
@ -73,7 +71,7 @@ which will look like
|
||||
|
||||
commit 958b768a6534ae6e77a8547a56fc31b46b63710b
|
||||
|
||||
cd ~/emacs/emacs-24
|
||||
cd ~/emacs/emacs-25
|
||||
git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b
|
||||
|
||||
and add "Backport:" to the commit string. Then
|
||||
@ -81,17 +79,17 @@ and add "Backport:" to the commit string. Then
|
||||
git push
|
||||
|
||||
|
||||
Merging emacs-24 to trunk/master
|
||||
================================
|
||||
Merging emacs-25 to the master
|
||||
==============================
|
||||
|
||||
It is recommended to use the file gitmerge.el in the admin directory
|
||||
for merging 'emacs-24' into 'master'. It will take care of many
|
||||
for merging 'emacs-25' into 'master'. It will take care of many
|
||||
things which would otherwise have to be done manually, like ignoring
|
||||
commits that should not land in master, fixing up ChangeLogs and
|
||||
automatically dealing with certain types of conflicts. If you really
|
||||
want to, you can do the merge manually, but then you're on your own.
|
||||
If you still choose to do that, make absolutely sure that you *always*
|
||||
use the 'merge' command to transport commits from 'emacs-24' to
|
||||
use the 'merge' command to transport commits from 'emacs-25' to
|
||||
'master'. *Never* use 'cherry-pick'! If you don't know why, then you
|
||||
shouldn't manually do the merge in the first place; just use
|
||||
gitmerge.el instead.
|
||||
@ -104,11 +102,11 @@ up-to-date by doing a pull. Then start Emacs with
|
||||
emacs -l admin/gitmerge.el -f gitmerge
|
||||
|
||||
You'll be asked for the branch to merge, which will default to
|
||||
'origin/emacs-24', which you should accept. Merging a local tracking
|
||||
'origin/emacs-25', which you should accept. Merging a local tracking
|
||||
branch is discouraged, since it might not be up-to-date, or worse,
|
||||
contain commits from you which are not yet pushed upstream.
|
||||
|
||||
You will now see the list of commits from 'emacs-24' which are not yet
|
||||
You will now see the list of commits from 'emacs-25' which are not yet
|
||||
merged to 'master'. You might also see commits that are already
|
||||
marked for "skipping", which means that they will be merged with a
|
||||
different merge strategy ('ours'), which will effectively ignore the
|
||||
|
@ -30,7 +30,7 @@ modify this GNU manual.''
|
||||
@titlepage
|
||||
@title EDT Emulation User's Manual
|
||||
@author Kevin Gallagher
|
||||
@author @email{kevin.gal@verizon.net}
|
||||
@author @email{kevin.gal@@verizon.net}
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
@insertcopying
|
||||
|
@ -7656,7 +7656,7 @@
|
||||
2007-11-07 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* emulation/tpu-mapper.el (tpu-map-key): Use unless rather than cond.
|
||||
Remove superfluous concats. Move final set-buffer to
|
||||
Remove superfluous concatenations. Move final set-buffer to
|
||||
non-emacs-specific code.
|
||||
|
||||
2007-11-07 Rob Riepel <riepel@networking.stanford.edu>
|
||||
|
@ -1758,7 +1758,7 @@
|
||||
|
||||
* net/shr.el (shr-insert): Make sure the space inserted has the
|
||||
right font (for width).
|
||||
(shr-fill-line): Preserve background colours when indenting/folding.
|
||||
(shr-fill-line): Preserve background colors when indenting/folding.
|
||||
(shr-ensure-paragraph): Don't insert a new paragraph as the first
|
||||
item in a <li>.
|
||||
|
||||
|
@ -838,6 +838,7 @@ omitted or nil.
|
||||
|
||||
For more information on Auto Composition mode, see
|
||||
`auto-composition-mode' ."
|
||||
:global t
|
||||
:variable (default-value 'auto-composition-mode))
|
||||
|
||||
(defalias 'toggle-auto-composition 'auto-composition-mode)
|
||||
|
@ -140,6 +140,7 @@
|
||||
(require 'dired)
|
||||
(require 'image-mode)
|
||||
(require 'jka-compr)
|
||||
(require 'subr-x)
|
||||
|
||||
;;;; Customization Options
|
||||
|
||||
@ -695,14 +696,19 @@ It's a subdirectory of `doc-view-cache-directory'."
|
||||
(setq doc-view--current-cache-dir
|
||||
(file-name-as-directory
|
||||
(expand-file-name
|
||||
(concat (subst-char-in-string ?% ?_ ;; bug#13679
|
||||
(file-name-nondirectory doc-view--buffer-file-name))
|
||||
"-"
|
||||
(let ((file doc-view--buffer-file-name))
|
||||
(with-temp-buffer
|
||||
(set-buffer-multibyte nil)
|
||||
(insert-file-contents-literally file)
|
||||
(md5 (current-buffer)))))
|
||||
(concat (thread-last
|
||||
(file-name-nondirectory doc-view--buffer-file-name)
|
||||
;; bug#13679
|
||||
(subst-char-in-string ?% ?_)
|
||||
;; arc-mode concatenates archive name and file name
|
||||
;; with colon, which isn't allowed on MS-Windows.
|
||||
(subst-char-in-string ?: ?_))
|
||||
"-"
|
||||
(let ((file doc-view--buffer-file-name))
|
||||
(with-temp-buffer
|
||||
(set-buffer-multibyte nil)
|
||||
(insert-file-contents-literally file)
|
||||
(md5 (current-buffer)))))
|
||||
doc-view-cache-directory)))))
|
||||
|
||||
;;;###autoload
|
||||
|
@ -68,6 +68,7 @@ replacing its case-insensitive matches with the literal string in LIGHTER."
|
||||
"toggle-\\|-mode\\'" ""
|
||||
(symbol-name mode))))
|
||||
" mode")))
|
||||
(setq name (replace-regexp-in-string "\\`Global-" "Global " name))
|
||||
(if (not (stringp lighter)) name
|
||||
;; Strip leading and trailing whitespace from LIGHTER.
|
||||
(setq lighter (replace-regexp-in-string "\\`\\s-+\\|\\s-+\\'" ""
|
||||
|
@ -1732,7 +1732,7 @@
|
||||
* eww.el (eww-convert-widgets): Put `help-echo' on input fields so that
|
||||
we can navigate to them.
|
||||
|
||||
* shr.el (shr-colorize-region): Put the colours over the entire region.
|
||||
* shr.el (shr-colorize-region): Put the colors over the entire region.
|
||||
(shr-inhibit-decoration): New variable.
|
||||
(shr-add-font): Use it to inhibit text property decorations while doing
|
||||
preliminary table renderings. This speeds up typical Wikipedia page
|
||||
@ -1824,7 +1824,7 @@
|
||||
* shr.el (shr-expand-url): Respect // URLs.
|
||||
|
||||
* eww.el (eww-tag-body): Override the shr body rendering so that we can
|
||||
put a background colour onto the entire buffer.
|
||||
put a background color onto the entire buffer.
|
||||
(eww-render): When being redirected, use the redirect URL as the new
|
||||
base URL.
|
||||
|
||||
@ -3514,7 +3514,7 @@
|
||||
|
||||
* mm-archive.el (mm-archive-decoders): Add support for tar.
|
||||
|
||||
* gnus.el (gnus-logo-color-alist): Change the colours for Ma Gnus.
|
||||
* gnus.el (gnus-logo-color-alist): Change the colors for Ma Gnus.
|
||||
|
||||
* nnmail.el (nnmail-extra-headers): Add Cc to the default.
|
||||
|
||||
|
@ -6056,7 +6056,10 @@ comment at the start of cc-engine.el for more info."
|
||||
;; Stop on ',', '|', '&', '+' and '-' to catch
|
||||
;; common binary operators that could be between
|
||||
;; two comparison expressions "a<b" and "c>d".
|
||||
"[<;{},|+&-]\\|[>)]"
|
||||
;; 2016-02-11: C++11 templates can now contain arithmetic
|
||||
;; expressions, so template detection in C++ is now less
|
||||
;; robust than it was.
|
||||
c-<>-notable-chars-re
|
||||
nil t t))
|
||||
|
||||
(cond
|
||||
@ -6064,7 +6067,9 @@ comment at the start of cc-engine.el for more info."
|
||||
;; Either an operator starting with '>' or the end of
|
||||
;; the angle bracket arglist.
|
||||
|
||||
(if (looking-at c->-op-without->-cont-regexp)
|
||||
(if (save-excursion
|
||||
(c-backward-token-2)
|
||||
(looking-at c-multichar->-op-not->>-regexp))
|
||||
(progn
|
||||
(goto-char (match-end 0))
|
||||
t) ; Continue the loop.
|
||||
@ -6134,6 +6139,11 @@ comment at the start of cc-engine.el for more info."
|
||||
)))
|
||||
t) ; carry on looping.
|
||||
|
||||
((and
|
||||
(eq (char-before) ?\()
|
||||
(c-go-up-list-forward)
|
||||
(eq (char-before) ?\))))
|
||||
|
||||
((and (not c-restricted-<>-arglists)
|
||||
(or (and (eq (char-before) ?&)
|
||||
(not (eq (char-after) ?&)))
|
||||
|
@ -228,6 +228,12 @@ the evaluated constant value at compile time."
|
||||
;; with the group symbol for each group and should return non-nil
|
||||
;; if that group is to be included.
|
||||
;;
|
||||
;; OP-FILTER selects the operators. It is either t to select all
|
||||
;; operators, a string to select all operators for which `string-match'
|
||||
;; matches the operator with the string, or a function which will be
|
||||
;; called with the operator and should return non-nil when the operator
|
||||
;; is to be selected.
|
||||
;;
|
||||
;; If XLATE is given, it's a function which is called for each
|
||||
;; matching operator and its return value is collected instead.
|
||||
;; If it returns a list, the elements are spliced directly into
|
||||
@ -1237,7 +1243,6 @@ operators."
|
||||
t
|
||||
"\\`<."
|
||||
(lambda (op) (substring op 1)))))
|
||||
|
||||
(c-lang-defvar c-<-op-cont-regexp (c-lang-const c-<-op-cont-regexp))
|
||||
|
||||
(c-lang-defconst c->-op-cont-tokens
|
||||
@ -1256,7 +1261,6 @@ operators."
|
||||
;; Regexp matching the second and subsequent characters of all
|
||||
;; multicharacter tokens that begin with ">".
|
||||
t (c-make-keywords-re nil (c-lang-const c->-op-cont-tokens)))
|
||||
|
||||
(c-lang-defvar c->-op-cont-regexp (c-lang-const c->-op-cont-regexp))
|
||||
|
||||
(c-lang-defconst c->-op-without->-cont-regexp
|
||||
@ -1271,10 +1275,19 @@ operators."
|
||||
"\\`>>"
|
||||
(lambda (op) (substring op 1)))
|
||||
:test 'string-equal)))
|
||||
|
||||
(c-lang-defvar c->-op-without->-cont-regexp
|
||||
(c-lang-const c->-op-without->-cont-regexp))
|
||||
|
||||
(c-lang-defconst c-multichar->-op-not->>-regexp
|
||||
;; Regexp matching multichar tokens containing ">", except ">>"
|
||||
t (c-make-keywords-re nil
|
||||
(delete ">>"
|
||||
(c-filter-ops (c-lang-const c-all-op-syntax-tokens)
|
||||
t
|
||||
"\\(.>\\|>.\\)"))))
|
||||
(c-lang-defvar c-multichar->-op-not->>-regexp
|
||||
(c-lang-const c-multichar->-op-not->>-regexp))
|
||||
|
||||
(c-lang-defconst c-stmt-delim-chars
|
||||
;; The characters that should be considered to bound statements. To
|
||||
;; optimize `c-crosses-statement-barrier-p' somewhat, it's assumed to
|
||||
@ -3079,6 +3092,20 @@ expression is considered to be a type."
|
||||
; generics is not yet coded in CC Mode.
|
||||
(c-lang-defvar c-recognize-<>-arglists (c-lang-const c-recognize-<>-arglists))
|
||||
|
||||
(c-lang-defconst c-<>-notable-chars-re
|
||||
"A regexp matching any single character notable inside a <...> construct.
|
||||
This must include \"<\" and \">\", and should include \",\", and
|
||||
any character which cannot be valid inside such a construct.
|
||||
This is used in `c-forward-<>-arglist-recur' to try to detect
|
||||
sequences of tokens which cannot be a template/generic construct.
|
||||
When \"(\" is present, that defun will attempt to parse a
|
||||
parenthesized expression inside the template. When \")\" is
|
||||
present it will treat an unbalanced closing paren as a sign of
|
||||
the invalidity of the putative template construct."
|
||||
t "[<;{},|+&->)]"
|
||||
c++ "[<;{},>()]")
|
||||
(c-lang-defvar c-<>-notable-chars-re (c-lang-const c-<>-notable-chars-re))
|
||||
|
||||
(c-lang-defconst c-enums-contain-decls
|
||||
"Non-nil means that an enum structure can contain declarations."
|
||||
t nil
|
||||
|
@ -189,7 +189,7 @@ Customize or call the function `grep-apply-setting'."
|
||||
:group 'grep)
|
||||
|
||||
(defcustom grep-files-aliases
|
||||
'(("all" . "* .*")
|
||||
'(("all" . "* .[!.]* ..?*") ;; Don't match `..'. See bug#22577
|
||||
("el" . "*.el")
|
||||
("ch" . "*.[ch]")
|
||||
("c" . "*.c")
|
||||
|
@ -1316,8 +1316,8 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NS
|
||||
/* Initialise the locale from user defaults. */
|
||||
ns_init_locale();
|
||||
/* Initialize the locale from user defaults. */
|
||||
ns_init_locale ();
|
||||
#endif
|
||||
|
||||
/* Initialize and GC-protect Vinitial_environment and
|
||||
|
@ -1245,7 +1245,7 @@ internal_lisp_condition_case (volatile Lisp_Object var, Lisp_Object bodyform,
|
||||
for (i = 0; i < clausenb; i++)
|
||||
{
|
||||
Lisp_Object clause = clauses[i];
|
||||
Lisp_Object condition = XCAR (clause);
|
||||
Lisp_Object condition = CONSP (clause) ? XCAR (clause) : Qnil;
|
||||
if (!CONSP (condition))
|
||||
condition = Fcons (condition, Qnil);
|
||||
struct handler *c = push_handler (condition, CONDITION_CASE);
|
||||
|
@ -3220,33 +3220,37 @@ record_char (Lisp_Object c)
|
||||
else
|
||||
store_kbd_macro_char (c);
|
||||
|
||||
if (!recorded)
|
||||
/* recent_keys should not include events from keyboard macros. */
|
||||
if (NILP (Vexecuting_kbd_macro))
|
||||
{
|
||||
total_keys += total_keys < NUM_RECENT_KEYS;
|
||||
ASET (recent_keys, recent_keys_index, c);
|
||||
if (++recent_keys_index >= NUM_RECENT_KEYS)
|
||||
recent_keys_index = 0;
|
||||
}
|
||||
else if (recorded < 0)
|
||||
{
|
||||
/* We need to remove one or two events from recent_keys.
|
||||
To do this, we simply put nil at those events and move the
|
||||
recent_keys_index backwards over those events. Usually,
|
||||
users will never see those nil events, as they will be
|
||||
overwritten by the command keys entered to see recent_keys
|
||||
(e.g. C-h l). */
|
||||
|
||||
while (recorded++ < 0 && total_keys > 0)
|
||||
if (!recorded)
|
||||
{
|
||||
if (total_keys < NUM_RECENT_KEYS)
|
||||
total_keys--;
|
||||
if (--recent_keys_index < 0)
|
||||
recent_keys_index = NUM_RECENT_KEYS - 1;
|
||||
ASET (recent_keys, recent_keys_index, Qnil);
|
||||
total_keys += total_keys < NUM_RECENT_KEYS;
|
||||
ASET (recent_keys, recent_keys_index, c);
|
||||
if (++recent_keys_index >= NUM_RECENT_KEYS)
|
||||
recent_keys_index = 0;
|
||||
}
|
||||
}
|
||||
else if (recorded < 0)
|
||||
{
|
||||
/* We need to remove one or two events from recent_keys.
|
||||
To do this, we simply put nil at those events and move the
|
||||
recent_keys_index backwards over those events. Usually,
|
||||
users will never see those nil events, as they will be
|
||||
overwritten by the command keys entered to see recent_keys
|
||||
(e.g. C-h l). */
|
||||
|
||||
num_nonmacro_input_events++;
|
||||
while (recorded++ < 0 && total_keys > 0)
|
||||
{
|
||||
if (total_keys < NUM_RECENT_KEYS)
|
||||
total_keys--;
|
||||
if (--recent_keys_index < 0)
|
||||
recent_keys_index = NUM_RECENT_KEYS - 1;
|
||||
ASET (recent_keys, recent_keys_index, Qnil);
|
||||
}
|
||||
}
|
||||
|
||||
num_nonmacro_input_events++;
|
||||
}
|
||||
|
||||
/* Write c to the dribble file. If c is a lispy event, write
|
||||
the event's symbol to the dribble file, in <brackets>. Bleaugh.
|
||||
|
@ -4526,6 +4526,12 @@ extern void *record_xmalloc (size_t) ATTRIBUTE_ALLOC_SIZE ((1));
|
||||
This feature is experimental and requires careful debugging.
|
||||
Build with CPPFLAGS='-DUSE_STACK_LISP_OBJECTS=0' to disable it. */
|
||||
|
||||
#if (!defined USE_STACK_LISP_OBJECTS \
|
||||
&& defined __GNUC__ && !defined __clang__ \
|
||||
&& !(4 < __GNUC__ + (3 < __GNUC_MINOR__ + (2 <= __GNUC_PATCHLEVEL__))))
|
||||
/* Work around GCC bugs 36584 and 35271, which were fixed in GCC 4.3.2. */
|
||||
# define USE_STACK_LISP_OBJECTS false
|
||||
#endif
|
||||
#ifndef USE_STACK_LISP_OBJECTS
|
||||
# define USE_STACK_LISP_OBJECTS true
|
||||
#endif
|
||||
|
@ -652,15 +652,19 @@ mmap_alloc (void **var, size_t nbytes)
|
||||
{
|
||||
/* Now, commit pages for NBYTES. */
|
||||
*var = VirtualAlloc (p, nbytes, MEM_COMMIT, PAGE_READWRITE);
|
||||
if (*var == NULL)
|
||||
p = *var;
|
||||
}
|
||||
|
||||
if (!p)
|
||||
{
|
||||
if (GetLastError () == ERROR_NOT_ENOUGH_MEMORY)
|
||||
DWORD e = GetLastError ();
|
||||
|
||||
if (e == ERROR_NOT_ENOUGH_MEMORY)
|
||||
errno = ENOMEM;
|
||||
else
|
||||
{
|
||||
DebPrint (("mmap_alloc: error %ld\n", GetLastError ()));
|
||||
DebPrint (("mmap_alloc: error %ld\n", e));
|
||||
errno = EINVAL;
|
||||
}
|
||||
}
|
||||
@ -683,6 +687,7 @@ void *
|
||||
mmap_realloc (void **var, size_t nbytes)
|
||||
{
|
||||
MEMORY_BASIC_INFORMATION memInfo, m2;
|
||||
void *old_ptr;
|
||||
|
||||
if (*var == NULL)
|
||||
return mmap_alloc (var, nbytes);
|
||||
@ -694,12 +699,14 @@ mmap_realloc (void **var, size_t nbytes)
|
||||
return mmap_alloc (var, nbytes);
|
||||
}
|
||||
|
||||
memset (&memInfo, 0, sizeof (memInfo));
|
||||
if (VirtualQuery (*var, &memInfo, sizeof (memInfo)) == 0)
|
||||
DebPrint (("mmap_realloc: VirtualQuery error = %ld\n", GetLastError ()));
|
||||
|
||||
/* We need to enlarge the block. */
|
||||
if (memInfo.RegionSize < nbytes)
|
||||
{
|
||||
memset (&m2, 0, sizeof (m2));
|
||||
if (VirtualQuery (*var + memInfo.RegionSize, &m2, sizeof(m2)) == 0)
|
||||
DebPrint (("mmap_realloc: VirtualQuery error = %ld\n",
|
||||
GetLastError ()));
|
||||
@ -715,31 +722,31 @@ mmap_realloc (void **var, size_t nbytes)
|
||||
MEM_COMMIT, PAGE_READWRITE);
|
||||
if (!p /* && GetLastError() != ERROR_NOT_ENOUGH_MEMORY */)
|
||||
{
|
||||
DebPrint (("realloc enlarge: VirtualAlloc error %ld\n",
|
||||
DebPrint (("realloc enlarge: VirtualAlloc (%p + %I64x, %I64x) error %ld\n",
|
||||
*var, (uint64_t)memInfo.RegionSize,
|
||||
(uint64_t)(nbytes - memInfo.RegionSize),
|
||||
GetLastError ()));
|
||||
errno = ENOMEM;
|
||||
DebPrint (("next region: %p %p %I64x %x\n", m2.BaseAddress,
|
||||
m2.AllocationBase, m2.RegionSize, m2.AllocationProtect));
|
||||
}
|
||||
else
|
||||
return *var;
|
||||
}
|
||||
/* Else we must actually enlarge the block by allocating a new
|
||||
one and copying previous contents from the old to the new one. */
|
||||
old_ptr = *var;
|
||||
|
||||
if (mmap_alloc (var, nbytes))
|
||||
{
|
||||
CopyMemory (*var, old_ptr, memInfo.RegionSize);
|
||||
mmap_free (&old_ptr);
|
||||
return *var;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Else we must actually enlarge the block by allocating a
|
||||
new one and copying previous contents from the old to the
|
||||
new one. */
|
||||
void *old_ptr = *var;
|
||||
|
||||
if (mmap_alloc (var, nbytes))
|
||||
{
|
||||
CopyMemory (*var, old_ptr, memInfo.RegionSize);
|
||||
mmap_free (&old_ptr);
|
||||
return *var;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We failed to enlarge the buffer. */
|
||||
*var = old_ptr;
|
||||
return NULL;
|
||||
}
|
||||
/* We failed to reallocate the buffer. */
|
||||
*var = old_ptr;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -751,7 +758,7 @@ mmap_realloc (void **var, size_t nbytes)
|
||||
{
|
||||
/* Let's give some memory back to the system and release
|
||||
some pages. */
|
||||
void *old_ptr = *var;
|
||||
old_ptr = *var;
|
||||
|
||||
if (mmap_alloc (var, nbytes))
|
||||
{
|
||||
|
@ -16920,7 +16920,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
|
||||
if (scroll_conservatively > SCROLL_LIMIT)
|
||||
{
|
||||
int window_total_lines
|
||||
= WINDOW_TOTAL_LINES (w) * FRAME_LINE_HEIGHT (f) * frame_line_height;
|
||||
= WINDOW_TOTAL_LINES (w) * FRAME_LINE_HEIGHT (f) / frame_line_height;
|
||||
int margin =
|
||||
scroll_margin > 0
|
||||
? min (scroll_margin, window_total_lines / 4)
|
||||
|
Loading…
Reference in New Issue
Block a user