Merge branch 'master' into xwidget

This commit is contained in:
Joakim Verona 2014-12-23 17:03:28 +01:00
commit 5f46725992
859 changed files with 159975 additions and 39836 deletions

View file

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

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

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

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

View file

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

View file

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

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,2 +0,0 @@
*.map
*.el

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

@ -1,3 +0,0 @@
*.elc
unidata.txt

View 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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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]
}
' "${@?}"

View file

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

View file

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

View file

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

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -120,7 +120,7 @@ the Emacs manual.
@include fortran-xtra.texi
@include msdog-xtra.texi
@include msdos-xtra.texi
@lowersections
@end iftex

View file

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

View file

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

View file

@ -0,0 +1,2 @@
@c configure generates emacsver.texi from emacsver.texi.in via a Makefile rule
@set EMACSVER @version@

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,13 +0,0 @@
texput.log
elisp.??
elisp.???
config.log
config.cache
config.status
Makefile
makefile
elisp
elisp-?
elisp-??
elisp1*
elisp2*

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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