1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-05 11:45:45 +00:00

merged from trunk

This commit is contained in:
Joakim Verona 2010-06-14 11:48:51 +02:00
commit c05c21ed10
361 changed files with 17098 additions and 21866 deletions

220
ChangeLog
View File

@ -1,3 +1,214 @@
2010-06-12 Glenn Morris <rgm@gnu.org>
* Makefile.in (install-arch-indep): Delete any old info .gz files first.
2010-06-11 Glenn Morris <rgm@gnu.org>
* configure.in (--without-compress-info): New option.
(GZIP_INFO): New output variable.
* Makefile.in (GZIP_INFO): New, set by configure.
(install-arch-indep): Don't gzip info pages if GZIP_INFO is nil.
Handle man pages in the same way.
2010-06-10 Glenn Morris <rgm@gnu.org>
* Makefile.in (install-arch-indep): Gzip the info files too.
* make-dist: Remove references to non-existent directories and files.
2010-06-08 Dan Nicolaescu <dann@ics.uci.edu>
* configure.in: Include <strings.h> and <string.h> instead of
"strings.h" and "string.h".
2010-06-06 Dan Nicolaescu <dann@ics.uci.edu>
* configure.in: Remove code dealing with BSTRING.
2010-06-03 Dan Nicolaescu <dann@ics.uci.edu>
* configure.in (AC_PREREQ): Require autoconf 2.65.
* configure.in (unxec): Do not define and substitute.
(UNEXEC_OBJ): New output variable, replaces cpp UNEXEC.
2010-06-03 Glenn Morris <rgm@gnu.org>
* configure.in (AH_BOTTOM): Remove NOT_C_CODE test, it is always true.
2010-06-02 Dan Nicolaescu <dann@ics.uci.edu>
Fix alloca definition when using gcc on non-gnu systems.
* configure.in: Use the code sequence indicated by "info autoconf"
for alloca (bug#6170).
2010-05-30 Stefan Monnier <monnier@iro.umontreal.ca>
* .bzrignore: Ignore new files from trunk, which appear if you use
colocated branches (i.e. "bzr switch").
2010-05-28 Glenn Morris <rgm@gnu.org>
* configure.in: Simplify some of the $canonical tests.
2010-05-27 Glenn Morris <rgm@gnu.org>
* config.bat: Do not preprocess src/Makefile.in.
* configure.in: Do not preprocess src/Makefile.in.
(cpp_undefs, CPP_NEED_TRADITIONAL): Remove.
(AC_EGREP_CPP): Test no longer needed.
* make-dist: No more Makefile.c files.
2010-05-26 Glenn Morris <rgm@gnu.org>
* configure.in (YMF_PASS_LDFLAGS): Remove.
(PRE_EDIT_LDFLAGS, POST_EDIT_LDFLAGS): New output variables.
* configure.in (CPPFLAGS, CFLAGS, REAL_CFLAGS):
Add $GNUSTEP_LOCAL_HEADERS.
(LDFLAGS, LD_SWITCH_SYSTEM_TEMACS): Add $GNUSTEP_LOCAL_LIBRARIES.
* configure.in (NS_IMPL_GNUSTEP_INC, NS_IMPL_GNUSTEP_TEMACS_LDFLAGS)
(GNUSTEP_MAKEFILES): Remove.
(LD_SWITCH_SYSTEM_TEMACS): Move NS_IMPL_GNUSTEP_TEMACS_LDFLAGS
stuff to here.
2010-05-25 Glenn Morris <rgm@gnu.org>
* configure.in (LD_SWITCH_SYSTEM): Move some gnu-linux stuff...
(LD_SWITCH_SYSTEM_TEMACS): ... to here.
* configure.in (LD_SWITCH_SYSTEM_EXTRA): Remove.
(LD_SWITCH_SYSTEM_TEMACS): Put darwin stuff from LD_SWITCH_SYSTEM_EXTRA
here instead.
2010-05-24 Romain Francoise <romain@orebokech.com>
* make-dist: Look for version in src/emacs.c.
Use lisp/subr.el rather than lisp/version.el for location check.
2010-05-21 Glenn Morris <rgm@gnu.org>
* configure.in (MKDEPDIR): Parallel build tweak.
* configure.in (ns_frag): New output file.
* configure.in (OLDXMENU): Set to "nothing" if !HAVE_X11 || USE_GTK.
(OLDXMENU_TARGET): Set to empty if USE_GTK.
* configure.in (cannot_dump): New output variable.
2010-05-20 enami tsugutomo <tsugutomo.enami@jp.sony.com>
* configure.in: On NetBSD, if terminfo is found, use it in
preference to termcap. (Bug#6190)
2010-05-20 Glenn Morris <rgm@gnu.org>
* make-dist (src): Include *.mk.
* config.bat: Concatenate deps.mk onto the end of src/Makefile.
* configure.in (DEPFLAGS, MKDEPDIR): New output variables.
(deps_frag): New output file.
(AUTO_DEPEND): Remove this definition.
* configure.in (--with-gtk, --with-gcc): Remove option stubs.
2010-05-19 Glenn Morris <rgm@gnu.org>
* configure.in (LINKER, YMF_PASS_LDFLAGS): New output variables.
(ORDINARY_LINK): New AC_DEFINE.
(LIB_GCC): No need to set if ORDINARY_LINK.
2010-05-18 Glenn Morris <rgm@gnu.org>
* configure.in (POST_ALLOC_OBJ) [cygwin]: Omit vm-limit.o.
(POST_ALLOC_OBJ) [!cygwin]: Set to empty.
* config.bat (RALLOC_OBJ): Edit to empty if sys_malloc.
* configure.in (REL_ALLOC): Unset on gnu, gnu-linux if DOUG_LEA_MALLOC.
(RALLOC_OBJ): New output variable.
* config.bat (GMALLOC_OBJ, VMLIMIT_OBJ): Edit to empty if sys_malloc.
* configure.in (GMALLOC_OBJ, VMLIMIT_OBJ): New output variables.
2010-05-17 Stefan Monnier <monnier@iro.umontreal.ca>
* Makefile.in (src): Provide the name of the VCS file that witnesses
a pull.
($(srcdir)/src/config.in): Handle accidental removal of src/config.in.
2010-05-17 Glenn Morris <rgm@gnu.org>
* configure.in (OLDXMENU_DEPS): New output variable.
2010-05-16 Glenn Morris <rgm@gnu.org>
* configure.in (ns_appbindir, ns_appresdir): Set using $ns_appdir.
* configure.in (ns_appdir, ns_appbindir): Add trailing "/" to value.
* Makefile.in (install-arch-dep): Update for above change.
* Makefile.in (ns_appdir): Remove.
(install-arch-dep): Test $ns_appresdir instead of $ns_appdir.
* configure.in (TEMACS_LDFLAGS2): New output variable.
* configure.in (NS_IMPL_GNUSTEP_TEMACS_LDFLAGS): New output variable.
(START_FILES): Set to empty if NS_IMPL_GNUSTEP.
(GNUSTEP_SYSTEM_HEADERS, GNUSTEP_SYSTEM_LIBRARIES): Do not output,
nothing uses.
2010-05-16 Dan Nicolaescu <dann@ics.uci.edu>
* configure.in: Remove references to usg5-4 and bsd-common, $opsys
does not use them.
(X11R5_INHIBIT_I18N): Remove, unused.
2010-05-15 Glenn Morris <rgm@gnu.org>
* configure.in (LIBXMENU): Set to empty if !HAVE_X_WINDOWS.
* configure.in (FONT_OBJ): Set to empty if !HAVE_X_WINDOWS.
2010-05-15 Ken Raeburn <raeburn@raeburn.org>
* configure.in: Look for version string in its new location.
2010-05-15 Eli Zaretskii <eliz@gnu.org>
* config.bat: Remove support for DJGPP v1.x.
2010-05-15 Glenn Morris <rgm@gnu.org>
* configure.in (OLDXMENU_TARGET): New output variable.
* Makefile.in (install-arch-dep): Update odd NS rule for Emacs version.
* Makefile.in (install-arch-indep): Remove references to RCS, CVS,
and other files that no longer exist.
2010-05-14 Glenn Morris <rgm@gnu.org>
* configure.in (cpp_undefs): Add mktime, register, X11.
* configure.in (GPM_MOUSE_SUPPORT): Remove.
(MOUSE_SUPPORT, TOOLTIP_SUPPORT, WINDOW_SUPPORT): New output variables.
(HAVE_WINDOW_SYSTEM, HAVE_MOUSE): Move out of AC_BOTTOM.
* configure.in (NS_IMPL_GNUSTEP_INC): New output variable.
(GNUSTEP_MAKEFILES): Do not output.
2010-05-13 Glenn Morris <rgm@gnu.org>
* configure.in: Fix some paren typos.
* configure.in (OLDXMENU, LIBXMENU): Set to empty if !HAVE_MENUS.
* configure.in (LD_SWITCH_X_SITE, C_SWITCH_X_SITE): Do not define.
2010-05-12 Glenn Morris <rgm@gnu.org>
* configure.in (LIB_SRC_EXTRA_INSTALLABLES): Remove, unused.
@ -1950,6 +2161,10 @@
Update copyright year(s) in many files.
2006-04-01 Eli Zaretskii <eliz@gnu.org>
* configure: Regenerated.
2006-04-01 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
* configure.in (HAVE_XAW3D): Disable Xaw3d check if
@ -3910,6 +4125,11 @@
* make-dist: Unset EMACS_UNIBYTE, so Emacs runs in its default state.
Quote $EMACS, in case it's a program with args.
1999-06-15 Gerd Moellmann <gerd@gnu.org>
* configure.in (HAVE_GIF): Use libungif instead of libgif
because the former doesn't contain patented compression code.
1999-05-29 Richard M. Stallman <rms@gnu.org>
* configure.in: Delete the Kerberos stuff.

26
INSTALL
View File

@ -1,6 +1,7 @@
GNU Emacs Installation Guide
Copyright (C) 1992, 1994, 1996, 1997, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
See the end of the file for license conditions.
@ -686,8 +687,8 @@ when running make in the subdirectories.
CONFIGURATION BY HAND
Instead of running the `configure' program, you have to perform the
following steps.
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'.
@ -701,22 +702,15 @@ the appropriate system and architecture description files.
2) Edit `./src/config.h' to set the right options for your system. If
you need to override any of the definitions in the s/*.h and m/*.h
files for your system and machine, do so by editing config.h, not by
changing the s/*.h and m/*.h files. Occasionally you may need to
redefine parameters used in `./lib-src/movemail.c'.
changing the s/*.h and m/*.h files.
3) Create src/Makefile and lib-src/Makefile from the corresponding
`Makefile.in' files. First copy `Makefile.in' to `Makefile.c',
then edit in appropriate substitutions for the @...@ constructs,
and then copy the shell commands near the end of `configure'
that run cpp to construct `Makefile'.
4) Create `Makefile' files in various other directories
from the corresponding `Makefile.in' files. This isn't so hard,
just a matter of substitution.
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.in' by the `autoconf'
program. You need version 2.51 or newer of `autoconf' to rebuild
`configure'.
program. You need at least the version of autoconf specified in the
AC_PREREQ(...) command to rebuild `configure' from `configure.in'.
BUILDING GNU EMACS BY HAND

View File

@ -164,7 +164,6 @@ VPATH=@srcdir@
x_default_search_path=@x_default_search_path@
# Location to install Emacs.app under NeXT/Open/GNUstep / Cocoa
ns_appdir=@ns_appdir@
ns_appbindir=@ns_appbindir@
ns_appresdir=@ns_appresdir@
@ -244,6 +243,8 @@ INSTALL_STRIP =
# We use gzip to compress installed .el files.
GZIP_PROG = @GZIP_PROG@
# If non-nil, gzip the installed Info and man pages.
GZIP_INFO = @GZIP_INFO@
# ============================= Targets ==============================
@ -280,6 +281,9 @@ all: ${SUBDIR} leim
removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g'
# Generate epaths.h from epaths.in. This target is invoked by `configure'.
# See comments in configure.in for why it is done this way, as opposed
# to just letting configure generate epaths.h from epaths.in in a
# similar way to how Makefile is made from Makefile.in.
epaths-force: FRC
@(lisppath=`echo ${lisppath} | ${removenullpaths}` ; \
buildlisppath=`echo ${buildlisppath} | ${removenullpaths}` ; \
@ -336,9 +340,13 @@ src: Makefile FRC
CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="$$boot"; \
fi;
if [ -r .bzr/checkout/dirstate ]; then \
vcswitness="$$(pwd)/.bzr/checkout/dirstate"; \
fi; \
cd $@; $(MAKE) all $(MFLAGS) \
CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS=""
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="" \
VCSWITNESS="$$vcswitness"
blessmail: Makefile src FRC
cd lib-src; $(MAKE) maybe-blessmail $(MFLAGS) \
@ -370,7 +378,11 @@ $(srcdir)/configure: $(AUTOCONF_INPUTS)
cd ${srcdir} && autoconf
$(srcdir)/src/config.in: $(srcdir)/src/stamp-h.in
@true
@ # Usually, there's no need to rebuild src/config.in just
@ # because stamp-h.in has changed (since building stamp-h.in
@ # refreshes config.in as well), but if config.in is missing
@ # then we really need to do something more.
[ -r "$@" ] || ( cd ${srcdir} && autoheader )
$(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
cd ${srcdir} && autoheader
rm -f $(srcdir)/src/stamp-h.in
@ -418,17 +430,22 @@ install-arch-dep: mkdir
${INSTALL_DATA} lib-src/$$f $(DESTDIR)${archlibdir}/$$f; \
else true; fi ; \
done
if test "${ns_appdir}" != ""; then \
if test "${ns_appresdir}" != ""; then \
( cd ${ns_appresdir} ; \
if test -d share/emacs ; then dir=share/emacs/*/*; $(MV_DIRS); fi;\
if test -d share/info ; then dir=share/info; $(MV_DIRS) ; fi ; \
rm -fr share ) ; \
( cd ${ns_appbindir}/libexec ; dir=emacs/*/*/* ; $(MV_DIRS); \
( cd ${ns_appbindir}libexec ; dir=emacs/*/*/* ; $(MV_DIRS); \
rm -fr emacs ) ; \
( cd ${ns_appbindir}/bin ; rm -f emacs emacs-23* ; \
( cd ${ns_appbindir}bin ; rm -f emacs emacs-24* ; \
ln -sf ../libexec/* .) ; \
else true ; fi
## FIXME is the emacs-24* bit above really necessary and correct?
## What if I have 24.1 and 24.2 installed at the same time?
## In any case, it should use something like echo $version | sed 's/\..*//'
## instead of hard-coding a version.
## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html
## Needs to be the user running install, so configure can't set it.
set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \
@ -476,11 +493,8 @@ install-arch-indep: mkdir info install-etc
| (cd $${dest}; umask 022; \
tar -xvf - && cat > /dev/null) || exit 1; \
find $${dest} -exec chown $${installuser} {} ';' ;\
for subdir in `find $${dest} -type d ! -name RCS ! -name CVS -print` ; do \
for subdir in `find $${dest} -type d -print` ; do \
chmod a+rx $${subdir} ; \
rm -rf $${subdir}/RCS ; \
rm -rf $${subdir}/CVS ; \
rm -f $${subdir}/.cvsignore ; \
rm -f $${subdir}/.gitignore ; \
rm -f $${subdir}/.arch-inventory ; \
rm -f $${subdir}/.DS_Store ; \
@ -492,7 +506,6 @@ install-arch-indep: mkdir info install-etc
rm -f $${subdir}/[mM]akefile*.c $${subdir}/[mM]akefile*[.-]in \
$${subdir}/[mM]akefile ; \
rm -f $${subdir}/ChangeLog* ; \
rm -f $${subdir}/dired.todo ; \
done) ; \
done
-rm -f $(DESTDIR)${lispdir}/subdirs.el
@ -569,6 +582,10 @@ install-arch-indep: mkdir info install-etc
for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
${INSTALL_DATA} $$f $(DESTDIR)${infodir}/$$f; \
chmod a+r $(DESTDIR)${infodir}/$$f; \
if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \
rm -f $(DESTDIR)${infodir}/$$f.gz; \
${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \
else true; fi; \
done; \
done); \
else true; fi
@ -588,7 +605,11 @@ install-arch-indep: mkdir info install-etc
for page in ${MAN_PAGES}; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${page}; \
chmod a+r $(DESTDIR)${man1dir}/$${page}); \
chmod a+r $(DESTDIR)${man1dir}/$${page}; \
if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \
rm -f $(DESTDIR)${man1dir}/$${page}.gz; \
${GZIP_PROG} -9n $(DESTDIR)${man1dir}/$${page}; \
else true; fi ); \
done
## Install those items from etc/ that need to end up elsewhere.

View File

@ -22,7 +22,9 @@ NS_IMPL_GNUSTEP Compile support for GNUstep implementation of NS GUI API.
NS_IMPL_COCOA Compile support for Cocoa (Apple) implementation of NS GUI API.
HAVE_X11 Compile support for the X11 GUI.
HAVE_X_WINDOWS Compile support for X Window system
X11 ?? Makefile.in suggests it's equivalent to HAVE_X11
(It looks like, nowadays, if HAVE_X11 is set, HAVE_X_WINDOWS must
be, and vice versa. At least, this is true for configure, and
msdos; not sure about nt.)
USE_LUCID Use the Lucid toolkit for menus&scrollbars. Requires HAVE_X11.
USE_MOTIF Use the Motif toolkit for menus&scrollbars. Requires HAVE_X11.
USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11.
@ -47,7 +49,6 @@ subprocesses System can use subprocesses (for M-x shell for example). Define
USE_LISP_UNION_TYPE Define it in lisp.h to make Lisp_Object be a union type instead of the default int.
** System specific macros, decribed in detail in src/s/template.h
BSTRING
CLASH_DETECTION
COFF
FIRST_PTY_LETTER
@ -84,6 +85,9 @@ BCOPY_DOWNWARD_SAFE
BCOPY_UPWARD_SAFE
BITS_PER_EMACS_INT
BITS_PER_LONG
BITS_PER_CHAR
BITS_PER_SHORT
BITS_PER_INT
BROKEN_DATAGRAM_SOCKETS
BROKEN_FIONREAD
BROKEN_GET_CURRENT_DIR_NAME
@ -98,7 +102,6 @@ BSD4_2
BSD4_3
BSD_SYSTEM
CLASH_DETECTION
C_SWITCH_X_SYSTEM
DATA_SEG_BITS
DATA_START
DBL_MIN_REPLACEMENT
@ -114,7 +117,6 @@ EMACS_CONFIGURATION
EMACS_CONFIG_OPTIONS
EMACS_INT
EMACS_UINT
END_FILES_1
FILE_SYSTEM_CASE
FLOAT_CHECK_DOMAIN
FSCALE
@ -128,12 +130,10 @@ GNU_LIBRARY_PENDING_OUTPUT_COUNT
GNU_LINUX
GNU_MALLOC
HAVE_AIX_SMT_EXP
HAVE_ALLOCA
HAVE_BCMP
HAVE_BCOPY
HAVE_CBRT
HAVE_CLOSEDIR
HAVE_CRTIN
HAVE_DUP2
HAVE_EUIDACCESS
HAVE_FMOD
@ -154,9 +154,6 @@ HAVE_INDEX
HAVE_INET_SOCKETS
HAVE_INVERSE_HYPERBOLIC
HAVE_LIBKSTAT
HAVE_LIBNCURSES
HAVE_LIBPTHREADS
HAVE_LIBXMU
HAVE_LIMITS_H
HAVE_LINUX_VERSION_H
HAVE_LOGB
@ -228,7 +225,6 @@ MIN_PTY_KERNEL_VERSION -- only used on Mac
MODE_LINE_BINARY_TEXT
MUST_UNDEF__STDC__
NLIST_STRUCT
NOT_C_CODE
NO_ABORT
NO_EDITRES
NO_MATHERR
@ -266,8 +262,6 @@ SIGQUIT
SIGTRAP
SIGTYPE
SOLARIS2
START_FILES
START_FILES_1
STDC_HEADERS
SYMS_SYSTEM
SYSTEM_PURESIZE_EXTRA
@ -282,7 +276,6 @@ TIME_WITH_SYS_TIME
TIOCSIGSEND
TM_IN_SYS_TIME
ULIMIT_BREAK_VALUE
UNEXEC
UNIX98_PTYS
USE_CRT_DLL
USE_TOOLKIT_SCROLL_BARS

View File

@ -1,3 +1,43 @@
2010-06-12 Eli Zaretskii <eliz@gnu.org>
* unidata/bidimirror.awk: New file.
* unidata/BidiMirroring.txt: New file from
http://www.unicode.org/Public/6.0.0/ucd/BidiMirroring-6.0.0d1.txt.
* unidata/Makefile.in: (../../src/bidimirror.h): New target.
(all): Depend on ../../src/biditype.h and ../../src/bidimirror.h.
* unidata/makefile.w32-in (../../src/bidimirror.h): New target.
(all): Depend on ../../src/biditype.h and ../../src/bidimirror.h.
* unidata/biditype.awk: New file.
* unidata/Makefile.in (../../src/biditype.h): New target.
* unidata/makefile.w32-in (../../src/biditype.h): New target.
2010-06-09 Juanma Barranquero <lekktu@gmail.com>
* unidata/UnicodeData.txt: Update from
http://www.unicode.org/Public/6.0.0/ucd/UnicodeData-6.0.0d5.txt
2010-05-27 Glenn Morris <rgm@gnu.org>
* quick-install-emacs (AVOID): No more Makefile.c files.
* notes/cpp: Remove file.
2010-05-15 Ken Raeburn <raeburn@raeburn.org>
* admin.el (set-version, set-copyright): Update emacs.c instead of
version.el.
* make-tarball.txt: Update filename list in step 6.
* quick-install-emacs: Scan emacs.c instead of version.el for
version string.
2010-05-07 Chong Yidong <cyd@stupidchicken.com>
* Version 23.2 released.

View File

@ -60,8 +60,8 @@ Root must be the root of an Emacs source tree."
(interactive "DEmacs root directory: \nsVersion number: ")
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(error "%s doesn't seem to be the root of an Emacs source tree" root))
(set-version-in-file root "lisp/version.el" version
(rx (and "emacs-version" (0+ space)
(set-version-in-file root "src/emacs.c" version
(rx (and "emacs_version" (0+ (not (in ?\")))
?\" (submatch (1+ (not (in ?\")))) ?\")))
(set-version-in-file root "README" version
(rx (and "version" (1+ space)
@ -184,8 +184,8 @@ Root must be the root of an Emacs source tree."
(format-time-string "%Y")))))
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(error "%s doesn't seem to be the root of an Emacs source tree" root))
(set-version-in-file root "lisp/version.el" copyright
(rx (and "emacs-copyright" (0+ space)
(set-version-in-file root "src/emacs.c" copyright
(rx (and "emacs_copyright" (0+ (not (in ?\")))
?\" (submatch (1+ (not (in ?\")))) ?\")))
(set-version-in-file root "lib-src/ebrowse.c" copyright
(rx (and "emacs_copyright" (0+ (not (in ?\")))

View File

@ -31,7 +31,7 @@ For each step, check for possible errors.
make bootstrap
6. Commit configure, README, doc/emacs/emacs.texi,
doc/lispref/elisp.texi, etc/AUTHORS, lisp/version.el, nt/emacs.rc,
doc/lispref/elisp.texi, etc/AUTHORS, src/emacs.c, nt/emacs.rc,
and lisp/cus-edit.el (if modified). Copy lisp/loaddefs.el to
lisp/ldefs-boot.el and commit lisp/ldefs-boot.el. For a release,
also commit the ChangeLog files in all directories.

View File

@ -149,6 +149,23 @@ Discard mails matching:
^X-GNU-PR-Message: (transcript|closed)
** Not receiving messages in response to your control commands?
The messages debbugs sends out in response to control-server commands
always have headers To: your@email, and Cc: tracker@debbugs.gnu.org
(the latter is an alias for the emacs-bug-tracker mailing list).
These are also the addresses to which a copy of the response is sent.
(In general, there need not be any relation between the To: and Cc:
headers visible in a message and where debbugs actually sends it.)
If you used an X-Debbugs-No-Ack header, however, a copy is _not_ sent
to you, but the To: header is unchanged. If you are subscribed to the
emacs-bug-tracker mailing list and have duplicate suppression turned
on, the presence of your address in the To: header will cause Mailman
to not send you a list copy, because it thinks you have received a
direct copy. If you used X-Debbugs-No-Ack, this is not the case, and
you won't get any copy at all. If this bothers you, don't use both
X-Debbugs-No-Ack and Mailman duplicate suppression for the
emacs-bug-tracker mailing list, just pick one or the other.
** How to avoid multiple copies of mails.
If you reply to reports in the normal way, this should work fine.
Basically, reply only to the numbered bug address (and any individual
@ -553,9 +570,13 @@ All discarded messages are stored in /var/lib/mailman/spam.
If a non-spam message accidentally gets discarded, just do:
cat /var/lib/mailman/spam/not-really-spam.msg | /usr/lib/debbugs/receive
chown Debian-debbugs:Debian-debbugs /var/lib/debbugs/spool/incoming/*
... check it works ...
mv /var/lib/mailman/spam/not-really-spam.msg /var/lib/mailman/not-spam/
Also check that the sender was not added to the auto-discard/reject list
in the debbugs-submit Mailman interface.
** Administrivia
The debbugs-submit list should have the administrivia option off,

40
admin/notes/bzr Normal file
View File

@ -0,0 +1,40 @@
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-23" branch
and you have a bug-fix appropriate for the next Emacs-23.x release,
install it only on the emacs-23 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
* Backporting a bug-fix from the trunk to a branch (e.g. "emacs-23").
Label the commit as a backport, e.g. by starting 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

View File

@ -1,14 +0,0 @@
ttn 2003-04-09
we use a C preprocesor not only in the normal compilation of .c files
into object files, but also for creating src/Makefile.
(delimited by comment "start of cpp stuff"). some cpp implementations
insert whitespace in between tokens.
during makefile creation, the preprocessor symbol NOT_C_CODE is defined.
this should not be defined for normal .c file compilation.
there has been discussion on eliminating this use of cpp and relying
solely on autoconf processing. rms says to leave it be.
;;; arch-tag: d654291e-9fc8-41b7-ab0c-d3cde842a8e0

View File

@ -6,11 +6,6 @@ See the end of the file for license conditions.
New font handling mechanism with font backend method
----------------------------------------------------
The configure script, if invoked with "--enable-font-backend", checks
if libraries freetype and fontconfig exist. If they are both
available, macro "USE_FONT_BACKEND" is defined in src/config.h. In
that case, the existence of Xft library is checked too.
The new files are:
font.h -- header providing font-backend related structures
(most important ones are "struct font" and "struct
@ -44,10 +39,6 @@ Fontconfig are also available on w32, what we need may be:
ftw32font.c -- font-driver on w32 directly using FreeType fonts
utilizing methods provided by ftfont.c.
And, for those to work, macterm.c and macfns.c must be changed by the
similar way as xterm.c and xfns.c (the parts "#ifdef USE_FONT_BACKEND"
... "#endif" should be checked).
It may be interesting if Emacs supports a frame buffer directly and
has these font driver.
ftfbfont.c -- font-driver on FB for FreeType fonts.

View File

@ -17,8 +17,6 @@ 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.
** If appropriate, add an entry to lisp/Makefile.in ELCFILES.
** If appropriate, check that the file compiles OK and that Emacs
builds fine with it. Address any compilation warnings.

View File

@ -1,8 +1,8 @@
#!/bin/sh
### quick-install-emacs --- do a halfway-decent job of installing emacs quickly
## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
## Free Software Foundation, Inc.
## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
## 2010 Free Software Foundation, Inc.
## Author: Miles Bader <miles@gnu.org>
@ -31,7 +31,7 @@
PUBLIC_LIBSRC_BINARIES='b2m emacsclient etags ctags ebrowse'
PUBLIC_LIBSRC_SCRIPTS='grep-changelog rcs-checkin'
AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile$ Makefile.in$ Makefile.c$ makefile$ makefile.w32-in$ stamp-subdir [.]cvsignore [.]arch-ids [{]arch[}] [.][cho]$ make-docfile testfile test-distrib"
AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile$ Makefile.in$ makefile$ makefile.w32-in$ stamp-subdir [.]cvsignore [.]arch-ids [{]arch[}] [.][cho]$ make-docfile testfile test-distrib"
# Prune old binaries lying around in the source tree
PRUNE=no
@ -171,7 +171,7 @@ test x"$SRC" = x && { SRC="`get_config_var srcdir`" || exit 4 ; }
test x"$prefix" = x && { prefix="`get_config_var prefix`" || exit 4 ; }
test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; }
VERSION=`grep 'defconst[ ]*emacs-version' $SRC/lisp/version.el \
VERSION=`grep 'char emacs_version' $SRC/src/emacs.c \
| sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'`
DST_SHARE="$prefix/share/emacs/$VERSION"

View File

@ -0,0 +1,597 @@
# BidiMirroring-6.0.0.txt
# Date: 2009-11-10, 17:09:00 PST [KW]
#
# Bidi_Mirroring_Glyph Property
#
# This file is an informative contributory data file in the
# Unicode Character Database.
#
# Copyright (c) 1991-2009 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# This data file lists characters that have the Bidi_Mirrored=True property
# value, for which there is another Unicode character that typically has a glyph
# that is the mirror image of the original character's glyph.
#
# The repertoire covered by the file is Unicode 6.0.0.
#
# The file contains a list of lines with mappings from one code point
# to another one for character-based mirroring.
# Note that for "real" mirroring, a rendering engine needs to select
# appropriate alternative glyphs, and that many Unicode characters do not
# have a mirror-image Unicode character.
#
# Each mapping line contains two fields, separated by a semicolon (';').
# Each of the two fields contains a code point represented as a
# variable-length hexadecimal value with 4 to 6 digits.
# A comment indicates where the characters are "BEST FIT" mirroring.
#
# Code points for which Bidi_Mirrored=True, but for which no appropriate
# characters exist with mirrored glyphs, are
# listed as comments at the end of the file.
#
# Formally, the default value of the Bidi_Mirroring_Glyph property
# for each code point is the code point itself, unless a mapping to
# some other character is specified in this data file. When a code
# point has the default value for the Bidi_Mirroring_Glyph property,
# that means that no other character exists whose glyph is suitable
# for character-based mirroring.
#
# For information on bidi mirroring, see UAX #9: Bidirectional Algorithm,
# at http://www.unicode.org/unicode/reports/tr9/
#
# This file was originally created by Markus Scherer.
# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler.
#
# ############################################################
0028; 0029 # LEFT PARENTHESIS
0029; 0028 # RIGHT PARENTHESIS
003C; 003E # LESS-THAN SIGN
003E; 003C # GREATER-THAN SIGN
005B; 005D # LEFT SQUARE BRACKET
005D; 005B # RIGHT SQUARE BRACKET
007B; 007D # LEFT CURLY BRACKET
007D; 007B # RIGHT CURLY BRACKET
00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0F3A; 0F3B # TIBETAN MARK GUG RTAGS GYON
0F3B; 0F3A # TIBETAN MARK GUG RTAGS GYAS
0F3C; 0F3D # TIBETAN MARK ANG KHANG GYON
0F3D; 0F3C # TIBETAN MARK ANG KHANG GYAS
169B; 169C # OGHAM FEATHER MARK
169C; 169B # OGHAM REVERSED FEATHER MARK
2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
2045; 2046 # LEFT SQUARE BRACKET WITH QUILL
2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL
207D; 207E # SUPERSCRIPT LEFT PARENTHESIS
207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS
208D; 208E # SUBSCRIPT LEFT PARENTHESIS
208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
2208; 220B # ELEMENT OF
2209; 220C # NOT AN ELEMENT OF
220A; 220D # SMALL ELEMENT OF
220B; 2208 # CONTAINS AS MEMBER
220C; 2209 # DOES NOT CONTAIN AS MEMBER
220D; 220A # SMALL CONTAINS AS MEMBER
2215; 29F5 # DIVISION SLASH
223C; 223D # TILDE OPERATOR
223D; 223C # REVERSED TILDE
2243; 22CD # ASYMPTOTICALLY EQUAL TO
2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO
2254; 2255 # COLON EQUALS
2255; 2254 # EQUALS COLON
2264; 2265 # LESS-THAN OR EQUAL TO
2265; 2264 # GREATER-THAN OR EQUAL TO
2266; 2267 # LESS-THAN OVER EQUAL TO
2267; 2266 # GREATER-THAN OVER EQUAL TO
2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO
2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO
226A; 226B # MUCH LESS-THAN
226B; 226A # MUCH GREATER-THAN
226E; 226F # [BEST FIT] NOT LESS-THAN
226F; 226E # [BEST FIT] NOT GREATER-THAN
2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO
2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO
2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO
2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO
2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO
2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO
2276; 2277 # LESS-THAN OR GREATER-THAN
2277; 2276 # GREATER-THAN OR LESS-THAN
2278; 2279 # [BEST FIT] NEITHER LESS-THAN NOR GREATER-THAN
2279; 2278 # [BEST FIT] NEITHER GREATER-THAN NOR LESS-THAN
227A; 227B # PRECEDES
227B; 227A # SUCCEEDS
227C; 227D # PRECEDES OR EQUAL TO
227D; 227C # SUCCEEDS OR EQUAL TO
227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO
227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO
2280; 2281 # [BEST FIT] DOES NOT PRECEDE
2281; 2280 # [BEST FIT] DOES NOT SUCCEED
2282; 2283 # SUBSET OF
2283; 2282 # SUPERSET OF
2284; 2285 # [BEST FIT] NOT A SUBSET OF
2285; 2284 # [BEST FIT] NOT A SUPERSET OF
2286; 2287 # SUBSET OF OR EQUAL TO
2287; 2286 # SUPERSET OF OR EQUAL TO
2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO
2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO
228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO
228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO
228F; 2290 # SQUARE IMAGE OF
2290; 228F # SQUARE ORIGINAL OF
2291; 2292 # SQUARE IMAGE OF OR EQUAL TO
2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO
2298; 29B8 # CIRCLED DIVISION SLASH
22A2; 22A3 # RIGHT TACK
22A3; 22A2 # LEFT TACK
22A6; 2ADE # ASSERTION
22A8; 2AE4 # TRUE
22A9; 2AE3 # FORCES
22AB; 2AE5 # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
22B0; 22B1 # PRECEDES UNDER RELATION
22B1; 22B0 # SUCCEEDS UNDER RELATION
22B2; 22B3 # NORMAL SUBGROUP OF
22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP
22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO
22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
22B6; 22B7 # ORIGINAL OF
22B7; 22B6 # IMAGE OF
22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
22CB; 22CC # LEFT SEMIDIRECT PRODUCT
22CC; 22CB # RIGHT SEMIDIRECT PRODUCT
22CD; 2243 # REVERSED TILDE EQUALS
22D0; 22D1 # DOUBLE SUBSET
22D1; 22D0 # DOUBLE SUPERSET
22D6; 22D7 # LESS-THAN WITH DOT
22D7; 22D6 # GREATER-THAN WITH DOT
22D8; 22D9 # VERY MUCH LESS-THAN
22D9; 22D8 # VERY MUCH GREATER-THAN
22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN
22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN
22DC; 22DD # EQUAL TO OR LESS-THAN
22DD; 22DC # EQUAL TO OR GREATER-THAN
22DE; 22DF # EQUAL TO OR PRECEDES
22DF; 22DE # EQUAL TO OR SUCCEEDS
22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL
22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL
22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO
22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO
22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO
22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO
22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO
22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO
22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO
22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO
22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF
22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP
22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO
22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS
22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS
22F2; 22FA # ELEMENT OF WITH LONG HORIZONTAL STROKE
22F3; 22FB # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22F4; 22FC # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22F6; 22FD # ELEMENT OF WITH OVERBAR
22F7; 22FE # SMALL ELEMENT OF WITH OVERBAR
22FA; 22F2 # CONTAINS WITH LONG HORIZONTAL STROKE
22FB; 22F3 # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22FC; 22F4 # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
22FD; 22F6 # CONTAINS WITH OVERBAR
22FE; 22F7 # SMALL CONTAINS WITH OVERBAR
2308; 2309 # LEFT CEILING
2309; 2308 # RIGHT CEILING
230A; 230B # LEFT FLOOR
230B; 230A # RIGHT FLOOR
2329; 232A # LEFT-POINTING ANGLE BRACKET
232A; 2329 # RIGHT-POINTING ANGLE BRACKET
2768; 2769 # MEDIUM LEFT PARENTHESIS ORNAMENT
2769; 2768 # MEDIUM RIGHT PARENTHESIS ORNAMENT
276A; 276B # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
276B; 276A # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
276C; 276D # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
276D; 276C # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
276E; 276F # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
276F; 276E # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
2770; 2771 # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
2771; 2770 # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
2772; 2773 # LIGHT LEFT TORTOISE SHELL BRACKET
2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET
2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT
2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT
27C3; 27C4 # OPEN SUBSET
27C4; 27C3 # OPEN SUPERSET
27C5; 27C6 # LEFT S-SHAPED BAG DELIMITER
27C6; 27C5 # RIGHT S-SHAPED BAG DELIMITER
27C8; 27C9 # REVERSE SOLIDUS PRECEDING SUBSET
27C9; 27C8 # SUPERSET PRECEDING SOLIDUS
27D5; 27D6 # LEFT OUTER JOIN
27D6; 27D5 # RIGHT OUTER JOIN
27DD; 27DE # LONG RIGHT TACK
27DE; 27DD # LONG LEFT TACK
27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
27E3; 27E2 # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
27E4; 27E5 # WHITE SQUARE WITH LEFTWARDS TICK
27E5; 27E4 # WHITE SQUARE WITH RIGHTWARDS TICK
27E6; 27E7 # MATHEMATICAL LEFT WHITE SQUARE BRACKET
27E7; 27E6 # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
27E8; 27E9 # MATHEMATICAL LEFT ANGLE BRACKET
27E9; 27E8 # MATHEMATICAL RIGHT ANGLE BRACKET
27EA; 27EB # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
27EB; 27EA # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
27EC; 27ED # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
27ED; 27EC # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
27EE; 27EF # MATHEMATICAL LEFT FLATTENED PARENTHESIS
27EF; 27EE # MATHEMATICAL RIGHT FLATTENED PARENTHESIS
2983; 2984 # LEFT WHITE CURLY BRACKET
2984; 2983 # RIGHT WHITE CURLY BRACKET
2985; 2986 # LEFT WHITE PARENTHESIS
2986; 2985 # RIGHT WHITE PARENTHESIS
2987; 2988 # Z NOTATION LEFT IMAGE BRACKET
2988; 2987 # Z NOTATION RIGHT IMAGE BRACKET
2989; 298A # Z NOTATION LEFT BINDING BRACKET
298A; 2989 # Z NOTATION RIGHT BINDING BRACKET
298B; 298C # LEFT SQUARE BRACKET WITH UNDERBAR
298C; 298B # RIGHT SQUARE BRACKET WITH UNDERBAR
298D; 2990 # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
298E; 298F # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
298F; 298E # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
2990; 298D # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
2991; 2992 # LEFT ANGLE BRACKET WITH DOT
2992; 2991 # RIGHT ANGLE BRACKET WITH DOT
2993; 2994 # LEFT ARC LESS-THAN BRACKET
2994; 2993 # RIGHT ARC GREATER-THAN BRACKET
2995; 2996 # DOUBLE LEFT ARC GREATER-THAN BRACKET
2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET
2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET
2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET
29B8; 2298 # CIRCLED REVERSE SOLIDUS
29C0; 29C1 # CIRCLED LESS-THAN
29C1; 29C0 # CIRCLED GREATER-THAN
29C4; 29C5 # SQUARED RISING DIAGONAL SLASH
29C5; 29C4 # SQUARED FALLING DIAGONAL SLASH
29CF; 29D0 # LEFT TRIANGLE BESIDE VERTICAL BAR
29D0; 29CF # VERTICAL BAR BESIDE RIGHT TRIANGLE
29D1; 29D2 # BOWTIE WITH LEFT HALF BLACK
29D2; 29D1 # BOWTIE WITH RIGHT HALF BLACK
29D4; 29D5 # TIMES WITH LEFT HALF BLACK
29D5; 29D4 # TIMES WITH RIGHT HALF BLACK
29D8; 29D9 # LEFT WIGGLY FENCE
29D9; 29D8 # RIGHT WIGGLY FENCE
29DA; 29DB # LEFT DOUBLE WIGGLY FENCE
29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE
29F5; 2215 # REVERSE SOLIDUS OPERATOR
29F8; 29F9 # BIG SOLIDUS
29F9; 29F8 # BIG REVERSE SOLIDUS
29FC; 29FD # LEFT-POINTING CURVED ANGLE BRACKET
29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET
2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS
2A2C; 2A2B # MINUS SIGN WITH RISING DOTS
2A2D; 2A2E # PLUS SIGN IN LEFT HALF CIRCLE
2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE
2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
2A3C; 2A3D # INTERIOR PRODUCT
2A3D; 2A3C # RIGHTHAND INTERIOR PRODUCT
2A64; 2A65 # Z NOTATION DOMAIN ANTIRESTRICTION
2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION
2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE
2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE
2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO
2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO
2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
2A80; 2A7F # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
2A81; 2A82 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
2A94; 2A93 # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
2A95; 2A96 # SLANTED EQUAL TO OR LESS-THAN
2A96; 2A95 # SLANTED EQUAL TO OR GREATER-THAN
2A97; 2A98 # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
2A98; 2A97 # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
2A99; 2A9A # DOUBLE-LINE EQUAL TO OR LESS-THAN
2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN
2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
2AA1; 2AA2 # DOUBLE NESTED LESS-THAN
2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN
2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE
2AA7; 2AA6 # GREATER-THAN CLOSED BY CURVE
2AA8; 2AA9 # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
2AA9; 2AA8 # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
2AAA; 2AAB # SMALLER THAN
2AAB; 2AAA # LARGER THAN
2AAC; 2AAD # SMALLER THAN OR EQUAL TO
2AAD; 2AAC # LARGER THAN OR EQUAL TO
2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN
2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN
2ABB; 2ABC # DOUBLE PRECEDES
2ABC; 2ABB # DOUBLE SUCCEEDS
2ABD; 2ABE # SUBSET WITH DOT
2ABE; 2ABD # SUPERSET WITH DOT
2ABF; 2AC0 # SUBSET WITH PLUS SIGN BELOW
2AC0; 2ABF # SUPERSET WITH PLUS SIGN BELOW
2AC1; 2AC2 # SUBSET WITH MULTIPLICATION SIGN BELOW
2AC2; 2AC1 # SUPERSET WITH MULTIPLICATION SIGN BELOW
2AC3; 2AC4 # SUBSET OF OR EQUAL TO WITH DOT ABOVE
2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN
2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN
2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR
2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR
2ACF; 2AD0 # CLOSED SUBSET
2AD0; 2ACF # CLOSED SUPERSET
2AD1; 2AD2 # CLOSED SUBSET OR EQUAL TO
2AD2; 2AD1 # CLOSED SUPERSET OR EQUAL TO
2AD3; 2AD4 # SUBSET ABOVE SUPERSET
2AD4; 2AD3 # SUPERSET ABOVE SUBSET
2AD5; 2AD6 # SUBSET ABOVE SUBSET
2AD6; 2AD5 # SUPERSET ABOVE SUPERSET
2ADE; 22A6 # SHORT LEFT TACK
2AE3; 22A9 # DOUBLE VERTICAL BAR LEFT TURNSTILE
2AE4; 22A8 # VERTICAL BAR DOUBLE LEFT TURNSTILE
2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
2AEC; 2AED # DOUBLE STROKE NOT SIGN
2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN
2AF7; 2AF8 # TRIPLE NESTED LESS-THAN
2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN
2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
2E02; 2E03 # LEFT SUBSTITUTION BRACKET
2E03; 2E02 # RIGHT SUBSTITUTION BRACKET
2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET
2E05; 2E04 # RIGHT DOTTED SUBSTITUTION BRACKET
2E09; 2E0A # LEFT TRANSPOSITION BRACKET
2E0A; 2E09 # RIGHT TRANSPOSITION BRACKET
2E0C; 2E0D # LEFT RAISED OMISSION BRACKET
2E0D; 2E0C # RIGHT RAISED OMISSION BRACKET
2E1C; 2E1D # LEFT LOW PARAPHRASE BRACKET
2E1D; 2E1C # RIGHT LOW PARAPHRASE BRACKET
2E20; 2E21 # LEFT VERTICAL BAR WITH QUILL
2E21; 2E20 # RIGHT VERTICAL BAR WITH QUILL
2E22; 2E23 # TOP LEFT HALF BRACKET
2E23; 2E22 # TOP RIGHT HALF BRACKET
2E24; 2E25 # BOTTOM LEFT HALF BRACKET
2E25; 2E24 # BOTTOM RIGHT HALF BRACKET
2E26; 2E27 # LEFT SIDEWAYS U BRACKET
2E27; 2E26 # RIGHT SIDEWAYS U BRACKET
2E28; 2E29 # LEFT DOUBLE PARENTHESIS
2E29; 2E28 # RIGHT DOUBLE PARENTHESIS
3008; 3009 # LEFT ANGLE BRACKET
3009; 3008 # RIGHT ANGLE BRACKET
300A; 300B # LEFT DOUBLE ANGLE BRACKET
300B; 300A # RIGHT DOUBLE ANGLE BRACKET
300C; 300D # [BEST FIT] LEFT CORNER BRACKET
300D; 300C # [BEST FIT] RIGHT CORNER BRACKET
300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET
300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET
3010; 3011 # LEFT BLACK LENTICULAR BRACKET
3011; 3010 # RIGHT BLACK LENTICULAR BRACKET
3014; 3015 # LEFT TORTOISE SHELL BRACKET
3015; 3014 # RIGHT TORTOISE SHELL BRACKET
3016; 3017 # LEFT WHITE LENTICULAR BRACKET
3017; 3016 # RIGHT WHITE LENTICULAR BRACKET
3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET
3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET
301A; 301B # LEFT WHITE SQUARE BRACKET
301B; 301A # RIGHT WHITE SQUARE BRACKET
FE59; FE5A # SMALL LEFT PARENTHESIS
FE5A; FE59 # SMALL RIGHT PARENTHESIS
FE5B; FE5C # SMALL LEFT CURLY BRACKET
FE5C; FE5B # SMALL RIGHT CURLY BRACKET
FE5D; FE5E # SMALL LEFT TORTOISE SHELL BRACKET
FE5E; FE5D # SMALL RIGHT TORTOISE SHELL BRACKET
FE64; FE65 # SMALL LESS-THAN SIGN
FE65; FE64 # SMALL GREATER-THAN SIGN
FF08; FF09 # FULLWIDTH LEFT PARENTHESIS
FF09; FF08 # FULLWIDTH RIGHT PARENTHESIS
FF1C; FF1E # FULLWIDTH LESS-THAN SIGN
FF1E; FF1C # FULLWIDTH GREATER-THAN SIGN
FF3B; FF3D # FULLWIDTH LEFT SQUARE BRACKET
FF3D; FF3B # FULLWIDTH RIGHT SQUARE BRACKET
FF5B; FF5D # FULLWIDTH LEFT CURLY BRACKET
FF5D; FF5B # FULLWIDTH RIGHT CURLY BRACKET
FF5F; FF60 # FULLWIDTH LEFT WHITE PARENTHESIS
FF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS
FF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET
FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# The following characters have no appropriate mirroring character.
# For these characters it is up to the rendering system
# to provide mirrored glyphs.
# 2140; DOUBLE-STRUCK N-ARY SUMMATION
# 2201; COMPLEMENT
# 2202; PARTIAL DIFFERENTIAL
# 2203; THERE EXISTS
# 2204; THERE DOES NOT EXIST
# 2211; N-ARY SUMMATION
# 2216; SET MINUS
# 221A; SQUARE ROOT
# 221B; CUBE ROOT
# 221C; FOURTH ROOT
# 221D; PROPORTIONAL TO
# 221F; RIGHT ANGLE
# 2220; ANGLE
# 2221; MEASURED ANGLE
# 2222; SPHERICAL ANGLE
# 2224; DOES NOT DIVIDE
# 2226; NOT PARALLEL TO
# 222B; INTEGRAL
# 222C; DOUBLE INTEGRAL
# 222D; TRIPLE INTEGRAL
# 222E; CONTOUR INTEGRAL
# 222F; SURFACE INTEGRAL
# 2230; VOLUME INTEGRAL
# 2231; CLOCKWISE INTEGRAL
# 2232; CLOCKWISE CONTOUR INTEGRAL
# 2233; ANTICLOCKWISE CONTOUR INTEGRAL
# 2239; EXCESS
# 223B; HOMOTHETIC
# 223E; INVERTED LAZY S
# 223F; SINE WAVE
# 2240; WREATH PRODUCT
# 2241; NOT TILDE
# 2242; MINUS TILDE
# 2244; NOT ASYMPTOTICALLY EQUAL TO
# 2245; APPROXIMATELY EQUAL TO
# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
# 2248; ALMOST EQUAL TO
# 2249; NOT ALMOST EQUAL TO
# 224A; ALMOST EQUAL OR EQUAL TO
# 224B; TRIPLE TILDE
# 224C; ALL EQUAL TO
# 225F; QUESTIONED EQUAL TO
# 2260; NOT EQUAL TO
# 2262; NOT IDENTICAL TO
# 228C; MULTISET
# 22A7; MODELS
# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE
# 22AC; DOES NOT PROVE
# 22AD; NOT TRUE
# 22AE; DOES NOT FORCE
# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
# 22B8; MULTIMAP
# 22BE; RIGHT ANGLE WITH ARC
# 22BF; RIGHT TRIANGLE
# 22F5; ELEMENT OF WITH DOT ABOVE
# 22F8; ELEMENT OF WITH UNDERBAR
# 22F9; ELEMENT OF WITH TWO HORIZONTAL STROKES
# 22FF; Z NOTATION BAG MEMBERSHIP
# 2320; TOP HALF INTEGRAL
# 2321; BOTTOM HALF INTEGRAL
# 27CC; LONG DIVISION
# 27C0; THREE DIMENSIONAL ANGLE
# 27D3; LOWER RIGHT CORNER WITH DOT
# 27D4; UPPER LEFT CORNER WITH DOT
# 27DC; LEFT MULTIMAP
# 299B; MEASURED ANGLE OPENING LEFT
# 299C; RIGHT ANGLE VARIANT WITH SQUARE
# 299D; MEASURED RIGHT ANGLE WITH DOT
# 299E; ANGLE WITH S INSIDE
# 299F; ACUTE ANGLE
# 29A0; SPHERICAL ANGLE OPENING LEFT
# 29A1; SPHERICAL ANGLE OPENING UP
# 29A2; TURNED ANGLE
# 29A3; REVERSED ANGLE
# 29A4; ANGLE WITH UNDERBAR
# 29A5; REVERSED ANGLE WITH UNDERBAR
# 29A6; OBLIQUE ANGLE OPENING UP
# 29A7; OBLIQUE ANGLE OPENING DOWN
# 29A8; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
# 29A9; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
# 29AA; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
# 29AB; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
# 29AC; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
# 29AD; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
# 29AE; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
# 29AF; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
# 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT
# 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
# 29C9; TWO JOINED SQUARES
# 29CE; RIGHT TRIANGLE ABOVE LEFT TRIANGLE
# 29DC; INCOMPLETE INFINITY
# 29E1; INCREASES AS
# 29E3; EQUALS SIGN AND SLANTED PARALLEL
# 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
# 29E5; IDENTICAL TO AND SLANTED PARALLEL
# 29E8; DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
# 29E9; DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
# 29F4; RULE-DELAYED
# 29F6; SOLIDUS WITH OVERBAR
# 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE
# 2A0A; MODULO TWO SUM
# 2A0B; SUMMATION WITH INTEGRAL
# 2A0C; QUADRUPLE INTEGRAL OPERATOR
# 2A0D; FINITE PART INTEGRAL
# 2A0E; INTEGRAL WITH DOUBLE STROKE
# 2A0F; INTEGRAL AVERAGE WITH SLASH
# 2A10; CIRCULATION FUNCTION
# 2A11; ANTICLOCKWISE INTEGRATION
# 2A12; LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
# 2A13; LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
# 2A14; LINE INTEGRATION NOT INCLUDING THE POLE
# 2A15; INTEGRAL AROUND A POINT OPERATOR
# 2A16; QUATERNION INTEGRAL OPERATOR
# 2A17; INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
# 2A18; INTEGRAL WITH TIMES SIGN
# 2A19; INTEGRAL WITH INTERSECTION
# 2A1A; INTEGRAL WITH UNION
# 2A1B; INTEGRAL WITH OVERBAR
# 2A1C; INTEGRAL WITH UNDERBAR
# 2A1E; LARGE LEFT TRIANGLE OPERATOR
# 2A1F; Z NOTATION SCHEMA COMPOSITION
# 2A20; Z NOTATION SCHEMA PIPING
# 2A21; Z NOTATION SCHEMA PROJECTION
# 2A24; PLUS SIGN WITH TILDE ABOVE
# 2A26; PLUS SIGN WITH TILDE BELOW
# 2A29; MINUS SIGN WITH COMMA ABOVE
# 2A3E; Z NOTATION RELATIONAL COMPOSITION
# 2A57; SLOPING LARGE OR
# 2A58; SLOPING LARGE AND
# 2A6A; TILDE OPERATOR WITH DOT ABOVE
# 2A6B; TILDE OPERATOR WITH RISING DOTS
# 2A6C; SIMILAR MINUS SIMILAR
# 2A6D; CONGRUENT WITH DOT ABOVE
# 2A6F; ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
# 2A70; APPROXIMATELY EQUAL OR EQUAL TO
# 2A73; EQUALS SIGN ABOVE TILDE OPERATOR
# 2A74; DOUBLE COLON EQUAL
# 2A7B; LESS-THAN WITH QUESTION MARK ABOVE
# 2A7C; GREATER-THAN WITH QUESTION MARK ABOVE
# 2A85; LESS-THAN OR APPROXIMATE
# 2A86; GREATER-THAN OR APPROXIMATE
# 2A87; LESS-THAN AND SINGLE-LINE NOT EQUAL TO
# 2A88; GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
# 2A89; LESS-THAN AND NOT APPROXIMATE
# 2A8A; GREATER-THAN AND NOT APPROXIMATE
# 2A8D; LESS-THAN ABOVE SIMILAR OR EQUAL
# 2A8E; GREATER-THAN ABOVE SIMILAR OR EQUAL
# 2A8F; LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
# 2A90; GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
# 2A9D; SIMILAR OR LESS-THAN
# 2A9E; SIMILAR OR GREATER-THAN
# 2A9F; SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
# 2AA0; SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
# 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR
# 2AB1; PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
# 2AB2; SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
# 2AB5; PRECEDES ABOVE NOT EQUAL TO
# 2AB6; SUCCEEDS ABOVE NOT EQUAL TO
# 2AB7; PRECEDES ABOVE ALMOST EQUAL TO
# 2AB8; SUCCEEDS ABOVE ALMOST EQUAL TO
# 2AB9; PRECEDES ABOVE NOT ALMOST EQUAL TO
# 2ABA; SUCCEEDS ABOVE NOT ALMOST EQUAL TO
# 2AC7; SUBSET OF ABOVE TILDE OPERATOR
# 2AC8; SUPERSET OF ABOVE TILDE OPERATOR
# 2AC9; SUBSET OF ABOVE ALMOST EQUAL TO
# 2ACA; SUPERSET OF ABOVE ALMOST EQUAL TO
# 2ACB; SUBSET OF ABOVE NOT EQUAL TO
# 2ACC; SUPERSET OF ABOVE NOT EQUAL TO
# 2ADC; FORKING
# 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE
# 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
# 2AEE; DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
# 2AF3; PARALLEL WITH TILDE OPERATOR
# 2AFB; TRIPLE SOLIDUS BINARY RELATION
# 2AFD; DOUBLE SOLIDUS OPERATOR
# 1D6DB; MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
# 1D715; MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
# 1D74F; MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
# 1D789; MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
# 1D7C3; MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
# EOF

View File

@ -23,7 +23,7 @@ EMACS = ../../src/emacs
DSTDIR = ../../lisp/international
RUNEMACS = ${EMACS} -Q --multibyte -batch
all: ${DSTDIR}/charprop.el
all: ${DSTDIR}/charprop.el ../../src/biditype.h ../../src/bidimirror.h
.el.elc:
${RUNEMACS} -batch -f batch-byte-compile $<
@ -37,6 +37,12 @@ ${DSTDIR}/charprop.el: unidata-gen.elc unidata.txt
cd ${DSTDIR}; \
${RUNEMACS} -batch --load $${ELC} -f unidata-gen-files $${DATA}
../../src/biditype.h: UnicodeData.txt
gawk -F";" -f biditype.awk $< > $@
../../src/bidimirror.h: BidiMirroring.txt
gawk -F"[; ]+" -f bidimirror.awk $< > $@
install: charprop.el
cp charprop.el ${DSTDIR}
cp `sed -n 's/^;; FILE: //p' < charprop.el` ${DSTDIR}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
# Generate data for bidi_mirroring_table, see src/bidi.c:bidi_initialize.
# Copyright (C) 2010, 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 Eli Zaretskii <eliz@gnu.org>
BEGIN {
printf " struct {\n int from, to;\n } bidi_mirror[] = {\n";
first = 1;
}
$1 !~ /^#/ && NF >= 2 {
if (!first)
printf ",\n";
else
first = 0;
printf "\t{ 0x%s, 0x%s }", $1, $2;
}
END {
printf " };\n";
}

View File

@ -0,0 +1,93 @@
# Generate data for filling bidi_type_table, see src/bidi.c:bidi_initialize.
# Copyright (C) 2010, 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 Eli Zaretskii <eliz@gnu.org>
function trtype(type)
{
# Types are listed in the order of decresing use in UnicodeData.txt:
if (type == "ON")
return "NEUTRAL_ON";
else if (type == "NSM")
return "WEAK_NSM";
else if (type == "AL")
return "STRONG_AL";
else if (type == "R")
return "STRONG_R";
else if (type == "BN")
return "WEAK_BN";
else if (type == "EN")
return "WEAK_EN";
else if (type == "ET")
return "WEAK_ET";
else if (type == "AN")
return "WEAK_AN";
else if (type == "WS")
return "NEUTRAL_WS";
else if (type == "CS")
return "WEAK_CS";
else if (type == "ES")
return "WEAK_ES";
else if (type == "B")
return "NEUTRAL_B";
else if (type == "S")
return "NEUTRAL_S";
else if (type == "LRE" || type == "RLE" || type == "LRO" || type == "RLO" || type == "PDF")
return type;
else if (type == "L")
return "STRONG_L";
else
{
printf "Unknown type: %s\n", type > "/dev/stderr";
exit 1;
}
}
BEGIN {
otype = "";
startcode = "";
endcode = "";
printf " struct {\n int from, to;\n bidi_type_t type;\n } bidi_type[] = {\n";
first = 1;
}
{ code = $1;
ntype = $5;
if (ntype != otype)
{
# Don't output data for L, as that's the default value, see bidi.c.
if (otype != "L" && startcode != "")
{
if (!first)
printf ",\n";
else
first = 0;
printf "\t{ 0x%s, 0x%s, %s }", startcode, endcode, trtype(otype);
}
otype = ntype;
startcode = code;
endcode = code;
}
else
endcode = code;
}
END {
printf " };\n";
}

View File

@ -29,7 +29,7 @@ EMACSLOADPATH = $(lisp);$(lisp)/international;$(lisp)/emacs-lisp
# Quote EMACS so it could be a file name with embedded whitespace
RUNEMACS = "$(EMACS)" -Q --multibyte -batch
all: $(DSTDIR)/charprop.el
all: $(DSTDIR)/charprop.el ../../src/biditype.h ../../src/bidimirror.h
.el.elc:
$(RUNEMACS) -f batch-byte-compile $<
@ -50,6 +50,16 @@ charprop-CMD: unidata-gen.elc unidata.txt
${DSTDIR}/charprop.el: charprop-$(SHELLTYPE)
clean:
- $(DEL) unidata-gen.elc unidata.txt
../../src/biditype.h: UnicodeData.txt
gawk -F";" -f biditype.awk -v BINMODE=2 $< > biditype.h
$(CP) biditype.h $@
$(DEL) biditype.h
../../src/bidimirror.h: BidiMirroring.txt
gawk -F"[; ]+" -f bidimirror.awk -v BINMODE=2 $< > bidimirror.h
$(CP) bidimirror.h $@
$(DEL) bidimirror.h
clean:
- $(DEL) unidata-gen.elc unidata.txt biditype.h bidimirror.h

View File

@ -23,7 +23,7 @@ rem ----------------------------------------------------------------------
rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
rem
rem + msdos version 3 or better.
rem + DJGPP version 1.12maint1 or later (version 2.03 or later recommended).
rem + DJGPP version 2.0 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
@ -125,11 +125,10 @@ rm -f junk.c junk junk.exe
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
Goto End
:go32Ok
set djgpp_ver=1
If ErrorLevel 20 set djgpp_ver=2
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
rm -f junk.c junk junk.exe
rem The v1.x build does not need djecho
if "%DJGPP_VER%" == "1" Goto djechoOk
rem DJECHO is used by the top-level Makefile in the v2.x build
Echo Checking whether 'djecho' is available...
redir -o Nul -eo djecho -o junk.$$$ foo
@ -159,12 +158,7 @@ sed -e '' config.in > config.tmp
if "%X11%" == "" goto src4
sed -f ../msdos/sed2x.inp <config.in >config.tmp
:src4
if "%DJGPP_VER%" == "2" Goto src41
sed -f ../msdos/sed2.inp <config.tmp >config.h2
goto src42
:src41
sed -f ../msdos/sed2v2.inp <config.tmp >config.h2
:src42
Rem See if DECL_ALIGN can be supported with this GCC
rm -f junk.c junk.o junk junk.exe
echo struct { int i; char *p; } __attribute__((__aligned__(8))) foo; >junk.c
@ -196,15 +190,10 @@ rem On my system dir.h gets in the way. It's a VMS file so who cares.
if exist dir.h ren dir.h vmsdir.h
rem Create "makefile" from "makefile.in".
rm -f Makefile junk.c
sed -e "1,/== start of cpp stuff ==/s@^##*[ ].*$@@" <Makefile.in >junk.c
If "%DJGPP_VER%" == "1" Goto mfV1
gcc -E -traditional junk.c | sed -f ../msdos/sed1v2.inp >Makefile
goto mfDone
:mfV1
gcc -E -traditional junk.c | sed -f ../msdos/sed1.inp >Makefile
:mfDone
rm -f junk.c
rm -f Makefile makefile.tmp
copy Makefile.in + deps.mk makefile.tmp
sed -f ../msdos/sed1v2.inp <makefile.tmp >Makefile
rm -f makefile.tmp
if "%X11%" == "" goto src5
mv Makefile makefile.tmp
@ -212,6 +201,13 @@ sed -f ../msdos/sed1x.inp <makefile.tmp >Makefile
rm -f makefile.tmp
:src5
if "%sys_malloc%" == "" goto src5a
sed -e "/^GMALLOC_OBJ *=/s/gmalloc.o//" <Makefile >makefile.tmp
sed -e "/^VMLIMIT_OBJ *=/s/vm-limit.o//" <makefile.tmp >makefile.tmp2
sed -e "/^RALLOC_OBJ *=/s/ralloc.o//" <makefile.tmp2 >Makefile
rm -f makefile.tmp makefile.tmp2
:src5a
if "%nodebug%" == "" goto src6
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
sed -e "/^LDFLAGS *=/s/=/=-s/" <makefile.tmp >Makefile
@ -221,12 +217,7 @@ cd ..
rem ----------------------------------------------------------------------
Echo Configuring the library source directory...
cd lib-src
If "%DJGPP_VER%" == "2" goto libsrc-v2
sed -f ../msdos/sed3.inp <Makefile.in >Makefile
Goto libsrc2
:libsrc-v2
sed -f ../msdos/sed3v2.inp <Makefile.in >Makefile
:libsrc2
if "%X11%" == "" goto libsrc2a
mv Makefile makefile.tmp
sed -f ../msdos/sed3x.inp <makefile.tmp >Makefile
@ -272,7 +263,6 @@ rem ----------------------------------------------------------------------
Echo Configuring the main directory...
If Exist .dir-locals.el update .dir-locals.el _dir-locals.el
If Exist src\.dbxinit update src/.dbxinit src/_dbxinit
If "%DJGPP_VER%" == "1" goto mainv1
Echo Looking for the GDB init file...
If Exist src\.gdbinit update src/.gdbinit src/_gdbinit
If Exist src\_gdbinit goto gdbinitOk
@ -287,8 +277,6 @@ goto End
:gdbinitOk
Echo Looking for the GDB init file...found
copy msdos\mainmake.v2 Makefile >nul
:mainv1
If "%DJGPP_VER%" == "1" copy msdos\mainmake Makefile >nul
rem ----------------------------------------------------------------------
goto End
:SmallEnv

19483
configure vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,27 @@
2010-06-10 Glenn Morris <rgm@gnu.org>
* ack.texi (Acknowledgments):
* emacs.texi (Acknowledgments): Update for notifications.el.
2010-05-31 Daiki Ueno <ueno@unixuser.org>
* dired.texi (Operating on Files): Mention encryption commands
(Bug#6315).
2010-05-29 Eli Zaretskii <eliz@gnu.org>
* basic.texi (Moving Point): Update due to renaming of commands bound
to arrows. Document bidi-aware behavior of C-<right> and C-<left>.
2010-05-18 Eli Zaretskii <eliz@gnu.org>
* display.texi (Fringes): Document reversal of fringe arrows for R2L
paragraphs.
(Line Truncation): Fix wording for bidi display.
* basic.texi (Moving Point): Document bidi-aware behavior of the arrow
keys.
2010-05-08 Chong Yidong <cyd@stupidchicken.com>
* building.texi (GDB Graphical Interface): Remove misleading comparison
@ -127,7 +151,7 @@
* custom.texi (Init Examples): Add xref to Mail Header.
* emacs.texi (Top): Fix xrefs.
* emacs.texi (Top): Fix xrefs.
2010-03-30 Chong Yidong <cyd@stupidchicken.com>
@ -1695,7 +1719,7 @@
(Fortran Columns): Mention font-locking.
(Fortran Abbrev): Word syntax not relevant with new-style abbrev.
2008-08-23 Johan Bockgard <bojohan@muon>
2008-08-23 Johan Bockgård <bojohan@muon>
* basic.texi (Moving Point): Fix <prior>/<next> confusion.

View File

@ -226,6 +226,10 @@ for compiled Emacs Lisp code.
Mathias Dahl wrote @file{image-dired.el}, a package for viewing image
files as ``thumbnails.''
@item
Julien Danjou wrote an implementation of ``Desktop Notifications''
(@file{notifications.el}).
@item
Vivek Dasmohapatra wrote @file{htmlfontify.el}, to convert a buffer or
source tree to HTML.

View File

@ -146,6 +146,8 @@ keyboard commands that move point in more sophisticated ways.
@findex move-end-of-line
@findex forward-char
@findex backward-char
@findex right-char
@findex left-char
@findex next-line
@findex previous-line
@findex beginning-of-buffer
@ -161,19 +163,33 @@ Move to the beginning of the line (@code{move-beginning-of-line}).
@itemx @key{End}
Move to the end of the line (@code{move-end-of-line}).
@item C-f
@itemx @key{right}
Move forward one character (@code{forward-char}).
@item @key{right}
Move one character to the right (@code{right-char}). This
moves one character forward in text that is read in the usual
left-to-right direction, but one character @emph{backward} if the text
is read right-to-left, as needed for right-to-left scripts such as
Arabic. @xref{Bidirectional Editing}.
@item C-b
@itemx @key{left}
Move backward one character (@code{backward-char}).
@item @key{left}
Move one character to the left (@code{left-char}). This
moves one character backward in left-to-right text and one character
forward in right-to-left text.
@item M-f
@itemx M-@key{right}
@itemx C-@key{right}
Move forward one word (@code{forward-word}).
@item C-@key{right}
Move one word to the right (@code{right-word}). This moves one word
forward in left-to-right text and one word backward in right-to-left
text.
@item M-b
@itemx M-@key{left}
@itemx C-@key{left}
Move backward one word (@code{backward-word}).
@item C-@key{left}
Move one word to the left (@code{left-word}). This moves one word
backward in left-to-right text and one word forward in right-to-left
text.
@item C-n
@itemx @key{down}
Move down one screen line (@code{next-line}). This command attempts

View File

@ -688,6 +688,34 @@ suitable guess made using the variables @code{lpr-command} and
Compress the specified files (@code{dired-do-compress}). If the file
appears to be a compressed file already, uncompress it instead.
@findex epa-dired-do-decrypt
@kindex :d @r{(Dired)}
@cindex decrypting files (in Dired)
@item :d
Decrypt the specified files (@code{epa-dired-do-decrypt}).
@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
@findex epa-dired-do-verify
@kindex :v @r{(Dired)}
@cindex verifying digital signatures on files (in Dired)
@item :v
Verify digital signatures on the specified files (@code{epa-dired-do-verify}).
@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
@findex epa-dired-do-sign
@kindex :s @r{(Dired)}
@cindex signing files (in Dired)
@item :s
Digitally sign the specified files (@code{epa-dired-do-sign}).
@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
@findex epa-dired-do-encrypt
@kindex :e @r{(Dired)}
@cindex encrypting files (in Dired)
@item :e
Encrypt the specified files (@code{epa-dired-do-encrypt}).
@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
@findex dired-do-load
@kindex L @r{(Dired)}
@cindex loading several files (in Dired)

View File

@ -804,7 +804,10 @@ line, when one line of text is split into multiple lines on the
screen. The left fringe shows a curving arrow for each screen line
except the first, indicating that ``this is not the real beginning.''
The right fringe shows a curving arrow for each screen line except the
last, indicating that ``this is not the real end.''
last, indicating that ``this is not the real end.'' If the line's
direction is right-to-left (@pxref{Bidirectional Editing}), the
meaning of the curving arrows in the left and right fringes are
swapped.
The fringes indicate line truncation with short horizontal arrows
meaning ``there's more text on this line which is scrolled
@ -1191,8 +1194,8 @@ can display long lines by @dfn{truncation}. This means that all the
characters that do not fit in the width of the screen or window do not
appear at all. On graphical displays, a small straight arrow in the
fringe indicates truncation at either end of the line. On text-only
terminals, @samp{$} appears in the first column when there is text
truncated to the left, and in the last column when there is text
terminals, @samp{$} appears in the leftmost column when there is text
truncated to the left, and in the rightmost column when there is text
truncated to the right.
@vindex truncate-lines

View File

@ -1354,33 +1354,34 @@ Broadey, Vincent Broman, David M.@: Brown, Georges Brun-Cottan, Joe
Buehler, W@l{}odek Bzyl, Bill Carpenter, Per Cederqvist, Hans Chalupsky,
Chong Yidong, Chris Chase, Bob Chassell, Andrew Choi, Sacha Chua, James
Clark, Mike Clarkson, Glynn Clements, Daniel Colascione, Andrew Csillag,
Baoqiu Cui, Doug Cutting, Mathias Dahl, Satyaki Das, Vivek Dasmohapatra,
Michael DeCorte, Gary Delp, Matthieu Devin, Eri Ding, Jan Dj@"{a}rv,
Carsten Dominik, Scott Draves, Benjamin Drieu, Viktor Dukhovni, Dmitry
Dzhus, John Eaton, Rolf Ebert, Paul Eggert, Stephen Eglen, Torbj@"orn
Einarsson, Tsugutomo Enami, Hans Henrik Eriksen, Michael Ernst, Ata
Etemadi, Frederick Farnbach, Oscar Figueiredo, Fred Fish, Karl Fogel,
Gary Foster, Romain Francoise, Noah Friedman, Andreas Fuchs, Hallvard
Furuseth, Keith Gabryelski, Peter S.@: Galbraith, Kevin Gallagher, Kevin
Gallo, Juan Le@'{o}n Lahoz Garc@'{@dotless{i}}a, Howard Gayle, Daniel
German, Stephen Gildea, Julien Gilles, David Gillespie, Bob Glickstein,
Deepak Goel, Boris Goldowsky, Michelangelo Grigni, Odd Gripenstam, Kai
Gro@ss{}johann, Michael Gschwind, Bastien Guerry, Henry Guillaume, Doug
Gwyn, Ken'ichi Handa, Lars Hansen, Chris Hanson, K. Shane Hartman, John
Heidemann, Jon K.@: Hellan, Jesper Harder, Magnus Henoch, Markus
Heritsch, Karl Heuer, Manabu Higashida, Anders Holst, Jeffrey C.@:
Honig, Tassilo Horn, Kurt Hornik, Tom Houlder, Joakim Hove, Denis Howe,
Lars Ingebrigtsen, Andrew Innes, Seiichiro Inoue, Philip Jackson, Pavel
Janik, Paul Jarc, Ulf Jasper, Michael K. Johnson, Kyle Jones, Terry
Jones, Simon Josefsson, Arne J@o{}rgensen, Tomoji Kagatani, Brewster
Kahle, Tokuya Kameshima, Lute Kamstra, David Kastrup, David Kaufman,
Henry Kautz, Taichi Kawabata, Howard Kaye, Michael Kifer, Richard King,
Peter Kleiweg, Karel Kl@'{@dotless{i}}@v{c}, Shuhei Kobayashi, Pavel
Kobiakov, Larry K.@: Kolodney, David M.@: Koppelman, Koseki Yoshinori,
Robert Krawitz, Sebastian Kremer, Ryszard Kubiak, David K@aa{}gedal, Daniel
LaLiberte, Karl Landstrom, Mario Lang, Aaron Larson, James R.@: Larus,
Vinicius Jose Latorre, Werner Lemberg, Frederic Lepied, Peter Liljenberg,
Lars Lindberg, Chris Lindblad, Anders Lindgren, Thomas Link, Juri Linkov,
Baoqiu Cui, Doug Cutting, Mathias Dahl, Julien Danjou, Satyaki Das,
Vivek Dasmohapatra, Michael DeCorte, Gary Delp, Matthieu Devin, Eri
Ding, Jan Dj@"{a}rv, Carsten Dominik, Scott Draves, Benjamin Drieu,
Viktor Dukhovni, Dmitry Dzhus, John Eaton, Rolf Ebert, Paul Eggert,
Stephen Eglen, Torbj@"orn Einarsson, Tsugutomo Enami, Hans Henrik
Eriksen, Michael Ernst, Ata Etemadi, Frederick Farnbach, Oscar
Figueiredo, Fred Fish, Karl Fogel, Gary Foster, Romain Francoise, Noah
Friedman, Andreas Fuchs, Hallvard Furuseth, Keith Gabryelski, Peter S.@:
Galbraith, Kevin Gallagher, Kevin Gallo, Juan Le@'{o}n Lahoz
Garc@'{@dotless{i}}a, Howard Gayle, Daniel German, Stephen Gildea,
Julien Gilles, David Gillespie, Bob Glickstein, Deepak Goel, Boris
Goldowsky, Michelangelo Grigni, Odd Gripenstam, Kai Gro@ss{}johann,
Michael Gschwind, Bastien Guerry, Henry Guillaume, Doug Gwyn, Ken'ichi
Handa, Lars Hansen, Chris Hanson, K. Shane Hartman, John Heidemann, Jon
K.@: Hellan, Jesper Harder, Magnus Henoch, Markus Heritsch, Karl Heuer,
Manabu Higashida, Anders Holst, Jeffrey C.@: Honig, Tassilo Horn, Kurt
Hornik, Tom Houlder, Joakim Hove, Denis Howe, Lars Ingebrigtsen, Andrew
Innes, Seiichiro Inoue, Philip Jackson, Pavel Janik, Paul Jarc, Ulf
Jasper, Michael K. Johnson, Kyle Jones, Terry Jones, Simon Josefsson,
Arne J@o{}rgensen, Tomoji Kagatani, Brewster Kahle, Tokuya Kameshima,
Lute Kamstra, David Kastrup, David Kaufman, Henry Kautz, Taichi
Kawabata, Howard Kaye, Michael Kifer, Richard King, Peter Kleiweg, Karel
Kl@'{@dotless{i}}@v{c}, Shuhei Kobayashi, Pavel Kobiakov, Larry K.@:
Kolodney, David M.@: Koppelman, Koseki Yoshinori, Robert Krawitz,
Sebastian Kremer, Ryszard Kubiak, David K@aa{}gedal, Daniel LaLiberte,
Karl Landstrom, Mario Lang, Aaron Larson, James R.@: Larus, Vinicius
Jose Latorre, Werner Lemberg, Frederic Lepied, Peter Liljenberg, Lars
Lindberg, Chris Lindblad, Anders Lindgren, Thomas Link, Juri Linkov,
Francis Litterio, Emilio C. Lopes, K@'{a}roly L@H{o}rentey, Dave Love,
Sascha L@"{u}decke, Eric Ludlam, Alan Mackenzie, Christopher J.@:
Madsen, Neil M.@: Mager, Ken Manheimer, Bill Mann, Brian Marick, Simon

View File

@ -1,3 +1,23 @@
2010-06-02 Chong Yidong <cyd@stupidchicken.com>
* searching.texi (Regexp Special): Remove obsolete information
about matching non-ASCII characters, and suggest using char
classes (Bug#6283).
2010-05-30 Juanma Barranquero <lekktu@gmail.com>
* minibuf.texi (Basic Completion): Add missing "@end defun".
2010-05-30 Stefan Monnier <monnier@iro.umontreal.ca>
* minibuf.texi (Basic Completion): Document completion-boundaries.
(Programmed Completion): Document the new fourth method for boundaries.
2010-05-22 Chong Yidong <cyd@stupidchicken.com>
* display.texi (Image Cache): Update documentation about image
caching.
2010-05-08 Štěpán Němec <stepnem@gmail.com> (tiny change)
* windows.texi (Textual Scrolling):

View File

@ -4730,29 +4730,35 @@ cache, it can always be displayed, even if the value of
efficiently. When Emacs displays an image, it searches the image
cache for an existing image specification @code{equal} to the desired
specification. If a match is found, the image is displayed from the
cache; otherwise, Emacs loads the image normally.
cache. Otherwise, Emacs loads the image normally.
Occasionally, you may need to tell Emacs to refresh the images
associated with a given image specification. For example, suppose you
display an image using a specification that contains a @code{:file}
property. The image is automatically cached, and subsequent displays
of that image, with the same image specification, will use the image
cache. If the image file changes in the meantime, Emacs would be
displaying the old version of the image. In such a situation, you can
``refresh'' the image by calling @code{image-refresh}.
@defun image-flush spec &optional frame
This function removes the image with specification @var{spec} from the
image cache of frame @var{frame}. Image specifications are compared
using @code{equal}. If @var{frame} is @code{nil}, it defaults to the
selected frame. If @var{frame} is @code{t}, the image is flushed on
all existing frames.
In Emacs' current implementation, each graphical terminal possesses
an image cache, which is shared by all the frames on that terminal
In Emacs' current implementation, each graphical terminal possesses an
image cache, which is shared by all the frames on that terminal
(@pxref{Multiple Terminals}). Thus, refreshing an image in one frame
also refreshes it in all other frames on the same terminal.
@defun image-refresh spec &optional frame
This function refreshes any images with image specifications
@code{equal} to @var{spec} on frame @var{frame}. If @var{frame} is
@code{nil}, it defaults to the selected frame. If @var{frame} is
@code{t}, the refresh is applied to all existing frames.
@end defun
One use for @code{image-flush} is to tell Emacs about a change in an
image file. If an image specification contains a @code{:file}
property, the image is cached based on the file's contents when the
image is first displayed. Even if the file subsequently changes,
Emacs continues displaying the old version of the image. Calling
@code{image-flush} flushes the image from the cache, forcing Emacs to
re-read the file the next time it needs to display that image.
Another use for @code{image-flush} is for memory conservation. If
your Lisp program creates a large number of temporary images over a
period much shorter than @code{image-cache-eviction-delay} (see
below), you can opt to flush unused images yourself, instead of
waiting for Emacs to do it automatically.
@defun clear-image-cache &optional filter
This function clears an image cache, removing all the images stored in
it. If @var{filter} is omitted or @code{nil}, it clears the cache for
@ -4768,9 +4774,12 @@ period of time, Emacs removes it from the cache and frees the
associated memory.
@defvar image-cache-eviction-delay
This variable specifies the number of seconds an image can remain in the
cache without being displayed. When an image is not displayed for this
length of time, Emacs removes it from the image cache.
This variable specifies the number of seconds an image can remain in
the cache without being displayed. When an image is not displayed for
this length of time, Emacs removes it from the image cache.
Under some circumstances, if the number of images in the cache grows
too large, the actual eviction delay may be shorter than this.
If the value is @code{nil}, Emacs does not remove images from the cache
except when you explicitly clear it. This mode can be useful for

View File

@ -814,6 +814,25 @@ the values @var{string}, @var{predicate} and @code{lambda}; whatever
it returns, @code{test-completion} returns in turn.
@end defun
@defun completion-boundaries string collection predicate suffix
This function returns the boundaries of the field on which @var{collection}
will operate, assuming that @var{string} holds the text before point
and @var{suffix} holds the text after point.
Normally completion operates on the whole string, so for all normal
collections, this will always return @code{(0 . (length
@var{suffix}))}. But more complex completion such as completion on
files is done one field at a time. For example, completion of
@code{"/usr/sh"} will include @code{"/usr/share/"} but not
@code{"/usr/share/doc"} even if @code{"/usr/share/doc"} exists.
Also @code{all-completions} on @code{"/usr/sh"} will not include
@code{"/usr/share/"} but only @code{"share/"}. So if @var{string} is
@code{"/usr/sh"} and @var{suffix} is @code{"e/doc"},
@code{completion-boundaries} will return @code{(5 . 1)} which tells us
that the @var{collection} will only return completion information that
pertains to the area after @code{"/usr/"} and before @code{"/doc"}.
@end defun
If you store a completion alist in a variable, you should mark the
variable as ``risky'' with a non-@code{nil}
@code{risky-local-variable} property. @xref{File Local Variables}.
@ -1618,13 +1637,14 @@ containing all the intended possible completions. In such a case, you
can supply your own function to compute the completion of a given
string. This is called @dfn{programmed completion}. Emacs uses
programmed completion when completing file names (@pxref{File Name
Completion}).
Completion}), among many other cases.
To use this feature, pass a symbol with a function definition as the
@var{collection} argument to @code{completing-read}. The function
To use this feature, pass a function as the @var{collection}
argument to @code{completing-read}. The function
@code{completing-read} arranges to pass your completion function along
to @code{try-completion} and @code{all-completions}, which will then let
your function do all the work.
to @code{try-completion}, @code{all-completions}, and other basic
completion functions, which will then let your function do all
the work.
The completion function should accept three arguments:
@ -1638,10 +1658,14 @@ none. Your function should call the predicate for each possible match,
and ignore the possible match if the predicate returns @code{nil}.
@item
A flag specifying the type of operation.
A flag specifying the type of operation. The best way to think about
it is that the function stands for an object (in the
``object-oriented'' sense of the word), and this third argument
specifies which method to run.
@end itemize
There are three flag values for three operations:
There are currently four methods, i.e. four flag values, one for
each of the four different basic operations:
@itemize @bullet
@item
@ -1663,6 +1687,13 @@ string.
@code{lambda} specifies @code{test-completion}. The completion
function should return @code{t} if the specified string is an exact
match for some possibility; @code{nil} otherwise.
@item
@code{(boundaries . SUFFIX)} specifies @code{completion-boundaries}.
The function should return a value of the form @code{(boundaries
START . END)} where START is the position of the beginning boundary in
in the string to complete, and END is the position of the end boundary
in SUFFIX.
@end itemize
It would be consistent and clean for completion functions to allow

View File

@ -362,7 +362,7 @@ the two brackets are what this character alternative can match.
Thus, @samp{[ad]} matches either one @samp{a} or one @samp{d}, and
@samp{[ad]*} matches any string composed of just @samp{a}s and @samp{d}s
(including the empty string), from which it follows that @samp{c[ad]*r}
(including the empty string). It follows that @samp{c[ad]*r}
matches @samp{cr}, @samp{car}, @samp{cdr}, @samp{caddaar}, etc.
You can also include character ranges in a character alternative, by
@ -400,20 +400,11 @@ is @samp{@var{c}..?\377}, the other is @samp{@var{c1}..@var{c2}}, where
@var{c1} is the first character of the charset to which @var{c2}
belongs.
You cannot always match all non-@acronym{ASCII} characters with the regular
expression @code{"[\200-\377]"}. This works when searching a unibyte
buffer or string (@pxref{Text Representations}), but not in a multibyte
buffer or string, because many non-@acronym{ASCII} characters have codes
above octal 0377. However, the regular expression @code{"[^\000-\177]"}
does match all non-@acronym{ASCII} characters (see below regarding @samp{^}),
in both multibyte and unibyte representations, because only the
@acronym{ASCII} characters are excluded.
A character alternative can also specify named
character classes (@pxref{Char Classes}). This is a POSIX feature whose
syntax is @samp{[:@var{class}:]}. Using a character class is equivalent
to mentioning each of the characters in that class; but the latter is
not feasible in practice, since some classes include thousands of
A character alternative can also specify named character classes
(@pxref{Char Classes}). This is a POSIX feature whose syntax is
@samp{[:@var{class}:]}. Using a character class is equivalent to
mentioning each of the characters in that class; but the latter is not
feasible in practice, since some classes include thousands of
different characters.
@item @samp{[^ @dots{} ]}
@ -431,6 +422,10 @@ A complemented character alternative can match a newline, unless newline is
mentioned as one of the characters not to match. This is in contrast to
the handling of regexps in programs such as @code{grep}.
You can specify named character classes, just like in character
alternatives. For instance, @samp{[^[:ascii:]]} matches any
non-@acronym{ASCII} character. @xref{Char Classes}.
@item @samp{^}
@cindex beginning of line in regexp
When matching a buffer, @samp{^} matches the empty string, but only at the

View File

@ -1,3 +1,21 @@
2010-06-07 Teodor Zlatanov <tzz@lifelogs.com>
* gnus.texi (Interactive): Explain effect of gnus-expert-user better.
2010-05-26 Michael Albinus <michael.albinus@gmx.de>
* eshell.texi (Built-ins): Describe, how to disable a built-in command
by an alias. (Bug#6226)
2010-05-16 Jay Belanger <jay.p.belanger@gmail.com>
* calc.texi (Manipulating Vectors): Mention that vectors can
be used to determine bins for `calc-histogram'.
2010-05-13 Jay Belanger <jay.p.belanger@gmail.com>
* calc.texi: Remove "\turnoffactive" commands throughout.
2010-05-08 Štěpán Němec <stepnem@gmail.com> (tiny change)
* url.texi (HTTP language/coding, Customization):
@ -2299,10 +2317,6 @@
* gnus-news.texi, gnus-coding.texi, sasl.texi: New files.
2007-10-28 Emanuele Giaquinta <e.giaquinta@glauco.it> (tiny change)
* gnus-faq.texi ([5.12]): Remove reference to discontinued service.
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
* gnus.texi (Sorting the Summary Buffer): Remove
@ -3838,19 +3852,6 @@
* org.texi (Progress logging): New section.
2006-05-29 Stefan Monnier <monnier@iro.umontreal.ca>
* viper.texi (Viper Specials):
* gnus.texi (Example Setup):
* faq.texi (Backspace invokes help):
* dired-x.texi (Optional Installation Dired Jump):
* calc.texi (Defining Simple Commands): Use ;; instead of ;;; to better
follow coding conventions.
2006-05-18 Reiner Steib <Reiner.Steib@gmx.de>
* gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail.
2006-06-06 Carsten Dominik <dominik@science.uva.nl>
* org.texi (ASCII export): Document indentation adaptation.
@ -3898,6 +3899,15 @@
* org.texi: Small typo fixes.
2006-05-29 Stefan Monnier <monnier@iro.umontreal.ca>
* viper.texi (Viper Specials):
* gnus.texi (Example Setup):
* faq.texi (Backspace invokes help):
* dired-x.texi (Optional Installation Dired Jump):
* calc.texi (Defining Simple Commands): Use ;; instead of ;;; to better
follow coding conventions.
2006-05-29 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (Frequently Asked Questions): Disable zsh zle.
@ -4454,10 +4464,6 @@
* gnus.texi (Article Washing): Additions.
2006-01-08 Alex Schroeder <alex@gnu.org>
* pgg.texi (Caching passphrase): Rewording.
2006-01-13 Carsten Dominik <dominik@science.uva.nl>
* org.texi (Agenda commands): Document tags command.

View File

@ -76,7 +76,6 @@
@newcount@calcpageno
@newtoks@calcoldeverypar @calcoldeverypar=@everypar
@everypar={@calceverypar@the@calcoldeverypar}
@ifx@turnoffactive@undefinedzzz@def@turnoffactive{}@fi
@ifx@ninett@undefinedzzz@font@ninett=cmtt9@fi
@catcode`@\=0 \catcode`\@=11
\r@ggedbottomtrue
@ -1804,7 +1803,6 @@ or, in large mathematical notation,
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ 2 + { 3 \times 4 \times 5 \over 6 \times 7^8 } - 9 $$
\afterdisplay
@ -3358,7 +3356,6 @@ Suppose we had the following set of equations:
@end group
@end ifnottex
@tex
\turnoffactive
\beforedisplayh
$$ \openup1\jot \tabskip=0pt plus1fil
\halign to\displaywidth{\tabskip=0pt
@ -3385,7 +3382,6 @@ This can be cast into the matrix equation,
@end group
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \pmatrix{ 1 & 2 & 3 \cr 4 & 5 & 6 \cr 7 & 6 & 0 }
\times
@ -3457,7 +3453,6 @@ in terms of @expr{a} and @expr{b}.
@end group
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \eqalign{ x &+ a y = 6 \cr
x &+ b y = 10}
@ -3483,7 +3478,6 @@ on the left by the transpose of @expr{A}:
@samp{trn(A)*A*X = trn(A)*B}.
@end ifnottex
@tex
\turnoffactive
$A^T A \, X = A^T B$, where $A^T$ is the transpose \samp{trn(A)}.
@end tex
Now
@ -3506,7 +3500,6 @@ system:
@end group
@end ifnottex
@tex
\turnoffactive
\beforedisplayh
$$ \openup1\jot \tabskip=0pt plus1fil
\halign to\displaywidth{\tabskip=0pt
@ -3778,7 +3771,6 @@ m = (N sum(x y) - sum(x) sum(y)) / (N sum(x^2) - sum(x)^2)
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ m = {N \sum x y - \sum x \sum y \over
N \sum x^2 - \left( \sum x \right)^2} $$
@ -3820,7 +3812,6 @@ respectively. (We could have used @kbd{*} to compute @samp{sum(x^2)} and
@samp{sum(x y)}.)
@end ifnottex
@tex
\turnoffactive
These are $\sum x$, $\sum x^2$, $\sum y$, and $\sum x y$,
respectively. (We could have used \kbd{*} to compute $\sum x^2$ and
$\sum x y$.)
@ -3874,7 +3865,6 @@ b = (sum(y) - m sum(x)) / N
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ b = {\sum y - m \sum x \over N} $$
\afterdisplay
@ -5223,7 +5213,6 @@ down to the formula,
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \displaylines{
\qquad {h \over 3} (f(a) + 4 f(a+h) + 2 f(a+2h) + 4 f(a+3h) + \cdots
@ -5245,7 +5234,6 @@ h * (f(a) + f(a+h) + f(a+2h) + f(a+3h) + ...
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ h (f(a) + f(a+h) + f(a+2h) + f(a+3h) + \cdots
+ f(a+(n-2)h) + f(a+(n-1)h)) $$
@ -5686,7 +5674,6 @@ cos(x) = 1 - x^2 / 2! + x^4 / 4! - x^6 / 6! + ...
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \cos x = 1 - {x^2 \over 2!} + {x^4 \over 4!} - {x^6 \over 6!} + \cdots $$
\afterdisplay
@ -5704,7 +5691,6 @@ cos(x) = 1 - x^2 / 2! + O(x^3)
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \cos x = 1 - {x^2 \over 2!} + O(x^3) $$
\afterdisplay
@ -6336,7 +6322,6 @@ s(n+1,m) = s(n,m-1) - n s(n,m) for n >= m >= 1.
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \eqalign{ s(n,n) &= 1 \qquad \hbox{for } n \ge 0, \cr
s(n,0) &= 0 \qquad \hbox{for } n > 0, \cr
@ -6875,7 +6860,6 @@ get the row sum. Similarly, use @kbd{[1 1] r 4 *} to get the column sum.
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \eqalign{ x &+ a y = 6 \cr
x &+ b y = 10}
@ -6939,7 +6923,6 @@ which we can solve using Calc's @samp{/} command.
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplayh
$$ \openup1\jot \tabskip=0pt plus1fil
\halign to\displaywidth{\tabskip=0pt
@ -7074,7 +7057,6 @@ the first job is to form the matrix that describes the problem.
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ m \times x + b \times 1 = y $$
\afterdisplay
@ -7865,7 +7847,6 @@ So the result when we take the modulo after every step is,
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ 3 (3 a + b - 511 m) + c - 511 n $$
\afterdisplay
@ -7881,7 +7862,6 @@ the distributive law yields
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ 9 a + 3 b + c - 511\times3 m - 511 n $$
\afterdisplay
@ -7899,7 +7879,6 @@ term. So we can take it out to get an equivalent formula with
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ 9 a + 3 b + c - 511 n^{\prime} $$
\afterdisplay
@ -14408,7 +14387,6 @@ $$ \sin\left( a^2 \over b_i \right) $$
@end group
@end example
@tex
\turnoffactive
$$ [3 + 4i, {3 \over 4}, 3 \pm 4, [ 3 \ldots \infty)] $$
@end tex
@sp 1
@ -14434,7 +14412,6 @@ $$ [|a|, \left| a \over b \right|,
@end group
@end example
@tex
\turnoffactive
$$ [\sin{a}, \sin{2 a}, \sin(2 + a), \sin\left( {a \over b} \right)] $$
@end tex
@sp 2
@ -14467,7 +14444,6 @@ First with @samp{\def\evalto@{@}}, then with @samp{\def\evalto#1\to@{@}}:
@end group
@end example
@tex
\turnoffactive
$$ 2 + 3 \to 5 $$
$$ 5 $$
@end tex
@ -14482,7 +14458,6 @@ First with standard @code{\to}, then with @samp{\let\to\Rightarrow}:
@end group
@end example
@tex
\turnoffactive
$$ [{2 + 3 \to 5}, {{a \over 2} \to {b + c \over 2}}] $$
{\let\to\Rightarrow
$$ [{2 + 3 \to 5}, {{a \over 2} \to {b + c \over 2}}] $$}
@ -14499,7 +14474,6 @@ Matrices normally, then changing @code{\matrix} to @code{\pmatrix}:
@end group
@end example
@tex
\turnoffactive
$$ \matrix{ {a \over b} & 0 \cr 0 & 2^{(x + 1)} } $$
$$ \pmatrix{ {a \over b} & 0 \cr 0 & 2^{(x + 1)} } $$
@end tex
@ -17935,7 +17909,6 @@ ddb(cost, salv, life, per) = --------, book = cost - depreciation so far
@end example
@end ifnottex
@tex
\turnoffactive
$$ \code{fv}(r, n, p) = p { (1 + r)^n - 1 \over r } $$
$$ \code{fvb}(r, n, p) = p { ((1 + r)^n - 1) (1 + r) \over r } $$
$$ \code{fvl}(r, n, p) = p (1 + r)^n $$
@ -18591,7 +18564,6 @@ letter gamma). You can obtain these using the @kbd{H f G} [@code{gammag}]
and @kbd{H I f G} [@code{gammaG}] commands.
@end ifnottex
@tex
\turnoffactive
The functions corresponding to the integrals that define $P(a,x)$
and $Q(a,x)$ but without the normalizing $1/\Gamma(a)$
factor are called $\gamma(a,x)$ and $\Gamma(a,x)$, respectively.
@ -20058,6 +20030,20 @@ range are ignored. (You can tell if elements have been ignored by noting
that the counts in the result vector don't add up to the length of the
input vector.)
If no prefix is given, then you will be prompted for a vector which
will be used to determine the bins. (If a positive integer is given at
this prompt, it will be still treated as if it were given as a
prefix.) Each bin will consist of the interval of numbers closest to
the corresponding number of this new vector; if the vector
@expr{[a, b, c, ...]} is entered at the prompt, the bins will be
@expr{(-inf, (a+b)/2]}, @expr{((a+b)/2, (b+c)/2]}, etc. The result of
this command will be a vector counting how many elements of the
original vector are in each bin.
The result will then be a vector with the same length as this new vector;
each element of the new vector will be replaced by the number of
elements of the original vector which are closest to it.
@kindex H v H
@kindex H V H
With the Hyperbolic flag, @kbd{H V H} pulls two vectors from the stack.
@ -20559,7 +20545,6 @@ this is the weighted mean of the @expr{x} values with weights
@texline @math{1 /\sigma^2}.
@infoline @expr{1 / s^2}.
@tex
\turnoffactive
$$ \mu = { \displaystyle \sum { x_i \over \sigma_i^2 } \over
\displaystyle \sum { 1 \over \sigma_i^2 } } $$
@end tex
@ -20593,7 +20578,6 @@ root of the reciprocal of the sum of the reciprocals of the squares
of the input errors. (I.e., the variance is the reciprocal of the
sum of the reciprocals of the variances.)
@tex
\turnoffactive
$$ \sigma_\mu^2 = {1 \over \displaystyle \sum {1 \over \sigma_i^2}} $$
@end tex
If the inputs are plain
@ -20603,7 +20587,6 @@ out to be equivalent to calculating the standard deviation and
then assuming each value's error is equal to this standard
deviation.)
@tex
\turnoffactive
$$ \sigma_\mu^2 = {\sigma^2 \over N} $$
@end tex
@ -20636,7 +20619,6 @@ command computes the harmonic mean of the data values. This is
defined as the reciprocal of the arithmetic mean of the reciprocals
of the values.
@tex
\turnoffactive
$$ { N \over \displaystyle \sum {1 \over x_i} } $$
@end tex
@ -20650,7 +20632,6 @@ is the @var{n}th root of the product of the values. This is also
equal to the @code{exp} of the arithmetic mean of the logarithms
of the data values.
@tex
\turnoffactive
$$ \exp \left ( \sum { \ln x_i } \right ) =
\left ( \prod { x_i } \right)^{1 / N} $$
@end tex
@ -20662,7 +20643,6 @@ mean'' of two numbers taken from the stack. This is computed by
replacing the two numbers with their arithmetic mean and geometric
mean, then repeating until the two values converge.
@tex
\turnoffactive
$$ a_{i+1} = { a_i + b_i \over 2 } , \qquad b_{i+1} = \sqrt{a_i b_i} $$
@end tex
@ -20685,7 +20665,6 @@ deviation, whose value is the square root of the sum of the squares of
the differences between the values and the mean of the @expr{N} values,
divided by @expr{N-1}.
@tex
\turnoffactive
$$ \sigma^2 = {1 \over N - 1} \sum (x_i - \mu)^2 $$
@end tex
@ -20712,7 +20691,6 @@ is used when the input represents a sample of the set of all
data values, so that the mean computed from the input is itself
only an estimate of the true mean.
@tex
\turnoffactive
$$ \sigma^2 = {1 \over N} \sum (x_i - \mu)^2 $$
@end tex
@ -20777,7 +20755,6 @@ are composed of error forms, the error for a given data point
is taken as the square root of the sum of the squares of the two
input errors.
@tex
\turnoffactive
$$ \sigma_{x\!y}^2 = {1 \over N-1} \sum (x_i - \mu_x) (y_i - \mu_y) $$
$$ \sigma_{x\!y}^2 =
{\displaystyle {1 \over N-1}
@ -20805,7 +20782,6 @@ This is defined by the covariance of the vectors divided by the
product of their standard deviations. (There is no difference
between sample or population statistics here.)
@tex
\turnoffactive
$$ r_{x\!y} = { \sigma_{x\!y}^2 \over \sigma_x^2 \sigma_y^2 } $$
@end tex
@ -24361,8 +24337,6 @@ For example, suppose the data matrix
@end example
@end ifnottex
@tex
\turnoffactive
\turnoffactive
\beforedisplay
$$ \pmatrix{ 1 & 2 & 3 & 4 & 5 \cr
5 & 7 & 9 & 11 & 13 }
@ -24422,7 +24396,6 @@ chi^2 = sum((y_i - (a + b x_i))^2, i, 1, N)
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \chi^2 = \sum_{i=1}^N (y_i - (a + b x_i))^2 $$
\afterdisplay
@ -24613,7 +24586,6 @@ chi^2 = sum(((y_i - (a + b x_i)) / sigma_i)^2, i, 1, N)
@end example
@end ifnottex
@tex
\turnoffactive
\beforedisplay
$$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$
\afterdisplay
@ -25388,7 +25360,6 @@ any later ones are answered by reading additional elements from
the stack. Thus, @kbd{' k^2 @key{RET} ' k @key{RET} 1 @key{RET} 5 @key{RET} a + @key{RET}}
produces the result 55.
@tex
\turnoffactive
$$ \sum_{k=1}^5 k^2 = 55 $$
@end tex

View File

@ -369,6 +369,17 @@ eshell/ls is a compiled Lisp function in `em-ls.el'
/bin/ls
@end example
If you want to discard a given built-in command, you could declare an
alias, @ref{Aliases}. Eample:
@example
~ $ which sudo
eshell/sudo is a compiled Lisp function in `em-unix.el'
~ $ alias sudo '*sudo $*'
~ $ which sudo
sudo is an alias, defined as "*sudo $*"
@end example
Some of the built-in commands have a special behaviour in Eshell:
@table @code

View File

@ -22906,8 +22906,11 @@ default.
@item gnus-expert-user
@vindex gnus-expert-user
If this variable is non-@code{nil}, you will seldom be asked any
questions by Gnus. It will simply assume you know what you're doing, no
matter how strange.
questions by Gnus. It will simply assume you know what you're doing,
no matter how strange. For example, quitting Gnus, exiting a group
without an update, catching up with a group, deleting expired
articles, and replying by mail to a news message will not require
confirmation.
@item gnus-interactive-catchup
@vindex gnus-interactive-catchup

View File

@ -1,3 +1,20 @@
2010-06-09 Michael Albinus <michael.albinus@gmx.de>
* NEWS: Add notifications.el.
2010-05-28 Glenn Morris <rgm@gnu.org>
* MACHINES: Remove some old information no longer of relevance.
Switch to outline-mode.
2010-05-27 Glenn Morris <rgm@gnu.org>
* PROBLEMS: Remove old information no longer of relevance.
2010-05-24 Stefan Monnier <monnier@iro.umontreal.ca>
* NEWS: Add sections for Emacs-23.3.
2010-05-08 Chong Yidong <cyd@stupidchicken.com>
* PROBLEMS: Document gcc-4.5 bug (Bug#6031).
@ -43,8 +60,7 @@
2010-03-24 Francesc Rocher <rocher@member.fsf.org>
* MORE.STUFF: Remove CEDET entry, now distributed as part of
Emacs.
* MORE.STUFF: Remove CEDET entry, now distributed as part of Emacs.
2010-03-22 Teodor Zlatanov <tzz@lifelogs.com>

View File

@ -627,8 +627,7 @@ CPU-specific headers in the subdirectories of `src'):
- In src/s/SYSTEM-NAME.h add "#define SYSTEM_MALLOC".
- In src/m/MACHINE-NAME.h add "#define CANNOT_DUMP" and
"#define CANNOT_UNEXEC".
- In src/m/MACHINE-NAME.h add "#define CANNOT_DUMP"
- Configure with a different --prefix= option. If you use GCC,
version 2.7.2 is preferred, as some malloc debugging packages

View File

@ -6,9 +6,9 @@ See the end of the file for license conditions.
This is a list of the status of GNU Emacs on various machines and systems.
For each system and machine, we give the configuration name you should
pass to the `configure' script to prepare to build Emacs for that
system/machine.
Information about older releases, and platforms that are no longer
supported, has been removed. Consult older versions of this file if
you are interested in this information.
The `configure' script uses the configuration name to decide which
machine and operating system description files `src/config.h' should
@ -25,16 +25,10 @@ configuration name(s) should select your new machine description and
system description files.
Some obsolete platforms are unsupported beginning with Emacs 23.1, see
the full list at the end of this file.
the list at the end of this file.
Here are the configurations Emacs is intended to work with, with the
corresponding configuration names. You can postpend version numbers
to operating system names (i.e. sunos4.1) or architecture names (i.e.
hppa1.1). If you leave out the version number, the `configure' script
will configure Emacs for the latest version it knows about.
Alpha (DEC) running GNU/Linux (alpha-dec-linux-gnu)
** Alpha (DEC) running GNU/Linux (alpha-dec-linux-gnu)
DEC C compiler version 5.9 (DEC C V5.9-005 on Digital UNIX V4.0f)
is reported to produce bogus binaries of Emacs 21.2 when the
@ -47,125 +41,26 @@ Alpha (DEC) running GNU/Linux (alpha-dec-linux-gnu)
versions fail to build with a message "Invalid dimension for the
charset-ID 160".
Note that the X11 libraries on GNU/Linux systems for the Alpha are
said to have bugs that prevent Emacs from working with X (as of
November 1995). Recent releases work (July 2000).
** Apple Macintosh running Mac OS X
Apple Macintosh running Mac OS X
** Apple PowerPC Macintosh running GNU/Linux
For installation instructions see the file nextstep/INSTALL.
Apple PowerPC Macintosh running GNU/Linux
There are special considerations for a variety of this system which
is known as the ``Yellow Dog [GNU/]Linux'': Emacs may crash during
dumping. To solve this, edit the header file src/m/macppc.h in the
Emacs distribution, and remove the "#if 0" and "#endif" directives
which surround the following block near the end of the file:
#if 0 /* This breaks things on PPC GNU/Linux except for Yellowdog,
even with identical GCC, as, ld. Let's take it out until we
know what's really going on here. */
/* GCC 2.95 and newer on GNU/Linux PPC changed the load address to
0x10000000. */
#if defined __linux__
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
#define DATA_SEG_BITS 0x10000000
#endif
#endif
#endif /* 0 */
After that, reconfigure and rebuild Emacs. It should now build
successfully.
Cubix QBx/386 (i386-cubix-sysv)
Changes merged in 19.1. Systems before 2/A/0 may fail to compile etags.c
due to a compiler bug.
Motorola Delta 147 (m68k-motorola-sysv)
The EMacs 19.26 pretest was reported to work.
Motorola Delta boxes running System V/68 release 3.
Tested on 147 board with SVR3V7, no X and gcc.
Tested on 167 board with SVR3V7, no X, cc, gnucc and gcc.
Reports say it works with X too.
The installation script chooses the compiler itself. gnucc is
preferred.
Fujitsu DS/90 (sparc-fujitsu-sysv4)
Changes merged in 20.3.
HP 9000 series 700 or 800 (Spectrum) (hppa1.0-hp-hpux or hppa1.1-hp-hpux
or ...hpux9shr)
Use hppa1.1 for the 700 series and hppa1.0 for the 800
series machines. (Emacs may not actually care which one you use.)
** HP 9000 series 700 or 800 (Spectrum) (hppa1.0-hp-hpux or hppa1.1-hp-hpux)
Emacs 20 may work on HPUX 10. You need patch PHSS_6202 to install
the Xaw and Xmu libraries. On HPUX 10.20 you may need to compile with GCC;
when Emacs was compiled with HP's C compiler, HP92453-01 A.10.32.03,
the subprocess features failed to work.
19.26 is believed to work on HPUX 9 provided you compile with GCC.
As of version 19.16, Emacs was reported to build (using GCC) and run
on HP 9000/700 series machines running HP/UX versions 8.07 and 9.01.
The HP compiler is known to fail on some versions if you use +O3,
but it may work with lower optimization levels.
Use hppa1.1-hp-hpux9shr to use shared libraries on HPUX version 9.
You may need to create the X libraries libXaw.a and libXmu.a from
the MIT X distribute, and you may need to edit src/Makefile's
definition of LIBXT to look like this:
LIBXT= $(LIBW) -lXmu -lXt $(LIBXTR6) -lXext
Some people report trouble using the GNU memory allocator under
HP/UX version 9. The problems often manifest as lots of ^@'s in the
buffer.
We are told that these problems go away if you obtain the latest
patches for the HP/UX C compiler. James J Dempsey
<jjd@spserv.bbn.com> says that this set of versions works for him:
/bin/cc:
HP92453-01 A.09.28 HP C Compiler
/lib/ccom:
HP92453-01 A.09.28 HP C Compiler
HP-UX SLLIC/OPTIMIZER HP-UX.09.00.23 02/18/93
Ucode Code Generator - HP-UX.09.00.23.5 (patch) 2/18/93
For 700 series machines, the HP-UX patch needed is known as
PHSS_2653. (Perhaps for 800 series machines as well; we don't
know.) If you are on the Internet, you should be able to obtain
this patch by using telnet to access the machine
support.mayfield.hp.com and logging in as "hpslreg" and following
the instructions there. Or you may be able to use this
web site:
HP Patch Server: http://support.mayfield.hp.com/patches/html/patches.html
HP Support Line: http://support.mayfield.hp.com
Please do not ask FSF for further support on this. If you have any
trouble obtaining the patch, contact HP Software Support.
If your buffer fills up with nulls (^@) at some point, it could well
be that problem. That problem does not happen when people use GCC
to compile Emacs. On the other hand, the HP compiler version 9.34
was reported to work for the 19.26 pretest. 9.65 was also reported to work.
If you turn on the DSUSP character (delayed suspend),
Emacs 19.26 does not know how to turn it off on HPUX.
You need to turn it off manually.
If you turn on the DSUSP character (delayed suspend), Emacs 19.26
does not know how to turn it off on HPUX. You need to turn it off manually.
If you are running HP/UX release 8.0 or later, you need the optional
"C/ANSI C" software in order to build Emacs (older releases of HP/UX
do not require any special software). If the file "/etc/filesets/C"
exists on your machine, you have this software, otherwise you do not.
IBM RS/6000 (rs6000-ibm-aix*)
** IBM RS/6000 (rs6000-ibm-aix*)
Emacs 19.26 is believed to work; its pretest was tested.
@ -180,32 +75,22 @@ IBM RS/6000 (rs6000-ibm-aix*)
persons say that the tty VMIN and VTIME settings have been
corrupted; if you have a fix, please send it to us.
Compiling with -O using the IBM compiler has been known
to make Emacs work incorrectly. It's reported that on
AIX 3.2.5 with an IBM compiler earlier than 1.03.00.14,
cc -O fails for some files. You need to install any
PTF containing APAR #IX42810 to bring the compiler to
the 1.03.00.14 level to allow optimized compiles.
There are reports that IBM compiler versions earlier than 1.03.00.02
fail even without -O. However, another report said that compiler
version 1.02.01.00 did work, on AIX 3.2.4, with Emacs 19.31.
Compiling with -O using the IBM compiler has been known to make
Emacs work incorrectly. There are reports that IBM compiler versions
earlier than 1.03.00.02 fail even without -O.
As of 19.11, if you strip the Emacs executable, it ceases to work.
If anyone can fix the above problems, or confirm that they don't happen
with certain versions of various programs, we would appreciate it.
IBM System/390 running GNU/Linux (s390-*-linux-gnu)
** IBM System/390 running GNU/Linux (s390-*-linux-gnu)
As of Emacs 21.2, a 31-bit only version is supported on this
system.
As of Emacs 21.2, a 31-bit only version is supported on this system.
Intel 386 (i386-*-freebsd, i386-*-linux-gnu,
i386-*-sol2.4, i386-intsys-sysv,
i386-*-sysv4, i386-*-sysv4.2, i386-*-cygwin,
i386-*-msdos, i386-*-windowsnt.
i386... can be replaced with i486... or i586...)
** Intel 386 (i386-*-freebsd, i386-*-linux-gnu,
i386-*-cygwin, i386-*-msdos, i386-*-windowsnt.
i386 can be replaced with i486, i586, or i686)
In the above configurations, * means that the manufacturer's name
you specify does not matter, and you can use any name you like
@ -214,12 +99,9 @@ Intel 386 (i386-*-freebsd, i386-*-linux-gnu,
Use i386-*-linux-gnu for GNU/Linux systems; Emacs runs as of version 19.26.
Use i386-*-cygwin for Cygwin; Emacs builds as of version 22.1, in both X11
and non-X11 modes. (The Cygwin site has source and binaries for 21.2.)
Use i386-intsys-sysv for Integrated Solutions 386 machines.
It may also be correct for Microport systems.
On GNU/Linux systems, Emacs 19.23 was said to work properly with libc
version 4.5.21, but not with 4.5.19. If your system uses QMAGIC
for the executable format, you must edit config.h to define LINUX_QMAGIC.
version 4.5.21, but not with 4.5.19.
On GNU/Linux, configure may fail to put these definitions in config.h:
@ -232,26 +114,11 @@ Intel 386 (i386-*-freebsd, i386-*-linux-gnu,
It is possible that this problem happens only with X11R6.
Newer system versions have fixed it.
The 19.26 pretest was reported to work on SVR4.3 and on Freebsd.
19.29 is reported to crash when using Motif on Solaris 2.5.
The reasons are not yet known.
For System V release 4, use i386-*-sysv4.
For System V release 4.2, use i386-*-sysv4.2.
If you are using SCO Unix, see notes at end under SCO.
On NetBSD and FreeBSD, at one time, it was necessary to use
GNU make, not the system's make. Assuming it's installed as gmake,
do `gmake install MAKE=gmake'. However, more recently it is
reported that using the system Make on NetBSD 1.3.1 works ok.
If you are using System V release 4.2, you may find that `cc -E'
puts spurious spaces in `src/xmakefile'. If that happens,
specify CPP=/lib/cpp as an option when you run make.
There is no problem if you compile with GCC.
Note that use of Linux with GCC 2.4 and the DLL 4.4 libraries
requires the experimental "net 2" network patches (no relation to
Berkeley Net 2). There is a report that (some version of) Linux
@ -259,16 +126,6 @@ Intel 386 (i386-*-freebsd, i386-*-linux-gnu,
but no coherent explanation of why that might be so. If it is so,
in current versions of Linux, something else should probably be changed.
Some versions have sys/sioctl.h, and require it in sysdep.c.
But some versions do not have sys/sioctl.h.
For a given version of the system, this may depend on whether you have
X Windows or TCP/IP. Define or undefine NO_SIOCTL_H in config.h
according to whether you have the file.
Likewise, some versions have been known to need sys/ttold.h, sys/stream.h,
and sys/ptem.h included in sysdep.c. If your system has these files,
try defining NEED_PTEM_H in config.h if you have trouble without it.
You may find that adding -I/usr/X/include or -I/usr/netinclude or both
to CFLAGS avoids compilation errors on certain systems.
@ -276,14 +133,13 @@ Intel 386 (i386-*-freebsd, i386-*-linux-gnu,
but define `struct tc' instead; add `#define tchars tc'
to config.h to solve this problem.
Iris 4D (mips-sgi-irix6.*)
** Iris 4D (mips-sgi-irix6.*)
Emacs 21.3 is reported to work on IRIX 6.5.x.
You can build a 64-bit executable (with larger maximum buffer size)
on Irix 6.5 by specifying the 64-bit ABI using the `-64' compiler
flag or otherwise (see cc(1)). This may work on earlier Irix 6
systems if you edit src/s/irix6-0.h following irix6-5.h.
flag or otherwise (see cc(1)).
If compiling with GCC on Irix 6 yields an error "conflicting types
for `initstate'", install GCC 2.95 or a newer version, and this
@ -292,36 +148,7 @@ Iris 4D (mips-sgi-irix6.*)
could also try reinstalling the same version of GCC, and telling us
whether that fixes the problem.
NCR Intel system (i386-ncr-sysv4.2)
This system works in 19.31, but if you don't link it with GNU ld,
you may need to set LD_RUN_PATH at link time to specify where
to find the X libraries.
Prime EXL (i386-prime-sysv)
Minor changes merged in 19.1.
Siemens Nixdorf RM600 and RM400 (mips-siemens-sysv4)
Changes merged in 19.29. The version configured with
`--with-x' works without any modifications, but `--with-x-toolkit'
works only if the Athena library and the Toolkit library are linked
statically. For this, edit `src/Makefile' after the `configure' run
and modify the lines with `-lXaw' and `-lXt' as follows:
LIBW= /usr/lib/libXaw.a
LIBXT= $(LIBW) -lXmu /usr/lib/libXt.a $(LIBXTR6) -lXext
In addition, `--with-x-toolkit=motif' works only
if the Motif library and the Toolkit library are linked statically.
To do this, edit `src/Makefile' after the `configure' run
and modify the lines with `-lXm' and `-lXt' as follows:
LIBW= /usr/lib/libXm.a /usr/ccs/lib/libgen.a
LIBXT= $(LIBW) -lXmu /usr/lib/libXt.a $(LIBXTR6) -lXext
Sun 4 (sparc), Sun 386 (sparc-sun-solaris2.*,
** Sun 4 (sparc), Sun 386 (sparc-sun-solaris2.*,
i386-sun-solaris2.*, sparc*-*-linux-gnu)
To build a 32-bit Emacs (i.e. if you are having any sort of problem
@ -369,16 +196,6 @@ Sun 4 (sparc), Sun 386 (sparc-sun-solaris2.*,
As of release 2.95, GCC doesn't work properly with the 64-bit ABI
(applicable on UltraSPARC), but that isn't the default mode.
Emacs 20.3 fails to build on Solaris 2.5 if you use GCC 2.7.2.3.
Installing GCC 2.8 fixes the problem.
19.32 works on Solaris 2.4 and 2.5. On Solaris 2.5
you may need one of these patches to prevent Emacs from crashing
when it starts up:
103093-03: [README] SunOS 5.5: kernel patch (2140557 bytes)
102832-01: [README] OpenWindows 3.5: Xview Jumbo Patch (4181613 bytes)
103242-04: [README] SunOS 5.5: linker patch (595363 bytes)
There are reports that using SunSoft cc with -xO4 -xdepend produces
bad code for some part of Emacs.
@ -390,11 +207,6 @@ Sun 4 (sparc), Sun 386 (sparc-sun-solaris2.*,
for transferring text between clients. The Cut, Paste and Copy items
in the menu bar Edit menu work with the clipboard.
A user reported irreproducible segmentation faults when using 19.29
on Solaris 2.3 and 2.4 after compiling it with the Sun compiler.
The problem went away when GCC 2.7.0 was used instead. We do not know
whether anything in Emacs is partly to blame for this.
If you compile with Sun's ANSI compiler acc, you need additional options
when linking temacs, such as
/usr/lang/SC2.0.1/values-Xt.o -L/usr/lang/SC2.0.1/cg87 -L/usr/lang/SC2.0.1
@ -416,40 +228,23 @@ Sun 4 (sparc), Sun 386 (sparc-sun-solaris2.*,
If you have trouble using open-network-stream, get the distribution
of `bind' (the BSD name-server), build libresolv.a, and link Emacs
with -lresolv, by copying the #definition of LIBS_SYSTEM in
src/s/sunos4-1.h to src/config.h. This problem is due to obsolete
software in the nonshared standard library.
with -lresolv, by editing LIBRESOLV in src/Makefile. This problem is
due to obsolete software in the nonshared standard library.
Note that Emacs on a Sun is not really as big as it looks.
As dumped, it includes around 200k of zeros between the
original text section and the original data section
(now remapped as part of the text). These are never
swapped in.
Note that Emacs on a Sun is not really as big as it looks. As
dumped, it includes around 200k of zeros between the original text
section and the original data section (now remapped as part of the
text). These are never swapped in.
SuperH (sh[34]*-*-linux-gnu)
** SuperH (sh[34]*-*-linux-gnu)
Emacs 23.0.60 was reported to work on GNU/Linux (October 2008).
Tested on a little-endian sh4 system (cpu type SH7751R) running
Gentoo Linux 2008.0.
Tadpole 68K (m68k-tadpole-sysv)
* Here are notes about some of the systems supported:
Changes merged in 19.1.
You may need to edit Makefile to change the variables LIBDIR and
BINDIR from /usr/local to /usr/contrib.
To give movemail access to /usr/mail, you may need to execute
chmod 2755 etc/movemail; chgrp mail etc/movemail
Vaxen running Berkeley Unix (vax-dec-bsd4.1, vax-dec-bsd4.2, vax-dec-bsd4.3)
Works.
Here are notes about some of the systems supported:
Linux (actually GNU/Linux)
** Linux (actually GNU/Linux)
Most of the complete systems which use the Linux kernel are close
enough to the GNU system to be considered variant GNU systems. We
@ -468,58 +263,22 @@ Linux (actually GNU/Linux)
people to write more free software. See the file LINUX-GNU in this
directory for more explanation.
Microport
** Mac OS X
See under "Intel 386".
For installation instructions see the file nextstep/INSTALL.
MSDOS
** MSDOS
For installation on MSDOS, see the file INSTALL (search for `MSDOG',
near the end of the file). See the "MS-DOS" chapter of the manual
for information about using Emacs on MSDOS.
For installation on MSDOS, see the file msdos/INSTALL.
See the "MS-DOS" chapter of the manual for information about using
Emacs on MSDOS.
System V rel 4.0.3 and 4.0.4 (usg5.4)
Supported, including shared libraries for ELF, but ptys do not work
because TIOCGPGRP fails to work on ptys (but Dell 2.2 seems to have
fixed this). This failure is probably due to a misunderstanding of
the consequences of the POSIX spec: many system designers mistakenly
think that POSIX requires this feature to fail. This is untrue;
ptys are an extension, and POSIX says that extensions *when used*
may change the action of standard facilities in any fashion.
If you get compilation errors about wrong number of
arguments to getpgrp, define GETPGRP_NO_ARG.
The standard C preprocessor may generate xmakefile incorrectly. However,
/lib/cpp will work, so use `make CPP=/lib/cpp'. Standard cpp
seems to work OK under Dell 2.2.
Some versions 3 and earlier of V.4, on the Intel 386 and 860, had
problems in the X11 libraries. These prevent Emacs from working
with X. You can use Emacs with X provided your copy of X is based
on X11 release 4 or newer, or is Dell's 2.2 (which is a 4.0.3).
Unfortunately, the only way you can tell whether your X11 library is
new enough is to try compiling Emacs to use X. If emacs runs, your
X11 library is new enough.
In this context, GSV4 and GSV4i are alternate names for X11R4.
OL2.* is X11R3 based. OL3 is in between X11R3 and X11R4, and may or
may not work, depending on who made the Unix system. If the library
libXol is part of the X distribution, then you have X11R3 and Emacs
won't work with X.
Most versions of V.4 support sockets. If `/usr/lib/libsocket.so'
exists, your system supports them. If yours does not, you must add
#undef HAVE_SOCKETS in config.h, after the inclusion of s-usg5-4.h.
(Any system that supports Internet should implement sockets.)
Windows NT/95/98/ME/2000
** MS-Windows NT/95/98/ME/2000
For installation on all versions of the MS-Windows platform, see the
file nt/INSTALL.
X86_64 GNU/Linux
** X86_64 GNU/Linux
No special procedures should be needed to build a 64-bit Emacs. To
build a 32-bit Emacs, first ensure that the necessary 32-bit system
@ -530,6 +289,9 @@ X86_64 GNU/Linux
(using the location of the 32-bit X libraries on your system).
* Obsolete platforms
Support for the following obsolete platforms was removed in Emacs 23.1
(the names in parentheses state the files in src/ that were removed):
@ -622,7 +384,7 @@ Support for the following obsolete platforms was removed in Emacs 23.1
Local variables:
mode: text
mode: outline
fill-prefix: " "
End:

View File

@ -24,6 +24,13 @@ so we will look at it and add it to the manual.
* Installation Changes in Emacs 24.1
** Configure links against libselinux if it is found.
You can disable this by using --without-selinux.
---
** By default, the installed Info and man pages are compressed.
You can disable this by configuring --without-compress-info.
---
** There are new configure options:
--with-mmdf, --with-mail-unlink, --with-mailhost.
@ -34,15 +41,16 @@ lib-src/Makefile by hand in order to use the associated features.
** There is a new configure option --with-crt-dir.
This is only useful if your crt*.o files are in a non-standard location.
** Configure links against libselinux if it is found.
You can disable this by using --without-selinux.
* Startup Changes in Emacs 24.1
* Changes in Emacs 24.1
** New emacsclient argument --parent-id ID can be used to open a
client frame in parent X window ID, via XEmbed. This works like the
--parent-id argument to Emacs.
** Completion can cycle, depending on completion-cycle-threshold.
** auto-mode-case-fold is now enabled by default.
@ -63,6 +71,9 @@ according to the value of this variable. Possible values are
default), Emacs determines the base direction of each paragraph from
its text, as specified by the Unicode Bidirectional Algorithm.
The function `current-bidi-paragraph-direction' returns the actual
value of paragraph base direction at point.
Reordering of bidirectional text for display in Emacs is a "Full
bidirectionality" class implementation of the Unicode Bidirectional
Algorithm.
@ -106,16 +117,20 @@ scroll a line instead of full screen.
** New property `scroll-command' should be set on a command's symbol to
define it as a scroll command affected by `scroll-preserve-screen-position.
** Trash changes
*** `delete-by-moving-to-trash' now only affects commands that specify
trashing. This avoids inadvertently trashing temporary files.
*** Calling `delete-file' or `delete-directory' with a prefix argument
now forces true deletion, regardless of `delete-by-moving-to-trash'.
* Editing Changes in Emacs 24.1
** completion-at-point is now an alias for complete-symbol.
** mouse-region-delete-keys has been deleted.
** If delete-file is called with a prefix argument, it really deletes,
regardless of the value of `delete-by-moving-to-trash'.
* Changes in Specialized Modes and Packages in Emacs 24.1
@ -144,10 +159,23 @@ Use the arrow to the left of the option name to toggle visibility.
*** The color widget now has a "Choose" button, which allows you to
choose a color via list-colors-display.
** Dired-x
*** dired-jump and dired-jump-other-window called with a prefix argument
read a file name from the minibuffer instead of using buffer-file-name.
** VC and related modes
*** New VC commands: vc-log-incoming, vc-log-outgoing, vc-find-conflicted-file.
**** vc-log-incoming for Git runs "git fetch" so that the necessary
data is available locally.
**** vc-log-incoming and vc-log-outgoing for Git require version 1.7 (or newer).
*** New key bindings: C-x v I and C-x v O bound to vc-log-incoming and
vc-log-outgoing, respectively.
*** vc-dir for Bzr supports viewing shelve contents and shelving snapshots.
*** Special markup can be added to log-edit buffers.
@ -159,6 +187,11 @@ with headers of the form:
Some backends handle some of those headers specially, but any unknown header
is just left as is in the message, so it is not lost.
**** vc-git handles Author: and Date:
**** vc-hg handles Author: and Date:
**** vc-bzr handles Author:, Date: and Fixes:
**** vc-mtn handles Author: and Date:
** Directory local variables can apply to file-less buffers.
For example, adding "(diff-mode . ((mode . whitespace)))" to your
.dir-locals.el file, will turn on `whitespace-mode' for *vc-diff* buffers.
@ -207,9 +240,16 @@ threads simultaneously.
* New Modes and Packages in Emacs 24.1
** smie.el is a package providing a simple generic indentation engine.
** secrets.el is an implementation of the Secret Service API, an
interface to password managers like GNOME Keyring or KDE Wallet. The
Secret Service API requires D-Bus for communication.
Secret Service API requires D-Bus for communication. The command
`secrets-show-secrets' offers a buffer with a visualization of the
secrets.
** notifications.el provides an implementation of the Desktop
Notifications API. It requires D-Bus for communication.
* Incompatible Lisp Changes in Emacs 24.1
@ -221,10 +261,14 @@ Secret Service API requires D-Bus for communication.
* Lisp changes in Emacs 24.1
** frame-local variables cannot be let-bound any more.
** prog-mode is a new major-mode meant to be the parent of programming mode.
** define-minor-mode accepts a new keyword :variable.
** delete-file now accepts an optional second arg, FORCE, which says
to always delete and ignore the value of delete-by-moving-to-trash.
** `delete-file' and `delete-directory now accept optional arg TRASH.
Trashing is performed if TRASH and `delete-by-moving-to-trash' are
both non-nil. Interactively, TRASH defaults to t, unless a prefix
argument is supplied (see Trash changes, above).
** buffer-substring-filters is obsoleted by filter-buffer-substring-functions.
@ -241,6 +285,10 @@ by the Graphic Control Extension of the image.
*** `image-extension-data' is renamed to `image-metadata'.
** Isearch
*** New hook `isearch-update-post-hook' that runs in `isearch-update'.
** Progress reporters can now "spin".
The MIN-VALUE and MAX-VALUE arguments of `make-progress-reporter' can
now be nil, or omitted. This makes a "non-numeric" reporter. Each

View File

@ -14,6 +14,33 @@ for changes in older Emacs versions.
You can narrow news to a specific version by calling `view-emacs-news'
with a prefix argument or by typing C-u C-h C-n.
* Installation Changes in Emacs 23.3
* Startup Changes in Emacs 23.3
* Changes in Emacs 23.3
* Editing Changes in Emacs 23.3
* Changes in Specialized Modes and Packages in Emacs 23.3
* New Modes and Packages in Emacs 23.3
* Incompatible Lisp Changes in Emacs 23.3
* Lisp changes in Emacs 23.3
** New function byte-to-string, like char-to-string but for bytes.
* Changes in Emacs 23.3 on non-free operating systems
* Installation Changes in Emacs 23.2

View File

@ -9,7 +9,9 @@ See the end of the file for license conditions.
This file describes various problems that have been encountered
in compiling, installing and running GNU Emacs. Try doing C-c C-t
and browsing through the outline headers. (See C-h m for help on
Outline mode.)
Outline mode.) Information about systems that are no longer supported,
and old Emacs releases, has been removed. Consult older versions of
this file if you are interested in that information.
* Mule-UCS doesn't work in Emacs 23.
@ -85,18 +87,10 @@ it's loaded very early in the startup procedure.)
Similarly, any other .el file for which there's no corresponding .elc
file could fail to load if it is compressed.
The solution is to uncompress all .el files which don't have a .elc
file.
The solution is to uncompress all .el files that don't have a .elc file.
Another possible reason for such failures is stale *.elc files
lurking somewhere on your load-path. The following command will
print any duplicate Lisp files that are present in load-path:
emacs -q -batch -f list-load-path-shadows
If this command prints any file names, some of these files are stale,
and should be deleted or their directories removed from your
load-path.
lurking somewhere on your load-path -- see the next section.
** Emacs prints an error at startup after upgrading from an earlier version.
@ -273,8 +267,7 @@ than the corresponding .el file.
These control the actions of Emacs.
~/.emacs is your Emacs init file.
EMACSLOADPATH overrides which directories the function
"load" will search.
EMACSLOADPATH overrides which directories the function "load" will search.
If you observe strange problems, check for these and get rid
of them, then try again.
@ -420,8 +413,7 @@ For example, (system-name) returns some variation on
You need to configure your machine with a fully qualified domain name,
(i.e. a name with at least one ".") either in /etc/hosts,
/etc/hostname, the NIS, or wherever your system calls for specifying
this.
/etc/hostname, the NIS, or wherever your system calls for specifying this.
If you cannot fix the configuration, you can set the Lisp variable
mail-host-address to the value you want.
@ -487,13 +479,7 @@ causes it.
else
{
** PSGML
*** Old versions of the PSGML package use the obsolete variables
`before-change-function' and `after-change-function', which are no
longer used by Emacs. Please use PSGML 1.2.3 or later.
*** PSGML conflicts with sgml-mode.
** PSGML conflicts with sgml-mode.
PSGML package uses the same names of some variables (like keymap)
as built-in sgml-mode.el because it was created as a replacement
@ -503,38 +489,6 @@ HTML page and then start to work with SGML or XML file. html-mode
(from sgml-mode.el) is used for HTML file and loading of psgml.el
(for sgml-mode or xml-mode) will cause an error.
*** Versions of the PSGML package earlier than 1.0.3 (stable) or 1.1.2
(alpha) fail to parse DTD files correctly in Emacs 20.3 and later.
Here is a patch for psgml-parse.el from PSGML 1.0.1 and, probably,
earlier versions.
--- psgml-parse.el 1998/08/21 19:18:18 1.1
+++ psgml-parse.el 1998/08/21 19:20:00
@@ -2383,7 +2383,7 @@ (defun sgml-push-to-entity (entity &opti
(setq sgml-buffer-parse-state nil))
(cond
((stringp entity) ; a file name
- (save-excursion (insert-file-contents entity))
+ (insert-file-contents entity)
(setq default-directory (file-name-directory entity)))
((consp (sgml-entity-text entity)) ; external id?
(let* ((extid (sgml-entity-text entity))
** AUCTeX
You should not be using a version older than 11.52 if you can avoid
it.
*** Emacs 21 freezes when visiting a TeX file with AUCTeX installed.
Emacs 21 needs version 10 or later of AUCTeX; upgrading should solve
these problems.
*** No colors in AUCTeX with Emacs 21.
Upgrade to AUC TeX version 10 or later, and make sure it is
byte-compiled with Emacs 21.
** PCL-CVS
*** Lines are not updated or new lines are added in the buffer upon commit.
@ -568,8 +522,7 @@ terminal type.
The cause of this is a shell startup file that sets the TERMCAP
environment variable. The terminal emulator uses that variable to
provide the information on the special terminal type that Emacs
emulates.
provide the information on the special terminal type that Emacs emulates.
Rewrite your shell startup file so that it does not change TERMCAP
in such a case. You could use the following conditional which sets
@ -642,16 +595,6 @@ To work around the problem, you could either (a) set the variable
invoking `df'; (b) use `df' from the GNU Fileutils package; or
(c) use CVS, which is Free Software, instead of ClearCase.
*** Versions of the W3 package released before Emacs 21.1 don't run
under Emacs 21. This fixed in W3 version 4.0pre.47.
*** The LDAP support rely on ldapsearch program from OpenLDAP version 2.
It can fail to work with ldapsearch program from OpenLDAP version 1.
Version 1 of OpenLDAP is now deprecated. If you are still using it,
please upgrade to version 2. As a temporary workaround, remove
argument "-x" from the variable `ldap-ldapsearch-args'.
*** ps-print commands fail to find prologue files ps-prin*.ps.
This can happen if you use an old version of X-Symbol package: it
@ -878,8 +821,7 @@ To circumvent this problem, set x-use-underline-position-properties
to nil in your `.emacs'.
To see what is the value of UNDERLINE_POSITION defined by the font,
type `xlsfonts -lll FONT' and look at the font's UNDERLINE_POSITION
property.
type `xlsfonts -lll FONT' and look at the font's UNDERLINE_POSITION property.
** When using Exceed, fonts sometimes appear too tall.
@ -929,12 +871,6 @@ mule-unicode-2500-33ff:-gnu-unifont-*-iso10646-1,\
mule-unicode-e000-ffff:-gnu-unifont-*-iso10646-1,\
mule-unicode-0100-24ff:-gnu-unifont-*-iso10646-1
*** Athena/Lucid toolkit limitations
The Athena/Lucid toolkit cannot display UTF-8 strings in the menu, so
if you have UTF-8 buffer names, the buffer menu won't display the
names properly. The GTK+ toolkit works properly.
** The UTF-8/16/7 coding systems don't encode CJK (Far Eastern) characters.
Emacs directly supports the Unicode BMP whose code points are in the
@ -969,8 +905,7 @@ To see what glyphs are included in a font, use `xfd', like this:
xfd -fn -schumacher-clean-medium-r-normal--12-120-75-75-c-60-iso8859-1
If this shows only ASCII glyphs, the font is indeed the source of the
problem.
If this shows only ASCII glyphs, the font is indeed the source of the problem.
The solution is to remove the corresponding lines from the appropriate
`fonts.alias' file, then run `mkfontdir' in that directory, and then run
@ -1076,8 +1011,7 @@ have made the key binding correctly.
If C-h c reports an event that doesn't have the Alt modifier, it may
be because your X server has no key for the Alt modifier. The X
server that comes from MIT does not set up the Alt modifier by
default.
server that comes from MIT does not set up the Alt modifier by default.
If your keyboard has keys named Alt, you can enable them as follows:
@ -1219,8 +1153,7 @@ menu placement.
On some systems, even with Motif 1.2 emulation, Emacs occasionally
locks up, grabbing all mouse and keyboard events. We still don't know
what causes these problems; they are not reproducible by Emacs
developers.
what causes these problems; they are not reproducible by Emacs developers.
*** Motif: The Motif version of Emacs paints the screen a solid color.
@ -1387,15 +1320,6 @@ One cause of such problems is having (setq term-file-prefix nil) in
your .emacs file. Another cause is a bad value of EMACSLOADPATH in
the environment.
*** Emacs fails to get default settings from X Windows server.
The X library in X11R4 has a bug; it interchanges the 2nd and 3rd
arguments to XGetDefaults. Define the macro XBACKWARDS in config.h to
tell Emacs to compensate for this.
I don't believe there is any way Emacs can determine for itself
whether this problem is present on a given system.
*** X Windows doesn't work if DISPLAY uses a hostname.
People have reported kernel bugs in certain systems that cause Emacs
@ -1407,12 +1331,6 @@ You may be able to compensate for the bug by doing (set-input-mode nil nil).
However, that has the disadvantage of turning off interrupts, so that
you are unable to quit out of a Lisp program by typing C-g.
The easy way to do this is to put
(setq x-sigio-bug t)
in your site-init.el file.
*** Prevent double pastes in X
The problem: a region, such as a command, is pasted twice when you copy
@ -1564,8 +1482,7 @@ In this case, there is no obvious bug in Emacs, and most likely you
need more padding, or possibly the terminal manual is wrong.
2) The characters sent are incorrect, due to an obscure aspect
of the terminal behavior not described in an obvious way
by termcap.
of the terminal behavior not described in an obvious way by termcap.
This case is hard. It will be necessary to think of a way for
Emacs to distinguish between terminals with this kind of behavior
@ -1591,8 +1508,7 @@ in termcap.c, tparam.c, term.c, scroll.c, cm.c or dispnew.c.
Some versions of rlogin (and possibly telnet) do not pass flow
control characters to the remote system to which they connect.
On such systems, emacs on the remote system cannot disable flow
control on the local system. Sometimes `rlogin -8' will avoid this
problem.
control on the local system. Sometimes `rlogin -8' will avoid this problem.
One way to cure this is to disable flow control on the local host
(the one running rlogin, not the one running rlogind) using the
@ -1611,8 +1527,7 @@ following to your .emacs (on the host running rlogind):
(enable-flow-control-on "vt200" "vt300" "vt101" "vt131")
See the entry about spontaneous display of I-search (above) for more
info.
See the entry about spontaneous display of I-search (above) for more info.
** Output from Control-V is slow.
@ -2010,8 +1925,8 @@ Definitions" to make them defined.
** Solaris
We list bugs in current versions here. Solaris 2.x and 4.x are covered in the
section on legacy systems.
We list bugs in current versions here. See also the section on legacy
systems.
*** On Solaris, C-x doesn't get through to Emacs when you use the console.
@ -2025,7 +1940,7 @@ may not work if you have used the unshared system libraries. This
is because the unshared libraries fail to use YP for host name lookup.
As a result, the host name you specify may not be recognized.
*** Solaris 2,6: Emacs crashes with SIGBUS or SIGSEGV on Solaris after you delete a frame.
*** Solaris 2.6: Emacs crashes with SIGBUS or SIGSEGV on Solaris after you delete a frame.
We suspect that this is a bug in the X libraries provided by
Sun. There is a report that one of these patches fixes the bug and
@ -2341,8 +2256,7 @@ selection".
Of this does not work, please inform bug-gnu-emacs@gnu.org. Then
please call support for your X-server and see if you can get a fix.
If you do, please send it to bug-gnu-emacs@gnu.org so we can list it
here.
If you do, please send it to bug-gnu-emacs@gnu.org so we can list it here.
* Build-time problems
@ -2373,18 +2287,6 @@ The solution is to tell configure to use the correct C preprocessor
for your C compiler (CPP="/opt/SUNWspro/bin/cc -E" in the above
example).
*** `configure' fails with ``"junk.c", line 660: invalid input token: 8.elc''
The final stage of the Emacs configure process uses the C preprocessor
to generate the Makefiles. Errors of this form can occur if the C
preprocessor inserts extra whitespace into its output. The solution
is to find the switches that stop your preprocessor from inserting extra
whitespace, add them to CPPFLAGS, and re-run configure. For example,
this error can occur on Solaris 10 when using the Sun Studio compiler
``Sun C 5.8'' with its preprocessor CPP="/opt/SUNWspro/bin/cc -E".
The relevant switch in this case is "-Xs" (``compile assuming
(pre-ANSI) K & R C style code'').
** Compilation
*** Building Emacs over NFS fails with ``Text file busy''.
@ -2427,46 +2329,6 @@ you are working on the host called `marvin'. Then an entry in the
The solution is to remove this line from `etc/fstab'.
*** Building Emacs with GCC 2.9x fails in the `src' directory.
This may happen if you use a development version of GNU `cpp' from one
of the GCC snapshots between Oct 2000 and Feb 2001, or from a released
version of GCC newer than 2.95.2 which was prepared around those
dates; similar problems were reported with some snapshots of GCC 3.1
around Sep 30 2001. The preprocessor in those versions is
incompatible with a traditional Unix cpp (e.g., it expands ".." into
". .", which breaks relative file names that reference the parent
directory; or inserts TAB characters before lines that set Make
variables).
The solution is to make sure the preprocessor is run with the
`-traditional' option. The `configure' script does that automatically
when it detects the known problems in your cpp, but you might hit some
unknown ones. To force the `configure' script to use `-traditional',
run the script like this:
CPP='gcc -E -traditional' ./configure ...
(replace the ellipsis "..." with any additional arguments you pass to
the script).
Note that this problem does not pertain to the MS-Windows port of
Emacs, since it doesn't use the preprocessor to generate Makefiles.
*** src/Makefile and lib-src/Makefile are truncated--most of the file missing.
*** Compiling wakeup, in lib-src, says it can't make wakeup.c.
This can happen if configure uses GNU sed version 2.03. That version
had a bug. GNU sed version 2.05 works properly.To solve the
problem, install the current version of GNU Sed, then rerun Emacs's
configure script.
*** Compiling lib-src says there is no rule to make test-distrib.c.
This results from a bug in a VERY old version of GNU Sed. To solve
the problem, install the current version of GNU Sed, then rerun
Emacs's configure script.
*** Building a 32-bit executable on a 64-bit GNU/Linux architecture.
First ensure that the necessary 32-bit system libraries and include
@ -2597,31 +2459,6 @@ A solution is to link with GCC, like this:
Since the .o object files already exist, this will not recompile Emacs
with GCC, but just restart by trying again to link temacs.
*** AIX 1.3 ptf 0013: Link failure.
There is a real duplicate definition of the function `_slibc_free' in
the library /lib/libc_s.a (just do nm on it to verify). The
workaround/fix is:
cd /lib
ar xv libc_s.a NLtmtime.o
ar dv libc_s.a NLtmtime.o
*** AIX 4.1.2: Linker error messages such as
ld: 0711-212 SEVERE ERROR: Symbol .__quous, found in the global symbol table
of archive /usr/lib/libIM.a, was not defined in archive member shr.o.
This is a problem in libIM.a. You can work around it by executing
these shell commands in the src subdirectory of the directory where
you build Emacs:
cp /usr/lib/libIM.a .
chmod 664 libIM.a
ranlib libIM.a
Then change -lIM to ./libIM.a in the command to link temacs (in
Makefile).
*** Sun with acc: Link failure when using acc on a Sun.
To use acc, you need additional options just before the libraries, such as
@ -2650,7 +2487,7 @@ The fix is to install a newer version of ncurses, such as version 4.2.
** Bootstrapping
Bootstrapping (compiling the .el files) is normally only necessary
with CVS builds, since the .elc files are pre-compiled in releases.
with development builds, since the .elc files are pre-compiled in releases.
*** "No rule to make target" with Ubuntu 8.04 make 3.81-3build1
@ -2762,32 +2599,28 @@ nonprinting characters, you can fix them:
*** temacs prints "Pure Lisp storage exhausted".
This means that the Lisp code loaded from the .elc and .el
files during temacs -l loadup inc dump took up more
space than was allocated.
This means that the Lisp code loaded from the .elc and .el files
during temacs -l loadup inc dump took up more space than was allocated.
This could be caused by
1) adding code to the preloaded Lisp files
2) adding more preloaded files in loadup.el
3) having a site-init.el or site-load.el which loads files.
Note that ANY site-init.el or site-load.el is nonstandard;
if you have received Emacs from some other site
and it contains a site-init.el or site-load.el file, consider
deleting that file.
if you have received Emacs from some other site and it contains a
site-init.el or site-load.el file, consider deleting that file.
4) getting the wrong .el or .elc files
(not from the directory you expected).
5) deleting some .elc files that are supposed to exist.
This would cause the source files (.el files) to be
loaded instead. They take up more room, so you lose.
6) a bug in the Emacs distribution which underestimates
the space required.
6) a bug in the Emacs distribution which underestimates the space required.
If the need for more space is legitimate, change the definition
of PURESIZE in puresize.h.
But in some of the cases listed above, this problem is a consequence
of something else that is wrong. Be sure to check and fix the real
problem.
of something else that is wrong. Be sure to check and fix the real problem.
*** Linux: Emacs crashes when dumping itself on Mac PPC running Yellow Dog GNU/Linux.
@ -2910,111 +2743,13 @@ of its files pure after dumping, but the variables declared static and
not initialized are not supposed to be pure. On these systems you
may need to add "#define static" to the m- or the s- file.
* Emacs 19 problems
** Error messages `Wrong number of arguments: #<subr where-is-internal>, 5'.
This typically results from having the powerkey library loaded.
Powerkey was designed for Emacs 19.22. It is obsolete now because
Emacs 19 now has this feature built in; and powerkey also calls
where-is-internal in an obsolete way.
So the fix is to arrange not to load powerkey.
* Runtime problems on legacy systems
This section covers bugs reported on very old hardware or software.
If you are using hardware and an operating system shipped after 2000,
it is unlikely you will see any of these.
** Ancient operating systems
AIX 4.2 was end-of-lifed on Dec 31st, 1999.
*** AIX: You get this compiler error message:
Processing include file ./XMenuInt.h
1501-106: (S) Include file X11/Xlib.h not found.
This means your system was installed with only the X11 runtime i.d
libraries. You have to find your sipo (bootable tape) and install
X11Dev... with smit.
(This report must be ancient. Bootable tapes are long dead.)
*** AIX 3.2.4: Releasing Ctrl/Act key has no effect, if Shift is down.
Due to a feature of AIX, pressing or releasing the Ctrl/Act key is
ignored when the Shift, Alt or AltGr keys are held down. This can
lead to the keyboard being "control-locked"--ordinary letters are
treated as control characters.
You can get out of this "control-locked" state by pressing and
releasing Ctrl/Act while not pressing or holding any other keys.
*** AIX 3.2.5: You get this message when running Emacs:
Could not load program emacs
Symbol smtcheckinit in csh is undefined
Error was: Exec format error
or this one:
Could not load program .emacs
Symbol _system_con in csh is undefined
Symbol _fp_trapsta in csh is undefined
Error was: Exec format error
These can happen when you try to run on AIX 3.2.5 a program that was
compiled with 3.2.4. The fix is to recompile.
*** AIX 4.2: Emacs gets a segmentation fault at startup.
If you are using IBM's xlc compiler, compile emacs.c
without optimization; that should avoid the problem.
*** ISC Unix
**** ISC: display-time causes kernel problems on ISC systems.
Under Interactive Unix versions 3.0.1 and 4.0 (and probably other
versions), display-time causes the loss of large numbers of STREVENT
cells. Eventually the kernel's supply of these cells is exhausted.
This makes emacs and the whole system run slow, and can make other
processes die, in particular pcnfsd.
Other emacs functions that communicate with remote processes may have
the same problem. Display-time seems to be far the worst.
The only known fix: Don't run display-time.
**** Sunos 5.3: Subprocesses remain, hanging but not zombies.
A bug in Sunos 5.3 causes Emacs subprocesses to remain after Emacs
exits. Sun patch # 101415-02 is part of the fix for this, but it only
applies to ptys, and doesn't fix the problem with subprocesses
communicating through pipes.
*** Irix
*** Irix 6.2: No visible display on mips-sgi-irix6.2 when compiling with GCC 2.8.1.
This problem went away after installing the latest IRIX patches
as of 8 Dec 1998.
The same problem has been reported on Irix 6.3.
*** Irix 6.3: substituting environment variables in file names
in the minibuffer gives peculiar error messages such as
Substituting nonexistent environment variable ""
This is not an Emacs bug; it is caused by something in SGI patch
003082 August 11, 1998.
*** OPENSTEP
**** OPENSTEP 4.2: Compiling syntax.c with gcc 2.7.2.1 fails.
*** OPENSTEP 4.2: Compiling syntax.c with gcc 2.7.2.1 fails.
The compiler was reported to crash while compiling syntax.c with the
following message:
@ -3052,81 +2787,6 @@ called. The problem does not happen if you compile with GCC.
This can happen if you configure Emacs without specifying the precise
version of Solaris that you are using.
**** Solaris 2.3 and 2.4: Unpredictable segmentation faults.
A user reported that this happened in 19.29 when it was compiled with
the Sun compiler, but not when he recompiled with GCC 2.7.0.
We do not know whether something in Emacs is partly to blame for this.
**** Solaris 2.4: Emacs dumps core on startup.
Bill Sebok says that the cause of this is Solaris 2.4 vendor patch
102303-05, which extends the Solaris linker to deal with the Solaris
Common Desktop Environment's linking needs. You can fix the problem
by removing this patch and installing patch 102049-02 instead.
However, that linker version won't work with CDE.
Solaris 2.5 comes with a linker that has this bug. It is reported that if
you install all the latest patches (as of June 1996), the bug is fixed.
We suspect the crucial patch is one of these, but we don't know
for certain.
103093-03: [README] SunOS 5.5: kernel patch (2140557 bytes)
102832-01: [README] OpenWindows 3.5: Xview Jumbo Patch (4181613 bytes)
103242-04: [README] SunOS 5.5: linker patch (595363 bytes)
(One user reports that the bug was fixed by those patches together
with patches 102980-04, 103279-01, 103300-02, and 103468-01.)
If you can determine which patch does fix the bug, please tell
bug-gnu-emacs@gnu.org.
Meanwhile, the GNU linker links Emacs properly on both Solaris 2.4 and
Solaris 2.5.
**** Solaris 2.4: Dired hangs and C-g does not work. Or Emacs hangs
forever waiting for termination of a subprocess that is a zombie.
casper@fwi.uva.nl says the problem is in X11R6. Rebuild libX11.so
after changing the file xc/config/cf/sunLib.tmpl. Change the lines
#if ThreadedX
#define SharedX11Reqs -lthread
#endif
to:
#if OSMinorVersion < 4
#if ThreadedX
#define SharedX11Reqs -lthread
#endif
#endif
Be sure also to edit x/config/cf/sun.cf so that OSMinorVersion is 4
(as it should be for Solaris 2.4). The file has three definitions for
OSMinorVersion: the first is for x86, the second for SPARC under
Solaris, and the third for SunOS 4. Make sure to update the
definition for your type of machine and system.
Then do `make Everything' in the top directory of X11R6, to rebuild
the makefiles and rebuild X. The X built this way work only on
Solaris 2.4, not on 2.3.
For multithreaded X to work it is necessary to install patch
101925-02 to fix problems in header files [2.4]. You need
to reinstall gcc or re-run just-fixinc after installing that
patch.
However, Frank Rust <frust@iti.cs.tu-bs.de> used a simpler solution:
he changed
#define ThreadedX YES
to
#define ThreadedX NO
in sun.cf and did `make World' to rebuild X11R6. Removing all
`-DXTHREAD*' flags and `-lthread' entries from lib/X11/Makefile and
typing 'make install' in that directory also seemed to work.
**** Solaris 2.x: GCC complains "64 bit integer types not supported".
This suggests that GCC is not installed correctly. Most likely you
@ -3172,23 +2832,11 @@ lists the supported locales; any locale other than "C" or "POSIX"
should do.
pen@lysator.liu.se says (Feb 1998) that the Compose key does work
if you link with the MIT X11 libraries instead of the Solaris X11
libraries.
*** HP/UX versions before 11.0
HP/UX 9 was end-of-lifed in December 1998.
HP/UX 10 was end-of-lifed in May 1999.
**** HP/UX 9: Emacs crashes with SIGBUS or SIGSEGV after you delete a frame.
We think this is due to a bug in the X libraries provided by HP. With
the alternative X libraries in /usr/contrib/mitX11R5/lib, the problem
does not happen.
if you link with the MIT X11 libraries instead of the Solaris X11 libraries.
*** HP/UX 10: Large file support is disabled.
See the comments in src/s/hpux10.h.
(HP/UX 10 was end-of-lifed in May 1999.)
See the comments in src/s/hpux10-20.h.
*** HP/UX: Emacs is slow using X11R5.
@ -3199,165 +2847,7 @@ libXmu.a, libXext.a and others. HP/UX normally doesn't come with
those libraries installed. To get good performance, you need to
install them and rebuild Emacs.
*** Ultrix and Digital Unix
**** Ultrix 4.2: `make install' fails on install-doc with `Error 141'.
This happens on Ultrix 4.2 due to failure of a pipeline of tar
commands. We don't know why they fail, but the bug seems not to be in
Emacs. The workaround is to run the shell command in install-doc by
hand.
**** Digital Unix 4.0: Garbled display on non-X terminals when Emacs runs.
So far it appears that running `tset' triggers this problem (when TERM
is vt100, at least). If you do not run `tset', then Emacs displays
properly. If someone can tell us precisely which effect of running
`tset' actually causes the problem, we may be able to implement a fix
in Emacs.
**** Ultrix: `expand-file-name' fails to work on any but the machine you dumped Emacs on.
On Ultrix, if you use any of the functions which look up information
in the passwd database before dumping Emacs (say, by using
expand-file-name in site-init.el), then those functions will not work
in the dumped Emacs on any host but the one Emacs was dumped on.
The solution? Don't use expand-file-name in site-init.el, or in
anything it loads. Yuck - some solution.
I'm not sure why this happens; if you can find out exactly what is
going on, and perhaps find a fix or a workaround, please let us know.
Perhaps the YP functions cache some information, the cache is included
in the dumped Emacs, and is then inaccurate on any other host.
*** SVr4
**** SVr4: On some variants of SVR4, Emacs does not work at all with X.
Try defining BROKEN_FIONREAD in your config.h file. If this solves
the problem, please send a bug report to tell us this is needed; be
sure to say exactly what type of machine and system you are using.
**** SVr4: After running emacs once, subsequent invocations crash.
Some versions of SVR4 have a serious bug in the implementation of the
mmap () system call in the kernel; this causes emacs to run correctly
the first time, and then crash when run a second time.
Contact your vendor and ask for the mmap bug fix; in the mean time,
you may be able to work around the problem by adding a line to your
operating system description file (whose name is reported by the
configure script) that reads:
#define SYSTEM_MALLOC
This makes Emacs use memory less efficiently, but seems to work around
the kernel bug.
*** Irix 5 and earlier
Exactly when Irix-5 end-of-lifed is obscure. But since Irix 6.0
shipped in 1994, it has been some years.
**** Irix 5.2: unexelfsgi.c can't find cmplrs/stsupport.h.
The file cmplrs/stsupport.h was included in the wrong file set in the
Irix 5.2 distribution. You can find it in the optional fileset
compiler_dev, or copy it from some other Irix 5.2 system. A kludgy
workaround is to change unexelfsgi.c to include sym.h instead of
syms.h.
**** Irix 5.3: "out of virtual swap space".
This message occurs when the system runs out of swap space due to too
many large programs running. The solution is either to provide more
swap space or to reduce the number of large programs being run. You
can check the current status of the swap space by executing the
command `swap -l'.
You can increase swap space by changing the file /etc/fstab. Adding a
line like this:
/usr/swap/swap.more swap swap pri=3 0 0
where /usr/swap/swap.more is a file previously created (for instance
by using /etc/mkfile), will increase the swap space by the size of
that file. Execute `swap -m' or reboot the machine to activate the
new swap area. See the manpages for `swap' and `fstab' for further
information.
The objectserver daemon can use up lots of memory because it can be
swamped with NIS information. It collects information about all users
on the network that can log on to the host.
If you want to disable the objectserver completely, you can execute
the command `chkconfig objectserver off' and reboot. That may disable
some of the window system functionality, such as responding CDROM
icons.
You can also remove NIS support from the objectserver. The SGI `admin'
FAQ has a detailed description on how to do that; see question 35
("Why isn't the objectserver working?"). The admin FAQ can be found at
ftp://viz.tamu.edu/pub/sgi/faq/.
**** Irix 5.3: Emacs crashes in utmpname.
This problem is fixed in Patch 3175 for Irix 5.3.
It is also fixed in Irix versions 6.2 and up.
**** Irix 6.0: Make tries (and fails) to build a program named unexelfsgi.
A compiler bug inserts spaces into the string "unexelfsgi . o"
in src/Makefile. Edit src/Makefile, after configure is run,
find that string, and take out the spaces.
Compiler fixes in Irix 6.0.1 should eliminate this problem.
*** SCO Unix and UnixWare
**** SCO 3.2v4: Unusable default font.
The Open Desktop environment comes with default X resource settings
that tell Emacs to use a variable-width font. Emacs cannot use such
fonts, so it does not work.
This is caused by the file /usr/lib/X11/app-defaults/ScoTerm, which is
the application-specific resource file for the `scoterm' terminal
emulator program. It contains several extremely general X resources
that affect other programs besides `scoterm'. In particular, these
resources affect Emacs also:
*Font: -*-helvetica-medium-r-*--12-*-p-*
*Background: scoBackground
*Foreground: scoForeground
The best solution is to create an application-specific resource file for
Emacs, /usr/lib/X11/sco/startup/Emacs, with the following contents:
Emacs*Font: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1
Emacs*Background: white
Emacs*Foreground: black
(These settings mimic the Emacs defaults, but you can change them to
suit your needs.) This resource file is only read when the X server
starts up, so you should restart it by logging out of the Open Desktop
environment or by running `scologin stop; scologin start` from the shell
as root. Alternatively, you can put these settings in the
/usr/lib/X11/app-defaults/Emacs resource file and simply restart Emacs,
but then they will not affect remote invocations of Emacs that use the
Open Desktop display.
These resource files are not normally shared across a network of SCO
machines; you must create the file on each machine individually.
**** SCO 4.2.0: Regular expressions matching bugs on SCO systems.
On SCO, there are problems in regexp matching when Emacs is compiled
with the system compiler. The compiler version is "Microsoft C
version 6", SCO 4.2.0h Dev Sys Maintenance Supplement 01/06/93; Quick
C Compiler Version 1.00.46 (Beta). The solution is to compile with
GCC.
**** UnixWare 2.1: Error 12 (virtual memory exceeded) when dumping Emacs.
*** UnixWare 2.1: Error 12 (virtual memory exceeded) when dumping Emacs.
Paul Abrahams (abrahams@acm.org) reports that with the installed
virtual memory settings for UnixWare 2.1.2, an Error 12 occurs during
@ -3380,21 +2870,7 @@ According to Martin Sohnius, you can also retune this in the kernel:
(He recommends you not change the stack limit, though.)
These changes take effect when you reboot.
*** Linux 1.x
**** Linux 1.0-1.04: Typing C-c C-c in Shell mode kills your X server.
This happens with Linux kernel 1.0 thru 1.04, approximately. The workaround is
to define SIGNALS_VIA_CHARACTERS in config.h and recompile Emacs.
Newer Linux kernel versions don't have this problem.
**** Linux 1.3: Output from subprocess (such as man or diff) is randomly
truncated on GNU/Linux systems.
This is due to a kernel bug which seems to be fixed in Linux version
1.3.75.
** Windows 3.1, 95, 98, and ME
** MS-Windows 95, 98, ME, and NT
*** MS-Windows NT/95: Problems running Perl under Emacs
@ -3476,8 +2952,7 @@ http://www.gnu.org/software/emacs/windows/.
When a program you are trying to run is not found on the PATH,
Windows might respond by crashing or locking up your system. In
particular, this has been reported when trying to compile a Java
program in JDEE when javac.exe is installed, but not on the system
PATH.
program in JDEE when javac.exe is installed, but not on the system PATH.
** MS-DOS
@ -3542,7 +3017,7 @@ your system works as before.
*** MS-DOS: Emacs crashes at startup.
Some users report that Emacs 19.29 requires dpmi memory management,
and crashes on startup if the system does not have it. We don't yet
and crashes on startup if the system does not have it. We don't
know why this happens--perhaps these machines don't have enough real
memory, or perhaps something is wrong in Emacs or the compiler.
However, arranging to use dpmi support is a workaround.
@ -3566,7 +3041,7 @@ This is an unfortunate side-effect of the support for Unix-style
device names such as /dev/null in the DJGPP runtime library. A
work-around is to rename the problem directory to another name.
*** MS-DOS+DJGPP: Problems on MS-DOG if DJGPP v2.0 is used to compile Emacs.
*** MS-DOS+DJGPP: Problems on MS-DOS if DJGPP v2.0 is used to compile Emacs.
There are two DJGPP library bugs which cause problems:
@ -3588,8 +3063,7 @@ the Lisp files it needs to load at startup. Redirect Emacs stdout
and stderr to a file to see the error message printed by Emacs.
Another manifestation of this problem is that Emacs is unable to load
the support for editing program sources in languages such as C and
Lisp.
the support for editing program sources in languages such as C and Lisp.
This can happen if the Emacs distribution was unzipped without LFN
support, thus causing long filenames to be truncated to the first 6
@ -3619,7 +3093,7 @@ shortcut keys entirely by adding this line to ~/.OWdefaults:
OpenWindows.WindowMenuAccelerators: False
**** twm: A position you specified in .Xdefaults is ignored, using twm.
*** twm: A position you specified in .Xdefaults is ignored, using twm.
twm normally ignores "program-specified" positions.
You can tell it to obey them with this command in your `.twmrc' file:
@ -3642,62 +3116,6 @@ This problem seems to be a matter of configuring the DECserver to use
* Build problems on legacy systems
** BSD/386 1.0: --with-x-toolkit option configures wrong.
This problem is due to bugs in the shell in version 1.0 of BSD/386.
The workaround is to edit the configure file to use some other shell,
such as bash.
** Digital Unix 4.0: Emacs fails to build, giving error message
Invalid dimension for the charset-ID 160
This is due to a bug or an installation problem in GCC 2.8.0.
Installing a more recent version of GCC fixes the problem.
** Digital Unix 4.0: Failure in unexec while dumping emacs.
This problem manifests itself as an error message
unexec: Bad address, writing data section to ...
The user suspects that this happened because his X libraries
were built for an older system version,
./configure --x-includes=/usr/include --x-libraries=/usr/shlib
made the problem go away.
** Sunos 4.1.1: there are errors compiling sysdep.c.
If you get errors such as
"sysdep.c", line 2017: undefined structure or union
"sysdep.c", line 2017: undefined structure or union
"sysdep.c", line 2019: nodename undefined
This can result from defining LD_LIBRARY_PATH. It is very tricky
to use that environment variable with Emacs. The Emacs configure
script links many test programs with the system libraries; you must
make sure that the libraries available to configure are the same
ones available when you build Emacs.
** SunOS 4.1.1: You get this error message from GNU ld:
/lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment
The problem is in the Sun shared C library, not in GNU ld.
The solution is to install Patch-ID# 100267-03 from Sun.
** Sunos 4.1: Undefined symbols when linking using --with-x-toolkit.
If you get the undefined symbols _atowc _wcslen, _iswprint, _iswspace,
_iswcntrl, _wcscpy, and _wcsncpy, then you need to add -lXwchar after
-lXaw in the command that links temacs.
This problem seems to arise only when the international language
extensions to X11R5 are installed.
** SunOS: Emacs gets error message from linker on Sun.
If the error message says that a symbol such as `f68881_used' or
@ -3782,7 +3200,7 @@ In the XCONS, etc., macros in lisp.h you must replace (a).u.val with
This problem will only happen if USE_LISP_UNION_TYPE is manually
defined in lisp.h.
*** C compilers lose on returning unions.
** C compilers lose on returning unions.
I hear that some C compilers cannot handle returning a union type.
Most of the functions in GNU Emacs return type Lisp_Object, which is

View File

@ -40,9 +40,9 @@ make it.
fix_submap_inheritance hack and to more cleanly express the
relationship between minibuffer-local-*-map): I've had this locally
for a long time, but the details of the semantics is somewhat ... delicate.
*** prog-mode (a parent-mode, like text-mode). Could/should provide
a better fill-paragraph default that uses syntax-tables to recognize
string/comment boundaries.
*** Derive from prog-mode in more places, close bug#5532.
*** prog-mode could/should provide a better fill-paragraph default
that uses syntax-tables to recognize string/comment boundaries.
*** provide more completion-at-point-functions. Make existing
in-buffer completion use completion-at-point.
*** "functional" function-key-map that would make it easy to add (and
@ -181,7 +181,14 @@ dired buffers and DTRT WRT `auto-revert-mode'.
http://lists.gnu.org/archive/html/emacs-devel/2008-08/msg00456.html
* Important features:
** Extended text-properties (to make overlays "obsolete")
*** Several text-property planes
This would get us rid of font-lock-face property (and I'd be happy to
get rid of char-property-alias-alist as well) since font-lock would
simply use the `face' property in the `font-lock' plane.
Each property would come with an Elisp merge-function. The merge
would be performed in add-text-properties.
*** zero-width text-properties.
** Having tabs above a window to switch buffers in it.
** "Perspectives" are named persistent window configurations. We have
@ -403,7 +410,7 @@ typically due to pilot errors and should thus be in debug-ignored-errors.
the whole menu bar. In the mean time, it should process other messages.
** Get some major packages installed: W3 (development version needs
significant work), PSGML, _possibly_ Cedet and ECB.
significant work), PSGML, _possibly_ ECB.
http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg01493.html
Check the assignments file for other packages which might go in and
have been missed.

View File

@ -1,3 +1,7 @@
2010-05-15 Glenn Morris <rgm@gnu.org>
* Makefile.in (install): Remove references to CVS-related files.
2010-05-07 Chong Yidong <cyd@stupidchicken.com>
* Version 23.2 released.

View File

@ -237,8 +237,6 @@ install: all
tar -chf - quail/* ja-dic \
| (cd ${INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\
fi; \
rm -rf ${INSTALLDIR}/CVS ${INSTALLDIR}/*/CVS; \
rm -f ${INSTALLDIR}/.cvsignore ${INSTALLDIR}/*/.cvsignore; \
rm -f ${INSTALLDIR}/.gitignore ${INSTALLDIR}/*/.gitignore; \
rm -f ${INSTALLDIR}/.arch-inventory ${INSTALLDIR}/*/.arch-inventory; \
rm -f ${INSTALLDIR}/\#* ${INSTALLDIR}/*/\#* ; \

View File

@ -1,3 +1,30 @@
2010-06-11 Juanma Barranquero <lekktu@gmail.com>
* makefile.w32-in (lisp2): Fix references to vc/vc-hooks.elc
and vc/ediff-hook.elc.
2010-06-06 Dan Nicolaescu <dann@ics.uci.edu>
* ntlib.h: Remove code dealing with BSTRING.
2010-05-29 Chong Yidong <cyd@stupidchicken.com>
* emacsclient.c (longopts, decode_options, print_help_and_exit):
New arg `-parent-id'.
(main): Send parent-id to Emacs.
2010-05-27 Glenn Morris <rgm@gnu.org>
* Makefile.in (distclean): No more Makefile.c.
2010-05-22 Jan Djärv <jan.h.d@swipnet.se>
* Makefile.in (STAMP_INST_SCRIPTS, STAMP_SCRIPS): New (Bug #6246).
(all): Depend onSTAMP_INST_SCRIPTS, STAMP_SCRIPS (Bug #6246).
(stamp-rcs2log, stamp-rcs-checkin, stamp-grep-changelog, stamp-vcdiff):
New rules (Bug #6246).
(clean): Remove stamp-* (Bug #6246).
2010-05-12 Glenn Morris <rgm@gnu.org>
* Makefile.in (INSTALLABLES): Remove @LIB_SRC_EXTRA_INSTALLABLES@.
@ -25,11 +52,6 @@
* Makefile.in (BLESSMAIL_TARGET): Set with configure, not cpp.
2010-05-08 Christoph <cschol2112@googlemail.com> (tiny change)
* makefile.w32-in (OTHER_PLATFORM_SUPPORT): Use parenthesis
for macros for nmake compatibility.
2010-05-08 Glenn Morris <rgm@gnu.org>
* Makefile.in (THIS_IS_MAKEFILE): Remove, unused.
@ -4556,16 +4578,6 @@
* Makefile.in.in (install, maybe-blessmail): Don't cd ..;
configure has already set $(INSTALL) to the proper relative path.
1995-06-27 Francesco Potortì (pot@cnuce.cnr.it)
* etags.c (plain_C_entries): New function.
(lowcase): New macro.
(tail, Fortran_functions, Pascal_functions): Use new macro lowcase.
(lang_suffixes): New suffix ".pc" for Pro*C files.
(consider_token): Don't tag all tokens beginning with DEFUN & Co..
(tail): Look for the end of the token when comparing.
(takeprec): Since now tail behaves differently, use strneq.
1995-07-08 Paul Eggert <eggert@twinsun.com>
* rcs2log (datearg): Separate date from time with comma, not space,

View File

@ -106,14 +106,16 @@ INSTALL_STRIP =
# ========================== Lists of Files ===========================
# Things that a user might actually run,
# which should be installed in bindir.
INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} b2m${EXEEXT} ebrowse${EXEEXT}
# Things that a user might actually run, which should be installed in bindir.
INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} \
b2m${EXEEXT} ebrowse${EXEEXT}
INSTALLABLE_SCRIPTS = rcs-checkin grep-changelog
STAMP_INST_SCRIPTS = stamp-rcs-checkin stamp-grep-changelog
# Things that Emacs runs internally, or during the build process,
# which should not be installed in bindir.
UTILITIES= profile${EXEEXT} digest-doc${EXEEXT} sorted-doc${EXEEXT} \
UTILITIES = profile${EXEEXT} digest-doc${EXEEXT} sorted-doc${EXEEXT} \
movemail${EXEEXT} fakemail${EXEEXT} \
hexl${EXEEXT} update-game-score${EXEEXT}
@ -122,6 +124,7 @@ DONT_INSTALL= test-distrib${EXEEXT} make-docfile${EXEEXT}
# Like UTILITIES, but they're not system-dependent, and should not be
# deleted by the distclean target.
SCRIPTS= rcs2log vcdiff
STAMP_SCRIPTS= stamp-rcs2log stamp-vcdiff
EXECUTABLES= ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS}
@ -153,7 +156,8 @@ LIBRESOLV=@LIBRESOLV@
LIBS_MAIL=@LIBS_MAIL@
## Extra libraries to use when linking movemail.
LIBS_MOVE = $(LIBS_MAIL) $(KRB4LIB) $(DESLIB) $(KRB5LIB) $(CRYPTOLIB) $(COM_ERRLIB) $(LIBHESIOD) $(LIBRESOLV)
LIBS_MOVE = $(LIBS_MAIL) $(KRB4LIB) $(DESLIB) $(KRB5LIB) $(CRYPTOLIB) \
$(COM_ERRLIB) $(LIBHESIOD) $(LIBRESOLV)
## Some systems define this to request special libraries.
LIBS_SYSTEM = @LIBS_SYSTEM@
@ -161,7 +165,8 @@ LIBS_SYSTEM = @LIBS_SYSTEM@
# Those files shared with other GNU utilities need HAVE_CONFIG_H
# defined before they know they can take advantage of the information
# in ../src/config.h.
BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) -DHAVE_CONFIG_H -I. -I../src -I${srcdir} -I${srcdir}/../src
BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) -DHAVE_CONFIG_H \
-I. -I../src -I${srcdir} -I${srcdir}/../src
ALL_CFLAGS = ${BASE_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS}
LINK_CFLAGS = ${BASE_CFLAGS} ${LDFLAGS} ${CFLAGS}
@ -177,23 +182,27 @@ LOADLIBES=$(LIBS_SYSTEM)
.c.o:
${CC} -c ${CPP_CFLAGS} $<
all: ${DONT_INSTALL} ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS}
all: ${DONT_INSTALL} ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS} ${STAMP_INST_SCRIPTS} ${STAMP_SCRIPTS}
## These targets copy the scripts into the build directory so that
## they can be run from there in an uninstalled Emacs.
## The "-" is prepended because some versions of cp barf when srcdir
## is the current directory, and thus the file will be copied into itself.
rcs2log: $(srcdir)/rcs2log
stamp-rcs2log: $(srcdir)/rcs2log
-cp -p $(srcdir)/rcs2log rcs2log
touch $@
rcs-checkin: $(srcdir)/rcs-checkin
stamp-rcs-checkin: $(srcdir)/rcs-checkin
-cp -p $(srcdir)/rcs-checkin rcs-checkin
touch $@
grep-changelog: $(srcdir)/grep-changelog
stamp-grep-changelog: $(srcdir)/grep-changelog
-cp -p $(srcdir)/grep-changelog grep-changelog
touch $@
vcdiff: $(srcdir)/vcdiff
stamp-vcdiff: $(srcdir)/vcdiff
-cp -p $(srcdir)/vcdiff vcdiff
touch $@
## Only used if we need blessmail, but no harm in always defining.
## This makes the actual blessmail executable.
@ -270,11 +279,11 @@ mostlyclean:
clean: mostlyclean
-rm -f ${INSTALLABLES} ${UTILITIES} ${DONT_INSTALL}
-rm -f fns*.el *.tab.c *.tab.h
-rm -f fns*.el *.tab.c *.tab.h stamp-*
distclean: clean
-rm -f TAGS
-rm -f Makefile Makefile.c blessmail
-rm -f Makefile blessmail
maintainer-clean: distclean
true
@ -316,24 +325,31 @@ REGEXPOBJ = regex.o
REGEXPDEPS = $(REGEXPOBJ) $(srcdir)/../src/regex.h
regex.o: $(srcdir)/../src/regex.c $(srcdir)/../src/regex.h ../src/config.h
${CC} -c ${CPP_CFLAGS} -DCONFIG_BROKETS -DINHIBIT_STRING_HEADER ${srcdir}/../src/regex.c
${CC} -c ${CPP_CFLAGS} -DCONFIG_BROKETS -DINHIBIT_STRING_HEADER \
${srcdir}/../src/regex.c
etags${EXEEXT}: ${srcdir}/etags.c $(GETOPTDEPS) $(REGEXPDEPS) ../src/config.h
$(CC) ${ALL_CFLAGS} -DEMACS_NAME="\"GNU Emacs\"" -DVERSION="\"${version}\"" ${srcdir}/etags.c $(GETOPTOBJS) $(REGEXPOBJ) $(LOADLIBES) -o etags
$(CC) ${ALL_CFLAGS} -DEMACS_NAME="\"GNU Emacs\"" \
-DVERSION="\"${version}\"" ${srcdir}/etags.c $(GETOPTOBJS) \
$(REGEXPOBJ) $(LOADLIBES) -o etags
ebrowse${EXEEXT}: ${srcdir}/ebrowse.c $(GETOPTDEPS) ../src/config.h
$(CC) ${ALL_CFLAGS} -DVERSION="\"${version}\"" ${srcdir}/ebrowse.c $(GETOPTOBJS) $(LOADLIBES) -o ebrowse
$(CC) ${ALL_CFLAGS} -DVERSION="\"${version}\"" \
${srcdir}/ebrowse.c $(GETOPTOBJS) $(LOADLIBES) -o ebrowse
## We depend on etags to assure that parallel makes do not write two
## etags.o files on top of each other.
ctags${EXEEXT}: etags${EXEEXT}
$(CC) ${ALL_CFLAGS} -DCTAGS -DEMACS_NAME="\"GNU Emacs\"" -DVERSION="\"${version}\"" ${srcdir}/etags.c $(GETOPTOBJS) $(REGEXPOBJ) $(LOADLIBES) -o ctags
$(CC) ${ALL_CFLAGS} -DCTAGS -DEMACS_NAME="\"GNU Emacs\"" \
-DVERSION="\"${version}\"" ${srcdir}/etags.c $(GETOPTOBJS) \
$(REGEXPOBJ) $(LOADLIBES) -o ctags
profile${EXEEXT}: ${srcdir}/profile.c ../src/config.h
$(CC) ${ALL_CFLAGS} ${srcdir}/profile.c $(LOADLIBES) -o profile
make-docfile${EXEEXT}: ${srcdir}/make-docfile.c ../src/config.h
$(CC) ${ALL_CFLAGS} ${srcdir}/make-docfile.c $(LOADLIBES) -o make-docfile
$(CC) ${ALL_CFLAGS} ${srcdir}/make-docfile.c $(LOADLIBES) \
-o make-docfile
digest-doc${EXEEXT}: ${srcdir}/digest-doc.c
$(CC) ${ALL_CFLAGS} ${srcdir}/digest-doc.c $(LOADLIBES) -o digest-doc
@ -346,9 +362,9 @@ b2m${EXEEXT}: ${srcdir}/b2m.c ../src/config.h $(GETOPTDEPS)
$(GETOPTOBJS) $(LOADLIBES) -o b2m
movemail${EXEEXT}: movemail.o pop.o $(GETOPTDEPS)
$(CC) ${LINK_CFLAGS} ${MOVE_FLAGS} movemail.o pop.o $(GETOPTOBJS) $(LOADLIBES) $(LIBS_MOVE) -o movemail
$(CC) ${LINK_CFLAGS} ${MOVE_FLAGS} movemail.o pop.o \
$(GETOPTOBJS) $(LOADLIBES) $(LIBS_MOVE) -o movemail
## We need to define emacs to get the right version of something (what?).
movemail.o: ${srcdir}/movemail.c ../src/config.h $(GETOPT_H)
$(CC) -c ${CPP_CFLAGS} ${MOVE_FLAGS} ${srcdir}/movemail.c
@ -367,7 +383,8 @@ hexl${EXEEXT}: ${srcdir}/hexl.c ../src/config.h
$(CC) ${ALL_CFLAGS} ${srcdir}/hexl.c $(LOADLIBES) -o hexl
update-game-score${EXEEXT}: update-game-score.o $(GETOPTDEPS)
$(CC) ${LINK_CFLAGS} update-game-score.o $(GETOPTOBJS) $(LOADLIBES) -o update-game-score
$(CC) ${LINK_CFLAGS} update-game-score.o $(GETOPTOBJS) \
$(LOADLIBES) -o update-game-score
update-game-score.o: ${srcdir}/update-game-score.c ../src/config.h $(GETOPT_H)
$(CC) -c ${CPP_CFLAGS} ${srcdir}/update-game-score.c \

View File

@ -138,6 +138,9 @@ int current_frame = 1;
/* The display on which Emacs should work. --display. */
char *display = NULL;
/* The parent window ID, if we are opening a frame via XEmbed. */
char *parent_id = NULL;
/* Nonzero means open a new Emacs frame on the current terminal. */
int tty = 0;
@ -173,6 +176,7 @@ struct option longopts[] =
#ifndef WINDOWSNT
{ "display", required_argument, NULL, 'd' },
#endif
{ "parent-id", required_argument, NULL, 'p' },
{ 0, 0, 0, 0 }
};
@ -583,6 +587,11 @@ decode_options (argc, argv)
current_frame = 0;
break;
case 'p':
parent_id = optarg;
current_frame = 0;
break;
case 'H':
print_help_and_exit ();
break;
@ -656,7 +665,8 @@ The following OPTIONS are accepted:\n\
-e, --eval Evaluate the FILE arguments as ELisp expressions\n\
-n, --no-wait Don't wait for the server to return\n\
-d DISPLAY, --display=DISPLAY\n\
Visit the file in the given display\n"
Visit the file in the given display\n\
--parent-id=ID Open in parent window ID, via XEmbed\n"
#ifndef NO_SOCKETS_IN_FILE_SYSTEM
"-s SOCKET, --socket-name=SOCKET\n\
Set filename of the UNIX socket for communication\n"
@ -1620,6 +1630,13 @@ main (argc, argv)
send_to_emacs (emacs_socket, " ");
}
if (parent_id)
{
send_to_emacs (emacs_socket, "-parent-id ");
quote_argument (emacs_socket, parent_id);
send_to_emacs (emacs_socket, " ");
}
/* If using the current frame, send tty information to Emacs anyway.
In daemon mode, Emacs may need to occupy this tty if no other
frame is available. */

View File

@ -279,8 +279,8 @@ lisp2 = \
$(lispsource)textmodes/text-mode.elc \
$(lispsource)emacs-lisp/timer.elc \
$(lispsource)jka-cmpr-hook.elc \
$(lispsource)vc-hooks.elc \
$(lispsource)ediff-hook.elc \
$(lispsource)vc/vc-hooks.elc \
$(lispsource)vc/ediff-hook.elc \
$(lispsource)epa-hook.elc \
$(TOOLTIP_SUPPORT) \
$(WINNT_SUPPORT) \

View File

@ -43,12 +43,6 @@ int setegid (unsigned gid);
char * getpass (const char * prompt);
int fchown (int fd, unsigned uid, unsigned gid);
#ifndef BSTRING
#define bzero(b, l) memset(b, 0, l)
#define bcopy(s, d, l) memcpy(d, s, l)
#define bcmp(a, b, l) memcmp(a, b, l)
#endif
/* redirect or undo interceptions created by config.h */
#undef access
#define access _access

File diff suppressed because it is too large Load Diff

View File

@ -7161,7 +7161,7 @@
* doc-view.el (doc-view-search-backward, doc-view-search):
Fix assignment to free variable bug.
2007-11-16 Martin Pohlack <mp26@os.inf.tu-dresden.de> (tiny change)
2007-11-16 Martin Pohlack <mp26@os.inf.tu-dresden.de>
* emulation/pc-select.el (pc-select-shifted-mark): New var.
(ensure-mark): Set it.

View File

@ -84,28 +84,25 @@ COMPILE_FIRST = \
emacs = EMACSLOADPATH=$(lisp) LC_ALL=C $(EMACS) $(EMACSOPT)
# Common command to find subdirectories
setwins=subdirs=`(find . -type d -print)`; \
for file in $$subdirs; do \
case $$file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* ) ;; \
case $$file in */.* | */.*/* | */=* ) ;; \
*) wins="$$wins $$file" ;; \
esac; \
done
# Find all subdirectories except `obsolete' and `term'.
setwins_almost=subdirs=`(find . -type d -print)`; \
for file in $$subdirs; do \
case $$file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; \
case $$file in */.* | */.*/* | */=* | */obsolete | */term ) ;; \
*) wins="$$wins $$file" ;; \
esac; \
done
# Find all subdirectories in which we might want to create subdirs.el
setwins_for_subdirs=subdirs=`(find . -type d -print)`; \
for file in $$subdirs; do \
case $$file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */cedet* ) ;; \
case $$file in */.* | */.*/* | */=* | */cedet* ) ;; \
*) wins="$$wins $$file" ;; \
esac; \
done

View File

@ -142,6 +142,10 @@ map. This color map is stored in the variable `ansi-color-map'."
(defconst ansi-color-regexp "\033\\[\\([0-9;]*m\\)"
"Regexp that matches SGR control sequences.")
(defconst ansi-color-drop-regexp
"\033\\[\\([ABCDsuK]\\|2J\\|=[0-9]+[hI]\\|[0-9;]*[Hf]\\)"
"Regexp that matches ANSI control sequences to silently drop.")
(defconst ansi-color-parameter-regexp "\\([0-9]*\\)[m;]"
"Regexp that matches SGR control sequence parameters.")
@ -154,7 +158,7 @@ map. This color map is stored in the variable `ansi-color-map'."
If nil, do nothing.
If the symbol `filter', then filter all SGR control sequences.
If anything else (such as t), then translate SGR control sequences
into text-properties.
into text properties.
In order for this to have any effect, `ansi-color-process-output' must
be in `comint-output-filter-functions'.
@ -188,12 +192,12 @@ in shell buffers. You set this variable by calling one of:
;;;###autoload
(defun ansi-color-process-output (ignored)
"Maybe translate SGR control sequences of comint output into text-properties.
"Maybe translate SGR control sequences of comint output into text properties.
Depending on variable `ansi-color-for-comint-mode' the comint output is
either not processed, SGR control sequences are filtered using
`ansi-color-filter-region', or SGR control sequences are translated into
text-properties using `ansi-color-apply-on-region'.
text properties using `ansi-color-apply-on-region'.
The comint output is assumed to lie between the marker
`comint-last-output-start' and the process-mark.
@ -217,15 +221,15 @@ This is a good function to put in `comint-output-filter-functions'."
(defun ansi-color-unfontify-region (beg end &rest xemacs-stuff)
"Replacement function for `font-lock-default-unfontify-region'.
As text-properties are implemented using extents in XEmacs, this
As text properties are implemented using extents in XEmacs, this
function is probably not needed. In Emacs, however, things are a bit
different: When font-lock is active in a buffer, you cannot simply add
face text-properties to the buffer. Font-lock will remove the face
text-property using `font-lock-unfontify-region-function'. If you want
face text properties to the buffer. Font-lock will remove the face
text property using `font-lock-unfontify-region-function'. If you want
to insert the strings returned by `ansi-color-apply' into such buffers,
you must set `font-lock-unfontify-region-function' to
`ansi-color-unfontify-region'. This function will not remove all face
text-properties unconditionally. It will keep the face text-properties
text properties unconditionally. It will keep the face text properties
if the property `ansi-color' is set.
The region from BEG to END is unfontified. XEMACS-STUFF is ignored.
@ -262,7 +266,7 @@ escape sequence.")
(make-variable-buffer-local 'ansi-color-context)
(defun ansi-color-filter-apply (string)
"Filter out all SGR control sequences from STRING.
"Filter out all ANSI control sequences from STRING.
Every call to this function will set and use the buffer-local variable
`ansi-color-context' to save partial escape sequences. This information
@ -292,10 +296,11 @@ This function can be added to `comint-preoutput-filter-functions'."
result))
(defun ansi-color-apply (string)
"Translates SGR control sequences into text-properties.
"Translates SGR control sequences into text properties.
Delete all other control sequences without processing them.
Applies SGR control sequences setting foreground and background colors
to STRING using text-properties and returns the result. The colors used
to STRING using text properties and returns the result. The colors used
are given in `ansi-color-faces-vector' and `ansi-color-names-vector'.
See function `ansi-color-apply-sequence' for details.
@ -309,23 +314,27 @@ This function can be added to `comint-preoutput-filter-functions'.
You cannot insert the strings returned into buffers using font-lock.
See `ansi-color-unfontify-region' for a way around this."
(let ((face (car ansi-color-context))
(start 0) end escape-sequence result)
;; if context was saved and is a string, prepend it
(start 0) end escape-sequence result
colorized-substring)
;; If context was saved and is a string, prepend it.
(if (cadr ansi-color-context)
(setq string (concat (cadr ansi-color-context) string)
ansi-color-context nil))
;; find the next escape sequence
;; Find the next escape sequence.
(while (setq end (string-match ansi-color-regexp string start))
;; store escape sequence
(setq escape-sequence (match-string 1 string))
;; colorize the old block from start to end using old face
;; Colorize the old block from start to end using old face.
(when face
(put-text-property start end 'ansi-color t string)
(put-text-property start end 'face face string))
(setq result (concat result (substring string start end))
(setq colorized-substring (substring string start end)
start (match-end 0))
;; create new face by applying all the parameters in the escape
;; sequence
;; Eliminate unrecognized ANSI sequences.
(while (string-match ansi-color-drop-regexp colorized-substring)
(setq colorized-substring
(replace-match "" nil nil colorized-substring)))
(push colorized-substring result)
;; Create new face, by applying escape sequence parameters.
(setq face (ansi-color-apply-sequence escape-sequence face)))
;; if the rest of the string should have a face, put it there
(when face
@ -335,13 +344,13 @@ See `ansi-color-unfontify-region' for a way around this."
(let (fragment)
(if (string-match "\033" string start)
(let ((pos (match-beginning 0)))
(setq fragment (substring string pos)
result (concat result (substring string start pos))))
(setq result (concat result (substring string start))))
(setq fragment (substring string pos))
(push (substring string start pos) result))
(push (substring string start) result))
(if (or face fragment)
(setq ansi-color-context (list face fragment))
(setq ansi-color-context nil)))
result))
(apply 'concat (nreverse result))))
;; Working with regions
@ -354,7 +363,7 @@ position processed.")
(make-variable-buffer-local 'ansi-color-context-region)
(defun ansi-color-filter-region (begin end)
"Filter out all SGR control sequences from region BEGIN to END.
"Filter out all ANSI control sequences from region BEGIN to END.
Every call to this function will set and use the buffer-local variable
`ansi-color-context-region' to save position. This information will be
@ -365,23 +374,27 @@ it will override BEGIN, the start of the region. Set
(start (or (cadr ansi-color-context-region) begin)))
(save-excursion
(goto-char start)
;; find the next escape sequence
(while (re-search-forward ansi-color-regexp end-marker t)
;; delete the escape sequence
;; Delete unrecognized escape sequences.
(while (re-search-forward ansi-color-drop-regexp end-marker t)
(replace-match ""))
;; save context, add the remainder of the string to the result
(if (re-search-forward "\033" end-marker t)
(setq ansi-color-context-region (list nil (match-beginning 0)))
(setq ansi-color-context-region nil)))))
(goto-char start)
;; Delete SGR escape sequences.
(while (re-search-forward ansi-color-regexp end-marker t)
(replace-match ""))
;; save context, add the remainder of the string to the result
(if (re-search-forward "\033" end-marker t)
(setq ansi-color-context-region (list nil (match-beginning 0)))
(setq ansi-color-context-region nil)))))
(defun ansi-color-apply-on-region (begin end)
"Translates SGR control sequences into overlays or extents.
Delete all other control sequences without processing them.
Applies SGR control sequences setting foreground and background colors
to text in region between BEGIN and END using extents or overlays.
Emacs will use overlays, XEmacs will use extents. The colors used are
given in `ansi-color-faces-vector' and `ansi-color-names-vector'. See
function `ansi-color-apply-sequence' for details.
SGR control sequences are applied by setting foreground and
background colors to the text between BEGIN and END using
overlays. The colors used are given in `ansi-color-faces-vector'
and `ansi-color-names-vector'. See `ansi-color-apply-sequence'
for details.
Every call to this function will set and use the buffer-local variable
`ansi-color-context-region' to save position and current face. This
@ -394,11 +407,16 @@ start of the region and set the face with which to start. Set
(copy-marker begin)))
(end-marker (copy-marker end))
escape-sequence)
;; First, eliminate unrecognized ANSI control sequences.
(save-excursion
(goto-char start-marker)
;; find the next escape sequence
(while (re-search-forward ansi-color-drop-regexp end-marker t)
(replace-match "")))
(save-excursion
(goto-char start-marker)
;; Find the next SGR sequence.
(while (re-search-forward ansi-color-regexp end-marker t)
;; colorize the old block from start to end using old face
;; Colorize the old block from start to end using old face.
(when face
(ansi-color-set-extent-face
(ansi-color-make-extent start-marker (match-beginning 0))

View File

@ -678,6 +678,63 @@ is okay. See `mode-line-format'.")
;but they are not assigned to keys there.
(put 'narrow-to-region 'disabled t)
;; Moving with arrows in bidi-sensitive direction.
(defun right-char (&optional n)
"Move point N characters to the right (to the left if N is negative).
On reaching beginning or end of buffer, stop and signal error.
Depending on the bidirectional context, this may move either forward
or backward in the buffer. This is in contrast with \\[forward-char]
and \\[backward-char], which see."
(interactive "^p")
(if (eq (current-bidi-paragraph-direction) 'left-to-right)
(forward-char n)
(backward-char n)))
(defun left-char ( &optional n)
"Move point N characters to the left (to the right if N is negative).
On reaching beginning or end of buffer, stop and signal error.
Depending on the bidirectional context, this may move either backward
or forward in the buffer. This is in contrast with \\[backward-char]
and \\[forward-char], which see."
(interactive "^p")
(if (eq (current-bidi-paragraph-direction) 'left-to-right)
(backward-char n)
(forward-char n)))
(defun right-word (&optional n)
"Move point N words to the right (to the left if N is negative).
Depending on the bidirectional context, this may move either forward
or backward in the buffer. This is in contrast with \\[forward-word]
and \\[backward-word], which see.
Value is normally t.
If an edge of the buffer or a field boundary is reached, point is left there
there and the function returns nil. Field boundaries are not noticed
if `inhibit-field-text-motion' is non-nil."
(interactive "^p")
(if (eq (current-bidi-paragraph-direction) 'left-to-right)
(forward-word n)
(backward-word n)))
(defun left-word (&optional n)
"Move point N words to the left (to the right if N is negative).
Depending on the bidirectional context, this may move either backward
or forward in the buffer. This is in contrast with \\[backward-word]
and \\[forward-word], which see.
Value is normally t.
If an edge of the buffer or a field boundary is reached, point is left there
there and the function returns nil. Field boundaries are not noticed
if `inhibit-field-text-motion' is non-nil."
(interactive "^p")
(if (eq (current-bidi-paragraph-direction) 'left-to-right)
(backward-word n)
(forward-word n)))
(defvar narrow-map (make-sparse-keymap)
"Keymap for narrowing commands.")
(define-key ctl-x-map "n" narrow-map)
@ -828,9 +885,9 @@ is okay. See `mode-line-format'.")
(define-key global-map [C-home] 'beginning-of-buffer)
(define-key global-map [M-home] 'beginning-of-buffer-other-window)
(define-key esc-map [home] 'beginning-of-buffer-other-window)
(define-key global-map [left] 'backward-char)
(define-key global-map [left] 'left-char)
(define-key global-map [up] 'previous-line)
(define-key global-map [right] 'forward-char)
(define-key global-map [right] 'right-char)
(define-key global-map [down] 'next-line)
(define-key global-map [prior] 'scroll-down-command)
(define-key global-map [next] 'scroll-up-command)
@ -1030,8 +1087,8 @@ is okay. See `mode-line-format'.")
(global-set-key [M-left] 'backward-word)
(define-key esc-map [left] 'backward-word)
;; ilya@math.ohio-state.edu says these bindings are standard on PC editors.
(global-set-key [C-right] 'forward-word)
(global-set-key [C-left] 'backward-word)
(global-set-key [C-right] 'right-word)
(global-set-key [C-left] 'left-word)
;; This is not quite compatible, but at least is analogous
(global-set-key [C-delete] 'kill-word)
(global-set-key [C-backspace] 'backward-kill-word)

View File

@ -1152,7 +1152,7 @@ and move point to current buffer."
(dolist (buffer list)
(bs--insert-one-entry buffer)
(insert "\n"))
(delete-backward-char 1)
(delete-char -1)
(bs--set-window-height)
(bs--goto-current-buffer)
(font-lock-fontify-buffer)

View File

@ -74,6 +74,8 @@ Summary of changes to "Calc"
Emacs 24.1
* Gave `calc-histogram' the option of using a vector to determine the bins.
* Added "O" option prefix.
* Used "O" prefix to "d r" (`calc-radix') to turn on twos-complement mode.

View File

@ -510,6 +510,7 @@ The value t means abort and give an error message.")
("" ">=")
("" "<=")
("" ">=")
("µ" "μ")
;; fractions
("¼" "(1:4)") ; 1/4
("½" "(1:2)") ; 1/2
@ -675,11 +676,11 @@ in Calc algebraic input.")
(cond ((and (stringp (car p))
(or (> (length (car p)) 1) (equal (car p) "$")
(equal (car p) "\""))
(string-match "[^a-zA-Z0-9]" (car p)))
(string-match "[^a-zA-Zα-ωΑ-Ω0-9]" (car p)))
(let ((s (regexp-quote (car p))))
(if (string-match "\\`[a-zA-Z0-9]" s)
(if (string-match "\\`[a-zA-Zα-ωΑ-Ω0-9]" s)
(setq s (concat "\\<" s)))
(if (string-match "[a-zA-Z0-9]\\'" s)
(if (string-match "[a-zA-Zα-ωΑ-Ω0-9]\\'" s)
(setq s (concat s "\\>")))
(or (assoc s math-toks)
(progn
@ -718,15 +719,17 @@ in Calc algebraic input.")
math-expr-data (math-match-substring math-exp-str 0)
math-exp-pos (match-end 0)))
((or (and (>= ch ?a) (<= ch ?z))
(and (>= ch ?A) (<= ch ?Z)))
(and (>= ch ?A) (<= ch ?Z))
(and (>= ch ?α) (<= ch ))
(and (>= ch ?Α) (<= ch )))
(string-match
(cond
((and (memq calc-language calc-lang-allow-underscores)
(memq calc-language calc-lang-allow-percentsigns))
"[a-zA-Z0-9_'#]*")
"[a-zA-Zα-ωΑ-Ω0-9_'#]*")
((memq calc-language calc-lang-allow-underscores)
"[a-zA-Z0-9_#]*")
(t "[a-zA-Z0-9'#]*"))
"[a-zA-Zα-ωΑ-Ω0-9_#]*")
(t "[a-zA-Zα-ωΑ-Ω0-9'#]*"))
math-exp-str math-exp-pos)
(setq math-exp-token 'symbol
math-exp-pos (match-end 0)
@ -744,12 +747,12 @@ in Calc algebraic input.")
(or (eq math-exp-pos 0)
(and (not (memq calc-language
calc-lang-allow-underscores))
(eq (string-match "[^])}\"a-zA-Z0-9'$]_"
(eq (string-match "[^])}\"a-zA-Zα-ωΑ-Ω0-9'$]_"
math-exp-str (1- math-exp-pos))
(1- math-exp-pos))))))
(or (and (memq calc-language calc-lang-c-type-hex)
(string-match "0[xX][0-9a-fA-F]+" math-exp-str math-exp-pos))
(string-match "_?\\([0-9]+.?0*@ *\\)?\\([0-9]+.?0*' *\\)?\\(0*\\([2-9]\\|1[0-4]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-dA-D.]+[eE][-+_]?[0-9]+\\|0*\\([2-9]\\|[0-2][0-9]\\|3[0-6]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-zA-Z:.]+\\|[0-9]+:[0-9:]+\\|[0-9.]+\\([eE][-+_]?[0-9]+\\)?\"?\\)?"
(string-match "_?\\([0-9]+.?0*@ *\\)?\\([0-9]+.?0*' *\\)?\\(0*\\([2-9]\\|1[0-4]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-dA-D.]+[eE][-+_]?[0-9]+\\|0*\\([2-9]\\|[0-2][0-9]\\|3[0-6]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-zA-Zα-ωΑ-Ω:.]+\\|[0-9]+:[0-9:]+\\|[0-9.]+\\([eE][-+_]?[0-9]+\\)?\"?\\)?"
math-exp-str math-exp-pos))
(setq math-exp-token 'number
math-expr-data (math-match-substring math-exp-str 0)

View File

@ -845,6 +845,8 @@ the size of a Calc bignum digit.")
(len (length num)))
(if (< len digs)
(setq num (concat (make-string (- digs len) ?0) num))))
(when calc-group-digits
(setq num (math-group-float num)))
(concat
(number-to-string calc-number-radix)
"##"

View File

@ -3283,7 +3283,7 @@ If X is not an error form, return 1."
(concat "-" (math-format-flat-expr (nth 1 a) 1000)))
(t
(concat (math-remove-dashes
(if (string-match "\\`calcFunc-\\([a-zA-Z0-9']+\\)\\'"
(if (string-match "\\`calcFunc-\\([a-zA-Zα-ωΑ-Ω0-9']+\\)\\'"
(symbol-name (car a)))
(math-match-substring (symbol-name (car a)) 1)
(symbol-name (car a))))
@ -3469,7 +3469,8 @@ If X is not an error form, return 1."
(defun math-group-float (str) ; [X X]
(let* ((pt (or (string-match "[^0-9a-zA-Z]" str) (length str)))
(g (if (integerp calc-group-digits) (math-abs calc-group-digits) 3))
(g (if (integerp calc-group-digits) (math-abs calc-group-digits)
(if (memq calc-number-radix '(2 16)) 4 3)))
(i pt))
(if (and (integerp calc-group-digits) (< calc-group-digits 0))
(while (< (setq i (+ (1+ i) g)) (length str))

View File

@ -433,7 +433,7 @@
(while (memq (preceding-char) '(?\s ?\t))
(forward-char -1))
(if (eq (preceding-char) ?\,)
(delete-backward-char 1))))
(delete-char -1))))
(with-current-buffer calcbuf
(setq cache-env (list calc-angle-mode
calc-complex-mode

View File

@ -128,7 +128,7 @@ C-w Describe how there is no warranty for Calc."
(dig2 (char-after (match-beginning 3))))
(delete-region (match-end 1) (match-end 0))
(goto-char (match-beginning 1))
(delete-backward-char 1)
(delete-char -1)
(delete-char 5)
(insert (format "%c .. %c" (min dig1 dig2) (max dig1 dig2)))))
(goto-char (point-min)))))

View File

@ -176,9 +176,9 @@
(defun calc-digit-dots ()
(if (eq calc-prev-char ?.)
(progn
(delete-backward-char 1)
(delete-char -1)
(if (calc-minibuffer-contains ".*\\.\\'")
(delete-backward-char 1))
(delete-char -1))
(setq calc-prev-char 'dots
last-command-event 32)
(if calc-prev-prev-char
@ -188,7 +188,7 @@
(erase-buffer))
(exit-minibuffer)))
;; just ignore extra decimal point, anticipating ".."
(delete-backward-char 1)))
(delete-char -1)))
(defun calc-dots ()
(interactive)

View File

@ -214,7 +214,7 @@
(put 'pascal 'math-lang-read-symbol
'((?\$
(eq (string-match
"\\(\\$[0-9a-fA-F]+\\)\\($\\|[^0-9a-zA-Z]\\)"
"\\(\\$[0-9a-fA-F]+\\)\\($\\|[^0-9a-zA-Zα-ωΑ-Ω]\\)"
math-exp-str math-exp-pos)
math-exp-pos)
(setq math-exp-token 'number
@ -312,7 +312,7 @@
(put 'fortran 'math-lang-read-symbol
'((?\.
(eq (string-match "\\.[a-zA-Z][a-zA-Z][a-zA-Z]?\\."
(eq (string-match "\\.[a-zA-Zα-ωΑ-Ω][a-zA-Zα-ωΑ-Ω][a-zA-Zα-ωΑ-Ω]?\\."
math-exp-str math-exp-pos) math-exp-pos)
(setq math-exp-token 'punc
math-expr-data (upcase (math-match-substring math-exp-str 0))
@ -603,9 +603,9 @@
'((?\\
(< math-exp-pos (1- (length math-exp-str)))
(progn
(or (string-match "\\\\hbox *{\\([a-zA-Z0-9]+\\)}"
(or (string-match "\\\\hbox *{\\([a-zA-Zα-ωΑ-Ω0-9]+\\)}"
math-exp-str math-exp-pos)
(string-match "\\(\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\)"
(string-match "\\(\\\\\\([a-zA-Zα-ωΑ-Ω]+\\|[^a-zA-Zα-ωΑ-Ω]\\)\\)"
math-exp-str math-exp-pos))
(setq math-exp-token 'symbol
math-exp-pos (match-end 0)
@ -691,7 +691,7 @@
(defun math-compose-tex-var (a prec)
(if (and calc-language-option
(not (= calc-language-option 0))
(string-match "\\`[a-zA-Z][a-zA-Z0-9]+\\'"
(string-match "\\`[a-zA-Zα-ωΑ-Ω][a-zA-Zα-ωΑ-Ω0-9]+\\'"
(symbol-name (nth 1 a))))
(if (eq calc-language 'latex)
(format "\\text{%s}" (symbol-name (nth 1 a)))
@ -702,7 +702,7 @@
(let (left right)
(if (and calc-language-option
(not (= calc-language-option 0))
(string-match "\\`[a-zA-Z][a-zA-Z0-9]+\\'" func))
(string-match "\\`[a-zA-Zα-ωΑ-Ω][a-zA-Zα-ωΑ-Ω0-9]+\\'" func))
(if (< (prefix-numeric-value calc-language-option) 0)
(setq func (format "\\%s" func))
(setq func (if (eq calc-language 'latex)
@ -824,11 +824,11 @@
'((?\\
(< math-exp-pos (1- (length math-exp-str)))
(progn
(or (string-match "\\\\hbox *{\\([a-zA-Z0-9]+\\)}"
(or (string-match "\\\\hbox *{\\([a-zA-Zα-ωΑ-Ω0-9]+\\)}"
math-exp-str math-exp-pos)
(string-match "\\\\text *{\\([a-zA-Z0-9]+\\)}"
(string-match "\\\\text *{\\([a-zA-Zα-ωΑ-Ω0-9]+\\)}"
math-exp-str math-exp-pos)
(string-match "\\(\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\)"
(string-match "\\(\\\\\\([a-zA-Zα-ωΑ-Ω]+\\|[^a-zA-Zα-ωΑ-Ω]\\)\\)"
math-exp-str math-exp-pos))
(setq math-exp-token 'symbol
math-exp-pos (match-end 0)
@ -2301,9 +2301,11 @@ order to Calc's."
;; Variable name or function call.
((or (and (>= other-char ?a) (<= other-char ?z))
(and (>= other-char ?A) (<= other-char ?Z)))
(and (>= other-char ?A) (<= other-char ?Z))
(and (>= other-char ?α) (<= other-char ))
(and (>= other-char ?Α) (<= other-char )))
(setq line (nth v math-read-big-lines))
(string-match "\\([a-zA-Z'_]+\\) *" line math-rb-h1)
(string-match "\\([a-zA-Zα-ωΑ-Ω'_]+\\) *" line math-rb-h1)
(setq h (match-end 1)
widest (match-end 0)
p (math-match-substring line 1))

View File

@ -202,7 +202,7 @@
'calc-read-var-name-history)))))
(setq calc-aborted-prefix "")
(and (not (equal var "var-"))
(if (string-match "\\`\\([-a-zA-Z0-9]+\\) *:?=" var)
(if (string-match "\\`\\([-a-zA-Zα-ωΑ-Ω0-9]+\\) *:?=" var)
(if (null calc-given-value-flag)
(error "Assignment is not allowed in this command")
(let ((svar (intern (substring var 0 (match-end 1)))))

View File

@ -108,20 +108,28 @@
(defun calc-trail-isearch-forward ()
(interactive)
(calc-with-trail-buffer
(save-window-excursion
(select-window (get-buffer-window (current-buffer)))
(let ((search-exit-char ?\r))
(isearch-forward)))
(calc-trail-here)))
(let ((win (get-buffer-window (current-buffer)))
pos)
(save-window-excursion
(select-window win)
(isearch-forward)
(setq pos (point)))
(goto-char pos)
(set-window-point win pos)
(calc-trail-here))))
(defun calc-trail-isearch-backward ()
(interactive)
(calc-with-trail-buffer
(save-window-excursion
(select-window (get-buffer-window (current-buffer)))
(let ((search-exit-char ?\r))
(isearch-backward)))
(calc-trail-here)))
(let ((win (get-buffer-window (current-buffer)))
pos)
(save-window-excursion
(select-window win)
(isearch-backward)
(setq pos (point)))
(goto-char pos)
(set-window-point win pos)
(calc-trail-here))))
(defun calc-trail-yank (arg)
(interactive "P")

View File

@ -36,13 +36,13 @@
;;; Units table last updated 9-Jan-91 by Ulrich Mueller (ulm@vsnhd1.cern.ch)
;;; with some additions by Przemek Klosowski (przemek@rrdstrad.nist.gov)
;;; Updated April 2002 by Jochen Küpper
;;; Updated April 2002 by Jochen Küpper
;;; Updated August 2007, using
;;; CODATA (http://physics.nist.gov/cuu/Constants/index.html)
;;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html)
;;; ESUWM (Encyclopaedia of Scientific Units, Weights and
;;; Measures, by François Cardarelli)
;;; Measures, by François Cardarelli)
;;; All conversions are exact unless otherwise noted.
(defvar math-standard-units
@ -210,6 +210,7 @@
"1.602176487 10^-19 C (*)") ;;(approx) CODATA
( V "W/A" "Volt" )
( ohm "V/A" "Ohm" )
( Ω "ohm" "Ohm" )
( mho "A/V" "Mho" )
( S "A/V" "Siemens" )
( F "C/V" "Farad" )
@ -259,7 +260,9 @@
"6.62606896 10^-34 J s (*)")
( hbar "h / (2 pi)" "Planck's constant" ) ;; Exact
( mu0 "4 pi 10^(-7) H/m" "Permeability of vacuum") ;; Exact
( μ0 "mu0" "Permeability of vacuum") ;; Exact
( eps0 "1 / (mu0 c^2)" "Permittivity of vacuum" )
( ε0 "eps0" "Permittivity of vacuum" )
( G "6.67428*10^(-11) m^3/(kg s^2)" "Gravitational constant" nil
"6.67428 10^-11 m^3/(kg s^2) (*)")
( Nav "6.02214179*10^(23) / mol" "Avogadro's constant" nil
@ -272,12 +275,16 @@
"1.674927211 10^-27 kg (*)")
( mmu "1.88353130*10^(-28) kg" "Muon rest mass" nil
"1.88353130 10^-28 kg (*)")
( "mmu" "Muon rest mass" nil
"1.88353130 10^-28 kg (*)")
( Ryd "10973731.568527 /m" "Rydberg's constant" nil
"10973731.568527 /m (*)")
( k "1.3806504*10^(-23) J/K" "Boltzmann's constant" nil
"1.3806504 10^-23 J/K (*)")
( alpha "7.2973525376*10^(-3)" "Fine structure constant" nil
"7.2973525376 10^-3 (*)")
( α "alpha" "Fine structure constant" nil
"7.2973525376 10^-3 (*)")
( muB "927.400915*10^(-26) J/T" "Bohr magneton" nil
"927.400915 10^-26 J/T (*)")
( muN "5.05078324*10^(-27) J/T" "Nuclear magneton" nil
@ -316,6 +323,7 @@ that the combined units table will be rebuilt.")
( ?c (^ 10 -2) "Centi" )
( ?m (^ 10 -3) "Milli" )
( ?u (^ 10 -6) "Micro" )
( (^ 10 -6) "Micro" )
( ?n (^ 10 -9) "Nano" )
( ?p (^ 10 -12) "Pico" )
( ?f (^ 10 -15) "Femto" )
@ -581,8 +589,8 @@ If EXPR is nil, return nil."
(let ((name (or (nth 2 u) (symbol-name (car u)))))
(if (eq (aref name 0) ?\*)
(setq name (substring name 1)))
(if (string-match "[^a-zA-Z0-9']" name)
(if (string-match "^[a-zA-Z0-9' ()]*$" name)
(if (string-match "[^a-zA-Zα-ωΑ-Ω0-9']" name)
(if (string-match "^[a-zA-Zα-ωΑ-Ω0-9' ()]*$" name)
(while (setq pos (string-match "[ ()]" name))
(setq name (concat (substring name 0 pos)
(if (eq (aref name pos) 32) "-" "")
@ -592,7 +600,7 @@ If EXPR is nil, return nil."
(setq name (concat (nth 2 (assq (aref (symbol-name
(nth 1 expr)) 0)
math-unit-prefixes))
(if (and (string-match "[^a-zA-Z0-9']" name)
(if (and (string-match "[^a-zA-Zα-ωΑ-Ω0-9']" name)
(not (memq (car u) '(mHg gf))))
(concat "-" name)
(downcase name)))))
@ -1540,9 +1548,5 @@ If EXPR is nil, return nil."
(provide 'calc-units)
;; Local Variables:
;; coding: iso-latin-1
;; End:
;; arch-tag: e993314f-3adc-4191-be61-4ef8874881c4
;;; calc-units.el ends here

View File

@ -451,16 +451,18 @@
(calc-enter-result 1 "grad" (list 'calcFunc-grade (calc-top-n 1))))))
(defun calc-histogram (n)
(interactive "NNumber of bins: ")
(interactive "P")
(unless (natnump n)
(setq n (math-read-expr (read-string "Centers of bins: "))))
(calc-slow-wrapper
(if calc-hyperbolic-flag
(calc-enter-result 2 "hist" (list 'calcFunc-histogram
(calc-top-n 2)
(calc-top-n 1)
(prefix-numeric-value n)))
n))
(calc-enter-result 1 "hist" (list 'calcFunc-histogram
(calc-top-n 1)
(prefix-numeric-value n))))))
n)))))
(defun calc-transpose (arg)
(interactive "P")
@ -1135,22 +1137,53 @@
(if (Math-vectorp wts)
(or (= (length vec) (length wts))
(math-dimension-error)))
(or (natnump n)
(math-reject-arg n 'fixnatnump))
(let ((res (make-vector n 0))
(vp vec)
(wvec (Math-vectorp wts))
(wp wts)
bin)
(while (setq vp (cdr vp))
(setq bin (car vp))
(or (natnump bin)
(setq bin (math-floor bin)))
(and (natnump bin)
(< bin n)
(aset res bin (math-add (aref res bin)
(if wvec (car (setq wp (cdr wp))) wts)))))
(cons 'vec (append res nil))))
(cond ((natnump n)
(let ((res (make-vector n 0))
(vp vec)
(wvec (Math-vectorp wts))
(wp wts)
bin)
(while (setq vp (cdr vp))
(setq bin (car vp))
(or (natnump bin)
(setq bin (math-floor bin)))
(and (natnump bin)
(< bin n)
(aset res bin
(math-add (aref res bin)
(if wvec (car (setq wp (cdr wp))) wts)))))
(cons 'vec (append res nil))))
((Math-vectorp n) ;; n is a vector of midpoints
(let* ((bds (math-vector-avg n))
(res (make-vector (1- (length n)) 0))
(vp (cdr vec))
(wvec (Math-vectorp wts))
(wp wts)
num)
(while vp
(setq num (car vp))
(let ((tbds (cdr bds))
(i 0))
(while (and tbds (Math-lessp (car tbds) num))
(setq i (1+ i))
(setq tbds (cdr tbds)))
(aset res i
(math-add (aref res i)
(if wvec (car (setq wp (cdr wp))) wts))))
(setq vp (cdr vp)))
(cons 'vec (append res nil))))
(t
(math-reject-arg n "*Expecting an integer or vector"))))
;;; Replace a vector [a b c ...] with a vector of averages
;;; [(a+b)/2 (b+c)/2 ...]
(defun math-vector-avg (vec)
(let ((vp (sort (copy-sequence (cdr vec)) 'math-beforep))
(res nil))
(while (and vp (cdr vp))
(setq res (cons (math-div (math-add (car vp) (cadr vp)) 2) res)
vp (cdr vp)))
(cons 'vec (reverse res))))
;;; Set operations.

View File

@ -999,9 +999,12 @@ Used by `calc-user-invocation'.")
(defvar math-working-step-2 nil)
(defvar var-i '(special-const (math-imaginary 1)))
(defvar var-pi '(special-const (math-pi)))
(defvar var-π '(special-const (math-pi)))
(defvar var-e '(special-const (math-e)))
(defvar var-phi '(special-const (math-phi)))
(defvar var-φ '(special-const (math-phi)))
(defvar var-gamma '(special-const (math-gamma-const)))
(defvar var-γ '(special-const (math-gamma-const)))
(defvar var-Modes '(special-const (math-get-modes-vec)))
(mapc (lambda (v) (or (boundp v) (set v nil)))
@ -2383,7 +2386,7 @@ See calc-keypad for details."
(progn
(require 'calc-ext)
(calc-digit-dots))
(delete-backward-char 1)
(delete-char -1)
(beep)
(calc-temp-minibuffer-message " [Bad format]"))))))
(setq calc-prev-prev-char calc-prev-char

View File

@ -663,6 +663,8 @@
(and prevc nextc
(or (and (>= nextc ?a) (<= nextc ?z))
(and (>= nextc ?A) (<= nextc ?Z))
(and (>= nextc ?α) (<= nextc ))
(and (>= nextc ?Α) (<= nextc ))
(and (>= nextc ?0) (<= nextc ?9))
(memq nextc '(?. ?_ ?#
?\( ?\[ ?\{))
@ -732,7 +734,7 @@
(not (math-tex-expr-is-flat (nth 1 a))))))
(list 'horiz
(if lr "\\left" "")
(if (string-match "\\`u\\([^a-zA-Z]\\)\\'" (car op))
(if (string-match "\\`u\\([^a-zA-Zα-ωΑ-Ω]\\)\\'" (car op))
(substring (car op) 1)
(car op))
(if (or lr (> (length (car op)) 2)) " " "")
@ -758,7 +760,7 @@
(t
(let ((rhs (math-compose-expr (nth 1 a) (nth 3 op))))
(list 'horiz
(let ((ops (if (string-match "\\`u\\([^a-zA-Z]\\)\\'"
(let ((ops (if (string-match "\\`u\\([^a-zA-Zα-ωΑ-Ω]\\)\\'"
(car op))
(substring (car op) 1)
(car op))))
@ -806,7 +808,7 @@
(setq func (car func2)))
(setq func (math-remove-dashes
(if (string-match
"\\`calcFunc-\\([a-zA-Z0-9']+\\)\\'"
"\\`calcFunc-\\([a-zA-Zα-ωΑ-Ω0-9']+\\)\\'"
(symbol-name func))
(math-match-substring (symbol-name func) 1)
(symbol-name func))))

View File

@ -467,7 +467,7 @@ This is for project include paths and spp source files."
"Set variables local to PROJECT in BUFFER.
Also set up the lexical preprocessor map."
(call-next-method)
(when (and (featurep 'semantic/c) (featurep 'semantic/lex-spp))
(when (and (featurep 'semantic/bovine/c) (featurep 'semantic/lex-spp))
(setq semantic-lex-spp-project-macro-symbol-obarray
(semantic-lex-make-spp-table (oref project spp-table)))
))

View File

@ -1121,37 +1121,31 @@ The VALUE is a spp lexical table."
(prin1 (car sym))
(let* ((first (car (cdr sym)))
(rest (cdr sym)))
(when (not (listp first))
(error "Error in macro \"%s\"" (car sym)))
(when (eq (car first) 'spp-arg-list)
(princ " ")
(prin1 first)
(setq rest (cdr rest))
)
(if (not (listp first))
(insert "nil ;; bogus macro found.\n")
(when (eq (car first) 'spp-arg-list)
(princ " ")
(prin1 first)
(setq rest (cdr rest)))
(when rest
(princ " . ")
(let ((len (length (cdr rest))))
(cond ((< len 2)
(condition-case nil
(prin1 rest)
(error
(princ "nil ;; Error writing macro\n"))))
((< len semantic-lex-spp-macro-max-length-to-save)
(princ "\n ")
(condition-case nil
(prin1 rest)
(error
(princ "nil ;; Error writing macro\n ")))
)
(t ;; Too Long!
(princ "nil ;; Too Long!\n ")
))))
)
(princ ")\n ")
)
(princ ")\n"))
)
(when rest
(princ " . ")
(let ((len (length (cdr rest))))
(cond ((< len 2)
(condition-case nil
(prin1 rest)
(error
(princ "nil ;; Error writing macro\n"))))
((< len semantic-lex-spp-macro-max-length-to-save)
(princ "\n ")
(condition-case nil
(prin1 rest)
(error
(princ "nil ;; Error writing macro\n "))))
(t ;; Too Long!
(princ "nil ;; Too Long!\n ")))))))
(princ ")\n "))
(princ ")\n")))
;;; MACRO TABLE DEBUG
;;

View File

@ -309,7 +309,6 @@ the function `comint-truncate-buffer' is on `comint-output-filter-functions'."
:type 'integer
:group 'comint)
;; FIXME: this should be defcustom
(defcustom comint-input-ring-size 500
"Size of the input history ring in `comint-mode'."
:type 'integer
@ -341,7 +340,7 @@ This variable is buffer-local."
;; Something called "perforce" uses "Enter password:".
(defcustom comint-password-prompt-regexp
(concat
"^\\("
"\\("
(regexp-opt
'("Enter" "Enter same" "Old" "old" "New" "new" "'s" "login"
"Kerberos" "CVS" "UNIX" " SMB" "LDAP" "[sudo]" "Repeat" "Bad"))

View File

@ -28,6 +28,8 @@
;;; Code:
(eval-when-compile (require 'cl))
(defconst reference-point-alist
'((tl . 0) (tc . 1) (tr . 2)
(Bl . 3) (Bc . 4) (Br . 5)
@ -77,7 +79,7 @@ follows (the point `*' corresponds to both reference points):
+----+-----+ <--- new descent
A composition rule may have the form \(GLOBAL-REF-POINT
NEW-REF-POINT XOFF YOFF), where XOFF and YOFF specifies how much
NEW-REF-POINT XOFF YOFF), where XOFF and YOFF specify how much
to shift NEW-REF-POINT from GLOBAL-REF-POINT. In this case, XOFF
and YOFF are integers in the range -100..100 representing the
shifting percentage against the font size.")
@ -532,12 +534,12 @@ after a sequence of character events."
(defun compose-gstring-for-graphic (gstring)
"Compose glyph-string GSTRING for graphic display.
Non-spacing characters are composed with the preceding base
Combining characters are composed with the preceding base
character. If the preceding character is not a base character,
each non-spacing character is composed as a spacing character by
each combining character is composed as a spacing character by
a padding space before and/or after the character.
All non-spacing characters has this function in
All non-spacing characters have this function in
`composition-function-table' unless overwritten."
(let* ((header (lgstring-header gstring))
(nchars (lgstring-char-len gstring))
@ -660,16 +662,16 @@ All non-spacing characters has this function in
[nil 0 compose-gstring-for-graphic])))
(map-char-table
#'(lambda (key val)
(if (= val 0)
(if (memq val '(Mn Mc Me))
(set-char-table-range composition-function-table key elt)))
char-width-table))
unicode-category-table))
(defun compose-gstring-for-terminal (gstring)
"Compose glyph string GSTRING for terminal display.
Non-spacing characters are composed with the preceding base
character. If the preceding character is not a base character,
each non-spacing character is composed as a spacing character by
a prepending a space before it."
prepending a space before it."
(let* ((header (lgstring-header gstring))
(nchars (lgstring-char-len gstring))
(nglyphs (lgstring-glyph-len gstring))

View File

@ -426,7 +426,7 @@ as well as widgets, buttons, overlays, and text properties."
;; When the composition is trivial (i.e. composed only with the
;; current character itself without any alternate characters),
;; we don't show the composition information. Otherwise, store
;; two descriptive strings in the first two elments of
;; two descriptive strings in the first two elements of
;; COMPOSITION.
(or (catch 'tag
(let ((from (car composition))

View File

@ -303,10 +303,12 @@ to the value obtained by evaluating FORM."
:version "22.1")
(defcustom desktop-clear-preserve-buffers
'("\\*scratch\\*" "\\*Messages\\*" "\\*server\\*" "\\*tramp/.+\\*")
'("\\*scratch\\*" "\\*Messages\\*" "\\*server\\*" "\\*tramp/.+\\*"
"\\*Warnings\\*")
"List of buffers that `desktop-clear' should not delete.
Each element is a regular expression. Buffers with a name matched by any of
these won't be deleted."
:version "23.3" ; added Warnings - bug#6336
:type '(repeat string)
:group 'desktop)

View File

@ -506,16 +506,21 @@ See variables `dired-texinfo-unclean-extensions',
;;; JUMP.
;;;###autoload
(defun dired-jump (&optional other-window)
(defun dired-jump (&optional other-window file-name)
"Jump to dired buffer corresponding to current buffer.
If in a file, dired the current directory and move to file's line.
If in Dired already, pop up a level and goto old directory's line.
In case the proper dired file line cannot be found, refresh the dired
buffer and try again."
(interactive "P")
(let* ((file buffer-file-name)
buffer and try again.
When OTHER-WINDOW is non-nil, jump to dired buffer in other window.
Interactively with prefix argument, read FILE-NAME and
move to its line in dired."
(interactive
(list nil (and current-prefix-arg
(read-file-name "Jump to dired file: "))))
(let* ((file (or file-name buffer-file-name))
(dir (if file (file-name-directory file) default-directory)))
(if (eq major-mode 'dired-mode)
(if (and (eq major-mode 'dired-mode) (null file-name))
(progn
(setq dir (dired-current-directory))
(dired-up-directory other-window)
@ -539,10 +544,12 @@ buffer and try again."
(dired-omit-mode)
(dired-goto-file file))))))))
(defun dired-jump-other-window ()
(defun dired-jump-other-window (&optional file-name)
"Like \\[dired-jump] (`dired-jump') but in other window."
(interactive)
(dired-jump t))
(interactive
(list (and current-prefix-arg
(read-file-name "Jump to dired file: "))))
(dired-jump t file-name))
;;; OMITTING.

View File

@ -1409,7 +1409,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
(define-key map "\C-t." 'image-dired-display-thumb)
(define-key map "\C-tc" 'image-dired-dired-comment-files)
(define-key map "\C-tf" 'image-dired-mark-tagged-files)
(define-key map "\C-t\C-t" 'image-dired-dired-insert-marked-thumbs)
(define-key map "\C-t\C-t" 'image-dired-dired-toggle-marked-thumbs)
(define-key map "\C-te" 'image-dired-dired-edit-comment-and-tags)
;; encryption and decryption (epa-dired)
(define-key map ":d" 'epa-dired-do-decrypt)
@ -2579,7 +2579,7 @@ Anything else means ask for each directory."
;; Delete file, possibly delete a directory and all its files.
;; This function is usefull outside of dired. One could change it's name
;; to e.g. recursive-delete-file and put it somewhere else.
(defun dired-delete-file (file &optional recursive) "\
(defun dired-delete-file (file &optional recursive trash) "\
Delete FILE or directory (possibly recursively if optional RECURSIVE is true.)
RECURSIVE determines what to do with a non-empty directory. If RECURSIVE is:
nil, do not delete.
@ -2590,15 +2590,19 @@ Anything else, ask for each sub-directory."
;; (and (file-directory-p fn) (not (file-symlink-p fn)))
;; but more efficient
(if (not (eq t (car (file-attributes file))))
(delete-file file)
(delete-file file trash)
(if (and recursive
(directory-files file t dired-re-no-dot) ; Not empty.
(or (eq recursive 'always)
(yes-or-no-p (format "Recursive delete of %s? "
(yes-or-no-p (format "Recursively %s %s? "
(if (and trash
delete-by-moving-to-trash)
"trash"
"delete")
(dired-make-relative file)))))
(if (eq recursive 'top) (setq recursive 'always)) ; Don't ask again.
(setq recursive nil))
(delete-directory file recursive)))
(delete-directory file recursive trash)))
(defun dired-do-flagged-delete (&optional nomessage)
"In Dired, delete the files flagged for deletion.
@ -2616,7 +2620,7 @@ non-empty directories is allowed."
;; this can't move point since ARG is nil
(dired-map-over-marks (cons (dired-get-filename) (point))
nil)
nil)
nil t)
(or nomessage
(message "(No deletions requested)")))))
@ -2631,11 +2635,11 @@ non-empty directories is allowed."
;; this may move point if ARG is an integer
(dired-map-over-marks (cons (dired-get-filename) (point))
arg)
arg))
arg t))
(defvar dired-deletion-confirmer 'yes-or-no-p) ; or y-or-n-p?
(defun dired-internal-do-deletions (l arg)
(defun dired-internal-do-deletions (l arg &optional trash)
;; L is an alist of files to delete, with their buffer positions.
;; ARG is the prefix arg.
;; Filenames are absolute.
@ -2644,14 +2648,21 @@ non-empty directories is allowed."
;; lines still to be changed, so the (point) values in L stay valid.
;; Also, for subdirs in natural order, a subdir's files are deleted
;; before the subdir itself - the other way around would not work.
(let ((files (mapcar (function car) l))
(count (length l))
(succ 0))
(let* ((files (mapcar (function car) l))
(count (length l))
(succ 0)
(trashing (and trash delete-by-moving-to-trash))
(progress-reporter
(make-progress-reporter
(if trashing "Trashing..." "Deleting...")
succ count)))
;; canonicalize file list for pop up
(setq files (nreverse (mapcar (function dired-make-relative) files)))
(if (dired-mark-pop-up
" *Deletions*" 'delete files dired-deletion-confirmer
(format "Delete %s " (dired-mark-prompt arg files)))
(format "%s %s "
(if trashing "Trash" "Delete")
(dired-mark-prompt arg files)))
(save-excursion
(let (failures);; files better be in reverse order for this loop!
(while l
@ -2659,10 +2670,10 @@ non-empty directories is allowed."
(let ((inhibit-read-only t))
(condition-case err
(let ((fn (car (car l))))
(dired-delete-file fn dired-recursive-deletes)
(dired-delete-file fn dired-recursive-deletes trash)
;; if we get here, removing worked
(setq succ (1+ succ))
(message "%s of %s deletions" succ count)
(progress-reporter-update progress-reporter succ)
(dired-fun-in-all-buffers
(file-name-directory fn) (file-name-nondirectory fn)
(function dired-delete-entry) fn))
@ -2671,7 +2682,7 @@ non-empty directories is allowed."
(setq failures (cons (car (car l)) failures)))))
(setq l (cdr l)))
(if (not failures)
(message "%d deletion%s done" count (dired-plural-s count))
(progress-reporter-done progress-reporter)
(dired-log-summary
(format "%d of %d deletion%s failed"
(length failures) count
@ -3974,7 +3985,7 @@ true then the type of the file linked to by FILE is printed instead.
;;;***
;;;### (autoloads (dired-do-relsymlink dired-jump) "dired-x" "dired-x.el"
;;;;;; "2f8d3d5a31b969b181e23c40d6bb16a0")
;;;;;; "6c492aba3ca0d36a4cd7b02fb9c1cc10")
;;; Generated autoloads from dired-x.el
(autoload 'dired-jump "dired-x" "\
@ -3983,8 +3994,11 @@ If in a file, dired the current directory and move to file's line.
If in Dired already, pop up a level and goto old directory's line.
In case the proper dired file line cannot be found, refresh the dired
buffer and try again.
When OTHER-WINDOW is non-nil, jump to dired buffer in other window.
Interactively with prefix argument, read FILE-NAME and
move to its line in dired.
\(fn &optional OTHER-WINDOW)" t nil)
\(fn &optional OTHER-WINDOW FILE-NAME)" t nil)
(autoload 'dired-do-relsymlink "dired-x" "\
Relative symlink all marked (or next ARG) files into a directory.

View File

@ -30,16 +30,16 @@
(declare-function int86 "dosfns.c")
(declare-function msdos-long-file-names "msdos.c")
;; This overrides a trivial definition in files.el.
(defun convert-standard-filename (filename)
"Convert a standard file's name to something suitable for the current OS.
;; See convert-standard-filename in files.el.
(defun dos-convert-standard-filename (filename)
"Convert a standard file's name to something suitable for MS-DOS.
This means to guarantee valid names and perhaps to canonicalize
certain patterns.
This function is called by `convert-standard-filename'.
On Windows and DOS, replace invalid characters. On DOS, make
sure to obey the 8.3 limitations. On Windows, turn Cygwin names
into native names, and also turn slashes into backslashes if the
shell requires it (see `w32-shell-dos-semantics')."
sure to obey the 8.3 limitations."
(if (or (not (stringp filename))
;; This catches the case where FILENAME is "x:" or "x:/" or
;; "/", thus preventing infinite recursion.
@ -48,7 +48,7 @@ shell requires it (see `w32-shell-dos-semantics')."
(let ((flen (length filename)))
;; If FILENAME has a trailing slash, remove it and recurse.
(if (memq (aref filename (1- flen)) '(?/ ?\\))
(concat (convert-standard-filename
(concat (dos-convert-standard-filename
(substring filename 0 (1- flen)))
"/")
(let* (;; ange-ftp gets in the way for names like "/foo:bar".
@ -122,10 +122,10 @@ shell requires it (see `w32-shell-dos-semantics')."
(aset string (1- (length string)) lastchar))))
(concat (if (and (stringp dir)
(memq (aref dir dlen-m-1) '(?/ ?\\)))
(concat (convert-standard-filename
(concat (dos-convert-standard-filename
(substring dir 0 dlen-m-1))
"/")
(convert-standard-filename dir))
(dos-convert-standard-filename dir))
string))))))
(defun dos-8+3-filename (filename)
@ -188,12 +188,12 @@ shell requires it (see `w32-shell-dos-semantics')."
;; This is for the sake of standard file names elsewhere in Emacs that
;; are defined as constant strings or via defconst, and whose
;; conversion via `convert-standard-filename' does not give good
;; conversion via `dos-convert-standard-filename' does not give good
;; enough results.
(defun dosified-file-name (file-name)
"Return a variant of FILE-NAME that is valid on MS-DOS filesystems.
This function is for those rare cases where `convert-standard-filename'
This function is for those rare cases where `dos-convert-standard-filename'
does not do a job that is good enough, e.g. if you need to preserve the
file-name extension. It recognizes only certain specific file names
that are used in Emacs Lisp sources; any other file name will be
@ -209,13 +209,13 @@ returned unaltered."
(defvar msdos-shells)
;; Override settings chosen at startup.
(defun set-default-process-coding-system ()
(defun dos-set-default-process-coding-system ()
(setq default-process-coding-system
(if (default-value 'enable-multibyte-characters)
'(undecided-dos . undecided-dos)
'(raw-text-dos . raw-text-dos))))
(add-hook 'before-init-hook 'set-default-process-coding-system)
(add-hook 'before-init-hook 'dos-set-default-process-coding-system)
;; File names defined in preloaded packages can be incorrect or
;; invalid if long file names were available during dumping, but not
@ -232,17 +232,22 @@ returned unaltered."
(add-hook 'before-init-hook 'dos-reevaluate-defcustoms)
(defvar register-name-alist
(defvar dos-register-name-alist
'((ax . 0) (bx . 1) (cx . 2) (dx . 3) (si . 4) (di . 5)
(cflag . 6) (flags . 7)
(al . (0 . 0)) (bl . (1 . 0)) (cl . (2 . 0)) (dl . (3 . 0))
(ah . (0 . 1)) (bh . (1 . 1)) (ch . (2 . 1)) (dh . (3 . 1))))
(defun make-register ()
(define-obsolete-variable-alias
'register-name-alist 'dos-register-name-alist "24.1")
(defun dos-make-register ()
(make-vector 8 0))
(defun register-value (regs name)
(let ((where (cdr (assoc name register-name-alist))))
(define-obsolete-function-alias 'make-register 'dos-make-register "24.1")
(defun dos-register-value (regs name)
(let ((where (cdr (assoc name dos-register-name-alist))))
(cond ((consp where)
(let ((tem (aref regs (car where))))
(if (zerop (cdr where))
@ -252,10 +257,12 @@ returned unaltered."
(aref regs where))
(t nil))))
(defun set-register-value (regs name value)
(define-obsolete-function-alias 'register-value 'dos-register-value "24.1")
(defun dos-set-register-value (regs name value)
(and (numberp value)
(>= value 0)
(let ((where (cdr (assoc name register-name-alist))))
(let ((where (cdr (assoc name dos-register-name-alist))))
(cond ((consp where)
(let ((tem (aref regs (car where)))
(value (logand value 255)))
@ -268,18 +275,29 @@ returned unaltered."
(aset regs where (logand value 65535))))))
regs)
(defsubst intdos (regs)
(define-obsolete-function-alias
'set-register-value 'dos-set-register-value "24.1")
(defsubst dos-intdos (regs)
"Issue the DOS Int 21h with registers REGS.
REGS should be a vector produced by `dos-make-register'
and `dos-set-register-value', which see."
(int86 33 regs))
(define-obsolete-function-alias 'intdos 'dos-intdos "24.1")
;; Backward compatibility for obsolescent functions which
;; set screen size.
(defun mode25 ()
(defun dos-mode25 ()
"Changes the number of screen rows to 25."
(interactive)
(set-frame-size (selected-frame) 80 25))
(defun mode4350 ()
(define-obsolete-function-alias 'mode25 'dos-mode25 "24.1")
(defun dos-mode4350 ()
"Changes the number of rows to 43 or 50.
Emacs always tries to set the screen height to 50 rows first.
If this fails, it will try to set it to 43 rows, on the assumption
@ -290,6 +308,8 @@ that your video hardware might not support 50-line mode."
nil ; the original built-in function returned nil
(set-frame-size (selected-frame) 80 43)))
(define-obsolete-function-alias 'mode4350 'dos-mode4350 "24.1")
(provide 'dos-fns)
;; arch-tag: 00b03579-8ebb-4a02-8762-5c5a929774ad

View File

@ -2684,6 +2684,8 @@ For that it has to be fbound with a non-autoload definition."
;; because `byte-compile' uses `fset':
(ad-with-auto-activation-disabled
(require 'bytecomp)
(require 'warnings) ;To define warning-suppress-types
;before we let-bind it.
(let ((symbol (make-symbol "advice-compilation"))
(byte-compile-warnings byte-compile-warnings)
;; Don't pop up windows showing byte-compiler warnings.

View File

@ -266,7 +266,7 @@ listed.")
"3B-MAXMEM" "AIX.DUMP" "SUN-SUPPORT" "XENIX"
"CODINGS" "CHARSETS"
"calc/INSTALL" "calc/Makefile"
"vms-pp.trans" "_emacs" "batcomp.com"
"vms-pp.trans" "_emacs" "batcomp.com" "notes/cpp" ; admin/
;; MH-E stuff not in Emacs:
"import-emacs" "release-utils"
;; Erc stuff not in Emacs:
@ -505,6 +505,7 @@ Changes to files in this list are not listed.")
"getdate.y"
"ymakefile"
"permute-index" "index.perm"
"ibmrs6000.inp"
"emacs.ico"
"emacs21.ico"
"LPF" "LEDIT" "OTHER.EMACSES"

View File

@ -353,7 +353,7 @@ else the global value will be modified."
(defvar byte-compile-interactive-only-functions
'(beginning-of-buffer end-of-buffer replace-string replace-regexp
insert-file insert-buffer insert-file-literally previous-line next-line
goto-line comint-run)
goto-line comint-run delete-backward-char)
"List of commands that are not meant to be called from Lisp.")
(defvar byte-compile-not-obsolete-vars nil

View File

@ -685,7 +685,7 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
(setq last (point))
(goto-char (1+ pt))
(while (search-forward "(quote " last t)
(delete-backward-char 7)
(delete-char -7)
(insert "'")
(forward-sexp)
(delete-char 1))

View File

@ -10,7 +10,7 @@
;;;;;; ceiling* floor* isqrt lcm gcd cl-progv-before cl-set-frame-visible-p
;;;;;; cl-map-overlays cl-map-intervals cl-map-keymap-recursively
;;;;;; notevery notany every some mapcon mapcan mapl maplist map
;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "d93072a26c59f663a92b10df8bc28187")
;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "deb3495d75c36a222e5238eadb8e347c")
;;; Generated autoloads from cl-extra.el
(autoload 'coerce "cl-extra" "\
@ -282,7 +282,7 @@ Not documented
;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist
;;;;;; do* do loop return-from return block etypecase typecase ecase
;;;;;; case load-time-value eval-when destructuring-bind function*
;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "0faa39d8f21ae59f2cc1baa835e28a5f")
;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "fbeedbf769c72fee9b4e0671957c1077")
;;; Generated autoloads from cl-macs.el
(autoload 'gensym "cl-macs" "\

View File

@ -1813,6 +1813,7 @@ Example:
(defsetf window-height () (store)
(list 'progn (list 'enlarge-window (list '- store '(window-height))) store))
(defsetf window-hscroll set-window-hscroll)
(defsetf window-parameter set-window-parameter)
(defsetf window-point set-window-point)
(defsetf window-start set-window-start)
(defsetf window-width () (store)

View File

@ -530,13 +530,13 @@ The words \"&rest\", \"&optional\" are returned unchanged."
;; Prime the command list.
(eldoc-add-command-completions
"backward-" "beginning-of-" "move-beginning-of-" "delete-other-windows"
"delete-window" "handle-select-window"
"end-of-" "move-end-of-" "exchange-point-and-mark" "forward-"
"indent-for-tab-command" "goto-" "mark-page" "mark-paragraph"
"mouse-set-point" "move-" "pop-global-mark" "next-" "other-window"
"previous-" "recenter" "scroll-" "self-insert-command"
"split-window-" "up-list" "down-list")
"backward-" "beginning-of-" "delete-other-windows" "delete-window"
"down-list" "end-of-" "exchange-point-and-mark" "forward-" "goto-"
"handle-select-window" "indent-for-tab-command" "left-" "mark-page"
"mark-paragraph" "mouse-set-point" "move-" "move-beginning-of-"
"move-end-of-" "next-" "other-window" "pop-global-mark" "previous-"
"recenter" "right-" "scroll-" "self-insert-command" "split-window-"
"up-list")
(provide 'eldoc)

View File

@ -221,8 +221,6 @@ font-lock keywords will not be case sensitive."
;;(set (make-local-variable 'adaptive-fill-mode) nil)
(make-local-variable 'indent-line-function)
(setq indent-line-function 'lisp-indent-line)
(make-local-variable 'parse-sexp-ignore-comments)
(setq parse-sexp-ignore-comments t)
(make-local-variable 'outline-regexp)
(setq outline-regexp ";;;\\(;* [^ \t\n]\\|###autoload\\)\\|(")
(make-local-variable 'outline-level)
@ -431,7 +429,7 @@ All commands in `lisp-mode-shared-map' are inherited by this map.")
:type 'hook
:group 'lisp)
(define-derived-mode emacs-lisp-mode nil "Emacs-Lisp"
(define-derived-mode emacs-lisp-mode prog-mode "Emacs-Lisp"
"Major mode for editing Lisp code to run in Emacs.
Commands:
Delete converts tabs to spaces as it moves back.
@ -466,7 +464,7 @@ if that value is non-nil."
"Keymap for ordinary Lisp mode.
All commands in `lisp-mode-shared-map' are inherited by this map.")
(define-derived-mode lisp-mode nil "Lisp"
(define-derived-mode lisp-mode prog-mode "Lisp"
"Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
Commands:
Delete converts tabs to spaces as it moves back.

877
lisp/emacs-lisp/smie.el Normal file
View File

@ -0,0 +1,877 @@
;;; smie.el --- Simple Minded Indentation Engine
;; Copyright (C) 2010 Free Software Foundation, Inc.
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
;; Keywords: languages, lisp, internal, parsing, indentation
;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; While working on the SML indentation code, the idea grew that maybe
;; I could write something generic to do the same thing, and at the
;; end of working on the SML code, I had a pretty good idea of what it
;; could look like. That idea grew stronger after working on
;; LaTeX indentation.
;;
;; So at some point I decided to try it out, by writing a new
;; indentation code for Coq while trying to keep most of the code
;; "table driven", where only the tables are Coq-specific. The result
;; (which was used for Beluga-mode as well) turned out to be based on
;; something pretty close to an operator precedence parser.
;; So here is another rewrite, this time following the actual principles of
;; operator precedence grammars. Why OPG? Even though they're among the
;; weakest kinds of parsers, these parsers have some very desirable properties
;; for Emacs:
;; - most importantly for indentation, they work equally well in either
;; direction, so you can use them to parse backward from the indentation
;; point to learn the syntactic context;
;; - they work locally, so there's no need to keep a cache of
;; the parser's state;
;; - because of that locality, indentation also works just fine when earlier
;; parts of the buffer are syntactically incorrect since the indentation
;; looks at "as little as possible" of the buffer to make an indentation
;; decision.
;; - they typically have no error handling and can't even detect a parsing
;; error, so we don't have to worry about what to do in case of a syntax
;; error because the parser just automatically does something. Better yet,
;; we can afford to use a sloppy grammar.
;; The development (especially the parts building the 2D precedence
;; tables and then computing the precedence levels from it) is largely
;; inspired from page 187-194 of "Parsing techniques" by Dick Grune
;; and Ceriel Jacobs (BookBody.pdf available at
;; http://www.cs.vu.nl/~dick/PTAPG.html).
;;
;; OTOH we had to kill many chickens, read many coffee grounds, and practice
;; untold numbers of black magic spells, to come up with the indentation code.
;; Since then, some of that code has been beaten into submission, but the
;; smie-indent-keyword is still pretty obscure.
;;; Code:
(eval-when-compile (require 'cl))
(defvar comment-continue)
(declare-function comment-string-strip "newcomment" (str beforep afterp))
;;; Building precedence level tables from BNF specs.
(defun smie-set-prec2tab (table x y val &optional override)
(assert (and x y))
(let* ((key (cons x y))
(old (gethash key table)))
(if (and old (not (eq old val)))
(if (and override (gethash key override))
;; FIXME: The override is meant to resolve ambiguities,
;; but it also hides real conflicts. It would be great to
;; be able to distinguish the two cases so that overrides
;; don't hide real conflicts.
(puthash key (gethash key override) table)
(display-warning 'smie (format "Conflict: %s %s/%s %s" x old val y)))
(puthash key val table))))
(defun smie-precs-precedence-table (precs)
"Compute a 2D precedence table from a list of precedences.
PRECS should be a list, sorted by precedence (e.g. \"+\" will
come before \"*\"), of elements of the form \(left OP ...)
or (right OP ...) or (nonassoc OP ...) or (assoc OP ...). All operators in
one of those elements share the same precedence level and associativity."
(let ((prec2-table (make-hash-table :test 'equal)))
(dolist (prec precs)
(dolist (op (cdr prec))
(let ((selfrule (cdr (assq (car prec)
'((left . >) (right . <) (assoc . =))))))
(when selfrule
(dolist (other-op (cdr prec))
(smie-set-prec2tab prec2-table op other-op selfrule))))
(let ((op1 '<) (op2 '>))
(dolist (other-prec precs)
(if (eq prec other-prec)
(setq op1 '> op2 '<)
(dolist (other-op (cdr other-prec))
(smie-set-prec2tab prec2-table op other-op op2)
(smie-set-prec2tab prec2-table other-op op op1)))))))
prec2-table))
(defun smie-merge-prec2s (&rest tables)
(if (null (cdr tables))
(car tables)
(let ((prec2 (make-hash-table :test 'equal)))
(dolist (table tables)
(maphash (lambda (k v)
(smie-set-prec2tab prec2 (car k) (cdr k) v))
table))
prec2)))
(defun smie-bnf-precedence-table (bnf &rest precs)
(let ((nts (mapcar 'car bnf)) ;Non-terminals
(first-ops-table ())
(last-ops-table ())
(first-nts-table ())
(last-nts-table ())
(prec2 (make-hash-table :test 'equal))
(override (apply 'smie-merge-prec2s
(mapcar 'smie-precs-precedence-table precs)))
again)
(dolist (rules bnf)
(let ((nt (car rules))
(last-ops ())
(first-ops ())
(last-nts ())
(first-nts ()))
(dolist (rhs (cdr rules))
(assert (consp rhs))
(if (not (member (car rhs) nts))
(pushnew (car rhs) first-ops)
(pushnew (car rhs) first-nts)
(when (consp (cdr rhs))
;; If the first is not an OP we add the second (which
;; should be an OP if BNF is an "operator grammar").
;; Strictly speaking, this should only be done if the
;; first is a non-terminal which can expand to a phrase
;; without any OP in it, but checking doesn't seem worth
;; the trouble, and it lets the writer of the BNF
;; be a bit more sloppy by skipping uninteresting base
;; cases which are terminals but not OPs.
(assert (not (member (cadr rhs) nts)))
(pushnew (cadr rhs) first-ops)))
(let ((shr (reverse rhs)))
(if (not (member (car shr) nts))
(pushnew (car shr) last-ops)
(pushnew (car shr) last-nts)
(when (consp (cdr shr))
(assert (not (member (cadr shr) nts)))
(pushnew (cadr shr) last-ops)))))
(push (cons nt first-ops) first-ops-table)
(push (cons nt last-ops) last-ops-table)
(push (cons nt first-nts) first-nts-table)
(push (cons nt last-nts) last-nts-table)))
;; Compute all first-ops by propagating the initial ones we have
;; now, according to first-nts.
(setq again t)
(while (prog1 again (setq again nil))
(dolist (first-nts first-nts-table)
(let* ((nt (pop first-nts))
(first-ops (assoc nt first-ops-table)))
(dolist (first-nt first-nts)
(dolist (op (cdr (assoc first-nt first-ops-table)))
(unless (member op first-ops)
(setq again t)
(push op (cdr first-ops))))))))
;; Same thing for last-ops.
(setq again t)
(while (prog1 again (setq again nil))
(dolist (last-nts last-nts-table)
(let* ((nt (pop last-nts))
(last-ops (assoc nt last-ops-table)))
(dolist (last-nt last-nts)
(dolist (op (cdr (assoc last-nt last-ops-table)))
(unless (member op last-ops)
(setq again t)
(push op (cdr last-ops))))))))
;; Now generate the 2D precedence table.
(dolist (rules bnf)
(dolist (rhs (cdr rules))
(while (cdr rhs)
(cond
((member (car rhs) nts)
(dolist (last (cdr (assoc (car rhs) last-ops-table)))
(smie-set-prec2tab prec2 last (cadr rhs) '> override)))
((member (cadr rhs) nts)
(dolist (first (cdr (assoc (cadr rhs) first-ops-table)))
(smie-set-prec2tab prec2 (car rhs) first '< override))
(if (and (cddr rhs) (not (member (car (cddr rhs)) nts)))
(smie-set-prec2tab prec2 (car rhs) (car (cddr rhs))
'= override)))
(t (smie-set-prec2tab prec2 (car rhs) (cadr rhs) '= override)))
(setq rhs (cdr rhs)))))
prec2))
(defun smie-prec2-levels (prec2)
"Take a 2D precedence table and turn it into an alist of precedence levels.
PREC2 is a table as returned by `smie-precs-precedence-table' or
`smie-bnf-precedence-table'."
;; For each operator, we create two "variables" (corresponding to
;; the left and right precedence level), which are represented by
;; cons cells. Those are the vary cons cells that appear in the
;; final `table'. The value of each "variable" is kept in the `car'.
(let ((table ())
(csts ())
(eqs ())
tmp x y)
;; From `prec2' we construct a list of constraints between
;; variables (aka "precedence levels"). These can be either
;; equality constraints (in `eqs') or `<' constraints (in `csts').
(maphash (lambda (k v)
(if (setq tmp (assoc (car k) table))
(setq x (cddr tmp))
(setq x (cons nil nil))
(push (cons (car k) (cons nil x)) table))
(if (setq tmp (assoc (cdr k) table))
(setq y (cdr tmp))
(setq y (cons nil (cons nil nil)))
(push (cons (cdr k) y) table))
(ecase v
(= (push (cons x y) eqs))
(< (push (cons x y) csts))
(> (push (cons y x) csts))))
prec2)
;; First process the equality constraints.
(let ((eqs eqs))
(while eqs
(let ((from (caar eqs))
(to (cdar eqs)))
(setq eqs (cdr eqs))
(if (eq to from)
nil ;Nothing to do.
(dolist (other-eq eqs)
(if (eq from (cdr other-eq)) (setcdr other-eq to))
(when (eq from (car other-eq))
;; This can happen because of `assoc' settings in precs
;; or because of a rhs like ("op" foo "op").
(setcar other-eq to)))
(dolist (cst csts)
(if (eq from (cdr cst)) (setcdr cst to))
(if (eq from (car cst)) (setcar cst to)))))))
;; Then eliminate trivial constraints iteratively.
(let ((i 0))
(while csts
(let ((rhvs (mapcar 'cdr csts))
(progress nil))
(dolist (cst csts)
(unless (memq (car cst) rhvs)
(setq progress t)
;; We could give each var in a given iteration the same value,
;; but we can also give them arbitrarily different values.
;; Basically, these are vars between which there is no
;; constraint (neither equality nor inequality), so
;; anything will do.
;; We give them arbitrary values, which means that we
;; replace the "no constraint" case with either > or <
;; but not =. The reason we do that is so as to try and
;; distinguish associative operators (which will have
;; left = right).
(unless (caar cst)
(setcar (car cst) i)
(incf i))
(setq csts (delq cst csts))))
(unless progress
(error "Can't resolve the precedence table to precedence levels")))
(incf i 10))
;; Propagate equalities back to their source.
(dolist (eq (nreverse eqs))
(assert (or (null (caar eq)) (eq (car eq) (cdr eq))))
(setcar (car eq) (cadr eq)))
;; Finally, fill in the remaining vars (which only appeared on the
;; right side of the < constraints).
(dolist (x table)
;; When both sides are nil, it means this operator binds very
;; very tight, but it's still just an operator, so we give it
;; the highest precedence.
;; OTOH if only one side is nil, it usually means it's like an
;; open-paren, which is very important for indentation purposes,
;; so we keep it nil, to make it easier to recognize.
(unless (or (nth 1 x) (nth 2 x))
(setf (nth 1 x) i)
(setf (nth 2 x) i))))
table))
;;; Parsing using a precedence level table.
(defvar smie-op-levels 'unset
"List of token parsing info.
Each element is of the form (TOKEN LEFT-LEVEL RIGHT-LEVEL).
Parsing is done using an operator precedence parser.
LEFT-LEVEL and RIGHT-LEVEL can be either numbers or nil, where nil
means that this operator does not bind on the corresponding side,
i.e. a LEFT-LEVEL of nil means this is a token that behaves somewhat like
an open-paren, whereas a RIGHT-LEVEL of nil would correspond to something
like a close-paren.")
(defvar smie-forward-token-function 'smie-default-forward-token
"Function to scan forward for the next token.
Called with no argument should return a token and move to its end.
If no token is found, return nil or the empty string.
It can return nil when bumping into a parenthesis, which lets SMIE
use syntax-tables to handle them in efficient C code.")
(defvar smie-backward-token-function 'smie-default-backward-token
"Function to scan backward the previous token.
Same calling convention as `smie-forward-token-function' except
it should move backward to the beginning of the previous token.")
(defalias 'smie-op-left 'car)
(defalias 'smie-op-right 'cadr)
(defun smie-default-backward-token ()
(forward-comment (- (point)))
(buffer-substring (point)
(progn (if (zerop (skip-syntax-backward "."))
(skip-syntax-backward "w_'"))
(point))))
(defun smie-default-forward-token ()
(forward-comment (point-max))
(buffer-substring (point)
(progn (if (zerop (skip-syntax-forward "."))
(skip-syntax-forward "w_'"))
(point))))
(defun smie-associative-p (toklevels)
;; in "a + b + c" we want to stop at each +, but in
;; "if a then b else c" we don't want to stop at each keyword.
;; To distinguish the two cases, we made smie-prec2-levels choose
;; different levels for each part of "if a then b else c", so that
;; by checking if the left-level is equal to the right level, we can
;; figure out that it's an associative operator.
;; This is not 100% foolproof, tho, since a grammar like
;; (exp ("A" exp "C") ("A" exp "B" exp "C"))
;; will cause "B" to have equal left and right levels, even though
;; it is not an associative operator.
;; A better check would be the check the actual previous operator
;; against this one to see if it's the same, but we'd have to change
;; `levels' to keep a stack of operators rather than only levels.
(eq (smie-op-left toklevels) (smie-op-right toklevels)))
(defun smie-next-sexp (next-token next-sexp op-forw op-back halfsexp)
"Skip over one sexp.
NEXT-TOKEN is a function of no argument that moves forward by one
token (after skipping comments if needed) and returns it.
NEXT-SEXP is a lower-level function to skip one sexp.
OP-FORW is the accessor to the forward level of the level data.
OP-BACK is the accessor to the backward level of the level data.
HALFSEXP if non-nil, means skip over a partial sexp if needed. I.e. if the
first token we see is an operator, skip over its left-hand-side argument.
Possible return values:
(FORW-LEVEL POS TOKEN): we couldn't skip TOKEN because its back-level
is too high. FORW-LEVEL is the forw-level of TOKEN,
POS is its start position in the buffer.
(t POS TOKEN): same thing when we bump on the wrong side of a paren.
(nil POS TOKEN): we skipped over a paren-like pair.
nil: we skipped over an identifier, matched parentheses, ..."
(catch 'return
(let ((levels ()))
(while
(let* ((pos (point))
(token (funcall next-token))
(toklevels (cdr (assoc token smie-op-levels))))
(cond
((null toklevels)
(when (zerop (length token))
(condition-case err
(progn (goto-char pos) (funcall next-sexp 1) nil)
(scan-error (throw 'return (list t (caddr err)))))
(if (eq pos (point))
;; We did not move, so let's abort the loop.
(throw 'return (list t (point))))))
((null (funcall op-back toklevels))
;; A token like a paren-close.
(assert (funcall op-forw toklevels)) ;Otherwise, why mention it?
(push (funcall op-forw toklevels) levels))
(t
(while (and levels (< (funcall op-back toklevels) (car levels)))
(setq levels (cdr levels)))
(cond
((null levels)
(if (and halfsexp (funcall op-forw toklevels))
(push (funcall op-forw toklevels) levels)
(throw 'return
(prog1 (list (or (car toklevels) t) (point) token)
(goto-char pos)))))
(t
(if (and levels (= (funcall op-back toklevels) (car levels)))
(setq levels (cdr levels)))
(cond
((null levels)
(cond
((null (funcall op-forw toklevels))
(throw 'return (list nil (point) token)))
((smie-associative-p toklevels)
(throw 'return
(prog1 (list (or (car toklevels) t) (point) token)
(goto-char pos))))
;; We just found a match to the previously pending operator
;; but this new operator is still part of a larger RHS.
;; E.g. we're now looking at the "then" in
;; "if a then b else c". So we have to keep parsing the
;; rest of the construct.
(t (push (funcall op-forw toklevels) levels))))
(t
(if (funcall op-forw toklevels)
(push (funcall op-forw toklevels) levels))))))))
levels)
(setq halfsexp nil)))))
(defun smie-backward-sexp (&optional halfsexp)
"Skip over one sexp.
HALFSEXP if non-nil, means skip over a partial sexp if needed. I.e. if the
first token we see is an operator, skip over its left-hand-side argument.
Possible return values:
(LEFT-LEVEL POS TOKEN): we couldn't skip TOKEN because its right-level
is too high. LEFT-LEVEL is the left-level of TOKEN,
POS is its start position in the buffer.
(t POS TOKEN): same thing but for an open-paren or the beginning of buffer.
(nil POS TOKEN): we skipped over a paren-like pair.
nil: we skipped over an identifier, matched parentheses, ..."
(smie-next-sexp
(indirect-function smie-backward-token-function)
(indirect-function 'backward-sexp)
(indirect-function 'smie-op-left)
(indirect-function 'smie-op-right)
halfsexp))
(defun smie-forward-sexp (&optional halfsexp)
"Skip over one sexp.
HALFSEXP if non-nil, means skip over a partial sexp if needed. I.e. if the
first token we see is an operator, skip over its left-hand-side argument.
Possible return values:
(RIGHT-LEVEL POS TOKEN): we couldn't skip TOKEN because its left-level
is too high. RIGHT-LEVEL is the right-level of TOKEN,
POS is its end position in the buffer.
(t POS TOKEN): same thing but for an open-paren or the beginning of buffer.
(nil POS TOKEN): we skipped over a paren-like pair.
nil: we skipped over an identifier, matched parentheses, ..."
(smie-next-sexp
(indirect-function smie-forward-token-function)
(indirect-function 'forward-sexp)
(indirect-function 'smie-op-right)
(indirect-function 'smie-op-left)
halfsexp))
(defun smie-backward-sexp-command (&optional n)
"Move backward through N logical elements."
(interactive "p")
(if (< n 0)
(smie-forward-sexp-command (- n))
(let ((forward-sexp-function nil))
(while (> n 0)
(decf n)
(let ((pos (point))
(res (smie-backward-sexp 'halfsexp)))
(if (and (car res) (= pos (point)) (not (bolp)))
(signal 'scan-error
(list "Containing expression ends prematurely"
(cadr res) (cadr res)))
nil))))))
(defun smie-forward-sexp-command (&optional n)
"Move forward through N logical elements."
(interactive "p")
(if (< n 0)
(smie-backward-sexp-command (- n))
(let ((forward-sexp-function nil))
(while (> n 0)
(decf n)
(let ((pos (point))
(res (smie-forward-sexp 'halfsexp)))
(if (and (car res) (= pos (point)) (not (bolp)))
(signal 'scan-error
(list "Containing expression ends prematurely"
(cadr res) (cadr res)))
nil))))))
;;; The indentation engine.
(defcustom smie-indent-basic 4
"Basic amount of indentation."
:type 'integer)
(defvar smie-indent-rules 'unset
;; TODO: For SML, we need more rule formats, so as to handle
;; structure Foo =
;; Bar (toto)
;; and
;; structure Foo =
;; struct ... end
;; I.e. the indentation after "=" depends on the parent ("structure")
;; as well as on the following token ("struct").
"Rules of the following form.
\((:before . TOK) . OFFSET-RULES) how to indent TOK itself.
\(TOK . OFFSET-RULES) how to indent right after TOK.
\((T1 . T2) . OFFSET) how to indent token T2 w.r.t T1.
\((t . TOK) . OFFSET) how to indent TOK with respect to its parent.
\(list-intro . TOKENS) declare TOKENS as being followed by what may look like
a funcall but is just a sequence of expressions.
\(t . OFFSET) basic indentation step.
\(args . OFFSET) indentation of arguments.
OFFSET-RULES is a list of elements which can each either be:
\(:hanging . OFFSET-RULES) if TOK is hanging, use OFFSET-RULES.
\(:parent PARENT . OFFSET-RULES) if TOK's parent is PARENT, use OFFSET-RULES.
\(:next TOKEN . OFFSET-RULES) if TOK is followed by TOKEN, use OFFSET-RULES.
\(:prev TOKEN . OFFSET-RULES) if TOK is preceded by TOKEN, use OFFSET-RULES.
a number the offset to use.
`point' align with the token.
`parent' align with the parent.
A nil offset for indentation after a token defaults to `smie-indent-basic'.")
(defun smie-indent-hanging-p ()
;; A hanging keyword is one that's at the end of a line except it's not at
;; the beginning of a line.
(and (save-excursion
(when (zerop (length (funcall smie-forward-token-function)))
;; Could be an open-paren.
(forward-char 1))
(skip-chars-forward " \t")
(eolp))
(not (smie-bolp))))
(defun smie-bolp ()
(save-excursion (skip-chars-backward " \t") (bolp)))
(defun smie-indent-offset (elem)
(or (cdr (assq elem smie-indent-rules))
(cdr (assq t smie-indent-rules))
smie-indent-basic))
(defun smie-indent-offset-rule (tokinfo &optional after)
"Apply the OFFSET-RULES in TOKINFO.
Point is expected to be right in front of the token corresponding to TOKINFO.
If computing the indentation after the token, then AFTER is the position
after the token."
(let ((rules (cdr tokinfo))
parent next prev
offset)
(while (consp rules)
(let ((rule (pop rules)))
(cond
((not (consp rule)) (setq offset rule))
((eq (car rule) :hanging)
(when (smie-indent-hanging-p)
(setq rules (cdr rule))))
((eq (car rule) :prev)
(unless prev
(save-excursion
(setq prev (smie-indent-backward-token))))
(when (equal (car prev) (cadr rule))
(setq rules (cddr rule))))
((eq (car rule) :next)
(unless next
(unless after
(error "Can't use :next in :before indentation rules"))
(save-excursion
(goto-char after)
(setq next (smie-indent-forward-token))))
(when (equal (car next) (cadr rule))
(setq rules (cddr rule))))
((eq (car rule) :parent)
(unless parent
(save-excursion
(if after (goto-char after))
(setq parent (smie-backward-sexp 'halfsexp))))
(when (equal (nth 2 parent) (cadr rule))
(setq rules (cddr rule))))
(t (error "Unknown rule %s for indentation of %s"
rule (car tokinfo))))))
offset))
(defun smie-indent-forward-token ()
"Skip token forward and return it, along with its levels."
(let ((tok (funcall smie-forward-token-function)))
(cond
((< 0 (length tok)) (assoc tok smie-op-levels))
((looking-at "\\s(")
(forward-char 1)
(list (buffer-substring (1- (point)) (point)) nil 0)))))
(defun smie-indent-backward-token ()
"Skip token backward and return it, along with its levels."
(let ((tok (funcall smie-backward-token-function)))
(cond
((< 0 (length tok)) (assoc tok smie-op-levels))
;; 4 == Open paren syntax.
((eq 4 (syntax-class (syntax-after (1- (point)))))
(forward-char -1)
(list (buffer-substring (point) (1+ (point))) nil 0)))))
(defun smie-indent-virtual ()
;; We used to take an optional arg (with value :not-hanging) to specify that
;; we should only use (smie-indent-calculate) if we're looking at a hanging
;; keyword. This was a bad idea, because the virtual indent of a position
;; should not depend on the caller, since it leads to situations where two
;; dependent indentations get indented differently.
"Compute the virtual indentation to use for point.
This is used when we're not trying to indent point but just
need to compute the column at which point should be indented
in order to figure out the indentation of some other (further down) point."
;; Trust pre-existing indentation on other lines.
(if (smie-bolp) (current-column) (smie-indent-calculate)))
(defun smie-indent-fixindent ()
;; Obey the `fixindent' special comment.
(and (smie-bolp)
(save-excursion
(comment-normalize-vars)
(re-search-forward (concat comment-start-skip
"fixindent"
comment-end-skip)
;; 1+ to account for the \n comment termination.
(1+ (line-end-position)) t))
(current-column)))
(defun smie-indent-bob ()
;; Start the file at column 0.
(save-excursion
(forward-comment (- (point)))
(if (bobp) 0)))
(defun smie-indent-close ()
;; Align close paren with opening paren.
(save-excursion
;; (forward-comment (point-max))
(when (looking-at "\\s)")
(while (not (zerop (skip-syntax-forward ")")))
(skip-chars-forward " \t"))
(condition-case nil
(progn
(backward-sexp 1)
(smie-indent-virtual)) ;:not-hanging
(scan-error nil)))))
(defun smie-indent-keyword ()
;; Align closing token with the corresponding opening one.
;; (e.g. "of" with "case", or "in" with "let").
(save-excursion
(let* ((pos (point))
(toklevels (smie-indent-forward-token))
(token (pop toklevels)))
(if (null (car toklevels))
;; Different case:
;; - smie-bolp: "indent according to others".
;; - common hanging: "indent according to others".
;; - SML-let hanging: "indent like parent".
;; - if-after-else: "indent-like parent".
;; - middle-of-line: "trust current position".
(cond
((null (cdr toklevels)) nil) ;Not a keyword.
((smie-bolp)
;; For an open-paren-like thingy at BOL, always indent only
;; based on other rules (typically smie-indent-after-keyword).
nil)
(t
(let* ((tokinfo (or (assoc (cons :before token) smie-indent-rules)
;; By default use point unless we're hanging.
(cons (cons :before token)
'((:hanging nil) point))))
(after (prog1 (point) (goto-char pos)))
(offset (smie-indent-offset-rule tokinfo)))
(cond
((eq offset 'point) (current-column))
((eq offset 'parent)
(let ((parent (smie-backward-sexp 'halfsexp)))
(if parent (goto-char (cadr parent))))
(smie-indent-virtual))
((eq offset nil) nil)
(t (error "Unhandled offset %s in %s"
offset (cons :before token)))))))
;; FIXME: This still looks too much like black magic!!
;; FIXME: Rather than a bunch of rules like (PARENT . TOKEN), we
;; want a single rule for TOKEN with different cases for each PARENT.
(let ((res (smie-backward-sexp 'halfsexp)) tmp)
(cond
((not (or (< (point) pos)
(and (cadr res) (< (cadr res) pos))))
;; If we didn't move at all, that means we didn't really skip
;; what we wanted.
nil)
((eq (car res) (car toklevels))
;; We bumped into a same-level operator. align with it.
(goto-char (cadr res))
;; Don't use (smie-indent-virtual :not-hanging) here, because we
;; want to jump back over a sequence of same-level ops such as
;; a -> b -> c
;; -> d
;; So as to align with the earliest appropriate place.
(smie-indent-virtual))
((setq tmp (assoc (cons (caddr res) token)
smie-indent-rules))
(goto-char (cadr res))
(+ (cdr tmp) (smie-indent-virtual))) ;:not-hanging
;; FIXME: The rules ((t . TOK) . OFFSET) either indent
;; relative to "before the parent" or "after the parent",
;; depending on details of the grammar.
((null (car res))
(assert (eq (point) (cadr res)))
(goto-char (cadr res))
(+ (or (cdr (assoc (cons t token) smie-indent-rules)) 0)
(smie-indent-virtual))) ;:not-hanging
((and (= (point) pos) (smie-bolp))
;; Since we started at BOL, we're not computing a virtual
;; indentation, and we're still at the starting point, so the
;; next (default) rule can't be used since it uses `current-column'
;; which would cause. indentation to depend on itself.
;; We could just return nil, but OTOH that's not good enough in
;; some cases. Instead, we want to combine the offset-rules for
;; the current token with the offset-rules of the previous one.
(+ (or (cdr (assoc (cons t token) smie-indent-rules)) 0)
;; FIXME: This is odd. Can't we make it use
;; smie-indent-(calculate|virtual) somehow?
(smie-indent-after-keyword)))
(t
(+ (or (cdr (assoc (cons t token) smie-indent-rules)) 0)
(current-column)))))))))
(defun smie-indent-comment ()
;; Indentation of a comment.
(and (looking-at comment-start-skip)
(save-excursion
(forward-comment (point-max))
(skip-chars-forward " \t\r\n")
(smie-indent-calculate))))
(defun smie-indent-comment-continue ()
;; indentation of comment-continue lines.
(let ((continue (and comment-continue
(comment-string-strip comment-continue t t))))
(and (< 0 (length continue))
(looking-at (regexp-quote continue)) (nth 4 (syntax-ppss))
(let ((ppss (syntax-ppss)))
(save-excursion
(forward-line -1)
(if (<= (point) (nth 8 ppss))
(progn (goto-char (1+ (nth 8 ppss))) (current-column))
(skip-chars-forward " \t")
(if (looking-at (regexp-quote continue))
(current-column))))))))
(defun smie-indent-after-keyword ()
;; Indentation right after a special keyword.
(save-excursion
(let* ((pos (point))
(toklevel (smie-indent-backward-token))
(tok (car toklevel))
(tokinfo (assoc tok smie-indent-rules)))
(if (and toklevel (null (cadr toklevel)) (null tokinfo))
(setq tokinfo (list (car toklevel))))
;; (if (and tokinfo (null toklevel))
;; (error "Token %S has indent rule but has no parsing info" tok))
(when toklevel
(let ((offset
(cond
(tokinfo (or (smie-indent-offset-rule tokinfo pos)
(smie-indent-offset t)))
;; The default indentation after a keyword/operator
;; is 0 for infix and t for prefix.
;; Using the BNF syntax, we could come up with
;; better defaults, but we only have the
;; precedence levels here.
((null (cadr toklevel)) (smie-indent-offset t))
(t 0))))
;; For indentation after "(let" in SML-mode, we end up accumulating
;; the offset of "(" and the offset of "let", so we use `min' to try
;; and get it right either way.
(+ (min (smie-indent-virtual) (current-column)) offset))))))
(defun smie-indent-exps ()
;; Indentation of sequences of simple expressions without
;; intervening keywords or operators. E.g. "a b c" or "g (balbla) f".
;; Can be a list of expressions or a function call.
;; If it's a function call, the first element is special (it's the
;; function). We distinguish function calls from mere lists of
;; expressions based on whether the preceding token is listed in
;; the `list-intro' entry of smie-indent-rules.
;;
;; TODO: to indent Lisp code, we should add a way to specify
;; particular indentation for particular args depending on the
;; function (which would require always skipping back until the
;; function).
;; TODO: to indent C code, such as "if (...) {...}" we might need
;; to add similar indentation hooks for particular positions, but
;; based on the preceding token rather than based on the first exp.
(save-excursion
(let ((positions nil)
arg)
(while (and (null (car (smie-backward-sexp)))
(push (point) positions)
(not (smie-bolp))))
(save-excursion
;; Figure out if the atom we just skipped is an argument rather
;; than a function.
(setq arg (or (null (car (smie-backward-sexp)))
(member (funcall smie-backward-token-function)
(cdr (assoc 'list-intro smie-indent-rules))))))
(cond
((null positions)
;; We're the first expression of the list. In that case, the
;; indentation should be (have been) determined by its context.
nil)
(arg
;; There's a previous element, and it's not special (it's not
;; the function), so let's just align with that one.
(goto-char (car positions))
(current-column))
((cdr positions)
;; We skipped some args plus the function and bumped into something.
;; Align with the first arg.
(goto-char (cadr positions))
(current-column))
(positions
;; We're the first arg.
(goto-char (car positions))
(+ (smie-indent-offset 'args)
;; We used to use (smie-indent-virtual), but that
;; doesn't seem right since it might then indent args less than
;; the function itself.
(current-column)))))))
(defvar smie-indent-functions
'(smie-indent-fixindent smie-indent-bob smie-indent-close smie-indent-comment
smie-indent-comment-continue smie-indent-keyword smie-indent-after-keyword
smie-indent-exps)
"Functions to compute the indentation.
Each function is called with no argument, shouldn't move point, and should
return either nil if it has no opinion, or an integer representing the column
to which that point should be aligned, if we were to reindent it.")
(defun smie-indent-calculate ()
"Compute the indentation to use for point."
(run-hook-with-args-until-success 'smie-indent-functions))
(defun smie-indent-line ()
"Indent current line using the SMIE indentation engine."
(interactive)
(let* ((savep (point))
(indent (condition-case nil
(save-excursion
(forward-line 0)
(skip-chars-forward " \t")
(if (>= (point) savep) (setq savep nil))
(or (smie-indent-calculate) 0))
(error 0))))
(if (not (numberp indent))
;; If something funny is used (e.g. `noindent'), return it.
indent
(if (< indent 0) (setq indent 0)) ;Just in case.
(if savep
(save-excursion (indent-line-to indent))
(indent-line-to indent)))))
;;;###autoload
(defun smie-setup (op-levels indent-rules)
(set (make-local-variable 'smie-indent-rules) indent-rules)
(set (make-local-variable 'smie-op-levels) op-levels)
(set (make-local-variable 'indent-line-function) 'smie-indent-line))
(provide 'smie)
;;; smie.el ends here

View File

@ -1497,6 +1497,8 @@ If ARG is the atom `-', scroll upward by nearly full screen."
(dolist (cmd
'(forward-char backward-char
right-char left-char
right-word left-word
next-line previous-line
forward-word backward-word
end-of-line beginning-of-line

View File

@ -231,7 +231,7 @@
(move-to-column mc)
(set-mark (point))
(goto-char pp)
;; Move cursor inside rectangle, except if char at rigth edge is a tab.
;; Move cursor inside rectangle, except if char at right edge is a tab.
(if (and (if (cua--rectangle-right-side)
(and (= (move-to-column pc) (- pc tab-width))
(not (eolp)))
@ -1344,7 +1344,7 @@ With prefix arg, indent to that column."
pad)
(if (bolp)
nil
(delete-backward-char 1)
(delete-char -1)
(if (cua--rectangle-right-side t)
(cua--rectangle-insert-col (current-column))
(setq indent (- l (current-column))))))

View File

@ -1,7 +1,8 @@
;;; edt.el --- enhanced EDT keypad mode emulation for GNU Emacs 19
;; Copyright (C) 1986, 1992, 1993, 1994, 1995, 2000, 2001, 2002, 2003,
;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;; 2004, 2005, 2006, 2007, 2008, 2009, 2010
;; Free Software Foundation, Inc.
;; Author: Kevin Gallagher <Kevin.Gallagher@boeing.com>
;; Maintainer: Kevin Gallagher <Kevin.Gallagher@boeing.com>
@ -2056,40 +2057,32 @@ created."
Ack!! You're running the Enhanced EDT Emulation without loading an
EDT key mapping file. To create an EDT key mapping file, run the
edt-mapper.el program. It is safest to run it from an Emacs loaded
edt-mapper program. It is safest to run it from an Emacs loaded
without any of your own customizations found in your .emacs file, etc.
The reason for this is that some user customizations confuse edt-mapper.
You can do this by quitting Emacs and then invoking Emacs again as
follows:
emacs -q -l edt-mapper.el
emacs -q -l edt-mapper
[NOTE: If you do nothing out of the ordinary in your .emacs file, and
the search for edt-mapper.el is successful, you can try running it now.]
the search for edt-mapper is successful, you can try running it now.]
The file edt-mapper.el includes these same directions on how to
The library edt-mapper includes these same directions on how to
use it! Perhaps it's lying around here someplace. \n ")
(let ((file "edt-mapper.el")
(found nil)
(path nil)
(search-list (append (list (expand-file-name ".")) load-path)))
(while (and (not found) search-list)
(setq path (concat (car search-list)
(if (string-match "/$" (car search-list)) "" "/")
file))
(if (and (file-exists-p path) (not (file-directory-p path)))
(setq found t))
(setq search-list (cdr search-list)))
(cond (found
(insert (format
"Ah yes, there it is, in \n\n %s \n\n" path))
(if (edt-y-or-n-p "Do you want to run it now? ")
(load-file path)
(error "EDT Emulation not configured")))
(t
(insert "Nope, I can't seem to find it. :-(\n\n")
(sit-for 20)
(error "EDT Emulation not configured")))))))
(let ((path (locate-library
"edt-mapper"
nil (append (list default-directory) load-path))))
(if path
(progn
(insert (format
"Ah yes, there it is, in \n\n %s \n\n" path))
(if (edt-y-or-n-p "Do you want to run it now? ")
(load-file path)
(error "EDT Emulation not configured")))
(insert "Nope, I can't seem to find it. :-(\n\n")
(sit-for 20)
(error "EDT Emulation not configured"))))))
;;;
;;; Turning the EDT Emulation on and off.
@ -2570,12 +2563,12 @@ Argument GOLD-BINDING is the Emacs function to be bound to GOLD <KEY>."
;;; DEFAULT EDT KEYPAD HELP
;;;
;;;
;;; Upper case commands in the keypad diagram below indicate that the
;;; emulation should look and feel very much like EDT. Lower case
;;; commands are enhancements and/or additions to the EDT keypad
;;; commands or are native Emacs commands.
;;;
;;
;; Upper case commands in the keypad diagram below indicate that the
;; emulation should look and feel very much like EDT. Lower case
;; commands are enhancements and/or additions to the EDT keypad
;; commands or are native Emacs commands.
;;
(defun edt-keypad-help ()
"DEFAULT EDT Keypad Active.
@ -2684,7 +2677,7 @@ G-C-\\: Split Window | FNDNXT | Yank | CUT |
;;;
;;; EDT emulation screen width commands.
;;;
;;
;; Some terminals require modification of terminal attributes when
;; changing the number of columns displayed, hence the fboundp tests
;; below. These functions are defined in the corresponding terminal

View File

@ -750,7 +750,7 @@ reversed."
(format "[^\\\\]\\(\\\\\\\\\\)*\\\\%c" c)))
(setq cont nil)
;; we are at an escaped delimiter: unescape it and continue
(delete-backward-char 2)
(delete-char -2)
(insert c)
(if (eolp)
;; if at eol, exit loop and go to next line

View File

@ -508,13 +508,12 @@ If ARG is non-nil, mark the key."
(set-keymap-parent (current-local-map) widget-keymap)
(setq epa-exit-buffer-function #'abort-recursive-edit)
(goto-char (point-min))
(pop-to-buffer (current-buffer)))
(let ((display-buffer-mark-dedicated 'soft))
(pop-to-buffer (current-buffer))))
(unwind-protect
(progn
(recursive-edit)
(epa--marked-keys))
(if (get-buffer-window epa-keys-buffer)
(delete-window (get-buffer-window epa-keys-buffer)))
(kill-buffer epa-keys-buffer))))
;;;###autoload

View File

@ -1899,7 +1899,7 @@ You can then use `write-region' to write new data into the file."
;; Cleanup the tempfile.
(and tempfile
(file-exists-p tempfile)
(delete-file tempfile t))
(delete-file tempfile))
;; Cleanup the tempdir.
(and tempdir
(file-directory-p tempdir)
@ -1999,7 +1999,7 @@ If PLAIN is nil, it returns the result as a string."
(epg-read-output context))
(epg-delete-output-file context)
(if (file-exists-p input-file)
(delete-file input-file t))
(delete-file input-file))
(epg-reset context))))
(defun epg-start-verify (context signature &optional signed-text)
@ -2203,7 +2203,7 @@ Otherwise, it makes a cleartext signature."
(epg-read-output context))
(epg-delete-output-file context)
(if input-file
(delete-file input-file t))
(delete-file input-file))
(epg-reset context))))
(defun epg-start-encrypt (context plain recipients
@ -2323,7 +2323,7 @@ If RECIPIENTS is nil, it performs symmetric encryption."
(epg-read-output context))
(epg-delete-output-file context)
(if input-file
(delete-file input-file t))
(delete-file input-file))
(epg-reset context))))
(defun epg-start-export-keys (context keys)

View File

@ -101,7 +101,7 @@
(eshell-redisplay))
(let ((truth (eval command)))
(with-current-buffer test-buffer
(delete-backward-char 6)
(delete-char -6)
(insert-before-markers
"[" (let (str)
(if truth

View File

@ -404,7 +404,7 @@ With prefix ARG, insert output into the current buffer at point."
(assert (not (eshell-interactive-process)))
(goto-char (point-max))
(while (and (bolp) (not (bobp)))
(delete-backward-char 1)))
(delete-char -1)))
(assert (and buf (buffer-live-p buf)))
(unless arg
(let ((len (if (not intr) 2

View File

@ -368,7 +368,7 @@ See `expand-add-abbrevs'. Value is non-nil if expansion was done."
nil))
(defun expand-do-expansion ()
(delete-backward-char (length last-abbrev-text))
(delete-char (- (length last-abbrev-text)))
(let* ((vect (symbol-value last-abbrev))
(text (aref vect 0))
(position (aref vect 1))

View File

@ -526,15 +526,27 @@ name."
(let* ((opoint (point))
(color-values (color-values (car color)))
(light-p (>= (apply 'max color-values)
(* (car (color-values "white")) .5))))
(* (car (color-values "white")) .5)))
(max-len (max (- (window-width) 33) 20)))
(insert (car color))
(indent-to 22)
(put-text-property opoint (point) 'face `(:background ,(car color)))
(put-text-property
(prog1 (point)
(insert " " (if (cdr color)
(mapconcat 'identity (cdr color) ", ")
(car color))))
(insert " ")
(if (cdr color)
;; Insert as many color names as possible, fitting max-len.
(let ((names (list (car color)))
(others (cdr color))
(len (length (car color)))
newlen)
(while (and others
(< (setq newlen (+ len 2 (length (car others))))
max-len))
(setq len newlen)
(push (pop others) names))
(insert (mapconcat 'identity (nreverse names) ", ")))
(insert (car color))))
(point)
'face (list :foreground (car color)))
(indent-to (max (- (window-width) 8) 44))

View File

@ -574,6 +574,9 @@ Runs the usual ange-ftp hook, but only for completion operations."
(inhibit-file-name-operation op))
(apply op args))))
(declare-function dos-convert-standard-filename "dos-fns.el" (filename))
(declare-function w32-convert-standard-filename "w32-fns.el" (filename))
(defun convert-standard-filename (filename)
"Convert a standard file's name to something suitable for the OS.
This means to guarantee valid names and perhaps to canonicalize
@ -591,15 +594,20 @@ and also turn slashes into backslashes if the shell requires it (see
`w32-shell-dos-semantics').
See Info node `(elisp)Standard File Names' for more details."
(if (eq system-type 'cygwin)
(let ((name (copy-sequence filename))
(start 0))
;; Replace invalid filename characters with !
(while (string-match "[?*:<>|\"\000-\037]" name start)
(aset name (match-beginning 0) ?!)
(setq start (match-end 0)))
name)
filename))
(cond
((eq system-type 'cygwin)
(let ((name (copy-sequence filename))
(start 0))
;; Replace invalid filename characters with !
(while (string-match "[?*:<>|\"\000-\037]" name start)
(aset name (match-beginning 0) ?!)
(setq start (match-end 0)))
name))
((eq system-type 'windows-nt)
(w32-convert-standard-filename filename))
((eq system-type 'ms-dos)
(dos-convert-standard-filename filename))
(t filename)))
(defun read-directory-name (prompt &optional dir default-dirname mustmatch initial)
"Read directory name, prompting with PROMPT and completing in directory DIR.
@ -4627,16 +4635,17 @@ or multiple mail buffers, etc."
(force-mode-line-update))))
(defun make-directory (dir &optional parents)
"Create the directory DIR and any nonexistent parent dirs.
If DIR already exists as a directory, signal an error, unless PARENTS is set.
"Create the directory DIR and optionally any nonexistent parent dirs.
If DIR already exists as a directory, signal an error, unless
PARENTS is non-nil.
Interactively, the default choice of directory to create
is the current default directory for file names.
That is useful when you have visited a file in a nonexistent directory.
Interactively, the default choice of directory to create is the
current buffer's default directory. That is useful when you have
visited a file in a nonexistent directory.
Noninteractively, the second (optional) argument PARENTS says whether
to create parent directories if they don't exist. Interactively,
this happens by default."
Noninteractively, the second (optional) argument PARENTS, if
non-nil, says whether to create parent directories that don't
exist. Interactively, this happens by default."
(interactive
(list (read-file-name "Make directory: " default-directory default-directory
nil nil)
@ -4665,21 +4674,32 @@ this happens by default."
(defconst directory-files-no-dot-files-regexp
"^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"
"Regexp of file names excluging \".\" an \"..\".")
"Regexp matching any file name except \".\" and \"..\".")
(defun delete-directory (directory &optional recursive)
(defun delete-directory (directory &optional recursive trash)
"Delete the directory named DIRECTORY. Does not follow symlinks.
If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well."
If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well.
TRASH non-nil means to trash the directory instead, provided
`delete-by-moving-to-trash' is non-nil.
When called interactively, TRASH is t if no prefix argument is
given. With a prefix argument, TRASH is nil."
(interactive
(let ((dir (expand-file-name
(read-file-name
"Delete directory: "
default-directory default-directory nil nil))))
(let* ((trashing (and delete-by-moving-to-trash
(null current-prefix-arg)))
(dir (expand-file-name
(read-file-name
(if trashing
"Move directory to trash: "
"Delete directory: ")
default-directory default-directory nil nil))))
(list dir
(if (directory-files dir nil directory-files-no-dot-files-regexp)
(y-or-n-p
(format "Directory `%s' is not empty, really delete? " dir))
nil))))
(format "Directory `%s' is not empty, really %s? "
dir (if trashing "trash" "delete")))
nil)
(null current-prefix-arg))))
;; If default-directory is a remote directory, make sure we find its
;; delete-directory handler.
(setq directory (directory-file-name (expand-file-name directory)))
@ -4687,7 +4707,7 @@ If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well."
(cond
(handler
(funcall handler 'delete-directory directory recursive))
(delete-by-moving-to-trash
((and delete-by-moving-to-trash trash)
;; Only move non-empty dir to trash if recursive deletion was
;; requested. This mimics the non-`delete-by-moving-to-trash'
;; case, where the operation fails in delete-directory-internal.
@ -4707,8 +4727,8 @@ If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well."
;; (and (file-directory-p fn) (not (file-symlink-p fn)))
;; but more efficient
(if (eq t (car (file-attributes file)))
(delete-directory file recursive)
(delete-file file)))
(delete-directory file recursive nil)
(delete-file file nil)))
;; We do not want to delete "." and "..".
(directory-files
directory 'full directory-files-no-dot-files-regexp)))

View File

@ -76,6 +76,7 @@
(tex . "supporting code for the TeX formatter")
(tools . "programming tools")
(unix . "front-ends/assistants for, or emulators of, UNIX-like features")
(vc . "version control")
(wp . "word processing")
))

Some files were not shown because too many files have changed in this diff Show More