Merge branch 'master' into xwidget
This commit is contained in:
commit
5f46725992
859 changed files with 159975 additions and 39836 deletions
|
@ -3,8 +3,6 @@
|
|||
(fill-column . 70)))
|
||||
(c-mode . ((c-file-style . "GNU")))
|
||||
(objc-mode . ((c-file-style . "GNU")))
|
||||
;; You must set bugtracker_debbugs_url in your bazaar.conf for this to work.
|
||||
;; See admin/notes/bugtracker.
|
||||
(log-edit-mode . ((log-edit-rewrite-fixes
|
||||
"[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1")
|
||||
(log-edit-font-lock-gnu-style . t)
|
||||
|
|
280
.gitignore
vendored
280
.gitignore
vendored
|
@ -1,23 +1,265 @@
|
|||
configure
|
||||
aclocal.m4
|
||||
compile
|
||||
config.guess
|
||||
config.sub
|
||||
depcomp
|
||||
install-sh
|
||||
missing
|
||||
# Files that Git should ignore in the Emacs source directory.
|
||||
|
||||
# Copyright 2009-2014 Free Software Foundation, Inc.
|
||||
|
||||
# This file is part of GNU Emacs.
|
||||
|
||||
# GNU Emacs is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# GNU Emacs is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
# Currently we assume only Git 1.7.1 (April 2010) or later, so this
|
||||
# file does not rely on "**" in patterns. The "**" feature was added
|
||||
# in Git 1.8.2 (March 2013).
|
||||
|
||||
|
||||
# Built by 'autogen.sh'.
|
||||
/aclocal.m4
|
||||
/configure
|
||||
build-aux/compile
|
||||
build-aux/config.guess
|
||||
build-aux/config.sub
|
||||
build-aux/depcomp
|
||||
build-aux/install-sh
|
||||
build-aux/missing
|
||||
lib/Makefile.in
|
||||
src/config.in
|
||||
autom4te.cache
|
||||
makefile
|
||||
TAGS
|
||||
*~
|
||||
/README.W32
|
||||
|
||||
/bin/
|
||||
/site-lisp/
|
||||
/leim/ja-dic/
|
||||
etc/refcards/*.aux
|
||||
etc/refcards/*.log
|
||||
# Built by 'configure'.
|
||||
Info.plist
|
||||
InfoPlist.strings
|
||||
Makefile
|
||||
!admin/charsets/Makefile
|
||||
!etc/refcards/Makefile
|
||||
!test/automated/data/flymake/Makefile
|
||||
!test/indent/Makefile
|
||||
makefile
|
||||
/*.cache
|
||||
/confdefs.h
|
||||
/config.status
|
||||
/configure.lineno
|
||||
src/config.h
|
||||
src/epaths.h
|
||||
|
||||
# C-level sources built by 'make'.
|
||||
lib/alloca.h
|
||||
lib/arg-nonnull.h
|
||||
lib/byteswap.h
|
||||
lib/c++defs.h
|
||||
lib/dirent.h
|
||||
lib/errno.h
|
||||
lib/execinfo.h
|
||||
lib/fcntl.h
|
||||
lib/getopt.h
|
||||
lib/inttypes.h
|
||||
lib/libgnu.a
|
||||
lib/signal.h
|
||||
lib/std*.h
|
||||
!lib/std*.in.h
|
||||
lib/string.h
|
||||
lib/sys/
|
||||
lib/time.h
|
||||
lib/unistd.h
|
||||
lib/warn-on-use.h
|
||||
src/buildobj.h
|
||||
src/globals.h
|
||||
|
||||
# Lisp-level sources built by 'make'.
|
||||
*cus-load.el
|
||||
*loaddefs.el
|
||||
leim/changed.misc
|
||||
leim/changed.tit
|
||||
lisp/cedet/semantic/bovine/c-by.el
|
||||
lisp/cedet/semantic/bovine/make-by.el
|
||||
lisp/cedet/semantic/bovine/scm-by.el
|
||||
lisp/cedet/semantic/wisent/javat-wy.el
|
||||
lisp/cedet/semantic/wisent/js-wy.el
|
||||
lisp/cedet/semantic/wisent/python-wy.el
|
||||
lisp/cedet/srecode/srt-wy.el
|
||||
lisp/eshell/esh-groups.el
|
||||
lisp/finder-inf.el
|
||||
lisp/leim/ja-dic/
|
||||
lisp/leim/leim-list.el
|
||||
lisp/leim/quail/4Corner.el
|
||||
lisp/leim/quail/ARRAY30.el
|
||||
lisp/leim/quail/CCDOSPY.el
|
||||
lisp/leim/quail/CTLau.el
|
||||
lisp/leim/quail/CTLau-b5.el
|
||||
lisp/leim/quail/ECDICT.el
|
||||
lisp/leim/quail/ETZY.el
|
||||
lisp/leim/quail/PY-b5.el
|
||||
lisp/leim/quail/PY.el
|
||||
lisp/leim/quail/Punct.el
|
||||
lisp/leim/quail/Punct-b5.el
|
||||
lisp/leim/quail/QJ.el
|
||||
lisp/leim/quail/QJ-b5.el
|
||||
lisp/leim/quail/SW.el
|
||||
lisp/leim/quail/TONEPY.el
|
||||
lisp/leim/quail/ZIRANMA.el
|
||||
lisp/leim/quail/ZOZY.el
|
||||
lisp/leim/quail/quick-b5.el
|
||||
lisp/leim/quail/quick-cns.el
|
||||
lisp/leim/quail/tsang-b5.el
|
||||
lisp/leim/quail/tsang-cns.el
|
||||
lisp/subdirs.el
|
||||
|
||||
# Dependencies.
|
||||
.deps/
|
||||
deps/
|
||||
|
||||
# Logs and temporaries.
|
||||
*.log
|
||||
*.tmp
|
||||
|
||||
# Time stamps.
|
||||
stamp_BLD
|
||||
src/gl-stamp
|
||||
src/stamp-h.in
|
||||
src/stamp-h1
|
||||
|
||||
# Object files and debugging.
|
||||
*.a
|
||||
*.dSYM/
|
||||
*.core
|
||||
*.elc
|
||||
*.o
|
||||
*.res
|
||||
[0-9]*.core
|
||||
core
|
||||
core.*[0-9]
|
||||
oo/
|
||||
oo-spd/
|
||||
src/*.map
|
||||
|
||||
# Tests.
|
||||
test/indent/*.new
|
||||
test/biditest.txt
|
||||
|
||||
# ctags, etags.
|
||||
TAGS
|
||||
|
||||
# GNU global.
|
||||
GPATH
|
||||
GSYMS
|
||||
GRTAGS
|
||||
GTAGS
|
||||
|
||||
# GNU idutils.
|
||||
ID
|
||||
|
||||
# Executables.
|
||||
*.exe
|
||||
a.out
|
||||
lib-src/blessmail
|
||||
lib-src/ctags
|
||||
lib-src/ebrowse
|
||||
lib-src/emacsclient
|
||||
lib-src/etags
|
||||
lib-src/hexl
|
||||
lib-src/make-docfile
|
||||
lib-src/movemail
|
||||
lib-src/profile
|
||||
lib-src/test-distrib
|
||||
lib-src/update-game-score
|
||||
nextstep/Cocoa/Emacs.base/Contents/Info.plist
|
||||
nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj
|
||||
nextstep/Emacs.app/
|
||||
nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop
|
||||
nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist
|
||||
src/bootstrap-emacs
|
||||
src/emacs
|
||||
src/emacs-[0-9]*
|
||||
src/temacs
|
||||
|
||||
# Character-set info.
|
||||
admin/charsets/*.el
|
||||
admin/charsets/*.map
|
||||
admin/charsets/jisx2131-filter
|
||||
admin/unidata/unidata.txt
|
||||
lisp/international/charprop.el
|
||||
lisp/international/uni-*.el
|
||||
|
||||
# Documentation.
|
||||
*.aux
|
||||
*.cm
|
||||
*.cms
|
||||
*.cp
|
||||
*.cps
|
||||
*.dvi
|
||||
*.fn
|
||||
*.fns
|
||||
*.html
|
||||
*.info
|
||||
*.ky
|
||||
*.kys
|
||||
*.op
|
||||
*.ops
|
||||
*.pdf
|
||||
!doc/lispintro/cons-*.pdf
|
||||
!doc/lispintro/drawers.pdf
|
||||
!doc/lispintro/lambda-*.pdf
|
||||
!etc/refcards/gnus-logo.pdf
|
||||
*.pg
|
||||
*.pgs
|
||||
*.pj
|
||||
*.pjs
|
||||
*.ps
|
||||
*.sc
|
||||
*.scs
|
||||
*.tg
|
||||
*.tgs
|
||||
*.toc
|
||||
*.tp
|
||||
*.tps
|
||||
*.vr
|
||||
*.vrs
|
||||
doc/emacs/emacsver.texi
|
||||
doc/man/emacs.1
|
||||
doc/misc/cc-mode.ss
|
||||
etc/DOC
|
||||
etc/refcards/emacsver.tex
|
||||
info/dir
|
||||
info/*.info
|
||||
|
||||
# Version control and locks.
|
||||
*.orig
|
||||
*.rej
|
||||
*~
|
||||
.#*
|
||||
\#*\#
|
||||
[0-9]*.patch
|
||||
|
||||
# Built by 'make install'.
|
||||
etc/emacs.tmpdesktop
|
||||
|
||||
# Distribution directories.
|
||||
/emacs-[1-9]*/
|
||||
|
||||
# Microsoft-related builds and installations.
|
||||
*.in-h
|
||||
_*
|
||||
!build-aux/snippet/_Noreturn.h
|
||||
/bin/
|
||||
/BIN/
|
||||
/data/
|
||||
etc/icons/
|
||||
lib/cxxdefs.h
|
||||
lib/SYS/
|
||||
/libexec/
|
||||
/lock/
|
||||
/README.W32
|
||||
/share/
|
||||
/site-lisp/
|
||||
nt/emacs.rc
|
||||
nt/emacsclient.rc
|
||||
src/gdb.ini
|
||||
/var/
|
||||
|
|
338
CONTRIBUTE
Normal file
338
CONTRIBUTE
Normal file
|
@ -0,0 +1,338 @@
|
|||
Copyright (C) 2006-2014 Free Software Foundation, Inc.
|
||||
See end for license conditions.
|
||||
|
||||
|
||||
Contributing to Emacs
|
||||
|
||||
Emacs is a collaborative project and we encourage contributions from
|
||||
anyone and everyone. If you want to contribute in the way that will
|
||||
help us most, we recommend (1) fixing reported bugs and (2)
|
||||
implementing the feature ideas in etc/TODO. However, if you think of
|
||||
new features to add, please suggest them too -- we might like your
|
||||
idea. Porting to new platforms is also useful, when there is a new
|
||||
platform, but that is not common nowadays.
|
||||
|
||||
For documentation on Emacs (to understand how to implement your
|
||||
desired change), refer to:
|
||||
|
||||
- the Emacs Manual
|
||||
http://www.gnu.org/software/emacs/manual/emacs.html
|
||||
(info "(Emacs)Top")
|
||||
|
||||
- the Emacs Lisp Reference Manual
|
||||
http://www.gnu.org/software/emacs/manual/elisp.html
|
||||
(info "(elisp)Top")
|
||||
|
||||
- http://www.gnu.org/software/emacs
|
||||
|
||||
- http://www.emacswiki.org/
|
||||
|
||||
There are many ways to contribute to Emacs:
|
||||
|
||||
- implement a new feature, and submit a patch (see "Submitting
|
||||
Patches" below).
|
||||
|
||||
- answer questions on the Emacs user mailing list
|
||||
https://lists.gnu.org/mailman/listinfo/help-gnu-emacs
|
||||
|
||||
- write documentation, either on the wiki, or in the Emacs source
|
||||
repository (see "Submitting Patches" below)
|
||||
|
||||
- find and report bugs; use M-x report-emacs-bug
|
||||
|
||||
- check if existing bug reports are fixed in newer versions of Emacs
|
||||
http://debbugs.gnu.org/cgi/pkgreport.cgi?which=pkg&data=emacs
|
||||
|
||||
- develop a package that works with Emacs, and publish it on your own
|
||||
or in Gnu ELPA (see admin/notes/elpa).
|
||||
|
||||
Here are some style and legal conventions for contributors to Emacs:
|
||||
|
||||
|
||||
* Coding Standards
|
||||
|
||||
Contributed code should follow the GNU Coding Standards
|
||||
(http://www.gnu.org/prep/standards/ - may also be available in info on
|
||||
your system).
|
||||
|
||||
If it doesn't, we'll need to find someone to fix the code before we
|
||||
can use it.
|
||||
|
||||
Emacs has additional style and coding conventions:
|
||||
|
||||
- the "Tips" Appendix in the Emacs Lisp Reference
|
||||
http://www.gnu.org/software/emacs/manual/html_node/elisp/Tips.html
|
||||
(info "(elisp)Tips").
|
||||
|
||||
- Avoid using `defadvice' or `eval-after-load' for Lisp code to be
|
||||
included in Emacs.
|
||||
|
||||
- Remove all trailing whitespace in all source and text files.
|
||||
|
||||
- Emacs has no convention on whether to use tabs in source code;
|
||||
please don't change whitespace in the files you edit.
|
||||
|
||||
- Use ?\s instead of ? in Lisp code for a space character.
|
||||
|
||||
* Copyright Assignment
|
||||
|
||||
The FSF (Free Software Foundation) is the copyright holder for GNU Emacs.
|
||||
The FSF is a nonprofit with a worldwide mission to promote computer
|
||||
user freedom and to defend the rights of all free software users.
|
||||
For general information, see the website http://www.fsf.org/ .
|
||||
|
||||
Generally speaking, for non-trivial contributions to GNU Emacs we
|
||||
require that the copyright be assigned to the FSF. For the reasons
|
||||
behind this, see: http://www.gnu.org/licenses/why-assign.html .
|
||||
|
||||
Copyright assignment is a simple process. Residents of some countries
|
||||
can do it entirely electronically. We can help you get started, and
|
||||
answer any questions you may have (or point you to the people with the
|
||||
answers), at the emacs-devel@gnu.org mailing list.
|
||||
|
||||
(Please note: general discussion about why some GNU projects ask
|
||||
for a copyright assignment is off-topic for emacs-devel.
|
||||
See gnu-misc-discuss instead.)
|
||||
|
||||
A copyright disclaimer is also a possibility, but we prefer an assignment.
|
||||
Note that the disclaimer, like an assignment, involves you sending
|
||||
signed paperwork to the FSF (simply saying "this is in the public domain"
|
||||
is not enough). Also, a disclaimer cannot be applied to future work, it
|
||||
has to be repeated each time you want to send something new.
|
||||
|
||||
We can accept small changes (roughly, fewer than 15 lines) without
|
||||
an assignment. This is a cumulative limit (e.g. three separate 5 line
|
||||
patches) over all your contributions.
|
||||
|
||||
* Getting the Source Code
|
||||
|
||||
The current working version of the Emacs source code is stored in a
|
||||
git repository on the Savannah web site
|
||||
(http://savannah.gnu.org/projects/emacs). It is important to write
|
||||
your patch based on the current working version. If you start from an
|
||||
older version, your patch may be outdated (so that maintainers will
|
||||
have a hard time applying it), or changes in Emacs may have made your
|
||||
patch unnecessary.
|
||||
|
||||
After you have downloaded the repository source, you should read the file
|
||||
INSTALL.REPO for build instructions (they differ to some extent from a
|
||||
normal build).
|
||||
|
||||
* Submitting Patches
|
||||
|
||||
Every patch must have several pieces of information before we
|
||||
can properly evaluate it.
|
||||
|
||||
When you have all these pieces, bundle them up in a mail message and
|
||||
send it to the developers. Sending it to bug-gnu-emacs@gnu.org
|
||||
(which is the bug/feature list) is recommended, because that list
|
||||
is coupled to a tracking system that makes it easier to locate patches.
|
||||
If your patch is not complete and you think it needs more discussion,
|
||||
you might want to send it to emacs-devel@gnu.org instead. If you
|
||||
revise your patch, send it as a followup to the initial topic.
|
||||
|
||||
** Description
|
||||
|
||||
For bug fixes, a description of the bug and how your patch fixes it.
|
||||
|
||||
For new features, a description of the feature and your implementation.
|
||||
|
||||
** ChangeLog
|
||||
|
||||
A ChangeLog entry as plaintext (separate from the patch).
|
||||
|
||||
See the existing ChangeLog files for format and content. Note that,
|
||||
unlike some other projects, we do require ChangeLogs for
|
||||
documentation, i.e. Texinfo files.
|
||||
|
||||
Ref: "Change Log Concepts" node of the GNU Coding Standards Info
|
||||
Manual, for how to write good log entries.
|
||||
http://www.gnu.org/prep/standards/html_node/Change-Log-Concepts.html
|
||||
|
||||
When using git, commit messages should use ChangeLog format, with a
|
||||
single short line explaining the change, then an empty line, then
|
||||
unindented ChangeLog entries. (Essentially, a commit message should
|
||||
be a duplicate of what the patch adds to the ChangeLog files. We are
|
||||
planning to automate this better, to avoid the duplication.) You can
|
||||
use the Emacs functions log-edit-add-to-changelog or
|
||||
log-edit-insert-changelog to ease this process.
|
||||
|
||||
** The patch itself.
|
||||
|
||||
If you are accessing the Emacs repository, make sure your copy is
|
||||
up-to-date (e.g. with 'git pull'). You can commit your changes
|
||||
to a private branch and generate a patch from the master version
|
||||
by using
|
||||
git format-patch master
|
||||
Or you can leave your changes uncommitted and use
|
||||
git diff
|
||||
With no repository, you can use
|
||||
diff -u OLD NEW
|
||||
|
||||
** Mail format.
|
||||
|
||||
We prefer to get the patches as plain text, either inline (be careful
|
||||
your mail client does not change line breaks) or as MIME attachments.
|
||||
|
||||
** Please reread your patch before submitting it.
|
||||
|
||||
** Do not mix changes.
|
||||
|
||||
If you send several unrelated changes together, we will ask you to
|
||||
separate them so we can consider each of the changes by itself.
|
||||
|
||||
** Do not make formatting changes.
|
||||
|
||||
Making cosmetic formatting changes (indentation, etc) makes it harder
|
||||
to see what you have really changed.
|
||||
|
||||
|
||||
* Supplemental information for Emacs Developers.
|
||||
|
||||
An "Emacs Developer" is someone who contributes a lot of code or
|
||||
documentation to the Emacs repository.
|
||||
|
||||
** Write access to the Emacs repository.
|
||||
|
||||
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.
|
||||
|
||||
** Using the Emacs repository
|
||||
|
||||
Emacs uses git for the source code repository.
|
||||
|
||||
See http://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs to get
|
||||
started, and http://www.emacswiki.org/emacs/GitForEmacsDevs for more
|
||||
advanced information.
|
||||
|
||||
Alternately, see admin/notes/git-workflow.
|
||||
|
||||
If committing changes written by someone else, make the ChangeLog
|
||||
entry 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.
|
||||
|
||||
** Changelog notes
|
||||
|
||||
- Emacs generally follows the GNU coding standards when it comes to
|
||||
ChangeLogs:
|
||||
http://www.gnu.org/prep/standards/html_node/Change-Logs.html . 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.
|
||||
|
||||
- There are multiple ChangeLogs in the emacs source; roughly one per
|
||||
high-level directory. The ChangeLog entry for a commit belongs in the
|
||||
lowest ChangeLog that is higher than or at the same level as any file
|
||||
changed by the commit.
|
||||
|
||||
- Preferred form for several entries with the same content:
|
||||
|
||||
* help.el (view-lossage):
|
||||
* kmacro.el (kmacro-edit-lossage):
|
||||
* edmacro.el (edit-kbd-macro): Fix docstring, lossage is now 300 keys.
|
||||
|
||||
(Rather than anything involving "ditto" and suchlike.)
|
||||
|
||||
- In ChangeLog files, there is no standard or recommended way to
|
||||
identify revisions.
|
||||
|
||||
One way to identify revisions is by quoting their summary line.
|
||||
Another is with an action stamp - an RFC3339 date followed by !
|
||||
followed by the committer's email - for example,
|
||||
"2014-01-16T05:43:35Z!esr@thyrsus.com". Often, "my previous commit"
|
||||
will suffice.
|
||||
|
||||
- There is no need to make separate change log entries for files such
|
||||
as NEWS, MAINTAINERS, and FOR-RELEASE, or to indicate regeneration
|
||||
of files such as 'configure'. "There is no need" means you don't
|
||||
have to, but you can if you want to.
|
||||
|
||||
** 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.
|
||||
|
||||
Sometime before the release of a new major version of Emacs a "feature
|
||||
freeze" is imposed on the trunk, to prepare for creating a release
|
||||
branch. No new features may be added to the trunk after this point,
|
||||
until the release branch is created. This freeze is announced on the
|
||||
emacs-devel mailing list, and not anywhere else.
|
||||
|
||||
The trunk branch is named "master" in git; release branches are named
|
||||
"emacs-nn" where "nn" is the major version.
|
||||
|
||||
You must follow emacs-devel to know exactly what kinds of changes are
|
||||
allowed on what branch at any time. Announcements about the freeze
|
||||
(and other important events) will contain "ANNOUNCE" in the subject.
|
||||
|
||||
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.
|
||||
|
||||
However, if you know that the change will be difficult to merge to the
|
||||
trunk (eg because the trunk code has changed a lot), you can apply the
|
||||
change to both trunk and branch yourself. Indicate in the release
|
||||
branch commit log that there is no need to merge the commit to the
|
||||
trunk; start the commit message with "Backport:". gitmerge.el will
|
||||
then exclude that commit from the merge to trunk.
|
||||
|
||||
|
||||
** Other process information
|
||||
|
||||
See all the files in admin/notes/* . In particular, see
|
||||
admin/notes/newfile, see admin/notes/repo.
|
||||
|
||||
** 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 tracker at http://debbugs.gnu.org .
|
||||
|
||||
You can subscribe to the mailing lists, or see the list archives,
|
||||
by following links from http://savannah.gnu.org/mail/?group=emacs .
|
||||
|
||||
** Document your changes.
|
||||
|
||||
Any change that matters to end-users should have an entry in etc/NEWS.
|
||||
|
||||
Think about whether your change requires updating the documentation
|
||||
(both manuals and doc-strings). 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.
|
||||
|
||||
** 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.
|
||||
|
||||
The file etc/DEBUG describes how to debug Emacs bugs.
|
||||
|
||||
|
||||
|
||||
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/>.
|
||||
|
||||
Local variables:
|
||||
mode: outline
|
||||
paragraph-separate: "[ ]*$"
|
||||
end:
|
605
ChangeLog
605
ChangeLog
|
@ -1,3 +1,591 @@
|
|||
2014-12-23 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib
|
||||
2014-12-20 utimens: remove unnecessary assert
|
||||
2014-12-16 stdalign: port better to HP compilers
|
||||
2014-12-16 stdalign: work around Apple GCC 4.0 bug
|
||||
* lib/stdalign.in.h, lib/utimens.c, m4/stdalign.m4: Update from gnulib.
|
||||
|
||||
2014-12-14 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Spelling fixes
|
||||
All uses changed.
|
||||
* lib-src/etags.c (analyze_regex): Rename from analyse_regex.
|
||||
* lisp/cedet/semantic/lex-spp.el:
|
||||
(semantic-lex-spp-analyzer-do-replace):
|
||||
Rename from semantic-lex-spp-anlyzer-do-replace.
|
||||
* lisp/emacs-lisp/cconv.el (cconv--analyze-use):
|
||||
Rename from cconv--analyse-use.
|
||||
(cconv--analyze-function): Rename from cconv--analyse-function.
|
||||
(cconv-analyze-form): Rename from cconv-analyse-form.
|
||||
* src/regex.c (analyze_first): Rename from analyze_first.
|
||||
|
||||
2014-12-14 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* make-dist: No more lib-src/grep-changelog.
|
||||
|
||||
* INSTALL.REPO: Revert 2014-12-06 change.
|
||||
|
||||
2014-12-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* lib/gnulib.mk: Regenerate.
|
||||
|
||||
2014-12-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Git ignore lib/std*.h
|
||||
* .gitignore: Add lib/std*.h, to ignore stdarg.h, stdbool.h, and
|
||||
stddef.h. Remove subsumed entries.
|
||||
Add !lib/std*.in.h, so as to not ignore the .in.h files.
|
||||
|
||||
2014-12-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Port commit-msg to mawk
|
||||
Problem reported by Ted Zlatanov in:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg01093.html
|
||||
* build-aux/git-hooks/commit-msg (space, non_space, non_print):
|
||||
New vars. Use them as approximations to POSIX bracket expressions,
|
||||
on implementations like mawk that do not support POSIX regexps.
|
||||
|
||||
Improve commit-msg messages and autosquash
|
||||
Problem reported by Michal Nazarewicz in Bug#19337.
|
||||
* build-aux/git-hooks/commit-msg: Add "commit message" to
|
||||
diagnostics. Distinguish better between tabs and other
|
||||
unprintable chars in diagnostics. Don't complain if a prefix
|
||||
"fixup! " or "squash! " makes a summary line too long.
|
||||
|
||||
2014-12-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Port commit-message checking to FreeBSD 9.
|
||||
This fixes a bug reported by Jan Djärv in:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00704.html
|
||||
along with some other issues I noticed while testing with FreeBSD.
|
||||
* build-aux/git-hooks/commit-msg: Prefer gawk if available.
|
||||
Prefer en_US.UTF-8 to en_US.utf8, as it's more portable.
|
||||
Work around bug in FreeBSD 9 awk, where /[[:cntrl:]]/ matches
|
||||
ordinary text characters.
|
||||
Be less tricky about quoting "'" in a shell script.
|
||||
|
||||
2014-12-13 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* .gitignore: Ignore autosave files.
|
||||
|
||||
2014-12-12 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib
|
||||
2014-12-12 stddef: support C11's max_align_t
|
||||
2014-12-11 unistd: fix iOS check conditional
|
||||
2014-12-08 apply _GL_ATTRIBUTE_PURE to some inline functions
|
||||
2014-12-02 support GNU format printf and scanf on mingw
|
||||
* lib/stat-time.h, lib/stddef.in.h, lib/timespec.h:
|
||||
* m4/extensions.m4, m4/stddef_h.m4, m4/stdio_h.m4: Update from gnulib.
|
||||
* lib/gnulib.mk: Regenerate.
|
||||
|
||||
2014-12-06 Stephen Leake <stephen_leake@stephe-leake.org>
|
||||
|
||||
* CONTRIBUTE: Improve; add explicit web references, move some info
|
||||
from admin/notes/* here.
|
||||
|
||||
* INSTALL.REPO: You can't "just run make" after a clean checkout.
|
||||
|
||||
2014-12-05 Stephen Leake <stephen_leake@stephe-leake.org>
|
||||
|
||||
* CONTRIBUTE: Move here from etc/, preparatory to further
|
||||
changes/cleanup.
|
||||
|
||||
2014-12-05 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* .gitignore: Remove redundant pattern (subsumed by _*).
|
||||
Avoid "**", as it requires Git 1.8.2 or later.
|
||||
|
||||
2014-12-05 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* .gitignore: Ignore test/biditest.txt.
|
||||
|
||||
2014-12-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* .gitignore: Ignore loaddefs directly under lisp, and in
|
||||
sub-sub-directories.
|
||||
|
||||
2014-11-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Add more of the old .bzrignore to .gitignore.
|
||||
Plus a few more .gitignore improvements.
|
||||
* .gitignore: Add copyright notice, since it's big enough.
|
||||
Put exceptions immediately after the patterns they're exceptions
|
||||
to, to make them easier to follow.
|
||||
Give four exceptions for the Makefile pattern.
|
||||
Ignore /confdefs.h, test/indent/*.new, TAGS, GPATH, GSYMS, GRTAGS,
|
||||
GTAGS, ID, *.exe, some nextstep-related files,
|
||||
jisx2131-filter, *.orig, *.rej, etc/emacs.tmpdesktop, *.in-h
|
||||
_* (except for build-aux/snippet/_Noreturn.h), /bin/, /BIN/,
|
||||
/data/, etc/icons/, lib/cxxdefs.h, lib/SYS/, /libexec/, /lock/,
|
||||
/README.W32, /share/, /site-lisp/, src/gdb.ini, /var/.
|
||||
Ignore /configure.lineno, since POSIX requires
|
||||
LINENO only with the User Portability Utilities option.
|
||||
Ignore *cust-load.el and *loaddefs.el only under lisp.
|
||||
Ignore core files of various flavors.
|
||||
Do not ignore etc/refcards/gnus-logo.pdf.
|
||||
|
||||
2014-11-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* .gitignore: Add back src/_gdbinit, which is a temporary file
|
||||
created by the MS-DOS build.
|
||||
|
||||
2014-11-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Add a.out to .gitignore.
|
||||
Suggested by Lee Duhem in:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01665.html
|
||||
* .gitignore: Add a.out.
|
||||
Move *.log next to *.tmp, since it's generic.
|
||||
Put *.exe before non-generics.
|
||||
|
||||
2014-11-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* .gitignore: Resurrect Windows-specific ignorables lost in last
|
||||
changes.
|
||||
|
||||
2014-11-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* .gitignore: Add /emacs-[1-9]*/, and sort better.
|
||||
|
||||
2014-11-29 Ivan Andrus <darthandrus@gmail.com>
|
||||
|
||||
* .gitignore: Add some nextstep/mac ignorables.
|
||||
|
||||
2014-11-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
.gitignore cleanup.
|
||||
* .gitignore: Merge contents of subsidiary files and organize the
|
||||
result so as to avoid duplication. Remove no-longer needed entries.
|
||||
* admin/charsets/.gitignore, admin/unidata/.gitignore:
|
||||
* doc/lispintro/.gitignore, etc/.gitignore, leim/.gitignore:
|
||||
* leim/ja-dic/.gitignore, lib-src/.gitignore, lisp/.gitignore:
|
||||
* lisp/calc/.gitignore, lisp/calendar/.gitignore:
|
||||
* lisp/cedet/.gitignore, lisp/emulation/.gitignore:
|
||||
* lisp/erc/.gitignore, lisp/eshell/.gitignore, lisp/gnus/.gitignore:
|
||||
* lisp/international/.gitignore, lisp/language/.gitignore:
|
||||
* lisp/leim/.gitignore, lisp/leim/quail/.gitignore:
|
||||
* lisp/mail/.gitignore, lisp/mh-e/.gitignore, lisp/net/.gitignore:
|
||||
* lisp/nxml/.gitignore, lisp/obsolete/.gitignore:
|
||||
* lisp/play/.gitignore, lisp/progmodes/.gitignore:
|
||||
* lisp/term/.gitignore, lisp/textmodes/.gitignore:
|
||||
* lisp/url/.gitignore, nt/.gitignore, src/.gitignore:
|
||||
Remove; no longer needed.
|
||||
|
||||
2014-11-29 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.ac: Simplify gnutls tests.
|
||||
|
||||
2014-11-28 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* .gitignore: Add entries for emacsvers files.
|
||||
|
||||
2014-11-27 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Restore 'Bug#' -> 'debbugs:' rewrite in log-edit-mode.
|
||||
* .dir-locals.el (log-edit-mode): Restore the (log-edit-rewrite-fixes
|
||||
"[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1"). See Glenn Morris in:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01187.html
|
||||
|
||||
Simplify and fix doc-related .gitignore files.
|
||||
This fixes some unwanted 'git status' output after 'make docs'.
|
||||
* .gitignore: Add **/Makefile, **/makefile.
|
||||
Remove Makefile, makefile.
|
||||
Add doc/*/*.xxx rules for the usual kinds of documentation outputs
|
||||
and temporaries. Add doc/misc/cc-mode.ss.
|
||||
* doc/emacs/.gitignore, doc/lispintro/.gitignore, doc/misc/.gitignore:
|
||||
* lwlib/.gitignore, oldXMenu/.gitignore:
|
||||
Remove, as these .gitignore files are no longer needed.
|
||||
* doc/lispintro/.gitignore: Replace with list of exceptional PDF files.
|
||||
|
||||
2014-11-26 Dani Moncayo <dmoncayo@gmail.com>
|
||||
|
||||
* configure.ac [MINGW]: Fix the way of getting the right host
|
||||
platform.
|
||||
|
||||
2014-11-25 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.ac: Fix yesterday's use of uninitialised $version.
|
||||
|
||||
2014-11-25 Oscar Fuentes <ofv@wanadoo.es>
|
||||
|
||||
* configure.ac [MINGW]: Set $canonical default value as per the
|
||||
compiler's target.
|
||||
|
||||
2014-11-24 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.ac [HAVE_W32]: Generate nt/*.rc files when HAVE_W32,
|
||||
not just when using mingw32.
|
||||
|
||||
2014-11-22 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
Further reduce number of versioned files storing Emacs version number.
|
||||
* configure.ac (comma_version, comma_space_version) [mingw32]:
|
||||
New output variables.
|
||||
(nt/emacs.rc, nt/emacsclient.rc) [mingw32]: New output files.
|
||||
* make-dist: Update nt/ for *.rc -> *.rc.in changes.
|
||||
|
||||
2014-11-19 Dani Moncayo <dmoncayo@gmail.com>
|
||||
|
||||
* build-aux/msys-to-w32: Simplify implementation and docstring;
|
||||
Paths starting with '%emacs_dir%' are just considered relative.
|
||||
|
||||
2014-11-16 Christoph Scholtes <cschol2112@gmail.com>
|
||||
|
||||
* .gitignore: Ignore generated file lib/stdalign.h.
|
||||
|
||||
2014-11-16 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* .gitignore: Add more ignorables.
|
||||
|
||||
2014-11-14 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* Makefile.in (config.status): Don't depend on
|
||||
${srcdir}/lisp/version.el.
|
||||
|
||||
2014-11-14 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib.
|
||||
2014-11-14 extern-inline: update commentary about GCC bugs
|
||||
2014-11-06 unistd: port to iOS
|
||||
2014-11-04 update from texinfo
|
||||
* doc/misc/texinfo.tex, lib/unistd.in.h, m4/extern-inline.m4:
|
||||
Update from gnulib.
|
||||
|
||||
build: port to GCC 4.6.4 + glibc 2.5
|
||||
On platforms this old, building with _FORTIFY_SOURCE equal to 2
|
||||
results in duplicate definitions of standard library functions.
|
||||
Problem reported by Nelson H. F. Beebe.
|
||||
* configure.ac (_FORTIFY_SOURCE): Sort after GNULIB_PORTCHECK.
|
||||
By default, do not enable this unless GNULIB_PORTCHECK is defined.
|
||||
This better matches the original intent, which as I recall was to
|
||||
enable these extra checks only with --enable-gcc-warnings.
|
||||
|
||||
2014-11-14 David Reitter <david.reitter@gmail.com>
|
||||
|
||||
* Makefile.in (install-arch-indep): Compress publicsuffix.txt file.
|
||||
|
||||
2014-11-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* .dir-locals.el: Remove reference to bzr commit --fixes debbugs.
|
||||
|
||||
2014-11-13 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* .gitignore: Copy over sufficient ignorable files from the old
|
||||
.bzrignore that a simple build doesn't list lots of unregistered files.
|
||||
|
||||
2014-11-11 Eric S. Raymond <esr@thyrsus.com>
|
||||
|
||||
* Makefile.in: git transition - set VCWITNESS appropriately for git.
|
||||
|
||||
All bzr revision IDS, and all CVS revision IDs for which a commit
|
||||
could be identified, were changed to time-date!committer version
|
||||
stamps. All .cvsignore files in the history became .gitignore
|
||||
files. Fixes-bug annotations from bzr were copied into the
|
||||
corresponding commit comments.
|
||||
|
||||
(The first .cvsignore commit was 1999-09-30T14:07:54Z!fx@gnu.org.
|
||||
The last CVS commit was 2009-12-27T08:11:12Z!cyd@stupidchicken.com.)
|
||||
|
||||
Committer/author email addresses are generally correct for the
|
||||
transition day, not necessarily when the commit was originally made.
|
||||
|
||||
2014-11-10 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.ac (doc/man/emacs.1): Generate it.
|
||||
* Makefile.in (top_bootclean): Remove doc/man/emacs.1.
|
||||
* make-dist: Do not distribute doc/man/emacs.1.
|
||||
|
||||
* configure.ac (etc/refcards/emacsver.tex): Generate it.
|
||||
* Makefile.in (etc-emacsver): New PHONY rule.
|
||||
(bootstrap-clean): Delete etc/refcards/emacsver.tex.
|
||||
|
||||
* configure.ac (doc/emacs/emacsver.texi): Generate it.
|
||||
* make-dist (doc/emacs/emacsver.texi) [update]: No longer check it.
|
||||
|
||||
2014-11-08 Dani Moncayo <dmoncayo@gmail.com>
|
||||
|
||||
* build-aux/msys-to-w32: Simplify the initial over-engineered
|
||||
interface, and the implementation.
|
||||
* Makefile.in (epaths-force-w32): Update for the above. Also
|
||||
simplify, assuming that the shell is bash (which is the case in MSYS).
|
||||
(msys_w32prefix_subst, msys_sed_sh_escape): Remove (no longer used).
|
||||
|
||||
2014-11-05 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (QUIET_SUBMAKE): Remove.
|
||||
(install-info, uninstall): Use --no-print-directory. (Bug#18908)
|
||||
|
||||
2014-10-25 Eric S. Raymond <esr@thyrsus.com>
|
||||
|
||||
* autogen.sh: Neutralize language specific to a repository type.
|
||||
|
||||
2014-10-23 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* Makefile.in (ACLOCAL_INPUTS): Omit unnecessary use of 'wildcard'.
|
||||
|
||||
Fix race in 'make info/dir', and speed it up.
|
||||
* Makefile.in (AWK, srcdir_doc_info_dir_inputs, info_dir_inputs):
|
||||
New macros.
|
||||
(clean): Remove info-dir.*.
|
||||
(info_dir_deps): Depend on make-info-dir too.
|
||||
(${srcdir}/info/dir): Make sure info directory exists.
|
||||
Don't call pwd; just redirect make-info-dir's stdout to temp file.
|
||||
* build-aux/make-info-dir: Send output to stdout.
|
||||
Take input file names from args.
|
||||
Fix a "FIXME inefficient looping" by using awk's associative arrays.
|
||||
Basically, this rewrites the script from scratch, and speeds up
|
||||
'make info/dir' from 2.6s to 0.07s on my platform.
|
||||
|
||||
2014-10-20 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Merge in all changes up to 24.4 release.
|
||||
|
||||
2014-10-19 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib, incorporating:
|
||||
2014-10-18 readlinkat: port to AIX 7.1
|
||||
2014-10-07 fcntl: fix error reporting by dupfd
|
||||
* lib/fcntl.c, lib/readlinkat.c, lib/unistd.in.h, m4/readlinkat.m4:
|
||||
* m4/unistd_h.m4: Update from gnulib.
|
||||
* lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
|
||||
|
||||
2014-10-17 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.ac: Simplify OS X $canonical tests.
|
||||
|
||||
2014-10-15 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.ac: Move the OSX 10.6 test.
|
||||
|
||||
2014-10-15 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* .bzrignore: Add uni-brackets.el.
|
||||
|
||||
2014-10-14 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.ac: apple-darwin powerpc is unported.
|
||||
Require OSX >= 10.6 even if --with-ns is not given.
|
||||
|
||||
2014-10-12 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* configure.ac (LD_SWITCH_SYSTEM_TEMACS) [CYGWIN]: Set stack size
|
||||
to 8 MB. (Bug#18438)
|
||||
|
||||
2014-10-12 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.ac: Require OSX 10.6. Remove NSInteger test,
|
||||
use nsfont for Gnustep, macfont for OSX.
|
||||
|
||||
2014-10-12 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Fix putenv race conditions that can crash Emacs (Bug#8705).
|
||||
* configure.ac (LOCALTIME_CACHE): Remove.
|
||||
We needn't worry about SunOS 4 any more; Sun dropped support in 2003.
|
||||
All uses of LOCALTIME_CACHE removed. This simplifies the fix.
|
||||
(tzalloc): Add check for this function.
|
||||
|
||||
2014-10-06 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.ac: Add -Wno-string-plus-int for clang.
|
||||
|
||||
2014-10-04 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.ac: Silence warning with some old Xrandr.h. (Bug#18465)
|
||||
|
||||
2014-10-03 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* configure.ac: Port to strict POSIX shells on non-MinGW (Bug#18612).
|
||||
|
||||
2014-09-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* README: Bump version to 25.0.50.
|
||||
|
||||
* configure.ac (AC_INIT): Bump version to 25.0.50.
|
||||
|
||||
2014-09-29 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* configure.ac (HAVE_STATEMENT_EXPRESSIONS): Remove.
|
||||
For USE_STACK_LISP_OBJECTS, we always assume __GNUC__.
|
||||
|
||||
2014-09-27 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* configure.ac [CYGWIN]: Enable sound support.
|
||||
|
||||
2014-09-25 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* configure.ac (MAKEINFO): Allow 'makeinfo' to be called 'texi2any'.
|
||||
|
||||
2014-09-23 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib, incorporating:
|
||||
2014-09-11 fcntl-h: fix compilation with Intel C++ compiler
|
||||
2014-09-04 pthread, pthread_sigmask, threadlib: port to Ubuntu 14.04
|
||||
|
||||
2014-09-22 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.ac: Increase headerpad_extra to 1000, update the comment
|
||||
about load commands (Bug#18505).
|
||||
|
||||
2014-09-15 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* configure.ac (HAVE_SOUND): Check for mmsystem.h header that
|
||||
defines the sound stuff on MS-Windows. (Bug#18463)
|
||||
|
||||
2014-09-10 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Improve the experimental local and scoped allocation.
|
||||
* configure.ac (HAVE_STRUCT_ATTRIBUTE_ALIGNED)
|
||||
(HAVE_STATEMENT_EXPRESSIONS): New configure-time checks.
|
||||
|
||||
2014-09-07 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Expand @AM_DEFAULT_VERBOSITY@ even if Automake is old (Bug#18415).
|
||||
* configure.ac: Assume verbose output for older Automake.
|
||||
|
||||
2014-09-04 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* configure.ac (MAKEINFO): Clean up some configuration bitrot.
|
||||
MAKEINFO is already set before we get here, so no need to call AC_PATH_PROG.
|
||||
Bypass $am_missing_run. Simplify version-number checking.
|
||||
|
||||
2014-09-02 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib, incorporating:
|
||||
2014-09-02 gnulib-common.m4: port to GCC 4.2.1 and Sun Studio 12 C++
|
||||
2014-09-01 manywarnings: add GCC 4.9 warnings
|
||||
* m4/gnulib-common.m4, m4/manywarnings.m4: Update from gnulib.
|
||||
|
||||
2014-09-01 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
--enable-silent-rules now suppresses more chatter.
|
||||
* INSTALL: Document this.
|
||||
|
||||
Clean up extern decls a bit.
|
||||
* configure.ac (WERROR_CFLAGS): Don't disable -Wnested-externs.
|
||||
While we're at it, don't disable -Wlogical-op either.
|
||||
|
||||
2014-08-31 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* configure.ac (MAKE): Export it, for config.status.
|
||||
Needed on AIX when 'configure' infers MAKE=gmake.
|
||||
(__restrict_arr): Remove; no longer used.
|
||||
|
||||
2014-08-30 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Vector-sorting fixes (Bug#18361).
|
||||
* configure.ac (qsort_r): Remove, as we no longer use qsort-like
|
||||
functions.
|
||||
* lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
|
||||
* lib/vla.h, m4/vararrays.m4: New files, copied from gnulib.
|
||||
* lib/stdlib.in.h, m4/stdlib_h.m4: Sync from gnulib, incorporating:
|
||||
2014-08-29 qsort_r: new module, for GNU-style qsort_r
|
||||
The previous two files' changes are boilerplate generated by
|
||||
admin/merge-gnulib, and should not affect Emacs.
|
||||
|
||||
2014-08-29 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* configure.ac (AC_CHECK_FUNCS): Check for qsort_r.
|
||||
|
||||
2014-08-28 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* configure.ac (HYBRID_MALLOC): New macro; define to use gmalloc
|
||||
before dumping and the system malloc after dumping. Define on
|
||||
Cygwin. (Bug#18222)
|
||||
|
||||
2014-08-28 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (appdatadir): New variable.
|
||||
(install-etc, uninstall, clean): Handle etc/emacs.appdata.xml.
|
||||
|
||||
2014-08-27 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Improve robustness of new string-collation code (Bug#18051).
|
||||
* configure.ac (newlocale): Check for this, not for uselocale.
|
||||
|
||||
2014-08-26 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
Detect features needed to handle C stack overflows.
|
||||
* configure.ac: Check for sigaltstack and related sigaction
|
||||
support. Unconditionally check for sigsetjmp and siglongjmp.
|
||||
(HAVE_STACK_OVERFLOW_HANDLING): Define if we can support it.
|
||||
|
||||
(HAVE_LINUX_SYSINFO): Avoid false positive on Solaris.
|
||||
|
||||
2014-08-25 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* configure.ac (G_SLICE_ALWAYS_MALLOC): Remove obsolete macro.
|
||||
|
||||
2014-08-25 Christoph Scholtes <cschol2112@gmail.com>
|
||||
|
||||
* INSTALL.REPO: Remove reference to obsolete configure scripts
|
||||
on non-Posix platforms (Bug#18323).
|
||||
|
||||
2014-08-24 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* configure.ac: Check also for the uselocale function. (Bug#18051)
|
||||
|
||||
2014-08-23 Karol Ostrovsky <karol.ostrovsky@gmail.com> (tiny change)
|
||||
|
||||
* configure.ac: Accept "*-mingw*", not just "*-mingw32", as
|
||||
canonical name of a MinGW build, because using MSYS2 'uname'
|
||||
produces "MINGW64".
|
||||
|
||||
2014-08-21 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* configure.ac (HAVE_XPM): Explain the use of CPPFLAGS in the
|
||||
Cygwin-w32 build. (Bug#18302)
|
||||
|
||||
2014-08-11 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Don't prevent random file systems from being unmounted (Bug#18232).
|
||||
This fix relies on having the 'fchdir' function, and on having
|
||||
"." be searchable (or at least readable, on platforms lacking O_SEARCH),
|
||||
but that's good enough to handle the vast majority of cases and the
|
||||
remaining folks can just live with the annoyance of file systems
|
||||
that occasionally can't be unmounted.
|
||||
* configure.ac (fchdir): New function to check for.
|
||||
* lib/save-cwd.c: Copy from gnulib, except omit the part that
|
||||
allocates memory, since that can cause problems in Emacs.
|
||||
* lib/save-cwd.h: Copy from gnulib.
|
||||
|
||||
2014-08-10 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* config.bat: Fix some confusing wording.
|
||||
|
||||
2014-08-09 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* config.bat: Fix EOL format in lines modified by last commit.
|
||||
|
||||
2014-08-09 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* make-dist (files): Remove msdos/is_exec.c and sigaction.c.
|
||||
* config.bat: Require DJGPP 2.02 or later.
|
||||
|
||||
2014-08-09 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib, incorporating:
|
||||
2014-08-07 getdtablesize: fall back on sysconf (_SC_OPEN_MAX)
|
||||
2014-08-05 sys_select: fix FD_ZERO problem on Solaris 10
|
||||
* lib/getdtablesize.c, lib/sys_select.in.h: Update from gnulib.
|
||||
|
||||
2014-08-07 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* README: ``MSDOG'' becomes ``MS-DOS''.
|
||||
|
||||
2014-08-04 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib, incorporating:
|
||||
2014-08-04 extern-inline: port to FreeBSD, DragonFly
|
||||
* lib/gnulib.mk: Regenerate (comment change only).
|
||||
* m4/extern-inline.m4: Update from gnulib.
|
||||
|
||||
2014-08-02 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* configure.ac (HAVE_TIMERFD): Also check for TFD_NONBLOCK,
|
||||
since the code is using TFD_NONBLOCK now.
|
||||
|
||||
2014-07-31 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Simplify timerfd configuration and fix some minor glitches.
|
||||
|
@ -226,6 +814,7 @@
|
|||
dumped heap size depending on 32/64bits arch on Windows.
|
||||
Don't check for pthreads.h on MinGW32/64, it gets in the way.
|
||||
Use mmap(2) for buffers and system malloc for MinGW32/64.
|
||||
(EMACS_HEAPSIZE): Remove.
|
||||
|
||||
2014-05-27 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
|
@ -1380,8 +1969,8 @@
|
|||
|
||||
2013-07-29 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* INSTALL (DETAILED BUILDING AND INSTALLATION): Add
|
||||
--without-file-notification to --without-all.
|
||||
* INSTALL (DETAILED BUILDING AND INSTALLATION):
|
||||
Add --without-file-notification to --without-all.
|
||||
|
||||
2013-07-29 Xue Fuqiao <xfq.free@gmail.com>
|
||||
|
||||
|
@ -1654,8 +2243,8 @@
|
|||
CONFIG_SITE for the MSYS build on MS-Windows.
|
||||
(Makefile): Use $(CFG).
|
||||
|
||||
* .bzrignore: Ignore *.res, *.tmp, and *.map. Remove
|
||||
src/emacs.res.
|
||||
* .bzrignore: Ignore *.res, *.tmp, and *.map.
|
||||
Remove src/emacs.res.
|
||||
|
||||
2013-05-16 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
|
@ -2063,7 +2652,7 @@
|
|||
2012-12-13 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* Makefile.in (install-info): Use `${MAKE} -s' for echo-info.
|
||||
(uninstall): Likewise. (Bug#13143)
|
||||
(uninstall): Likewise. (Bug#13142)
|
||||
|
||||
2012-12-11 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
|
@ -8181,7 +8770,7 @@
|
|||
|
||||
* configure.in (HAVE_XIM): Define if XIM is available.
|
||||
|
||||
2003-07-29 Tim Van Holder <tim.vanholder@anubex.com> (tiny change)
|
||||
2003-07-29 Tim Van Holder <tim.vanholder@anubex.com>
|
||||
|
||||
* configure.in: The function gtk_window_set_icon_from_file was
|
||||
introduced in GTK+ 2.2, so check for that release.
|
||||
|
@ -8415,7 +9004,7 @@
|
|||
|
||||
* configure.in (*-sunos5.8*, *-solaris2.8*): New configurations.
|
||||
|
||||
2002-11-11 Tim Van Holder <tim.vanholder@anubex.com> (tiny change)
|
||||
2002-11-11 Tim Van Holder <tim.vanholder@anubex.com>
|
||||
|
||||
* Makefile.in (install-arch-indep): Prepend $(srcdir)/ to lisp.
|
||||
|
||||
|
@ -13269,7 +13858,7 @@
|
|||
detail: -with-x... and --srcdir.
|
||||
(options, boolean_opts): Delete; we don't have enough options to
|
||||
make this worthwhile.
|
||||
(prefix, bindir, lisppath, datadir, libdir, lockdir): Deleted,
|
||||
(prefix, bindir, lisppath, datadir, libdir, lockdir): Delete,
|
||||
along with the code which supported them; these should be set as
|
||||
arguments to the top-level make.
|
||||
(config_h_opts): Since this no longer doubles as a list of option
|
||||
|
|
146
INSTALL
146
INSTALL
|
@ -1,6 +1,5 @@
|
|||
GNU Emacs Installation Guide
|
||||
Copyright (C) 1992, 1994, 1996-1997, 2000-2014 Free Software Foundation,
|
||||
Inc.
|
||||
Copyright (C) 1992, 1994, 1996-1997, 2000-2014 Free Software Foundation, Inc.
|
||||
See the end of the file for license conditions.
|
||||
|
||||
|
||||
|
@ -34,9 +33,9 @@ some of the steps manually. The more detailed description in the other
|
|||
sections of this guide will help you do that, so please refer to those
|
||||
sections if you need to.
|
||||
|
||||
1. Unpacking the Emacs 24.1 release requires about 180 MB of free
|
||||
disk space. Building Emacs uses about another 70 MB of space.
|
||||
The final installed Emacs uses about 110 MB of disk space.
|
||||
1. Unpacking the Emacs 24 release requires about 200 MB of free
|
||||
disk space. Building Emacs uses about another 200 MB of space.
|
||||
The final installed Emacs uses about 150 MB of disk space.
|
||||
This includes the space-saving that comes from automatically
|
||||
compressing the Lisp source files on installation.
|
||||
|
||||
|
@ -208,24 +207,11 @@ corresponding command is `yum-builddep emacs'.
|
|||
|
||||
DETAILED BUILDING AND INSTALLATION:
|
||||
|
||||
(This is for a Unix or Unix-like system. For MS-DOS and MS Windows 3.X,
|
||||
see msdos/INSTALL. For later versions of MS Windows, see the file
|
||||
nt/INSTALL. For GNUstep and Mac OS X, see nextstep/INSTALL.)
|
||||
(This is for a Unix or Unix-like system. For GNUstep and Mac OS X,
|
||||
see nextstep/INSTALL. For non-ancient versions of MS Windows, see
|
||||
the file nt/INSTALL. For MS-DOS and MS Windows 3.X, see msdos/INSTALL.)
|
||||
|
||||
1) Make sure your system has enough swapping space allocated to handle
|
||||
a program whose pure code is 1.5 MB and whose data area is at
|
||||
least 2.8 MB and can reach 100 MB or more. If the swapping space is
|
||||
insufficient, you will get an error in the command `temacs -batch -l
|
||||
loadup dump', found in `./src/Makefile.in', or possibly when
|
||||
running the final dumped Emacs. (This should not be an issue
|
||||
on any recent system.)
|
||||
|
||||
Building Emacs requires about 230 MB of disk space (including the
|
||||
Emacs sources). Once installed, Emacs occupies about 120 MB in the file
|
||||
system where it is installed; this includes the executable files, Lisp
|
||||
libraries, miscellaneous data files, and on-line documentation. If
|
||||
the building and installation take place in different directories,
|
||||
then the installation procedure momentarily requires 230+120 MB.
|
||||
1) See the basic installation summary above for the disk space requirements.
|
||||
|
||||
2) In the unlikely event that `configure' does not detect your system
|
||||
type correctly, consult `./etc/MACHINES' to see what --host, --build
|
||||
|
@ -264,8 +250,7 @@ Gtk or Motif, if you have the Xaw3d library installed (see
|
|||
"Image support libraries" above for Xaw3d availability).
|
||||
|
||||
You can tell configure where to search for GTK by giving it the
|
||||
argument PKG_CONFIG='/full/name/of/pkg-config'. GTK version 2.6 or
|
||||
newer is required for Emacs.
|
||||
argument PKG_CONFIG='/full/name/of/pkg-config'.
|
||||
|
||||
Emacs will autolaunch a D-Bus session bus, when the environment
|
||||
variable DISPLAY is set, but no session bus is running. This might be
|
||||
|
@ -328,6 +313,11 @@ and is useful with GNU-compatible compilers. On a recent GNU system
|
|||
there should be no warnings; on older and on non-GNU systems the
|
||||
generated warnings may still be useful.
|
||||
|
||||
Use --enable-silent-rules to cause 'make' to chatter less. This is
|
||||
helpful when combined with options like --enable-gcc-warnings that
|
||||
generate long shell-command lines. 'make V=0' also suppresses the
|
||||
chatter.
|
||||
|
||||
Use --enable-link-time-optimization to enable link-time optimizer. If
|
||||
you're using GNU compiler, this feature is supported since version 4.5.0.
|
||||
If `configure' can determine number of online CPUS on your system, final
|
||||
|
@ -369,8 +359,7 @@ without sound support.
|
|||
`configure' doesn't do any compilation or installation itself.
|
||||
It just creates the files that influence those things:
|
||||
`./Makefile' in the top-level directory and several subdirectories;
|
||||
and `./src/config.h'. For details on exactly what it does, see the
|
||||
section called `CONFIGURATION BY HAND', below.
|
||||
and `./src/config.h'.
|
||||
|
||||
When it is done, `configure' prints a description of what it did and
|
||||
creates a shell script `config.status' which, when run, recreates the
|
||||
|
@ -425,11 +414,6 @@ those libraries are. For example:
|
|||
./configure \
|
||||
PKG_CONFIG_PATH='/usr/local/alsa/lib/pkgconfig:/opt/gtk+-2.8/lib/pkgconfig'
|
||||
|
||||
The work of `configure' can be done by editing various files in the
|
||||
distribution, but using `configure' is easier. See the section called
|
||||
"CONFIGURATION BY HAND" below if you want to do the configuration
|
||||
yourself.
|
||||
|
||||
3b) To build in a separate directory, go to that directory
|
||||
and run the program `configure' as follows:
|
||||
|
||||
|
@ -439,9 +423,6 @@ SOURCE-DIR refers to the top-level Emacs source directory which is
|
|||
where Emacs's configure script is located. `configure' looks for the
|
||||
Emacs source code in the directory that `configure' is in.
|
||||
|
||||
(Do not try to build in a separate directory by creating many links to
|
||||
the real source directory--there is no need, and installation will fail.)
|
||||
|
||||
4) Put into `./lisp/site-init.el' or `./lisp/site-load.el' any Emacs
|
||||
Lisp code you want Emacs to load before it is dumped out. Use
|
||||
site-load.el for additional libraries if you arrange for their
|
||||
|
@ -483,8 +464,7 @@ installed locations, with `make install'. By default, Emacs's files
|
|||
are installed in the following directories:
|
||||
|
||||
`/usr/local/bin' holds the executable programs users normally run -
|
||||
`emacs', `etags', `ctags', `emacsclient', and
|
||||
`grep-changelog'.
|
||||
`emacs', `etags', `ctags', `emacsclient'.
|
||||
|
||||
`/usr/local/share/emacs/VERSION/lisp' holds the Emacs Lisp library;
|
||||
`VERSION' stands for the number of the Emacs version
|
||||
|
@ -554,11 +534,7 @@ to enable it to write the lock files. We believe this is safe.
|
|||
9) You are done! You can remove executables and object files from
|
||||
the build directory by typing `make clean'. To also remove the files
|
||||
that `configure' created (so you can compile Emacs for a different
|
||||
configuration), type `make distclean'. If you don't need some, or all
|
||||
of the input methods from the Leim package, you can remove the
|
||||
unneeded files in the leim subdirectories of your site's lisp
|
||||
directory (usually /usr/local/share/emacs/VERSION/).
|
||||
|
||||
configuration), type `make distclean'.
|
||||
|
||||
|
||||
MAKE VARIABLES
|
||||
|
@ -666,94 +642,6 @@ Makefiles for the subdirectories, so you don't have to specify them
|
|||
when running make in the subdirectories.
|
||||
|
||||
|
||||
CONFIGURATION BY HAND
|
||||
|
||||
This should not be necessary and is not recommended. Instead of
|
||||
running the `configure' program, you have to perform the following steps.
|
||||
|
||||
1) Copy `./src/config.in' to `./src/config.h'.
|
||||
|
||||
2) Edit `./src/config.h' to set the right options for your system.
|
||||
|
||||
3) Create `Makefile' files in various directories from the
|
||||
corresponding `Makefile.in' files. This isn't so hard, just a matter
|
||||
of editing in appropriate substitutions for the @...@ constructs.
|
||||
|
||||
The `configure' script is built from `configure.ac' by the
|
||||
`autogen.sh' script, which checks that `autoconf' and other build
|
||||
tools are sufficiently up to date and then runs the build tools.
|
||||
|
||||
BUILDING GNU EMACS BY HAND
|
||||
|
||||
Once Emacs is configured, running `make' in the top directory performs
|
||||
the following steps.
|
||||
|
||||
1) Run `make epaths-force' in the top directory. This produces
|
||||
`./src/epaths.h' from the template file `./src/epaths.in', changing
|
||||
the paths to the values specified in `./Makefile'.
|
||||
|
||||
2) Go to directory `./lib' and run `make'. This creates include files
|
||||
and libraries used in later steps.
|
||||
|
||||
3) Go to directory `./lib-src' and run `make'. This creates
|
||||
executables named `etags', `make-docfile', and others.
|
||||
|
||||
4) Go to directory `./src' and run `make'. This refers to files in
|
||||
the `./lisp', `./lib', and `./lib-src' subdirectories using names
|
||||
`../lisp', `../lib', and `../lib-src'.
|
||||
|
||||
This creates a file `./src/emacs' which is the runnable Emacs,
|
||||
which has another name that contains a version number.
|
||||
Each time you do this, that version number increments in the last place.
|
||||
|
||||
It also creates a file in `./etc' whose name is `DOC' followed by the
|
||||
current Emacs version. This file contains documentation strings for
|
||||
all the functions in Emacs. Each time you run make to make a new
|
||||
emacs, a new DOC file with a new name is made. You must keep the DOC
|
||||
file for an Emacs version as long as you keep using that Emacs version.
|
||||
|
||||
|
||||
INSTALLATION BY HAND
|
||||
|
||||
The steps below are done by running `make install' in the main
|
||||
directory of the Emacs distribution.
|
||||
|
||||
1) Copy `./lisp' and its subdirectories, `./etc', and the executables
|
||||
in `./lib-src' to their final destinations, as selected in `./src/epaths.h'.
|
||||
|
||||
Strictly speaking, not all of the executables in `./lib-src' need be copied.
|
||||
- The programs `hexl', `movemail', `profile', and `rcs2log'
|
||||
are used by Emacs; they do need to be copied.
|
||||
- The programs `etags', `ctags', and `emacsclient' are intended to be
|
||||
run by users; they are handled below.
|
||||
- The program `make-docfile' was used in building Emacs, and is
|
||||
not needed any more.
|
||||
|
||||
2) Copy the files in `./info' to the place specified in
|
||||
`./lisp/site-init.el' or `./lisp/info.el'. Note that if the
|
||||
destination directory already contains a file named `dir', you
|
||||
probably don't want to replace it with the `dir' file in the Emacs
|
||||
distribution. Instead, you should make sure that the existing `dir'
|
||||
file contains an appropriate menu entry for the Emacs info.
|
||||
|
||||
3) Copy `./src/emacs' to `/usr/local/bin', or to some other directory
|
||||
in users' search paths. `./src/emacs' has an alternate name
|
||||
`./src/emacs-EMACSVERSION'; you may wish to make a symbolic link named
|
||||
`/usr/local/bin/emacs' pointing to that alternate name, as an easy way
|
||||
of installing different versions.
|
||||
|
||||
You can delete `./src/temacs'.
|
||||
|
||||
4) Copy the programs `emacsclient', `ctags', and `etags' from `./lib-src'
|
||||
to `/usr/local/bin'. These programs are intended for users to run.
|
||||
|
||||
5) Copy the man pages in `./doc/man' into the appropriate man directory.
|
||||
|
||||
6) The files in the `./src' subdirectory, except for `emacs', are not
|
||||
used by Emacs once it is built. However, it is very desirable to keep
|
||||
the source on line for debugging.
|
||||
|
||||
|
||||
PROBLEMS
|
||||
|
||||
See the file `./etc/PROBLEMS' for a list of various problems sometimes
|
||||
|
|
|
@ -52,11 +52,6 @@ If either of the above partial procedures fails, try 'make bootstrap'.
|
|||
If CPU time is not an issue, 'make bootstrap' is the most thorough way
|
||||
to rebuild, and avoid any spurious problems.
|
||||
|
||||
Users of non-Posix systems (MS-Windows, etc.) should run the
|
||||
platform-specific configuration scripts ('nt/configure.bat',
|
||||
'config.bat', etc.) before 'make'; the rest of the procedure is
|
||||
applicable to those systems as well.
|
||||
|
||||
Because the repository version of Emacs is a work in progress, it will
|
||||
sometimes fail to build. Please wait a day or so (and check the
|
||||
archives of the emacs-buildstatus, emacs-devel, and bug-gnu-emacs
|
||||
|
|
96
Makefile.in
96
Makefile.in
|
@ -67,10 +67,6 @@ CDPATH=
|
|||
# If Make doesn't predefine MAKE, set it here.
|
||||
@SET_MAKE@
|
||||
|
||||
# Prevent submakes from outputting "Entering directory ..." and
|
||||
# "Leaving directory..." diagnostics that would mess up 'make echo-info'.
|
||||
QUIET_SUBMAKE = MAKELEVEL=0
|
||||
|
||||
# ==================== Things `configure' Might Edit ====================
|
||||
|
||||
cache_file = @cache_file@
|
||||
|
@ -80,6 +76,7 @@ AUTOCONF = @AUTOCONF@
|
|||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AWK = @AWK@
|
||||
|
||||
EXEEXT=@EXEEXT@
|
||||
|
||||
|
@ -179,6 +176,9 @@ x_default_search_path=@x_default_search_path@
|
|||
# Where the etc/emacs.desktop file is to be installed.
|
||||
desktopdir=$(datarootdir)/applications
|
||||
|
||||
# Where the etc/emacs.appdata.xml file is to be installed.
|
||||
appdatadir=$(datarootdir)/appdata
|
||||
|
||||
# Where the etc/images/icons/hicolor directory is to be installed.
|
||||
icondir=$(datarootdir)/icons
|
||||
|
||||
|
@ -259,7 +259,7 @@ MKDIR_P = @MKDIR_P@
|
|||
# Create a link to a file in the same directory as the target.
|
||||
LN_S_FILEONLY = @LN_S_FILEONLY@
|
||||
|
||||
# We use gzip to compress installed .el files.
|
||||
# We use gzip to compress installed .el and some .txt files.
|
||||
GZIP_PROG = @GZIP_PROG@
|
||||
|
||||
# ============================= Targets ==============================
|
||||
|
@ -288,7 +288,18 @@ COPYDESTS = "$(DESTDIR)${etcdir}" "$(DESTDIR)${lispdir}"
|
|||
|
||||
all: ${SUBDIR} info
|
||||
|
||||
.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32
|
||||
.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 etc-emacsver
|
||||
|
||||
# If configure were to just generate emacsver.tex from emacsver.tex.in
|
||||
# in the normal way, the timestamp of emacsver.tex would always be
|
||||
# newer than that of the pdf files, which are prebuilt in release tarfiles.
|
||||
# So we use this rule, and move-if-change, to avoid that.
|
||||
etc-emacsver:
|
||||
majorversion=`echo ${version} | sed 's/\..*//'`; \
|
||||
sed "s/[@]majorversion@/$${majorversion}/" \
|
||||
${srcdir}/etc/refcards/emacsver.tex.in > emacsver.tex.$$$$ && \
|
||||
${srcdir}/build-aux/move-if-change emacsver.tex.$$$$ \
|
||||
${srcdir}/etc/refcards/emacsver.tex
|
||||
|
||||
removenullpaths=sed -e 's/^:*//' -e 's/:*$$//g' -e 's/::*/:/g'
|
||||
|
||||
|
@ -323,14 +334,6 @@ epaths-force:
|
|||
-e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \
|
||||
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
|
||||
|
||||
# Replace "${w32prefix}" with '%emacs_dir%' (which expands to install
|
||||
# directory at runtime).
|
||||
msys_w32prefix_subst=sed -e 's!\(^\|;\)'"$${w32prefixpattern}"'\([;/]\|$$\)!\1%emacs_dir%\2!g'
|
||||
|
||||
# Quote Sed special characters (except backslash and newline) with
|
||||
# a double backslash.
|
||||
msys_sed_sh_escape=sed -e 's/[];$$*.^[]/\\\\&/g'
|
||||
|
||||
# The w32 build needs a slightly different editing, and it uses
|
||||
# nt/epaths.nt as the template.
|
||||
#
|
||||
|
@ -342,12 +345,12 @@ msys_sed_sh_escape=sed -e 's/[];$$*.^[]/\\\\&/g'
|
|||
# program that doesn't support MSYS-style paths (e.g. '/c/foo/bar' or
|
||||
# '/foo/bar').
|
||||
epaths-force-w32:
|
||||
@(w32srcdir=`${srcdir}/build-aux/msys-to-w32 "${srcdir}"`; \
|
||||
w32prefix=`${srcdir}/build-aux/msys-to-w32 "${prefix}" N`; \
|
||||
w32prefixpattern=`echo "$${w32prefix}" | ${msys_sed_sh_escape}` ; \
|
||||
w32locallisppath=`${srcdir}/build-aux/msys-to-w32 "${locallisppath}" N ":" "\\;" | ${msys_w32prefix_subst}` ; \
|
||||
@(w32srcdir=`${srcdir}/build-aux/msys-to-w32 "${abs_srcdir}"`; \
|
||||
w32prefix=`${srcdir}/build-aux/msys-to-w32 "${prefix}"`; \
|
||||
w32locallisppath=`${srcdir}/build-aux/msys-to-w32 "${locallisppath}"` ; \
|
||||
w32locallisppath=$${w32locallisppath//$${w32prefix}/"%emacs_dir%"} ; \
|
||||
sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \
|
||||
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath}"'";' \
|
||||
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath//;/\\;}"'";' \
|
||||
-e '/^.*#/s/@VER@/${version}/g' \
|
||||
-e '/^.*#/s/@CFG@/${configuration}/g' \
|
||||
-e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \
|
||||
|
@ -368,12 +371,17 @@ lisp: src
|
|||
lib lib-src lisp nt: Makefile
|
||||
$(MAKE) -C $@ all
|
||||
|
||||
# Ideally, VCSWITNESS should be a file that is modified whenever the
|
||||
# repository registers a commit from either a local checkin or a
|
||||
# repository pull. In git there is no single file that guarantees
|
||||
# this, but the local log for the current head should be close enough.
|
||||
#
|
||||
# Note the use of single quotes in the value of vcswitness.
|
||||
# This passes an unexpanded $srcdir to src's Makefile, which then
|
||||
# expands it using its own value of srcdir (which points to the
|
||||
# source directory of src/).
|
||||
src: Makefile
|
||||
dirstate='.bzr/checkout/dirstate'; \
|
||||
dirstate='.git/logs/HEAD'; \
|
||||
vcswitness='$$(srcdir)/../'$$dirstate; \
|
||||
[ -r "$(srcdir)/$$dirstate" ] || vcswitness=''; \
|
||||
$(MAKE) -C $@ all VCSWITNESS="$$vcswitness"
|
||||
|
@ -400,7 +408,7 @@ $(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
|
|||
# Don't erase these files if make is interrupted while refreshing them.
|
||||
.PRECIOUS: Makefile config.status
|
||||
|
||||
config.status: ${srcdir}/configure ${srcdir}/lisp/version.el
|
||||
config.status: ${srcdir}/configure
|
||||
if [ -x ./config.status ]; then \
|
||||
$(CFG) ./config.status --recheck; \
|
||||
else \
|
||||
|
@ -413,7 +421,7 @@ $(srcdir)/configure: $(AUTOCONF_INPUTS)
|
|||
cd ${srcdir} && ${AUTOCONF}
|
||||
|
||||
ACLOCAL_PATH = @ACLOCAL_PATH@
|
||||
ACLOCAL_INPUTS = $(srcdir)/configure.ac $(wildcard $(srcdir)/m4/*.m4)
|
||||
ACLOCAL_INPUTS = $(srcdir)/configure.ac $(srcdir)/m4/*.m4
|
||||
$(srcdir)/aclocal.m4: $(ACLOCAL_INPUTS)
|
||||
cd $(srcdir) && ACLOCAL_PATH='$(ACLOCAL_PATH)' $(ACLOCAL) -I m4
|
||||
|
||||
|
@ -592,11 +600,12 @@ install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA}
|
|||
subdir="$(DESTDIR)${datadir}/emacs/site-lisp" ; \
|
||||
${write_subdir} || true
|
||||
[ -z "${GZIP_PROG}" ] || { \
|
||||
echo "Compressing *.el ..." && \
|
||||
echo "Compressing *.el etc. ..." && \
|
||||
cd "$(DESTDIR)${lispdir}" && \
|
||||
for f in `find . -name "*.elc" -print | sed 's/.elc$$/.el/'`; do \
|
||||
${GZIP_PROG} -9n "$$f"; \
|
||||
done; \
|
||||
${GZIP_PROG} -9n "../etc/publicsuffix.txt"; \
|
||||
}
|
||||
-chmod -R a+r "$(DESTDIR)${datadir}/emacs/${version}" ${COPYDESTS}
|
||||
|
||||
|
@ -637,7 +646,7 @@ install-info: info
|
|||
[ -f "$(DESTDIR)${infodir}/dir" ] || \
|
||||
[ ! -f ${srcdir}/info/dir ] || \
|
||||
${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \
|
||||
info_misc=`$(QUIET_SUBMAKE) $(MAKE) -s -C doc/misc echo-info`; \
|
||||
info_misc=`$(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
|
||||
cd ${srcdir}/info ; \
|
||||
for elt in ${INFO_NONMISC} $${info_misc}; do \
|
||||
test "$(HAVE_MAKEINFO)" = "no" && test ! -f $$elt && continue; \
|
||||
|
@ -687,6 +696,12 @@ install-etc:
|
|||
${srcdir}/etc/emacs.desktop > $${tmp}; \
|
||||
${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop"; \
|
||||
rm -f $${tmp}
|
||||
umask 022; ${MKDIR_P} "$(DESTDIR)${appdatadir}"
|
||||
tmp=etc/emacs.tmpappdata; rm -f $${tmp}; \
|
||||
sed -e "s/emacs\.desktop/${EMACS_NAME}.desktop/" \
|
||||
${srcdir}/etc/emacs.appdata.xml > $${tmp}; \
|
||||
${INSTALL_DATA} $${tmp} "$(DESTDIR)${appdatadir}/${EMACS_NAME}.appdata.xml"; \
|
||||
rm -f $${tmp}
|
||||
thisdir=`/bin/pwd`; \
|
||||
cd ${iconsrcdir} || exit 1; umask 022 ; \
|
||||
for dir in */*/apps */*/mimetypes; do \
|
||||
|
@ -728,7 +743,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc
|
|||
done
|
||||
-rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}"
|
||||
thisdir=`/bin/pwd`; \
|
||||
(info_misc=`$(QUIET_SUBMAKE) $(MAKE) -s -C doc/misc echo-info`; \
|
||||
(info_misc=`$(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
|
||||
if cd "$(DESTDIR)${infodir}"; then \
|
||||
for elt in ${INFO_NONMISC} $${info_misc}; do \
|
||||
(cd "$${thisdir}"; \
|
||||
|
@ -751,6 +766,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc
|
|||
hicolor/scalable/mimetypes/`echo emacs-document | sed '$(TRANSFORM)'`.svg; \
|
||||
fi)
|
||||
-rm -f "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop"
|
||||
-rm -f "$(DESTDIR)${appdatadir}/${EMACS_NAME}.appdata.xml"
|
||||
for file in snake-scores tetris-scores; do \
|
||||
file="$(DESTDIR)${gamedir}/$${file}"; \
|
||||
[ -s "$${file}" ] || rm -f "$$file"; \
|
||||
|
@ -806,12 +822,13 @@ clean: $(clean_dirs:=_clean)
|
|||
for dir in test/automated; do \
|
||||
[ ! -d $$dir ] || $(MAKE) -C $$dir clean; \
|
||||
done
|
||||
-rm -f etc/emacs.tmpdesktop
|
||||
-rm -f etc/emacs.tmpdesktop etc/emacs.tmpappdata
|
||||
-rm -rf info-dir.*
|
||||
|
||||
### `bootclean'
|
||||
### Delete all files that need to be remade for a clean bootstrap.
|
||||
top_bootclean=\
|
||||
rm -f config.cache config.log
|
||||
rm -f config.cache config.log ${srcdir}/doc/man/emacs.1
|
||||
|
||||
### `distclean'
|
||||
### Delete all files from the current directory that are created by
|
||||
|
@ -844,6 +861,7 @@ bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
|
|||
done
|
||||
[ ! -f config.log ] || mv -f config.log config.log~
|
||||
rm -rf ${srcdir}/info
|
||||
rm -f ${srcdir}/etc/refcards/emacsver.tex
|
||||
${top_bootclean}
|
||||
|
||||
### `maintainer-clean'
|
||||
|
@ -925,13 +943,19 @@ ps: $(PSS)
|
|||
|
||||
info-dir: ${srcdir}/info/dir
|
||||
|
||||
## Not strictly necessary, but speeds things up a bit by stopping
|
||||
## the info-dir rule from running when not needed.
|
||||
## Hopefully doc/misc/*.texi is not too long for some systems?
|
||||
info_dir_deps = ${srcdir}/build-aux/dir_top \
|
||||
${srcdir}/doc/emacs/emacs.texi \
|
||||
${srcdir}/doc/lispintro/emacs-lisp-intro.texi \
|
||||
${srcdir}/doc/lispref/elisp.texi ${srcdir}/doc/misc/*.texi
|
||||
srcdir_doc_info_dir_inputs = \
|
||||
${srcdir}/doc/emacs/emacs.texi \
|
||||
${srcdir}/doc/lispintro/emacs-lisp-intro.texi \
|
||||
${srcdir}/doc/lispref/elisp.texi \
|
||||
$(sort $(wildcard ${srcdir}/doc/misc/*.texi))
|
||||
info_dir_inputs = \
|
||||
../build-aux/dir_top \
|
||||
$(subst ${srcdir}/doc/,,${srcdir_doc_info_dir_inputs})
|
||||
info_dir_deps = \
|
||||
${srcdir}/build-aux/make-info-dir \
|
||||
${srcdir}/build-aux/dir_top \
|
||||
${srcdir_doc_info_dir_inputs}
|
||||
|
||||
## It would be much simpler if info/dir was only created in the
|
||||
## installation location by the install-info rule, but we also
|
||||
|
@ -940,10 +964,12 @@ info_dir_deps = ${srcdir}/build-aux/dir_top \
|
|||
## but then we would need to depend on info-real, which would
|
||||
## slow down parallelization.
|
||||
${srcdir}/info/dir: ${info_dir_deps}
|
||||
${MKDIR_P} ${srcdir}/info
|
||||
tempfile=info-dir.$$$$; \
|
||||
rm -f $${tempfile}; \
|
||||
thisdir=`pwd`; \
|
||||
(cd ${srcdir} && ./build-aux/make-info-dir $${thisdir}/$${tempfile}); \
|
||||
(cd ${srcdir}/doc && \
|
||||
AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \
|
||||
) >$$tempfile && \
|
||||
${srcdir}/build-aux/move-if-change $${tempfile} ${srcdir}/info/dir
|
||||
|
||||
INSTALL_DVI = install-emacs-dvi install-lispref-dvi \
|
||||
|
|
9
README
9
README
|
@ -2,7 +2,7 @@ Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
|||
See the end of the file for license conditions.
|
||||
|
||||
|
||||
This directory tree holds version 24.4.50 of GNU Emacs, the extensible,
|
||||
This directory tree holds version 25.0.50 of GNU Emacs, the extensible,
|
||||
customizable, self-documenting real-time display editor.
|
||||
|
||||
The file INSTALL in this directory says how to build and install GNU
|
||||
|
@ -39,10 +39,7 @@ process of building and installing Emacs. See INSTALL for more
|
|||
detailed information.
|
||||
|
||||
The file `configure.ac' is the input used by the autoconf program to
|
||||
construct the `configure' script. Since Emacs has some configuration
|
||||
requirements that autoconf can't meet directly, and for historical
|
||||
reasons, `configure.ac' uses an unholy marriage of custom-baked
|
||||
configuration code and autoconf macros.
|
||||
construct the `configure' script.
|
||||
|
||||
The shell script `autogen.sh' generates 'configure' and other files by
|
||||
running the GNU build tools autoconf and automake, which in turn use
|
||||
|
@ -84,7 +81,7 @@ There are several subdirectories:
|
|||
`doc/lispref' holds the source code for the Emacs Lisp reference manual.
|
||||
`doc/lispintro' holds the source code for the Introduction to Programming
|
||||
in Emacs Lisp manual.
|
||||
`msdos' holds configuration files for compiling Emacs under MSDOG.
|
||||
`msdos' holds configuration files for compiling Emacs under MS-DOS.
|
||||
`nextstep' holds instructions and some other files for compiling the
|
||||
Nextstep port of Emacs, for GNUstep and Mac OS X Cocoa.
|
||||
`nt' holds various command files and documentation files that pertain
|
||||
|
|
|
@ -19,8 +19,9 @@ __MSDOS__ Ditto.
|
|||
__DJGPP_MINOR__ Minor version number of the DJGPP library; used only in msdos.c and dosfns.c.
|
||||
DOS_NT Compiling for either the MS-DOS or native MS-Windows port.
|
||||
WINDOWSNT Compiling the native MS-Windows (W32) port.
|
||||
__MINGW32__ Compiling the W32 port with the MinGW port of GCC.
|
||||
__MINGW32__ Compiling the W32 port with the MinGW or MinGW-w64 ports of GCC.
|
||||
_MSC_VER Compiling the W32 port with the Microsoft C compiler.
|
||||
MINGW_W64 Compiling the W32 port with the MinGW-w64 port of GCC.
|
||||
DARWIN_OS Compiling on Mac OS X or pure Darwin (and using s/darwin.h).
|
||||
SOLARIS2
|
||||
USG
|
||||
|
@ -368,7 +369,6 @@ HAVE___FPENDING
|
|||
INTERNAL_TERMINAL
|
||||
IS_ANY_SEP
|
||||
IS_DIRECTORY_SEP
|
||||
LOCALTIME_CACHE
|
||||
MAIL_USE_FLOCK
|
||||
MAIL_USE_LOCKF
|
||||
MAIL_USE_POP
|
||||
|
|
240
admin/ChangeLog
240
admin/ChangeLog
|
@ -1,3 +1,241 @@
|
|||
2014-12-14 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* notes/unicode: Track leim/quail file renames.
|
||||
Correct coding system
|
||||
of lisp/international/titdic-cnv.el.
|
||||
|
||||
2014-12-14 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* quick-install-emacs (PUBLIC_LIBSRC_SCRIPTS): Remove, and all uses.
|
||||
* authors.el (authors-valid-file-names): Add grep-changelog.
|
||||
|
||||
2014-12-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* notes/unicode: Don't mention Czech and Slovakian refcards.
|
||||
|
||||
* merge-gnulib (GNULIB_MODULES): Add stddef, for max_align_t.
|
||||
|
||||
2014-12-06 Stephen Leake <stephen_leake@stephe-leake.org>
|
||||
|
||||
* notes/commits: Delete; merge into ./CONTRIBUTE.
|
||||
|
||||
* notes/repo: Move commit, branch info into ./CONTRIBUTE.
|
||||
|
||||
2014-12-01 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* update_autogen: Fix bogosity introduced in 2014-11-16 merge.
|
||||
|
||||
2014-11-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Lessen focus on ChangeLog files, as opposed to change log entries.
|
||||
This is in preparation for generating the former automatically
|
||||
from the latter.
|
||||
* notes/bugtracker, notes/copyright, notes/newfile:
|
||||
ChangeLog -> change log
|
||||
* notes/changelogs: Remove, merging old contents to ...
|
||||
* notes/repo: ... here.
|
||||
|
||||
2014-11-27 David Engster <deng@randomsample.de>
|
||||
|
||||
* gitmerge.el: New file.
|
||||
* notes/git-workflow: Add documentation for using it.
|
||||
|
||||
2014-11-27 Oscar Fuentes <ofv@wanadoo.es>
|
||||
|
||||
* CPP-DEFINES: Mention MINGW_W64.
|
||||
|
||||
2014-11-22 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* admin.el (set-version): No more need to update nt/*.rc.
|
||||
* authors.el (authors-renamed-files-alist): Add .rc.in files.
|
||||
|
||||
2014-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* update_autogen: Merge from emacs-24 (restoring bzr conditionals).
|
||||
|
||||
2014-11-13 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* make-tarball.txt: Make annotated tag and push it out.
|
||||
|
||||
2014-11-11 Eric S. Raymond <esr@thyrsus.com>
|
||||
|
||||
* make-tarball.txt, notes/bugtracker, notes/repo, notes/tags:
|
||||
Git transition.
|
||||
* update-copyright: Use git ls-files.
|
||||
* update_autogen: Remove some bzr conditionals.
|
||||
|
||||
2014-11-10 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* unidata/Makefile.in (${top_srcdir}/src/macuvs.h):
|
||||
Use unmsys--file-name. (Bug#18955)
|
||||
|
||||
2014-11-10 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* admin.el (set-version): No need to update doc/man/emacs.1.
|
||||
|
||||
* admin.el (set-version): No need to update etc/refcards/emacsver.tex.
|
||||
(set-copyright): Update etc/refcards/emacsver.tex.in.
|
||||
|
||||
* admin.el (set-version): No need to update doc/emacs/emacsver.texi.
|
||||
(make-manuals-dist-output-variables): Add top_srcdir.
|
||||
(make-manuals-dist--1): Handle @version@ specially.
|
||||
|
||||
2014-11-09 Eric Ludlam <zappo@gnu.org>
|
||||
|
||||
* grammars/c.by (template-type): Add :template-specifier and
|
||||
:typevar to capture extra details about the template.
|
||||
(opt-post-fcn-modifiers): Splice in the found symbol into the
|
||||
return value correctly.
|
||||
(QUESTION): New punctuation.
|
||||
(expression): Add ternary conditional support.
|
||||
|
||||
* grammars/scheme.by (MODULE): New token.
|
||||
(scheme): Handle expanding the MODULE tag.
|
||||
(scheme-list): Remove closeparen required match.
|
||||
(scheme-in-list): Remove extraneous matches for DEFINE.
|
||||
Add support for MODULE Simplify matching for code & make work.
|
||||
(name-args, name-arg-list, name-arg-expand): Make it work.
|
||||
|
||||
2014-11-09 David Engster <dengste@eml.cc>
|
||||
|
||||
* grammars/c.by (opt-brackets-after-symbol): New.
|
||||
(multi-stage-dereference): Use it. Add rules for explicit
|
||||
matching the last dereference. We cannot just juse
|
||||
'namespace-symbol' as a single rule, since this would match too
|
||||
greedy and mess with parsing default values of variables.
|
||||
|
||||
2014-11-09 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* admin.el (make-manuals-dist-output-variables)
|
||||
(make-manuals-dist--1, make-manuals-dist): New.
|
||||
Replaces doc/*/Makefile.in `dist' rules.
|
||||
|
||||
2014-11-04 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Spelling fixes; tweak explanation of commit messages.
|
||||
* notes/repo: Avoid "DVCS" acronym without first explaining it.
|
||||
Mention using the first line of a ChangeLog as the topic line,
|
||||
and that commit messages should use UTF-8.
|
||||
|
||||
2014-11-01 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* notes/repo (Notes): Reword the stylistic guidance for commit log
|
||||
messages so that they are in line with Emacs development practices
|
||||
and style guidance.
|
||||
|
||||
2014-10-27 Eric S. Raymond <esr@thyrsus.com>
|
||||
|
||||
* notes/bzr: Rename to notes/repo, reorganize to separate
|
||||
VCS-dependent from VCS-independent stuff. Add guidance about
|
||||
commit-comment format under DVCSes.
|
||||
|
||||
* notes/BRANCH: Merged into notes/repo.
|
||||
|
||||
2014-10-20 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Merge in all changes up to 24.4 release.
|
||||
|
||||
2014-10-15 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* unidata/unidata-gen.el (unidata-prop-alist): New properties
|
||||
'paired-bracket' and 'bracket-type', in support of the UBA 6.3.
|
||||
(unidata-gen-table): Support PROP-IDX being a function.
|
||||
(unidata-describe-bidi-bracket-type, unidata-gen-brackets-list)
|
||||
(unidata-gen-bracket-type-list): New functions.
|
||||
(unidata-check): Support checking the 'bracket-type' attribute.
|
||||
(unidata-gen-files): Don't create backups for uni-*.el files.
|
||||
|
||||
* unidata/Makefile.in (${unidir}/charprop.el): Depend on
|
||||
BidiMirroring.txt and BidiBrackets.txt.
|
||||
|
||||
* unidata/BidiBrackets.txt: New file, from Unicode.
|
||||
|
||||
2014-10-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* authors.el (authors-aliases, authors-fixed-case)
|
||||
(authors-obsolete-files-regexps): Additions.
|
||||
(authors-no-scan-regexps): New constant.
|
||||
(authors-no-scan-file-p): New function.
|
||||
(authors): Respect authors-no-scan-file-p.
|
||||
|
||||
2014-10-12 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Fix putenv race conditions with undefined behavior (Bug#8705).
|
||||
* merge-gnulib (GNULIB_MODULES): Add time_r, since Emacs now
|
||||
calls localtime_r and gmtime_r directly.
|
||||
|
||||
2014-10-07 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* unidata/Makefile.in: Check for deleted uni- files. (Bug#18489)
|
||||
(all): Use unifiles rather than charprop.el.
|
||||
(FORCE): New variable and phony rule.
|
||||
(${unidir}/charprop.el): Respect FORCE.
|
||||
(unifiles): New rule.
|
||||
|
||||
* unidata/Makefile.in (unidir): Rename from DSTDIR. Change all uses.
|
||||
(charprop.el, install): Remove rules.
|
||||
(clean): Simplify.
|
||||
|
||||
2014-10-04 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* authors.el (authors-renamed-files-alist): Add package-x-test.el
|
||||
|
||||
2014-10-01 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* unidata/unidata-gen.el (unidata-gen-table-word-list): Use alist-get
|
||||
and cl-incf.
|
||||
|
||||
2014-09-08 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* unidata/unidata-gen.el (unidata-check): Bring this function up
|
||||
to date with the currently supported methods of generating Unicode
|
||||
property tables. Add a comment with a description how to invoke
|
||||
the check. Update the copyright years in the reference to the
|
||||
Unicode data files we use.
|
||||
|
||||
2014-08-30 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Vector-sorting fixes (Bug#18361).
|
||||
* merge-gnulib (GNULIB_MODULES): Add vla.
|
||||
|
||||
2014-08-30 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* authors.el (authors): Fix last change so it works for MS-Windows
|
||||
as well.
|
||||
|
||||
2014-08-29 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* authors.el (authors): Use LOCALE argument of `string-collate-lessp'.
|
||||
|
||||
2014-08-28 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* authors.el (authors-aliases): Addition.
|
||||
|
||||
2014-08-26 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* authors.el (authors-ignored-files, authors-valid-file-names)
|
||||
(authors-renamed-files-alist): Additions.
|
||||
(authors-renamed-files-alist): Revert 2014-08-09 change.
|
||||
(authors): Sort authors in utf-8 order. (Bug#2263)
|
||||
|
||||
2014-08-09 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* notes/copyright: Remove mention of msdos/is_exec.c and
|
||||
sigaction.c.
|
||||
* authors.el (authors-renamed-files-alist): Remove is_exec.c.
|
||||
|
||||
2014-08-07 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* notes/exit-value: Remove specific discussion of VMS.
|
||||
|
||||
2014-08-07 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
Refer to MS-DOS using the same name everywhere.
|
||||
|
||||
* FOR-RELEASE: ``MS-DOG'', ``MSDOG'' and ``msdog'' become
|
||||
``MS-DOS''.
|
||||
* MAINTAINERS: ditto.
|
||||
|
||||
2014-07-14 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Use binary-io module, O_BINARY, and "b" flag (Bug#18006).
|
||||
|
@ -1934,7 +2172,7 @@
|
|||
|
||||
2006-04-17 Ramprasad B <ramprasad_i82@yahoo.com>
|
||||
|
||||
* ./* (Copyright): Updated Copyright year(s).
|
||||
* ./* (Copyright): Update Copyright year(s).
|
||||
|
||||
2006-02-24 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
|
|
|
@ -202,8 +202,8 @@ mark.texi
|
|||
mini.texi
|
||||
misc.texi
|
||||
modes.texi
|
||||
msdog.texi
|
||||
msdog-xtra.texi
|
||||
msdos.texi
|
||||
msdos-xtra.texi
|
||||
mule.texi
|
||||
m-x.texi
|
||||
package.texi
|
||||
|
|
|
@ -31,12 +31,13 @@ Eli Zaretskii
|
|||
src/msdos.[ch]
|
||||
src/dosfns.[ch]
|
||||
src/w16select.c
|
||||
src/unexcoff.c
|
||||
lisp/term/internal.el
|
||||
lisp/term/pc-win.el
|
||||
lisp/dos-fns.el
|
||||
lisp/dos-w32.el
|
||||
lisp/dos-vars.el
|
||||
doc/emacs/msdog.texi
|
||||
doc/emacs/msdos.texi
|
||||
|
||||
Kenichi Handa
|
||||
Mule
|
||||
|
@ -80,14 +81,18 @@ Bastien Guerry
|
|||
Eli Zaretskii
|
||||
doc/*
|
||||
lispref/*
|
||||
info/dir
|
||||
|
||||
src/xfaces.c
|
||||
src/xdisp.c
|
||||
src/term.c
|
||||
src/dispnew.c
|
||||
src/dispextern.h
|
||||
src/frame.c
|
||||
src/dired.c
|
||||
src/unexw32.c
|
||||
src/w32*.[ch]
|
||||
src/window.c
|
||||
nt/*
|
||||
|
||||
lisp/arc-mode.el
|
||||
lisp/menu-bar.el
|
||||
|
@ -97,6 +102,8 @@ Eli Zaretskii
|
|||
lisp/startup.el
|
||||
lisp/w32*.el
|
||||
|
||||
admin/unidata/*
|
||||
|
||||
Stefan Monnier
|
||||
src/intervals.c
|
||||
src/keyboard.c
|
||||
|
@ -181,24 +188,10 @@ src/tparam.c
|
|||
src/undo.c
|
||||
src/unexaix.c
|
||||
src/unexalpha.c
|
||||
src/unexcoff.c
|
||||
src/unexelf.c
|
||||
src/unexhp9k800.c
|
||||
src/unexw32.c
|
||||
src/vm-limit.c
|
||||
src/w32.c
|
||||
src/w32console.c
|
||||
src/w32fns.c
|
||||
src/w32heap.c
|
||||
src/w32inevt.c
|
||||
src/w32menu.c
|
||||
src/w32proc.c
|
||||
src/w32reg.c
|
||||
src/w32select.c
|
||||
src/w32term.c
|
||||
src/w32xfns.c
|
||||
src/widget.c
|
||||
src/window.c
|
||||
src/xfns.c
|
||||
src/xmenu.c
|
||||
src/xrdb.c
|
||||
|
|
160
admin/admin.el
160
admin/admin.el
|
@ -94,79 +94,30 @@ Root must be the root of an Emacs source tree."
|
|||
(rx (and "AC_INIT" (1+ (not (in ?,)))
|
||||
?, (0+ space)
|
||||
(submatch (1+ (in "0-9."))))))
|
||||
(set-version-in-file root "doc/emacs/emacsver.texi" version
|
||||
(rx (and "EMACSVER" (1+ space)
|
||||
(submatch (1+ (in "0-9."))))))
|
||||
(set-version-in-file root "doc/man/emacs.1" version
|
||||
(rx (and ".TH EMACS" (1+ not-newline)
|
||||
"GNU Emacs" (1+ space)
|
||||
(submatch (1+ (in "0-9."))))))
|
||||
;; No longer used, broken in multiple ways, updating version seems pointless.
|
||||
(set-version-in-file root "nt/config.nt" version
|
||||
(rx (and bol "#" (0+ blank) "define" (1+ blank)
|
||||
"VERSION" (1+ blank) "\""
|
||||
(submatch (1+ (in "0-9."))))))
|
||||
;; TODO: msdos could easily extract the version number from
|
||||
;; configure.ac with sed, rather than duplicating the information.
|
||||
(set-version-in-file root "msdos/sed2v2.inp" version
|
||||
(rx (and bol "/^#undef " (1+ not-newline)
|
||||
"define VERSION" (1+ space) "\""
|
||||
(submatch (1+ (in "0-9."))))))
|
||||
;; No longer used, broken in multiple ways, updating version seems pointless.
|
||||
(set-version-in-file root "nt/makefile.w32-in" version
|
||||
(rx (and "VERSION" (0+ space) "=" (0+ space)
|
||||
(submatch (1+ (in "0-9."))))))
|
||||
;; nt/emacs.rc also contains the version number, but in an awkward
|
||||
;; format. It must contain four components, separated by commas, and
|
||||
;; in two places those commas are followed by space, in two other
|
||||
;; places they are not.
|
||||
(let* ((version-components (append (split-string version "\\.")
|
||||
'("0" "0")))
|
||||
(comma-version
|
||||
(concat (car version-components) ","
|
||||
(cadr version-components) ","
|
||||
(cadr (cdr version-components)) ","
|
||||
(cadr (cdr (cdr version-components)))))
|
||||
(comma-space-version
|
||||
(concat (car version-components) ", "
|
||||
(cadr version-components) ", "
|
||||
(cadr (cdr version-components)) ", "
|
||||
(cadr (cdr (cdr version-components))))))
|
||||
(set-version-in-file root "nt/emacs.rc" comma-version
|
||||
(rx (and "FILEVERSION" (1+ space)
|
||||
(submatch (1+ (in "0-9,"))))))
|
||||
(set-version-in-file root "nt/emacs.rc" comma-version
|
||||
(rx (and "PRODUCTVERSION" (1+ space)
|
||||
(submatch (1+ (in "0-9,"))))))
|
||||
(set-version-in-file root "nt/emacs.rc" comma-space-version
|
||||
(rx (and "\"FileVersion\"" (0+ space) ?, (0+ space)
|
||||
?\" (submatch (1+ (in "0-9, "))) "\\0\"")))
|
||||
(set-version-in-file root "nt/emacs.rc" comma-space-version
|
||||
(rx (and "\"ProductVersion\"" (0+ space) ?,
|
||||
(0+ space) ?\" (submatch (1+ (in "0-9, ")))
|
||||
"\\0\"")))
|
||||
;; Likewise for emacsclient.rc
|
||||
(set-version-in-file root "nt/emacsclient.rc" comma-version
|
||||
(rx (and "FILEVERSION" (1+ space)
|
||||
(submatch (1+ (in "0-9,"))))))
|
||||
(set-version-in-file root "nt/emacsclient.rc" comma-version
|
||||
(rx (and "PRODUCTVERSION" (1+ space)
|
||||
(submatch (1+ (in "0-9,"))))))
|
||||
(set-version-in-file root "nt/emacsclient.rc" comma-space-version
|
||||
(rx (and "\"FileVersion\"" (0+ space) ?, (0+ space)
|
||||
?\" (submatch (1+ (in "0-9, "))) "\\0\"")))
|
||||
(set-version-in-file root "nt/emacsclient.rc" comma-space-version
|
||||
(rx (and "\"ProductVersion\"" (0+ space) ?,
|
||||
(0+ space) ?\" (submatch (1+ (in "0-9, ")))
|
||||
"\\0\"")))
|
||||
;; Major version only.
|
||||
(when (string-match "\\([0-9]\\{2,\\}\\)" version)
|
||||
(setq version (match-string 1 version))
|
||||
(set-version-in-file root "src/msdos.c" version
|
||||
(rx (and "Vwindow_system_version" (1+ not-newline)
|
||||
?\( (submatch (1+ (in "0-9"))) ?\))))
|
||||
(set-version-in-file root "etc/refcards/ru-refcard.tex" version
|
||||
"\\\\newcommand{\\\\versionemacs}\\[0\\]\
|
||||
{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs")
|
||||
(set-version-in-file root "etc/refcards/emacsver.tex" version
|
||||
"\\\\def\\\\versionemacs\
|
||||
{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs")))
|
||||
;; Major version only.
|
||||
(when (string-match "\\([0-9]\\{2,\\}\\)" version)
|
||||
(setq version (match-string 1 version))
|
||||
(set-version-in-file root "src/msdos.c" version
|
||||
(rx (and "Vwindow_system_version" (1+ not-newline)
|
||||
?\( (submatch (1+ (in "0-9"))) ?\))))
|
||||
(set-version-in-file root "etc/refcards/ru-refcard.tex" version
|
||||
"\\\\newcommand{\\\\versionemacs}\\[0\\]\
|
||||
{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs"))
|
||||
(message "Setting version numbers...done"))
|
||||
|
||||
;; Note this makes some assumptions about form of short copyright.
|
||||
|
@ -201,7 +152,7 @@ Root must be the root of an Emacs source tree."
|
|||
(set-version-in-file root "etc/refcards/ru-refcard.tex" copyright
|
||||
"\\\\newcommand{\\\\cyear}\\[0\\]\
|
||||
{\\([0-9]\\{4\\}\\)}.+%.+copyright year")
|
||||
(set-version-in-file root "etc/refcards/emacsver.tex" copyright
|
||||
(set-version-in-file root "etc/refcards/emacsver.tex.in" copyright
|
||||
"\\\\def\\\\year\
|
||||
{\\([0-9]\\{4\\}\\)}.+%.+copyright year"))
|
||||
(message "Setting copyrights...done"))
|
||||
|
@ -609,6 +560,89 @@ style=\"text-align:left\">")
|
|||
(setq done t))))
|
||||
(forward-line 1)))))
|
||||
|
||||
|
||||
(defconst make-manuals-dist-output-variables
|
||||
`(("@\\(top_\\)?srcdir@" . ".") ; top_srcdir is wrong, but not used
|
||||
("^\\(\\(?:texinfo\\|buildinfo\\|emacs\\)dir *=\\).*" . "\\1 .")
|
||||
("^\\(clean:.*\\)" . "\\1 infoclean")
|
||||
("@MAKEINFO@" . "makeinfo")
|
||||
("@MKDIR_P@" . "mkdir -p")
|
||||
("@INFO_EXT@" . ".info")
|
||||
("@INFO_OPTS@" . "")
|
||||
("@SHELL@" . "/bin/bash")
|
||||
("@prefix@" . "/usr/local")
|
||||
("@datarootdir@" . "${prefix}/share")
|
||||
("@datadir@" . "${datarootdir}")
|
||||
("@PACKAGE_TARNAME@" . "emacs")
|
||||
("@docdir@" . "${datarootdir}/doc/${PACKAGE_TARNAME}")
|
||||
("@\\(dvi\\|html\\|pdf\\|ps\\)dir@" . "${docdir}")
|
||||
("@GZIP_PROG@" . "gzip")
|
||||
("@INSTALL@" . "install -c")
|
||||
("@INSTALL_DATA@" . "${INSTALL} -m 644")
|
||||
("@configure_input@" . ""))
|
||||
"Alist of (REGEXP . REPLACEMENT) pairs for `make-manuals-dist'.")
|
||||
|
||||
(defun make-manuals-dist--1 (root type)
|
||||
"Subroutine of `make-manuals-dist'."
|
||||
(let* ((dest (expand-file-name "manual" root))
|
||||
(default-directory (progn (make-directory dest t)
|
||||
(file-name-as-directory dest)))
|
||||
(version (with-temp-buffer
|
||||
(insert-file-contents "../doc/emacs/emacsver.texi")
|
||||
(re-search-forward "@set EMACSVER \\([0-9.]+\\)")
|
||||
(match-string 1)))
|
||||
(stem (format "emacs-%s-%s" (if (equal type "emacs") "manual" type)
|
||||
version))
|
||||
(tarfile (format "%s.tar" stem)))
|
||||
(message "Doing %s..." type)
|
||||
(if (file-directory-p stem)
|
||||
(delete-directory stem t))
|
||||
(make-directory stem)
|
||||
(copy-file "../doc/misc/texinfo.tex" stem)
|
||||
(or (equal type "emacs") (copy-file "../doc/emacs/emacsver.texi" stem))
|
||||
(dolist (file (directory-files (format "../doc/%s" type) t))
|
||||
(if (or (string-match-p "\\(\\.texi\\'\\|/ChangeLog\\|/README\\'\\)" file)
|
||||
(and (equal type "lispintro")
|
||||
(string-match-p "\\.\\(eps\\|pdf\\)\\'" file)))
|
||||
(copy-file file stem)))
|
||||
(with-temp-buffer
|
||||
(let ((outvars make-manuals-dist-output-variables))
|
||||
(push `("@version@" . ,version) outvars)
|
||||
(insert-file-contents (format "../doc/%s/Makefile.in" type))
|
||||
(dolist (cons outvars)
|
||||
(while (re-search-forward (car cons) nil t)
|
||||
(replace-match (cdr cons) t))
|
||||
(goto-char (point-min))))
|
||||
(let (ats)
|
||||
(while (re-search-forward "@[a-zA-Z_]+@" nil t)
|
||||
(setq ats t)
|
||||
(message "Unexpanded: %s" (match-string 0)))
|
||||
(if ats (error "Unexpanded configure variables in Makefile?")))
|
||||
(write-region nil nil (expand-file-name (format "%s/Makefile" stem))
|
||||
nil 'silent))
|
||||
(call-process "tar" nil nil nil "-cf" tarfile stem)
|
||||
(delete-directory stem t)
|
||||
(message "...created %s" tarfile)))
|
||||
|
||||
;; Does anyone actually use these tarfiles?
|
||||
(defun make-manuals-dist (root &optional type)
|
||||
"Make the standalone manual source tarfiles for the Emacs webpage.
|
||||
ROOT should be the root of an Emacs source tree.
|
||||
Interactively with a prefix argument, prompt for TYPE.
|
||||
Optional argument TYPE is type of output (nil means all)."
|
||||
(interactive (let ((root (read-directory-name "Emacs root directory: "
|
||||
source-directory nil t)))
|
||||
(list root
|
||||
(if current-prefix-arg
|
||||
(completing-read
|
||||
"Type: "
|
||||
'("emacs" "lispref" "lispintro" "misc"))))))
|
||||
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
|
||||
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
|
||||
(dolist (m '("emacs" "lispref" "lispintro" "misc"))
|
||||
(if (member type (list nil m))
|
||||
(make-manuals-dist--1 root m))))
|
||||
|
||||
|
||||
;; Stuff to check new `defcustom's got :version tags.
|
||||
;; Adapted from check-declare.el.
|
||||
|
|
|
@ -92,6 +92,7 @@ files.")
|
|||
("Joseph Arceneaux" "Joe Arceneaux")
|
||||
("Joseph M. Kelsey" "Joe Kelsey") ; FIXME ?
|
||||
("Juan León Lahoz García" "Juan-Leon Lahoz Garcia")
|
||||
("Jürgen Hötzel" "Juergen Hoetzel")
|
||||
("K. Shane Hartman" "Shane Hartman")
|
||||
("Kai Großjohann" "Kai Grossjohann")
|
||||
("Karl Berry" "K. Berry")
|
||||
|
@ -120,6 +121,7 @@ files.")
|
|||
("Mikio Nakajima" "Nakajima Mikio")
|
||||
("Nelson Jose dos Santos Ferreira" "Nelson Ferreira")
|
||||
("Noorul Islam" "Noorul Islam K M")
|
||||
;;; ("Tetsurou Okazaki" "OKAZAKI Tetsurou") ; FIXME?
|
||||
("Paul Eggert" "Paul R\\. Eggert")
|
||||
("Pavel Janík" "Pavel Janík Ml." "Pavel Janik Ml." "Pavel Janik")
|
||||
("Pavel Kobiakov" "Pavel Kobyakov")
|
||||
|
@ -142,6 +144,7 @@ files.")
|
|||
("Sam Steingold" "Sam Shteingold")
|
||||
("Satyaki Das" "Indexed search by Satyaki Das")
|
||||
("Sébastien Vauban" "Sebastien Vauban")
|
||||
("Sergey Litvinov" "Litvinov Sergey")
|
||||
;; There are other Stefans.
|
||||
;;; ("Stefan Monnier" "Stefan")
|
||||
("Steven L. Baur" "SL Baur" "Steven L Baur")
|
||||
|
@ -177,11 +180,13 @@ If REALNAME is nil, ignore that author.")
|
|||
|
||||
;; FIXME seems it would be less fragile to check for O', Mc, etc.
|
||||
(defconst authors-fixed-case
|
||||
'("Brian van den Broek"
|
||||
'("Barry O'Reilly"
|
||||
"Brian van den Broek"
|
||||
"Bryan O'Sullivan"
|
||||
"Christian von Roques"
|
||||
"Christophe de Dinechin"
|
||||
"Craig McDaniel"
|
||||
"Daniel LaLiberte"
|
||||
"David J. MacKenzie"
|
||||
"David McCabe"
|
||||
"David O'Toole"
|
||||
|
@ -189,12 +194,16 @@ If REALNAME is nil, ignore that author.")
|
|||
"Dominique de Waleffe"
|
||||
"Edward O'Connor"
|
||||
"Exal de Jesus Garcia Carrillo"
|
||||
"George McNinch"
|
||||
"Greg McGary"
|
||||
"Hans de Graaff"
|
||||
"Ivan Vilata i Balaguer"
|
||||
"Jae-hyeon Park"
|
||||
"James TD Smith"
|
||||
"Jay McCarthy"
|
||||
"Joel N. Weber II"
|
||||
"Matt McClure"
|
||||
"Mike McLean"
|
||||
"Michael McNamara"
|
||||
"Mike McEwan"
|
||||
"Nelson Jose dos Santos Ferreira"
|
||||
|
@ -202,10 +211,13 @@ If REALNAME is nil, ignore that author.")
|
|||
"Peter O'Gorman"
|
||||
"Piet van Oostrum"
|
||||
"Roland McGrath"
|
||||
"Santiago Payà i Miralta"
|
||||
"Sean O'Halpin"
|
||||
"Sean O'Rourke"
|
||||
"Shun-ichi Goto"
|
||||
"Thomas DeWeese"
|
||||
"Tijs van Bakel")
|
||||
"Tijs van Bakel"
|
||||
"Yu-ji Hosokawa")
|
||||
"List of authors whose names cannot be simply capitalized.")
|
||||
|
||||
(defvar authors-public-domain-files
|
||||
|
@ -230,6 +242,7 @@ If REALNAME is nil, ignore that author.")
|
|||
'(".*loaddefs.el$" ; not obsolete, but auto-generated
|
||||
"\\.\\(cvs\\|git\\)ignore$" ; obsolete or uninteresting
|
||||
"\\.arch-inventory$"
|
||||
"automated/data/" ; not interesting
|
||||
;; TODO lib/? Matches other things?
|
||||
"build-aux/" "m4/" "Emacs.xcodeproj" "mapfiles" "\\.map\\'"
|
||||
"preferences\\.\\(nib\\|gorm\\)"
|
||||
|
@ -239,6 +252,11 @@ gnus-booklet\\|fr-drdref\\)\\.p\\(df\\|s\\)\\'")
|
|||
"List of regexps matching obsolete files.
|
||||
Changes to files matching one of the regexps in this list are not listed.")
|
||||
|
||||
(defconst authors-no-scan-regexps
|
||||
'("etc/nxml/"
|
||||
"automated/data/")
|
||||
"Lists of regexps matching files not to scan for authorship.")
|
||||
|
||||
(defconst authors-ignored-files
|
||||
'("external-lisp"
|
||||
"lock" "share-lib" "local-lisp"
|
||||
|
@ -283,6 +301,7 @@ Changes to files matching one of the regexps in this list are not listed.")
|
|||
"images/icons/allout-widgets-dark-bg"
|
||||
"images/icons/allout-widgets-light-bg"
|
||||
;; Never had any meaningful changes logged, now deleted:
|
||||
"lib/stdarg.in.h" "lib/stdbool.in.h"
|
||||
"unidata/bidimirror.awk" "unidata/biditype.awk"
|
||||
"split-man" "Xkeymap.txt" "ms-7bkermit" "ulimit.hack"
|
||||
"gnu-hp300" "refcard.bit" "ledit.l" "forms.README" "forms-d2.dat"
|
||||
|
@ -575,9 +594,10 @@ Changes to files in this list are not listed.")
|
|||
"README"
|
||||
;; There were a few of these, not just the generated top-level one.
|
||||
"configure" "config.h"
|
||||
"is_exec.c" "sigaction.c"
|
||||
;; nt/
|
||||
"ebuild.bat" "install.bat" "fast-install.bat"
|
||||
"debug.bat.in" "emacs.bat.in"
|
||||
"debug.bat.in" "emacs.bat.in" "addsection.c"
|
||||
"inc/sys/dir.h" "inc/gettext.h"
|
||||
".gdbinit-union"
|
||||
"alloca.s"
|
||||
|
@ -631,6 +651,8 @@ Changes to files in this list are not listed.")
|
|||
"mh-exec.el" "mh-init.el" "mh-customize.el"
|
||||
"net/zone-mode.el" "xesam.el"
|
||||
"term/mac-win.el" "sup-mouse.el"
|
||||
"term/vt102.el" "term/vt201.el" "term/vt220.el" "term/vt300.el"
|
||||
"term/vt320.el" "term/vt400.el" "term/vt420.el"
|
||||
"url-https.el"
|
||||
"org-mac-message.el" "org-mew.el" "org-w3m.el" "org-vm.el" "org-wl.el"
|
||||
"org-mks.el" "org-remember.el" "org-xoxo.el" "org-docbook.el"
|
||||
|
@ -638,6 +660,7 @@ Changes to files in this list are not listed.")
|
|||
"org-exp-blocks.el" ; maybe this is ob-exp now? dunno
|
||||
"org-lparse.el"
|
||||
"org-special-blocks.el" "org-taskjuggler.el"
|
||||
"progmodes/cap-words.el"
|
||||
;; gnus
|
||||
"nnwfm.el" "nnlistserv.el" "nnkiboze.el" "nndb.el" "nnsoup.el"
|
||||
"netrc.el" "password.el" "sasl-cram.el" "sasl-digest.el" "sasl-ntlm.el"
|
||||
|
@ -668,7 +691,7 @@ Changes to files in this list are not listed.")
|
|||
"etags-vmslib.c" "fakemail.c" "getdate.c" "getopt.h" "getopt1.c"
|
||||
"getopt_.h" "getopt_int.h" "gettext.h" "leditcfns.c" "loadst.c"
|
||||
"make-path.c" "qsort.c" "sorted-doc.c" "tcp.c" "timer.c" "wakeup.c"
|
||||
"yow.c"
|
||||
"yow.c" "grep-changelog"
|
||||
;; etc/
|
||||
"emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
|
||||
"test-distrib.c" "testfile"
|
||||
|
@ -707,6 +730,8 @@ in the repository.")
|
|||
("paths.h-dist" . "epaths.in")
|
||||
("paths.h.in" . "epaths.in")
|
||||
("paths.in" . "epaths.in")
|
||||
("emacs.rc" . "emacs.rc.in")
|
||||
("emacsclient.rc" . "emacsclient.rc.in")
|
||||
("patch1" . "sed1.inp")
|
||||
("INSTALL.MSYS" . "INSTALL")
|
||||
("server.c" . "emacsserver.c")
|
||||
|
@ -756,6 +781,13 @@ in the repository.")
|
|||
;; Obsolete.
|
||||
("emacs-lisp/assoc.el" . "assoc.el")
|
||||
("emacs-lisp/cust-print.el" . "cust-print.el")
|
||||
("emacs-lisp/gulp.el" . "gulp.el")
|
||||
("emulation/crisp.el" . "crisp.el")
|
||||
("emulation/tpu-edt.el" . "tpu-edt.el")
|
||||
("emulation/tpu-extras.el" . "tpu-extras.el")
|
||||
("emulation/vi.el" . "vi.el")
|
||||
("emulation/vip.el" . "vip.el")
|
||||
("emulation/ws-mode.el" . "ws-mode.el")
|
||||
("mail/mailpost.el" . "mailpost.el")
|
||||
("play/bruce.el" . "bruce.el")
|
||||
("play/yow.el" . "yow.el")
|
||||
|
@ -769,6 +801,7 @@ in the repository.")
|
|||
;; The one in lisp is eshell/eshell.el.
|
||||
("eshell.el" . "automated/eshell.el")
|
||||
("eshell/esh-test.el" . "automated/eshell.el")
|
||||
("automated/package-x-test.el" . "automated/package-test.el")
|
||||
;; INSTALL-CVS -> .CVS -> .BZR -> .REPO
|
||||
("INSTALL-CVS" . "INSTALL.REPO")
|
||||
("INSTALL.CVS" . "INSTALL.REPO")
|
||||
|
@ -787,6 +820,8 @@ in the repository.")
|
|||
("emacs.tex" . "emacs.texi")
|
||||
("faq.texi" . "efaq.texi")
|
||||
("major.texi" . "modes.texi")
|
||||
("msdog-xtra.texi" . "msdos-xtra.texi")
|
||||
("msdog.texi" . "msdos.texi")
|
||||
;; And from emacs/ to misc/ and back again.
|
||||
("ns-emacs.texi" . "macos.texi")
|
||||
("overrides.texi" . "gnus-overrides.texi")
|
||||
|
@ -825,6 +860,8 @@ in the repository.")
|
|||
("autogen/update_autogen" . "update_autogen")
|
||||
;; Moved from etc/ to admin/.
|
||||
("grammars" . "grammars")
|
||||
;; Moved from lisp/emacs-lisp/ to admin/.
|
||||
("emacs-lisp/authors.el" . "authors.el")
|
||||
;; From etc to lisp/cedet/semantic/.
|
||||
("grammars/bovine-grammar.el" . "bovine/grammar.el")
|
||||
("grammars/wisent-grammar.el" . "wisent/grammar.el")
|
||||
|
@ -1051,6 +1088,15 @@ from `authors-obsolete-files-regexps'."
|
|||
regexps (cdr regexps)))
|
||||
obsolete-p))
|
||||
|
||||
(defun authors-no-scan-file-p (file)
|
||||
"Return non-nil if FILE should not be scanned.
|
||||
FILE is not scanned if it matches any of `authors-no-scan-regexps'."
|
||||
(let (no-scan-p
|
||||
(regexps authors-no-scan-regexps))
|
||||
(while (and regexps (not no-scan-p))
|
||||
(setq no-scan-p (string-match-p (car regexps) file)
|
||||
regexps (cdr regexps)))
|
||||
no-scan-p))
|
||||
|
||||
(defun authors-add (author file action table)
|
||||
"Record that AUTHOR worked on FILE.
|
||||
|
@ -1282,8 +1328,9 @@ buffer *Authors Errors* containing references to unknown files."
|
|||
(authors-scan-change-log log table)))
|
||||
(let ((els (process-lines find-program root "-name" "*.el")))
|
||||
(dolist (file els)
|
||||
(message "Scanning %s..." file)
|
||||
(authors-scan-el file table)))
|
||||
(unless (authors-no-scan-file-p file)
|
||||
(message "Scanning %s..." file)
|
||||
(authors-scan-el file table))))
|
||||
(message "Generating buffer %s..." buffer-name)
|
||||
(set-buffer (get-buffer-create buffer-name))
|
||||
(erase-buffer)
|
||||
|
@ -1297,7 +1344,11 @@ list of their contributions.\n")
|
|||
(maphash #'authors-add-to-author-list table)
|
||||
(setq authors-author-list
|
||||
(sort authors-author-list
|
||||
(lambda (a b) (string-lessp (car a) (car b)))))
|
||||
(lambda (a b)
|
||||
(string-collate-lessp (car a) (car b)
|
||||
(if (eq system-type 'windows-nt)
|
||||
"enu_USA"
|
||||
"en_US.UTF-8")))))
|
||||
(dolist (a authors-author-list)
|
||||
(let ((author (car a))
|
||||
(wrote (nth 1 a))
|
||||
|
|
2
admin/charsets/.gitignore
vendored
2
admin/charsets/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
*.map
|
||||
*.el
|
|
@ -18,7 +18,7 @@ formal parameters, docstrings, and lispref texi.
|
|||
This program is in the public domain.\n";
|
||||
|
||||
die $usage if @ARGV;
|
||||
die $usage unless -r "src/alloc.c" && -d ".bzr" && -d "lisp";
|
||||
die $usage unless -r "src/alloc.c" && -d "lisp";
|
||||
|
||||
my %texi_funtype;
|
||||
my %texi_arglist;
|
||||
|
|
525
admin/gitmerge.el
Normal file
525
admin/gitmerge.el
Normal file
|
@ -0,0 +1,525 @@
|
|||
;;; gitmerge.el --- help merge one Emacs branch into another
|
||||
|
||||
;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
|
||||
|
||||
;; Authors: David Engster <deng@randomsample.de>
|
||||
;; Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
;; Keywords: maint
|
||||
|
||||
;; 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:
|
||||
|
||||
;; Rewrite of bzrmerge.el, but using git.
|
||||
;;
|
||||
;; In a nutshell: For merging foo into master, do
|
||||
;;
|
||||
;; - 'git checkout master' in Emacs repository
|
||||
;; - Start Emacs, cd to Emacs repository
|
||||
;; - M-x gitmerge
|
||||
;; - Choose branch 'foo' or 'origin/foo', depending on whether you
|
||||
;; like to merge from a local tracking branch or from the remote
|
||||
;; (does not make a difference if the local tracking branch is
|
||||
;; up-to-date).
|
||||
;; - Mark commits you'd like to skip, meaning to only merge their
|
||||
;; metadata (merge strategy 'ours').
|
||||
;; - Hit 'm' to start merging. Skipped commits will be merged separately.
|
||||
;; - If conflicts cannot be resolved automatically, you'll have to do
|
||||
;; it manually. In that case, resolve the conflicts and restart
|
||||
;; gitmerge, which will automatically resume. It will add resolved
|
||||
;; files, commit the pending merge and continue merging the rest.
|
||||
;; - Inspect master branch, and if everything looks OK, push.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'vc-git)
|
||||
(require 'smerge-mode)
|
||||
|
||||
(defvar gitmerge-skip-regexp
|
||||
"back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk\\|\
|
||||
Auto-commit"
|
||||
"Regexp matching logs of revisions that might be skipped.
|
||||
`gitmerge-missing' will ask you if it should skip any matches.")
|
||||
|
||||
(defvar gitmerge-status-file (expand-file-name "gitmerge-status"
|
||||
user-emacs-directory)
|
||||
"File where missing commits will be saved between sessions.")
|
||||
|
||||
(defvar gitmerge-ignore-branches-regexp
|
||||
"origin/\\(\\(HEAD\\|master\\)$\\|\\(old-branches\\|other-branches\\)/\\)"
|
||||
"Regexp matching branches we want to ignore.")
|
||||
|
||||
(defface gitmerge-skip-face
|
||||
'((t (:strike-through t)))
|
||||
"Face for skipped commits.")
|
||||
|
||||
(defconst gitmerge-default-branch "origin/emacs-24"
|
||||
"Default for branch that should be merged.")
|
||||
|
||||
(defconst gitmerge-buffer "*gitmerge*"
|
||||
"Working buffer for gitmerge.")
|
||||
|
||||
(defconst gitmerge-output-buffer "*gitmerge output*"
|
||||
"Buffer for displaying git output.")
|
||||
|
||||
(defconst gitmerge-warning-buffer "*gitmerge warnings*"
|
||||
"Buffer where gitmerge will display any warnings.")
|
||||
|
||||
(defvar gitmerge-log-regexp
|
||||
"^\\([A-Z ]\\)\\s-*\\([0-9a-f]+\\) \\(.+?\\): \\(.*\\)$")
|
||||
|
||||
(defvar gitmerge-mode-map
|
||||
(let ((map (make-keymap)))
|
||||
(define-key map [(l)] 'gitmerge-show-log)
|
||||
(define-key map [(d)] 'gitmerge-show-diff)
|
||||
(define-key map [(f)] 'gitmerge-show-files)
|
||||
(define-key map [(s)] 'gitmerge-toggle-skip)
|
||||
(define-key map [(m)] 'gitmerge-start-merge)
|
||||
map)
|
||||
"Keymap for gitmerge major mode.")
|
||||
|
||||
|
||||
(defvar gitmerge-mode-font-lock-keywords
|
||||
`((,gitmerge-log-regexp
|
||||
(1 font-lock-warning-face)
|
||||
(2 font-lock-constant-face)
|
||||
(3 font-lock-builtin-face)
|
||||
(4 font-lock-comment-face))))
|
||||
|
||||
(defvar gitmerge--commits nil)
|
||||
(defvar gitmerge--from nil)
|
||||
|
||||
(defun gitmerge-get-sha1 ()
|
||||
"Get SHA1 from commit at point."
|
||||
(save-excursion
|
||||
(goto-char (point-at-bol))
|
||||
(when (looking-at "^[A-Z ]\\s-*\\([a-f0-9]+\\)")
|
||||
(match-string 1))))
|
||||
|
||||
(defun gitmerge-show-log ()
|
||||
"Show log of commit at point."
|
||||
(interactive)
|
||||
(save-selected-window
|
||||
(let ((commit (gitmerge-get-sha1)))
|
||||
(when commit
|
||||
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
|
||||
(fundamental-mode)
|
||||
(erase-buffer)
|
||||
(call-process "git" nil t nil "log" "-1" commit)
|
||||
(goto-char (point-min))
|
||||
(gitmerge-highlight-skip-regexp)))))
|
||||
|
||||
(defun gitmerge-show-diff ()
|
||||
"Show diff of commit at point."
|
||||
(interactive)
|
||||
(save-selected-window
|
||||
(let ((commit (gitmerge-get-sha1)))
|
||||
(when commit
|
||||
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
|
||||
(erase-buffer)
|
||||
(call-process "git" nil t nil "diff-tree" "-p" commit)
|
||||
(goto-char (point-min))
|
||||
(diff-mode)))))
|
||||
|
||||
(defun gitmerge-show-files ()
|
||||
"Show changed files of commit at point."
|
||||
(interactive)
|
||||
(save-selected-window
|
||||
(let ((commit (gitmerge-get-sha1)))
|
||||
(when commit
|
||||
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
|
||||
(erase-buffer)
|
||||
(fundamental-mode)
|
||||
(call-process "git" nil t nil "diff" "--name-only" (concat commit "^!"))
|
||||
(goto-char (point-min))))))
|
||||
|
||||
(defun gitmerge-toggle-skip ()
|
||||
"Toggle skipping of commit at point."
|
||||
(interactive)
|
||||
(let ((commit (gitmerge-get-sha1))
|
||||
skip)
|
||||
(when commit
|
||||
(save-excursion
|
||||
(goto-char (point-at-bol))
|
||||
(when (looking-at "^\\([A-Z ]\\)\\s-*\\([a-f0-9]+\\)")
|
||||
(setq skip (string= (match-string 1) " "))
|
||||
(goto-char (match-beginning 2))
|
||||
(gitmerge-handle-skip-overlay skip)
|
||||
(dolist (ct gitmerge--commits)
|
||||
(when (string-match commit (car ct))
|
||||
(setcdr ct (when skip "M"))))
|
||||
(goto-char (point-at-bol))
|
||||
(setq buffer-read-only nil)
|
||||
(delete-char 1)
|
||||
(insert (if skip "M" " "))
|
||||
(setq buffer-read-only t))))))
|
||||
|
||||
(defun gitmerge-highlight-skip-regexp ()
|
||||
"Highlight strings that match `gitmerge-skip-regexp'."
|
||||
(save-excursion
|
||||
(while (re-search-forward gitmerge-skip-regexp nil t)
|
||||
(put-text-property (match-beginning 0) (match-end 0)
|
||||
'face 'font-lock-warning-face))))
|
||||
|
||||
(defun gitmerge-missing (from)
|
||||
"Return the list of revisions that need to be merged from FROM.
|
||||
Will detect a default set of skipped revision by looking at
|
||||
cherry mark and search for `gitmerge-skip-regexp'. The result is
|
||||
a list with entries of the form (SHA1 . SKIP), where SKIP denotes
|
||||
if and why this commit should be skipped."
|
||||
(let (commits)
|
||||
;; Go through the log and remember all commits that match
|
||||
;; `gitmerge-skip-regexp' or are marked by --cherry-mark.
|
||||
(with-temp-buffer
|
||||
(call-process "git" nil t nil "log" "--cherry-mark" from
|
||||
(concat "^" (car (vc-git-branches))))
|
||||
(goto-char (point-max))
|
||||
(while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t)
|
||||
(let ((cherrymark (match-string 1))
|
||||
(commit (match-string 2)))
|
||||
(push (list commit) commits)
|
||||
(if (string= cherrymark "=")
|
||||
;; Commit was recognized as backported by cherry-mark.
|
||||
(setcdr (car commits) "C")
|
||||
(save-excursion
|
||||
(let ((case-fold-search t))
|
||||
(while (not (looking-at "^\\s-+[^ ]+"))
|
||||
(forward-line))
|
||||
(when (re-search-forward gitmerge-skip-regexp nil t)
|
||||
(setcdr (car commits) "R"))))))
|
||||
(delete-region (point) (point-max))))
|
||||
(nreverse commits)))
|
||||
|
||||
(defun gitmerge-setup-log-buffer (commits from)
|
||||
"Create the buffer for choosing commits."
|
||||
(with-current-buffer (get-buffer-create gitmerge-buffer)
|
||||
(erase-buffer)
|
||||
(call-process "git" nil t nil "log"
|
||||
"--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
|
||||
from (concat "^" (car (vc-git-branches))))
|
||||
(goto-char (point-min))
|
||||
(while (looking-at "^\\([a-f0-9]+\\)")
|
||||
(let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits)))
|
||||
(if (null skipreason)
|
||||
(insert " ")
|
||||
(insert skipreason " ")
|
||||
(gitmerge-handle-skip-overlay t)))
|
||||
(forward-line))
|
||||
(current-buffer)))
|
||||
|
||||
(defun gitmerge-handle-skip-overlay (skip)
|
||||
"Create or delete overlay on SHA1, depending on SKIP."
|
||||
(when (looking-at "[0-9a-f]+")
|
||||
(if skip
|
||||
(let ((ov (make-overlay (point)
|
||||
(match-end 0))))
|
||||
(overlay-put ov 'face 'gitmerge-skip-face))
|
||||
(remove-overlays (point) (match-end 0)
|
||||
'face 'gitmerge-skip-face))))
|
||||
|
||||
(defun gitmerge-skip-commit-p (commit skips)
|
||||
"Tell whether COMMIT should be skipped.
|
||||
COMMIT is an (possibly abbreviated) SHA1. SKIPS is list of
|
||||
cons'es with commits that should be skipped and the reason.
|
||||
Return value is string which denotes reason, or nil if commit
|
||||
should not be skipped."
|
||||
(let (found skip)
|
||||
(while (and (setq skip (pop skips))
|
||||
(not found))
|
||||
(when (string-match commit (car skip))
|
||||
(setq found (cdr skip))))
|
||||
found))
|
||||
|
||||
(defun gitmerge-resolve (file)
|
||||
"Try to resolve conflicts in FILE with smerge.
|
||||
Returns non-nil if conflicts remain."
|
||||
(unless (file-exists-p file) (error "Gitmerge-resolve: Can't find %s" file))
|
||||
(with-demoted-errors
|
||||
(let ((exists (find-buffer-visiting file)))
|
||||
(with-current-buffer (let ((enable-local-variables :safe)
|
||||
(enable-local-eval nil))
|
||||
(find-file-noselect file))
|
||||
(if (buffer-modified-p)
|
||||
(user-error "Unsaved changes in %s" (current-buffer)))
|
||||
(save-excursion
|
||||
(cond
|
||||
((derived-mode-p 'change-log-mode)
|
||||
;; Fix up dates before resolving the conflicts.
|
||||
(goto-char (point-min))
|
||||
(let ((diff-auto-refine-mode nil))
|
||||
(while (re-search-forward smerge-begin-re nil t)
|
||||
(smerge-match-conflict)
|
||||
(smerge-ensure-match 3)
|
||||
(let ((start1 (match-beginning 1))
|
||||
(end1 (match-end 1))
|
||||
(start3 (match-beginning 3))
|
||||
(end3 (copy-marker (match-end 3) t)))
|
||||
(goto-char start3)
|
||||
(while (re-search-forward change-log-start-entry-re end3 t)
|
||||
(let* ((str (match-string 0))
|
||||
(newstr (save-match-data
|
||||
(concat (add-log-iso8601-time-string)
|
||||
(when (string-match " *\\'" str)
|
||||
(match-string 0 str))))))
|
||||
(replace-match newstr t t)))
|
||||
;; change-log-resolve-conflict prefers to put match-1's
|
||||
;; elements first (for equal dates), whereas we want to put
|
||||
;; match-3's first.
|
||||
(let ((match3 (buffer-substring start3 end3))
|
||||
(match1 (buffer-substring start1 end1)))
|
||||
(delete-region start3 end3)
|
||||
(goto-char start3)
|
||||
(insert match1)
|
||||
(delete-region start1 end1)
|
||||
(goto-char start1)
|
||||
(insert match3)))))
|
||||
;; (pop-to-buffer (current-buffer)) (debug 'before-resolve)
|
||||
))
|
||||
;; Try to resolve the conflicts.
|
||||
(cond
|
||||
((member file '("configure" "lisp/ldefs-boot.el"
|
||||
"lisp/emacs-lisp/cl-loaddefs.el"))
|
||||
;; We are in the file's buffer, so names are relative.
|
||||
(call-process "git" nil t nil "checkout" "--"
|
||||
(file-name-nondirectory file))
|
||||
(revert-buffer nil 'noconfirm))
|
||||
(t
|
||||
(goto-char (point-max))
|
||||
(while (re-search-backward smerge-begin-re nil t)
|
||||
(save-excursion
|
||||
(ignore-errors
|
||||
(smerge-match-conflict)
|
||||
(smerge-resolve))))
|
||||
;; (when (derived-mode-p 'change-log-mode)
|
||||
;; (pop-to-buffer (current-buffer)) (debug 'after-resolve))
|
||||
(save-buffer)))
|
||||
(goto-char (point-min))
|
||||
(prog1 (re-search-forward smerge-begin-re nil t)
|
||||
(unless exists (kill-buffer))))))))
|
||||
|
||||
(defun gitmerge-commit-message (beg end skip branch)
|
||||
"Create commit message for merging BEG to END from BRANCH.
|
||||
SKIP denotes whether those commits are actually skipped. If END
|
||||
is nil, only the single commit BEG is merged."
|
||||
(with-temp-buffer
|
||||
(insert "Merge from " branch "\n\n"
|
||||
(if skip
|
||||
(concat "The following commit"
|
||||
(if end "s were " " was ")
|
||||
"skipped:\n\n")
|
||||
""))
|
||||
(apply 'call-process "git" nil t nil "log" "--oneline"
|
||||
(if end (list (concat beg "~.." end))
|
||||
`("-1" ,beg)))
|
||||
(insert "\n")
|
||||
(buffer-string)))
|
||||
|
||||
(defun gitmerge-apply (missing from)
|
||||
"Merge commits in MISSING from branch FROM.
|
||||
MISSING must be a list of SHA1 strings."
|
||||
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
|
||||
(erase-buffer)
|
||||
(let* ((skip (cdar missing))
|
||||
(beg (car (pop missing)))
|
||||
end commitmessage)
|
||||
;; Determine last revision with same boolean skip status.
|
||||
(while (and missing
|
||||
(eq (null (cdar missing))
|
||||
(null skip)))
|
||||
(setq end (car (pop missing))))
|
||||
(setq commitmessage
|
||||
(gitmerge-commit-message beg end skip from))
|
||||
(message "%s %s%s"
|
||||
(if skip "Skipping" "Merging")
|
||||
(substring beg 0 6)
|
||||
(if end (concat ".." (substring end 0 6)) ""))
|
||||
(unless end
|
||||
(setq end beg))
|
||||
(unless (zerop
|
||||
(apply 'call-process "git" nil t nil "merge" "--no-ff"
|
||||
(append (when skip '("-s" "ours"))
|
||||
`("-m" ,commitmessage ,end))))
|
||||
(gitmerge-write-missing missing from)
|
||||
(gitmerge-resolve-unmerged)))
|
||||
missing))
|
||||
|
||||
(defun gitmerge-resolve-unmerged ()
|
||||
"Resolve all files that are unmerged.
|
||||
Throw an user-error if we cannot resolve automatically."
|
||||
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
|
||||
(erase-buffer)
|
||||
(let (files conflicted)
|
||||
;; List unmerged files
|
||||
(if (not (zerop
|
||||
(call-process "git" nil t nil
|
||||
"diff" "--name-only" "--diff-filter=U")))
|
||||
(error "Error listing unmerged files. Resolve manually.")
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(push (buffer-substring (point) (line-end-position)) files)
|
||||
(forward-line))
|
||||
(dolist (file files)
|
||||
(if (gitmerge-resolve file)
|
||||
;; File still has conflicts
|
||||
(setq conflicted t)
|
||||
;; Mark as resolved
|
||||
(call-process "git" nil t nil "add" file)))
|
||||
(when conflicted
|
||||
(with-current-buffer (get-buffer-create gitmerge-warning-buffer)
|
||||
(erase-buffer)
|
||||
(insert "For the following files, conflicts could\n"
|
||||
"not be resolved automatically:\n\n")
|
||||
(call-process "git" nil t nil
|
||||
"diff" "--name-only" "--diff-filter=U")
|
||||
(insert "\nResolve the conflicts manually, then run gitmerge again."
|
||||
"\nNote:\n - You don't have to add resolved files or "
|
||||
"commit the merge yourself (but you can)."
|
||||
"\n - You can safely close this Emacs session and do this "
|
||||
"in a new one."
|
||||
"\n - When running gitmerge again, remember that you must "
|
||||
"that from within the Emacs repo.\n")
|
||||
(pop-to-buffer (current-buffer)))
|
||||
(user-error "Resolve the conflicts manually"))))))
|
||||
|
||||
(defun gitmerge-repo-clean ()
|
||||
"Return non-nil if repository is clean."
|
||||
(with-temp-buffer
|
||||
(call-process "git" nil t nil
|
||||
"diff" "--staged" "--name-only")
|
||||
(call-process "git" nil t nil
|
||||
"diff" "--name-only")
|
||||
(zerop (buffer-size))))
|
||||
|
||||
(defun gitmerge-maybe-resume ()
|
||||
"Check if we have to resume a merge.
|
||||
If so, add no longer conflicted files and commit."
|
||||
(let ((mergehead (file-exists-p
|
||||
(expand-file-name ".git/MERGE_HEAD" default-directory)))
|
||||
(statusexist (file-exists-p gitmerge-status-file)))
|
||||
(when (and mergehead (not statusexist))
|
||||
(user-error "Unfinished merge, but no record of a previous gitmerge run"))
|
||||
(when (and (not mergehead)
|
||||
(not (gitmerge-repo-clean)))
|
||||
(user-error "Repository is not clean"))
|
||||
(when statusexist
|
||||
(if (not (y-or-n-p "Resume merge? "))
|
||||
(progn
|
||||
(delete-file gitmerge-status-file)
|
||||
;; No resume.
|
||||
nil)
|
||||
(message "OK, resuming...")
|
||||
(gitmerge-resolve-unmerged)
|
||||
;; Commit the merge.
|
||||
(when mergehead
|
||||
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
|
||||
(erase-buffer)
|
||||
(unless (zerop (call-process "git" nil t nil
|
||||
"commit" "--no-edit"))
|
||||
(error "Git error during merge - fix it manually"))))
|
||||
;; Successfully resumed.
|
||||
t))))
|
||||
|
||||
(defun gitmerge-get-all-branches ()
|
||||
"Return list of all branches, including remotes."
|
||||
(with-temp-buffer
|
||||
(unless (zerop (call-process "git" nil t nil
|
||||
"branch" "-a"))
|
||||
(error "Git error listing remote branches"))
|
||||
(goto-char (point-min))
|
||||
(let (branches branch)
|
||||
(while (not (eobp))
|
||||
(when (looking-at "^[^\\*]\\s-*\\(?:remotes/\\)?\\(.+\\)$")
|
||||
(setq branch (match-string 1))
|
||||
(unless (string-match gitmerge-ignore-branches-regexp branch)
|
||||
(push branch branches)))
|
||||
(forward-line))
|
||||
(nreverse branches))))
|
||||
|
||||
(defun gitmerge-write-missing (missing from)
|
||||
"Write list of commits MISSING into `gitmerge-status-file'.
|
||||
Branch FROM will be prepended to the list."
|
||||
(with-current-buffer
|
||||
(find-file-noselect gitmerge-status-file)
|
||||
(erase-buffer)
|
||||
(insert
|
||||
(prin1-to-string (append (list from) missing))
|
||||
"\n")
|
||||
(save-buffer)
|
||||
(kill-buffer)))
|
||||
|
||||
(defun gitmerge-read-missing ()
|
||||
"Read list of missing commits from `gitmerge-status-file'."
|
||||
(with-current-buffer
|
||||
(find-file-noselect gitmerge-status-file)
|
||||
(unless (zerop (buffer-size))
|
||||
(prog1 (read (buffer-string))
|
||||
(kill-buffer)))))
|
||||
|
||||
(define-derived-mode gitmerge-mode special-mode "gitmerge"
|
||||
"Major mode for Emacs branch merging."
|
||||
(set-syntax-table text-mode-syntax-table)
|
||||
(setq buffer-read-only t)
|
||||
(setq-local truncate-lines t)
|
||||
(setq-local font-lock-defaults '(gitmerge-mode-font-lock-keywords)))
|
||||
|
||||
(defun gitmerge (from)
|
||||
"Merge from branch FROM into `default-directory'."
|
||||
(interactive
|
||||
(if (not (vc-git-root default-directory))
|
||||
(user-error "Not in a git tree")
|
||||
(let ((default-directory (vc-git-root default-directory)))
|
||||
(list
|
||||
(if (gitmerge-maybe-resume)
|
||||
'resume
|
||||
(completing-read "Merge branch: " (gitmerge-get-all-branches)
|
||||
nil t gitmerge-default-branch))))))
|
||||
(let ((default-directory (vc-git-root default-directory)))
|
||||
(if (eq from 'resume)
|
||||
(progn
|
||||
(setq gitmerge--commits (gitmerge-read-missing))
|
||||
(setq gitmerge--from (pop gitmerge--commits))
|
||||
;; Directly continue with the merge.
|
||||
(gitmerge-start-merge))
|
||||
(setq gitmerge--commits (gitmerge-missing from))
|
||||
(setq gitmerge--from from)
|
||||
(when (null gitmerge--commits)
|
||||
(user-error "Nothing to merge"))
|
||||
(with-current-buffer
|
||||
(gitmerge-setup-log-buffer gitmerge--commits gitmerge--from)
|
||||
(goto-char (point-min))
|
||||
(insert (propertize "Commands: " 'font-lock-face 'bold)
|
||||
"(s) Toggle skip, (l) Show log, (d) Show diff, "
|
||||
"(f) Show files, (m) Start merge\n"
|
||||
(propertize "Flags: " 'font-lock-face 'bold)
|
||||
"(C) Detected backport (cherry-mark), (R) Log matches "
|
||||
"regexp, (M) Manually picked\n\n")
|
||||
(gitmerge-mode)
|
||||
(pop-to-buffer (current-buffer))))))
|
||||
|
||||
(defun gitmerge-start-merge ()
|
||||
(interactive)
|
||||
(when (not (vc-git-root default-directory))
|
||||
(user-error "Not in a git tree"))
|
||||
(let ((default-directory (vc-git-root default-directory)))
|
||||
(while gitmerge--commits
|
||||
(setq gitmerge--commits
|
||||
(gitmerge-apply gitmerge--commits gitmerge--from)))
|
||||
(when (file-exists-p gitmerge-status-file)
|
||||
(delete-file gitmerge-status-file))
|
||||
(message "Merging from %s...done" gitmerge--from)))
|
||||
|
||||
(provide 'gitmerge)
|
||||
|
||||
;;; gitmerge.el ends here
|
|
@ -64,6 +64,7 @@
|
|||
%token <punctuation> PLUS "\\`[+]\\'"
|
||||
%token <punctuation> MINUS "\\`[-]\\'"
|
||||
%token <punctuation> BANG "\\`[!]\\'"
|
||||
%token <punctuation> QUESTION "\\`[?]\\'"
|
||||
%token <punctuation> EQUAL "\\`[=]\\'"
|
||||
%token <punctuation> LESS "\\`[<]\\'"
|
||||
%token <punctuation> GREATER "\\`[>]\\'"
|
||||
|
@ -590,10 +591,12 @@ template-type
|
|||
| declmods typeformbase cv-declmods opt-stars
|
||||
opt-ref variablearg-opt-name
|
||||
(TYPE-TAG (car $2) nil nil nil
|
||||
:template-specifier (plist-get (nth 2 $2) :template-specifier)
|
||||
:constant-flag (if (member "const" (append $1 $3)) t nil)
|
||||
:typemodifiers (delete "const" (append $1 $3))
|
||||
:reference (car ,$5)
|
||||
:pointer (car $4)
|
||||
:typevar (car $6)
|
||||
)
|
||||
;
|
||||
|
||||
|
@ -832,7 +835,7 @@ opt-initializers
|
|||
|
||||
opt-post-fcn-modifiers
|
||||
: post-fcn-modifiers opt-post-fcn-modifiers
|
||||
( ,(cons ,$1 $2) )
|
||||
( ,(cons ,(car $1) $2) )
|
||||
| ;;EMPTY
|
||||
( nil )
|
||||
;
|
||||
|
@ -1206,7 +1209,9 @@ expr-binop
|
|||
;; Use expression for parsing only. Don't actually return anything
|
||||
;; for now. Hopefully we can fix this later.
|
||||
expression
|
||||
: unaryexpression expr-binop unaryexpression
|
||||
: unaryexpression QUESTION unaryexpression COLON unaryexpression
|
||||
( (identity start) (identity end) )
|
||||
| unaryexpression expr-binop unaryexpression
|
||||
( (identity start) (identity end) )
|
||||
| unaryexpression
|
||||
( (identity start) (identity end) )
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
%token DEFINE "define"
|
||||
%token DEFINE-MODULE "define-module"
|
||||
%token MODULE "module"
|
||||
%token LOAD "load"
|
||||
|
||||
%put DEFINE summary "Function: (define symbol expression)"
|
||||
|
@ -37,36 +38,50 @@
|
|||
%%
|
||||
|
||||
scheme : semantic-list
|
||||
(EXPAND $1 scheme-list)
|
||||
( ,(let ((expand (EXPAND $1 scheme-list)))
|
||||
(cond
|
||||
((semantic-tag-of-class-p expand 'module)
|
||||
(TYPE-TAG (semantic-tag-name expand)
|
||||
"module"
|
||||
(EXPANDFULL $1 scheme)
|
||||
nil) ;; Module contains more definitions like a type
|
||||
)
|
||||
(t
|
||||
expand))))
|
||||
;
|
||||
|
||||
scheme-list : OPENPAREN scheme-in-list CLOSEPAREN
|
||||
scheme-list : OPENPAREN scheme-in-list
|
||||
( ,$2 )
|
||||
;
|
||||
|
||||
|
||||
scheme-in-list: DEFINE symbol expression
|
||||
(VARIABLE-TAG $2 nil $3 )
|
||||
| DEFINE name-args opt-doc sequence
|
||||
| DEFINE name-args opt-doc
|
||||
(FUNCTION-TAG (car ,$2) nil (cdr ,$2) )
|
||||
| DEFINE-MODULE name-args
|
||||
(PACKAGE-TAG (nth (length $2) $2 ) nil)
|
||||
| MODULE symbol
|
||||
(TAG $1 'module :members nil)
|
||||
| LOAD string
|
||||
(INCLUDE-TAG (file-name-nondirectory (read $2)) (read $2) )
|
||||
| symbol
|
||||
| symbol sequence
|
||||
(CODE-TAG $1 nil)
|
||||
;
|
||||
|
||||
name-args: semantic-list
|
||||
(EXPAND $1 name-arg-expand)
|
||||
(EXPAND $1 name-arg-list)
|
||||
;
|
||||
|
||||
name-arg-expand : open-paren name-arg-expand
|
||||
name-arg-list : OPENPAREN name-arg-expand
|
||||
( ,$2 )
|
||||
| symbol name-arg-expand
|
||||
( ,(cons $1 ,$2) )
|
||||
| ;; EMPTY
|
||||
( )
|
||||
;
|
||||
;
|
||||
|
||||
name-arg-expand: symbol name-arg-expand
|
||||
( ,(cons $1 ,$2) )
|
||||
| ;; EMPTY
|
||||
( )
|
||||
;
|
||||
|
||||
opt-doc : string
|
||||
| ;; EMPTY
|
||||
|
@ -83,3 +98,4 @@ expression : symbol
|
|||
;
|
||||
|
||||
;;; scheme.by ends here
|
||||
|
||||
|
|
|
@ -7,8 +7,7 @@ Steps to take before starting on the first pretest in any release sequence:
|
|||
|
||||
0. The release branch (e.g. emacs-24) should already have been made
|
||||
and you should use it for all that follows. Diffs from this
|
||||
branch should be going to the emacs-diffs mailing list (see
|
||||
admin/notes/bzr section on bzr-email plugin).
|
||||
branch should be going to the emacs-diffs mailing list.
|
||||
|
||||
1. Decide on versions of automake and autoconf, and ensure you will
|
||||
have them available for the duration of the release process.
|
||||
|
@ -24,8 +23,8 @@ Steps to take before starting on the first pretest in any release sequence:
|
|||
|
||||
General steps (for each step, check for possible errors):
|
||||
|
||||
1. `bzr update' (for a bound branch), or `bzr pull'.
|
||||
bzr status # check for locally modified files
|
||||
1. git pull # fetch from the repository
|
||||
git status # check for locally modified files
|
||||
|
||||
2. Regenerate the etc/AUTHORS file:
|
||||
M-: (require 'authors) RET
|
||||
|
@ -66,9 +65,8 @@ General steps (for each step, check for possible errors):
|
|||
5. Copy lisp/loaddefs.el to lisp/ldefs-boot.el.
|
||||
|
||||
Commit etc/AUTHORS, lisp/ldefs-boot.el, and the files changed
|
||||
by M-x set-version. Use a commit log message that bzrmerge.el
|
||||
will ignore (eg "Bump version...").
|
||||
For a release, also commit the ChangeLog files in all directories.
|
||||
by M-x set-version. For a release, also commit the ChangeLog
|
||||
files in all directories.
|
||||
|
||||
If someone else made a commit between step 1 and now,
|
||||
you need to repeat from step 4 onwards. (You can commit the files
|
||||
|
@ -84,7 +82,7 @@ General steps (for each step, check for possible errors):
|
|||
|
||||
If this is the first pretest of a major release, just comparing
|
||||
with the previous release may overlook many new files. You can try
|
||||
something like `find . | sort' in a clean bzr tree, and compare the
|
||||
something like `find . | sort' in a clean repository, and compare the
|
||||
results against the new tar contents.
|
||||
|
||||
7. tar -xf emacs-NEW.tar; cd emacs-NEW
|
||||
|
@ -96,7 +94,7 @@ General steps (for each step, check for possible errors):
|
|||
M-x ediff. Especially check that Info files aren't built, and that
|
||||
no autotools (autoconf etc) run.
|
||||
|
||||
8. cd EMACS_ROOT_DIR && bzr tag TAG
|
||||
8. cd EMACS_ROOT_DIR && git tag -a TAG && git push origin tag TAG
|
||||
TAG is emacs-XX.Y.ZZ for a pretest, emacs-XX.Y for a release.
|
||||
|
||||
9. Decide what compression schemes to offer.
|
||||
|
@ -149,13 +147,15 @@ General steps (for each step, check for possible errors):
|
|||
|
||||
11. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org.
|
||||
For a pretest, also bcc: platform-testers@gnu.org.
|
||||
For a release, also bcc: info-gnu@gnu.org.
|
||||
(The reason for using bcc: is to make it less likely that people
|
||||
will followup on the wrong list.)
|
||||
See the info-gnu-emacs mailing list archives for the form
|
||||
of past announcements. The first pretest announcement, and the
|
||||
release announcement, should have more detail.
|
||||
|
||||
12. For a release, update the Emacs homepage in the web repository.
|
||||
Also update history.html, and add the new NEWS file as NEWS.xx.y.
|
||||
12. For a release, update the Emacs homepage emacs.html in the web repository.
|
||||
Also update history.html, and add the new NEWS file as news/NEWS.xx.y.
|
||||
Regenerate the html manuals (use make-manuals from admin.el).
|
||||
If there are new manuals, add appropriate index pages.
|
||||
Delete any old manual pages that are no longer present.
|
||||
|
|
|
@ -35,11 +35,11 @@ GNULIB_MODULES='
|
|||
intprops largefile lstat
|
||||
manywarnings memrchr mkostemp mktime
|
||||
pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat
|
||||
sig2str socklen stat-time stdalign stdio
|
||||
sig2str socklen stat-time stdalign stddef stdio
|
||||
strftime strtoimax strtoumax symlink sys_stat
|
||||
sys_time time timer-time timespec-add timespec-sub
|
||||
sys_time time time_r timer-time timespec-add timespec-sub
|
||||
unsetenv update-copyright utimens
|
||||
warnings
|
||||
vla warnings
|
||||
'
|
||||
|
||||
GNULIB_TOOL_FLAGS='
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
You can view the available Emacs branches at
|
||||
|
||||
http://bzr.savannah.gnu.org/r/emacs/
|
||||
|
||||
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.
|
||||
|
||||
Sometime before the release of a new major version of Emacs (eg 23.2),
|
||||
a "feature freeze" is imposed on the trunk. No new features may be
|
||||
added after this point. This is usually some months before the release.
|
||||
|
||||
Shortly before the release, a release branch is created, and the
|
||||
trunk is then free for development.
|
||||
For example, "emacs-23" for Emacs 23.2 and later, "EMACS_23_1_RC" for
|
||||
23.1, "EMACS_22_BASE" for 22.x, and "EMACS_21_1_RC" for 21.x.
|
||||
|
||||
Consult emacs-devel for exactly what kinds of changes are allowed
|
||||
on what branch at any time.
|
||||
|
||||
If you are looking at this file in a branch other than the trunk,
|
||||
there may be some branch-specific documentation below this line.
|
||||
________________________________________________________________________
|
||||
|
||||
* elpa
|
||||
|
||||
This branch does not contain a copy of Emacs, but of the Emacs Lisp
|
||||
package archive (elpa.gnu.org). See admin/notes/elpa for further
|
||||
explanation, and the README file in the branch for usage
|
||||
instructions.
|
|
@ -463,10 +463,10 @@ time, rather than by increasing bug number
|
|||
|
||||
"raw" = ?
|
||||
|
||||
** ChangeLog issues
|
||||
** Change log issues
|
||||
|
||||
*** When you fix a bug, it can be helpful to put the bug number in the
|
||||
ChangeLog entry, for example:
|
||||
change log entry, for example:
|
||||
|
||||
* foo.el (foofunc): Fix the `foo' case. (Bug#123)
|
||||
|
||||
|
@ -475,7 +475,7 @@ obvious fix (e.g. a typo), there's no need to clutter the log with the
|
|||
bug number.
|
||||
|
||||
Similarly, when you close a bug, it can be helpful to include the
|
||||
relevant ChangeLog entry in the message to the bug tracker, so people
|
||||
relevant change log entry in the message to the bug tracker, so people
|
||||
can see exactly what the fix was.
|
||||
|
||||
*** bug-reference-mode
|
||||
|
@ -487,44 +487,6 @@ the bug web-pages.
|
|||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2009-11/msg00440.html
|
||||
|
||||
** Bazaar stuff
|
||||
|
||||
*** You can use `bzr commit --fixes debbugs:123' to mark that a commit fixes
|
||||
Emacs bug 123. You will first need to add a line to one of your
|
||||
configuration files, ~/.bazaar/bazaar.conf or ~/.bazaar/locations.conf:
|
||||
|
||||
bugtracker_debbugs_url = http://debbugs.gnu.org/{id}
|
||||
|
||||
Here "{id}" is a literal string, a placeholder that will be replaced
|
||||
by the bug number you specify after `--fixes debbugs:' in the bzr
|
||||
command line (123 in the example above).
|
||||
|
||||
In the bazaar.conf file, this setting should go into the [DEFAULT]
|
||||
section.
|
||||
|
||||
In the locations.conf file, it should go into the branch-specific
|
||||
configuration section for the branch where you want this to be in
|
||||
effect. For example, if you want this to be in effect for the branch
|
||||
located at `/home/projects/emacs/trunk', you need to have this in your
|
||||
~/.bazaar/locations.conf file:
|
||||
|
||||
[/home/projects/emacs/trunk]
|
||||
bugtracker_debbugs_url = http://debbugs.gnu.org/{id}
|
||||
|
||||
If you want to use this in all Emacs branches whose common parent is
|
||||
`/home/projects/emacs', put the setting in the [/home/projects/emacs]
|
||||
section. See "bzr help configuration" for more information about
|
||||
the *.conf files, their location and formats. See "bzr help bugs" for
|
||||
more information about the bugtracker_debbugs_url setting.
|
||||
|
||||
See also log-edit-rewrite-fixes in .dir-locals.el.
|
||||
|
||||
Note that all this does is add some metadata to the commit, it doesn't
|
||||
actually mark the bug as closed in the tracker. You can see this
|
||||
information with `bzr log', and it will show up as a link in a recent
|
||||
loggerhead installation, or with some of the graphical frontends to
|
||||
`bzr log'.
|
||||
|
||||
** Gnus-specific voodoo
|
||||
|
||||
*** Put point on a bug-number and try: M-x gnus-read-ephemeral-emacs-bug-group
|
||||
|
|
398
admin/notes/bzr
398
admin/notes/bzr
|
@ -1,398 +0,0 @@
|
|||
NOTES ON COMMITTING TO EMACS'S BAZAAR REPO -*- outline -*-
|
||||
|
||||
* Install changes only on one branch, let them get merged elsewhere if needed.
|
||||
In particular, install bug-fixes only on the release branch (if there
|
||||
is one) and let them get synced to the trunk; do not install them by
|
||||
hand on the trunk as well. E.g. if there is an active "emacs-24" branch
|
||||
and you have a bug-fix appropriate for the next emacs-24.x release,
|
||||
install it only on the emacs-24 branch, not on the trunk as well.
|
||||
|
||||
Installing things manually into more than one branch makes merges more
|
||||
difficult.
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2010-03/msg01124.html
|
||||
|
||||
The exception is, if you know that the change will be difficult to
|
||||
merge to the trunk (eg because the trunk code has changed a lot).
|
||||
In that case, it's helpful if you can apply the change to both trunk
|
||||
and branch yourself (when committing the branch change, indicate
|
||||
in the commit log that it should not be merged to the trunk; see below).
|
||||
|
||||
* Backporting a bug-fix from the trunk to a branch (e.g. "emacs-24").
|
||||
Indicate in the commit log that there is no need to merge the commit
|
||||
to the trunk. Anything that matches `bzrmerge-skip-regexp' will do;
|
||||
eg start the commit message with "Backport:". This is helpful for the
|
||||
person merging the release branch to the trunk.
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00262.html
|
||||
|
||||
* Installing changes from your personal branches.
|
||||
If your branch has only a single commit, or many different real
|
||||
commits, it is fine to do a merge. If your branch has only a very
|
||||
small number of "real" commits, but several "merge from trunks", it is
|
||||
preferred that you take your branch's diff, apply it to the trunk, and
|
||||
commit directly, not merge. This keeps the history cleaner.
|
||||
|
||||
In general, when working on some feature in a separate branch, it is
|
||||
preferable not to merge from trunk until you are done with the
|
||||
feature. Unless you really need some change that was done on the
|
||||
trunk while you were developing on the branch, you don't really need
|
||||
those merges; just merge once, when you are done with the feature, and
|
||||
Bazaar will take care of the rest. Bazaar is much better in this than
|
||||
CVS, so interim merges are unnecessary.
|
||||
|
||||
Or use shelves; or rebase; or do something else. See the thread for
|
||||
yet another fun excursion into the exciting world of version control.
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00086.html
|
||||
|
||||
* Installing changes from gnulib
|
||||
Some of the files in Emacs are copied from gnulib. To synchronize
|
||||
these files from the version of gnulib that you have checked out into
|
||||
a sibling directory of your branch, type "admin/merge-gnulib"; this
|
||||
will check out the latest version of gnulib if there is no sibling
|
||||
directory already. It is a good idea to run "bzr status" afterwards,
|
||||
so that if a gnulib module added a file, you can record the new file
|
||||
using "bzr add". After synchronizing from gnulib, do a "make" in the
|
||||
usual way.
|
||||
|
||||
To change the set of gnulib modules, change the GNULIB_MODULES
|
||||
variable in admin/merge-gnulib before running it.
|
||||
|
||||
If you remove a gnulib module, or if a gnulib module
|
||||
removes a file, then remove the corresponding files by hand.
|
||||
|
||||
* How to merge changes from emacs-24 to trunk
|
||||
|
||||
The following description uses bound branches, presumably it works in
|
||||
a similar way with unbound ones.
|
||||
|
||||
0) (This step is only necessary if using bzr older than 2.4.0.)
|
||||
Get the bzr changelog_merge plugin:
|
||||
|
||||
cd ~/.bazaar/plugins
|
||||
bzr branch http://bazaar.launchpad.net/~spiv/bzr-changelog-merge/trunk changelog_merge
|
||||
|
||||
This plugin should make merging ChangeLogs smoother. It merges new
|
||||
entries to the top of the file, rather than trying to fit them in
|
||||
mid-way through. Newer versions of the plugin should also be able to
|
||||
deal with changes to *old* ChangeLog entries, that should not be
|
||||
floated to the head of the file (see launchpad#723968).
|
||||
|
||||
It is included in bzr from 2.4.0 onwards, so remember to delete the
|
||||
copy in ~/.bazaar if you upgrade bzr.
|
||||
|
||||
Maybe the default Emacs behavior without this plugin is better,
|
||||
though, it's not clear yet.
|
||||
|
||||
1) Get clean, up-to-date copies of the emacs-24 and trunk branches.
|
||||
Check for any uncommitted changes with bzr status.
|
||||
|
||||
2) M-x cd /path/to/trunk
|
||||
|
||||
The first time only, do this:
|
||||
cd .bzr/branch
|
||||
Add the following line to branch.conf:
|
||||
changelog_merge_files = ChangeLog
|
||||
|
||||
3) load admin/bzrmerge.el
|
||||
|
||||
4) M-x bzrmerge RET /path/to/emacs-24 RET
|
||||
|
||||
It will prompt about revisions that should be skipped, based on the
|
||||
regexp in bzrmerge-missing. If there are more revisions that you know
|
||||
need skipping, you'll have to do that by hand.
|
||||
|
||||
5) It will stop if there are any conflicts. Resolve them.
|
||||
Using smerge-mode, there are menu items to skip to the next conflict,
|
||||
and to take either the trunk, branch, or both copies.
|
||||
|
||||
6) After resolving all conflicts, you might need to run the bzmerge
|
||||
command again if there are more revisions still to merge.
|
||||
|
||||
Do not commit (or exit Emacs) until you have run bzrmerge to completion.
|
||||
|
||||
Before committing, check bzr status and bzr diff output.
|
||||
If you have run bzrmerge enough times, the "pending merge tip" in bzr
|
||||
status should be the last revision from the emacs-24 branch, and
|
||||
bzr status -v should show all the revisions you expect to merge.
|
||||
|
||||
(Note that it will also show "skipped" revisions. This is expected,
|
||||
and is due to a technical limitation of bzr. The log data for those
|
||||
revisions gets merged, the actual changes themselves do not.
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00609.html )
|
||||
|
||||
In particular, check the ChangeLog entries (eg in case too many
|
||||
entries have been included or whitespace between entries needs fixing).
|
||||
bzrmerge tries to fix up the dates to today's date, but it only does
|
||||
this where there are conflicts. If you used the changelog_merge plugin,
|
||||
there won't be any conflicts, and (at time of writing) you will need
|
||||
to adjust dates by hand. In any case, if someone made multiple
|
||||
ChangeLog entries on different days in the branch, you may wish to
|
||||
collapse them all to a single entry for that author in the trunk
|
||||
(because in the trunk they all appear under the same date).
|
||||
Obviously, if there are multiple changes to the same file by different
|
||||
authors, don't break the logical ordering in doing this.
|
||||
|
||||
Notes:
|
||||
|
||||
1) If a file is modified in emacs-24, and deleted in the trunk, you
|
||||
get a "contents conflict". Assuming the changes don't need to be in
|
||||
the trunk at all, use `bzr resolve path/to/file --take-this' to keep the
|
||||
trunk version. Prior to bzr 2.2.3, this may fail. You can just
|
||||
delete the .OTHER etc files by hand and use bzr resolve path/to/file.
|
||||
|
||||
2) Conflicts in autoload md5sums in comments. Strictly speaking, the
|
||||
right thing to do is merge everything else, resolve the conflict by
|
||||
choosing either the trunk or branch version, then run `make -C lisp
|
||||
autoloads' to update the md5sums to the correct trunk value before
|
||||
committing.
|
||||
|
||||
* Re-adding a file that has been removed from the repository
|
||||
|
||||
It's easy to get this wrong. Let's suppose you've done:
|
||||
|
||||
bzr remove file; bzr commit
|
||||
|
||||
and now, sometime later, you realize this was a mistake and file needs
|
||||
to be brought back. DON'T just do:
|
||||
|
||||
bzr add file; bzr commit
|
||||
|
||||
This restores file, but without its history (`bzr log file' will be
|
||||
very short). This is because file gets re-added with a new file-id
|
||||
(use `bzr file-id file' to see the id).
|
||||
|
||||
Instead of adding the file, try:
|
||||
|
||||
bzr revert -rN file; bzr commit
|
||||
|
||||
where revision N+1 is the one where file was removed.
|
||||
|
||||
You could also try `bzr add --file-ids-from', if you have a copy of
|
||||
another branch where file still exists.
|
||||
|
||||
* Undoing a commit (uncommitting)
|
||||
|
||||
It is possible to undo/remove a bzr commit (ie, to uncommit).
|
||||
Only do this if you really, really, need to. For example, if you
|
||||
somehow made a commit that triggers a bug in bzr itself.
|
||||
Don't do it because you made a typo in a commit or the log.
|
||||
|
||||
If you do need to do this, do it as soon as possible, because the
|
||||
longer you leave it, the more work is involved.
|
||||
|
||||
0. First, tell emacs-devel that you are going to do this, and suggest
|
||||
people not commit anything to the affected branch for the duration.
|
||||
|
||||
In the following, replace USER with your Savannah username, and
|
||||
BRANCH with the name of the branch.
|
||||
Let's assume that revno 100 is the bad commit, and that there have
|
||||
been two more commits after that (because nothing is ever easy).
|
||||
|
||||
1. Ensure your copy of the branch is up-to-date (for a bound
|
||||
branch, bzr up; for an unbound branch, bzr pull) and has no local
|
||||
changes (bzr st).
|
||||
|
||||
2. Make a record of the commits you are going to undo:
|
||||
bzr diff -c 102 > /tmp/102.diff
|
||||
etc
|
||||
|
||||
Also record the commit message, author, and any --fixes information.
|
||||
|
||||
3. Most Emacs branches are set up to prevent just this kind of thing.
|
||||
So we need to disable that protection:
|
||||
|
||||
bzr config append_revisions_only=False \
|
||||
-d bzr+ssh://USER@bzr.savannah.gnu.org/emacs/BRANCH/
|
||||
|
||||
4. Undo the commits:
|
||||
bzr uncommit -r -4
|
||||
|
||||
This will show the commits it is going to undo, and prompt you to confirm.
|
||||
|
||||
5. If using an unbound branch:
|
||||
bzr push --overwrite
|
||||
|
||||
6. Now, replay the commits you just undid (obviously, fix whatever it
|
||||
was in the bad commit that caused the problem):
|
||||
|
||||
patch -p0 < /tmp/100.diff
|
||||
bzr commit --author ... --fixes ... -F /tmp/100.log
|
||||
etc
|
||||
|
||||
7. If using an unbound branch:
|
||||
bzr push
|
||||
|
||||
8. Finally, re-enable the branch protection:
|
||||
bzr config append_revisions_only=True \
|
||||
-d bzr+ssh://USER@bzr.savannah.gnu.org/emacs/BRANCH/
|
||||
|
||||
9. Tell emacs-devel that it is ok to use the branch again.
|
||||
Anyone with local changes should back them up before doing anything.
|
||||
|
||||
For a bound branch, bzr up will convert any of the undone commits to a
|
||||
pending merge. Just bzr revert these away.
|
||||
|
||||
For an unbound branch, bzr pull will complain about diverged branches
|
||||
and refuse to do anything. Use bzr pull --overwrite.
|
||||
|
||||
* Loggerhead
|
||||
|
||||
Loggerhead is the bzr tool for viewing a repository over http (similar
|
||||
to ViewVC). The central version is at http://bzr.savannah.gnu.org/lh/emacs,
|
||||
but if you just like the way this interface presents data, then if
|
||||
you have your own copy of the repository, you can operate your own
|
||||
Loggerhead server in stand-alone mode, and so help to reduce the load
|
||||
on Savannah:
|
||||
|
||||
bzr branch lp:loggerhead ~/.bazaar/plugins/loggerhead
|
||||
cd /path/to/emacs/bzr
|
||||
bzr serve --http
|
||||
|
||||
You may need to install some Python dependencies to get this command to work.
|
||||
For example, on RHEL6 I needed:
|
||||
|
||||
yum install python-paste python-simplejson
|
||||
yum --enablerepo=epel install python-simpletal
|
||||
|
||||
Then point your web-browser to http://127.0.0.1:8080/ .
|
||||
|
||||
* Bisecting
|
||||
|
||||
This is a semi-automated way to find the revision that introduced a bug.
|
||||
|
||||
First, get the bzr bisect plugin if you do not have it already:
|
||||
|
||||
cd ~/.bazaar/plugins
|
||||
bzr branch lp:bzr-bisect bisect
|
||||
|
||||
`bzr help bisect' should work now.
|
||||
|
||||
It's probably simplest to make a new copy of the branch to work in
|
||||
from this point onwards.
|
||||
|
||||
Identify the last known "good" revision where the relevant issue is
|
||||
NOT present (e.g. maybe Emacs 24.1). Let's say this is revision 1000.
|
||||
|
||||
bzr bisect start
|
||||
bzr bisect no -r 1000
|
||||
|
||||
At this point, bzr will switch to the mid-point of revision 1000 and
|
||||
the current revision. If you know that the issue was definitely
|
||||
present in some specific revision (say 2000), you can use:
|
||||
|
||||
bzr bisect yes -r 2000
|
||||
|
||||
Now bzr switches to revision 1500.
|
||||
|
||||
Now test whether the issue is present. You might need to rebuild
|
||||
Emacs to do this, or if you know the problem is in a specific Lisp
|
||||
file, you might be able to get away with just loading that one file in
|
||||
current Emacs.
|
||||
|
||||
If the issue is present, use
|
||||
|
||||
bzr bisect yes
|
||||
|
||||
If it is not, use
|
||||
|
||||
bzr bisect no
|
||||
|
||||
Repeat until you zero-in on the specific revision.
|
||||
|
||||
When finished, use
|
||||
|
||||
bzr bisect reset
|
||||
|
||||
or simply delete the entire branch if you created it just for this.
|
||||
|
||||
* Commit emails
|
||||
|
||||
** Old method: bzr-hookless-email
|
||||
https://launchpad.net/bzr-hookless-email
|
||||
|
||||
Runs hourly via cron. Must ask Savannah admins to enable/disable it
|
||||
for each branch. Stores the last revision that it mailed as
|
||||
last_revision_mailed in branch.conf on the server. Breaks with bzr 2.6:
|
||||
|
||||
http://lists.gnu.org/archive/html/savannah-hackers-public/2013-05/msg00000.html
|
||||
|
||||
Fix from https://bugs.launchpad.net/bzr-hookless-email/+bug/988195
|
||||
only partially works. Breaks again on every merge commit:
|
||||
|
||||
https://lists.ubuntu.com/archives/bazaar/2013q2/075520.html
|
||||
http://lists.gnu.org/archive/html/savannah-hackers-public/2013-05/msg00024.html
|
||||
|
||||
You can force it to skip the merge commit by changing the value for
|
||||
last_revision_mailed, eg:
|
||||
|
||||
bzr config last_revision_mailed=xfq.free@gmail.com-20130603233720-u1aumaxvf3o0rlai -d bzr+ssh://USERNAME@bzr.savannah.gnu.org/emacs/trunk/
|
||||
|
||||
** New method: bzr-email plugin
|
||||
https://launchpad.net/bzr-email
|
||||
http://lists.gnu.org/archive/html/savannah-hackers-public/2013-06/msg00007.html
|
||||
|
||||
Runs on commit. Projects can enable it themselves by using `bzr
|
||||
config' to set post_commit_to option for a branch. See `bzr help email'
|
||||
(if you have the plugin installed) for other options.
|
||||
|
||||
The From: address will be that of your Savannah account, rather than
|
||||
your `bzr whoami' information.
|
||||
|
||||
Note: if you have the bzr-email plugin installed locally, then when
|
||||
you commit to the Emacs repository it will also try to send a commit
|
||||
email from your local machine. If your machine is not configured to
|
||||
send external mail, this will just fail. In any case, you may prefer
|
||||
to either remove the plugin from your machine, or disable it for Emacs
|
||||
branches. You can do this either by editing branch.conf in your Emacs
|
||||
branches, to override the server setting (untested; not sure this
|
||||
works), or by adding an entry to ~/.bazaar/locations.conf:
|
||||
|
||||
[bzr+ssh://USERNAME@bzr.savannah.gnu.org/emacs/*/]
|
||||
post_commit_to = ""
|
||||
|
||||
You have to use locations.conf rather than bazaar.conf because the
|
||||
latter has a lower priority than branch.conf.
|
||||
|
||||
* Using git-bzr
|
||||
|
||||
** initially
|
||||
|
||||
You can use Git locally to talk to the Bazaar repo as a "remote" repo
|
||||
via git-bzr (aka git-remote-bzr). Initial clone:
|
||||
|
||||
git clone bzr::bzr+ssh://USER@bzr.sv.gnu.org/emacs/trunk e
|
||||
|
||||
This creates the working dir e/ (with subdir .git, etc). Disk usage
|
||||
is 13G (as of early 2014), so you will probably want to repack:
|
||||
|
||||
git repack -a -d -f --window=250 --depth=250 --window-memory=N
|
||||
|
||||
where N is chosen to avoid swapping. E.g., given 512MB RAM, N="200m"
|
||||
results in "du -sh .git" => 559M, about double the smallest reported
|
||||
value (obtained with "deprecated" command "git gc --aggressive").
|
||||
|
||||
** steady-state
|
||||
|
||||
Use "fetch", "pull" and other remote-to-local commands as usual.
|
||||
|
||||
For "push", the Emacs Bazaar repo is configured with
|
||||
|
||||
append_revisions_only = True
|
||||
|
||||
so some versions of git-remote-bzr may raise AppendRevisionsOnlyViolation
|
||||
(in func do_export) instead of displaying a "non fast-forward" message
|
||||
and skipping the branch. See:
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-01/msg00436.html
|
||||
|
||||
which includes a provisional patch to git-remote-bzr to do that.
|
||||
|
||||
** remote name
|
||||
|
||||
Although Git itself is agnostic about what names you choose for
|
||||
the remote repo, it seems git-bzr is more likely to get confused.
|
||||
After the clone as described above, the remote name is "origin";
|
||||
changing it is Not Recommended. [Insert 9-hour high-entropy then
|
||||
mysterious bug w/ JSON parsing errors anecdote here. --ttn]
|
|
@ -1,32 +0,0 @@
|
|||
Emacs generally follows the GNU coding standards when it comes to ChangeLogs:
|
||||
http://www.gnu.org/prep/standards/html_node/Change-Logs.html
|
||||
|
||||
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.
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-05/msg00514.html
|
||||
|
||||
|
||||
If installing changes written by someone else, make the ChangeLog
|
||||
entry in their name, not yours.
|
||||
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00793.html
|
||||
There is no need to make change log entries for files such as NEWS,
|
||||
MAINTAINERS, and FOR-RELEASE.
|
||||
"There is no need" means you don't have to, but you can if you want to.
|
||||
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2006-12/msg01135.html
|
||||
There is no need to indicate regeneration of files such as configure
|
||||
in ChangeLog.
|
||||
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2008-11/msg00940.html
|
||||
Preferred form for several entries with the same content:
|
||||
|
||||
* help.el (view-lossage):
|
||||
* kmacro.el (kmacro-edit-lossage):
|
||||
* edmacro.el (edit-kbd-macro): Fix docstring, lossage is now 300 keys.
|
||||
|
||||
(Rather than anything involving "ditto" and suchlike.)
|
|
@ -1,70 +0,0 @@
|
|||
HOW TO COMMIT CHANGES TO EMACS
|
||||
|
||||
Most of these points are from:
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2009-03/msg00555.html
|
||||
From: Miles Bader
|
||||
Subject: commit style redux
|
||||
Date: Tue, 31 Mar 2009 12:21:20 +0900
|
||||
|
||||
(0) Each commit should correspond to a single change (whether spread
|
||||
over multiple files or not). Do not mix different changes in the
|
||||
same commit (eg adding a feature in one file, fixing a bug in
|
||||
another should be two commits, not one).
|
||||
|
||||
(1) Commit all changed files at once with a single log message (which
|
||||
in CVS will result in an identical log message for all committed
|
||||
files), not one-by-one. This is pretty easy using vc-dir now.
|
||||
|
||||
(2) Make the log message describe the entire changeset, perhaps
|
||||
including relevant changelog entries (I often don't bother with
|
||||
the latter if it's a trivial sort of change).
|
||||
|
||||
Many modern source-control systems vaguely distinguish the first
|
||||
line of the log message to use as a short summary for abbreviated
|
||||
history listing (in arch this was explicitly called the summary,
|
||||
but many other systems have a similar concept). So it's nice if
|
||||
you can format the log entry like:
|
||||
|
||||
SHORTISH ONE-LINE SUMMARY
|
||||
|
||||
MULTIPLE-LINE DETAILED DESCRIPTION POSSIBLY INCLUDING (OR
|
||||
CONSISTING OF) CHANGELOG ENTRIES
|
||||
|
||||
[Even with CVS this style is useful, because web CVS browsing
|
||||
interfaces often include the first N words of the log message of
|
||||
the most recent commit as a short "most recent change"
|
||||
description.]
|
||||
|
||||
(3) Don't phrase log messages assuming the filename is known, because
|
||||
in non-file-oriented systems (everything modern other than CVS),
|
||||
the log listing tends to be treated as global information, and the
|
||||
connection with specific files is less explicit.
|
||||
|
||||
For instance, currently I often see log messages like "Regenerate";
|
||||
for modern source-control systems with a global log, it's better to
|
||||
have something like "Regenerate configure".
|
||||
|
||||
(4) (Added in 2014) In commit comments, and ChangeLog files, it is best
|
||||
to use ways of identifying revisions that are not dependent on a
|
||||
particular version control system. (At time of writing Emacs is
|
||||
about to move to its fourth VCS and another move in the future is
|
||||
not impossible.) An excellent way to identify commits is by
|
||||
quoting their summary line. Another is with an action stamp - an
|
||||
RFC3339 date followed by ! followed by the committer's email - for
|
||||
example, "2014-01-16T05:43:35Z!esr@thyrsus.com". Often, "my
|
||||
previous commit" will suffice.
|
||||
|
||||
Followup discussion:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2010-01/msg00897.html
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2010-02/msg00401.html
|
||||
|
||||
|
||||
PREVIOUS GUIDELINES FOR CVS
|
||||
|
||||
For historical interest only, here is the old-style advice for CVS logs:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2007-12/msg01208.html
|
||||
|
||||
From: Eli Zaretskii
|
||||
Subject: Re: Log messages in CVS
|
||||
Date: Sat, 29 Dec 2007 16:06:29 +0200
|
|
@ -22,9 +22,9 @@ author to make a non-trivial total. If so, make sure they have an
|
|||
assignment. If adding a whole file adjust the copyright statements in
|
||||
the file.
|
||||
|
||||
2. When installing code written by someone else, the ChangeLog entry
|
||||
2. When installing code written by someone else, the commit
|
||||
should be in the name of the author of the code, not the person who
|
||||
installs it. Also use bzr commit's "--author" option.
|
||||
installs it. Also use commit's "--author" option.
|
||||
Do not install any of your own changes in the same commit.
|
||||
|
||||
3. With images, add the legal info to a README file in the directory
|
||||
|
@ -115,8 +115,8 @@ else it is possible the file should not be in Emacs at all (please
|
|||
report!).
|
||||
|
||||
Note that it seems painfully clear that one cannot rely on commit logs,
|
||||
or even ChangeLogs, for older changes. People often installed changes
|
||||
from others, without recording the true authorship.
|
||||
or even change log entries, for older changes. People often installed
|
||||
changes from others, without recording the true authorship.
|
||||
|
||||
[For reference, most of these points were established via email with
|
||||
rms, 2007/1, "Copyright years".
|
||||
|
@ -316,11 +316,6 @@ licensing@fsf.org starting on Thu, 07 Aug 2003 with subject:
|
|||
"[gnu.org #58812] Changing license of MH-E manual"
|
||||
|
||||
|
||||
msdos/is_exec.c, sigaction.c - these files are copyright DJ Delorie.
|
||||
Leave the copyrights alone. Leave the Eli Zaretskii copyright in
|
||||
is_exec.c alone. See the msdos/README file for the legal history of
|
||||
these files.
|
||||
|
||||
msdos/sed*.inp - These files are copyright FSF and distributed under
|
||||
an MIT-like license.
|
||||
|
||||
|
@ -489,10 +484,10 @@ system)
|
|||
obviously good):
|
||||
|
||||
|
||||
Is it OK to just `bzr remove' a file for legal reasons, or is
|
||||
something more drastic needed? A removed file is still available from
|
||||
the repository, if suitable options are applied. (This issue obviously
|
||||
does not affect a release).
|
||||
Is it OK to just remove a file for legal reasons, or is something more
|
||||
drastic (excision from the entire repository history) needed? A
|
||||
removed file is still available from the repository, if suitable
|
||||
options are applied. (This issue obviously does not affect a release).
|
||||
rms: will ask lawyer
|
||||
|
||||
|
||||
|
@ -563,8 +558,7 @@ oldXMenu/insque.c (rms: "We wrote that specifically for Emacs, so
|
|||
definitely relicense that.").
|
||||
|
||||
2. The files that are copyright FSF and AIST, or AIST alone, should be
|
||||
and were updated, ditto the oldXMenu files with FSF copyright, and
|
||||
msdos/is_exec.c and sigaction.c.
|
||||
and were updated, ditto the oldXMenu files with FSF copyright.
|
||||
|
||||
3. lwlib/
|
||||
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
ttn 2004-05-09
|
||||
|
||||
The exit value of a program returning to the shell on unixoid systems is
|
||||
typically 0 for success, and non-0 (such as 1) for failure. For vms it is
|
||||
odd (1,3,5...) for success, even (0,2,4...) for failure.
|
||||
|
||||
This holds from the point of view of the "shell" (in quotes because vms has a
|
||||
different dispatch model that is not explained further here).
|
||||
|
||||
From the point of view of the program, nowadays stdlib.h on both type of
|
||||
systems provides macros `EXIT_SUCCESS' and `EXIT_FAILURE' that should DTRT.
|
||||
|
||||
NB: The numerical values of these macros DO NOT need to fulfill the exit
|
||||
value requirements outlined in the first paragraph! That is the job of the
|
||||
`exit' function. Thus, this kind of construct shows misunderstanding:
|
||||
|
||||
#ifdef VMS
|
||||
exit (1);
|
||||
#else
|
||||
exit (0);
|
||||
#endif
|
||||
|
||||
Values aside from EXIT_SUCCESS and EXIT_FAILURE are tricky.
|
||||
|
||||
|
||||
|
||||
ttn 2004-05-12
|
||||
|
||||
Values aside from EXIT_SUCCESS and EXIT_FAILURE can be used to indicate
|
||||
finer gradations of failure. If this is the only information available
|
||||
to the caller, clamping such values to EXIT_FAILURE loses information.
|
||||
If there are other ways to indicate the problem to the caller (such as
|
||||
a message to stderr) it may be ok to clamp. In all cases, it is the
|
||||
relationship between the program and its caller that must be examined.
|
||||
[Insert ZAMM quote here.]
|
135
admin/notes/git-workflow
Normal file
135
admin/notes/git-workflow
Normal file
|
@ -0,0 +1,135 @@
|
|||
(This is a draft. The method here won't actually work yet, because
|
||||
neither git-new-workdir nor merge-changelog are in the Emacs
|
||||
distribution yet.)
|
||||
|
||||
Setting up and using git for normal, simple bugfixing
|
||||
=====================================================
|
||||
|
||||
If you haven't configured git before you should first do:
|
||||
|
||||
git config --global user.name "Frank Chu"
|
||||
git config --global user.email "fchu@example.com"
|
||||
|
||||
Initial setup
|
||||
=============
|
||||
|
||||
Then we want to clone the repository. We normally want to have both
|
||||
the current trunk and the emacs-24 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
|
||||
|
||||
You now have both branches conveniently accessible, and you can do
|
||||
"git pull" in them once in a while to keep updated.
|
||||
|
||||
|
||||
Fixing bugs
|
||||
===========
|
||||
|
||||
You edit the files in either branch, `M-x vc-dir', and check in your
|
||||
changes. Then you need to push the data to the main repository. This
|
||||
will usually fail, since somebody else has pushed other changes in the
|
||||
meantime. To fix this, say
|
||||
|
||||
git pull --rebase
|
||||
|
||||
which will update your repository, and then re-apply your changes on
|
||||
top of that. Then say
|
||||
|
||||
git push
|
||||
|
||||
|
||||
Backporting to emacs-24
|
||||
=======================
|
||||
|
||||
If you have applied a fix to the trunk, but then decide that it should
|
||||
be applied to the emacs-24 branch, too, then
|
||||
|
||||
cd ~/emacs/trunk
|
||||
git log
|
||||
|
||||
and find the commit you're looking for. Then find the commit ID,
|
||||
which will look like
|
||||
|
||||
commit 958b768a6534ae6e77a8547a56fc31b46b63710b
|
||||
|
||||
cd ~/emacs/emacs-24
|
||||
git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b
|
||||
|
||||
and add "Backport:" to the commit string. Then
|
||||
|
||||
git push
|
||||
|
||||
|
||||
Merging emacs-24 to trunk/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
|
||||
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
|
||||
'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.
|
||||
|
||||
How to use gitmerge.el:
|
||||
|
||||
Enter the Emacs repository, checkout 'master' and make sure it's
|
||||
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
|
||||
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
|
||||
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
|
||||
commit's diff while still being seen as merged, so it won't turn up
|
||||
again in future merges. Recognizing these kinds of commits is done
|
||||
with a simple regexp searching the log for strings like 'backport' or
|
||||
'merge', so you'll probably see false positives as well as false
|
||||
negatives. Carefully go through the commits, investigate them by
|
||||
hitting 'l', 'd' and 'f', and mark or unmark them for skipping with
|
||||
's'. When you're done, hit 'm' to start the merge.
|
||||
|
||||
You'll likely get conflicts during the process which cannot be dealt
|
||||
with automatically. In that case, the merge will stop and show you
|
||||
the list of conflicted files. Resolve those conflicts as usual using
|
||||
smerge and restart gitmerge (remember to enter the repository when
|
||||
doing that). You don't have to 'add' the resolved files and 'commit'
|
||||
the resulting merge, but if you really want to, feel free to do that.
|
||||
Note you can also resume gitmerge in a new Emacs session, since the
|
||||
current state will be saved to disk.
|
||||
|
||||
When everything's done, look hard at the resulting merge. Skipping
|
||||
commits requires separate merges, so don't be surprised to see more
|
||||
than one merge commit. If you're happy, push.
|
||||
|
||||
Warnings about X11 forwarding
|
||||
=============================
|
||||
|
||||
If you get warnings like
|
||||
|
||||
Warning: No xauth data; using fake authentication data for X11 forwarding.
|
||||
X11 forwarding request failed on channel 0
|
||||
|
||||
when pulling or pushing data, add the following to the start of
|
||||
~/.ssh/config:
|
||||
|
||||
Host git.sv.gnu.org
|
||||
ForwardX11 no
|
|
@ -26,7 +26,7 @@ http://lists.gnu.org/mailman/listinfo/emacs-buildstatus
|
|||
* The Emacs jobset consists of the following jobs:
|
||||
|
||||
** The `tarball' job
|
||||
which gets a checkout from bzr, and does a bootstrap followed
|
||||
which gets a checkout from the repository, and does a bootstrap followed
|
||||
by running make-dist to create a tarball. If this job fails, all the
|
||||
others will too (because they use the tarball as input).
|
||||
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
Iso-Functional Type Contour
|
||||
|
||||
|
||||
This is a term coined to describe "column int->float" change approach, and can
|
||||
be used whenever low-level types need to change (hopefully not often!) but the
|
||||
meanings of the values (whose type has changed) do not.
|
||||
|
||||
The premise is that changing a low-level type potentially means lots of code
|
||||
needs to be changed as well, and the question is how to do this incrementally,
|
||||
which is the preferred way to change things.
|
||||
|
||||
Say LOW and HIGH are C functions:
|
||||
|
||||
int LOW (void) { return 1; }
|
||||
void HIGH (void) { int value = LOW (); }
|
||||
|
||||
We want to convert LOW to return float, so we cast HIGH usage:
|
||||
|
||||
float LOW (void) { return 1.0; }
|
||||
void HIGH (void) { int value = (int) LOW (); } /* iftc */
|
||||
|
||||
The comment /* iftc */ is used to mark this type of casting to differentiate
|
||||
it from other casting. We commit the changes and can now go about modifying
|
||||
LOW and HIGH separately. When HIGH is ready to handle the type change, the
|
||||
cast can be removed.
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
Some lisp/emacs-lisp/ Features and Where They Are Documented
|
||||
|
||||
Copyright (C) 2007-2014 Free Software Foundation, Inc.
|
||||
See the end of the file for license conditions.
|
||||
|
||||
|
||||
* Status Key
|
||||
- -- as yet unknown
|
||||
n/a -- not applicable (internal, uninteresting, etc)
|
||||
obsolete -- an obsolete feature, to be removed in future
|
||||
todo -- not documented but should be
|
||||
NODE -- documented in or under info node NODE
|
||||
|
||||
|
||||
* Features
|
||||
advice (elisp) Advising Functions
|
||||
advice-preload n/a
|
||||
assoc -
|
||||
authors -
|
||||
autoload (elisp) Autoload
|
||||
avl-tree -
|
||||
backquote n/a
|
||||
benchmark n/a
|
||||
bindat (elisp) Byte Packing
|
||||
byte-compile (elisp) Byte Compilation
|
||||
byte-opt -
|
||||
bytecomp (elisp) Compilation Functions
|
||||
checkdoc (elisp) Documentation Tips
|
||||
cl (cl)
|
||||
cl-compat n/a
|
||||
cl-specs n/a
|
||||
copyright -
|
||||
crm -
|
||||
cust-print (elisp) Printing in Edebug
|
||||
debug (elisp) Debugger
|
||||
derived (elisp) Derived Modes
|
||||
disass (elisp) Disassembly
|
||||
easy-mmode (elisp) Defining Minor Modes
|
||||
easymenu -
|
||||
edebug (elisp) Edebug
|
||||
eldoc -
|
||||
elint -
|
||||
elp n/a
|
||||
ewoc (elisp) Separated Rendering
|
||||
find-func -
|
||||
find-gc -
|
||||
generic (elisp) Generic Modes
|
||||
gulp n/a
|
||||
helper -
|
||||
levents obsolete
|
||||
lisp-float-type -
|
||||
lisp-mnt -
|
||||
lisp-mode n/a
|
||||
lmenu obsolete
|
||||
lucid obsolete
|
||||
macroexp (elisp) Expansion
|
||||
pp (emacs) Program Indent
|
||||
re-builder -
|
||||
regexp-opt (elisp) Regexp Functions
|
||||
regi -
|
||||
ring (elisp) Rings
|
||||
rx -
|
||||
shadow -
|
||||
sregex obsolete
|
||||
syntax (elisp) Position Parse
|
||||
testcover -
|
||||
timer (elisp) Timers
|
||||
tq (elisp) Transaction Queues
|
||||
trace -
|
||||
unsafep (elisp) Function Safety
|
||||
warnings (elisp) Warnings
|
||||
|
||||
|
||||
* Above list created using default directory lisp/emacs-lisp/ with
|
||||
(shell-command
|
||||
"sed '/^(provide '\\''/!d;s// /;s/).*//' *.el | sort | uniq")
|
||||
|
||||
|
||||
* How to use this file to improve Emacs
|
||||
(loop
|
||||
(let* ((feature (choose-one Features))
|
||||
(status (feature-status feature)))
|
||||
(if (or (eq '- status) (not (verify status)))
|
||||
(update feature (current-docs feature))
|
||||
(case status
|
||||
(todo (let (doc patch feedback)
|
||||
(while (not (grok feature))
|
||||
(or (play-with feature)
|
||||
(grep feature Internet)
|
||||
(grep feature (wisdom-maybe "emacs-devel"))))
|
||||
(setq doc (write-documentation feature)
|
||||
patch (diff (current-docs) doc))
|
||||
(while (not (and (correct doc)
|
||||
(well-placed doc)
|
||||
(well-formed patch)))
|
||||
(setq doc (revise doc)
|
||||
patch (diff (current-docs) doc))
|
||||
feedback (wisdom-maybe "emacs-devel" patch))
|
||||
(when (install patch)
|
||||
(when (update feature (current-docs feature))
|
||||
(job-well-done user-login-name)))))
|
||||
(n/a (job-well-done user-login-name))))))
|
||||
|
||||
|
||||
* Etc
|
||||
|
||||
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/>.
|
||||
|
||||
Local variables:
|
||||
mode: outline
|
||||
End:
|
|
@ -15,7 +15,7 @@ output under the headings "The following files are not valid DOS file
|
|||
names:" and "The following resolve to the same DOS file names:" should
|
||||
not include any files that end up in the release tarball.
|
||||
|
||||
** Make the ChangeLog entry in the name of the author(s), not your own name.
|
||||
** Commit in the name of the author(s), not your own name.
|
||||
|
||||
** If appropriate, check that the file compiles OK and that Emacs
|
||||
builds fine with it. Address any compilation warnings.
|
||||
|
|
105
admin/notes/repo
Normal file
105
admin/notes/repo
Normal file
|
@ -0,0 +1,105 @@
|
|||
NOTES ON COMMITTING TO EMACS'S REPOSITORY -*- outline -*-
|
||||
|
||||
** elpa
|
||||
|
||||
This branch does not contain a copy of Emacs, but of the Emacs Lisp
|
||||
package archive (elpa.gnu.org). See admin/notes/elpa for further
|
||||
explanation, and the README file in the branch for usage
|
||||
instructions.
|
||||
|
||||
* Installing changes from your personal branches.
|
||||
|
||||
If your branch has only a single commit, or many different real
|
||||
commits, it is fine to do a merge. If your branch has only a very
|
||||
small number of "real" commits, but several "merge from trunks", it is
|
||||
preferred that you take your branch's diff, apply it to the trunk, and
|
||||
commit directly, not merge. This keeps the history cleaner.
|
||||
|
||||
In general, when working on some feature in a separate branch, it is
|
||||
preferable not to merge from trunk until you are done with the
|
||||
feature. Unless you really need some change that was done on the
|
||||
trunk while you were developing on the branch, you don't really need
|
||||
those merges; just merge once, when you are done with the feature, and
|
||||
Bazaar will take care of the rest. Bazaar is much better in this than
|
||||
CVS, so interim merges are unnecessary.
|
||||
|
||||
Or use shelves; or rebase; or do something else. See the thread for
|
||||
yet another fun excursion into the exciting world of version control.
|
||||
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00086.html
|
||||
|
||||
* Installing changes from gnulib
|
||||
|
||||
Some of the files in Emacs are copied from gnulib. To synchronize
|
||||
these files from the version of gnulib that you have checked out into
|
||||
a sibling directory of your branch, type "admin/merge-gnulib"; this
|
||||
will check out the latest version of gnulib if there is no sibling
|
||||
directory already. It is a good idea to run "git status" afterwards,
|
||||
so that if a gnulib module added a file, you can record the new file
|
||||
using "git add". After synchronizing from gnulib, do a "make" in the
|
||||
usual way.
|
||||
|
||||
To change the set of gnulib modules, change the GNULIB_MODULES
|
||||
variable in admin/merge-gnulib before running it.
|
||||
|
||||
If you remove a gnulib module, or if a gnulib module
|
||||
removes a file, then remove the corresponding files by hand.
|
||||
|
||||
* How to merge changes from emacs-24 to trunk
|
||||
|
||||
[The section on git merge procedure has not yet been written]
|
||||
|
||||
Inspect the change log entries (e.g. in case too many entries have been
|
||||
included or whitespace between entries needs fixing). If someone made
|
||||
multiple change log entries on different days in the branch, you may
|
||||
wish to collapse them all to a single entry for that author in the
|
||||
trunk (because in the trunk they all appear under the same date).
|
||||
Obviously, if there are multiple changes to the same file by different
|
||||
authors, don't break the logical ordering in doing this.
|
||||
|
||||
You may see conflicts in autoload md5sums in comments. Strictly
|
||||
speaking, the right thing to do is merge everything else, resolve the
|
||||
conflict by choosing either the trunk or branch version, then run
|
||||
`make -C lisp autoloads' to update the md5sums to the correct trunk
|
||||
value before committing.
|
||||
|
||||
* Re-adding a file that has been removed from the repository
|
||||
|
||||
Let's suppose you've done:
|
||||
|
||||
git rm file; git commit -a
|
||||
|
||||
You can just restore a copy of the file and then re-add it;
|
||||
git does not have per-file history so this will not harm
|
||||
anything.
|
||||
|
||||
Alternatively, you can do
|
||||
|
||||
git revert XXXXX
|
||||
|
||||
where XXXXX is the hash of the commit in which file was removed.
|
||||
This backs out the entire changeset the deletion was part of,
|
||||
which is often more appropriate.
|
||||
|
||||
* Undoing a commit (uncommitting)
|
||||
|
||||
If you have not pushed the commit, you may be able to use `git reset
|
||||
--hard' with a hash argument to revert the your local repo copy to the
|
||||
pre-commit state.
|
||||
|
||||
If you have pushed commit, resetting will be ineffective because it
|
||||
will only vanish the commit in your local copy. Instead, use `git
|
||||
revert', giving it the commit ID as argument. This will create a
|
||||
new commit that backs out the change. Then push that.
|
||||
|
||||
Note that git will generate a log message for the revert that includes
|
||||
a git hash. Please edit this to refer to the commit by the first line
|
||||
of its log comment, or by committer and date, or by something else
|
||||
that is not the hash. As noted previously, it is best to avoid hashes
|
||||
in comments in case we someday have to change version-control systems
|
||||
again.
|
||||
|
||||
* Bisecting
|
||||
|
||||
This is a semi-automated way to find the revision that introduced a bug.
|
||||
Browse `git help bisect' for technical instructions.
|
1989
admin/notes/tags
1989
admin/notes/tags
File diff suppressed because it is too large
Load diff
|
@ -187,19 +187,6 @@ nontrivial changes to the build process.
|
|||
|
||||
leim/MISC-DIC/cangjie-table.cns
|
||||
|
||||
* iso-latin-2
|
||||
|
||||
These files are processed by csplain, a program that requires
|
||||
Latin-2 input. In 2012 the csplain maintainers started
|
||||
recommending UTF-8, but these files haven't been converted yet.
|
||||
|
||||
etc/refcards/cs-dired-ref.tex
|
||||
etc/refcards/cs-refcard.tex
|
||||
etc/refcards/cs-survival.tex
|
||||
etc/refcards/sk-dired-ref.tex
|
||||
etc/refcards/sk-refcard.tex
|
||||
etc/refcards/sk-survival.tex
|
||||
|
||||
* japanese-iso-8bit
|
||||
|
||||
SKK-JISYO.L is a verbatim copy of a file taken from an external source.
|
||||
|
@ -227,11 +214,6 @@ nontrivial changes to the build process.
|
|||
operating in some other language environment.
|
||||
|
||||
etc/tutorials/TUTORIAL.ja
|
||||
leim/quail/cyril-jis.el
|
||||
leim/quail/hanja-jis.el
|
||||
leim/quail/japanese.el
|
||||
leim/quail/py-punct.el
|
||||
leim/quail/pypunct-b5.el
|
||||
lisp/international/ja-dic-cnv.el
|
||||
lisp/international/ja-dic-utl.el
|
||||
lisp/international/kinsoku.el
|
||||
|
@ -239,18 +221,27 @@ nontrivial changes to the build process.
|
|||
lisp/international/titdic-cnv.el
|
||||
lisp/language/japan-util.el
|
||||
lisp/language/japanese.el
|
||||
lisp/leim/quail/cyril-jis.el
|
||||
lisp/leim/quail/hanja-jis.el
|
||||
lisp/leim/quail/japanese.el
|
||||
lisp/leim/quail/py-punct.el
|
||||
lisp/leim/quail/pypunct-b5.el
|
||||
lisp/term/x-win.el
|
||||
|
||||
This file contains just Chinese characters, and has same problem.
|
||||
Also, it contains characters that cannot be encoded in UTF-8.
|
||||
|
||||
lisp/international/titdic-cnv.el
|
||||
|
||||
* utf-8-emacs
|
||||
|
||||
These files contain characters that cannot be encoded in UTF-8.
|
||||
|
||||
leim/quail/tibetan.el
|
||||
leim/quail/ethiopic.el
|
||||
lisp/international/titdic-cnv.el
|
||||
lisp/language/tibetan.el
|
||||
lisp/language/tibet-util.el
|
||||
lisp/language/ind-util.el
|
||||
lisp/leim/quail/ethiopic.el
|
||||
lisp/leim/quail/tibetan.el
|
||||
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
|
26
admin/notes/versioning
Normal file
26
admin/notes/versioning
Normal file
|
@ -0,0 +1,26 @@
|
|||
GNU EMACS VERSIONING -*- org -*-
|
||||
|
||||
Ref: http://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00872.html
|
||||
|
||||
Emacs version numbers have the form
|
||||
|
||||
major.minor[.devel].build
|
||||
|
||||
"build" increments each time Emacs is built in the same location
|
||||
(without cleaning) and isn't really part of the version.
|
||||
|
||||
bugfix releases increase "minor" by 1.
|
||||
non-bugfix releases increase "major" by 1, and reset "minor" to 1.
|
||||
(The division between bugfix and non-bugfix has not always been clear
|
||||
historically.)
|
||||
|
||||
Unreleased (development) versions have an extra "devel" component.
|
||||
This is a fairly meaningless number that may be unchanged for a long time.
|
||||
It is normally 50.
|
||||
When the release process starts, it changes to 90, 91, ...
|
||||
When the actual release is made, this component is removed.
|
||||
|
||||
The development version for a new major release has "minor" = 0.
|
||||
The development version for a new minor release has "minor" = that of
|
||||
the previous release.
|
||||
|
|
@ -2,7 +2,7 @@ HOW TO MAINTAIN COPYRIGHT YEARS FOR GNU EMACS
|
|||
|
||||
Maintaining copyright years is now very simple: every time a new year
|
||||
rolls around, add that year to every FSF (and AIST) copyright notice.
|
||||
Do this by running the 'admin/update-copyright' script on a fresh bzr
|
||||
Do this by running the 'admin/update-copyright' script on a fresh repo
|
||||
checkout. Inspect the results for plausibility, then commit them.
|
||||
|
||||
There's no need to worry about whether an individual file has changed
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
|
||||
|
||||
PUBLIC_LIBSRC_BINARIES='emacsclient etags ctags ebrowse'
|
||||
PUBLIC_LIBSRC_SCRIPTS='grep-changelog'
|
||||
|
||||
AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile$ Makefile.in$ makefile$ makefile.w32-in$ stamp-subdir [.]cvsignore [.]arch-ids [{]arch[}] [.][cho]$ make-docfile"
|
||||
|
||||
|
@ -230,9 +229,6 @@ maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs-$VERSION
|
|||
for F in $PUBLIC_LIBSRC_BINARIES; do
|
||||
maybe_emit_copy $BUILD/lib-src/$F $DST_BIN/$F
|
||||
done
|
||||
for F in $PUBLIC_LIBSRC_SCRIPTS; do
|
||||
maybe_emit_copy $SRC/lib-src/$F $DST_BIN/$F
|
||||
done
|
||||
|
||||
if test x"$SRC" = x"$BUILD"; then
|
||||
PFXS="$BUILD"
|
||||
|
@ -259,7 +255,7 @@ for SUBDIR in lisp leim etc lib-src info; do
|
|||
;;
|
||||
lib-src)
|
||||
DST="$DST_LIBEXEC"
|
||||
AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES $PUBLIC_LIBSRC_SCRIPTS)\$)" | tr ' ' '|'`"
|
||||
AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES)\$)" | tr ' ' '|'`"
|
||||
;;
|
||||
info)
|
||||
DST="$DST_INFO"
|
||||
|
|
3
admin/unidata/.gitignore
vendored
3
admin/unidata/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
|||
*.elc
|
||||
unidata.txt
|
||||
|
176
admin/unidata/BidiBrackets.txt
Normal file
176
admin/unidata/BidiBrackets.txt
Normal file
|
@ -0,0 +1,176 @@
|
|||
# BidiBrackets-7.0.0.txt
|
||||
# Date: 2014-01-21, 02:30:00 GMT [AG, LI, KW]
|
||||
#
|
||||
# Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties
|
||||
#
|
||||
# This file is a normative contributory data file in the Unicode
|
||||
# Character Database.
|
||||
#
|
||||
# Copyright (c) 1991-2014 Unicode, Inc.
|
||||
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
||||
#
|
||||
# Bidi_Paired_Bracket is a normative property of type Miscellaneous,
|
||||
# which establishes a mapping between characters that are treated as
|
||||
# bracket pairs by the Unicode Bidirectional Algorithm.
|
||||
#
|
||||
# Bidi_Paired_Bracket_Type is a normative property of type Enumeration,
|
||||
# which classifies characters into opening and closing paired brackets
|
||||
# for the purposes of the Unicode Bidirectional Algorithm.
|
||||
#
|
||||
# This file lists the set of code points with Bidi_Paired_Bracket_Type
|
||||
# property values Open and Close. The set is derived from the character
|
||||
# properties General_Category (gc), Bidi_Class (bc), Bidi_Mirrored (Bidi_M),
|
||||
# and Bidi_Mirroring_Glyph (bmg), as follows: two characters, A and B,
|
||||
# form a bracket pair if A has gc=Ps and B has gc=Pe, both have bc=ON and
|
||||
# Bidi_M=Y, and bmg of A is B. Bidi_Paired_Bracket (bpb) maps A to B and
|
||||
# vice versa, and their Bidi_Paired_Bracket_Type (bpt) property values are
|
||||
# Open (o) and Close (c), respectively.
|
||||
#
|
||||
# For legacy reasons, the characters U+FD3E ORNATE LEFT PARENTHESIS and
|
||||
# U+FD3F ORNATE RIGHT PARENTHESIS do not mirror in bidirectional display
|
||||
# and therefore do not form a bracket pair.
|
||||
#
|
||||
# The Unicode property value stability policy guarantees that characters
|
||||
# which have bpt=o or bpt=c also have bc=ON and Bidi_M=Y. As a result, an
|
||||
# implementation can optimize the lookup of the Bidi_Paired_Bracket_Type
|
||||
# property values Open and Close by restricting the processing to characters
|
||||
# with bc=ON.
|
||||
#
|
||||
# The format of the file is three fields separated by a semicolon.
|
||||
# Field 0: Unicode code point value, represented as a hexadecimal value
|
||||
# Field 1: Bidi_Paired_Bracket property value, a code point value or <none>
|
||||
# Field 2: Bidi_Paired_Bracket_Type property value, one of the following:
|
||||
# o Open
|
||||
# c Close
|
||||
# n None
|
||||
# The names of the characters in field 0 are given in comments at the end
|
||||
# of each line.
|
||||
#
|
||||
# For information on bidirectional paired brackets, see UAX #9: Unicode
|
||||
# Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/
|
||||
#
|
||||
# This file was originally created by Andrew Glass and Laurentiu Iancu
|
||||
# for Unicode 6.3.
|
||||
|
||||
0028; 0029; o # LEFT PARENTHESIS
|
||||
0029; 0028; c # RIGHT PARENTHESIS
|
||||
005B; 005D; o # LEFT SQUARE BRACKET
|
||||
005D; 005B; c # RIGHT SQUARE BRACKET
|
||||
007B; 007D; o # LEFT CURLY BRACKET
|
||||
007D; 007B; c # RIGHT CURLY BRACKET
|
||||
0F3A; 0F3B; o # TIBETAN MARK GUG RTAGS GYON
|
||||
0F3B; 0F3A; c # TIBETAN MARK GUG RTAGS GYAS
|
||||
0F3C; 0F3D; o # TIBETAN MARK ANG KHANG GYON
|
||||
0F3D; 0F3C; c # TIBETAN MARK ANG KHANG GYAS
|
||||
169B; 169C; o # OGHAM FEATHER MARK
|
||||
169C; 169B; c # OGHAM REVERSED FEATHER MARK
|
||||
2045; 2046; o # LEFT SQUARE BRACKET WITH QUILL
|
||||
2046; 2045; c # RIGHT SQUARE BRACKET WITH QUILL
|
||||
207D; 207E; o # SUPERSCRIPT LEFT PARENTHESIS
|
||||
207E; 207D; c # SUPERSCRIPT RIGHT PARENTHESIS
|
||||
208D; 208E; o # SUBSCRIPT LEFT PARENTHESIS
|
||||
208E; 208D; c # SUBSCRIPT RIGHT PARENTHESIS
|
||||
2308; 2309; o # LEFT CEILING
|
||||
2309; 2308; c # RIGHT CEILING
|
||||
230A; 230B; o # LEFT FLOOR
|
||||
230B; 230A; c # RIGHT FLOOR
|
||||
2329; 232A; o # LEFT-POINTING ANGLE BRACKET
|
||||
232A; 2329; c # RIGHT-POINTING ANGLE BRACKET
|
||||
2768; 2769; o # MEDIUM LEFT PARENTHESIS ORNAMENT
|
||||
2769; 2768; c # MEDIUM RIGHT PARENTHESIS ORNAMENT
|
||||
276A; 276B; o # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
|
||||
276B; 276A; c # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
|
||||
276C; 276D; o # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
|
||||
276D; 276C; c # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
|
||||
276E; 276F; o # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
|
||||
276F; 276E; c # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
|
||||
2770; 2771; o # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
|
||||
2771; 2770; c # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
|
||||
2772; 2773; o # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
|
||||
2773; 2772; c # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
|
||||
2774; 2775; o # MEDIUM LEFT CURLY BRACKET ORNAMENT
|
||||
2775; 2774; c # MEDIUM RIGHT CURLY BRACKET ORNAMENT
|
||||
27C5; 27C6; o # LEFT S-SHAPED BAG DELIMITER
|
||||
27C6; 27C5; c # RIGHT S-SHAPED BAG DELIMITER
|
||||
27E6; 27E7; o # MATHEMATICAL LEFT WHITE SQUARE BRACKET
|
||||
27E7; 27E6; c # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
|
||||
27E8; 27E9; o # MATHEMATICAL LEFT ANGLE BRACKET
|
||||
27E9; 27E8; c # MATHEMATICAL RIGHT ANGLE BRACKET
|
||||
27EA; 27EB; o # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
|
||||
27EB; 27EA; c # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
|
||||
27EC; 27ED; o # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
|
||||
27ED; 27EC; c # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
|
||||
27EE; 27EF; o # MATHEMATICAL LEFT FLATTENED PARENTHESIS
|
||||
27EF; 27EE; c # MATHEMATICAL RIGHT FLATTENED PARENTHESIS
|
||||
2983; 2984; o # LEFT WHITE CURLY BRACKET
|
||||
2984; 2983; c # RIGHT WHITE CURLY BRACKET
|
||||
2985; 2986; o # LEFT WHITE PARENTHESIS
|
||||
2986; 2985; c # RIGHT WHITE PARENTHESIS
|
||||
2987; 2988; o # Z NOTATION LEFT IMAGE BRACKET
|
||||
2988; 2987; c # Z NOTATION RIGHT IMAGE BRACKET
|
||||
2989; 298A; o # Z NOTATION LEFT BINDING BRACKET
|
||||
298A; 2989; c # Z NOTATION RIGHT BINDING BRACKET
|
||||
298B; 298C; o # LEFT SQUARE BRACKET WITH UNDERBAR
|
||||
298C; 298B; c # RIGHT SQUARE BRACKET WITH UNDERBAR
|
||||
298D; 2990; o # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
|
||||
298E; 298F; c # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
|
||||
298F; 298E; o # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
|
||||
2990; 298D; c # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
|
||||
2991; 2992; o # LEFT ANGLE BRACKET WITH DOT
|
||||
2992; 2991; c # RIGHT ANGLE BRACKET WITH DOT
|
||||
2993; 2994; o # LEFT ARC LESS-THAN BRACKET
|
||||
2994; 2993; c # RIGHT ARC GREATER-THAN BRACKET
|
||||
2995; 2996; o # DOUBLE LEFT ARC GREATER-THAN BRACKET
|
||||
2996; 2995; c # DOUBLE RIGHT ARC LESS-THAN BRACKET
|
||||
2997; 2998; o # LEFT BLACK TORTOISE SHELL BRACKET
|
||||
2998; 2997; c # RIGHT BLACK TORTOISE SHELL BRACKET
|
||||
29D8; 29D9; o # LEFT WIGGLY FENCE
|
||||
29D9; 29D8; c # RIGHT WIGGLY FENCE
|
||||
29DA; 29DB; o # LEFT DOUBLE WIGGLY FENCE
|
||||
29DB; 29DA; c # RIGHT DOUBLE WIGGLY FENCE
|
||||
29FC; 29FD; o # LEFT-POINTING CURVED ANGLE BRACKET
|
||||
29FD; 29FC; c # RIGHT-POINTING CURVED ANGLE BRACKET
|
||||
2E22; 2E23; o # TOP LEFT HALF BRACKET
|
||||
2E23; 2E22; c # TOP RIGHT HALF BRACKET
|
||||
2E24; 2E25; o # BOTTOM LEFT HALF BRACKET
|
||||
2E25; 2E24; c # BOTTOM RIGHT HALF BRACKET
|
||||
2E26; 2E27; o # LEFT SIDEWAYS U BRACKET
|
||||
2E27; 2E26; c # RIGHT SIDEWAYS U BRACKET
|
||||
2E28; 2E29; o # LEFT DOUBLE PARENTHESIS
|
||||
2E29; 2E28; c # RIGHT DOUBLE PARENTHESIS
|
||||
3008; 3009; o # LEFT ANGLE BRACKET
|
||||
3009; 3008; c # RIGHT ANGLE BRACKET
|
||||
300A; 300B; o # LEFT DOUBLE ANGLE BRACKET
|
||||
300B; 300A; c # RIGHT DOUBLE ANGLE BRACKET
|
||||
300C; 300D; o # LEFT CORNER BRACKET
|
||||
300D; 300C; c # RIGHT CORNER BRACKET
|
||||
300E; 300F; o # LEFT WHITE CORNER BRACKET
|
||||
300F; 300E; c # RIGHT WHITE CORNER BRACKET
|
||||
3010; 3011; o # LEFT BLACK LENTICULAR BRACKET
|
||||
3011; 3010; c # RIGHT BLACK LENTICULAR BRACKET
|
||||
3014; 3015; o # LEFT TORTOISE SHELL BRACKET
|
||||
3015; 3014; c # RIGHT TORTOISE SHELL BRACKET
|
||||
3016; 3017; o # LEFT WHITE LENTICULAR BRACKET
|
||||
3017; 3016; c # RIGHT WHITE LENTICULAR BRACKET
|
||||
3018; 3019; o # LEFT WHITE TORTOISE SHELL BRACKET
|
||||
3019; 3018; c # RIGHT WHITE TORTOISE SHELL BRACKET
|
||||
301A; 301B; o # LEFT WHITE SQUARE BRACKET
|
||||
301B; 301A; c # RIGHT WHITE SQUARE BRACKET
|
||||
FE59; FE5A; o # SMALL LEFT PARENTHESIS
|
||||
FE5A; FE59; c # SMALL RIGHT PARENTHESIS
|
||||
FE5B; FE5C; o # SMALL LEFT CURLY BRACKET
|
||||
FE5C; FE5B; c # SMALL RIGHT CURLY BRACKET
|
||||
FE5D; FE5E; o # SMALL LEFT TORTOISE SHELL BRACKET
|
||||
FE5E; FE5D; c # SMALL RIGHT TORTOISE SHELL BRACKET
|
||||
FF08; FF09; o # FULLWIDTH LEFT PARENTHESIS
|
||||
FF09; FF08; c # FULLWIDTH RIGHT PARENTHESIS
|
||||
FF3B; FF3D; o # FULLWIDTH LEFT SQUARE BRACKET
|
||||
FF3D; FF3B; c # FULLWIDTH RIGHT SQUARE BRACKET
|
||||
FF5B; FF5D; o # FULLWIDTH LEFT CURLY BRACKET
|
||||
FF5D; FF5B; c # FULLWIDTH RIGHT CURLY BRACKET
|
||||
FF5F; FF60; o # FULLWIDTH LEFT WHITE PARENTHESIS
|
||||
FF60; FF5F; c # FULLWIDTH RIGHT WHITE PARENTHESIS
|
||||
FF62; FF63; o # HALFWIDTH LEFT CORNER BRACKET
|
||||
FF63; FF62; c # HALFWIDTH RIGHT CORNER BRACKET
|
||||
|
||||
# EOF
|
|
@ -28,12 +28,12 @@ top_srcdir = @top_srcdir@
|
|||
top_builddir = @top_builddir@
|
||||
|
||||
EMACS = ${top_builddir}/src/emacs
|
||||
DSTDIR = ${top_srcdir}/lisp/international
|
||||
unidir = ${top_srcdir}/lisp/international
|
||||
emacs = "${EMACS}" -batch --no-site-file --no-site-lisp
|
||||
|
||||
.PHONY: all compile install
|
||||
.PHONY: all unifiles
|
||||
|
||||
all: ${top_srcdir}/src/macuvs.h ${DSTDIR}/charprop.el
|
||||
all: ${top_srcdir}/src/macuvs.h unifiles
|
||||
|
||||
## Specify .elc as an order-only prereq so as to not needlessly rebuild
|
||||
## target just because the .elc is missing.
|
||||
|
@ -41,7 +41,7 @@ all: ${top_srcdir}/src/macuvs.h ${DSTDIR}/charprop.el
|
|||
${top_srcdir}/src/macuvs.h: ${srcdir}/uvs.el ${srcdir}/IVD_Sequences.txt | \
|
||||
${srcdir}/uvs.elc
|
||||
${emacs} -L ${srcdir} -l uvs \
|
||||
--eval '(uvs-print-table-ivd "${srcdir}/IVD_Sequences.txt" "Adobe-Japan1")' \
|
||||
--eval '(uvs-print-table-ivd (unmsys--file-name "${srcdir}/IVD_Sequences.txt") "Adobe-Japan1")' \
|
||||
> $@
|
||||
|
||||
%.elc: %.el
|
||||
|
@ -50,30 +50,33 @@ ${top_srcdir}/src/macuvs.h: ${srcdir}/uvs.el ${srcdir}/IVD_Sequences.txt | \
|
|||
unidata.txt: ${srcdir}/UnicodeData.txt
|
||||
sed -e 's/\([^;]*\);\(.*\)/(#x\1 "\2")/' -e 's/;/" "/g' < $< > $@
|
||||
|
||||
${DSTDIR}/charprop.el: ${srcdir}/unidata-gen.el ${srcdir}/UnicodeData.txt | \
|
||||
FORCE =
|
||||
FORCE:
|
||||
.PHONY: FORCE
|
||||
|
||||
${unidir}/charprop.el: ${FORCE} ${srcdir}/unidata-gen.el \
|
||||
${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \
|
||||
${srcdir}/BidiBrackets.txt | \
|
||||
${srcdir}/unidata-gen.elc unidata.txt
|
||||
-if [ -f "$@" ]; then \
|
||||
cd ${DSTDIR} && chmod +w charprop.el `sed -n 's/^;; FILE: //p' < charprop.el`; \
|
||||
cd ${unidir} && chmod +w charprop.el `sed -n 's/^;; FILE: //p' < charprop.el`; \
|
||||
fi
|
||||
${emacs} -L ${srcdir} -l unidata-gen -f unidata-gen-files \
|
||||
${srcdir} "${DSTDIR}"
|
||||
${srcdir} "${unidir}"
|
||||
|
||||
## Like the above, but generate in PWD rather than lisp/international.
|
||||
charprop.el: ${srcdir}/unidata-gen.elc unidata.txt
|
||||
${emacs} -L ${srcdir} -l unidata-gen -f unidata-gen-files \
|
||||
${srcdir}
|
||||
## Check for deleted uni- files, and if any such, force a rebuild.
|
||||
## Perhaps a more elegant way would be for the previous rule
|
||||
## to generate a Makefile fragment explicitly listing the uni- files,
|
||||
## which this file could include. If no fragment, rebuild everything.
|
||||
unifiles: ${unidir}/charprop.el
|
||||
for f in `sed -n 's/^;; FILE: //p' < $<`; do \
|
||||
[ -f ${unidir}/$$f ] || { ${MAKE} $< FORCE=FORCE || exit 1; break; };\
|
||||
done
|
||||
|
||||
.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean
|
||||
|
||||
install: charprop.el
|
||||
cp charprop.el ${DSTDIR}
|
||||
cp `sed -n 's/^;; FILE: //p' < charprop.el` ${DSTDIR}
|
||||
|
||||
clean:
|
||||
if test -f charprop.el; then \
|
||||
rm -f `sed -n 's/^;; FILE: //p' < charprop.el`; \
|
||||
fi
|
||||
rm -f charprop.el ${srcdir}/*.elc unidata.txt
|
||||
rm -f ${srcdir}/*.elc unidata.txt
|
||||
|
||||
bootstrap-clean: clean
|
||||
|
||||
|
@ -87,7 +90,7 @@ maintainer-clean: distclean
|
|||
## Cf leim/ja-dic (which is much slower).
|
||||
extraclean:
|
||||
rm -f ${top_srcdir}/src/macuvs.h
|
||||
if test -f ${DSTDIR}/charprop.el; then \
|
||||
(cd ${DSTDIR} && rm -f `sed -n 's/^;; FILE: //p' < charprop.el`); \
|
||||
rm -f ${DSTDIR}/charprop.el; \
|
||||
if test -f ${unidir}/charprop.el; then \
|
||||
(cd ${unidir} && rm -f `sed -n 's/^;; FILE: //p' < charprop.el`); \
|
||||
rm -f ${unidir}/charprop.el; \
|
||||
fi
|
||||
|
|
|
@ -88,6 +88,8 @@
|
|||
;; CHAR-or-RANGE: a character code or a cons of character codes
|
||||
;; PROPn: string representing the nth property value
|
||||
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
|
||||
(defvar unidata-list nil)
|
||||
|
||||
;; Name of the directory containing files of Unicode Character Database.
|
||||
|
@ -152,7 +154,8 @@
|
|||
;; PROP: character property
|
||||
;; INDEX: index to each element of unidata-list for PROP.
|
||||
;; It may be a function that generates an alist of character codes
|
||||
;; vs. the corresponding property values.
|
||||
;; vs. the corresponding property values. Currently, only character
|
||||
;; codepoints or symbol values are supported in this case.
|
||||
;; GENERATOR: function to generate a char-table
|
||||
;; FILENAME: filename to store the char-table
|
||||
;; DOCSTRING: docstring for the property
|
||||
|
@ -271,7 +274,23 @@ is the character itself."
|
|||
"Unicode bidi-mirroring characters.
|
||||
Property value is a character that has the corresponding mirroring image or nil.
|
||||
The value nil means that the actual property value of a character
|
||||
is the character itself.")))
|
||||
is the character itself.")
|
||||
(paired-bracket
|
||||
unidata-gen-brackets-list unidata-gen-table-character "uni-brackets.el"
|
||||
"Unicode bidi paired-bracket characters.
|
||||
Property value is the paired bracket character, or nil.
|
||||
The value nil means that the character is neither an opening nor
|
||||
a closing paired bracket."
|
||||
string)
|
||||
(bracket-type
|
||||
unidata-gen-bracket-type-list unidata-gen-table-symbol "uni-brackets.el"
|
||||
"Unicode bidi paired-bracket type.
|
||||
Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
|
||||
unidata-describe-bidi-bracket-type
|
||||
n
|
||||
;; The order of elements must be in sync with bidi_bracket_type_t
|
||||
;; in src/dispextern.h.
|
||||
(n o c))))
|
||||
|
||||
;; Functions to access the above data.
|
||||
(defsubst unidata-prop-index (prop) (nth 1 (assq prop unidata-prop-alist)))
|
||||
|
@ -449,7 +468,10 @@ is the character itself.")))
|
|||
(unidata-encode-val val-list (nth 2 elm)))
|
||||
(set-char-table-range table (cons (car elm) (nth 1 elm)) (nth 2 elm)))
|
||||
|
||||
(setq tail unidata-list)
|
||||
(if (functionp prop-idx)
|
||||
(setq tail (funcall prop-idx)
|
||||
prop-idx 1)
|
||||
(setq tail unidata-list))
|
||||
(while tail
|
||||
(setq elt (car tail) tail (cdr tail))
|
||||
(setq range (car elt)
|
||||
|
@ -854,7 +876,7 @@ is the character itself.")))
|
|||
;; The following command yields a file of about 96K bytes.
|
||||
;; % gawk -F ';' '{print $1,$2;}' < UnicodeData.txt | gzip > temp.gz
|
||||
;; With the following function, we can get a file of almost the same
|
||||
;; the size.
|
||||
;; size.
|
||||
|
||||
;; Generate a char-table for character names.
|
||||
|
||||
|
@ -923,11 +945,7 @@ is the character itself.")))
|
|||
(dotimes (i (length vec))
|
||||
(dolist (elt (aref vec i))
|
||||
(if (symbolp elt)
|
||||
(let ((slot (assq elt word-list)))
|
||||
(if slot
|
||||
(setcdr slot (1+ (cdr slot)))
|
||||
(setcdr word-list
|
||||
(cons (cons elt 1) (cdr word-list))))))))
|
||||
(cl-incf (alist-get elt (cdr word-list) 0)))))
|
||||
(set-char-table-range table (cons start limit) vec))))))
|
||||
(setq word-list (sort (cdr word-list)
|
||||
#'(lambda (x y) (> (cdr x) (cdr y)))))
|
||||
|
@ -1159,6 +1177,12 @@ is the character itself.")))
|
|||
(string ?'))))
|
||||
val " "))
|
||||
|
||||
(defun unidata-describe-bidi-bracket-type (val)
|
||||
(cdr (assq val
|
||||
'((n . "Not a paired bracket character.")
|
||||
(o . "Opening paired bracket character.")
|
||||
(c . "Closing paired bracket character.")))))
|
||||
|
||||
(defun unidata-gen-mirroring-list ()
|
||||
(let ((head (list nil))
|
||||
tail)
|
||||
|
@ -1172,27 +1196,74 @@ is the character itself.")))
|
|||
(setq tail (setcdr tail (list (list char mirror)))))))
|
||||
(cdr head)))
|
||||
|
||||
(defun unidata-gen-brackets-list ()
|
||||
(let ((head (list nil))
|
||||
tail)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents (expand-file-name "BidiBrackets.txt" unidata-dir))
|
||||
(goto-char (point-min))
|
||||
(setq tail head)
|
||||
(while (re-search-forward
|
||||
"^\\([0-9A-F]+\\);\\s +\\([0-9A-F]+\\);\\s +\\([oc]\\)"
|
||||
nil t)
|
||||
(let ((char (string-to-number (match-string 1) 16))
|
||||
(paired (match-string 2)))
|
||||
(setq tail (setcdr tail (list (list char paired)))))))
|
||||
(cdr head)))
|
||||
|
||||
(defun unidata-gen-bracket-type-list ()
|
||||
(let ((head (list nil))
|
||||
tail)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents (expand-file-name "BidiBrackets.txt" unidata-dir))
|
||||
(goto-char (point-min))
|
||||
(setq tail head)
|
||||
(while (re-search-forward
|
||||
"^\\([0-9A-F]+\\);\\s +\\([0-9A-F]+\\);\\s +\\([oc]\\)"
|
||||
nil t)
|
||||
(let ((char (string-to-number (match-string 1) 16))
|
||||
(type (match-string 3)))
|
||||
(setq tail (setcdr tail (list (list char type)))))))
|
||||
(cdr head)))
|
||||
|
||||
;; Verify if we can retrieve correct values from the generated
|
||||
;; char-tables.
|
||||
;;
|
||||
;; Use like this:
|
||||
;;
|
||||
;; (let ((unidata-dir "/path/to/admin/unidata"))
|
||||
;; (unidata-setup-list "unidata.txt")
|
||||
;; (unidata-check))
|
||||
|
||||
(defun unidata-check ()
|
||||
(dolist (elt unidata-prop-alist)
|
||||
(let* ((prop (car elt))
|
||||
(index (unidata-prop-index prop))
|
||||
(generator (unidata-prop-generator prop))
|
||||
(default-value (unidata-prop-default prop))
|
||||
(val-list (unidata-prop-val-list prop))
|
||||
(table (progn
|
||||
(message "Generating %S table..." prop)
|
||||
(funcall generator prop)))
|
||||
(funcall generator prop default-value val-list)))
|
||||
(decoder (char-table-extra-slot table 1))
|
||||
(alist (and (functionp index)
|
||||
(funcall index)))
|
||||
(check #x400))
|
||||
(dolist (e unidata-list)
|
||||
(let ((char (car e))
|
||||
(val1 (nth index e))
|
||||
val2)
|
||||
(let* ((char (car e))
|
||||
(val1
|
||||
(if alist (nth 1 (assoc char alist))
|
||||
(nth index e)))
|
||||
val2)
|
||||
(if (and (stringp val1) (= (length val1) 0))
|
||||
(setq val1 nil))
|
||||
(unless (consp char)
|
||||
(setq val2 (funcall decoder char (aref table char) table))
|
||||
(unless (or (consp char)
|
||||
(integerp decoder))
|
||||
(setq val2
|
||||
(cond ((functionp decoder)
|
||||
(funcall decoder char (aref table char) table))
|
||||
(t ; must be nil
|
||||
(aref table char))))
|
||||
(if val1
|
||||
(cond ((eq generator 'unidata-gen-table-symbol)
|
||||
(setq val1 (intern val1)))
|
||||
|
@ -1201,11 +1272,17 @@ is the character itself.")))
|
|||
((eq generator 'unidata-gen-table-character)
|
||||
(setq val1 (string-to-number val1 16)))
|
||||
((eq generator 'unidata-gen-table-decomposition)
|
||||
(setq val1 (unidata-split-decomposition val1)))))
|
||||
(setq val1 (unidata-split-decomposition val1))))
|
||||
(cond ((eq prop 'decomposition)
|
||||
(setq val1 (list char)))
|
||||
((eq prop 'bracket-type)
|
||||
(setq val1 'n))))
|
||||
(when (>= char check)
|
||||
(message "%S %04X" prop check)
|
||||
(setq check (+ check #x400)))
|
||||
(or (equal val1 val2)
|
||||
;; <control> characters get a 'name' property of nil
|
||||
(and (eq prop 'name) (string= val1 "<control>") (null val2))
|
||||
(insert (format "> %04X %S\n< %04X %S\n"
|
||||
char val1 char val2)))
|
||||
(sit-for 0)))))))
|
||||
|
@ -1242,6 +1319,9 @@ is the character itself.")))
|
|||
(describer (unidata-prop-describer prop))
|
||||
(default-value (unidata-prop-default prop))
|
||||
(val-list (unidata-prop-val-list prop))
|
||||
;; Avoid creating backup files for those uni-*.el files
|
||||
;; that hold more than one table.
|
||||
(backup-inhibited t)
|
||||
table)
|
||||
;; Filename in this comment line is extracted by sed in
|
||||
;; Makefile.
|
||||
|
@ -1261,7 +1341,7 @@ is the character itself.")))
|
|||
(setq describer (symbol-function describer)))
|
||||
(set-char-table-extra-slot table 3 describer))
|
||||
(if (bobp)
|
||||
(insert ";; Copyright (C) 1991-2013 Unicode, Inc.
|
||||
(insert ";; Copyright (C) 1991-2014 Unicode, Inc.
|
||||
;; This file was generated from the Unicode data files at
|
||||
;; http://www.unicode.org/Public/UNIDATA/.
|
||||
;; See lisp/international/README for the copyright and permission notice.\n"))
|
||||
|
|
|
@ -45,14 +45,14 @@ sed 's/\\def\\year[{][0-9]*[}]/\\def\\year{'"$UPDATE_COPYRIGHT_YEAR"'}'/g \
|
|||
} &&
|
||||
rm $emacsver.aux &&
|
||||
|
||||
bzr_files=$(bzr ls -RV --kind file) &&
|
||||
repo_files=$(git ls-files) &&
|
||||
|
||||
# Do not update the copyright of files that have one or more of the
|
||||
# following problems:
|
||||
# . They are license files, maintained by the FSF, with their own dates.
|
||||
# . Their format cannot withstand changing the contents of copyright strings.
|
||||
|
||||
updatable_files=$(find $bzr_files \
|
||||
updatable_files=$(find $repo_files \
|
||||
! -name COPYING \
|
||||
! -name doclicense.texi \
|
||||
! -name gpl.texi \
|
||||
|
|
|
@ -305,9 +305,6 @@ EOF
|
|||
|
||||
modified=$(status $basegen) || die
|
||||
|
||||
## bzr status output is always relative to top-level, not PWD.
|
||||
[ "$vcs" = "bzr" ] && cd $oldpwd
|
||||
|
||||
commit "generated" $modified || die "commit error"
|
||||
|
||||
exit 0
|
||||
|
|
48
autogen.sh
48
autogen.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
### autogen.sh - tool to help build Emacs from a bzr checkout
|
||||
### autogen.sh - tool to help build Emacs from a repository checkout
|
||||
|
||||
## Copyright (C) 2011-2014 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -23,8 +23,8 @@
|
|||
|
||||
### Commentary:
|
||||
|
||||
## The Emacs bzr repository does not include the configure script
|
||||
## (and associated helpers). The first time you fetch Emacs from bzr,
|
||||
## The Emacs repository does not include the configure script (and
|
||||
## associated helpers). The first time you fetch Emacs from the repo,
|
||||
## run this script to generate the necessary files.
|
||||
## For more details, see the file INSTALL.REPO.
|
||||
|
||||
|
@ -145,7 +145,7 @@ if [ x"$missing" != x ]; then
|
|||
|
||||
cat <<EOF
|
||||
|
||||
Building Emacs from Bzr requires the following specialized programs:
|
||||
Building Emacs from the repository requires the following specialized programs:
|
||||
EOF
|
||||
|
||||
for prog in $progs; do
|
||||
|
@ -216,6 +216,46 @@ autoreconf -fi -I m4 || exit $?
|
|||
## cause 'make' to needlessly run 'autoheader'.
|
||||
echo timestamp > src/stamp-h.in || exit
|
||||
|
||||
## Install Git hooks, if using Git.
|
||||
if test -d .git/hooks; then
|
||||
tailored_hooks=
|
||||
sample_hooks=
|
||||
|
||||
for hook in commit-msg pre-commit; do
|
||||
cmp build-aux/git-hooks/$hook .git/hooks/$hook >/dev/null 2>&1 ||
|
||||
tailored_hooks="$tailored_hooks $hook"
|
||||
done
|
||||
for hook in applypatch-msg pre-applypatch; do
|
||||
cmp .git/hooks/$hook.sample .git/hooks/$hook >/dev/null 2>&1 ||
|
||||
sample_hooks="$sample_hooks $hook"
|
||||
done
|
||||
|
||||
if test -n "$tailored_hooks$sample_hooks"; then
|
||||
echo "Installing git hooks..."
|
||||
|
||||
case `cp --help 2>/dev/null` in
|
||||
*--backup*--verbose*)
|
||||
cp_options='--backup=numbered --verbose';;
|
||||
*)
|
||||
cp_options='';;
|
||||
esac
|
||||
|
||||
if test -n "$tailored_hooks"; then
|
||||
for hook in $tailored_hooks; do
|
||||
cp $cp_options build-aux/git-hooks/$hook .git/hooks || exit
|
||||
chmod a-w .git/hooks/$hook || exit
|
||||
done
|
||||
fi
|
||||
|
||||
if test -n "$sample_hooks"; then
|
||||
for hook in $sample_hooks; do
|
||||
cp $cp_options .git/hooks/$hook.sample .git/hooks/$hook || exit
|
||||
chmod a-w .git/hooks/$hook || exit
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "You can now run './configure'."
|
||||
|
||||
exit 0
|
||||
|
|
122
build-aux/git-hooks/commit-msg
Executable file
122
build-aux/git-hooks/commit-msg
Executable file
|
@ -0,0 +1,122 @@
|
|||
#!/bin/sh
|
||||
# Check the format of GNU Emacs change log entries.
|
||||
|
||||
# Copyright 2014 Free Software Foundation, Inc.
|
||||
|
||||
# This file is part of GNU Emacs.
|
||||
|
||||
# GNU Emacs is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# GNU Emacs is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Written by Paul Eggert.
|
||||
|
||||
# Prefer gawk if available, as it handles NUL bytes properly.
|
||||
if type gawk >/dev/null 2>&1; then
|
||||
awk=gawk
|
||||
else
|
||||
awk=awk
|
||||
fi
|
||||
|
||||
# Use a UTF-8 locale if available, so that the UTF-8 check works.
|
||||
# Use U+00A2 CENT SIGN to test whether the locale works.
|
||||
cent_sign_utf8_octal='\302\242'
|
||||
at_sign=`
|
||||
printf "${cent_sign_utf8_octal}@" |
|
||||
$awk '{print substr($0, 2)}' 2>/dev/null
|
||||
`
|
||||
if test "$at_sign" != @; then
|
||||
at_sign=`
|
||||
printf "${cent_sign_utf8_octal}@" |
|
||||
LC_ALL=en_US.UTF-8 $awk '{print substr($0, 2)}' 2>/dev/null
|
||||
`
|
||||
if test "$at_sign" = @; then
|
||||
LC_ALL=en_US.UTF-8; export LC_ALL
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check the log entry.
|
||||
exec $awk '
|
||||
BEGIN {
|
||||
if (" " ~ /[[:space:]]/) {
|
||||
space = "[[:space:]]"
|
||||
non_space = "[^[:space:]]"
|
||||
non_print = "[^[:print:]]"
|
||||
} else {
|
||||
# mawk 1.3.3 does not support POSIX bracket expressions.
|
||||
# Approximate them as best we can.
|
||||
space = "[ \f\n\r\t\v]"
|
||||
non_space = "[^ \f\n\r\t\v]"
|
||||
non_print = "[\1-\37\177]"
|
||||
}
|
||||
}
|
||||
|
||||
/^#/ { next }
|
||||
|
||||
!/^.*$/ {
|
||||
print "Invalid character (not UTF-8) in commit message"
|
||||
status = 1
|
||||
}
|
||||
|
||||
nlines == 0 && $0 !~ non_space { next }
|
||||
|
||||
{ nlines++ }
|
||||
|
||||
nlines == 1 {
|
||||
# Ignore special markers used by "git rebase --autosquash".
|
||||
if (! sub(/^fixup! /, ""))
|
||||
sub(/^squash! /, "")
|
||||
|
||||
if ($0 ~ "^" space) {
|
||||
print "White space at start of commit message'\''s first line"
|
||||
status = 1
|
||||
}
|
||||
}
|
||||
|
||||
nlines == 2 && $0 ~ non_space {
|
||||
print "Nonempty second line in commit message"
|
||||
status = 1
|
||||
}
|
||||
|
||||
72 < length && $0 ~ space {
|
||||
print "Line longer than 72 characters in commit message"
|
||||
status = 1
|
||||
}
|
||||
|
||||
140 < length {
|
||||
print "Word longer than 140 characters in commit message"
|
||||
status = 1
|
||||
}
|
||||
|
||||
/^Signed-off-by: / {
|
||||
print "'\''Signed-off-by:'\'' in commit message"
|
||||
status = 1
|
||||
}
|
||||
|
||||
$0 ~ non_print {
|
||||
if (gsub(/\t/, "")) {
|
||||
print "Tab in commit message; please use spaces instead"
|
||||
}
|
||||
if ($0 ~ non_print) {
|
||||
print "Unprintable character in commit message"
|
||||
}
|
||||
status = 1
|
||||
}
|
||||
|
||||
END {
|
||||
if (nlines == 0) {
|
||||
print "Empty commit message"
|
||||
status = 1
|
||||
}
|
||||
exit status
|
||||
}
|
||||
' <"$1"
|
46
build-aux/git-hooks/pre-commit
Executable file
46
build-aux/git-hooks/pre-commit
Executable file
|
@ -0,0 +1,46 @@
|
|||
#!/bin/sh
|
||||
# Check file names in git commits for GNU Emacs.
|
||||
|
||||
# Copyright 2014 Free Software Foundation, Inc.
|
||||
|
||||
# This file is part of GNU Emacs.
|
||||
|
||||
# GNU Emacs is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# GNU Emacs is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
|
||||
exec >&2
|
||||
|
||||
. git-sh-setup
|
||||
|
||||
git_diff='git diff --cached --name-only --diff-filter=A'
|
||||
ok_chars='\0+[=-=]./0-9A-Z_a-z'
|
||||
nbadchars=`$git_diff -z HEAD | tr -d "$ok_chars" | wc -c`
|
||||
|
||||
if test "$nbadchars" -ne 0; then
|
||||
echo "File name does not consist of -+./_ or ASCII letters or digits."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
new_names=`$git_diff HEAD` || exit
|
||||
case "
|
||||
$new_names" in
|
||||
*/-* | *'
|
||||
'-*)
|
||||
echo "File name component begins with '-'."
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
exec git diff-index --check --cached HEAD --
|
|
@ -31,76 +31,44 @@
|
|||
## installation directory. It does not handle info/dir being present
|
||||
## but missing some entries.
|
||||
|
||||
### Code:
|
||||
|
||||
if test $# -ne 1; then
|
||||
echo "Specify destination file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
outfile=$1
|
||||
|
||||
echo "Creating $outfile..."
|
||||
|
||||
if test -f "$outfile"; then
|
||||
echo "$outfile already present"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## Header contains non-printing characters, so this is more
|
||||
## reliable than using echo.
|
||||
basefile=build-aux/dir_top
|
||||
## reliable than using awk.
|
||||
cat <"${1?}" || exit
|
||||
shift
|
||||
|
||||
if test ! -f "$basefile"; then
|
||||
echo "$basefile not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
cp $basefile $outfile
|
||||
|
||||
|
||||
## FIXME inefficient looping.
|
||||
## What we should do is loop once over files, collecting topic and
|
||||
## direntry information for each. Then loop over topics and write
|
||||
## out the results. But that seems to require associative arrays,
|
||||
## and I do not know how to do that with portable sh.
|
||||
## Could use Emacs instead of sh, but till now info generation does
|
||||
## not require Emacs to have been built.
|
||||
for topic in "Texinfo documentation system" "Emacs" "Emacs lisp" \
|
||||
"Emacs editing modes" "Emacs network features" "Emacs misc features" \
|
||||
"Emacs lisp libraries"; do
|
||||
|
||||
cat - <<EOF >> $outfile
|
||||
|
||||
$topic
|
||||
EOF
|
||||
## Bit faster than doc/*/*.texi.
|
||||
for file in doc/emacs/emacs.texi doc/lispintro/emacs-lisp-intro.texi \
|
||||
doc/lispref/elisp.texi doc/misc/*.texi; do
|
||||
|
||||
## FIXME do not ignore w32 if OS is w32.
|
||||
case $file in
|
||||
*-xtra.texi|*efaq-w32.texi|*doclicense.texi) continue ;;
|
||||
esac
|
||||
|
||||
dircat=`sed -n -e 's/@value{emacsname}/Emacs/' -e 's/^@dircategory //p' $file`
|
||||
|
||||
## TODO warn about unknown topics.
|
||||
## (check-info in top-level Makefile does that.)
|
||||
test "$dircat" = "$topic" || continue
|
||||
|
||||
|
||||
sed -n -e 's/@value{emacsname}/Emacs/' \
|
||||
-e 's/@acronym{\([A-Z]*\)}/\1/' \
|
||||
-e '/^@direntry/,/^@end direntry/ s/^\([^@]\)/\1/p' \
|
||||
$file >> $outfile
|
||||
|
||||
done
|
||||
done
|
||||
|
||||
echo "Created $outfile"
|
||||
|
||||
exit 0
|
||||
|
||||
### make-info-dir ends here
|
||||
exec "${AWK-awk}" '
|
||||
function detexinfo() {
|
||||
gsub(/@value{emacsname}/, "Emacs")
|
||||
gsub(/@[^{]*\{/, "")
|
||||
gsub(/}/, "")
|
||||
}
|
||||
BEGIN {
|
||||
ntopics = 0
|
||||
topic[ntopics++] = "Texinfo documentation system"
|
||||
topic[ntopics++] = "Emacs"
|
||||
topic[ntopics++] = "Emacs lisp"
|
||||
topic[ntopics++] = "Emacs editing modes"
|
||||
topic[ntopics++] = "Emacs network features"
|
||||
topic[ntopics++] = "Emacs misc features"
|
||||
topic[ntopics++] = "Emacs lisp libraries"
|
||||
topic[ntopics] = "Unknown category"
|
||||
}
|
||||
/^@dircategory / {
|
||||
sub(/^@dircategory /, "")
|
||||
detexinfo()
|
||||
for (dircat = 0; dircat < ntopics && topic[dircat] != $0; dircat++)
|
||||
continue;
|
||||
}
|
||||
/^@direntry/, /^@end direntry/ {
|
||||
# FIXME do not ignore w32 if OS is w32.
|
||||
if ($0 !~ /^@/ && $0 !~ /w32/) {
|
||||
detexinfo()
|
||||
data[dircat] = data[dircat] $0 "\n"
|
||||
}
|
||||
}
|
||||
END {
|
||||
for (dircat = 0; dircat <= ntopics; dircat++)
|
||||
if (data[dircat])
|
||||
printf "\n%s\n%s", topic[dircat], data[dircat]
|
||||
}
|
||||
' "${@?}"
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#!/bin/sh
|
||||
# Take a list of MSYS-compatible paths and convert them to native
|
||||
# MS-Windows format.
|
||||
#!/bin/bash
|
||||
# Convert a MSYS path list to Windows-native format.
|
||||
# Status is zero if successful, nonzero otherwise.
|
||||
|
||||
# Copyright (C) 2013-2014 Free Software Foundation, Inc.
|
||||
|
@ -21,36 +20,19 @@
|
|||
# Take only the basename from the full pathname
|
||||
me=${0//*\//}
|
||||
|
||||
usage="usage: ${me} PATHLIST [MUSTEXIST] [SEPARATOR [SEPARATOR2]]"
|
||||
usage="usage: ${me} PATHLIST"
|
||||
|
||||
help="$usage
|
||||
or: ${me} OPTION
|
||||
|
||||
Convert MSYS-compatible paths to MS-Windows native format.
|
||||
Convert a MSYS path list to Windows-native format.
|
||||
|
||||
PATHLIST should be a colon-separated list of MSYS paths, which will be
|
||||
written to the standard output after performing these transformations:
|
||||
|
||||
PATHLIST should be a list of paths separated by SEPARATOR. This list
|
||||
will be written to the standard output after performing the following
|
||||
transformations:
|
||||
1. Discard empty paths.
|
||||
2. Replace backslashes with forward slashes.
|
||||
3. Replace two consecutive slashes with single ones.
|
||||
4. Translate to Windows-native format those paths that are not in such
|
||||
format already. The translated paths will not end with a slash,
|
||||
except for root directories (e.g. 'c:/' or 'c:/foo'). Paths
|
||||
starting with '%emacs_dir%' will not be translated.
|
||||
5. Escape with backslashes every occurrence of SEPARATOR2 within the paths.
|
||||
6. Concatenate the translated paths with SEPARATOR2.
|
||||
|
||||
If MUSTEXIST is 'Y' or not supplied, then each path in PATHLIST must
|
||||
exist. Otherwise, only some part of each path is required to exist
|
||||
(the deepest existing subpath will be translated and the remainder
|
||||
concatenated to the translation).
|
||||
|
||||
If SEPARATOR is not supplied, PATHLIST will be regarded as a single
|
||||
path.
|
||||
|
||||
If SEPARATOR2 is not supplied, it will take the same value as
|
||||
SEPARATOR.
|
||||
2. Replace: '\' with '/', '//' with '/' and ':' with ';'.
|
||||
3. Translate absolute paths to Windows-native format.
|
||||
|
||||
Options:
|
||||
--help display this help and exit
|
||||
|
@ -73,98 +55,52 @@ do
|
|||
esac
|
||||
done
|
||||
|
||||
{ test $# -ge 1 && test $# -le 4; } ||
|
||||
{ echo "${me}: $usage" >&2; exit 1; }
|
||||
|
||||
# Arguments
|
||||
pathlist="$1"
|
||||
mustexist="${2:-Y}"
|
||||
separator="$3"
|
||||
separator2="${4:-${separator}}"
|
||||
|
||||
# Split pathlist into its path components
|
||||
if test -n "$separator"
|
||||
then
|
||||
IFS=${separator} patharray=( $pathlist )
|
||||
else
|
||||
patharray=( "$pathlist" )
|
||||
fi
|
||||
[ $# -eq 1 ] || {
|
||||
echo "${me}: $usage" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
w32pathlist=""
|
||||
|
||||
for p in "${patharray[@]}"
|
||||
# Put each MSYS path in one positional parameter and iterate through
|
||||
# them
|
||||
IFS=:
|
||||
set -- $1
|
||||
|
||||
for p
|
||||
do
|
||||
# Skip empty paths
|
||||
test "$p" = "" && continue
|
||||
[ -z "$p" ] && continue
|
||||
|
||||
# Replace '\' with '/' and '//' with '/'
|
||||
p="${p//\\//}"
|
||||
p="${p//\/\///}"
|
||||
|
||||
if test "${p:0:11}" = "%emacs_dir%"
|
||||
if [ "${p:0:1}" != "/" ]
|
||||
then
|
||||
# Paths starting with "%emacs_dir%" will not be translated
|
||||
w32p=$p
|
||||
elif test -d "$p"
|
||||
elif [ -d "$p" ]
|
||||
then
|
||||
# The path exists, so just translate it
|
||||
w32p=`cd "$p" && pwd -W`
|
||||
w32p=$(cd "$p" && pwd -W)
|
||||
else
|
||||
# The path does not exist. So, try to guess the
|
||||
# Windows-native translation, by looking for the deepest
|
||||
# existing directory in this path, and then translating the
|
||||
# existing part and concatenating the remainder.
|
||||
# Make some cleanup in the path and look for its deepest
|
||||
# existing directory
|
||||
|
||||
test "${mustexist}" = "Y" &&
|
||||
{ echo "${me}: invalid path: $p" >&2; exit 1; }
|
||||
p=${p//\\//}
|
||||
p=${p//\/\///}
|
||||
p=${p%/}
|
||||
|
||||
p1=$p
|
||||
IFS=/ pcomponents=( $p )
|
||||
|
||||
for (( i=${#pcomponents[@]}-1 ; i>=0 ; i-- ))
|
||||
while :
|
||||
do
|
||||
|
||||
if test "${pcomponents[i]}" = ""
|
||||
then
|
||||
# The path component is empty. This can only mean
|
||||
# that the path starts with "/" and all components
|
||||
# have been stripped out already. So in this case we
|
||||
# want to test with the MSYS root directory
|
||||
p1="/"
|
||||
else
|
||||
p1="${p1%/}"
|
||||
p1="${p1%${pcomponents[i]}}"
|
||||
fi
|
||||
|
||||
if test -d "${p1}"
|
||||
then
|
||||
|
||||
# Existing path found
|
||||
|
||||
# Translate the existing part and concatenate the
|
||||
# remainder (ensuring that only one slash is used in
|
||||
# the join, and no trailing slash is left)
|
||||
w32p1=`cd "${p1}" && pwd -W`
|
||||
remainder="${p#${p1}}"
|
||||
remainder="${remainder#/}"
|
||||
remainder="${remainder%/}"
|
||||
w32p="${w32p1%/}/${remainder}"
|
||||
|
||||
break
|
||||
fi
|
||||
|
||||
p1=${p1%/*}
|
||||
[ -z "$p1" ] && p1="/" && break
|
||||
[ -d "$p1" ] && break
|
||||
done
|
||||
|
||||
# If no existing directory was found, error out
|
||||
test -e "${p1}" ||
|
||||
{ echo "${me}: invalid path: ${p}" >&2; exit 1; }
|
||||
# translate the existing part and append the rest
|
||||
w32p=$(cd "${p1}" && pwd -W)
|
||||
remainder=${p#$p1}
|
||||
w32p+=/${remainder#/}
|
||||
fi
|
||||
|
||||
# Concatenate the translated path to the translated pathlist
|
||||
test "${w32pathlist}" = "" || w32pathlist="${w32pathlist}${separator2}"
|
||||
w32pathlist="${w32pathlist}${w32p//${separator2}/\\${separator2}}"
|
||||
w32pathlist="${w32pathlist};${w32p}"
|
||||
|
||||
done
|
||||
|
||||
# Write the translated pathlist to the standard output
|
||||
printf "%s" "${w32pathlist}"
|
||||
echo "${w32pathlist:1}"
|
||||
|
|
11
config.bat
11
config.bat
|
@ -22,10 +22,10 @@ rem ----------------------------------------------------------------------
|
|||
rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
|
||||
rem
|
||||
rem + msdos version 3 or better.
|
||||
rem + DJGPP version 2.0 or later (version 2.03 or later recommended).
|
||||
rem + DJGPP version 2.02 or later (version 2.03 or later recommended).
|
||||
rem + make utility that allows breaking of the 128 chars limit on
|
||||
rem command lines. ndmake (as of version 4.5) won't work due to a
|
||||
rem line length limit. The make that comes with DJGPP does work (and is
|
||||
rem line length limit. The DJGPP port of make works (and is
|
||||
rem recommended).
|
||||
rem + rm, mv, and cp (from GNU file utilities).
|
||||
rem + sed (you can use the port that comes with DJGPP).
|
||||
|
@ -109,7 +109,7 @@ Goto End
|
|||
:djgppOk
|
||||
echo int main() >junk.c
|
||||
echo #ifdef __DJGPP__ >>junk.c
|
||||
echo {return (__DJGPP__)*10;} >>junk.c
|
||||
echo {return (__DJGPP__)*10 + (__DJGPP_MINOR__);} >>junk.c
|
||||
echo #else >>junk.c
|
||||
echo #ifdef __GO32__ >>junk.c
|
||||
echo {return 10;} >>junk.c
|
||||
|
@ -126,8 +126,8 @@ Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
|
|||
Goto End
|
||||
:go32Ok
|
||||
set djgpp_ver=2
|
||||
If Not ErrorLevel 20 Echo To build 'Emacs' you need DJGPP v2.0 or later!
|
||||
If Not ErrorLevel 20 Goto End
|
||||
If Not ErrorLevel 22 Echo To build 'Emacs' you need DJGPP v2.02 or later!
|
||||
If Not ErrorLevel 22 Goto End
|
||||
rm -f junk.c junk junk.exe
|
||||
rem DJECHO is used by the top-level Makefile in the v2.x build
|
||||
Echo Checking whether 'djecho' is available...
|
||||
|
@ -135,7 +135,6 @@ redir -o Nul -eo djecho -o junk.$$$ foo
|
|||
If Exist junk.$$$ Goto djechoOk
|
||||
Echo To build 'Emacs' you need the 'djecho.exe' program!
|
||||
Echo 'djecho.exe' is part of 'djdevNNN.zip' basic DJGPP development kit.
|
||||
Echo Versions of DJGPP before 2.02 called this program 'echo.exe'.
|
||||
Echo Either unpack 'djecho.exe' from the 'djdevNNN.zip' archive,
|
||||
Echo or, if you have 'echo.exe', copy it to 'djecho.exe'.
|
||||
Echo Then run CONFIG.BAT again with the same arguments you did now.
|
||||
|
|
389
configure.ac
389
configure.ac
|
@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
AC_PREREQ(2.65)
|
||||
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
|
||||
AC_INIT(GNU Emacs, 24.4.50, bug-gnu-emacs@gnu.org)
|
||||
AC_INIT(GNU Emacs, 25.0.50, bug-gnu-emacs@gnu.org)
|
||||
|
||||
dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
|
||||
dnl and then quoted again for a C string. Separate options with spaces.
|
||||
|
@ -130,18 +130,46 @@ If you have it installed under another name, configure with 'MAKE=...'.
|
|||
For example, run '$0 MAKE=gnu-make'.]])
|
||||
}
|
||||
MAKE=$ac_cv_path_MAKE
|
||||
export MAKE
|
||||
|
||||
dnl Fairly arbitrary, older versions might work too.
|
||||
AM_INIT_AUTOMAKE(1.11)
|
||||
|
||||
dnl Canonicalize the configuration name.
|
||||
AC_CANONICAL_HOST
|
||||
canonical=$host
|
||||
configuration=${host_alias-${build_alias-$host}}
|
||||
|
||||
dnl We get MINGW64 with MSYS2.
|
||||
case $canonical in
|
||||
case $host in
|
||||
*-mingw*)
|
||||
|
||||
if test -z "$host_alias"; then
|
||||
|
||||
# No --host argument was given to 'configure'; therefore $host
|
||||
# was set to a default value based on the build platform. But
|
||||
# this default value may be wrong if we are building from a
|
||||
# 64-bit MSYS[2] pre-configured to build 32-bit MinGW programs.
|
||||
# Therefore, we'll try to get the right host platform from the
|
||||
# compiler's target.
|
||||
|
||||
AC_MSG_CHECKING([the compiler's target])
|
||||
if test -z "$CC"; then
|
||||
cc=gcc
|
||||
else
|
||||
cc=$CC
|
||||
fi
|
||||
cc_target=`$cc -v 2>&1 | sed -n 's/Target: //p'`
|
||||
case "$cc_target" in
|
||||
*-*) host=$cc_target
|
||||
;;
|
||||
"") AC_MSG_ERROR([Impossible to obtain $cc compiler target.
|
||||
Please explicitly provide --host.])
|
||||
;;
|
||||
*) AC_MSG_WARN([Compiler reported non-standard target.
|
||||
Defaulting to $host.])
|
||||
;;
|
||||
esac
|
||||
AC_MSG_RESULT([$host])
|
||||
fi
|
||||
|
||||
. $srcdir/nt/mingw-cfg.site
|
||||
|
||||
case $srcdir in
|
||||
|
@ -150,11 +178,15 @@ case $canonical in
|
|||
# "/c/foo/bar", to simplify later conversions to native Windows
|
||||
# format ("c:/foo/bar").
|
||||
srcdir=`cd "${srcdir}" && pwd -W`
|
||||
srcdir="/${srcdir:0:1}${srcdir:2}"
|
||||
# 'eval' pacifies strict POSIX non-MinGW shells (Bug#18612).
|
||||
eval 'srcdir="/${srcdir:0:1}${srcdir:2}"'
|
||||
;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
canonical=$host
|
||||
configuration=${host_alias-${build_alias-$host}}
|
||||
|
||||
dnl Support for --program-prefix, --program-suffix and
|
||||
dnl --program-transform-name options
|
||||
AC_ARG_PROGRAM
|
||||
|
@ -253,7 +285,7 @@ AC_ARG_WITH([mailhost],[AS_HELP_STRING([--with-mailhost=HOSTNAME],
|
|||
|
||||
AC_ARG_WITH([sound],[AS_HELP_STRING([--with-sound=VALUE],
|
||||
[compile with sound support (VALUE one of: yes, alsa, oss, bsd-ossaudio, no;
|
||||
default yes). Only for GNU/Linux, FreeBSD, NetBSD, MinGW.])],
|
||||
default yes). Only for GNU/Linux, FreeBSD, NetBSD, MinGW, Cygwin.])],
|
||||
[ case "${withval}" in
|
||||
yes|no|alsa|oss|bsd-ossaudio) val=$withval ;;
|
||||
*) AC_MSG_ERROR([`--with-sound=$withval' is invalid;
|
||||
|
@ -556,9 +588,8 @@ case "${canonical}" in
|
|||
## Apple Darwin / Mac OS X
|
||||
*-apple-darwin* )
|
||||
case "${canonical}" in
|
||||
i[3456]86-* ) ;;
|
||||
powerpc-* ) ;;
|
||||
x86_64-* ) ;;
|
||||
*-apple-darwin[0-9].*) unported=yes ;;
|
||||
i[3456]86-* | x86_64-* ) ;;
|
||||
* ) unported=yes ;;
|
||||
esac
|
||||
opsys=darwin
|
||||
|
@ -652,7 +683,7 @@ case "${canonical}" in
|
|||
i[3456]86-*-* )
|
||||
case "${canonical}" in
|
||||
*-darwin* ) opsys=darwin ;;
|
||||
*-mingw32 )
|
||||
*-mingw* )
|
||||
opsys=mingw32
|
||||
# MinGW overrides and adds some system headers in nt/inc.
|
||||
GCC_TEST_OPTIONS="-I $srcdir/nt/inc"
|
||||
|
@ -667,7 +698,7 @@ case "${canonical}" in
|
|||
# MinGW64
|
||||
x86_64-*-* )
|
||||
case "${canonical}" in
|
||||
*-mingw32 )
|
||||
*-mingw* )
|
||||
opsys=mingw32
|
||||
# MinGW overrides and adds some system headers in nt/inc.
|
||||
GCC_TEST_OPTIONS="-I $srcdir/nt/inc"
|
||||
|
@ -705,7 +736,6 @@ If you think it should, please send a report to ${PACKAGE_BUGREPORT}.
|
|||
Check `etc/MACHINES' for recognized configuration names.])
|
||||
fi
|
||||
|
||||
|
||||
#### Choose a compiler.
|
||||
|
||||
dnl Don't bother to test for C89.
|
||||
|
@ -825,6 +855,7 @@ if test "$gl_gcc_warnings" != yes; then
|
|||
gl_WARN_ADD([-Wno-switch])
|
||||
gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare])
|
||||
gl_WARN_ADD([-Wno-pointer-sign])
|
||||
gl_WARN_ADD([-Wno-string-plus-int])
|
||||
fi
|
||||
else
|
||||
isystem='-isystem '
|
||||
|
@ -845,10 +876,8 @@ else
|
|||
|
||||
nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
|
||||
nw="$nw -Woverlength-strings" # Not a problem these days
|
||||
nw="$nw -Wlogical-op" # any use of fwrite provokes this
|
||||
nw="$nw -Wformat-nonliteral" # we do this a lot
|
||||
nw="$nw -Wvla" # warnings in gettext.h
|
||||
nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__
|
||||
nw="$nw -Wvla" # Emacs uses <vla.h>.
|
||||
nw="$nw -Wswitch-default" # Too many warnings for now
|
||||
nw="$nw -Winline" # OK to ignore 'inline'
|
||||
nw="$nw -Wjump-misses-init" # We sometimes safely jump over init.
|
||||
|
@ -865,7 +894,8 @@ else
|
|||
# Emacs's use of alloca inhibits protecting the stack.
|
||||
nw="$nw -Wstack-protector"
|
||||
|
||||
# The following line should be removable at some point.
|
||||
# Emacs's use of partly-pure functions such as CHECK_TYPE make this
|
||||
# option problematic.
|
||||
nw="$nw -Wsuggest-attribute=pure"
|
||||
|
||||
# This part is merely for shortening the command line,
|
||||
|
@ -892,10 +922,6 @@ else
|
|||
gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
|
||||
gl_WARN_ADD([-Wno-format-nonliteral])
|
||||
|
||||
# In spite of excluding -Wlogical-op above, it is enabled, as of
|
||||
# gcc 4.5.0 20090517.
|
||||
gl_WARN_ADD([-Wno-logical-op])
|
||||
|
||||
# More things that clang is unduly picky about.
|
||||
if test $emacs_cv_clang = yes; then
|
||||
gl_WARN_ADD([-Wno-format-extra-args])
|
||||
|
@ -905,14 +931,15 @@ else
|
|||
fi
|
||||
|
||||
AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
|
||||
AH_VERBATIM([FORTIFY_SOURCE],
|
||||
AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
|
||||
AH_VERBATIM([GNULIB_PORTCHECK_FORTIFY_SOURCE],
|
||||
[/* Enable compile-time and run-time bounds-checking, and some warnings,
|
||||
without upsetting glibc 2.15+. */
|
||||
#if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
|
||||
#if (defined GNULIB_PORTCHECK && !defined _FORTIFY_SOURCE \
|
||||
&& defined __OPTIMIZE__ && __OPTIMIZE__)
|
||||
# define _FORTIFY_SOURCE 2
|
||||
#endif
|
||||
])
|
||||
AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
|
||||
|
||||
# We use a slightly smaller set of warning options for lib/.
|
||||
# Remove the following and save the result in GNULIB_WARN_CFLAGS.
|
||||
|
@ -986,6 +1013,17 @@ if test "${enableval}" != "no"; then
|
|||
fi
|
||||
fi)
|
||||
|
||||
dnl Port to Automake 1.11.
|
||||
dnl This section can be removed once we assume Automake 1.14 or later.
|
||||
: ${AM_DEFAULT_VERBOSITY=1}
|
||||
: ${AM_V=$AM_DEFAULT_VERBOSITY}
|
||||
: ${AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY}
|
||||
AC_SUBST([AM_V])
|
||||
AM_SUBST_NOTMAKE([AM_V])
|
||||
AC_SUBST([AM_DEFAULT_V])
|
||||
AM_SUBST_NOTMAKE([AM_DEFAULT_V])
|
||||
AC_SUBST([AM_DEFAULT_VERBOSITY])
|
||||
|
||||
dnl Some other nice autoconf tests.
|
||||
dnl These are commented out, since gl_EARLY and/or Autoconf already does them.
|
||||
dnl AC_PROG_INSTALL
|
||||
|
@ -1093,15 +1131,16 @@ if test $opsys = gnu-linux; then
|
|||
fi
|
||||
|
||||
## Need makeinfo >= 4.7 (?) to build the manuals.
|
||||
AC_PATH_PROG(MAKEINFO, makeinfo, no)
|
||||
dnl By this stage, configure has already checked for egrep and set EGREP,
|
||||
dnl or exited with an error if no egrep was found.
|
||||
if test "$MAKEINFO" != "no"; then
|
||||
case `
|
||||
$MAKEINFO --version 2> /dev/null |
|
||||
$EGREP 'texinfo[[^0-9]]*([[1-4]][[0-9]]+|[[5-9]]|4\.[[7-9]]|4\.[[1-6]][[0-9]]+)'
|
||||
` in
|
||||
'') MAKEINFO=no;;
|
||||
if test "$MAKEINFO" = "${am_missing_run}makeinfo"; then
|
||||
MAKEINFO=makeinfo
|
||||
fi
|
||||
case `($MAKEINFO --version) 2>/dev/null` in
|
||||
*' (GNU texinfo) '4.[[7-9]]* | \
|
||||
*' (GNU texinfo) '4.[[1-9][0-9]]* | \
|
||||
*' (GNU texinfo) '[[5-9]]* | \
|
||||
*' (GNU texinfo) '[[1-9][0-9]]* ) ;;
|
||||
*) MAKEINFO=no;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
@ -1325,7 +1364,7 @@ test "$opsys" = "aix4.2" && test "x$GCC" != "xyes" && \
|
|||
C_SWITCH_SYSTEM="-ma -qmaxmem=4000"
|
||||
if test "$opsys" = "mingw32"; then
|
||||
case "$canonical" in
|
||||
x86_64-*-mingw32) C_SWITCH_SYSTEM="-mtune=generic" ;;
|
||||
x86_64-*-mingw*) C_SWITCH_SYSTEM="-mtune=generic" ;;
|
||||
*) C_SWITCH_SYSTEM="-mtune=pentium4" ;;
|
||||
esac
|
||||
fi
|
||||
|
@ -1436,8 +1475,8 @@ AC_DEFUN([EMACS_CHECK_MODULES],
|
|||
|
||||
HAVE_SOUND=no
|
||||
if test "${with_sound}" != "no"; then
|
||||
# Sound support for GNU/Linux, the free BSDs, and MinGW.
|
||||
AC_CHECK_HEADERS([machine/soundcard.h sys/soundcard.h soundcard.h],
|
||||
# Sound support for GNU/Linux, the free BSDs, MinGW, and Cygwin.
|
||||
AC_CHECK_HEADERS([machine/soundcard.h sys/soundcard.h soundcard.h mmsystem.h],
|
||||
have_sound_header=yes, [], [
|
||||
#ifdef __MINGW32__
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
|
@ -1499,7 +1538,7 @@ if test "${with_sound}" != "no"; then
|
|||
case "$opsys" in
|
||||
dnl defined __FreeBSD__ || defined __NetBSD__ || defined __linux__
|
||||
dnl Adjust the --with-sound help text if you change this.
|
||||
gnu-linux|freebsd|netbsd|mingw32)
|
||||
gnu-linux|freebsd|netbsd|mingw32|cygwin)
|
||||
AC_DEFINE(HAVE_SOUND, 1, [Define to 1 if you have sound support.])
|
||||
HAVE_SOUND=yes
|
||||
;;
|
||||
|
@ -1528,10 +1567,15 @@ if test $emacs_cv_personality_linux32 = yes; then
|
|||
[Define to 1 if personality LINUX32 can be set.])
|
||||
fi
|
||||
|
||||
# Note that Solaris has sys/sysinfo.h which defines struct
|
||||
# sysinfo as well. To make sure that we're using GNU/Linux
|
||||
# sysinfo, we explicitly set one of its fields.
|
||||
if test "$ac_cv_header_sys_sysinfo_h" = yes; then
|
||||
AC_MSG_CHECKING([if Linux sysinfo may be used])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/sysinfo.h>]],
|
||||
[[struct sysinfo si; sysinfo (&si)]])],
|
||||
[[struct sysinfo si;
|
||||
si.totalram = 0;
|
||||
sysinfo (&si)]])],
|
||||
emacs_cv_linux_sysinfo=yes, emacs_cv_linux_sysinfo=no)
|
||||
AC_MSG_RESULT($emacs_cv_linux_sysinfo)
|
||||
if test $emacs_cv_linux_sysinfo = yes; then
|
||||
|
@ -1704,12 +1748,14 @@ if test "${with_ns}" != no; then
|
|||
ns_appbindir=${ns_appdir}/Contents/MacOS
|
||||
ns_appresdir=${ns_appdir}/Contents/Resources
|
||||
ns_appsrc=Cocoa/Emacs.base
|
||||
ns_fontfile=macfont.o
|
||||
elif test -f $GNUSTEP_CONFIG_FILE; then
|
||||
NS_IMPL_GNUSTEP=yes
|
||||
ns_appdir=`pwd`/nextstep/Emacs.app
|
||||
ns_appbindir=${ns_appdir}
|
||||
ns_appresdir=${ns_appdir}/Resources
|
||||
ns_appsrc=GNUstep/Emacs.base
|
||||
ns_fontfile=nsfont.o
|
||||
dnl FIXME sourcing this several times in subshells seems inefficient.
|
||||
GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)"
|
||||
GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)"
|
||||
|
@ -1752,48 +1798,24 @@ fail;
|
|||
|
||||
macfont_file=""
|
||||
if test "${NS_IMPL_COCOA}" = "yes"; then
|
||||
AC_MSG_CHECKING([for OSX 10.4 or newer])
|
||||
AC_MSG_CHECKING([for OSX 10.6 or newer])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <AppKit/AppKit.h>],
|
||||
[
|
||||
#ifdef MAC_OS_X_VERSION_MAX_ALLOWED
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
|
||||
; /* OK */
|
||||
#else
|
||||
error "OSX 10.4 or newer required";
|
||||
error "OSX 10.6 or newer required";
|
||||
#endif
|
||||
#endif
|
||||
])],
|
||||
ns_osx_have_104=yes,
|
||||
ns_osx_have_104=no)
|
||||
AC_MSG_RESULT([$ns_osx_have_104])
|
||||
ns_osx_have_106=yes,
|
||||
ns_osx_have_106=no)
|
||||
AC_MSG_RESULT([$ns_osx_have_106])
|
||||
|
||||
if test $ns_osx_have_104 = no; then
|
||||
AC_MSG_ERROR([`OSX 10.4 or newer is required']);
|
||||
if test $ns_osx_have_106 = no; then
|
||||
AC_MSG_ERROR([`OSX 10.6 or newer is required']);
|
||||
fi
|
||||
AC_MSG_CHECKING([for OSX 10.5 or newer])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <AppKit/AppKit.h>],
|
||||
[
|
||||
#ifdef MAC_OS_X_VERSION_MAX_ALLOWED
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
|
||||
; /* OK */
|
||||
#else
|
||||
error "OSX 10.5 not found";
|
||||
#endif
|
||||
#endif
|
||||
])],
|
||||
ns_osx_have_105=yes,
|
||||
ns_osx_have_105=no)
|
||||
AC_MSG_RESULT([$ns_osx_have_105])
|
||||
if test $ns_osx_have_105 = yes; then
|
||||
macfont_file="macfont.o"
|
||||
fi
|
||||
fi
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Foundation/NSObjCRuntime.h>],
|
||||
[NSInteger i;])],
|
||||
ns_have_nsinteger=yes,
|
||||
ns_have_nsinteger=no)
|
||||
if test $ns_have_nsinteger = yes; then
|
||||
AC_DEFINE(NS_HAVE_NSINTEGER, 1, [Define to 1 if `NSInteger' is defined.])
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -1827,7 +1849,7 @@ if test "${HAVE_NS}" = yes; then
|
|||
INSTALL_ARCH_INDEP_EXTRA=
|
||||
fi
|
||||
|
||||
NS_OBJC_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o $macfont_file"
|
||||
NS_OBJC_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o $ns_fontfile"
|
||||
fi
|
||||
CFLAGS="$tmp_CFLAGS"
|
||||
CPPFLAGS="$tmp_CPPFLAGS"
|
||||
|
@ -1895,6 +1917,13 @@ if test "${HAVE_W32}" = "yes"; then
|
|||
x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;;
|
||||
*) EMACS_MANIFEST="emacs-x86.manifest" ;;
|
||||
esac
|
||||
dnl Construct something of the form "24,4,0,0" with 4 components.
|
||||
comma_version=`echo "${PACKAGE_VERSION}.0.0" | sed -e 's/\./,/g' -e 's/^\([[^,]]*,[[^,]]*,[[^,]]*,[[^,]]*\).*/\1/'`
|
||||
|
||||
comma_space_version=`echo "$comma_version" | sed 's/,/, /g'`
|
||||
AC_SUBST(comma_version)
|
||||
AC_SUBST(comma_space_version)
|
||||
AC_CONFIG_FILES([nt/emacs.rc nt/emacsclient.rc])
|
||||
if test "${opsys}" = "cygwin"; then
|
||||
W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
|
||||
W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
|
||||
|
@ -2030,9 +2059,13 @@ AC_CACHE_CHECK(
|
|||
doug_lea_malloc=$emacs_cv_var_doug_lea_malloc
|
||||
|
||||
system_malloc=$emacs_cv_sanitize_address
|
||||
|
||||
hybrid_malloc=
|
||||
|
||||
case "$opsys" in
|
||||
## darwin ld insists on the use of malloc routines in the System framework.
|
||||
darwin|mingw32|sol2-10) system_malloc=yes ;;
|
||||
cygwin) hybrid_malloc=yes;;
|
||||
esac
|
||||
|
||||
GMALLOC_OBJ=
|
||||
|
@ -2044,6 +2077,13 @@ if test "${system_malloc}" = "yes"; then
|
|||
GNU_MALLOC_reason="
|
||||
(The GNU allocators don't work with this system configuration.)"
|
||||
VMLIMIT_OBJ=
|
||||
elif test "$hybrid_malloc" = yes; then
|
||||
AC_DEFINE(HYBRID_MALLOC, 1,
|
||||
[Define to use gmalloc before dumping and the system malloc after.])
|
||||
GNU_MALLOC=
|
||||
GNU_MALLOC_reason="only before dumping"
|
||||
GMALLOC_OBJ=gmalloc.o
|
||||
VMLIMIT_OBJ=
|
||||
else
|
||||
test "$doug_lea_malloc" != "yes" && GMALLOC_OBJ=gmalloc.o
|
||||
VMLIMIT_OBJ=vm-limit.o
|
||||
|
@ -2597,19 +2637,13 @@ fi
|
|||
AC_SUBST(LIBSELINUX_LIBS)
|
||||
|
||||
HAVE_GNUTLS=no
|
||||
HAVE_GNUTLS3=no
|
||||
if test "${with_gnutls}" = "yes" ; then
|
||||
EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 3.0.0],
|
||||
[HAVE_GNUTLS3=yes], [HAVE_GNUTLS3=no])
|
||||
if test "${HAVE_GNUTLS3}" = "yes"; then
|
||||
AC_DEFINE(HAVE_GNUTLS3, 1, [Define if using GnuTLS v3.])
|
||||
HAVE_GNUTLS="yes"
|
||||
else
|
||||
EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.6.6],
|
||||
[HAVE_GNUTLS=yes], [HAVE_GNUTLS=no])
|
||||
fi
|
||||
EMACS_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.6.6],
|
||||
[HAVE_GNUTLS=yes], [HAVE_GNUTLS=no])
|
||||
if test "${HAVE_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.])], [])
|
||||
fi
|
||||
|
||||
# Windows loads GnuTLS dynamically
|
||||
|
@ -3029,6 +3063,9 @@ AC_SUBST(M17N_FLT_LIBS)
|
|||
|
||||
### Use -lXpm if available, unless `--with-xpm=no'.
|
||||
### mingw32 doesn't use -lXpm, since it loads the library dynamically.
|
||||
### In the Cygwin-w32 build, we need to use /usr/include/noX/X11/xpm.h
|
||||
### rather than /usr/include/X11/xpm.h, so we set CPPFLAGS (and
|
||||
### LDFLAGS) accordingly.
|
||||
HAVE_XPM=no
|
||||
LIBXPM=
|
||||
if test "${HAVE_W32}" = "yes" && test "${opsys}" = "cygwin"; then
|
||||
|
@ -3387,8 +3424,12 @@ if test "${HAVE_X11}" = "yes"; then
|
|||
EMACS_CHECK_MODULES([XRANDR], [$XRANDR_MODULES])
|
||||
if test $HAVE_XRANDR = no; then
|
||||
# Test old way in case pkg-config doesn't have it (older machines).
|
||||
# Include Xrender.h by hand to work around bug in older Xrandr.h
|
||||
# (e.g. RHEL5) and silence (harmless) configure warning (bug#18465).
|
||||
AC_CHECK_HEADER(X11/extensions/Xrandr.h,
|
||||
[AC_CHECK_LIB(Xrandr, XRRGetScreenResources, HAVE_XRANDR=yes)])
|
||||
[AC_CHECK_LIB(Xrandr, XRRGetScreenResources, HAVE_XRANDR=yes)],
|
||||
[], [AC_INCLUDES_DEFAULT
|
||||
#include <X11/extensions/Xrender.h>])
|
||||
if test $HAVE_XRANDR = yes; then
|
||||
XRANDR_LIBS=-lXrandr
|
||||
fi
|
||||
|
@ -3585,10 +3626,10 @@ AC_SUBST(BLESSMAIL_TARGET)
|
|||
|
||||
OLD_LIBS=$LIBS
|
||||
LIBS="$LIB_PTHREAD $LIB_MATH $LIBS"
|
||||
AC_CHECK_FUNCS(accept4 gethostname \
|
||||
AC_CHECK_FUNCS(accept4 fchdir gethostname \
|
||||
getrusage get_current_dir_name \
|
||||
lrand48 random rint \
|
||||
select getpagesize setlocale \
|
||||
select getpagesize setlocale newlocale \
|
||||
getrlimit setrlimit shutdown getaddrinfo \
|
||||
pthread_sigmask strsignal setitimer \
|
||||
sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
|
||||
|
@ -3598,9 +3639,11 @@ cfmakeraw cfsetspeed copysign __executable_start log2)
|
|||
LIBS=$OLD_LIBS
|
||||
|
||||
dnl No need to check for aligned_alloc and posix_memalign if using
|
||||
dnl gmalloc.o, as it supplies them. Don't use these functions on
|
||||
dnl Darwin as they are incompatible with unexmacosx.c.
|
||||
if test -z "$GMALLOC_OBJ" && test "$opsys" != darwin; then
|
||||
dnl gmalloc.o, as it supplies them, unless we're using hybrid_malloc.
|
||||
dnl Don't use these functions on Darwin as they are incompatible with
|
||||
dnl unexmacosx.c.
|
||||
if (test -z "$GMALLOC_OBJ" || test "$hybrid_malloc" = yes) \
|
||||
&& test "$opsys" != darwin; then
|
||||
AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break])
|
||||
fi
|
||||
|
||||
|
@ -3752,9 +3795,10 @@ AC_SUBST(TERMCAP_OBJ)
|
|||
AC_CACHE_CHECK([for timerfd interface], [emacs_cv_have_timerfd],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <sys/timerfd.h>
|
||||
]],
|
||||
[[timerfd_create (CLOCK_REALTIME, TFD_CLOEXEC);
|
||||
timerfd_settime (0, TFD_TIMER_ABSTIME, 0, 0);]])],
|
||||
]],
|
||||
[[timerfd_create (CLOCK_REALTIME,
|
||||
TFD_CLOEXEC | TFD_NONBLOCK);
|
||||
timerfd_settime (0, TFD_TIMER_ABSTIME, 0, 0);]])],
|
||||
[emacs_cv_have_timerfd=yes],
|
||||
[emacs_cv_have_timerfd=no])])
|
||||
if test "$emacs_cv_have_timerfd" = yes; then
|
||||
|
@ -3762,6 +3806,22 @@ if test "$emacs_cv_have_timerfd" = yes; then
|
|||
[Define to 1 if timerfd functions are supported as in GNU/Linux.])
|
||||
fi
|
||||
|
||||
# Alternate stack for signal handlers.
|
||||
AC_CACHE_CHECK([whether signals can be handled on alternate stack],
|
||||
[emacs_cv_alternate_stack],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <signal.h>
|
||||
]],
|
||||
[[stack_t ss;
|
||||
struct sigaction sa;
|
||||
ss.ss_sp = malloc (SIGSTKSZ);
|
||||
ss.ss_size = SIGSTKSZ;
|
||||
sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
|
||||
sigaltstack (&ss, 0);
|
||||
sigaction (SIGSEGV, &sa, 0);]])],
|
||||
[emacs_cv_alternate_stack=yes],
|
||||
[emacs_cv_alternate_stack=no])])
|
||||
|
||||
# Do we have res_init, for detecting changes in /etc/resolv.conf?
|
||||
# On Darwin, res_init appears not to be useful: see bug#562 and
|
||||
# http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01467.html
|
||||
|
@ -3901,43 +3961,7 @@ AC_SUBST(KRB4LIB)
|
|||
|
||||
AC_CHECK_HEADERS(valgrind/valgrind.h)
|
||||
|
||||
AC_CHECK_FUNCS_ONCE(tzset)
|
||||
AC_MSG_CHECKING(whether localtime caches TZ)
|
||||
AC_CACHE_VAL(emacs_cv_localtime_cache,
|
||||
[if test x$ac_cv_func_tzset = xyes; then
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
|
||||
char TZ_GMT0[] = "TZ=GMT0";
|
||||
char TZ_PST8[] = "TZ=PST8";
|
||||
main()
|
||||
{
|
||||
time_t now = time ((time_t *) 0);
|
||||
int hour_GMT0, hour_unset;
|
||||
if (putenv (TZ_GMT0) != 0)
|
||||
exit (1);
|
||||
hour_GMT0 = localtime (&now)->tm_hour;
|
||||
unsetenv("TZ");
|
||||
hour_unset = localtime (&now)->tm_hour;
|
||||
if (putenv (TZ_PST8) != 0)
|
||||
exit (1);
|
||||
if (localtime (&now)->tm_hour == hour_GMT0)
|
||||
exit (1);
|
||||
unsetenv("TZ");
|
||||
if (localtime (&now)->tm_hour != hour_unset)
|
||||
exit (1);
|
||||
exit (0);
|
||||
}]])], emacs_cv_localtime_cache=no, emacs_cv_localtime_cache=yes,
|
||||
[# If we have tzset, assume the worst when cross-compiling.
|
||||
emacs_cv_localtime_cache=yes])
|
||||
else
|
||||
# If we lack tzset, report that localtime does not cache TZ,
|
||||
# since we can't invalidate the cache if we don't have tzset.
|
||||
emacs_cv_localtime_cache=no
|
||||
fi])dnl
|
||||
AC_MSG_RESULT($emacs_cv_localtime_cache)
|
||||
if test $emacs_cv_localtime_cache = yes; then
|
||||
AC_DEFINE(LOCALTIME_CACHE, 1,
|
||||
[Define to 1 if localtime caches TZ.])
|
||||
fi
|
||||
AC_CHECK_FUNCS_ONCE(tzalloc tzset)
|
||||
|
||||
ok_so_far=yes
|
||||
AC_CHECK_FUNC(socket, , ok_so_far=no)
|
||||
|
@ -4004,15 +4028,6 @@ fi
|
|||
|
||||
AC_TYPE_MBSTATE_T
|
||||
|
||||
AC_CACHE_CHECK([for C restricted array declarations], emacs_cv_c_restrict_arr,
|
||||
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[void fred (int x[__restrict]);]], [[]])],
|
||||
emacs_cv_c_restrict_arr=yes, emacs_cv_c_restrict_arr=no)])
|
||||
if test "$emacs_cv_c_restrict_arr" = yes; then
|
||||
AC_DEFINE(__restrict_arr, __restrict,
|
||||
[Define to compiler's equivalent of C99 restrict keyword in array
|
||||
declarations. Define as empty for no equivalent.])
|
||||
fi
|
||||
|
||||
dnl Fixme: AC_SYS_POSIX_TERMIOS should probably be used, but it's not clear
|
||||
dnl how the tty code is related to POSIX and/or other versions of termios.
|
||||
dnl The following looks like a useful start.
|
||||
|
@ -4481,22 +4496,31 @@ AC_CACHE_CHECK([for _setjmp], [emacs_cv_func__setjmp],
|
|||
[emacs_cv_func__setjmp=no])])
|
||||
if test $emacs_cv_func__setjmp = yes; then
|
||||
AC_DEFINE([HAVE__SETJMP], 1, [Define to 1 if _setjmp and _longjmp work.])
|
||||
else
|
||||
AC_CACHE_CHECK([for sigsetjmp], [emacs_cv_func_sigsetjmp],
|
||||
[AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <setjmp.h>
|
||||
]],
|
||||
[[sigjmp_buf j;
|
||||
if (! sigsetjmp (j, 1))
|
||||
siglongjmp (j, 1);]])],
|
||||
[emacs_cv_func_sigsetjmp=yes],
|
||||
[emacs_cv_func_sigsetjmp=no])])
|
||||
if test $emacs_cv_func_sigsetjmp = yes; then
|
||||
AC_DEFINE([HAVE_SIGSETJMP], 1,
|
||||
[Define to 1 if sigsetjmp and siglongjmp work.
|
||||
The value of this symbol is irrelevant if HAVE__SETJMP is defined.])
|
||||
fi
|
||||
fi
|
||||
|
||||
# We need to preserve signal mask to handle C stack overflows.
|
||||
AC_CACHE_CHECK([for sigsetjmp], [emacs_cv_func_sigsetjmp],
|
||||
[AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <setjmp.h>
|
||||
]],
|
||||
[[sigjmp_buf j;
|
||||
if (! sigsetjmp (j, 1))
|
||||
siglongjmp (j, 1);]])],
|
||||
[emacs_cv_func_sigsetjmp=yes],
|
||||
[emacs_cv_func_sigsetjmp=no])])
|
||||
if test $emacs_cv_func_sigsetjmp = yes; then
|
||||
AC_DEFINE([HAVE_SIGSETJMP], 1,
|
||||
[Define to 1 if sigsetjmp and siglongjmp work.])
|
||||
fi
|
||||
|
||||
# We need all of these features to handle C stack overflows.
|
||||
if test "$ac_cv_header_sys_resource_h" = "yes" -a \
|
||||
"$ac_cv_func_getrlimit" = "yes" -a \
|
||||
"$emacs_cv_func_sigsetjmp" = "yes" -a \
|
||||
"$emacs_cv_alternate_stack" = yes; then
|
||||
AC_DEFINE([HAVE_STACK_OVERFLOW_HANDLING], 1,
|
||||
[Define to 1 if C stack overflow can be handled in some cases.])
|
||||
fi
|
||||
|
||||
case $opsys in
|
||||
|
@ -4627,20 +4651,7 @@ if test $emacs_cv_usable_FIONREAD = yes; then
|
|||
fi
|
||||
fi
|
||||
|
||||
|
||||
case $opsys in
|
||||
dnl Emacs supplies its own malloc, but glib calls posix_memalign,
|
||||
dnl and on Cygwin prior to version 1.7.24 that becomes the
|
||||
dnl Cygwin-supplied posix_memalign. As malloc is not the Cygwin
|
||||
dnl malloc, the Cygwin posix_memalign always returns ENOSYS. A
|
||||
dnl workaround is to set G_SLICE=always-malloc. This is no longer
|
||||
dnl needed starting with cygwin-1.7.24, and it is no longer
|
||||
dnl effective starting with glib-2.36. */
|
||||
cygwin)
|
||||
AC_DEFINE(G_SLICE_ALWAYS_MALLOC, 1, [Define to set the
|
||||
G_SLICE environment variable to "always-malloc" at startup.])
|
||||
;;
|
||||
|
||||
hpux11)
|
||||
dnl It works to open the pty's tty in the parent (Emacs), then
|
||||
dnl close and reopen it in the child.
|
||||
|
@ -4827,6 +4838,22 @@ else
|
|||
fi
|
||||
AC_SUBST(LIBXMENU)
|
||||
|
||||
AC_CACHE_CHECK([for struct alignment],
|
||||
[emacs_cv_struct_alignment],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <stddef.h>
|
||||
struct __attribute__ ((aligned (8))) s { char c; };
|
||||
struct t { char c; struct s s; };
|
||||
char verify[offsetof (struct t, s) == 8 ? 1 : -1];
|
||||
]])],
|
||||
[emacs_cv_struct_alignment=yes],
|
||||
[emacs_cv_struct_alignment=no])])
|
||||
if test "$emacs_cv_struct_alignment" = yes; then
|
||||
AC_DEFINE([HAVE_STRUCT_ATTRIBUTE_ALIGNED], 1,
|
||||
[Define to 1 if 'struct __attribute__ ((aligned (N)))' aligns the
|
||||
structure to an N-byte boundary.])
|
||||
fi
|
||||
|
||||
if test "${GNU_MALLOC}" = "yes" ; then
|
||||
AC_DEFINE(GNU_MALLOC, 1,
|
||||
[Define to 1 if you want to use the GNU memory allocator.])
|
||||
|
@ -4911,20 +4938,24 @@ fi
|
|||
case "$opsys" in
|
||||
aix4-2) LD_SWITCH_SYSTEM_TEMACS="-Wl,-bnodelcsect" ;;
|
||||
|
||||
cygwin) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000" ;;
|
||||
|
||||
darwin)
|
||||
## The -headerpad option tells ld (see man page) to leave room at the
|
||||
## end of the header for adding load commands. Needed for dumping.
|
||||
## 0x690 is the total size of 30 segment load commands (at 56
|
||||
## each); under Cocoa 31 commands are required.
|
||||
## 0x1000 is enough for roughly 52 load commands on the x86_64
|
||||
## architecture (where they are 78 bytes each). The actual number of
|
||||
## load commands added is not consistent but normally ranges from
|
||||
## about 14 to about 34. Setting it high gets us plenty of slop and
|
||||
## only costs about 1.5K of wasted binary space.
|
||||
headerpad_extra=1000
|
||||
if test "$HAVE_NS" = "yes"; then
|
||||
libs_nsgui="-framework AppKit"
|
||||
if test "$NS_IMPL_COCOA" = "yes"; then
|
||||
libs_nsgui="$libs_nsgui -framework IOKit"
|
||||
fi
|
||||
headerpad_extra=6C8
|
||||
else
|
||||
libs_nsgui=
|
||||
headerpad_extra=690
|
||||
fi
|
||||
LD_SWITCH_SYSTEM_TEMACS="-fno-pie -prebind $libs_nsgui -Xlinker -headerpad -Xlinker $headerpad_extra"
|
||||
|
||||
|
@ -5154,6 +5185,9 @@ if test "$HAVE_NS" = "yes"; then
|
|||
AC_SUBST(ns_check_file)
|
||||
fi
|
||||
|
||||
dnl config.status treats $srcdir specially, so I think this is ok...
|
||||
AC_CONFIG_FILES([$srcdir/doc/man/emacs.1])
|
||||
|
||||
dnl Obviously there is duplication here wrt $SUBDIR_MAKEFILES.
|
||||
dnl You _can_ use that variable in AC_CONFIG_FILES, so long as any directory
|
||||
dnl using automake (ie lib/) is explicitly listed and not "hidden" in a variable
|
||||
|
@ -5217,6 +5251,25 @@ if test ! -f src/.gdbinit && test -f "$srcdir/src/.gdbinit"; then
|
|||
fi
|
||||
])
|
||||
|
||||
dnl Perhaps this would be better named doc-emacs-emacsver.texi?
|
||||
dnl See comments for etc-refcards-emacsver.tex.
|
||||
dnl Since we get a doc/emacs directory generated anyway, for the Makefile,
|
||||
dnl it is not quite the same. But we are generating in $srcdir.
|
||||
AC_CONFIG_COMMANDS([doc/emacs/emacsver.texi], [
|
||||
${MAKE-make} -s --no-print-directory -C doc/emacs doc-emacsver || \
|
||||
AC_MSG_ERROR(['doc/emacs/emacsver.texi' could not be made.])
|
||||
])
|
||||
|
||||
dnl If we give this the more natural name, etc/refcards/emacsver.texi,
|
||||
dnl then a directory etc/refcards is created in the build directory,
|
||||
dnl which is probably harmless, but confusing (in out-of-tree builds).
|
||||
dnl (If we were to generate etc/refcards/Makefile, this might change.)
|
||||
dnl It is really $srcdir/etc/refcards/emacsver.tex that we generate.
|
||||
AC_CONFIG_COMMANDS([etc-refcards-emacsver.tex], [
|
||||
${MAKE-make} -s MAKEFILE_NAME=do-not-make-Makefile etc-emacsver || \
|
||||
AC_MSG_ERROR(['etc/refcards/emacsver.tex' could not be made.])
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
test "$MAKE" = make || AC_MSG_NOTICE([Now you can run '$MAKE'.])
|
||||
|
|
23
doc/emacs/.gitignore
vendored
23
doc/emacs/.gitignore
vendored
|
@ -1,23 +0,0 @@
|
|||
*.aux
|
||||
*.cp
|
||||
*.cps
|
||||
*.dvi
|
||||
*.fn
|
||||
*.fns
|
||||
*.ky
|
||||
*.kys
|
||||
*.log
|
||||
*.op
|
||||
*.ops
|
||||
*.pdf
|
||||
*.pg
|
||||
*.pgs
|
||||
*.ps
|
||||
*.tmp
|
||||
*.toc
|
||||
*.tp
|
||||
*.tps
|
||||
*.vr
|
||||
*.vrs
|
||||
Makefile
|
||||
makefile
|
|
@ -1,3 +1,186 @@
|
|||
2014-12-14 Alan Mackenzie <acm@muc.de>
|
||||
|
||||
* display.texi (Scrolling): fast-but-imprecise-scrolling.
|
||||
Describe new variable.
|
||||
|
||||
2014-12-14 Cameron Desautels <camdez@gmail.com>
|
||||
|
||||
* custom.texi (Saving Customizations): Mention
|
||||
`custom-prompt-customize-unsaved-options'.
|
||||
|
||||
2014-12-08 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* misc.texi (Network Security): Mention the new protocol-level
|
||||
`high' NSM checks.
|
||||
|
||||
2014-12-08 Eric S. Raymond <esr@snark.thyrsus.com>
|
||||
|
||||
* maintaining.texi: Suopport fo Arch has been moved to obosolete,
|
||||
remove references that imply otherwise.
|
||||
|
||||
2014-11-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Lessen focus on ChangeLog files, as opposed to change log entries.
|
||||
* maintaining.texi (Change Log): Mention that ChangeLog files may
|
||||
be copied to or from a version control system.
|
||||
* trouble.texi (Sending Patches): Point to the commit messages.
|
||||
|
||||
2014-11-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* maintaining.texi (Switching Branches): Mention "C-x v r".
|
||||
Correct commands for switching branches in various VCSs.
|
||||
|
||||
2014-11-27 Tassilo Horn <tsdh@gnu.org>
|
||||
|
||||
* misc.texi (DocView Slicing): Describe how to slice with the
|
||||
mouse. Fix command mentioned by slice by BoundingBox paragraph.
|
||||
(Bug#18040)
|
||||
|
||||
2014-11-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* misc.texi (Network Security): Use "untrustworthy" instead of
|
||||
"unsafe".
|
||||
|
||||
2014-11-24 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* misc.texi (Network Security): Improve wording and indexing of
|
||||
last change.
|
||||
|
||||
2014-11-24 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* misc.texi (Gnus Summary Buffer): Move the Network Security
|
||||
Manager stuff here from the lispref manual.
|
||||
|
||||
2014-11-21 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* maintaining.texi (Version Control Systems): Move "@end itemize"
|
||||
past the last @item.
|
||||
|
||||
2014-11-21 H. Dieter Wilhelm <dieter@duenenhof-wilhelm.de>
|
||||
|
||||
* maintaining.texi (Version Control Systems): Fix a typo.
|
||||
|
||||
2014-11-20 Eric S. Raymond <esr@snark.thyrsus.com>
|
||||
|
||||
* maintaining.texi: Document SRC support.
|
||||
|
||||
2014-11-10 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (top_srcdir, version): New, set by configure.
|
||||
(doc-emacsver): New rule.
|
||||
(bootstrap-clean, maintainer-clean): Delete emacsver.texi.
|
||||
(emacsver.texi.in): Rename from emacsver.texi.
|
||||
|
||||
2014-11-09 Juri Linkov <juri@jurta.org>
|
||||
|
||||
* search.texi (Other Repeating Search): Add documentation for
|
||||
multi-isearch-files and multi-isearch-files-regexp. (Bug#13592)
|
||||
|
||||
2014-11-09 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (version): Remove variable.
|
||||
(clean): No longer delete dist tarfile.
|
||||
(dist): Remove rule; replace with code in admin.el.
|
||||
|
||||
2014-11-03 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* programs.texi (Misc for Programs): Fix typo.
|
||||
|
||||
2014-10-30 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* frames.texi (Scroll Bars): Improve indexing of faces.
|
||||
|
||||
* killing.texi (Secondary Selection): Improve indexing of faces.
|
||||
|
||||
* search.texi (Basic Isearch, Query Replace): Improve indexing of faces.
|
||||
|
||||
* display.texi (Standard Faces, Text Display)
|
||||
(Useless Whitespace): Improve indexing of faces.
|
||||
|
||||
* frames.texi (Frame Commands): Document and index
|
||||
'frame-resize-pixelwise'.
|
||||
|
||||
* windows.texi (Split Window): Document and index
|
||||
'window-resize-pixelwise'.
|
||||
|
||||
2014-10-22 Tassilo Horn <tsdh@gnu.org>
|
||||
|
||||
* misc.texi (Document View): Adapt to latest doc-view changes wrt
|
||||
viewing the document's plain text contents.
|
||||
|
||||
2014-10-20 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Merge in all changes up to 24.4 release.
|
||||
|
||||
2014-10-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (dist): Update for new output variables.
|
||||
|
||||
2014-10-12 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* macos.texi (Mac OS / GNUstep, Mac / GNUstep Basics)
|
||||
(Mac / GNUstep Customization): Mac OS X 10.6 or later now required.
|
||||
|
||||
2014-10-09 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* package.texi (Package Menu): The package list was changed to not
|
||||
say "unsigned" any more.
|
||||
|
||||
2014-10-05 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* misc.texi (Sorting):
|
||||
* search.texi (Query Replace): Markup fixes.
|
||||
|
||||
2014-10-04 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* frames.texi (Scroll Bars): Describe use of horizontal scroll bars.
|
||||
|
||||
2014-10-04 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* cmdargs.texi (Misc X):
|
||||
* display.texi (Optional Mode Line):
|
||||
* misc.texi (emacsclient Options):
|
||||
* vc1-xtra.texi (VC Delete/Rename): Small fixes re @var usage.
|
||||
|
||||
* killing.texi (Rectangles): Copyedits re rectangle-mark-mode.
|
||||
(CUA Bindings): Mention rectangle-mark-mode.
|
||||
|
||||
2014-10-03 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* frames.texi (Frame Commands):
|
||||
* cmdargs.texi (Window Size X): Mention the use of
|
||||
`frame-resize-pixelwise' to make frames truly fullscreen or maximized.
|
||||
|
||||
2014-10-02 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* package.texi (Package Installation): Mention etc/package-keyring.gpg.
|
||||
|
||||
2014-09-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* emacsver.texi (EMACSVER): Bump to 20.0.50.
|
||||
|
||||
2014-09-15 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* regs.texi (Text Registers): Update end-user documentation
|
||||
to reflect `insert-register' interface change.
|
||||
|
||||
2014-08-07 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* programs.texi (Program Modes): Don't advertise VMS DCL support
|
||||
any more.
|
||||
|
||||
2014-08-07 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
Refer to MS-DOS using the same name everywhere.
|
||||
|
||||
* Makefile.in (EMACSSOURCES): ``MS-DOG'', ``MSDOG'' and ``msdog''
|
||||
become ``MS-DOS''; ``msdog'' in filenames becomes ``msdos''.
|
||||
* emacs-xtra.texi: ditto.
|
||||
* emacs.texi: ditto.
|
||||
* makefile.w32-in: ditto.
|
||||
* msdog-xtra.texi: ditto, and rename file.
|
||||
* msdog.texi: ditto, and rename file.
|
||||
|
||||
2014-07-21 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* emacs.texi (Intro): Workaround makeinfo 4 @acronym bug. (Bug#18040)
|
||||
|
@ -234,8 +417,8 @@
|
|||
|
||||
2014-03-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* mule.texi (International, Language Environments): Update
|
||||
the list of language environments to what Emacs currently
|
||||
* mule.texi (International, Language Environments):
|
||||
Update the list of language environments to what Emacs currently
|
||||
supports. Add the full list to the index. Suggest C-h L for
|
||||
details rather than trying to give very brief details here.
|
||||
|
||||
|
@ -527,8 +710,8 @@
|
|||
|
||||
* indent.texi (Tab Stops): Mention recent changes about `tab-stop-list'.
|
||||
|
||||
* frames.texi (Scroll Bars): Document
|
||||
`scroll-bar-adjust-thumb-portion'.
|
||||
* frames.texi (Scroll Bars):
|
||||
Document `scroll-bar-adjust-thumb-portion'.
|
||||
|
||||
2013-12-21 Chong Yidong <cyd@gnu.org>
|
||||
|
||||
|
@ -554,8 +737,8 @@
|
|||
|
||||
* entering.texi: Document `initial-buffer-choice' changes.
|
||||
|
||||
* misc.texi (emacsclient Options): Document
|
||||
`initial-buffer-choice' changes.
|
||||
* misc.texi (emacsclient Options):
|
||||
Document `initial-buffer-choice' changes.
|
||||
|
||||
* help.texi: Document that `?' now also shows subcommands of
|
||||
prefix keys.
|
||||
|
@ -1038,8 +1221,8 @@
|
|||
|
||||
* misc.texi (Terminal emulator): Document Term mode faces.
|
||||
|
||||
* mini.texi (Basic Minibuffer): New node. Document
|
||||
minibuffer-electric-default-mode.
|
||||
* mini.texi (Basic Minibuffer): New node.
|
||||
Document minibuffer-electric-default-mode.
|
||||
|
||||
* display.texi (Visual Line Mode): Fix index entry.
|
||||
|
||||
|
@ -3099,7 +3282,7 @@
|
|||
|
||||
* Makefile.in (MAKEINFO): Now controlled by `configure'.
|
||||
(MAKEINFO_OPTS): New variable. Use it where appropriate.
|
||||
(ENVADD): Updated.
|
||||
(ENVADD): Update.
|
||||
|
||||
2011-01-18 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
|
@ -8994,7 +9177,7 @@
|
|||
|
||||
* text.texi (Format Faces): Replace old M-g key prefix with M-o.
|
||||
|
||||
* emacs.texi (Acknowledgments): Updated.
|
||||
* emacs.texi (Acknowledgments): Update.
|
||||
|
||||
* anti.texi: Total rewrite.
|
||||
|
||||
|
@ -10101,7 +10284,7 @@
|
|||
|
||||
* frames.texi (Dialog Boxes): Add use-file-dialog.
|
||||
|
||||
2003-11-22 Martin Stjernholm <bug-cc-mode@gnu.org>
|
||||
2003-11-22 Martin Stjernholm <mast@lysator.liu.se>
|
||||
|
||||
* ack.texi: Note that Alan Mackenzie contributed the AWK support
|
||||
in CC Mode.
|
||||
|
|
|
@ -26,8 +26,9 @@ SHELL = @SHELL@
|
|||
# of the source tree. This is set by configure's `--srcdir' option.
|
||||
srcdir=@srcdir@
|
||||
|
||||
# Only for make dist.
|
||||
version=@version@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
||||
version = @version@
|
||||
|
||||
## Where the output files go.
|
||||
## Note that the setfilename command in the .texi files assumes this.
|
||||
|
@ -91,7 +92,7 @@ EMACS_XTRA= \
|
|||
$(srcdir)/vc-xtra.texi \
|
||||
$(srcdir)/vc1-xtra.texi \
|
||||
$(srcdir)/fortran-xtra.texi \
|
||||
$(srcdir)/msdog-xtra.texi
|
||||
$(srcdir)/msdos-xtra.texi
|
||||
|
||||
EMACSSOURCES= \
|
||||
${srcdir}/emacs.texi \
|
||||
|
@ -135,7 +136,7 @@ EMACSSOURCES= \
|
|||
${srcdir}/xresources.texi \
|
||||
${srcdir}/anti.texi \
|
||||
${srcdir}/macos.texi \
|
||||
${srcdir}/msdog.texi \
|
||||
${srcdir}/msdos.texi \
|
||||
${srcdir}/gnu.texi \
|
||||
${srcdir}/glossary.texi \
|
||||
${srcdir}/ack.texi \
|
||||
|
@ -181,6 +182,18 @@ emacs-xtra.pdf: $(EMACS_XTRA)
|
|||
%.ps: %.dvi
|
||||
$(DVIPS) -o $@ $<
|
||||
|
||||
.PHONY: doc-emacsver
|
||||
|
||||
# If configure were to just generate emacsver.texi from emacsver.texi.in
|
||||
# in the normal way, the timestamp of emacsver.texi would always be
|
||||
# newer than that of the info files, which are prebuilt in release tarfiles.
|
||||
# So we use this rule, and move-if-change, to avoid that.
|
||||
doc-emacsver:
|
||||
sed 's/[@]version@/${version}/' \
|
||||
${srcdir}/emacsver.texi.in > emacsver.texi.$$$$ && \
|
||||
${top_srcdir}/build-aux/move-if-change emacsver.texi.$$$$ \
|
||||
${srcdir}/emacsver.texi
|
||||
|
||||
.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean infoclean
|
||||
|
||||
## Temp files.
|
||||
|
@ -191,7 +204,6 @@ mostlyclean:
|
|||
## Products not in the release tarfiles.
|
||||
clean: mostlyclean
|
||||
rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS)
|
||||
rm -f emacs-manual-${version}.tar*
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile
|
||||
|
@ -204,28 +216,7 @@ infoclean:
|
|||
$(buildinfodir)/emacs.info-[1-9][0-9]
|
||||
|
||||
bootstrap-clean maintainer-clean: distclean infoclean
|
||||
|
||||
.PHONY: dist
|
||||
|
||||
## Make a standalone tarfile of the Emacs manual sources.
|
||||
## The [c] is a dumb way to prevent configure expanding it.
|
||||
dist:
|
||||
rm -rf emacs-manual-${version}
|
||||
mkdir emacs-manual-${version}
|
||||
cp ${srcdir}/*.texi ${texinfodir}/texinfo.tex \
|
||||
${srcdir}/ChangeLog* emacs-manual-${version}/
|
||||
sed -e 's/@sr[c]dir@/./' -e 's/^\(texinfodir *=\).*/\1 ./' \
|
||||
-e 's/^\(buildinfodir *=\).*/\1 ./' \
|
||||
-e 's/^\(clean:.*\)/\1 infoclean/' \
|
||||
-e "s/@ver[s]ion@/${version}/" \
|
||||
-e 's/@MAKE[I]NFO@/makeinfo/' -e 's/@MK[D]IR_P@/mkdir -p/' \
|
||||
${srcdir}/Makefile.in > emacs-manual-${version}/Makefile
|
||||
@if grep '@[a-zA-Z_]*@' emacs-manual-${version}/Makefile; then \
|
||||
echo "Unexpanded configure variables in Makefile?" 1>&2; exit 1; \
|
||||
fi
|
||||
tar -cf emacs-manual-${version}.tar emacs-manual-${version}
|
||||
rm -rf emacs-manual-${version}
|
||||
|
||||
rm -f ${srcdir}/emacsver.texi
|
||||
|
||||
.PHONY: install-dvi install-html install-pdf install-ps install-doc
|
||||
|
||||
|
|
|
@ -987,10 +987,10 @@ size with no tool bar, use an X resource to specify ``no tool bar''
|
|||
(@pxref{Table of Resources}); then Emacs will already know there's no
|
||||
tool bar when it processes the specified geometry.
|
||||
|
||||
When using one of @samp{--fullscreen}, @samp{--maximized}, @samp{--fullwidth}
|
||||
or @samp{--fullheight} there may be some space around the frame
|
||||
anyway. That is because Emacs rounds the sizes so they are an
|
||||
even number of character heights and widths.
|
||||
When using one of @samp{--fullscreen}, @samp{--maximized},
|
||||
@samp{--fullwidth} or @samp{--fullheight}, some window managers require
|
||||
you to set the variable @code{frame-resize-pixelwise} to a non-@code{nil}
|
||||
value to make a frame appear truly ``maximized'' or ``fullscreen''.
|
||||
|
||||
Some window managers have options that can make them ignore both
|
||||
program-specified and user-specified positions. If these are set,
|
||||
|
@ -1106,8 +1106,8 @@ rectangle containing the frame's title.
|
|||
@c Enable horizontal scroll bars. Since horizontal scroll bars
|
||||
@c are not yet implemented, this actually does nothing.
|
||||
|
||||
@item --parent-id @var{ID}
|
||||
Open Emacs as a client X window via the XEmbed protocol, with @var{ID}
|
||||
@item --parent-id @var{id}
|
||||
Open Emacs as a client X window via the XEmbed protocol, with @var{id}
|
||||
as the parent X window id. Currently, this option is mainly useful
|
||||
for developers.
|
||||
|
||||
|
|
|
@ -405,6 +405,16 @@ customizations in your initialization file. This is because saving
|
|||
customizations from such a session would wipe out all the other
|
||||
customizations you might have on your initialization file.
|
||||
|
||||
Please note that any customizations you have not chosen to save for
|
||||
future sessions will be lost when you terminate Emacs. If you'd like
|
||||
to be prompted about unsaved customizations at termination time, add
|
||||
the following to your initialization file:
|
||||
|
||||
@example
|
||||
(add-hook 'kill-emacs-query-functions
|
||||
'custom-prompt-customize-unsaved-options)
|
||||
@end example
|
||||
|
||||
@node Face Customization
|
||||
@subsection Customizing Faces
|
||||
@cindex customizing faces
|
||||
|
|
|
@ -127,6 +127,19 @@ the mouse wheel (@pxref{Mouse Commands}); in general, it affects any
|
|||
command that has a non-@code{nil} @code{scroll-command} property.
|
||||
@xref{Property Lists,,, elisp, The Emacs Lisp Reference Manual}.
|
||||
|
||||
@vindex fast-but-imprecise-scrolling
|
||||
Sometimes, particularly when you hold down keys such as @kbd{C-v}
|
||||
and @kbd{M-v}, activating keyboard auto-repeat, Emacs fails to keep up
|
||||
with the rapid rate of scrolling requested; the display doesn't update
|
||||
and Emacs can become unresponsive to input for quite a long time. You
|
||||
can counter this sluggishness by setting the variable
|
||||
@code{fast-but-imprecise-scrolling} to a non-@code{nil} value. This
|
||||
instructs the scrolling commands not to fontify (@pxref{Font Lock})
|
||||
any unfontified text they scroll over, instead to assume it has the
|
||||
default face. This can cause Emacs to scroll to somewhat wrong buffer
|
||||
positions when the faces in use are not all the same size, even with
|
||||
single (i.e. without auto-repeat) scrolling operations.
|
||||
|
||||
@vindex scroll-up
|
||||
@vindex scroll-down
|
||||
@findex scroll-up-line
|
||||
|
@ -578,6 +591,7 @@ Parameters}.
|
|||
|
||||
@node Standard Faces
|
||||
@section Standard Faces
|
||||
@cindex standard faces
|
||||
|
||||
Here are the standard faces for specifying text appearance. You can
|
||||
apply them to specific text when you want the effects they produce.
|
||||
|
@ -598,8 +612,10 @@ This face underlines text.
|
|||
This face forces use of a fixed-width font. It's reasonable to
|
||||
customize this face to use a different fixed-width font, if you like,
|
||||
but you should not make it a variable-width font.
|
||||
@cindex variable-pitch face
|
||||
@item variable-pitch
|
||||
This face forces use of a variable-width font.
|
||||
@cindex shadow face
|
||||
@item shadow
|
||||
This face is used for making the text less noticeable than the surrounding
|
||||
ordinary text. Usually this can be achieved by using shades of gray in
|
||||
|
@ -647,25 +663,34 @@ frame:
|
|||
|
||||
@table @code
|
||||
@item mode-line
|
||||
@cindex mode-line face
|
||||
@cindex faces for mode lines
|
||||
This face is used for the mode line of the currently selected window,
|
||||
and for menu bars when toolkit menus are not used. By default, it's
|
||||
drawn with shadows for a ``raised'' effect on graphical displays, and
|
||||
drawn as the inverse of the default face on non-windowed terminals.
|
||||
@item mode-line-inactive
|
||||
@cindex mode-line-inactive face
|
||||
Like @code{mode-line}, but used for mode lines of the windows other
|
||||
than the selected one (if @code{mode-line-in-non-selected-windows} is
|
||||
non-@code{nil}). This face inherits from @code{mode-line}, so changes
|
||||
in that face affect mode lines in all windows.
|
||||
@item mode-line-highlight
|
||||
Like @code{highlight}, but used for portions of text on mode lines.
|
||||
@cindex mode-line-highlight face
|
||||
Like @code{highlight}, but used for mouse-sensitive portions of text
|
||||
on mode lines. Such portions of text typically pop up tooltips
|
||||
(@pxref{Tooltips}) when the mouse pointer hovers above them.
|
||||
@item mode-line-buffer-id
|
||||
@cindex mode-line-buffer-id face
|
||||
This face is used for buffer identification parts in the mode line.
|
||||
@item header-line
|
||||
@cindex header-line face
|
||||
Similar to @code{mode-line} for a window's header line, which appears
|
||||
at the top of a window just as the mode line appears at the bottom.
|
||||
Most windows do not have a header line---only some special modes, such
|
||||
Info mode, create one.
|
||||
@item vertical-border
|
||||
@cindex vertical-border face
|
||||
This face is used for the vertical divider between windows on text
|
||||
terminals.
|
||||
@item minibuffer-prompt
|
||||
|
@ -1110,6 +1135,7 @@ empty lines at the end of a buffer, without realizing it. In most
|
|||
cases, this @dfn{trailing whitespace} has no effect, but sometimes it
|
||||
can be a nuisance.
|
||||
|
||||
@cindex trailing-whitespace face
|
||||
You can make trailing whitespace at the end of a line visible by
|
||||
setting the buffer-local variable @code{show-trailing-whitespace} to
|
||||
@code{t}. Then Emacs displays trailing whitespace, using the face
|
||||
|
@ -1245,11 +1271,11 @@ Size Indication mode. The size will be displayed immediately
|
|||
following the buffer percentage like this:
|
||||
|
||||
@example
|
||||
@var{POS} of @var{SIZE}
|
||||
@var{pos} of @var{size}
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Here @var{SIZE} is the human readable representation of the number of
|
||||
Here @var{size} is the human readable representation of the number of
|
||||
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.
|
||||
|
||||
|
@ -1418,6 +1444,8 @@ as octal escape sequences instead of caret escape sequences.
|
|||
@cindex non-breaking space
|
||||
@cindex non-breaking hyphen
|
||||
@cindex soft hyphen
|
||||
@cindex escape-glyph face
|
||||
@cindex nobreak-space face
|
||||
Some non-@acronym{ASCII} characters have the same appearance as an
|
||||
@acronym{ASCII} space or hyphen (minus) character. Such characters
|
||||
can cause problems if they are entered into a buffer without your
|
||||
|
|
|
@ -120,7 +120,7 @@ the Emacs manual.
|
|||
|
||||
@include fortran-xtra.texi
|
||||
|
||||
@include msdog-xtra.texi
|
||||
@include msdos-xtra.texi
|
||||
|
||||
@lowersections
|
||||
@end iftex
|
||||
|
|
|
@ -189,6 +189,7 @@ Advanced Features
|
|||
* Sending Mail:: Sending mail in Emacs.
|
||||
* Rmail:: Reading mail in Emacs.
|
||||
* Gnus:: A flexible mail and news reader.
|
||||
* Network Security:: Managing the network security.
|
||||
* Document View:: Viewing PDF, PS and DVI files.
|
||||
* EWW:: A web browser in Emacs.
|
||||
* Shell:: Executing shell commands from Emacs.
|
||||
|
@ -1574,8 +1575,8 @@ Lisp programming.
|
|||
|
||||
@include anti.texi
|
||||
@include macos.texi
|
||||
@c Includes msdog-xtra.
|
||||
@include msdog.texi
|
||||
@c Includes msdos-xtra.
|
||||
@include msdos.texi
|
||||
@include gnu.texi
|
||||
@include glossary.texi
|
||||
@ifnottex
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
@c It would be nicer to generate this using configure and @version@.
|
||||
@c However, that would mean emacsver.texi would always be newer
|
||||
@c then the info files in release tarfiles.
|
||||
@set EMACSVER 24.4.50
|
2
doc/emacs/emacsver.texi.in
Normal file
2
doc/emacs/emacsver.texi.in
Normal file
|
@ -0,0 +1,2 @@
|
|||
@c configure generates emacsver.texi from emacsver.texi.in via a Makefile rule
|
||||
@set EMACSVER @version@
|
|
@ -376,6 +376,9 @@ position (@pxref{Split Window}).
|
|||
between two side-by-side mode lines, you can move the vertical
|
||||
boundary to the left or right.
|
||||
|
||||
Note that resizing windows is affected by the value of
|
||||
@code{window-resize-pixelwise}, see @ref{Split Window}.
|
||||
|
||||
@node Creating Frames
|
||||
@section Creating Frames
|
||||
@cindex creating frames
|
||||
|
@ -469,6 +472,14 @@ hides window manager decorations, giving slightly more screen space to
|
|||
Emacs itself.)
|
||||
@end table
|
||||
|
||||
@vindex frame-resize-pixelwise
|
||||
Note that with some window managers you may have to customize the
|
||||
variable @code{frame-resize-pixelwise} to a non-@code{nil} value in
|
||||
order to make a frame truly ``maximized'' or ``fullscreen''. This
|
||||
variable, when set to a non-@code{nil} value, in general allows
|
||||
resizing frames at pixel resolution, rather than in integral multiples
|
||||
of lines and columns.
|
||||
|
||||
The @kbd{C-x 5 0} (@code{delete-frame}) command deletes the selected
|
||||
frame. However, it will refuse to delete the last frame in an Emacs
|
||||
session, to prevent you from losing the ability to interact with the
|
||||
|
@ -900,10 +911,11 @@ those are drawn by the toolkit and not directly by Emacs.
|
|||
@section Scroll Bars
|
||||
@cindex Scroll Bar mode
|
||||
@cindex mode, Scroll Bar
|
||||
@cindex Vertical Scroll Bar
|
||||
|
||||
On graphical displays, there is a @dfn{scroll bar} on the side of
|
||||
each Emacs window. Clicking @kbd{Mouse-1} on the scroll bar's up and
|
||||
down buttons scrolls the window by one line at a time. Clicking
|
||||
On graphical displays, there is a @dfn{vertical scroll bar} on the
|
||||
side of each Emacs window. Clicking @kbd{Mouse-1} on the scroll bar's
|
||||
up and down buttons scrolls the window by one line at a time. Clicking
|
||||
@kbd{Mouse-1} above or below the scroll bar's inner box scrolls the
|
||||
window by nearly the entire height of the window, like @kbd{M-v} and
|
||||
@kbd{C-v} respectively (@pxref{Moving Point}). Dragging the inner box
|
||||
|
@ -917,23 +929,23 @@ in the scroll bar lets you drag the inner box up and down.
|
|||
|
||||
@findex scroll-bar-mode
|
||||
@findex toggle-scroll-bar
|
||||
To toggle the use of scroll bars, type @kbd{M-x scroll-bar-mode}.
|
||||
This command applies to all frames, including frames yet to be
|
||||
created. To toggle scroll bars for just the selected frame, use the
|
||||
command @kbd{M-x toggle-scroll-bar}.
|
||||
To toggle the use of vertical scroll bars, type @kbd{M-x
|
||||
scroll-bar-mode}. This command applies to all frames, including frames
|
||||
yet to be created. To toggle vertical scroll bars for just the selected
|
||||
frame, use the command @kbd{M-x toggle-scroll-bar}.
|
||||
|
||||
@vindex scroll-bar-mode
|
||||
To control the use of scroll bars at startup, customize the variable
|
||||
@code{scroll-bar-mode}. Its value should be either @code{right} (put
|
||||
scroll bars on the right side of windows), @code{left} (put them on
|
||||
the left), or @code{nil} (disable scroll bars). By default, Emacs
|
||||
puts scroll bars on the right if it was compiled with GTK+ support on
|
||||
the X Window System, and on MS-Windows or Mac OS; Emacs puts scroll
|
||||
bars on the left if compiled on the X Window System without GTK+
|
||||
support (following the old convention for X applications).
|
||||
To control the use of vertical scroll bars at startup, customize the
|
||||
variable @code{scroll-bar-mode}. Its value should be either
|
||||
@code{right} (put scroll bars on the right side of windows), @code{left}
|
||||
(put them on the left), or @code{nil} (disable vertical scroll bars).
|
||||
By default, Emacs puts scroll bars on the right if it was compiled with
|
||||
GTK+ support on the X Window System, and on MS-Windows or Mac OS; Emacs
|
||||
puts scroll bars on the left if compiled on the X Window System without
|
||||
GTK+ support (following the old convention for X applications).
|
||||
|
||||
@vindex scroll-bar-width
|
||||
@cindex width of the scroll bar
|
||||
@cindex width of the vertical scroll bar
|
||||
You can also use the X resource @samp{verticalScrollBars} to enable
|
||||
or disable the scroll bars (@pxref{Resources}). To control the scroll
|
||||
bar width, change the @code{scroll-bar-width} frame parameter
|
||||
|
@ -950,6 +962,42 @@ end of the buffer is shown; if @code{nil}, the thumb will be at the
|
|||
bottom when the end of the buffer is shown. You can not over-scroll
|
||||
when the entire buffer is visible.
|
||||
|
||||
@cindex scroll-bar face
|
||||
The visual appearance of the scroll bars is controlled by the
|
||||
@code{scroll-bar} face.
|
||||
|
||||
@cindex Horizontal Scroll Bar
|
||||
@cindex Horizontal Scroll Bar mode
|
||||
On graphical displays with toolkit support, Emacs may also supply a
|
||||
@dfn{horizontal scroll bar} on the bottom of each window. Clicking
|
||||
@kbd{Mouse-1} on the that scroll bar's left and right buttons scrolls
|
||||
the window horizontally by one column at a time. Clicking @kbd{Mouse-1}
|
||||
on the left or right of the scroll bar's inner box scrolls the window by
|
||||
four columns. Dragging the inner box scrolls the window continuously.
|
||||
|
||||
Note that such horizontal scrolling can make the window's position of
|
||||
point disappear on the left or the right. Typing a character to insert
|
||||
text or moving point with a keyboard command will usually bring it back
|
||||
into view.
|
||||
|
||||
@findex horizontal-scroll-bar-mode
|
||||
To toggle the use of horizontal scroll bars, type @kbd{M-x
|
||||
horizontal-scroll-bar-mode}. This command applies to all frames,
|
||||
including frames yet to be created. To toggle horizontal scroll bars
|
||||
for just the selected frame, use the command @kbd{M-x
|
||||
toggle-horizontal-scroll-bar}.
|
||||
|
||||
@vindex horizontal-scroll-bar-mode
|
||||
To control the use of horizontal scroll bars at startup, customize the
|
||||
variable @code{horizontal-scroll-bar-mode}.
|
||||
|
||||
@vindex scroll-bar-height
|
||||
@cindex height of the horizontal scroll bar
|
||||
You can also use the X resource @samp{horizontalScrollBars} to enable
|
||||
or disable horizontal scroll bars (@pxref{Resources}). To control the
|
||||
scroll bar height, change the @code{scroll-bar-height} frame parameter
|
||||
(@pxref{Frame Parameters,,, elisp, The Emacs Lisp Reference Manual}).
|
||||
|
||||
@node Drag and Drop
|
||||
@section Drag and Drop
|
||||
@cindex drag and drop
|
||||
|
|
|
@ -129,7 +129,7 @@ Display news of recent Emacs changes (@code{view-emacs-news}).
|
|||
Find packages by topic keyword (@code{finder-by-keyword}). This lists
|
||||
packages using a package menu buffer. @xref{Packages}.
|
||||
@item C-h P @var{package} @key{RET}
|
||||
Display documentation about the package named @var{package}
|
||||
Display documentation about the specified package
|
||||
(@code{describe-package}).
|
||||
@item C-h r
|
||||
Display the Emacs manual in Info (@code{info-emacs-manual}).
|
||||
|
|
|
@ -588,6 +588,7 @@ you can access it using the following Emacs commands:
|
|||
@table @kbd
|
||||
@findex mouse-set-secondary
|
||||
@kindex M-Drag-Mouse-1
|
||||
@cindex secondary-selection face
|
||||
@item M-Drag-Mouse-1
|
||||
Set the secondary selection, with one end at the place where you press
|
||||
down the button, and the other end at the place where you release it
|
||||
|
@ -754,6 +755,10 @@ Replace rectangle contents with @var{string} on each line
|
|||
(@code{string-rectangle}).
|
||||
@item M-x string-insert-rectangle @key{RET} @var{string} @key{RET}
|
||||
Insert @var{string} on each line of the rectangle.
|
||||
@item C-x @key{SPC}
|
||||
Toggle Rectangle Mark mode (@code{rectangle-mark-mode}).
|
||||
When this mode is active, the region-rectangle is highlighted and can
|
||||
be shrunk/grown, and the standard kill and yank commands operate on it.
|
||||
@end table
|
||||
|
||||
The rectangle operations fall into two classes: commands to erase or
|
||||
|
@ -840,11 +845,13 @@ rectangle shifts right.
|
|||
shifting the original text to the right.
|
||||
|
||||
@findex rectangle-mark-mode
|
||||
@cindex rectangular region
|
||||
The command @kbd{C-x @key{SPC}} (@code{rectangle-mark-mode}) makes a
|
||||
@dfn{rectangular region}. It is a new feature introduced in GNU Emacs
|
||||
24.4, and most commands now are still unaware of it, but kill and yank
|
||||
(@pxref{Killing}) do work on the rectangle.
|
||||
The command @kbd{C-x @key{SPC}} (@code{rectangle-mark-mode}) toggles
|
||||
whether the region-rectangle or the standard region is highlighted
|
||||
(first activating the region if necessary). When this mode is enabled,
|
||||
commands that resize the region (@kbd{C-f}, @kbd{C-n} etc.) do
|
||||
so in a rectangular fashion, and killing and yanking operate on the
|
||||
rectangle. @xref{Killing}. The mode persists only as long as the
|
||||
region is active.
|
||||
|
||||
@node CUA Bindings
|
||||
@section CUA Bindings
|
||||
|
@ -887,7 +894,8 @@ any direction. Normal text you type is inserted to the left or right
|
|||
of each line in the rectangle (on the same side as the cursor).
|
||||
|
||||
You can use this rectangle support without activating CUA by calling the
|
||||
@code{cua-rectangle-mark-mode} command.
|
||||
@code{cua-rectangle-mark-mode} command. But see also the standard
|
||||
@code{rectangle-mark-mode}. @xref{Rectangles}.
|
||||
|
||||
With CUA you can easily copy text and rectangles into and out of
|
||||
registers by providing a one-digit numeric prefix to the kill, copy,
|
||||
|
|
|
@ -12,7 +12,7 @@ the GNUstep libraries on GNU/Linux or other operating systems, or on
|
|||
Mac OS X with native window system support. On Mac OS X, Emacs can be
|
||||
built either without window system support, with X11, or with the
|
||||
Cocoa interface; this section only applies to the Cocoa build. This
|
||||
does not support versions of Mac OS X earlier than 10.4.
|
||||
does not support versions of Mac OS X earlier than 10.6.
|
||||
|
||||
For various historical and technical reasons, Emacs uses the term
|
||||
@samp{Nextstep} internally, instead of ``Cocoa'' or ``Mac OS X''; for
|
||||
|
@ -84,7 +84,7 @@ set, which often causes the subprocesses it launches to behave differently than
|
|||
they would when launched from the shell.
|
||||
|
||||
For the PATH and MANPATH variables, a system-wide method
|
||||
of setting PATH is recommended on Mac OS X 10.5 and later, using the
|
||||
of setting PATH is recommended on Mac OS X, using the
|
||||
@file{/etc/paths} files and the @file{/etc/paths.d} directory.
|
||||
|
||||
@node Mac / GNUstep Customization
|
||||
|
@ -118,7 +118,7 @@ Useful in this context is the listing of all faces obtained by
|
|||
@kbd{M-x list-faces-display}.
|
||||
|
||||
@cindex Core Text, on Mac OS X
|
||||
In Mac OS X 10.5 and later, Emacs uses a Core Text based font backend
|
||||
In Mac OS X, Emacs uses a Core Text based font backend
|
||||
by default. If you prefer the older font style, enter the following
|
||||
at the command-line before starting Emacs:
|
||||
|
||||
|
|
|
@ -31,11 +31,11 @@ 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.
|
||||
|
||||
The Emacs version control interface is called @dfn{VC}@. VC commands
|
||||
work with several different version control systems; currently, it
|
||||
supports GNU Arch, Bazaar, CVS, Git, Mercurial, Monotone, RCS,
|
||||
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,
|
||||
SCCS/CSSC, and Subversion. Of these, the GNU project distributes CVS,
|
||||
Arch, RCS, and Bazaar.
|
||||
RCS, and Bazaar.
|
||||
|
||||
VC is enabled automatically whenever you visit a file governed by a
|
||||
version control system. To disable VC entirely, set the customizable
|
||||
|
@ -163,14 +163,6 @@ similar to CVS but without its problems (e.g., it supports atomic
|
|||
commits of filesets, and versioning of directories, symbolic links,
|
||||
meta-data, renames, copies, and deletes).
|
||||
|
||||
@cindex GNU Arch
|
||||
@cindex Arch
|
||||
@item
|
||||
GNU Arch is one of the earliest @dfn{decentralized} version control
|
||||
systems (the other being Monotone). @xref{VCS Concepts}, for a
|
||||
description of decentralized version control systems. It is no longer
|
||||
under active development, and has been deprecated in favor of Bazaar.
|
||||
|
||||
@cindex git
|
||||
@item
|
||||
Git is a decentralized version control system originally invented by
|
||||
|
@ -191,6 +183,18 @@ exception of repository sync operations.
|
|||
Bazaar (bzr) is a decentralized version control system that supports
|
||||
both repository-based and decentralized versioning. VC supports most
|
||||
basic editing operations under Bazaar.
|
||||
|
||||
@cindex SRC
|
||||
@cindex src
|
||||
@item
|
||||
SRC (src) is RCS, reloaded - a specialized version-control system
|
||||
designed for single-file projects worked on by only one person. It
|
||||
allows multiple files with independent version-control histories to
|
||||
exist in one directory, and is thus particularly well suited for
|
||||
maintaining small documents, scripts, and dotfiles. While it uses RCS
|
||||
for revision storage, it presents a modern user interface featuring
|
||||
lockless operation and integer sequential version numbers. VC
|
||||
supports almost all SRC operations.
|
||||
@end itemize
|
||||
|
||||
@node VCS Concepts
|
||||
|
@ -268,8 +272,8 @@ number and severity of conflicts that actually occur.
|
|||
SCCS always uses locking. RCS is lock-based by default but can be
|
||||
told to operate in a merging style. CVS and Subversion are
|
||||
merge-based by default but can be told to operate in a locking mode.
|
||||
Decentralized version control systems, such as GNU Arch, Git, and
|
||||
Mercurial, are exclusively merging-based.
|
||||
Decentralized version control systems, such as Git and Mercurial, are
|
||||
exclusively merging-based.
|
||||
|
||||
VC mode supports both locking and merging version control. The
|
||||
terms ``commit'' and ``update'' are used in newer version control
|
||||
|
@ -1014,8 +1018,6 @@ Revert the work file(s) in the current VC fileset to the last revision
|
|||
(@code{vc-revert}).
|
||||
@end table
|
||||
|
||||
@c `C-x v c' (vc-rollback) was removed, since it's RCS/SCCS specific.
|
||||
|
||||
@kindex C-x v u
|
||||
@findex vc-revert
|
||||
@vindex vc-revert-show-diff
|
||||
|
@ -1317,11 +1319,18 @@ implemented, and these differences cannot be entirely concealed by VC.
|
|||
On some decentralized version control systems, including Bazaar and
|
||||
Mercurial in its normal mode of operation, each branch has its own
|
||||
working directory tree, so switching between branches just involves
|
||||
switching directories. On Git, switching between branches is done
|
||||
using the @command{git branch} command, which changes the contents of
|
||||
the working tree itself.
|
||||
switching directories. On Git, branches are normally @dfn{co-located}
|
||||
in the same directory, and switching between branches is done using
|
||||
the @command{git checkout} command, which changes the contents of the
|
||||
working tree to match the branch you switch to. Bazaar also supports
|
||||
co-located branches, in which case the @command{bzr switch} command
|
||||
will switch branches in the current directory. With Subversion, you
|
||||
switch to another branch using the @command{svn switch} command.
|
||||
|
||||
On centralized version control systems, you can switch between
|
||||
The VC command to switch to another branch in the current directory
|
||||
is @kbd{C-x v r @var{branch-name} @key{RET}} (@code{vc-retrieve-tag}).
|
||||
|
||||
On centralized version control systems, you can also switch between
|
||||
branches by typing @kbd{C-u C-x v v} in an up-to-date work file
|
||||
(@pxref{Advanced C-x v v}), and entering the revision ID for a
|
||||
revision on another branch. On CVS, for instance, revisions on the
|
||||
|
@ -1467,9 +1476,11 @@ different revision with @kbd{C-u C-x v v}.
|
|||
@cindex change log
|
||||
Many software projects keep a @dfn{change log}. This is a file,
|
||||
normally named @file{ChangeLog}, containing a chronological record of
|
||||
when and how the program was changed. Sometimes, there are several
|
||||
change log files, each recording the changes in one directory or
|
||||
directory tree.
|
||||
when and how the program was changed. Sometimes, these files are
|
||||
automatically generated from the change log entries stored in version
|
||||
control systems, or are used to generate these change log entries.
|
||||
Sometimes, there are several change log files, each recording the
|
||||
changes in one directory or directory tree.
|
||||
|
||||
@menu
|
||||
* Change Log Commands:: Commands for editing change log files.
|
||||
|
|
|
@ -54,7 +54,7 @@ EMACS_XTRA=\
|
|||
$(srcdir)/vc-xtra.texi \
|
||||
$(srcdir)/vc1-xtra.texi \
|
||||
$(srcdir)/fortran-xtra.texi \
|
||||
$(srcdir)/msdog-xtra.texi
|
||||
$(srcdir)/msdos-xtra.texi
|
||||
|
||||
EMACSSOURCES= \
|
||||
$(srcdir)/emacs.texi \
|
||||
|
@ -97,7 +97,7 @@ EMACSSOURCES= \
|
|||
$(srcdir)/xresources.texi \
|
||||
$(srcdir)/anti.texi \
|
||||
$(srcdir)/macos.texi \
|
||||
$(srcdir)/msdog.texi \
|
||||
$(srcdir)/msdos.texi \
|
||||
$(srcdir)/gnu.texi \
|
||||
$(srcdir)/glossary.texi \
|
||||
$(srcdir)/ack.texi \
|
||||
|
|
|
@ -249,6 +249,126 @@ Search forward for articles containing a match for @var{regexp}.
|
|||
Exit the summary buffer and return to the group buffer.
|
||||
@end table
|
||||
|
||||
|
||||
@node Network Security
|
||||
@section Network Security
|
||||
@cindex network security manager
|
||||
@cindex NSM
|
||||
@cindex encryption
|
||||
@cindex SSL
|
||||
@cindex TLS
|
||||
@cindex STARTTLS
|
||||
|
||||
Whenever Emacs establishes any network connection, it passes the
|
||||
established connection to the @dfn{Network Security Manager}
|
||||
(@acronym{NSM}). @acronym{NSM} is responsible for enforcing the
|
||||
network security under your control.
|
||||
|
||||
@vindex network-security-level
|
||||
The @code{network-security-level} variable determines the security
|
||||
level that @acronym{NSM} enforces. If its value is @code{low}, no
|
||||
security checks are performed.
|
||||
|
||||
If this variable is @code{medium} (which is the default), a number of
|
||||
checks will be performed. If as result @acronym{NSM} determines that
|
||||
the network connection might not be trustworthy, it will make you
|
||||
aware of that, and will ask you what to do about the network
|
||||
connection.
|
||||
|
||||
You can decide to register a permanent security exception for an
|
||||
unverified connection, a temporary exception, or refuse the connection
|
||||
entirely.
|
||||
|
||||
Below is a list of the checks done on the @code{medium} level.
|
||||
|
||||
@table @asis
|
||||
|
||||
@item unable to verify a @acronym{TLS} certificate
|
||||
If the connection is a @acronym{TLS}, @acronym{SSL} or
|
||||
@acronym{STARTTLS} connection, @acronym{NSM} will check whether
|
||||
the certificate used to establish the identity of the server we're
|
||||
connecting to can be verified.
|
||||
|
||||
While an invalid certificate is often the cause for concern (there
|
||||
could be a Man-in-the-Middle hijacking your network connection and
|
||||
stealing your password), there may be valid reasons for going ahead
|
||||
with the connection anyway. For instance, the server may be using a
|
||||
self-signed certificate, or the certificate may have expired. It's up
|
||||
to you to determine whether it's acceptable to continue with the
|
||||
connection.
|
||||
|
||||
@item a self-signed certificate has changed
|
||||
If you've previously accepted a self-signed certificate, but it has
|
||||
now changed, that could mean that the server has just changed the
|
||||
certificate, but it might also mean that the network connection has
|
||||
been hijacked.
|
||||
|
||||
@item previously encrypted connection now unencrypted
|
||||
If the connection is unencrypted, but it was encrypted in previous
|
||||
sessions, this might mean that there is a proxy between you and the
|
||||
server that strips away @acronym{STARTTLS} announcements, leaving the
|
||||
connection unencrypted. This is usually very suspicious.
|
||||
|
||||
@item talking to an unencrypted service when sending a password
|
||||
When connecting to an @acronym{IMAP} or @acronym{POP3} server, these
|
||||
should usually be encrypted, because it's common to send passwords
|
||||
over these connections. Similarly, if you're sending email via
|
||||
@acronym{SMTP} that requires a password, you usually want that
|
||||
connection to be encrypted. If the connection isn't encrypted,
|
||||
@acronym{NSM} will warn you.
|
||||
|
||||
@end table
|
||||
|
||||
If @code{network-security-level} is @code{high}, the following checks
|
||||
will be made, in addition to the above:
|
||||
|
||||
@table @asis
|
||||
@item a validated certificate changes the public key
|
||||
Servers change their keys occasionally, and that is normally nothing
|
||||
to be concerned about. However, if you are worried that your network
|
||||
connections are being hijacked by agencies who have access to pliable
|
||||
Certificate Authorities which issue new certificates for third-party
|
||||
services, you may want to keep track of these changes.
|
||||
|
||||
@item Diffie-Hellman low prime bits
|
||||
When doing the public key exchange, the number of ``prime bits''
|
||||
should be high to ensure that the channel can't be eavesdropped on by
|
||||
third parties. If this number is too low, you will be warned.
|
||||
|
||||
@item @acronym{RC4} stream cipher
|
||||
The @acronym{RC4} stream cipher is believed to be of low quality and
|
||||
may allow eavesdropping by third parties.
|
||||
|
||||
@item @acronym{SSL1}, @acronym{SSL2} and @acronym{SSL3}
|
||||
The protocols older than @acronym{TLS1.0} are believed to be
|
||||
vulnerable to a variety of attacks, and you may want to avoid using
|
||||
these if what you're doing requires higher security.
|
||||
@end table
|
||||
|
||||
Finally, if @code{network-security-level} is @code{paranoid}, you will
|
||||
also be notified the first time @acronym{NSM} sees any new
|
||||
certificate. This will allow you to inspect all the certificates from
|
||||
all the connections that Emacs makes.
|
||||
|
||||
The following additional variables can be used to control details of
|
||||
@acronym{NSM} operation:
|
||||
|
||||
@table @code
|
||||
@item nsm-settings-file
|
||||
@vindex nsm-settings-file
|
||||
This is the file where @acronym{NSM} stores details about connections.
|
||||
It defaults to @file{~/.emacs.d/network-security.data}.
|
||||
|
||||
@item nsm-save-host-names
|
||||
@vindex nsm-save-host-names
|
||||
By default, host names will not be saved for non-@code{STARTTLS}
|
||||
connections. Instead a host/port hash is used to identify connections.
|
||||
This means that one can't casually read the settings file to see what
|
||||
servers the user has connected to. If this variable is @code{t},
|
||||
@acronym{NSM} will also save host names in the nsm-settings-file.
|
||||
@end table
|
||||
|
||||
|
||||
@node Document View
|
||||
@section Document Viewing
|
||||
@cindex DVI file
|
||||
|
@ -266,9 +386,10 @@ Exit the summary buffer and return to the group buffer.
|
|||
OpenDocument, and Microsoft Office documents. It provides features
|
||||
such as slicing, zooming, and searching inside documents. It works by
|
||||
converting the document to a set of images using the @command{gs}
|
||||
(GhostScript) command and other external tools @footnote{@code{gs} is
|
||||
a hard requirement. For DVI files, @code{dvipdf} or @code{dvipdfm} is
|
||||
needed. For OpenDocument and Microsoft Office documents, the
|
||||
(GhostScript) or @command{mudraw}/@command{pdfdraw} (MuPDF) commands
|
||||
and other external tools @footnote{For PostScript files, GhostScript
|
||||
is a hard requirement. For DVI files, @code{dvipdf} or @code{dvipdfm}
|
||||
is needed. For OpenDocument and Microsoft Office documents, the
|
||||
@code{unoconv} tool is needed.}, and displaying those images.
|
||||
|
||||
@findex doc-view-toggle-display
|
||||
|
@ -287,6 +408,17 @@ mode or DocView minor mode, repeating @kbd{C-c C-c}
|
|||
(@code{doc-view-toggle-display}) toggles between DocView and the
|
||||
underlying file contents.
|
||||
|
||||
@findex doc-view-open-text
|
||||
When you visit a file which would normally be handled by DocView
|
||||
mode but some requirement is not met (e.g., you operate in a terminal
|
||||
frame or emacs has no PNG support), you are queried if you want to
|
||||
view the document's contents as plain text. If you confirm, the
|
||||
buffer is put in text mode and DocView minor mode is activated. Thus,
|
||||
by typing @kbd{C-c C-c} you switch to the fallback mode. With another
|
||||
@kbd{C-c C-c} you return to DocView mode. The plain text contents can
|
||||
also be displayed from within DocView mode by typing @kbd{C-c C-t}
|
||||
(@code{doc-view-open-text}).
|
||||
|
||||
You can explicitly enable DocView mode with the command @code{M-x
|
||||
doc-view-mode}. You can toggle DocView minor mode with @code{M-x
|
||||
doc-view-minor-mode}.
|
||||
|
@ -407,12 +539,14 @@ and the slice's width and height.
|
|||
|
||||
A more convenient graphical way to specify the slice is with @kbd{s
|
||||
m} (@code{doc-view-set-slice-using-mouse}), where you use the mouse to
|
||||
select the slice.
|
||||
@c ??? How does this work?
|
||||
select the slice. Simply press and hold the left mouse button at the
|
||||
upper-left corner of the region you want to have in the slice, then
|
||||
move the mouse pointer to the lower-right corner and release the
|
||||
button.
|
||||
|
||||
The most convenient way is to set the optimal slice by using
|
||||
BoundingBox information automatically determined from the document by
|
||||
typing @kbd{s b} (@code{doc-view-set-slice-using-mouse}).
|
||||
typing @kbd{s b} (@code{doc-view-set-slice-from-bounding-box}).
|
||||
|
||||
@findex doc-view-reset-slice
|
||||
To cancel the selected slice, type @kbd{s r}
|
||||
|
@ -1610,9 +1744,9 @@ all server buffers are finished. You can take as long as you like to
|
|||
edit the server buffers within Emacs, and they are @emph{not} killed
|
||||
when you type @kbd{C-x #} in them.
|
||||
|
||||
@item --parent-id @var{ID}
|
||||
@item --parent-id @var{id}
|
||||
Open an @command{emacsclient} frame as a client frame in the parent X
|
||||
window with id @var{ID}, via the XEmbed protocol. Currently, this
|
||||
window with id @var{id}, via the XEmbed protocol. Currently, this
|
||||
option is mainly useful for developers.
|
||||
|
||||
@item -q
|
||||
|
@ -1935,9 +2069,9 @@ They divide the text of the region into many @dfn{sort records},
|
|||
identify a @dfn{sort key} for each record, and then reorder the records
|
||||
into the order determined by the sort keys. The records are ordered so
|
||||
that their keys are in alphabetical order, or, for numeric sorting, in
|
||||
numeric order. In alphabetic sorting, all upper-case letters `A' through
|
||||
`Z' come before lower-case `a', in accord with the @acronym{ASCII} character
|
||||
sequence.
|
||||
numeric order. In alphabetic sorting, all upper-case letters @samp{A}
|
||||
through @samp{Z} come before lower-case @samp{a}, in accordance with the
|
||||
@acronym{ASCII} character sequence.
|
||||
|
||||
The various sort commands differ in how they divide the text into sort
|
||||
records and in which part of each record is used as the sort key. Most of
|
||||
|
|
|
@ -6,19 +6,18 @@
|
|||
@c printed version) or in the main Emacs manual (for the on-line version).
|
||||
@node MS-DOS
|
||||
@section Emacs and MS-DOS
|
||||
@cindex MS-DOG
|
||||
@cindex MS-DOS peculiarities
|
||||
|
||||
This section briefly describes the peculiarities of using Emacs on
|
||||
the MS-DOS ``operating system'' (also known as ``MS-DOG'').
|
||||
the MS-DOS ``operating system''.
|
||||
@iftex
|
||||
Information about Emacs and Microsoft's current operating system
|
||||
Windows (also known as ``Losedows'') is in the main Emacs manual
|
||||
Windows is in the main Emacs manual
|
||||
(@pxref{Microsoft Windows,,, emacs, the Emacs Manual}).
|
||||
@end iftex
|
||||
@ifnottex
|
||||
Information about peculiarities common to MS-DOS and Microsoft's
|
||||
current operating systems Windows (also known as ``Losedows'') is in
|
||||
current operating systems Windows is in
|
||||
@ref{Microsoft Windows}.
|
||||
@end ifnottex
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
This section describes peculiarities of using Emacs on Microsoft
|
||||
Windows. Some of these peculiarities are also relevant to Microsoft's
|
||||
older MS-DOS ``operating system'' (also known as ``MS-DOG'').
|
||||
older MS-DOS operating system.
|
||||
However, Emacs features that are relevant @emph{only} to MS-DOS are
|
||||
described in a separate
|
||||
@iftex
|
||||
|
@ -986,5 +986,5 @@ click-to-focus policy.
|
|||
@end ifnottex
|
||||
|
||||
@ifnottex
|
||||
@include msdog-xtra.texi
|
||||
@include msdos-xtra.texi
|
||||
@end ifnottex
|
|
@ -60,7 +60,7 @@ The package's version number (e.g., @samp{11.86}).
|
|||
@item
|
||||
The package's status---normally one of @samp{available} (can be
|
||||
downloaded from the package archive), @samp{installed},
|
||||
@samp{unsigned} (installed, but not signed; @pxref{Package Signing}),
|
||||
@c @samp{unsigned} (installed, but not signed; @pxref{Package Signing}),
|
||||
or @samp{built-in} (included in Emacs by default).
|
||||
|
||||
The status can also be @samp{new}. This is equivalent to
|
||||
|
@ -184,11 +184,8 @@ key from a server such as @url{http://pgp.mit.edu/}.
|
|||
Use @kbd{M-x package-import-keyring} to import the key into Emacs.
|
||||
Emacs stores package keys in the @file{gnupg} subdirectory
|
||||
of @code{package-user-dir}.
|
||||
@c Uncomment this if it becomes true.
|
||||
@ignore
|
||||
The public key for the GNU package archive is distributed with Emacs,
|
||||
in the @file{etc/package-keyring.gpg}. Emacs uses it automatically.
|
||||
@end ignore
|
||||
|
||||
@vindex package-check-signature
|
||||
@vindex package-unsigned-archives
|
||||
|
|
|
@ -88,8 +88,8 @@ Fortran, Icon, IDL (CORBA), IDLWAVE, Java, Javascript, Metafont
|
|||
Octave, Pascal, Perl, Pike, PostScript, Prolog, Python, Ruby, Simula, Tcl,
|
||||
and VHDL@. An alternative mode for Perl is called CPerl mode. Modes are
|
||||
also available for the scripting languages of the common GNU and Unix
|
||||
shells, VMS DCL, and MS-DOS/MS-Windows @samp{BAT} files, and for
|
||||
makefiles, DNS master files, and various sorts of configuration files.
|
||||
shells, and MS-DOS/MS-Windows @samp{BAT} files, and for makefiles,
|
||||
DNS master files, and various sorts of configuration files.
|
||||
|
||||
Ideally, Emacs should have a major mode for each programming
|
||||
language that you might want to edit. If it doesn't have a mode for
|
||||
|
@ -1453,7 +1453,7 @@ creates.
|
|||
@findex superword-mode
|
||||
Superword mode is a buffer-local minor mode that causes editing and
|
||||
motion commands to treat symbols (e.g., @samp{this_is_a_symbol}) as words.
|
||||
When Subword mode is enabled, the minor mode indicator
|
||||
When Superword mode is enabled, the minor mode indicator
|
||||
@iftex
|
||||
@samp{@math{^2}}
|
||||
@end iftex
|
||||
|
|
|
@ -149,9 +149,9 @@ during the collection process, you can use the following setting.
|
|||
@kindex C-x r i
|
||||
@findex insert-register
|
||||
@kbd{C-x r i @var{r}} inserts in the buffer the text from register
|
||||
@var{r}. Normally it leaves point before the text and sets the mark
|
||||
after, without activating it. With a numeric argument, it instead
|
||||
puts point after the text and the mark before.
|
||||
@var{r}. Normally it leaves point after the text and sets the mark
|
||||
before, without activating it. With a numeric argument, it instead
|
||||
puts before after the text and the mark after.
|
||||
|
||||
@node Rectangle Registers
|
||||
@section Saving Rectangles in Registers
|
||||
|
|
|
@ -86,6 +86,7 @@ not be the first @samp{F} previously found. After another @kbd{O},
|
|||
the cursor moves to just after the first @samp{FOO}.
|
||||
|
||||
@cindex faces for highlighting search matches
|
||||
@cindex isearch face
|
||||
At each step, Emacs highlights the @dfn{current match}---the buffer
|
||||
text that matches the search string---using the @code{isearch} face
|
||||
(@pxref{Faces}). The current search string is also displayed in the
|
||||
|
@ -1280,6 +1281,8 @@ It works like @code{replace-regexp} except that it queries
|
|||
like @code{query-replace}.
|
||||
|
||||
@cindex faces for highlighting query replace
|
||||
@cindex query-replace face
|
||||
@cindex lazy-highlight face
|
||||
These commands highlight the current match using the face
|
||||
@code{query-replace}. They highlight other matches using
|
||||
@code{lazy-highlight} just like incremental search (@pxref{Incremental
|
||||
|
@ -1337,7 +1340,7 @@ to replace all remaining occurrences without asking again.
|
|||
|
||||
@item Y @r{(Upper-case)}
|
||||
to replace all remaining occurrences in all remaining buffers in
|
||||
multi-buffer replacements (like the Dired `Q' command which performs
|
||||
multi-buffer replacements (like the Dired @key{Q} command that performs
|
||||
query replace on selected files). It answers this question and all
|
||||
subsequent questions in the series with "yes", without further
|
||||
user interaction.
|
||||
|
@ -1433,6 +1436,22 @@ matching that regexp.
|
|||
This command is just like @code{multi-isearch-buffers}, except it
|
||||
performs an incremental regexp search.
|
||||
|
||||
@item M-x multi-isearch-files
|
||||
Prompt for one or more file names, ending with @key{RET}; then,
|
||||
begin a multi-file incremental search in those files. (If the
|
||||
search fails in one file, the next @kbd{C-s} tries searching the
|
||||
next specified file, and so forth.) With a prefix argument, prompt
|
||||
for a regexp and begin a multi-file incremental search in files
|
||||
matching that regexp.
|
||||
|
||||
@item M-x multi-isearch-files-regexp
|
||||
This command is just like @code{multi-isearch-files}, except it
|
||||
performs an incremental regexp search.
|
||||
|
||||
In some modes that set the buffer-local variable
|
||||
@code{multi-isearch-next-buffer-function} (e.g., in Change Log mode)
|
||||
a multi-file incremental search is activated automatically.
|
||||
|
||||
@cindex Occur mode
|
||||
@cindex mode, Occur
|
||||
@item M-x occur
|
||||
|
|
|
@ -1137,9 +1137,9 @@ new function, all you need to say about it is that it is new. If you
|
|||
feel that the purpose needs explaining, it probably does---but put the
|
||||
explanation in comments in the code. It will be more useful there.
|
||||
|
||||
Please read the @file{ChangeLog} files in the @file{src} and
|
||||
@file{lisp} directories to see what sorts of information to put in,
|
||||
and to learn the style that we use. @xref{Change Log}.
|
||||
Please look at the change log entries of recent commits to see what
|
||||
sorts of information to put in, and to learn the style that we use.
|
||||
@xref{Change Log}.
|
||||
|
||||
@item
|
||||
When you write the fix, keep in mind that we can't install a change that
|
||||
|
|
|
@ -113,7 +113,7 @@ Prompt for a file name, delete the file from the working tree, and
|
|||
schedule the deletion for committing.
|
||||
|
||||
@item M-x vc-rename-file
|
||||
Prompt for two file names, @var{VAR} and @var{OLD}, rename them in the
|
||||
Prompt for two file names, @var{var} and @var{old}, rename them in the
|
||||
working tree, and schedule the renaming for committing.
|
||||
@end table
|
||||
|
||||
|
|
|
@ -134,6 +134,18 @@ clicking @kbd{C-Mouse-2} in the scroll bar, which puts a horizontal
|
|||
divider where you click (this feature does not work when Emacs uses
|
||||
GTK+ scroll bars).
|
||||
|
||||
@vindex window-resize-pixelwise
|
||||
By default, when you split a window, Emacs gives each of the
|
||||
resulting windows dimensions that are an integral multiple of the
|
||||
default font size of the frame. That might subdivide the screen
|
||||
estate unevenly between the resulting windows. If you set the
|
||||
variable @code{window-resize-pixelwise} to a non-@code{nil} value,
|
||||
Emacs will give each window the same number of pixels (give or take
|
||||
one pixel if the initial dimension was an odd number of pixels). Note
|
||||
that when a frame's pixel size is not a multiple of the frame's
|
||||
character size, at least one window may get resized pixelwise even if
|
||||
this option is @code{nil}.
|
||||
|
||||
@node Other Window
|
||||
@section Using Other Windows
|
||||
|
||||
|
|
21
doc/lispintro/.gitignore
vendored
21
doc/lispintro/.gitignore
vendored
|
@ -1,21 +0,0 @@
|
|||
*.aux
|
||||
*.fn
|
||||
*.fns
|
||||
*.cps
|
||||
*.cp
|
||||
*.kys
|
||||
*.ky
|
||||
*.toc
|
||||
*.pgs
|
||||
*.pg
|
||||
*.log
|
||||
*.vrs
|
||||
*.vr
|
||||
*.dvi
|
||||
*.ps
|
||||
*.tp
|
||||
*.tps
|
||||
*.tmp
|
||||
*.txt
|
||||
Makefile
|
||||
makefile
|
|
@ -1,3 +1,17 @@
|
|||
2014-11-09 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (version): Remove variable.
|
||||
(clean): No longer delete dist tarfile.
|
||||
(dist): Remove rule; replace with code in admin.el.
|
||||
|
||||
2014-10-20 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Merge in all changes up to 24.4 release.
|
||||
|
||||
2014-10-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (dist): Update for new output variables.
|
||||
|
||||
2014-07-16 Álvar Jesús Ibeas Martín <alvar.ibeas@unican.es> (tiny change)
|
||||
|
||||
* emacs-lisp-intro.texi (Variables, Buffer Names, if & or)
|
||||
|
@ -567,8 +581,8 @@
|
|||
2006-11-05 Robert J. Chassell <bob@rattlesnake.com>
|
||||
|
||||
* emacs-lisp-intro.texi: Yet more minor changes:
|
||||
(defcustom): Said that `:options' is usually for a hook. Remove
|
||||
extraneous space in parenthetical remark concerning
|
||||
(defcustom): Said that `:options' is usually for a hook.
|
||||
Remove extraneous space in parenthetical remark concerning
|
||||
`text-mode-hook-identify'. At end, mention other defines, too.
|
||||
(Beginning a .emacs File): Reverse words about comments so they
|
||||
parallel numbers of listed semi-colons.
|
||||
|
@ -590,12 +604,12 @@
|
|||
Center images for TeX output.
|
||||
(kill-new function): Remove indentation for sentence talking about
|
||||
momentarily skipping code.
|
||||
(cons & search-fwd Review): Document @code{funcall}. Document
|
||||
@code{re-search-forward} with existing @code{search-forward}.
|
||||
(cons & search-fwd Review): Document @code{funcall}.
|
||||
Document @code{re-search-forward} with existing @code{search-forward}.
|
||||
Reference chapter on regular expression searches.
|
||||
(Recursion with list): Specify a more recent version as being Emacs.
|
||||
(Recursion with list, Every, recursive-graph-body-print): Change
|
||||
`if ... progn' expression to `when'.
|
||||
(Recursion with list, Every, recursive-graph-body-print):
|
||||
Change `if ... progn' expression to `when'.
|
||||
(Recursive triangle function): For printing in small book, ensure
|
||||
section name is not last on bottom of preceding page.
|
||||
(Keep): Remove extraneous space in function definition example.
|
||||
|
@ -604,11 +618,11 @@
|
|||
function.
|
||||
(fwd-sentence while loops): Write a function as one, not as a form.
|
||||
(fwd-para let): Add `which' to sentence with `parstart' and `parsep'.
|
||||
(etags): Move sentences involving `find-tag' and sources. State
|
||||
location of Emacs `src' directory.
|
||||
(etags): Move sentences involving `find-tag' and sources.
|
||||
State location of Emacs `src' directory.
|
||||
(Design count-words-region): Better explain two backslashes in a row.
|
||||
(Find a File): Fix grammar; add a `to' and write `to visit'. Change
|
||||
`named' to `selected'.
|
||||
(Find a File): Fix grammar; add a `to' and write `to visit'.
|
||||
Change `named' to `selected'.
|
||||
(lengths-list-file): Remove extraneous parenthesis from reference.
|
||||
(lengths-list-many-files): Explain `expand-file-name' better.
|
||||
(Files List): Rephrase sentence regarding Lisp sources directory.
|
||||
|
@ -636,8 +650,8 @@
|
|||
seen' the @code{eq} function.
|
||||
(kill-append function): Reformat `kill-append' function definition so
|
||||
it prints well.
|
||||
(kill-new function): Indent the sentence beginning `notice'. Replace
|
||||
`the same as' with `similar to'. Repair typo. Remove obsolete
|
||||
(kill-new function): Indent the sentence beginning `notice'.
|
||||
Replace `the same as' with `similar to'. Repair typo. Remove obsolete
|
||||
references to `yank' and `yank-pop. End section with a note that `we
|
||||
will digress into C.'
|
||||
|
||||
|
@ -661,8 +675,8 @@
|
|||
is 3.00. Did not update ISBN number.
|
||||
|
||||
* emacs-lisp-intro.texi: Remove version reference for X colors.
|
||||
Document `='. Remove mention that :eval was new in 21. Updated
|
||||
instance's edition-number to 3.01.
|
||||
Document `='. Remove mention that :eval was new in 21.
|
||||
Updated instance's edition-number to 3.01.
|
||||
|
||||
2006-10-30 Robert J. Chassell <bob@rattlesnake.com>
|
||||
|
||||
|
|
|
@ -19,10 +19,7 @@
|
|||
|
||||
SHELL = @SHELL@
|
||||
|
||||
# NB If you add any more configure variables,
|
||||
# update the sed rules in the dist target below.
|
||||
srcdir = @srcdir@
|
||||
version=@version@
|
||||
|
||||
buildinfodir = $(srcdir)/../../info
|
||||
# Directory with the (customized) texinfo.tex file.
|
||||
|
@ -108,7 +105,6 @@ mostlyclean:
|
|||
|
||||
clean: mostlyclean
|
||||
rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS)
|
||||
rm -f emacs-lispintro-${version}.tar*
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile
|
||||
|
@ -120,28 +116,6 @@ infoclean:
|
|||
|
||||
bootstrap-clean maintainer-clean: distclean infoclean
|
||||
|
||||
.PHONY: dist
|
||||
|
||||
dist:
|
||||
rm -rf emacs-lispintro-${version}
|
||||
mkdir emacs-lispintro-${version}
|
||||
cp ${srcdir}/*.texi ${srcdir}/*.eps ${srcdir}/*.pdf \
|
||||
${texinfodir}/texinfo.tex ${emacsdir}/emacsver.texi \
|
||||
${srcdir}/ChangeLog* ${srcdir}/README emacs-lispintro-${version}/
|
||||
sed -e 's/@sr[c]dir@/./' -e 's/^\(texinfodir *=\).*/\1 ./' \
|
||||
-e 's/^\(emacsdir *=\).*/\1 ./' \
|
||||
-e 's/^\(buildinfodir *=\).*/\1 ./' \
|
||||
-e 's/^\(clean:.*\)/\1 infoclean/' \
|
||||
-e "s/@ver[s]ion@/${version}/" \
|
||||
-e 's/@MAKE[I]NFO@/makeinfo/' -e 's/@MK[D]IR_P@/mkdir -p/' \
|
||||
${srcdir}/Makefile.in > emacs-lispintro-${version}/Makefile
|
||||
@if grep '@[a-zA-Z_]*@' emacs-lispintro-${version}/Makefile; then \
|
||||
echo "Unexpanded configure variables in Makefile?" 1>&2; exit 1; \
|
||||
fi
|
||||
tar -cf emacs-lispintro-${version}.tar emacs-lispintro-${version}
|
||||
rm -rf emacs-lispintro-${version}
|
||||
|
||||
|
||||
.PHONY: install-dvi install-html install-pdf install-ps install-doc
|
||||
|
||||
install-dvi: dvi
|
||||
|
|
13
doc/lispref/.gitignore
vendored
13
doc/lispref/.gitignore
vendored
|
@ -1,13 +0,0 @@
|
|||
texput.log
|
||||
elisp.??
|
||||
elisp.???
|
||||
config.log
|
||||
config.cache
|
||||
config.status
|
||||
Makefile
|
||||
makefile
|
||||
elisp
|
||||
elisp-?
|
||||
elisp-??
|
||||
elisp1*
|
||||
elisp2*
|
|
@ -1,3 +1,276 @@
|
|||
2014-12-22 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Remove obsolete references to pre-C99 builds
|
||||
* internals.texi (C Integer Types): Don't mention pre-C99 compilers.
|
||||
|
||||
2014-12-19 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* windows.texi (Resizing Windows): Describe new argument of
|
||||
`fit-window-to-buffer'. Move description of `window-size-fixed'
|
||||
to new section below.
|
||||
(Preserving Window Sizes): New section describing
|
||||
`window-size-fixed' and `window-preserve-size'.
|
||||
(Display Action Functions): Describe `preserve-size' alist
|
||||
entry.
|
||||
(Window Parameters): Describe `preserved-size' parameter.
|
||||
|
||||
2014-12-18 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* display.texi (Low-Level Font): Document font-info and query-font.
|
||||
|
||||
2014-12-16 Nicolas Petton <petton.nicolas@gmail.com>
|
||||
|
||||
* sequences.texi (Seq Library): Add documentation for seq.el.
|
||||
|
||||
2014-12-15 Alan Mackenzie <acm@muc.de>
|
||||
|
||||
"Advice" is a mass noun. Amend text accordingly.
|
||||
* functions.texi: (Advising Functions, Core Advising Primitives)
|
||||
(Advising Named Functions, Advice combinators)
|
||||
(Porting old advice): Replace, e.g., "an advice" with "advice".
|
||||
|
||||
2014-12-13 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* files.texi (Relative File Names): Mention `directory-name-p'.
|
||||
|
||||
2014-12-13 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* text.texi (Comparing Text): Prevent a text string from being
|
||||
broken between 2 lines. (Bug#19257)
|
||||
|
||||
2014-12-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* files.texi (Contents of Directories):
|
||||
Document directory-files-recursively.
|
||||
|
||||
2014-12-04 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* display.texi (Bidirectional Display):
|
||||
Document 'buffer-substring-with-bidi-context'.
|
||||
|
||||
* text.texi (Buffer Contents):
|
||||
Mention 'buffer-substring-with-bidi-context' with a cross-reference.
|
||||
|
||||
2014-12-02 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* display.texi (Bidirectional Display):
|
||||
Document 'bidi-find-overridden-directionality'.
|
||||
|
||||
2014-11-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Lessen focus on ChangeLog files, as opposed to change log entries.
|
||||
* intro.texi (Acknowledgments): ChangeLog file -> change log entries.
|
||||
* tips.texi (Library Headers): Emacs uses a version control system.
|
||||
|
||||
2014-11-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* text.texi (Document Object Model): Mention `dom-pp'.
|
||||
|
||||
2014-11-26 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* text.texi (Document Object Model): New node to document dom.el.
|
||||
|
||||
2014-11-24 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* processes.texi (Network Security): Made into its own section and
|
||||
fleshed out.
|
||||
(Network Security): Mention more NSM variables.
|
||||
(Processes): Move the Network Security Manager stuff to the Emacs
|
||||
manual.
|
||||
|
||||
2014-11-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* processes.texi (Network): Mention the new :warn-unless-encrypted
|
||||
parameter to `open-network-stream'.
|
||||
(Network): Mention the Network Security Manager.
|
||||
|
||||
2014-11-21 Ulf Jasper <ulf.jasper@web.de>
|
||||
|
||||
* text.texi (Parsing HTML/XML): Document new optional parameter
|
||||
'discard-comments' of 'libxml-parse(html|xml)-region'.
|
||||
|
||||
2014-11-18 Leo Liu <sdl.web@gmail.com>
|
||||
|
||||
* functions.texi (Advising Named Functions):
|
||||
Document define-advice.
|
||||
|
||||
2014-11-17 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Improve time stamp handling, and be more consistent about it.
|
||||
* os.texi (Time of Day, Time Conversion, Time Parsing)
|
||||
(Processor Run Time, Time Calculations):
|
||||
Document the new behavior, plus be clearer about the old behavior.
|
||||
(Idle Timers): Take advantage of new functionality.
|
||||
|
||||
2014-11-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* text.texi (Special Properties): Mention `inhibit-read-only'.
|
||||
|
||||
2014-11-14 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* os.texi (Time of Day):
|
||||
Use leading zero with 24-hour times less than 10:00.
|
||||
|
||||
2014-11-09 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (version): Remove variable.
|
||||
(clean): No longer delete dist tarfile.
|
||||
(dist): Remove rule; replace with code in admin.el.
|
||||
|
||||
2014-11-07 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* frames.texi (Size and Position): Rewrite description of
|
||||
`frame-inhibit-implied-resize'.
|
||||
|
||||
2014-10-22 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* frames.texi (Size Parameters): Replace "frame contents" by
|
||||
"frame's text area". Add reference to Size and Position
|
||||
section.
|
||||
(Size and Position): Major rewrite. Add explanations for
|
||||
frame's default font, text and display areas. Add descriptions
|
||||
for `set-frame-font', `frame-text-height', `frame-text-width'
|
||||
and `frame-inhibit-implied-resize'.
|
||||
|
||||
2014-10-20 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Merge in all changes up to 24.4 release.
|
||||
|
||||
2014-10-20 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* objects.texi (Type Predicates): Don't mention display-table-p.
|
||||
|
||||
2014-10-15 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* nonascii.texi (Character Properties): Document the new
|
||||
properties 'bracket-type' and 'paired-bracket'.
|
||||
|
||||
* display.texi (Bidirectional Display): Update the version of the
|
||||
UBA to which we are conforming.
|
||||
|
||||
2014-10-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (dist): Update for new output variables.
|
||||
|
||||
2014-10-12 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* elisp.texi (DATE): Bump to October 2014.
|
||||
|
||||
2014-10-09 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* frames.texi (Multiple Terminals): Copyedits.
|
||||
|
||||
2014-10-09 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* frames.texi (Multiple Terminals): Improve the description of X
|
||||
display names. Add index entries.
|
||||
(Basic Parameters): Add a cross-reference to where X display names
|
||||
are described.
|
||||
(Position Parameters): Mention that positional parameters of the
|
||||
form (+ POS) can be negative if they are on a non-primary monitor
|
||||
of a multi-monitor display. (Bug#18636)
|
||||
(Creating Frames): Mention that on multi-monitor displays the
|
||||
frame might be positioned differently than specified by the frame
|
||||
parameters alist.
|
||||
|
||||
2014-10-08 Leo Liu <sdl.web@gmail.com>
|
||||
|
||||
* streams.texi (Output Functions): Document new argument ENSURE to
|
||||
terpri. (Bug#18652)
|
||||
|
||||
2014-10-04 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* display.texi (Scroll Bars): Add description of horizontal scroll
|
||||
bars and associated functions.
|
||||
* frames.texi (Layout Parameters): Add horizontal scroll bar
|
||||
entries. Remove paragraph on "combined fringe widths".
|
||||
* windows.texi (Window Sizes): Describe affects of horizontal
|
||||
scroll bars on window layout and sizes. Fix description of
|
||||
window-full-height-p.
|
||||
(Resizing Windows): Mention horizontal scroll bar.
|
||||
|
||||
2014-10-04 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* commands.texi (Generic Commands): Copyedits.
|
||||
|
||||
* display.texi (Scroll Bars):
|
||||
* modes.texi (Header Lines): Copyedits.
|
||||
|
||||
* buffers.texi (Buffer List):
|
||||
* display.texi (Image Descriptors, Defining Images):
|
||||
* functions.texi (Core Advising Primitives): Small fixes re @var usage.
|
||||
|
||||
* windows.texi (Window Sizes, Resizing Windows): Copyedits.
|
||||
|
||||
* frames.texi (Multiple Terminals): Copyedits re multiple monitors.
|
||||
|
||||
2014-10-03 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* frames.texi (Size Parameters, Size and Position): Mention that
|
||||
with some window managers you have to set `frame-resize-pixelwise'
|
||||
in order make a frame truly fullscreen or maximized.
|
||||
|
||||
2014-10-01 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Improve doc for use of 'int', and discuss 'ssize_t'.
|
||||
* internals.texi (C Integer Types): Mention 'int' for other
|
||||
randomish values that lie in 'int' range. Mention 'ssize_t'. See:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2014-10/msg00019.html
|
||||
|
||||
Use AUTO_CONS instead of SCOPED_CONS, etc.
|
||||
* internals.texi (Stack-allocated Objects):
|
||||
Adjust to match the revised, less error-prone macros.
|
||||
|
||||
2014-09-30 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* internals.texi (Stack-allocated Objects): Further improvements.
|
||||
Give an example of misuse.
|
||||
|
||||
2014-09-30 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* internals.texi (Stack-allocated Objects): Minor improvements of
|
||||
the wording and the indexing.
|
||||
|
||||
2014-09-30 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* internals.texi (Stack-allocated Objects): Describe this feature.
|
||||
|
||||
2014-09-15 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* text.texi (Registers): Make `insert-register' documentation
|
||||
reflect interface change.
|
||||
|
||||
2014-09-08 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* functions.texi (Core Advising Primitives): Add a note about the
|
||||
confusing treatment of `interactive' for :filter-args (bug#18399).
|
||||
|
||||
2014-09-07 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* strings.texi (Text Comparison): Describe `string-collate-equalp'
|
||||
and `string-collate-lessp'.
|
||||
|
||||
2014-09-06 Leo Liu <sdl.web@gmail.com>
|
||||
|
||||
* control.texi (Pattern matching case statement): Document vector
|
||||
qpattern. (Bug#18327)
|
||||
|
||||
2014-08-29 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* lists.texi (Functions that Rearrange Lists):
|
||||
Remove description of sort ...
|
||||
* sequences.texi (Sequence Functions): ... and generalize
|
||||
it for sequences. Add an example.
|
||||
|
||||
2014-08-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* display.texi (Bidirectional Display): Update the Emacs's class
|
||||
of bidirectional conformance.
|
||||
|
||||
2014-08-27 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* eval.texi (Eval): Mention possible recovery from stack overflow.
|
||||
|
||||
2014-07-11 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* internals.texi (Garbage Collection): Fix last change.
|
||||
|
@ -133,8 +406,8 @@
|
|||
|
||||
2014-05-15 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* lists.texi (Building Cons Cells and Lists): Remove
|
||||
description of `reverse' and `'nreverse' to generalize them...
|
||||
* lists.texi (Building Cons Cells and Lists):
|
||||
Remove description of `reverse' and `'nreverse' to generalize them...
|
||||
* sequences.texi (Sequences): ...for sequences here.
|
||||
|
||||
2014-05-14 Glenn Morris <rgm@gnu.org>
|
||||
|
@ -4516,7 +4789,7 @@
|
|||
(texinputdir, $(infodir)/elisp): Use $(MAKEINFO_OPTS).
|
||||
|
||||
2011-01-25 Chong Yidong <cyd@stupidchicken.com>
|
||||
Richard Kim <emacs18@gmail.com>
|
||||
Richard Kim <emacs18@gmail.com>
|
||||
|
||||
* loading.texi (Library Search): Document list-load-path-shadows
|
||||
(Bug#7757).
|
||||
|
@ -13276,7 +13549,7 @@
|
|||
|
||||
1998-01-30 Richard Stallman <rms@psilocin.gnu.org>
|
||||
|
||||
* Makefile (SHELL): Defined.
|
||||
* Makefile (SHELL): Define.
|
||||
|
||||
1998-01-27 Richard Stallman <rms@psilocin.gnu.org>
|
||||
|
||||
|
|
|
@ -25,8 +25,6 @@ SHELL = @SHELL@
|
|||
# Standard configure variables.
|
||||
srcdir = @srcdir@
|
||||
|
||||
version=@version@
|
||||
|
||||
buildinfodir = $(srcdir)/../../info
|
||||
# Directory with the (customized) texinfo.tex file.
|
||||
texinfodir = $(srcdir)/../misc
|
||||
|
@ -164,7 +162,6 @@ mostlyclean:
|
|||
clean: mostlyclean
|
||||
rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS)
|
||||
rm -f vol[12].dvi vol[12].pdf vol[12].ps
|
||||
rm -f emacs-lispref-${version}.tar*
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile
|
||||
|
@ -177,28 +174,6 @@ infoclean:
|
|||
|
||||
bootstrap-clean maintainer-clean: distclean infoclean
|
||||
|
||||
.PHONY: dist
|
||||
|
||||
## Note this excludes the two-volume stuff.
|
||||
dist:
|
||||
rm -rf emacs-lispref-${version}
|
||||
mkdir emacs-lispref-${version}
|
||||
cp ${srcdir}/*.texi ${texinfodir}/texinfo.tex \
|
||||
$(emacsdir)/emacsver.texi ${srcdir}/ChangeLog* \
|
||||
${srcdir}/README emacs-lispref-${version}/
|
||||
sed -e 's/@sr[c]dir@/./' -e 's/^\(texinfodir *=\).*/\1 ./' \
|
||||
-e 's/^\(emacsdir *=\).*/\1 ./' \
|
||||
-e 's/^\(buildinfodir *=\).*/\1 ./' \
|
||||
-e 's/^\(clean:.*\)/\1 infoclean/' \
|
||||
-e "s/@ver[s]ion@/${version}/" \
|
||||
-e 's/@MAKE[I]NFO@/makeinfo/' -e 's/@MK[D]IR_P@/mkdir -p/' \
|
||||
${srcdir}/Makefile.in > emacs-lispref-${version}/Makefile
|
||||
@if grep '@[a-zA-Z_]*@' emacs-lispref-${version}/Makefile; then \
|
||||
echo "Unexpanded configure variables in Makefile?" 1>&2; exit 1; \
|
||||
fi
|
||||
tar -cf emacs-lispref-${version}.tar emacs-lispref-${version}
|
||||
rm -rf emacs-lispref-${version}
|
||||
|
||||
.PHONY: install-dvi install-html install-pdf install-ps install-doc
|
||||
|
||||
install-dvi: dvi
|
||||
|
|
|
@ -863,7 +863,7 @@ If no suitable buffer exists, the buffer @file{*scratch*} is returned
|
|||
|
||||
@defun last-buffer &optional buffer visible-ok frame
|
||||
This function returns the last buffer in @var{frame}'s buffer list other
|
||||
than @var{BUFFER}. If @var{frame} is omitted or @code{nil}, it uses the
|
||||
than @var{buffer}. If @var{frame} is omitted or @code{nil}, it uses the
|
||||
selected frame's buffer list.
|
||||
|
||||
The argument @var{visible-ok} is handled as with @code{other-buffer},
|
||||
|
|
|
@ -589,31 +589,26 @@ Put them into three windows, selecting the last one."
|
|||
@cindex alternatives, defining
|
||||
|
||||
The macro @code{define-alternatives} can be used to define
|
||||
@dfn{generic commands}. Generic commands are interactive functions
|
||||
whose implementation can be selected among several alternatives, as a
|
||||
matter of user preference.
|
||||
@dfn{generic commands}. These are interactive functions whose
|
||||
implementation can be selected from several alternatives, as a matter
|
||||
of user preference.
|
||||
|
||||
@defmac define-alternatives command &rest customizations
|
||||
Define the new command `COMMAND'.
|
||||
Define the new command @var{command}, a symbol.
|
||||
|
||||
The argument `COMMAND' should be a symbol.
|
||||
When a user runs @kbd{M-x @var{command} @key{RET}} for the first time,
|
||||
Emacs prompts for which real form of the command to use, and records
|
||||
the selection by way of a custom variable. Using a prefix argument
|
||||
repeats this process of choosing an alternative.
|
||||
|
||||
When a user runs @kbd{M-x COMMAND @key{RET}} for the first time, Emacs
|
||||
will prompt for which alternative to use and record the selected
|
||||
command as a custom variable.
|
||||
The variable @code{@var{command}-alternatives} should contain an alist
|
||||
with alternative implementations of @var{command}.
|
||||
Until this variable is set, @code{define-alternatives} has no effect.
|
||||
|
||||
Running @kbd{C-u M-x COMMAND @key{RET}} prompts again for an
|
||||
alternative and overwrites the previous choice.
|
||||
|
||||
The variable @code{COMMAND-alternatives} contains an alist
|
||||
(@pxref{Association Lists}) with alternative implementations of
|
||||
`COMMAND'. @code{define-alternatives} does not have any effect until
|
||||
this variable is set.
|
||||
|
||||
If @var{customizations} is non-@var{nil}, it should be composed of
|
||||
alternating @code{defcustom} keywords and values to add to the
|
||||
declaration of @code{COMMAND-alternatives} (typically :group and
|
||||
:version).
|
||||
If @var{customizations} is non-@code{nil}, it should consist of
|
||||
alternating @code{defcustom} keywords (typically @code{:group} and
|
||||
@code{:version}) and values to add to the declaration of
|
||||
@code{@var{command}-alternatives}.
|
||||
@end defmac
|
||||
|
||||
@node Interactive Call
|
||||
|
|
|
@ -328,13 +328,13 @@ lexical binding):
|
|||
@example
|
||||
(defun evaluate (exp env)
|
||||
(pcase exp
|
||||
(`(add ,x ,y) (+ (evaluate x env) (evaluate y env)))
|
||||
(`(call ,fun ,arg) (funcall (evaluate fun env) (evaluate arg env)))
|
||||
(`(fn ,arg ,body) (lambda (val)
|
||||
(evaluate body (cons (cons arg val) env))))
|
||||
((pred numberp) exp)
|
||||
((pred symbolp) (cdr (assq exp env)))
|
||||
(_ (error "Unknown expression %S" exp))))
|
||||
(`(add ,x ,y) (+ (evaluate x env) (evaluate y env)))
|
||||
(`(call ,fun ,arg) (funcall (evaluate fun env) (evaluate arg env)))
|
||||
(`(fn ,arg ,body) (lambda (val)
|
||||
(evaluate body (cons (cons arg val) env))))
|
||||
((pred numberp) exp)
|
||||
((pred symbolp) (cdr (assq exp env)))
|
||||
(_ (error "Unknown expression %S" exp))))
|
||||
@end example
|
||||
|
||||
Where @code{`(add ,x ,y)} is a pattern that checks that @code{exp} is a three
|
||||
|
@ -370,6 +370,10 @@ More specifically, a Q-pattern can take the following forms:
|
|||
@item (@var{qpattern1} . @var{qpattern2})
|
||||
This pattern matches any cons cell whose @code{car} matches @var{QPATTERN1} and
|
||||
whose @code{cdr} matches @var{PATTERN2}.
|
||||
@item [@var{qpattern1 qpattern2..qpatternm}]
|
||||
This pattern matches a vector of length @code{M} whose 0..(M-1)th
|
||||
elements match @var{QPATTERN1}, @var{QPATTERN2}..@var{QPATTERNm},
|
||||
respectively.
|
||||
@item @var{atom}
|
||||
This pattern matches any atom @code{equal} to @var{atom}.
|
||||
@item ,@var{upattern}
|
||||
|
|
|
@ -23,7 +23,7 @@ that Emacs presents to the user.
|
|||
* Faces:: A face defines a graphics style for text characters:
|
||||
font, colors, etc.
|
||||
* Fringes:: Controlling window fringes.
|
||||
* Scroll Bars:: Controlling vertical scroll bars.
|
||||
* Scroll Bars:: Controlling scroll bars.
|
||||
* Window Dividers:: Separating windows visually.
|
||||
* Display Property:: Enabling special display features.
|
||||
* Images:: Displaying images in Emacs buffers.
|
||||
|
@ -3349,9 +3349,9 @@ The script that the font must support (a symbol).
|
|||
@item :otf
|
||||
@cindex OpenType font
|
||||
The font must be an OpenType font that supports these OpenType
|
||||
features, provided Emacs is compiled with support for @samp{libotf} (a
|
||||
library for performing complex text layout in certain scripts). The
|
||||
value must be a list of the form
|
||||
features, provided Emacs is compiled with a library, such as
|
||||
@samp{libotf} on GNU/Linux, that supports complex text layout for
|
||||
scripts which need that. The value must be a list of the form
|
||||
|
||||
@smallexample
|
||||
@code{(@var{script-tag} @var{langsys-tag} @var{gsub} @var{gpos})}
|
||||
|
@ -3450,6 +3450,124 @@ If the optional argument @var{fold-wildcards} is non-@code{nil},
|
|||
consecutive wildcards in the XLFD are folded into one.
|
||||
@end defun
|
||||
|
||||
The following two functions return important information about a font.
|
||||
|
||||
@defun font-info name &optional frame
|
||||
This function returns information about a font specified by its
|
||||
@var{name}, a string, as it is used on @var{frame}. If @var{frame} is
|
||||
omitted or @code{nil}, it defaults to the selected frame.
|
||||
|
||||
The value returned by the function is a vector of the form
|
||||
@code{[@var{opened-name} @var{full-name} @var{size} @var{height}
|
||||
@var{baseline-offset} @var{relative-compose} @var{default-ascent}
|
||||
@var{max-width} @var{ascent} @var{descent} @var{space-width}
|
||||
@var{average-width} @var{filename} @var{capability}]}. Here's the
|
||||
description of each components of this vector:
|
||||
|
||||
@table @var
|
||||
@item opened-name
|
||||
The name used to open the font, a string.
|
||||
|
||||
@item full-name
|
||||
The full name of the font, a string.
|
||||
|
||||
@item size
|
||||
The pixel size of the font.
|
||||
|
||||
@item height
|
||||
The height of the font in pixels.
|
||||
|
||||
@item baseline-offset
|
||||
The offset in pixels from the @acronym{ASCII} baseline, positive
|
||||
upward.
|
||||
|
||||
@item relative-compose
|
||||
@itemx default-ascent
|
||||
Numbers controlling how to compose characters.
|
||||
|
||||
@item ascent
|
||||
@itemx descent
|
||||
The ascent and descent of this font. The sum of these two numbers
|
||||
should be equal to the value of @var{height} above.
|
||||
|
||||
@item space-width
|
||||
The width, in pixels, of the font's space character.
|
||||
|
||||
@item average-width
|
||||
The average width of the font characters. If this is zero, Emacs uses
|
||||
the value of @var{space-width} instead, when it calculates text layout
|
||||
on display.
|
||||
|
||||
@item filename
|
||||
The file name of the font as a string. This can be @code{nil} if the
|
||||
font back-end does not provide a way to find out the font's file name.
|
||||
|
||||
@item capability
|
||||
A list whose first element is a symbol representing the font type, one
|
||||
of @code{x}, @code{opentype}, @code{truetype}, @code{type1},
|
||||
@code{pcf}, or @code{bdf}. For OpenType fonts, the list includes 2
|
||||
additional elements describing the @sc{gsub} and @sc{gpos} features
|
||||
supported by the font. Each of these elements is a list of the form
|
||||
@code{((@var{script} (@var{langsys} @var{feature} @dots{}) @dots{})
|
||||
@dots{})}, where @var{script} is a symbol representing an OpenType
|
||||
script tag, @var{langsys} is a symbol representing an OpenType langsys
|
||||
tag (or @code{nil}, which stands for the default langsys), and each
|
||||
@var{feature} is a symbol representing an OpenType feature tag.
|
||||
@end table
|
||||
@end defun
|
||||
|
||||
@defun query-font font-object
|
||||
This function returns information about a @var{font-object}. (This is
|
||||
in contrast to @code{font-info}, which takes the font name, a string,
|
||||
as its argument.)
|
||||
|
||||
The value returned by the function is a vector of the form
|
||||
@code{[@var{name} @var{filename} @var{pixel-size} @var{max-width}
|
||||
@var{ascent} @var{descent} @var{space-width} @var{average-width}
|
||||
@var{capability}]}. Here's the description of each components of this
|
||||
vector:
|
||||
|
||||
@table @var
|
||||
@item name
|
||||
The font name, a string.
|
||||
|
||||
@item filename
|
||||
The file name of the font as a string. This can be @code{nil} if the
|
||||
font back-end does not provide a way to find out the font's file name.
|
||||
|
||||
@item pixel-size
|
||||
The pixel size of the font used to open the font.
|
||||
|
||||
@item max-width
|
||||
The maximum advance width of the font.
|
||||
|
||||
@item ascent
|
||||
@itemx descent
|
||||
The ascent and descent of this font. The sum of these two numbers
|
||||
gives the font height.
|
||||
|
||||
@item space-width
|
||||
The width, in pixels, of the font's space character.
|
||||
|
||||
@item average-width
|
||||
The average width of the font characters. If this is zero, Emacs uses
|
||||
the value of @var{space-width} instead, when it calculates text layout
|
||||
on display.
|
||||
|
||||
@item capability
|
||||
A list whose first element is a symbol representing the font type, one
|
||||
of @code{x}, @code{opentype}, @code{truetype}, @code{type1},
|
||||
@code{pcf}, or @code{bdf}. For OpenType fonts, the list includes 2
|
||||
additional elements describing the @sc{gsub} and @sc{gpos} features
|
||||
supported by the font. Each of these elements is a list of the form
|
||||
@code{((@var{script} (@var{langsys} @var{feature} @dots{}) @dots{})
|
||||
@dots{})}, where @var{script} is a symbol representing an OpenType
|
||||
script tag, @var{langsys} is a symbol representing an OpenType langsys
|
||||
tag (or @code{nil}, which stands for the default langsys), and each
|
||||
@var{feature} is a symbol representing an OpenType feature tag.
|
||||
@end table
|
||||
@end defun
|
||||
|
||||
@node Fringes
|
||||
@section Fringes
|
||||
@cindex fringes
|
||||
|
@ -3866,102 +3984,164 @@ arrow position. If either property is not set, the default
|
|||
@code{overlay-arrow-string} or @code{overlay-arrow} fringe indicator
|
||||
is used.
|
||||
|
||||
|
||||
@node Scroll Bars
|
||||
@section Scroll Bars
|
||||
@cindex scroll bars
|
||||
|
||||
Normally the frame parameter @code{vertical-scroll-bars} controls
|
||||
whether the windows in the frame have vertical scroll bars, and
|
||||
whether they are on the left or right. The frame parameter
|
||||
@code{scroll-bar-width} specifies how wide they are (@code{nil}
|
||||
meaning the default). @xref{Layout Parameters}.
|
||||
whether the windows in the frame have vertical scroll bars, and whether
|
||||
they are on the left or right. The frame parameter
|
||||
@code{scroll-bar-width} specifies how wide they are (@code{nil} meaning
|
||||
the default).
|
||||
|
||||
The frame parameter @code{horizontal-scroll-bars} controls whether
|
||||
the windows in the frame have horizontal scroll bars. The frame
|
||||
parameter @code{scroll-bar-height} specifies how high they are
|
||||
(@code{nil} meaning the default). @xref{Layout Parameters}.
|
||||
|
||||
@vindex horizontal-scroll-bars-available-p
|
||||
Horizontal scroll bars are not available on all platforms. The
|
||||
function @code{horizontal-scroll-bars-available-p} which takes no
|
||||
argument returns non-@code{nil} if they are available on your system.
|
||||
|
||||
The following three functions take as argument a live frame which
|
||||
defaults to the selected one.
|
||||
|
||||
@defun frame-current-scroll-bars &optional frame
|
||||
This function reports the scroll bar type settings for frame
|
||||
@var{frame}. The value is a cons cell
|
||||
@code{(@var{vertical-type} .@: @var{horizontal-type})}, where
|
||||
@var{vertical-type} is either @code{left}, @code{right}, or @code{nil}
|
||||
(which means no scroll bar.) @var{horizontal-type} is meant to
|
||||
specify the horizontal scroll bar type, but since they are not
|
||||
implemented, it is always @code{nil}.
|
||||
This function reports the scroll bar types for frame @var{frame}. The
|
||||
value is a cons cell @code{(@var{vertical-type} .@:
|
||||
@var{horizontal-type})}, where @var{vertical-type} is either
|
||||
@code{left}, @code{right}, or @code{nil} (which means no vertical scroll
|
||||
bar.) @var{horizontal-type} is either @code{bottom} or @code{nil}
|
||||
(which means no horizontal scroll bar).
|
||||
@end defun
|
||||
|
||||
@vindex vertical-scroll-bar
|
||||
You can enable or disable scroll bars for a particular buffer,
|
||||
by setting the variable @code{vertical-scroll-bar}. This variable
|
||||
automatically becomes buffer-local when set. The possible values are
|
||||
@code{left}, @code{right}, @code{t}, which means to use the
|
||||
frame's default, and @code{nil} for no scroll bar.
|
||||
|
||||
You can also control this for individual windows. Call the function
|
||||
@code{set-window-scroll-bars} to specify what to do for a specific window:
|
||||
|
||||
@defun set-window-scroll-bars window width &optional vertical-type horizontal-type
|
||||
This function sets the width and type of scroll bars for window
|
||||
@var{window}.
|
||||
|
||||
@var{width} specifies the scroll bar width in pixels (@code{nil} means
|
||||
use the width specified for the frame). @var{vertical-type} specifies
|
||||
whether to have a vertical scroll bar and, if so, where. The possible
|
||||
values are @code{left}, @code{right} and @code{nil}, just like the
|
||||
values of the @code{vertical-scroll-bars} frame parameter.
|
||||
|
||||
The argument @var{horizontal-type} is meant to specify whether and
|
||||
where to have horizontal scroll bars, but since they are not
|
||||
implemented, it has no effect. If @var{window} is @code{nil}, the
|
||||
selected window is used.
|
||||
@defun frame-scroll-bar-width &optional Lisp_Object &optional frame
|
||||
This function returns the width of vertical scroll bars of @var{frame}
|
||||
in pixels.
|
||||
@end defun
|
||||
|
||||
@defun frame-scroll-bar-height &optional Lisp_Object &optional frame
|
||||
This function returns the height of horizontal scroll bars of
|
||||
@var{frame} in pixels.
|
||||
@end defun
|
||||
|
||||
You can override the frame specific settings for individual windows by
|
||||
using the following function:
|
||||
|
||||
@defun set-window-scroll-bars window &optional width vertical-type height horizontal-type
|
||||
This function sets the width and/or height and the types of scroll bars
|
||||
for window @var{window}.
|
||||
|
||||
@var{width} specifies the width of the vertical scroll bar in pixels
|
||||
(@code{nil} means use the width specified for the frame).
|
||||
@var{vertical-type} specifies whether to have a vertical scroll bar and,
|
||||
if so, where. The possible values are @code{left}, @code{right},
|
||||
@code{t}, which means to use the frame's default, and @code{nil} for no
|
||||
vertical scroll bar.
|
||||
|
||||
@var{height} specifies the height of the horizontal scroll bar in pixels
|
||||
(@code{nil} means use the height specified for the frame).
|
||||
@var{horizontal-type} specifies whether to have a horizontal scroll bar.
|
||||
The possible values are @code{bottom}, @code{t}, which means to use the
|
||||
frame's default, and @code{nil} for no horizontal scroll bar.
|
||||
|
||||
If @var{window} is @code{nil}, the selected window is used.
|
||||
@end defun
|
||||
|
||||
The following four functions take as argument a live window which
|
||||
defaults to the selected one.
|
||||
|
||||
@defun window-scroll-bars &optional window
|
||||
Report the width and type of scroll bars specified for @var{window}.
|
||||
If @var{window} is omitted or @code{nil}, the selected window is used.
|
||||
The value is a list of the form @code{(@var{width}
|
||||
@var{cols} @var{vertical-type} @var{horizontal-type})}. The value
|
||||
@var{width} is the value that was specified for the width (which may
|
||||
be @code{nil}); @var{cols} is the number of columns that the scroll
|
||||
bar actually occupies.
|
||||
This function returns a list of the form @code{(@var{width}
|
||||
@var{columns} @var{vertical-type} @var{height} @var{lines}
|
||||
@var{horizontal-type})}.
|
||||
|
||||
@var{horizontal-type} is not actually meaningful.
|
||||
The value @var{width} is the value that was specified for the width of
|
||||
the vertical scroll bar (which may be @code{nil}); @var{columns} is the
|
||||
(possibly rounded) number of columns that the vertical scroll bar
|
||||
actually occupies.
|
||||
|
||||
The value @var{height} is the value that was specified for the height of
|
||||
the horizontal scroll bar (which may be @code{nil}); @var{lines} is the
|
||||
(possibly rounded) number of lines that the horizontally scroll bar
|
||||
actually occupies.
|
||||
@end defun
|
||||
|
||||
@defun window-current-scroll-bars &optional window
|
||||
This function reports the scroll bar type for window @var{window}. The
|
||||
value is a cons cell @code{(@var{vertical-type} .@:
|
||||
@var{horizontal-type})}. Unlike @code{window-scroll-bars}, this reports
|
||||
the scroll bar type actually used, once frame defaults and
|
||||
@code{scroll-bar-mode} are taken into account.
|
||||
@end defun
|
||||
|
||||
@defun window-scroll-bar-width &optional window
|
||||
This function returns the width of @var{window}'s vertical scrollbar,
|
||||
in pixels. @var{window} must be a live window. If @var{window} is
|
||||
@code{nil} or omitted, it will be the selected window.
|
||||
This function returns the width in pixels of @var{window}'s vertical
|
||||
scrollbar.
|
||||
@end defun
|
||||
|
||||
@defun window-scroll-bar-height &optional window
|
||||
This function returns the height in pixels of @var{window}'s horizontal
|
||||
scrollbar.
|
||||
@end defun
|
||||
|
||||
If you don't specify these values for a window with
|
||||
@code{set-window-scroll-bars}, the buffer-local variables
|
||||
@code{scroll-bar-mode} and @code{scroll-bar-width} in the buffer being
|
||||
displayed control the window's vertical scroll bars. The function
|
||||
@code{vertical-scroll-bar}, @code{horizontal-scroll-bar},
|
||||
@code{scroll-bar-width} and @code{scroll-bar-height} in the buffer being
|
||||
displayed control the window's scroll bars. The function
|
||||
@code{set-window-buffer} examines these variables. If you change them
|
||||
in a buffer that is already visible in a window, you can make the
|
||||
window take note of the new values by calling @code{set-window-buffer}
|
||||
in a buffer that is already visible in a window, you can make the window
|
||||
take note of the new values by calling @code{set-window-buffer}
|
||||
specifying the same buffer that is already displayed.
|
||||
|
||||
@defopt scroll-bar-mode
|
||||
This variable, always local in all buffers, controls whether and where
|
||||
to put scroll bars in windows displaying the buffer. The possible values
|
||||
are @code{nil} for no scroll bar, @code{left} to put a scroll bar on
|
||||
the left, and @code{right} to put a scroll bar on the right.
|
||||
@end defopt
|
||||
You can control the appearance of scroll bars for a particular buffer by
|
||||
setting the following variables which automatically become buffer-local
|
||||
when set.
|
||||
|
||||
@defun window-current-scroll-bars &optional window
|
||||
This function reports the scroll bar type for window @var{window}.
|
||||
If @var{window} is omitted or @code{nil}, the selected window is used.
|
||||
The value is a cons cell
|
||||
@code{(@var{vertical-type} .@: @var{horizontal-type})}. Unlike
|
||||
@code{window-scroll-bars}, this reports the scroll bar type actually
|
||||
used, once frame defaults and @code{scroll-bar-mode} are taken into
|
||||
account.
|
||||
@end defun
|
||||
@defvar vertical-scroll-bar
|
||||
This variable specifies the location of the vertical scroll bar. The
|
||||
possible values are @code{left}, @code{right}, @code{t}, which means to
|
||||
use the frame's default, and @code{nil} for no scroll bar.
|
||||
@end defvar
|
||||
|
||||
@defvar horizontal-scroll-bar
|
||||
This variable specifies the location of the horizontal scroll bar. The
|
||||
possible values are @code{bottom}, @code{t}, which means to use the
|
||||
frame's default, and @code{nil} for no scroll bar.
|
||||
@end defvar
|
||||
|
||||
@defvar scroll-bar-width
|
||||
This variable, always local in all buffers, specifies the width of the
|
||||
buffer's scroll bars, measured in pixels. A value of @code{nil} means
|
||||
to use the value specified by the frame.
|
||||
This variable specifies the width of the buffer's vertical scroll bars,
|
||||
measured in pixels. A value of @code{nil} means to use the value
|
||||
specified by the frame.
|
||||
@end defvar
|
||||
|
||||
@defvar scroll-bar-height
|
||||
This variable specifies the height of the buffer's horizontal scroll
|
||||
bar, measured in pixels. A value of @code{nil} means to use the value
|
||||
specified by the frame.
|
||||
@end defvar
|
||||
|
||||
Finally you can toggle the display of scroll bars on all frames by
|
||||
customizing the variables @code{scroll-bar-mode} and
|
||||
@code{horizontal-scroll-bar-mode}.
|
||||
|
||||
@defopt scroll-bar-mode
|
||||
This variable controls whether and where to put vertical scroll bars in
|
||||
all frames. The possible values are @code{nil} for no scroll bars,
|
||||
@code{left} to put scroll bars on the left and @code{right} to put
|
||||
scroll bars on the right.
|
||||
@end defopt
|
||||
|
||||
@defopt horizontal-scroll-bar-mode
|
||||
This variable controls whether to display horizontal scroll bars on all
|
||||
frames.
|
||||
@end defopt
|
||||
|
||||
|
||||
@node Window Dividers
|
||||
@section Window Dividers
|
||||
@cindex window dividers
|
||||
|
@ -4503,7 +4683,7 @@ functions to insert images into buffers.
|
|||
|
||||
Each image descriptor has the form @code{(image . @var{props})},
|
||||
where @var{props} is a property list of alternating keyword symbols
|
||||
and values, including at least the pair @code{:type @var{TYPE}} which
|
||||
and values, including at least the pair @code{:type @var{type}} that
|
||||
specifies the image type.
|
||||
|
||||
The following is a list of properties that are meaningful for all
|
||||
|
@ -4995,7 +5175,7 @@ of a list of image specifications @var{specs}.
|
|||
Each specification in @var{specs} is a property list with contents
|
||||
depending on image type. All specifications must at least contain the
|
||||
properties @code{:type @var{type}} and either @w{@code{:file @var{file}}}
|
||||
or @w{@code{:data @var{DATA}}}, where @var{type} is a symbol specifying
|
||||
or @w{@code{:data @var{data}}}, where @var{type} is a symbol specifying
|
||||
the image type, e.g., @code{xbm}, @var{file} is the file to load the
|
||||
image from, and @var{data} is a string containing the actual image data.
|
||||
The first specification in the list whose @var{type} is supported, and
|
||||
|
@ -6552,7 +6732,8 @@ position. In performing this @dfn{bidirectional reordering}, Emacs
|
|||
follows the Unicode Bidirectional Algorithm (a.k.a.@: @acronym{UBA}),
|
||||
which is described in Annex #9 of the Unicode standard
|
||||
(@url{http://www.unicode.org/reports/tr9/}). Emacs provides a ``Full
|
||||
Bidirectionality'' class implementation of the @acronym{UBA}.
|
||||
Bidirectionality'' class implementation of the @acronym{UBA},
|
||||
consistent with the requirements of the Unicode Standard v7.0.
|
||||
|
||||
@defvar bidi-display-reordering
|
||||
If the value of this buffer-local variable is non-@code{nil} (the
|
||||
|
@ -6737,3 +6918,81 @@ affect all Emacs frames and windows.
|
|||
appropriate mirrored character in the reordered text. Lisp programs
|
||||
can affect the mirrored display by changing this property. Again, any
|
||||
such changes affect all of Emacs display.
|
||||
|
||||
@cindex overriding bidirectional properties
|
||||
@cindex directional overrides
|
||||
@cindex LRO
|
||||
@cindex RLO
|
||||
The bidirectional properties of characters can be overridden by
|
||||
inserting into the text special directional control characters,
|
||||
LEFT-TO-RIGHT OVERRIDE (@acronym{LRO}) and RIGHT-TO-LEFT OVERRIDE
|
||||
(@acronym{RLO}). Any characters between a @acronym{RLO} and the
|
||||
following newline or POP DIRECTIONAL FORMATTING (@acronym{PDF})
|
||||
control character, whichever comes first, will be displayed as if they
|
||||
were strong right-to-left characters, i.e.@: they will be reversed on
|
||||
display. Similarly, any characters between @acronym{LRO} and
|
||||
@acronym{PDF} or newline will display as if they were strong
|
||||
left-to-right, and will @emph{not} be reversed even if they are strong
|
||||
right-to-left characters.
|
||||
|
||||
@cindex phishing using directional overrides
|
||||
@cindex malicious use of directional overrides
|
||||
These overrides are useful when you want to make some text
|
||||
unaffected by the reordering algorithm, and instead directly control
|
||||
the display order. But they can also be used for malicious purposes,
|
||||
known as @dfn{phishing}. Specifically, a URL on a Web page or a link
|
||||
in an email message can be manipulated to make its visual appearance
|
||||
unrecognizable, or similar to some popular benign location, while the
|
||||
real location, interpreted by a browser in the logical order, is very
|
||||
different.
|
||||
|
||||
Emacs provides a primitive that applications can use to detect
|
||||
instances of text whose bidirectional properties were overridden so as
|
||||
to make a left-to-right character display as if it were a
|
||||
right-to-left character, or vise versa.
|
||||
|
||||
@defun bidi-find-overridden-directionality from to &optional object
|
||||
This function looks at the text of the specified @var{object} between
|
||||
positions @var{from} (inclusive) and @var{to} (exclusive), and returns
|
||||
the first position where it finds a strong left-to-right character
|
||||
whose directional properties were forced to display the character as
|
||||
right-to-left, or for a strong right-to-left character that was forced
|
||||
to display as left-to-right. If it finds no such characters in the
|
||||
specified region of text, it returns @code{nil}.
|
||||
|
||||
The optional argument @var{object} specifies which text to search, and
|
||||
defaults to the current buffer. If @var{object} is non-@code{nil}, it
|
||||
can be some other buffer, or it can be a string or a window. If it is
|
||||
a string, the function searches that string. If it is a window, the
|
||||
function searches the buffer displayed in that window. If a buffer
|
||||
whose text you want to examine is displayed in some window, we
|
||||
recommend to specify it by that window, rather than pass the buffer to
|
||||
the function. This is because telling the function about the window
|
||||
allows it to correctly account for window-specific overlays, which
|
||||
might change the result of the function if some text in the buffer is
|
||||
covered by overlays.
|
||||
@end defun
|
||||
|
||||
@cindex copying bidirectional text, preserve visual order
|
||||
@cindex visual order, preserve when copying bidirectional text
|
||||
When text that includes mixed right-to-left and left-to-right
|
||||
characters and bidirectional controls is copied into a different
|
||||
location, it can change its visual appearance, and also can affect the
|
||||
visual appearance of the surrounding text at destination. This is
|
||||
because reordering of bidirectional text specified by the
|
||||
@acronym{UBA} has non-trivial context-dependent effects both on the
|
||||
copied text and on the text at copy destination that will surround it.
|
||||
|
||||
Sometimes, a Lisp program may need to preserve the exact visual
|
||||
appearance of the copied text at destination, and of the text that
|
||||
surrounds the copy. Lisp programs can use the following function to
|
||||
achieve that effect.
|
||||
|
||||
@defun buffer-substring-with-bidi-context start end &optional no-properties
|
||||
This function works similar to @code{buffer-substring} (@pxref{Buffer
|
||||
Contents}), but it prepends and appends to the copied text bidi
|
||||
directional control characters necessary to preserve the visual
|
||||
appearance of the text when it is inserted at another place. Optional
|
||||
argument @var{no-properties}, if non-@code{nil}, means remove the text
|
||||
properties from the copy of the text.
|
||||
@end defun
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
@c (See comments for EDITION in emacs.texi)
|
||||
@set VERSION 3.1
|
||||
@include emacsver.texi
|
||||
@set DATE January 2013
|
||||
@set DATE October 2014
|
||||
|
||||
@c in general, keep the following line commented out, unless doing a
|
||||
@c copy of this manual that will be published. The manual should go
|
||||
|
@ -1006,6 +1006,7 @@ Windows
|
|||
* Windows and Frames:: Relating windows to the frame they appear on.
|
||||
* Window Sizes:: Accessing a window's size.
|
||||
* Resizing Windows:: Changing the sizes of windows.
|
||||
* Preserving Window Sizes:: Preserving the size of windows.
|
||||
* Splitting Windows:: Splitting one window into two windows.
|
||||
* Deleting Windows:: Deleting a window gives its space to other windows.
|
||||
* Recombining Windows:: Preserving the frame layout when splitting and
|
||||
|
@ -1343,7 +1344,7 @@ Emacs Display
|
|||
* Faces:: A face defines a graphics style
|
||||
for text characters: font, colors, etc.
|
||||
* Fringes:: Controlling window fringes.
|
||||
* Scroll Bars:: Controlling vertical scroll bars.
|
||||
* Scroll Bars:: Controlling scroll bars.
|
||||
* Window Dividers:: Separating windows visually.
|
||||
* Display Property:: Enabling special display features.
|
||||
* Images:: Displaying images in Emacs buffers.
|
||||
|
|
|
@ -805,7 +805,12 @@ message @code{"Lisp nesting exceeds max-lisp-eval-depth"}).
|
|||
This limit, with the associated error when it is exceeded, is one way
|
||||
Emacs Lisp avoids infinite recursion on an ill-defined function. If
|
||||
you increase the value of @code{max-lisp-eval-depth} too much, such
|
||||
code can cause stack overflow instead.
|
||||
code can cause stack overflow instead. On some systems, this overflow
|
||||
can be handled. In that case, normal Lisp evaluation is interrupted
|
||||
and control is transferred back to the top level command loop
|
||||
(@code{top-level}). Note that there is no way to enter Emacs Lisp
|
||||
debugger in this situation. @xref{Error Debugging}.
|
||||
|
||||
@cindex Lisp nesting error
|
||||
|
||||
The depth limit counts internal uses of @code{eval}, @code{apply}, and
|
||||
|
|
|
@ -2020,6 +2020,11 @@ form.
|
|||
@end example
|
||||
@end defun
|
||||
|
||||
@defun directory-name-p filename
|
||||
This function returns non-@code{nil} if @var{filename} ends with a
|
||||
forward slash (@samp{/}) character.
|
||||
@end defun
|
||||
|
||||
@node Directory Names
|
||||
@subsection Directory Names
|
||||
@cindex directory name
|
||||
|
@ -2605,6 +2610,14 @@ An error is signaled if @var{directory} is not the name of a directory
|
|||
that can be read.
|
||||
@end defun
|
||||
|
||||
@defun directory-files-recursively directory match &optional include-directories
|
||||
Return all files under @var{directory} whose file names match
|
||||
@var{match} recursively. The file names are returned ``depth first'',
|
||||
meaning that contents of sub-directories are returned before contents
|
||||
of the directories. If @var{include-directories} is non-@code{nil},
|
||||
also return directory names that have matching names.
|
||||
@end defun
|
||||
|
||||
@defun directory-files-and-attributes directory &optional full-name match-regexp nosort id-format
|
||||
This is similar to @code{directory-files} in deciding which files
|
||||
to report on and how to report their names. However, instead
|
||||
|
|
|
@ -131,6 +131,13 @@ applies any parameters listed in @code{frame-inherited-parameters}
|
|||
(see below) and not present in the argument, taking the values from
|
||||
the frame that was selected when @code{make-frame} was called.
|
||||
|
||||
Note that on multi-monitor displays (@pxref{Multiple Terminals}), the
|
||||
window manager might position the frame differently than specified by
|
||||
the positional parameters in @var{alist} (@pxref{Position
|
||||
Parameters}). For example, some window managers have a policy of
|
||||
displaying the frame on the monitor that contains the largest part of
|
||||
the window (a.k.a.@: the @dfn{dominating} monitor).
|
||||
|
||||
This function itself does not make the new frame the selected frame.
|
||||
@xref{Input Focus}. The previously selected frame remains selected.
|
||||
On graphical terminals, however, the windowing system may select the
|
||||
|
@ -258,13 +265,27 @@ of those frames is ``@emph{the} selected frame'' at any given moment
|
|||
terminals, by interacting with the @command{emacsclient} program.
|
||||
@xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
|
||||
|
||||
@cindex X display names
|
||||
@cindex display name on X
|
||||
A single X server can handle more than one display. Each X display
|
||||
has a three-part name, @samp{@var{host}:@var{server}.@var{screen}}.
|
||||
The first two parts, @var{host} and @var{server}, identify the X
|
||||
server; the third part, @var{screen}, identifies a screen number on
|
||||
that X server. When you use two or more screens belonging to one
|
||||
server, Emacs knows by the similarity in their names that they share a
|
||||
single keyboard.
|
||||
has a three-part name,
|
||||
@samp{@var{hostname}:@var{displaynumber}.@var{screennumber}}. The
|
||||
first part, @var{hostname}, specifies the name of the machine to which
|
||||
the display is physically connected. The second part,
|
||||
@var{displaynumber}, is a zero-based number that identifies one or
|
||||
more monitors connected to that machine that share a common keyboard
|
||||
and pointing device (mouse, tablet, etc.). The third part,
|
||||
@var{screennumber}, identifies a zero-based screen number (a separate
|
||||
monitor) that is part of a single monitor collection on that X server.
|
||||
When you use two or more screens belonging to one server, Emacs knows
|
||||
by the similarity in their names that they share a single keyboard.
|
||||
|
||||
Systems that don't use the X window system, such as MS-Windows,
|
||||
don't support the notion of X displays, and have only one display on
|
||||
each host. The display name on these systems doesn't follow the above
|
||||
3-part format; for example, the display name on MS-Windows systems is
|
||||
a constant string @samp{w32}, and exists for compatibility, so that
|
||||
you could pass it to functions that expect a display name.
|
||||
|
||||
@deffn Command make-frame-on-display display &optional parameters
|
||||
This function creates and returns a new frame on @var{display}, taking
|
||||
|
@ -314,57 +335,84 @@ on that display (@pxref{Deleting Frames}).
|
|||
|
||||
@cindex multi-monitor
|
||||
On some ``multi-monitor'' setups, a single X display outputs to more
|
||||
than one physical monitor. @code{display-monitor-attributes-list} and
|
||||
@code{frame-monitor-attributes} can be used to obtain information
|
||||
about each physical monitor on multi-monitor setups.
|
||||
than one physical monitor. You can use the functions
|
||||
@code{display-monitor-attributes-list} and @code{frame-monitor-attributes}
|
||||
to obtain information about such setups.
|
||||
|
||||
@defun display-monitor-attributes-list &optional display
|
||||
This function returns a list of physical monitor attributes on
|
||||
@var{display}. Each element of the list is an association list,
|
||||
representing the attributes of each physical monitor. The first
|
||||
element corresponds to the primary monitor.
|
||||
|
||||
Attributes for a physical monitor are:
|
||||
@var{display}, which can be a display name (a string), a terminal, or
|
||||
a frame; if omitted or @code{nil}, it defaults to the selected frame's
|
||||
display. Each element of the list is an association list,
|
||||
representing the attributes of a physical monitor. The first element
|
||||
corresponds to the primary monitor. The attribute keys and values
|
||||
are:
|
||||
|
||||
@table @samp
|
||||
@item geometry
|
||||
Position and size in pixels in the form of @samp{(X Y WIDTH HEIGHT)}
|
||||
Position of the top-left corner of the monitor's screen and its size,
|
||||
in pixels, as @samp{(@var{x} @var{y} @var{width} @var{height})}. Note
|
||||
that, if the monitor is not the primary monitor, some of the
|
||||
coordinates might be negative.
|
||||
|
||||
@item workarea
|
||||
Position and size of the workarea in pixels in the form of @samp{(X Y
|
||||
WIDTH HEIGHT)}
|
||||
Position of the top-left corner and size of the work area (``usable''
|
||||
space) in pixels as @samp{(@var{x} @var{y} @var{width} @var{height})}.
|
||||
This may be different from @samp{geometry} in that space occupied by
|
||||
various window manager features (docks, taskbars, etc.) may be
|
||||
excluded from the work area. Whether or not such features actually
|
||||
subtract from the work area depends on the platform and environment.
|
||||
Again, if the monitor is not the primary monitor, some of the
|
||||
coordinates might be negative.
|
||||
|
||||
@item mm-size
|
||||
Width and height in millimeters in the form of @samp{(WIDTH HEIGHT)}
|
||||
Width and height in millimeters as @samp{(@var{width} @var{height})}
|
||||
|
||||
@item frames
|
||||
List of frames dominated by the physical monitor
|
||||
List of frames that this physical monitor dominates (see below).
|
||||
|
||||
@item name
|
||||
Name of the physical monitor as a string
|
||||
Name of the physical monitor as @var{string}.
|
||||
|
||||
@item source
|
||||
Source of the multi-monitor information as @var{string};
|
||||
e.g., @samp{XRandr} or @samp{Xinerama}.
|
||||
@end table
|
||||
|
||||
where X, Y, WIDTH, and HEIGHT are integers. @samp{name} is optional.
|
||||
@var{x}, @var{y}, @var{width}, and @var{height} are integers.
|
||||
@samp{name} and @samp{source} may be absent.
|
||||
|
||||
A frame is dominated by a physical monitor when either the
|
||||
largest area of the frame resides in the monitor, or the monitor
|
||||
is the closest to the frame if the frame does not intersect any
|
||||
physical monitors. Every non-tip frame (including invisible one)
|
||||
in a graphical display is dominated by exactly one physical
|
||||
monitor at a time, though it can span multiple (or no) physical
|
||||
monitors.
|
||||
A frame is @dfn{dominated} by a physical monitor when either the
|
||||
largest area of the frame resides in that monitor, or (if the frame
|
||||
does not intersect any physical monitors) that monitor is the closest
|
||||
to the frame. Every (non-tooltip) frame (whether visible or not) in a
|
||||
graphical display is dominated by exactly one physical monitor at a
|
||||
time, though the frame can span multiple (or no) physical monitors.
|
||||
|
||||
Here's an example of the data produced by this function on a 2-monitor
|
||||
display:
|
||||
|
||||
@lisp
|
||||
(display-monitor-attributes-list)
|
||||
@result{}
|
||||
(((geometry 0 0 1920 1080) ;; @r{Left-hand, primary monitor}
|
||||
(workarea 0 0 1920 1050) ;; @r{A taskbar occupies some of the height}
|
||||
(mm-size 677 381)
|
||||
(name . "DISPLAY1")
|
||||
(frames #<frame emacs@@host *Messages* 0x11578c0>
|
||||
#<frame emacs@@host *scratch* 0x114b838>))
|
||||
((geometry 1920 0 1680 1050) ;; @r{Right-hand monitor}
|
||||
(workarea 1920 0 1680 1050) ;; @r{Whole screen can be used}
|
||||
(mm-size 593 370)
|
||||
(name . "DISPLAY2")
|
||||
(frames)))
|
||||
@end lisp
|
||||
|
||||
@var{display} defaults to the selected frame's display.
|
||||
@end defun
|
||||
|
||||
@defun frame-monitor-attributes &optional frame
|
||||
This function returns the attributes of the physical monitor
|
||||
dominating @var{frame}, which defaults to the selected frame.
|
||||
|
||||
A frame is dominated by a physical monitor when either the
|
||||
largest area of the frame resides in the monitor, or the monitor
|
||||
is the closest to the frame if the frame does not intersect any
|
||||
physical monitors.
|
||||
dominating (see above) @var{frame}, which defaults to the selected frame.
|
||||
@end defun
|
||||
|
||||
@node Frame Parameters
|
||||
|
@ -536,8 +584,9 @@ frame. @code{title} and @code{name} are meaningful on all terminals.
|
|||
@vindex display, a frame parameter
|
||||
@item display
|
||||
The display on which to open this frame. It should be a string of the
|
||||
form @code{"@var{host}:@var{dpy}.@var{screen}"}, just like the
|
||||
@env{DISPLAY} environment variable.
|
||||
form @samp{@var{host}:@var{dpy}.@var{screen}}, just like the
|
||||
@env{DISPLAY} environment variable. @xref{Multiple Terminals}, for
|
||||
more details about display names.
|
||||
|
||||
@vindex display-type, a frame parameter
|
||||
@item display-type
|
||||
|
@ -593,12 +642,14 @@ right screen edge.
|
|||
@item @code{(+ @var{pos})}
|
||||
This specifies the position of the left frame edge relative to the left
|
||||
screen edge. The integer @var{pos} may be positive or negative; a
|
||||
negative value specifies a position outside the screen.
|
||||
negative value specifies a position outside the screen or on a monitor
|
||||
other than the primary one (for multi-monitor displays).
|
||||
|
||||
@item @code{(- @var{pos})}
|
||||
This specifies the position of the right frame edge relative to the right
|
||||
screen edge. The integer @var{pos} may be positive or negative; a
|
||||
negative value specifies a position outside the screen.
|
||||
negative value specifies a position outside the screen or on a monitor
|
||||
other than the primary one (for multi-monitor displays).
|
||||
@end table
|
||||
|
||||
Some window managers ignore program-specified positions. If you want to
|
||||
|
@ -658,13 +709,13 @@ pixel sizes of these character units (@pxref{Face Attributes}).
|
|||
@table @code
|
||||
@vindex height, a frame parameter
|
||||
@item height
|
||||
The height of the frame contents, in characters. (To get the height in
|
||||
pixels, call @code{frame-pixel-height}; see @ref{Size and Position}.)
|
||||
The height of the frame's text area (@pxref{Size and Position}), in
|
||||
characters.
|
||||
|
||||
@vindex width, a frame parameter
|
||||
@item width
|
||||
The width of the frame contents, in characters. (To get the width in
|
||||
pixels, call @code{frame-pixel-width}; see @ref{Size and Position}.)
|
||||
The width of the frame's text area (@pxref{Size and Position}), in
|
||||
characters.
|
||||
|
||||
@vindex user-size, a frame parameter
|
||||
@item user-size
|
||||
|
@ -686,6 +737,11 @@ difference between @code{maximized} and @code{fullboth} is that the
|
|||
former can still be resized by dragging window manager decorations
|
||||
with the mouse, while the latter really covers the whole screen and
|
||||
does not allow resizing by mouse dragging.
|
||||
|
||||
With some window managers you may have to customize the variable
|
||||
@code{frame-resize-pixelwise} (@pxref{Size and Position}) to a
|
||||
non-@code{nil} value in order to make a frame appear ``maximized'' or
|
||||
``fullscreen''.
|
||||
@end table
|
||||
|
||||
@node Layout Parameters
|
||||
|
@ -711,19 +767,21 @@ Whether the frame has scroll bars for vertical scrolling, and which side
|
|||
of the frame they should be on. The possible values are @code{left},
|
||||
@code{right}, and @code{nil} for no scroll bars.
|
||||
|
||||
@ignore
|
||||
@vindex horizontal-scroll-bars, a frame parameter
|
||||
@item horizontal-scroll-bars
|
||||
Whether the frame has scroll bars for horizontal scrolling
|
||||
(non-@code{nil} means yes). Horizontal scroll bars are not currently
|
||||
implemented.
|
||||
@end ignore
|
||||
Whether the frame has scroll bars for horizontal scrolling (@code{t} and
|
||||
@code{bottom} mean yes, @code{nil} means no).
|
||||
|
||||
@vindex scroll-bar-width, a frame parameter
|
||||
@item scroll-bar-width
|
||||
The width of vertical scroll bars, in pixels, or @code{nil} meaning to
|
||||
use the default width.
|
||||
|
||||
@vindex scroll-bar-height, a frame parameter
|
||||
@item scroll-bar-height
|
||||
The height of horizontal scroll bars, in pixels, or @code{nil} meaning
|
||||
to use the default height.
|
||||
|
||||
@vindex left-fringe, a frame parameter
|
||||
@vindex right-fringe, a frame parameter
|
||||
@item left-fringe
|
||||
|
@ -737,14 +795,6 @@ these two frame parameters, the return value is always an integer.
|
|||
When using @code{set-frame-parameter}, passing a @code{nil} value
|
||||
imposes an actual default value of 8 pixels.
|
||||
|
||||
The combined fringe widths must add up to an integral number of
|
||||
columns, so the actual default fringe widths for the frame, as
|
||||
reported by @code{frame-parameter}, may be larger than what you
|
||||
specify. Any extra width is distributed evenly between the left and
|
||||
right fringe. However, you can force one fringe or the other to a
|
||||
precise width by specifying that width as a negative integer. If both
|
||||
widths are negative, only the left fringe gets the specified width.
|
||||
|
||||
@vindex right-divider-width, a frame parameter
|
||||
@item right-divider-width
|
||||
The width (thickness) reserved for the right divider (@pxref{Window
|
||||
|
@ -966,7 +1016,7 @@ variable do not take effect immediately, only when you specify the
|
|||
A list of symbols, specifying the @dfn{font backends} to use for
|
||||
drawing fonts in the frame, in order of priority. On X, there are
|
||||
currently two available font backends: @code{x} (the X core font
|
||||
driver) and @code{xft} (the Xft font driver). On Windows, there are
|
||||
driver) and @code{xft} (the Xft font driver). On MS-Windows, there are
|
||||
currently two available font backends: @code{gdi} and
|
||||
@code{uniscribe} (@pxref{Windows Fonts,,, emacs, The GNU Emacs
|
||||
Manual}). On other systems, there is only one available font backend,
|
||||
|
@ -1086,65 +1136,137 @@ equivalent to the @code{:background} attribute of the
|
|||
@code{scroll-bar} face.
|
||||
@end table
|
||||
|
||||
|
||||
@node Size and Position
|
||||
@subsection Frame Size And Position
|
||||
@subsection Frame Size and Position
|
||||
@cindex size of frame
|
||||
@cindex screen size
|
||||
@cindex frame size
|
||||
@cindex resize frame
|
||||
|
||||
You can read or change the size and position of a frame using the
|
||||
frame parameters @code{left}, @code{top}, @code{height}, and
|
||||
@code{width}. Whatever geometry parameters you don't specify are chosen
|
||||
by the window manager in its usual fashion.
|
||||
You can read or change the size and position of a frame using the frame
|
||||
parameters @code{left}, @code{top}, @code{height}, and @code{width}.
|
||||
Whatever geometry parameters you don't specify are chosen by the window
|
||||
manager in its usual fashion.
|
||||
|
||||
Here are some special features for working with sizes and positions.
|
||||
(For the precise meaning of ``selected frame'' used by these functions,
|
||||
see @ref{Input Focus}.)
|
||||
Most of the functions described below use a @var{frame} argument which
|
||||
has to specify a live frame. If omitted or @code{nil}, it specifies the
|
||||
selected frame, see @ref{Input Focus}.
|
||||
|
||||
@defun set-frame-position frame left top
|
||||
This function sets the position of the top left corner of @var{frame} to
|
||||
@var{left} and @var{top}. These arguments are measured in pixels, and
|
||||
normally count from the top left corner of the screen.
|
||||
normally count from the top left corner of the screen to the top left
|
||||
corner of the rectangle allotted to the frame by the window manager.
|
||||
|
||||
Negative parameter values position the bottom edge of the window up from
|
||||
the bottom edge of the screen, or the right window edge to the left of
|
||||
the right edge of the screen. It would probably be better if the values
|
||||
were always counted from the left and top, so that negative arguments
|
||||
would position the frame partly off the top or left edge of the screen,
|
||||
but it seems inadvisable to change that now.
|
||||
Negative parameter values position the bottom edge of that rectangle up
|
||||
from the bottom edge of the screen, or the right rectangle edge to the
|
||||
left of the right edge of the screen. It would probably be better if
|
||||
the values were always counted from the left and top, so that negative
|
||||
arguments would position the frame partly off the top or left edge of
|
||||
the screen, but it seems inadvisable to change that now.
|
||||
@end defun
|
||||
|
||||
@cindex frame default font
|
||||
@cindex default font of a frame
|
||||
Each frame has a @dfn{default font} which specifies the canonical height
|
||||
and width of a character on that frame. The default font is used when
|
||||
retrieving or changing the size of a frame in terms of columns or lines.
|
||||
It is also used when resizing (@pxref{Window Sizes}) or splitting
|
||||
(@pxref{Splitting Windows}) windows.
|
||||
|
||||
@defun frame-char-height &optional frame
|
||||
@defunx frame-char-width &optional frame
|
||||
These functions return the canonical height and width of a character in
|
||||
@var{frame}, measured in pixels. Together, these values establish the
|
||||
size of the default font on @var{frame}. The values depend on the
|
||||
choice of font for @var{frame}, see @ref{Font and Color Parameters}.
|
||||
@end defun
|
||||
|
||||
The default font can be also set directly with the following function:
|
||||
|
||||
@deffn Command set-frame-font font &optional keep-size frames
|
||||
This sets the default font to @var{font}. When called interactively, it
|
||||
prompts for the name of a font, and uses that font on the selected
|
||||
frame. When called from Lisp, @var{font} should be a font name (a
|
||||
string), a font object, font entity, or a font spec.
|
||||
|
||||
If the optional argument @var{keep-size} is @code{nil}, this keeps the
|
||||
number of frame lines and columns fixed. (If non-@code{nil}, the option
|
||||
@code{frame-inhibit-implied-resize} described below will override this.)
|
||||
If @var{keep-size} is non-@code{nil} (or with a prefix argument), it
|
||||
tries to keep the size of the display area of the current frame fixed by
|
||||
adjusting the number of lines and columns.
|
||||
|
||||
If the optional argument @var{frames} is @code{nil}, this applies the
|
||||
font to the selected frame only. If @var{frames} is non-@code{nil}, it
|
||||
should be a list of frames to act upon, or @code{t} meaning all existing
|
||||
graphical frames.
|
||||
@end deffn
|
||||
|
||||
@cindex frame display area
|
||||
@cindex display area of a frame
|
||||
The @dfn{display area} of a frame is a rectangular area within the area
|
||||
allotted to the frame by the window manager. The display area neither
|
||||
includes the title bar (@pxref{Frame Titles}) nor any other decorations
|
||||
provided by the window manager (like an external border used for
|
||||
resizing frames via mouse dragging).
|
||||
|
||||
The actual height of the display area depends on the window-system
|
||||
and toolkit in use. With GTK+, the display area does not include any
|
||||
tool bar or menu bar. With the Motif or Lucid toolkits and with
|
||||
Windows, the display area includes the tool bar but not the menu bar.
|
||||
In a graphical version with no toolkit, it includes both the tool bar
|
||||
and menu bar. On a text terminal, the display area includes the menu
|
||||
bar.
|
||||
|
||||
@defun frame-pixel-height &optional frame
|
||||
@defunx frame-pixel-width &optional frame
|
||||
These functions return the height and width of the display area of
|
||||
@var{frame}, measured in pixels. For a text terminal, the results are
|
||||
in characters rather than pixels.
|
||||
@end defun
|
||||
|
||||
@cindex frame text area
|
||||
@cindex text area of a frame
|
||||
The @dfn{text area} of a frame is a concept implicitly used by all
|
||||
functions that change a frame's height or width. It is a rectangle
|
||||
located within the display area. Its size is obtained from that of the
|
||||
display area by subtracting the sizes of any tool or menu bars that are
|
||||
part of the display area, any internal borders, one vertical and one
|
||||
horizontal scroll bar, and one left and one right fringe as specified
|
||||
for this frame, see @ref{Layout Parameters}.
|
||||
|
||||
@defun frame-text-height &optional frame
|
||||
@defunx frame-text-width &optional frame
|
||||
These functions return the height and width of the text area of
|
||||
@var{frame}, measured in pixels. For a text terminal, the results are
|
||||
in characters rather than pixels.
|
||||
|
||||
The value returned by @code{frame-text-height} differs from that
|
||||
returned by @code{frame-pixel-height} by not including the heights of
|
||||
any tool bar or menu bar, the height of one horizontal scroll bar and
|
||||
the widths of the internal border.
|
||||
|
||||
The value returned by @code{frame-text-width} differs from that returned
|
||||
by @code{frame-pixel-width} by not including the width of one vertical
|
||||
scroll bar, the widths of one left and one right fringe and the widths
|
||||
of the internal border.
|
||||
@end defun
|
||||
|
||||
@defun frame-height &optional frame
|
||||
@defunx frame-width &optional frame
|
||||
These functions return the height and width of @var{frame}, measured in
|
||||
lines and columns. If you don't supply @var{frame}, they use the
|
||||
selected frame.
|
||||
@end defun
|
||||
These functions return the height and width of the text area of
|
||||
@var{frame}, measured in units of the default font height and width of
|
||||
@var{frame}. These functions are plain shorthands for writing
|
||||
@code{(frame-parameter frame 'height)} and @code{(frame-parameter frame
|
||||
'width)}.
|
||||
|
||||
@defun frame-pixel-height &optional frame
|
||||
@defunx frame-pixel-width &optional frame
|
||||
These functions return the height and width of the main display area
|
||||
of @var{frame}, measured in pixels. If you don't supply @var{frame},
|
||||
they use the selected frame. For a text terminal, the results are in
|
||||
characters rather than pixels.
|
||||
|
||||
These values include the internal borders, and windows' scroll bars
|
||||
and fringes (which belong to individual windows, not to the frame
|
||||
itself). The exact value of the heights depends on the window-system
|
||||
and toolkit in use. With GTK+, the height does not include any tool
|
||||
bar or menu bar. With the Motif or Lucid toolkits, it includes the
|
||||
tool bar but not the menu bar. In a graphical version with no
|
||||
toolkit, it includes both the tool bar and menu bar. For a text
|
||||
terminal, the result includes the menu bar.
|
||||
@end defun
|
||||
|
||||
@defun frame-char-height &optional frame
|
||||
@defunx frame-char-width &optional frame
|
||||
These functions return the height and width of a character in
|
||||
@var{frame}, measured in pixels. The values depend on the choice of
|
||||
font. If you don't supply @var{frame}, these functions use the selected
|
||||
frame.
|
||||
If the text area of @var{frame} measured in pixles is not a multiple of
|
||||
its default font size, the values returned by this functions are rounded
|
||||
down to the number of characters of the default font that fully fit into
|
||||
the text area.
|
||||
@end defun
|
||||
|
||||
@defopt frame-resize-pixelwise
|
||||
|
@ -1158,18 +1280,21 @@ size hints to the window manager. This means that this variable should
|
|||
be set only in a user's initial file; applications should never bind it
|
||||
temporarily.
|
||||
|
||||
The precise semantics of a value of @code{nil} for this option depends
|
||||
on the toolkit used: Dragging the frame border with the mouse is usually
|
||||
always done character-wise. Calling @code{set-frame-size} (see below)
|
||||
The precise meaning of a value of @code{nil} for this option depends
|
||||
on the toolkit used. Dragging the frame border with the mouse is usually
|
||||
done character-wise. Calling @code{set-frame-size} (see below)
|
||||
with arguments that do not specify the frame size as an integer multiple
|
||||
of its character size may be, however, either ignored or cause a
|
||||
rounding (GTK+, Windows) or get accepted (Lucid, Motif).
|
||||
of its character size, however, may: be ignored, cause a
|
||||
rounding (GTK+), or be accepted (Lucid, Motif, MS-Windows).
|
||||
|
||||
With some window managers you may have to set this to non-@code{nil} in
|
||||
order to make a frame appear truly ``maximized'' or ``fullscreen''.
|
||||
@end defopt
|
||||
|
||||
@defun set-frame-size frame width height pixelwise
|
||||
This function sets the size of @var{frame}, measured in characters;
|
||||
@var{width} and @var{height} specify the new width in columns and the
|
||||
new height in lines.
|
||||
This function sets the size of the text area of @var{frame}, measured in
|
||||
characters; @var{width} and @var{height} specify the new width in
|
||||
columns and the new height in lines.
|
||||
|
||||
The optional argument @var{pixelwise} non-@code{nil} means to measure
|
||||
the new width and height in units of pixels instead. Note that if
|
||||
|
@ -1179,9 +1304,9 @@ to a multiple of its character size.
|
|||
@end defun
|
||||
|
||||
@defun set-frame-height frame height &optional pretend pixelwise
|
||||
This function resizes @var{frame} to a height of @var{height} lines. The
|
||||
sizes of existing windows in @var{frame} are altered proportionally to
|
||||
fit.
|
||||
This function resizes the text area of @var{frame} to a height of
|
||||
@var{height} lines. The sizes of existing windows in @var{frame} are
|
||||
altered proportionally to fit.
|
||||
|
||||
If @var{pretend} is non-@code{nil}, then Emacs displays @var{height}
|
||||
lines of output in @var{frame}, but does not change its value for the
|
||||
|
@ -1201,8 +1326,8 @@ height to a multiple of its character height.
|
|||
@end defun
|
||||
|
||||
@defun set-frame-width frame width &optional pretend pixelwise
|
||||
This function sets the width of @var{frame}, measured in characters.
|
||||
The argument @var{pretend} has the same meaning as in
|
||||
This function sets the width of the text area of @var{frame}, measured
|
||||
in characters. The argument @var{pretend} has the same meaning as in
|
||||
@code{set-frame-height}.
|
||||
|
||||
The optional fourth argument @var{pixelwise} non-@code{nil} means that
|
||||
|
@ -1212,6 +1337,65 @@ fully honor the request if it does not increase/decrease the frame width
|
|||
to a multiple of its character width.
|
||||
@end defun
|
||||
|
||||
None of these three functions will make a frame smaller than needed to
|
||||
display all of its windows together with their scroll bars, fringes,
|
||||
margins, dividers, mode and header lines. This contrasts with requests
|
||||
by the window manager triggered, for example, by dragging the external
|
||||
border of a frame with the mouse. Such requests are always honored by
|
||||
clipping, if necessary, portions that cannot be displayed at the right,
|
||||
bottom corner of the frame.
|
||||
|
||||
By default, Emacs tries to keep the number of lines and columns of a
|
||||
frame's text area unaltered when, for example, adding or removing a menu
|
||||
bar, changing the default font or setting the width of the frame's
|
||||
scroll bars. This means, however, that in such case Emacs must ask the
|
||||
window manager to resize the display area of the frame in order to
|
||||
accommodate the size change. Note that wrapping a menu or tool bar
|
||||
usually does not resize the frame's display area, hence this will alter
|
||||
the number of displayed lines.
|
||||
|
||||
Occasionally, such implied resizing of the display area may be
|
||||
unwanted, for example, when the frame is maximized or made fullscreen
|
||||
where it's turned off by default. In other cases you can disable
|
||||
implied resizing with the following option:
|
||||
|
||||
@defopt frame-inhibit-implied-resize
|
||||
If this option is @code{nil}, changing font, menu bar, tool bar,
|
||||
internal borders, fringes or scroll bars of a specific frame may
|
||||
implicitly resize the frame's display area in order to preserve the
|
||||
number of columns or lines the frame displays. If this option is
|
||||
non-@code{nil}, no implied resizing is done.
|
||||
|
||||
The value of this option can be also be a list of frame parameters. In
|
||||
that case, implied resizing is inhibited when changing a parameter that
|
||||
appears in this list. The frame parameters currently handled by this
|
||||
option are: @code{font}, @code{font-backend},
|
||||
@code{internal-border-width}, @code{menu-bar-lines} and
|
||||
@code{tool-bar-lines}.
|
||||
|
||||
Changing any of the @code{scroll-bar-width}, @code{scroll-bar-height},
|
||||
@code{vertical-scroll-bars}, @code{horizontal-scroll-bars},
|
||||
@code{left-fringe} and @code{right-fringe} frame parameters is handled
|
||||
as if the frame contained just one live window. This means, for
|
||||
example, that removing vertical scroll bars on a frame containing
|
||||
several side by side windows will shrink the frame width by the width of
|
||||
one scroll bar provided this option is @code{nil} and keep it unchanged
|
||||
if this option is either @code{t} or a list containing
|
||||
@code{vertical-scroll-bars}.
|
||||
|
||||
The default value is @code{'(tool-bar-lines)} for Lucid, Motif and
|
||||
Windows (which means that adding/removing a tool bar there does not
|
||||
change the frame height), @code{nil} on all other window systems
|
||||
including GTK+ (which means that changing any of the parameters listed
|
||||
above may change the size of the frame), and @code{t} otherwise (which
|
||||
means the frame size never changes implicitly when there's no window
|
||||
system support).
|
||||
|
||||
Note that when a frame is not large enough to accommodate a change of
|
||||
any of the parameters listed above, Emacs may try to enlarge the frame
|
||||
even if this option is non-@code{nil}.
|
||||
@end defopt
|
||||
|
||||
@c FIXME? Belongs more in Emacs manual than here?
|
||||
@c But, e.g., fit-window-to-buffer is in this manual.
|
||||
If you have a frame that displays only one window, you can fit that
|
||||
|
|
|
@ -1204,31 +1204,22 @@ behavior with:
|
|||
|
||||
The arguments @code{:before} and @code{:around} used in the above examples
|
||||
specify how the two functions are composed, since there are many different
|
||||
ways to do it. The added function is also called an @emph{advice}.
|
||||
ways to do it. The added function is also called a piece of @emph{advice}.
|
||||
|
||||
@menu
|
||||
* Core Advising Primitives:: Primitives to manipulate advice.
|
||||
* Advising Named Functions:: Advising named functions.
|
||||
* Advice combinators:: Ways to compose advice.
|
||||
* Porting old advices:: Adapting code using the old defadvice.
|
||||
* Porting old advice:: Adapting code using the old defadvice.
|
||||
@end menu
|
||||
|
||||
@node Core Advising Primitives
|
||||
@subsection Primitives to manipulate advices
|
||||
@subsection Primitives to manipulate advice
|
||||
|
||||
@defmac add-function where place function &optional props
|
||||
This macro is the handy way to add the advice @var{function} to the function
|
||||
stored in @var{place} (@pxref{Generalized Variables}).
|
||||
|
||||
If @var{function} is not interactive, then the combined function will inherit
|
||||
the interactive spec, if any, of the original function. Else, the combined
|
||||
function will be interactive and will use the interactive spec of
|
||||
@var{function}. One exception: if the interactive spec of @var{function}
|
||||
is a function (rather than an expression or a string), then the interactive
|
||||
spec of the combined function will be a call to that function with as sole
|
||||
argument the interactive spec of the original function. To interpret the spec
|
||||
received as argument, use @code{advice-eval-interactive-spec}.
|
||||
|
||||
@var{where} determines how @var{function} is composed with the
|
||||
existing function, e.g. whether @var{function} should be called before, or
|
||||
after the original function. @xref{Advice combinators}, for the list of
|
||||
|
@ -1241,7 +1232,7 @@ global value of @var{place}. Whereas if @var{place} is of the form
|
|||
@code{(local @var{symbol})}, where @var{symbol} is an expression which returns
|
||||
the variable name, then @var{function} will only be added in the
|
||||
current buffer. Finally, if you want to modify a lexical variable, you will
|
||||
have to use @code{(var @var{VARIABLE})}.
|
||||
have to use @code{(var @var{variable})}.
|
||||
|
||||
Every function added with @code{add-function} can be accompanied by an
|
||||
association list of properties @var{props}. Currently only two of those
|
||||
|
@ -1254,23 +1245,41 @@ identify which function to remove. Typically used when @var{function} is an
|
|||
anonymous function.
|
||||
|
||||
@item depth
|
||||
This specifies how to order the advices, in case several advices are present.
|
||||
By default, the depth is 0. A depth of 100 indicates that this advice should
|
||||
be kept as deep as possible, whereas a depth of -100 indicates that it
|
||||
should stay as the outermost advice. When two advices specify the same depth,
|
||||
the most recently added advice will be outermost.
|
||||
This specifies how to order the advice, should several pieces of
|
||||
advice be present. By default, the depth is 0. A depth of 100
|
||||
indicates that this piece of advice should be kept as deep as
|
||||
possible, whereas a depth of -100 indicates that it should stay as the
|
||||
outermost piece. When two pieces of advice specify the same depth,
|
||||
the most recently added one will be outermost.
|
||||
|
||||
For a @code{:before} advice, being outermost means that this advice will be run
|
||||
first, before any other advice, whereas being innermost means that it will run
|
||||
right before the original function, with no other advice run between itself and
|
||||
the original function. Similarly, for an @code{:after} advice innermost means
|
||||
that it will run right after the original function, with no other advice run in
|
||||
between, whereas outermost means that it will be run very last after all
|
||||
other advices. An innermost @code{:override} advice will only override the
|
||||
original function and other advices will apply to it, whereas an outermost
|
||||
@code{:override} advice will override not only the original function but all
|
||||
other advices applied to it as well.
|
||||
For @code{:before} advice, being outermost means that this advice will
|
||||
be run first, before any other advice, whereas being innermost means
|
||||
that it will run right before the original function, with no other
|
||||
advice run between itself and the original function. Similarly, for
|
||||
@code{:after} advice innermost means that it will run right after the
|
||||
original function, with no other advice run in between, whereas
|
||||
outermost means that it will be run right at the end after all other
|
||||
advice. An innermost @code{:override} piece of advice will only
|
||||
override the original function and other pieces of advice will apply
|
||||
to it, whereas an outermost @code{:override} piece of advice will
|
||||
override not only the original function but all other advice applied
|
||||
to it as well.
|
||||
@end table
|
||||
|
||||
If @var{function} is not interactive, then the combined function will inherit
|
||||
the interactive spec, if any, of the original function. Else, the combined
|
||||
function will be interactive and will use the interactive spec of
|
||||
@var{function}. One exception: if the interactive spec of @var{function}
|
||||
is a function (rather than an expression or a string), then the interactive
|
||||
spec of the combined function will be a call to that function with as sole
|
||||
argument the interactive spec of the original function. To interpret the spec
|
||||
received as argument, use @code{advice-eval-interactive-spec}.
|
||||
|
||||
Note: The interactive spec of @var{function} will apply to the combined
|
||||
function and should hence obey the calling convention of the combined function
|
||||
rather than that of @var{function}. In many cases, it makes no difference
|
||||
since they are identical, but it does matter for @code{:around},
|
||||
@code{:filter-args}, and @code{filter-return}, where @var{function}.
|
||||
@end defmac
|
||||
|
||||
@defmac remove-function place function
|
||||
|
@ -1292,7 +1301,7 @@ function, it can also be the @code{name} of the piece of advice.
|
|||
@end defun
|
||||
|
||||
@defun advice-function-mapc f function-def
|
||||
Call the function @var{f} for every advice that was added to
|
||||
Call the function @var{f} for every piece of advice that was added to
|
||||
@var{function-def}. @var{f} is called with two arguments: the advice function
|
||||
and its properties.
|
||||
@end defun
|
||||
|
@ -1320,7 +1329,7 @@ instead. This separate set of functions to manipulate pieces of advice applied
|
|||
to named functions, offers the following extra features compared to
|
||||
@code{add-function}: they know how to deal with macros and autoloaded
|
||||
functions, they let @code{describe-function} preserve the original docstring as
|
||||
well as document the added advice, and they let you add and remove advices
|
||||
well as document the added advice, and they let you add and remove advice
|
||||
before a function is even defined.
|
||||
|
||||
@code{advice-add} can be useful for altering the behavior of existing calls
|
||||
|
@ -1354,6 +1363,13 @@ called directly from C, and such calls ignore advice; hence, one ends
|
|||
up in a confusing situation where some calls (occurring from Lisp
|
||||
code) obey the advice and other calls (from C code) do not.
|
||||
|
||||
@defmac define-advice symbol (where lambda-list &optional name depth) &rest body
|
||||
This macro defines a piece of advice and adds it to the function named
|
||||
@var{symbol}. The advice is an anonymous function if @var{name} is
|
||||
nil or a function named @code{symbol@@name}. See @code{advice-add}
|
||||
for explanation of other arguments.
|
||||
@end defmac
|
||||
|
||||
@defun advice-add symbol where function &optional props
|
||||
Add the advice @var{function} to the named function @var{symbol}.
|
||||
@var{where} and @var{props} have the same meaning as for @code{add-function}
|
||||
|
@ -1362,23 +1378,23 @@ Add the advice @var{function} to the named function @var{symbol}.
|
|||
|
||||
@defun advice-remove symbol function
|
||||
Remove the advice @var{function} from the named function @var{symbol}.
|
||||
@var{function} can also be the @code{name} of an advice.
|
||||
@var{function} can also be the @code{name} of a piece of advice.
|
||||
@end defun
|
||||
|
||||
@defun advice-member-p function symbol
|
||||
Return non-@code{nil} if the advice @var{function} is already in the named
|
||||
function @var{symbol}. @var{function} can also be the @code{name} of
|
||||
an advice.
|
||||
a piece of advice.
|
||||
@end defun
|
||||
|
||||
@defun advice-mapc function symbol
|
||||
Call @var{function} for every advice that was added to the named function
|
||||
@var{symbol}. @var{function} is called with two arguments: the advice function
|
||||
and its properties.
|
||||
Call @var{function} for every piece of advice that was added to the
|
||||
named function @var{symbol}. @var{function} is called with two
|
||||
arguments: the advice function and its properties.
|
||||
@end defun
|
||||
|
||||
@node Advice combinators
|
||||
@subsection Ways to compose advices
|
||||
@subsection Ways to compose advice
|
||||
|
||||
Here are the different possible values for the @var{where} argument of
|
||||
@code{add-function} and @code{advice-add}, specifying how the advice
|
||||
|
@ -1490,14 +1506,14 @@ More specifically, the composition of the two functions behaves like:
|
|||
@end table
|
||||
|
||||
|
||||
@node Porting old advices
|
||||
@node Porting old advice
|
||||
@subsection Adapting code using the old defadvice
|
||||
|
||||
A lot of code uses the old @code{defadvice} mechanism, which is largely made
|
||||
obsolete by the new @code{advice-add}, whose implementation and semantics is
|
||||
significantly simpler.
|
||||
|
||||
An old advice such as:
|
||||
An old piece of advice such as:
|
||||
|
||||
@example
|
||||
(defadvice previous-line (before next-line-at-end
|
||||
|
@ -1534,11 +1550,11 @@ whereas the new advice mechanism needs:
|
|||
|
||||
Note that @code{ad-activate} had a global effect: it activated all pieces of
|
||||
advice enabled for that specified function. If you wanted to only activate or
|
||||
deactivate a particular advice, you needed to @emph{enable} or @emph{disable}
|
||||
that advice with @code{ad-enable-advice} and @code{ad-disable-advice}.
|
||||
deactivate a particular piece, you needed to @emph{enable} or @emph{disable}
|
||||
it with @code{ad-enable-advice} and @code{ad-disable-advice}.
|
||||
The new mechanism does away with this distinction.
|
||||
|
||||
An around advice such as:
|
||||
Around advice such as:
|
||||
|
||||
@example
|
||||
(defadvice foo (around foo-around)
|
||||
|
@ -1564,12 +1580,12 @@ modify the function's arguments (e.g., with @code{ad-set-arg}), and that would
|
|||
affect the argument values seen by the original function, whereas in the new
|
||||
@code{:before}, modifying an argument via @code{setq} in the advice has no
|
||||
effect on the arguments seen by the original function.
|
||||
When porting a @code{before} advice which relied on this behavior, you'll need
|
||||
to turn it into a new @code{:around} or @code{:filter-args} advice instead.
|
||||
When porting @code{before} advice which relied on this behavior, you'll need
|
||||
to turn it into new @code{:around} or @code{:filter-args} advice instead.
|
||||
|
||||
Similarly an old @code{after} advice could modify the returned value by
|
||||
changing @code{ad-return-value}, whereas a new @code{:after} advice cannot, so
|
||||
when porting such an old @code{after} advice, you'll need to turn it into a new
|
||||
Similarly old @code{after} advice could modify the returned value by
|
||||
changing @code{ad-return-value}, whereas new @code{:after} advice cannot, so
|
||||
when porting such old @code{after} advice, you'll need to turn it into new
|
||||
@code{:around} or @code{:filter-return} advice instead.
|
||||
|
||||
@node Obsolete Functions
|
||||
|
|
|
@ -14,6 +14,7 @@ internal aspects of GNU Emacs that may be of interest to C programmers.
|
|||
* Building Emacs:: How the dumped Emacs is made.
|
||||
* Pure Storage:: Kludge to make preloaded Lisp functions shareable.
|
||||
* Garbage Collection:: Reclaiming space for Lisp objects no longer used.
|
||||
* Stack-allocated Objects:: Temporary conses and strings on C stack.
|
||||
* Memory Usage:: Info about total size of Lisp objects made so far.
|
||||
* C Dialect:: What C variant Emacs is written in.
|
||||
* Writing Emacs Primitives:: Writing C code for Emacs.
|
||||
|
@ -529,6 +530,35 @@ during garbage collection so far in this Emacs session, as a
|
|||
floating-point number.
|
||||
@end defvar
|
||||
|
||||
@node Stack-allocated Objects
|
||||
@section Stack-allocated Objects
|
||||
|
||||
@cindex stack allocated Lisp objects
|
||||
@cindex Lisp objects, stack-allocated
|
||||
The garbage collector described above is used to manage data visible
|
||||
from Lisp programs, as well as most of the data internally used by the
|
||||
Lisp interpreter. Sometimes it may be useful to allocate temporary
|
||||
internal objects using the C stack of the interpreter. This can help
|
||||
performance, as stack allocation is typically faster than using heap
|
||||
memory to allocate and the garbage collector to free. The downside is
|
||||
that using such objects after they are freed results in undefined
|
||||
behavior, so uses should be well thought out and carefully debugged by
|
||||
using the @code{GC_CHECK_MARKED_OBJECTS} feature (see
|
||||
@file{src/alloc.c}). In particular, stack-allocated objects should
|
||||
never be made visible to user Lisp code.
|
||||
|
||||
Currently, cons cells and strings can be allocated this way. This
|
||||
is implemented by C macros like @code{AUTO_CONS} and
|
||||
@code{AUTO_STRING} that define a named @code{Lisp_Object} with block
|
||||
lifetime. These objects are not freed by the garbage collector;
|
||||
instead, they have automatic storage duration, i.e., they are
|
||||
allocated like local variables and are automatically freed at the end
|
||||
of execution of the C block that defined the object.
|
||||
|
||||
For performance reasons, stack-allocated strings are limited to
|
||||
@acronym{ASCII} characters, and many of these strings are immutable,
|
||||
i.e., calling @code{ASET} on them produces undefined behavior.
|
||||
|
||||
@node Memory Usage
|
||||
@section Memory Usage
|
||||
@cindex memory usage
|
||||
|
@ -1595,6 +1625,8 @@ of @code{intptr_t}).
|
|||
|
||||
@item
|
||||
Prefer @code{int} for Emacs character codes, in the range 0 ..@: 0x3FFFFF.
|
||||
More generally, prefer @code{int} for integers known to be in
|
||||
@code{int} range, e.g., screen column counts.
|
||||
|
||||
@item
|
||||
Prefer @code{ptrdiff_t} for sizes, i.e., for integers bounded by the
|
||||
|
@ -1605,6 +1637,17 @@ for signed types. Using @code{ptrdiff_t} limits objects to
|
|||
anyway since they would break pointer subtraction, so this does not
|
||||
impose an arbitrary limit.
|
||||
|
||||
@item
|
||||
Avoid @code{ssize_t} except when communicating to low-level APIs that
|
||||
have @code{ssize_t}-related limitations. Although it's equivalent to
|
||||
@code{ptrdiff_t} on typical platforms, @code{ssize_t} is occasionally
|
||||
narrower, so using it for size-related calculations could overflow.
|
||||
Also, @code{ptrdiff_t} is more ubiquitous and better-standardized, has
|
||||
standard @code{printf} formats, and is the basis for Emacs's internal
|
||||
size-overflow checking. When using @code{ssize_t}, please note that
|
||||
POSIX requires support only for values in the range @minus{}1 ..@:
|
||||
@code{SSIZE_MAX}.
|
||||
|
||||
@item
|
||||
Prefer @code{intptr_t} for internal representations of pointers, or
|
||||
for integers bounded only by the number of objects that can exist at
|
||||
|
@ -1641,8 +1684,7 @@ using @code{int}. Although it is also OK to use @code{int}, @code{0}
|
|||
and @code{1}, this older style is gradually being phased out. When
|
||||
using @code{bool}, respect the limitations of the replacement
|
||||
implementation of @code{bool}, as documented in the source file
|
||||
@file{lib/stdbool.in.h}, so that Emacs remains portable to pre-C99
|
||||
platforms. In particular, boolean bitfields should be of type
|
||||
@file{lib/stdbool.in.h}. In particular, boolean bitfields should be of type
|
||||
@code{bool_bf}, not @code{bool}, so that they work correctly even when
|
||||
compiling Objective C with standard GCC.
|
||||
|
||||
|
|
|
@ -552,4 +552,4 @@ Trost, Rickard Westman, Jean White, Eduard Wiebe, Matthew Wilding,
|
|||
Carl Witty, Dale Worley, Rusty Wright, and David D. Zuhn.
|
||||
|
||||
For a more complete list of contributors, please see the relevant
|
||||
ChangeLog file in the Emacs sources.
|
||||
change log entries in the Emacs source repository.
|
||||
|
|
|
@ -1124,74 +1124,6 @@ each time you run it! Here is what happens:
|
|||
@end smallexample
|
||||
@end defun
|
||||
|
||||
@defun sort list predicate
|
||||
@cindex stable sort
|
||||
@cindex sorting lists
|
||||
This function sorts @var{list} stably, though destructively, and
|
||||
returns the sorted list. It compares elements using @var{predicate}. A
|
||||
stable sort is one in which elements with equal sort keys maintain their
|
||||
relative order before and after the sort. Stability is important when
|
||||
successive sorts are used to order elements according to different
|
||||
criteria.
|
||||
|
||||
The argument @var{predicate} must be a function that accepts two
|
||||
arguments. It is called with two elements of @var{list}. To get an
|
||||
increasing order sort, the @var{predicate} should return non-@code{nil} if the
|
||||
first element is ``less than'' the second, or @code{nil} if not.
|
||||
|
||||
The comparison function @var{predicate} must give reliable results for
|
||||
any given pair of arguments, at least within a single call to
|
||||
@code{sort}. It must be @dfn{antisymmetric}; that is, if @var{a} is
|
||||
less than @var{b}, @var{b} must not be less than @var{a}. It must be
|
||||
@dfn{transitive}---that is, if @var{a} is less than @var{b}, and @var{b}
|
||||
is less than @var{c}, then @var{a} must be less than @var{c}. If you
|
||||
use a comparison function which does not meet these requirements, the
|
||||
result of @code{sort} is unpredictable.
|
||||
|
||||
The destructive aspect of @code{sort} is that it rearranges the cons
|
||||
cells forming @var{list} by changing @sc{cdr}s. A nondestructive sort
|
||||
function would create new cons cells to store the elements in their
|
||||
sorted order. If you wish to make a sorted copy without destroying the
|
||||
original, copy it first with @code{copy-sequence} and then sort.
|
||||
|
||||
Sorting does not change the @sc{car}s of the cons cells in @var{list};
|
||||
the cons cell that originally contained the element @code{a} in
|
||||
@var{list} still has @code{a} in its @sc{car} after sorting, but it now
|
||||
appears in a different position in the list due to the change of
|
||||
@sc{cdr}s. For example:
|
||||
|
||||
@example
|
||||
@group
|
||||
(setq nums '(1 3 2 6 5 4 0))
|
||||
@result{} (1 3 2 6 5 4 0)
|
||||
@end group
|
||||
@group
|
||||
(sort nums '<)
|
||||
@result{} (0 1 2 3 4 5 6)
|
||||
@end group
|
||||
@group
|
||||
nums
|
||||
@result{} (1 2 3 4 5 6)
|
||||
@end group
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@strong{Warning}: Note that the list in @code{nums} no longer contains
|
||||
0; this is the same cons cell that it was before, but it is no longer
|
||||
the first one in the list. Don't assume a variable that formerly held
|
||||
the argument now holds the entire sorted list! Instead, save the result
|
||||
of @code{sort} and use that. Most often we store the result back into
|
||||
the variable that held the original list:
|
||||
|
||||
@example
|
||||
(setq nums (sort nums '<))
|
||||
@end example
|
||||
|
||||
@xref{Sorting}, for more functions that perform sorting.
|
||||
See @code{documentation} in @ref{Accessing Documentation}, for a
|
||||
useful example of @code{sort}.
|
||||
@end defun
|
||||
|
||||
@node Sets And Lists
|
||||
@section Using Lists as Sets
|
||||
@cindex lists as sets
|
||||
|
|
|
@ -2221,13 +2221,10 @@ is the same as for @code{mode-line-format} (@pxref{Mode Line Data}).
|
|||
It is normally @code{nil}, so that ordinary buffers have no header line.
|
||||
@end defvar
|
||||
|
||||
The function @code{window-header-line-height} returns the height of
|
||||
the header line:
|
||||
|
||||
@defun window-header-line-height &optional window
|
||||
Return the height of @var{window}'s header line, in pixels.
|
||||
@var{window} must be a live window. If @var{window} is @code{nil} or
|
||||
omitted, it will be the selected window.
|
||||
This function returns the height in pixels of @var{window}'s header
|
||||
line. @var{window} must be a live window, and defaults to the
|
||||
selected window.
|
||||
@end defun
|
||||
|
||||
A window that is just one line tall never displays a header line. A
|
||||
|
|
|
@ -520,6 +520,24 @@ property to display mirror images of characters when appropriate
|
|||
(@pxref{Bidirectional Display}). For unassigned codepoints, the value
|
||||
is @code{nil}.
|
||||
|
||||
@item paired-bracket
|
||||
Corresponds to the Unicode @code{Bidi_Paired_Bracket} property. The
|
||||
value of this property is the codepoint of a character's @dfn{paired
|
||||
bracket}, or @code{nil} if the character is not a bracket character.
|
||||
This establishes a mapping between characters that are treated as
|
||||
bracket pairs by the Unicode Bidirectional Algorithm; Emacs uses this
|
||||
property when it decides how to reorder for display parentheses,
|
||||
braces, and other similar characters (@pxref{Bidirectional Display}).
|
||||
|
||||
@item bracket-type
|
||||
Corresponds to the Unicode @code{Bidi_Paired_Bracket_Type} property.
|
||||
For characters whose @code{paired-bracket} property is non-@code{nil},
|
||||
the value of this property is a symbol, either @code{o} (for opening
|
||||
bracket characters) or @code{c} (for closing bracket characters). For
|
||||
characters whose @code{paired-bracket} property is @code{nil}, the
|
||||
value is the symbol @code{n} (None). Like @code{paired-bracket}, this
|
||||
property is used for bidirectional display.
|
||||
|
||||
@item old-name
|
||||
Corresponds to the Unicode @code{Unicode_1_Name} property. The value
|
||||
is a string. Unassigned codepoints, and characters that have no value
|
||||
|
@ -574,6 +592,14 @@ This function returns the value of @var{char}'s @var{propname} property.
|
|||
(get-char-code-property ?\u2163 'numeric-value)
|
||||
@result{} 4
|
||||
@end group
|
||||
@group
|
||||
(get-char-code-property ?\( 'paired-bracket)
|
||||
@result{} 41 ;; closing parenthesis
|
||||
@end group
|
||||
@group
|
||||
(get-char-code-property ?\) 'bracket-type)
|
||||
@result{} c
|
||||
@end group
|
||||
@end example
|
||||
@end defun
|
||||
|
||||
|
|
|
@ -1805,9 +1805,6 @@ with references to further information.
|
|||
@item custom-variable-p
|
||||
@xref{Variable Definitions, custom-variable-p}.
|
||||
|
||||
@item display-table-p
|
||||
@xref{Display Tables, display-table-p}.
|
||||
|
||||
@item floatp
|
||||
@xref{Predicates on Numbers, floatp}.
|
||||
|
||||
|
|
|
@ -1213,37 +1213,34 @@ return value is @code{nil}.
|
|||
zone.
|
||||
|
||||
@cindex epoch
|
||||
Most of these functions represent time as a list of either four
|
||||
integers, @code{(@var{sec-high} @var{sec-low} @var{microsec}
|
||||
@var{picosec})}, or of three
|
||||
integers, @code{(@var{sec-high} @var{sec-low} @var{microsec})}, or of
|
||||
two integers, @code{(@var{sec-high} @var{sec-low})}. The integers
|
||||
@var{sec-high} and @var{sec-low} give the high and low bits of an
|
||||
integer number of seconds. This integer,
|
||||
Most of these functions represent time as a list of four integers
|
||||
@code{(@var{sec-high} @var{sec-low} @var{microsec} @var{picosec})}.
|
||||
This represents the number of seconds from the @dfn{epoch} (January
|
||||
1, 1970 at 00:00 UTC), using the formula:
|
||||
@ifnottex
|
||||
@var{high} * 2**16 + @var{low},
|
||||
@var{high} * 2**16 + @var{low} + @var{micro} * 10**@minus{}6 +
|
||||
@var{pico} * 10**@minus{}12.
|
||||
@end ifnottex
|
||||
@tex
|
||||
$high*2^{16}+low$,
|
||||
$high*2^{16} + low + micro*10^{-6} + pico*10^{-12}$.
|
||||
@end tex
|
||||
is the number of seconds from the @dfn{epoch} (0:00 January 1, 1970
|
||||
UTC) to the specified time. The third list element @var{microsec}, if
|
||||
present, gives the number of microseconds from the start of that
|
||||
second to the specified time.
|
||||
Similarly, the fourth list element @var{picosec}, if present, gives
|
||||
the number of picoseconds from the start of that microsecond to the
|
||||
specified time.
|
||||
The return value of @code{current-time} represents time using this
|
||||
form, as do the timestamps in the return values of other functions
|
||||
such as @code{file-attributes} (@pxref{Definition of
|
||||
file-attributes}). In some cases, functions may return two- or
|
||||
three-element lists, with omitted @var{microsec} and @var{picosec}
|
||||
components defaulting to zero.
|
||||
|
||||
The return value of @code{current-time} represents time using four
|
||||
integers, as do the timestamps in the return value of
|
||||
@code{file-attributes} (@pxref{Definition of
|
||||
file-attributes}). In function arguments, e.g., the @var{time-value}
|
||||
argument to @code{current-time-string}, two-, three-, and four-integer
|
||||
lists are accepted. You can convert times from the list
|
||||
representation into standard human-readable strings using
|
||||
@code{current-time-string}, or to other forms using the
|
||||
@code{decode-time} and @code{format-time-string} functions documented
|
||||
in the following sections.
|
||||
@cindex time value
|
||||
Function arguments, e.g., the @var{time-value} argument to
|
||||
@code{current-time-string}, accept a more-general @dfn{time value}
|
||||
format, which can be a list of integers as above, or a single number
|
||||
for seconds since the epoch, or @code{nil} for the current time. You
|
||||
can convert a time value into a human-readable string using
|
||||
@code{current-time-string} and @code{format-time-string}, into a list
|
||||
of integers using @code{seconds-to-time}, and into other forms using
|
||||
@code{decode-time} and @code{float-time}. These functions are
|
||||
described in the following sections.
|
||||
|
||||
@defun current-time-string &optional time-value
|
||||
This function returns the current time and date as a human-readable
|
||||
|
@ -1256,8 +1253,8 @@ characters from the beginning of the string rather than from the end,
|
|||
as the year might not have exactly four digits, and additional
|
||||
information may some day be added at the end.
|
||||
|
||||
The argument @var{time-value}, if given, specifies a time to format
|
||||
(represented as a list of integers), instead of the current time.
|
||||
The argument @var{time-value}, if given, specifies a time to format,
|
||||
instead of the current time.
|
||||
|
||||
@example
|
||||
@group
|
||||
|
@ -1279,11 +1276,19 @@ become available.
|
|||
@defun float-time &optional time-value
|
||||
This function returns the current time as a floating-point number of
|
||||
seconds since the epoch. The optional argument @var{time-value}, if
|
||||
given, specifies a time (represented as a list of integers) to convert
|
||||
instead of the current time.
|
||||
given, specifies a time to convert instead of the current time.
|
||||
|
||||
@emph{Warning}: Since the result is floating point, it may not be
|
||||
exact. Do not use this function if precise time stamps are required.
|
||||
|
||||
@code{time-to-seconds} is an alias for this function.
|
||||
@end defun
|
||||
|
||||
@defun seconds-to-time time-value
|
||||
This function converts a time value to list-of-integer form.
|
||||
For example, if @var{time-value} is a number, @code{(time-to-seconds
|
||||
(seconds-to-time @var{time-value}))} equals the number unless overflow
|
||||
or rounding errors occur.
|
||||
@end defun
|
||||
|
||||
@defun current-time-zone &optional time-value
|
||||
|
@ -1302,8 +1307,8 @@ adjustment, then the value is constant through time.
|
|||
If the operating system doesn't supply all the information necessary to
|
||||
compute the value, the unknown elements of the list are @code{nil}.
|
||||
|
||||
The argument @var{time-value}, if given, specifies a time (represented
|
||||
as a list of integers) to analyze instead of the current time.
|
||||
The argument @var{time-value}, if given, specifies a time value to
|
||||
analyze instead of the current time.
|
||||
@end defun
|
||||
|
||||
The current time zone is determined by the @env{TZ} environment
|
||||
|
@ -1316,15 +1321,15 @@ time zone.
|
|||
@section Time Conversion
|
||||
@cindex calendrical information
|
||||
|
||||
These functions convert time values (lists of two to four integers,
|
||||
as explained in the previous section) into calendrical information and
|
||||
vice versa.
|
||||
These functions convert time values (@pxref{Time of Day}) into
|
||||
calendrical information and vice versa.
|
||||
|
||||
Many 32-bit operating systems are limited to time values containing
|
||||
32 bits of information; these systems typically handle only the times
|
||||
from 1901-12-13 20:45:52 UTC through 2038-01-19 03:14:07 UTC@.
|
||||
However, 64-bit and some 32-bit operating systems have larger time
|
||||
values, and can represent times far in the past or future.
|
||||
Many 32-bit operating systems are limited to system times containing
|
||||
32 bits of information in their seconds component; these systems
|
||||
typically handle only the times from 1901-12-13 20:45:52 UTC through
|
||||
2038-01-19 03:14:07 UTC@. However, 64-bit and some 32-bit operating
|
||||
systems have larger seconds components, and can represent times far in
|
||||
the past or future.
|
||||
|
||||
Time conversion functions always use the Gregorian calendar, even
|
||||
for dates before the Gregorian calendar was introduced. Year numbers
|
||||
|
@ -1332,9 +1337,9 @@ count the number of years since the year 1 B.C., and do not skip zero
|
|||
as traditional Gregorian years do; for example, the year number
|
||||
@minus{}37 represents the Gregorian year 38 B.C@.
|
||||
|
||||
@defun decode-time &optional time
|
||||
@defun decode-time &optional time-value
|
||||
This function converts a time value into calendrical information. If
|
||||
you don't specify @var{time}, it decodes the current time. The return
|
||||
you don't specify @var{time-value}, it decodes the current time. The return
|
||||
value is a list of nine elements, as follows:
|
||||
|
||||
@example
|
||||
|
@ -1373,8 +1378,9 @@ Greenwich.
|
|||
|
||||
@defun encode-time seconds minutes hour day month year &optional zone
|
||||
This function is the inverse of @code{decode-time}. It converts seven
|
||||
items of calendrical data into a time value. For the meanings of the
|
||||
arguments, see the table above under @code{decode-time}.
|
||||
items of calendrical data into a list-of-integer time value. For the
|
||||
meanings of the arguments, see the table above under
|
||||
@code{decode-time}.
|
||||
|
||||
Year numbers less than 100 are not treated specially. If you want them
|
||||
to stand for years above 1900, or years above 2000, you must alter them
|
||||
|
@ -1418,9 +1424,11 @@ This function parses the time-string @var{string} and returns the
|
|||
corresponding time value.
|
||||
@end defun
|
||||
|
||||
@defun format-time-string format-string &optional time universal
|
||||
This function converts @var{time} (or the current time, if @var{time} is
|
||||
omitted) to a string according to @var{format-string}. The argument
|
||||
@defun format-time-string format-string &optional time-value universal
|
||||
|
||||
This function converts @var{time-value} (or the current time, if
|
||||
@var{time-value} is omitted) to a string according to
|
||||
@var{format-string}. The argument
|
||||
@var{format-string} may contain @samp{%}-sequences which say to
|
||||
substitute parts of the time. Here is a table of what the
|
||||
@samp{%}-sequences mean:
|
||||
|
@ -1540,12 +1548,6 @@ specified by @code{locale-coding-system} (@pxref{Locales}); after
|
|||
system.
|
||||
@end defun
|
||||
|
||||
@defun seconds-to-time seconds
|
||||
This function converts @var{seconds}, the number of seconds since the
|
||||
epoch, to a time value and returns that. To convert back, use
|
||||
@code{float-time} (@pxref{Time of Day}).
|
||||
@end defun
|
||||
|
||||
@defun format-seconds format-string seconds
|
||||
This function converts its argument @var{seconds} into a string of
|
||||
years, days, hours, etc., according to @var{format-string}. The
|
||||
|
@ -1619,7 +1621,7 @@ When called interactively, it prints the uptime in the echo area.
|
|||
|
||||
@defun get-internal-run-time
|
||||
This function returns the processor run time used by Emacs as a list
|
||||
of four integers: @code{(@var{high} @var{low} @var{microsec}
|
||||
of four integers: @code{(@var{sec-high} @var{sec-low} @var{microsec}
|
||||
@var{picosec})}, using the same format as @code{current-time}
|
||||
(@pxref{Time of Day}).
|
||||
|
||||
|
@ -1643,7 +1645,7 @@ interactively, it prints the duration in the echo area.
|
|||
@section Time Calculations
|
||||
|
||||
These functions perform calendrical computations using time values
|
||||
(the kind of list that @code{current-time} returns).
|
||||
(@pxref{Time of Day}).
|
||||
|
||||
@defun time-less-p t1 t2
|
||||
This returns @code{t} if time value @var{t1} is less than time value
|
||||
|
@ -1652,26 +1654,26 @@ This returns @code{t} if time value @var{t1} is less than time value
|
|||
|
||||
@defun time-subtract t1 t2
|
||||
This returns the time difference @var{t1} @minus{} @var{t2} between
|
||||
two time values, in the same format as a time value.
|
||||
two time values, as a time value.
|
||||
@end defun
|
||||
|
||||
@defun time-add t1 t2
|
||||
This returns the sum of two time values, one of which ought to
|
||||
represent a time difference rather than a point in time.
|
||||
This returns the sum of two time values, as a time value.
|
||||
One argument should represent a time difference rather than a point in time.
|
||||
Here is how to add a number of seconds to a time value:
|
||||
|
||||
@example
|
||||
(time-add @var{time} (seconds-to-time @var{seconds}))
|
||||
(time-add @var{time} @var{seconds})
|
||||
@end example
|
||||
@end defun
|
||||
|
||||
@defun time-to-days time
|
||||
@defun time-to-days time-value
|
||||
This function returns the number of days between the beginning of year
|
||||
1 and @var{time}.
|
||||
1 and @var{time-value}.
|
||||
@end defun
|
||||
|
||||
@defun time-to-day-in-year time
|
||||
This returns the day number within the year corresponding to @var{time}.
|
||||
@defun time-to-day-in-year time-value
|
||||
This returns the day number within the year corresponding to @var{time-value}.
|
||||
@end defun
|
||||
|
||||
@defun date-leap-year-p year
|
||||
|
@ -1915,8 +1917,7 @@ idleness. Here's an example:
|
|||
(run-with-idle-timer
|
||||
;; Compute an idle time @var{break-length}
|
||||
;; more than the current value.
|
||||
(time-add (current-idle-time)
|
||||
(seconds-to-time @var{break-length}))
|
||||
(time-add (current-idle-time) @var{break-length})
|
||||
nil
|
||||
'my-timer-function))))
|
||||
@end example
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue