merge trunk

This commit is contained in:
Kenichi Handa 2010-05-25 09:35:50 +09:00
commit 8a2b8c4f7c
79 changed files with 2061 additions and 1234 deletions

View file

@ -1,3 +1,40 @@
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.

View file

@ -553,9 +553,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,

View file

@ -190,10 +190,11 @@ 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
rm -f Makefile junk.c junk2.c
sed -e "1,/== start of cpp stuff ==/s@^##*[ ].*$@@" <Makefile.in >junk.c
gcc -E -traditional junk.c | sed -f ../msdos/sed1v2.inp >Makefile
rm -f junk.c
copy junk.c + deps.mk junk2.c
gcc -E -traditional junk2.c | sed -f ../msdos/sed1v2.inp >Makefile
rm -f junk.c junk2.c
if "%X11%" == "" goto src5
mv Makefile makefile.tmp

211
configure vendored
View file

@ -701,6 +701,7 @@ RANLIB
INSTALL_INFO
GZIP_PROG
MAKEINFO
cannot_dump
LD_SWITCH_SYSTEM
C_SWITCH_MACHINE
C_SWITCH_SYSTEM
@ -714,6 +715,8 @@ ALSA_CFLAGS
ALSA_LIBS
CFLAGS_SOUND
SET_MAKE
MKDEPDIR
DEPFLAGS
XMKMF
LD_SWITCH_X_SITE_AUX
LD_SWITCH_X_SITE_AUX_RPATH
@ -818,12 +821,15 @@ PRE_ALLOC_OBJ
POST_ALLOC_OBJ
LD_SWITCH_SYSTEM_TEMACS
LD_SWITCH_SYSTEM_EXTRA
YMF_PASS_LDFLAGS
LINKER
LIB_GCC
MOUSE_SUPPORT
TOOLTIP_SUPPORT
WINDOW_SUPPORT
LTLIBOBJS'
ac_subst_files=''
ac_subst_files='deps_frag
ns_frag'
ac_user_opts='
enable_option_checking
with_pop
@ -854,8 +860,6 @@ with_dbus
with_gconf
with_selinux
with_makeinfo
with_gtk
with_gcc
with_pkg_config_prog
with_crt_dir
with_gnustep_conf
@ -1569,7 +1573,6 @@ Optional Packages:
--without-gconf don't compile with GConf support
--without-selinux don't compile with SELinux support
--without-makeinfo don't require makeinfo for building manuals
--with-pkg-config-prog=PATH
path to pkg-config for finding GTK and librsvg
--with-crt-dir=DIR directory containing crtn.o etc. The default is
@ -2382,28 +2385,6 @@ fi
# Check whether --with-gtk was given.
if test "${with_gtk+set}" = set; then
withval=$with_gtk; { { $as_echo "$as_me:$LINENO: error: --with-gtk has been removed. Use --with-x-toolkit to
specify a toolkit." >&5
$as_echo "$as_me: error: --with-gtk has been removed. Use --with-x-toolkit to
specify a toolkit." >&2;}
{ (exit 1); exit 1; }; }
fi
# Check whether --with-gcc was given.
if test "${with_gcc+set}" = set; then
withval=$with_gcc; { { $as_echo "$as_me:$LINENO: error: --with-gcc has been removed. Set the \`CC' environment
variable to specify a compiler." >&5
$as_echo "$as_me: error: --with-gcc has been removed. Set the \`CC' environment
variable to specify a compiler." >&2;}
{ (exit 1); exit 1; }; }
fi
# Check whether --with-pkg-config-prog was given.
if test "${with_pkg_config_prog+set}" = set; then
withval=$with_pkg_config_prog;
@ -5851,6 +5832,12 @@ configure___ LIBX=-lX11
configure___ unexec=UNEXEC
#ifdef CANNOT_DUMP
configure___ cannot_dump=yes
#else
configure___ cannot_dump=no
#endif
#ifdef SYSTEM_MALLOC
configure___ system_malloc=yes
#else
@ -5912,6 +5899,9 @@ fi
rm ${tempcname}
LD_SWITCH_SYSTEM=
case "$opsys" in
freebsd)
@ -9501,6 +9491,9 @@ $as_echo "no" >&6; }
fi
DEPFLAGS=
MKDEPDIR=":"
deps_frag=deps.mk
if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
{ $as_echo "$as_me:$LINENO: checking whether we are using GNU Make" >&5
$as_echo_n "checking whether we are using GNU Make... " >&6; }
@ -9567,13 +9560,19 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
$as_echo "$ac_enable_autodepend" >&6; }
fi
if test $ac_enable_autodepend = yes; then
cat >>confdefs.h <<\_ACEOF
#define AUTO_DEPEND 1
_ACEOF
DEPFLAGS='-MMD -MF ${DEPDIR}/$*.d'
## In parallel builds, another make might create depdir between
## the first test and mkdir, so stick another test on the end.
## Or use mkinstalldirs? mkdir -p is not portable.
MKDEPDIR='test -d ${DEPDIR} || mkdir ${DEPDIR} || test -d ${DEPDIR}'
deps_frag=autodeps.mk
fi
fi
deps_frag=$srcdir/src/$deps_frag
{ $as_echo "$as_me:$LINENO: checking for long file names" >&5
$as_echo_n "checking for long file names... " >&6; }
@ -9960,6 +9959,7 @@ if test "${with_ns}" != no; then
GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)"
GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)"
## Pull in stuff from GNUstep-make.
## FIXME? Cleaner to use AC_SUBST_FILE for this?
NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu
GUI_LIB=gnu
include $GNUSTEP_MAKEFILES/Additional/base.make
@ -10164,6 +10164,7 @@ fi
ns_frag=/dev/null
NS_OBJ=
NS_SUPPORT=
if test "${HAVE_NS}" = yes; then
@ -10175,6 +10176,7 @@ if test "${HAVE_NS}" = yes; then
if test "${EN_NS_SELF_CONTAINED}" = yes; then
prefix=${ns_appresdir}
fi
ns_frag=$srcdir/src/ns.mk
NS_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o fontset.o fringe.o image.o"
NS_SUPPORT="\${lispsource}emacs-lisp/easymenu.elc \${lispsource}term/ns-win.elc"
fi
@ -10184,6 +10186,7 @@ CPPFLAGS="$tmp_CPPFLAGS"
case "${window_system}" in
x11 )
HAVE_X_WINDOWS=yes
@ -21622,7 +21625,7 @@ HAVE_LIBNCURSES=yes
## Use terminfo instead of termcap?
## Note only system files NOT using terminfo are:
## freebsd < 40000, ms-w32, msdos, netbsd, and
## freebsd < 40000, ms-w32, msdos, netbsd < 599002500, and
## darwin|gnu without ncurses.
TERMINFO=no
LIBS_TERMCAP=
@ -21715,13 +21718,22 @@ $as_echo "$emacs_cv_freebsd_terminfo" >&6; }
fi
;;
netbsd)
if test $ac_cv_search_tputs = -lterminfo; then
TERMINFO=yes
LIBS_TERMCAP="-lterminfo"
else
LIBS_TERMCAP="-ltermcap"
fi
;;
esac
case "$opsys" in
## hpux: Make sure we get select from libc rather than from libcurses
## because libcurses on HPUX 10.10 has a broken version of select.
## We used to use -lc -lcurses, but this may be cleaner.
hpux*|netbsd) LIBS_TERMCAP="-ltermcap" ;;
hpux*) LIBS_TERMCAP="-ltermcap" ;;
openbsd) LIBS_TERMCAP="-lncurses" ;;
@ -26491,7 +26503,6 @@ else
fi
## The X Menu stuff is present in the X10 distribution, but missing
## from X11. If we have X10, just use the installed library;
## otherwise, use our own copy.
@ -26511,7 +26522,9 @@ _ACEOF
LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}"
else
OLDXMENU=
## For a syntactically valid Makefile; not actually used for anything.
## See comments in src/Makefile.in.
OLDXMENU=nothing
## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?).
if test "${HAVE_X_WINDOWS}" = "yes"; then
LIBXMENU="-lXMenu"
@ -26523,7 +26536,8 @@ else
fi
if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then
OLDXMENU=
OLDXMENU_TARGET=
OLDXMENU=nothing
LIBXMENU=
OLDXMENU_DEPS=
fi
@ -26533,6 +26547,7 @@ fi
if test "${HAVE_MENUS}" = "yes" ; then
cat >>confdefs.h <<\_ACEOF
@ -26616,8 +26631,79 @@ fi
LINKER=
ORDINARY_LINK=
case "$opsys" in
## gnu: GNU needs its own crt0.
aix4-2|darwin|gnu|usg5-4|irix6-5|sol2*|unixware) ORDINARY_LINK=yes ;;
cygwin) LINKER="\$(CC)" ;;
## On post 1.3 releases of NetBSD, gcc -nostdlib also clears the
## library search parth, i.e. it won't search /usr/lib for libc and
## friends. Using -nostartfiles instead avoids this problem, and
## will also work on earlier NetBSD releases.
netbsd|openbsd) LINKER="\$(CC) -nostartfiles" ;;
## macpcc: NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> says
## MkLinux/LinuxPPC needs this.
## ibms390x only supports opsys = gnu-linux so it can be added here.
gnu-*)
case "$machine" in
macppc|ibms390x) LINKER="\$(CC) -nostdlib" ;;
esac
;;
esac
## A macro which other sections of Makefile can redefine to munge the
## flags before they are passed to LD. This is helpful if you have
## redefined LD to something odd, like "gcc".
## (The YMF prefix is a holdover from the old name "ymakefile".)
YMF_PASS_LDFLAGS=flags
if test "x$ORDINARY_LINK" = "xyes"; then
LINKER="\$(CC)"
cat >>confdefs.h <<\_ACEOF
#define ORDINARY_LINK 1
_ACEOF
## The system files defining neither ORDINARY_LINK nor LINKER are:
## (bsd-common), freebsd, gnu-* not on macppc|ibms390x, hpux*.
elif test "x$GCC" = "xyes" && test "x$LINKER" = "x"; then
## Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
## places that are difficult to figure out at make time. Fortunately,
## these same versions allow you to pass arbitrary flags on to the
## linker, so there is no reason not to use it as a linker.
##
## Well, it is not quite perfect. The "-nostdlib" keeps GCC from
## searching for libraries in its internal directories, so we have to
## ask GCC explicitly where to find libgcc.a (LIB_GCC below).
LINKER="\$(CC) -nostdlib"
## GCC passes any argument prefixed with -Xlinker directly to the linker.
## See prefix-args.c for an explanation of why we do not do this with the
## shell''s ``for'' construct. Note that sane people do not have '.' in
## their paths, so we must use ./prefix-args.
## TODO either make prefix-args check ORDINARY_LINK internally,
## or remove it altogether (bug#6184), removing the need for this macro.
YMF_PASS_LDFLAGS='`./prefix-args -Xlinker flags`'
fi
test "x$LINKER" = "x" && LINKER=ld
## FIXME? What setting of YMF_PASS_LDFLAGS should this have?
test "$NS_IMPL_GNUSTEP" = "yes" && LINKER="\$(CC) -rdynamic"
## FIXME? The logic here is not precisely the same as that above
## setting YMF_PASS_LDFLAGS. There is no check here for a pre-defined
## LINKER. Should we only be setting LIB_GCC if LD ~ -nostdlib?
LIB_GCC=
if test "x$GCC" = "xyes"; then
if test "x$GCC" = "xyes" && test "x$ORDINARY_LINK" != "xyes"; then
case "$opsys" in
## cygwin: don't link against static libgcc.
@ -27458,7 +27544,24 @@ $debug ||
# This happens for instance with `./config.status config.h'.
if test -n "$CONFIG_FILES"; then
if $AWK 'BEGIN { getline <"/dev/null" }' </dev/null 2>/dev/null; then
ac_cs_awk_getline=:
ac_cs_awk_pipe_init=
ac_cs_awk_read_file='
while ((getline aline < (F[key])) > 0)
print(aline)
close(F[key])'
ac_cs_awk_pipe_fini=
else
ac_cs_awk_getline=false
ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
ac_cs_awk_read_file='
print "|#_!!_#|"
print "cat " F[key] " &&"
'$ac_cs_awk_pipe_init
# The final `:' finishes the AND list.
ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }'
fi
ac_cr=' '
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
@ -27470,6 +27573,19 @@ fi
echo 'BEGIN {' >"$tmp/subs1.awk" &&
_ACEOF
# Create commands to substitute file output variables.
{
echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
echo 'cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&' &&
echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' &&
echo "_ACAWK" &&
echo "_ACEOF"
} >conf$$files.sh &&
. ./conf$$files.sh ||
{ { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
{ (exit 1); exit 1; }; }
rm -f conf$$files.sh
{
echo "cat >conf$$subs.awk <<_ACEOF" &&
@ -27551,7 +27667,7 @@ _ACAWK
cat >>"\$tmp/subs1.awk" <<_ACAWK &&
for (key in S) S_is_set[key] = 1
FS = ""
\$ac_cs_awk_pipe_init
}
{
line = $ 0
@ -27569,10 +27685,16 @@ cat >>"\$tmp/subs1.awk" <<_ACAWK &&
} else
len += 1 + keylen
}
if (nfields == 3 && !substed) {
key = field[2]
if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) {
\$ac_cs_awk_read_file
next
}
}
print line
}
\$ac_cs_awk_pipe_fini
_ACAWK
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@ -27959,7 +28081,12 @@ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
$ac_datarootdir_hack
"
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
if $ac_cs_awk_getline; then
$AWK -f "$tmp/subs.awk"
else
$AWK -f "$tmp/subs.awk" | $SHELL
fi >$tmp/out \
|| { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
$as_echo "$as_me: error: could not create $ac_file" >&2;}
{ (exit 1); exit 1; }; }

View file

@ -2,9 +2,11 @@ dnl Autoconf script for GNU Emacs
dnl To rebuild the `configure' script from this, execute the command
dnl autoconf
dnl in the directory containing this script.
dnl If you changed any AC_DEFINES, also run autoheader.
dnl
dnl Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003,
dnl 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
dnl Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003, 2004,
dnl 2005, 2006, 2007, 2008, 2009, 2010
dnl Free Software Foundation, Inc.
dnl
dnl This file is part of GNU Emacs.
dnl
@ -168,15 +170,6 @@ OPTION_DEFAULT_ON([selinux],[don't compile with SELinux support])
dnl http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01844.html
OPTION_DEFAULT_ON([makeinfo],[don't require makeinfo for building manuals])
dnl Can remove these in Emacs 24.
AC_ARG_WITH([gtk],,
[AC_MSG_ERROR([--with-gtk has been removed. Use --with-x-toolkit to
specify a toolkit.])],,)
AC_ARG_WITH([gcc],,
[AC_MSG_ERROR([--with-gcc has been removed. Set the `CC' environment
variable to specify a compiler.])],,)
AC_ARG_WITH([pkg-config-prog],dnl
[AS_HELP_STRING([--with-pkg-config-prog=PATH],
[path to pkg-config for finding GTK and librsvg])])
@ -864,6 +857,12 @@ configure___ LIBX=-lX11
configure___ unexec=UNEXEC
#ifdef CANNOT_DUMP
configure___ cannot_dump=yes
#else
configure___ cannot_dump=no
#endif
#ifdef SYSTEM_MALLOC
configure___ system_malloc=yes
#else
@ -925,6 +924,9 @@ fi]
rm ${tempcname}
AC_SUBST(cannot_dump)
LD_SWITCH_SYSTEM=
case "$opsys" in
freebsd)
@ -1348,6 +1350,9 @@ dnl AC_C_BIGENDIAN
dnl check for Make feature
AC_PROG_MAKE_SET
DEPFLAGS=
MKDEPDIR=":"
deps_frag=deps.mk
dnl check for GNU Make if we have GCC and autodepend is on.
if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
AC_MSG_CHECKING([whether we are using GNU Make])
@ -1370,9 +1375,19 @@ if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
AC_MSG_RESULT([$ac_enable_autodepend])
fi
if test $ac_enable_autodepend = yes; then
AC_DEFINE(AUTO_DEPEND, 1, [Generate dependencies with gcc.])
DEPFLAGS='-MMD -MF ${DEPDIR}/$*.d'
## In parallel builds, another make might create depdir between
## the first test and mkdir, so stick another test on the end.
## Or use mkinstalldirs? mkdir -p is not portable.
MKDEPDIR='test -d ${DEPDIR} || mkdir ${DEPDIR} || test -d ${DEPDIR}'
deps_frag=autodeps.mk
fi
fi
deps_frag=$srcdir/src/$deps_frag
AC_SUBST(MKDEPDIR)
AC_SUBST(DEPFLAGS)
AC_SUBST_FILE(deps_frag)
dnl checks for operating system services
AC_SYS_LONG_FILE_NAMES
@ -1480,6 +1495,7 @@ if test "${with_ns}" != no; then
GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)"
GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)"
## Pull in stuff from GNUstep-make.
## FIXME? Cleaner to use AC_SUBST_FILE for this?
NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu
GUI_LIB=gnu
include $GNUSTEP_MAKEFILES/Additional/base.make
@ -1512,6 +1528,7 @@ AC_SUBST(NS_IMPL_GNUSTEP_INC)
AC_SUBST(NS_IMPL_GNUSTEP_TEMACS_LDFLAGS)
AC_SUBST(TEMACS_LDFLAGS2)
ns_frag=/dev/null
NS_OBJ=
NS_SUPPORT=
if test "${HAVE_NS}" = yes; then
@ -1523,6 +1540,7 @@ if test "${HAVE_NS}" = yes; then
if test "${EN_NS_SELF_CONTAINED}" = yes; then
prefix=${ns_appresdir}
fi
ns_frag=$srcdir/src/ns.mk
NS_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o fontset.o fringe.o image.o"
NS_SUPPORT="\${lispsource}emacs-lisp/easymenu.elc \${lispsource}term/ns-win.elc"
fi
@ -1531,6 +1549,7 @@ CPPFLAGS="$tmp_CPPFLAGS"
AC_SUBST(NS_OBJ)
AC_SUBST(NS_SUPPORT)
AC_SUBST(LIB_STANDARD)
AC_SUBST_FILE(ns_frag)
case "${window_system}" in
x11 )
@ -2640,7 +2659,7 @@ HAVE_LIBNCURSES=yes
## Use terminfo instead of termcap?
## Note only system files NOT using terminfo are:
## freebsd < 40000, ms-w32, msdos, netbsd, and
## freebsd < 40000, ms-w32, msdos, netbsd < 599002500, and
## darwin|gnu without ncurses.
TERMINFO=no
LIBS_TERMCAP=
@ -2682,13 +2701,22 @@ fail;
fi
;;
netbsd)
if test $ac_cv_search_tputs = -lterminfo; then
TERMINFO=yes
LIBS_TERMCAP="-lterminfo"
else
LIBS_TERMCAP="-ltermcap"
fi
;;
esac
case "$opsys" in
## hpux: Make sure we get select from libc rather than from libcurses
## because libcurses on HPUX 10.10 has a broken version of select.
## We used to use -lc -lcurses, but this may be cleaner.
hpux*|netbsd) LIBS_TERMCAP="-ltermcap" ;;
hpux*) LIBS_TERMCAP="-ltermcap" ;;
openbsd) LIBS_TERMCAP="-lncurses" ;;
@ -3159,7 +3187,6 @@ else
OLDXMENU_TARGET="really-lwlib"
fi
AC_SUBST(LIBXT_OTHER)
AC_SUBST(OLDXMENU_TARGET)
## The X Menu stuff is present in the X10 distribution, but missing
## from X11. If we have X10, just use the installed library;
@ -3178,7 +3205,9 @@ if test "${HAVE_X11}" = "yes" ; then
LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}"
else
OLDXMENU=
## For a syntactically valid Makefile; not actually used for anything.
## See comments in src/Makefile.in.
OLDXMENU=nothing
## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?).
if test "${HAVE_X_WINDOWS}" = "yes"; then
LIBXMENU="-lXMenu"
@ -3190,11 +3219,13 @@ else
fi
if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then
OLDXMENU=
OLDXMENU_TARGET=
OLDXMENU=nothing
LIBXMENU=
OLDXMENU_DEPS=
fi
AC_SUBST(OLDXMENU_TARGET)
AC_SUBST(OLDXMENU)
AC_SUBST(LIBXMENU)
AC_SUBST(LIBX_OTHER)
@ -3277,8 +3308,75 @@ fi
AC_SUBST(LD_SWITCH_SYSTEM_EXTRA)
LINKER=
ORDINARY_LINK=
case "$opsys" in
## gnu: GNU needs its own crt0.
aix4-2|darwin|gnu|usg5-4|irix6-5|sol2*|unixware) ORDINARY_LINK=yes ;;
cygwin) LINKER="\$(CC)" ;;
## On post 1.3 releases of NetBSD, gcc -nostdlib also clears the
## library search parth, i.e. it won't search /usr/lib for libc and
## friends. Using -nostartfiles instead avoids this problem, and
## will also work on earlier NetBSD releases.
netbsd|openbsd) LINKER="\$(CC) -nostartfiles" ;;
## macpcc: NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> says
## MkLinux/LinuxPPC needs this.
## ibms390x only supports opsys = gnu-linux so it can be added here.
gnu-*)
case "$machine" in
macppc|ibms390x) LINKER="\$(CC) -nostdlib" ;;
esac
;;
esac
## A macro which other sections of Makefile can redefine to munge the
## flags before they are passed to LD. This is helpful if you have
## redefined LD to something odd, like "gcc".
## (The YMF prefix is a holdover from the old name "ymakefile".)
YMF_PASS_LDFLAGS=flags
if test "x$ORDINARY_LINK" = "xyes"; then
LINKER="\$(CC)"
AC_DEFINE(ORDINARY_LINK, 1, [Define if the C compiler is the linker.])
## The system files defining neither ORDINARY_LINK nor LINKER are:
## (bsd-common), freebsd, gnu-* not on macppc|ibms390x, hpux*.
elif test "x$GCC" = "xyes" && test "x$LINKER" = "x"; then
## Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
## places that are difficult to figure out at make time. Fortunately,
## these same versions allow you to pass arbitrary flags on to the
## linker, so there is no reason not to use it as a linker.
##
## Well, it is not quite perfect. The "-nostdlib" keeps GCC from
## searching for libraries in its internal directories, so we have to
## ask GCC explicitly where to find libgcc.a (LIB_GCC below).
LINKER="\$(CC) -nostdlib"
## GCC passes any argument prefixed with -Xlinker directly to the linker.
## See prefix-args.c for an explanation of why we do not do this with the
## shell''s ``for'' construct. Note that sane people do not have '.' in
## their paths, so we must use ./prefix-args.
## TODO either make prefix-args check ORDINARY_LINK internally,
## or remove it altogether (bug#6184), removing the need for this macro.
YMF_PASS_LDFLAGS='`./prefix-args -Xlinker flags`'
fi
AC_SUBST(YMF_PASS_LDFLAGS)
test "x$LINKER" = "x" && LINKER=ld
## FIXME? What setting of YMF_PASS_LDFLAGS should this have?
test "$NS_IMPL_GNUSTEP" = "yes" && LINKER="\$(CC) -rdynamic"
AC_SUBST(LINKER)
## FIXME? The logic here is not precisely the same as that above
## setting YMF_PASS_LDFLAGS. There is no check here for a pre-defined
## LINKER. Should we only be setting LIB_GCC if LD ~ -nostdlib?
LIB_GCC=
if test "x$GCC" = "xyes"; then
if test "x$GCC" = "xyes" && test "x$ORDINARY_LINK" != "xyes"; then
case "$opsys" in
## cygwin: don't link against static libgcc.

View file

@ -1,3 +1,8 @@
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

@ -147,6 +147,11 @@ 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.
@ -250,6 +255,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

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

View file

@ -1,3 +1,11 @@
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@.

View file

@ -111,6 +111,7 @@ 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.
@ -123,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}
@ -180,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.
@ -273,7 +279,7 @@ 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

View file

@ -1,8 +1,159 @@
2010-05-22 Chong Yidong <cyd@stupidchicken.com>
* image.el (image-refresh): Define as an alias for image-flush.
* image-mode.el (image-toggle-display-image): Caller changed.
2010-05-21 Juri Linkov <juri@jurta.org>
* progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Remove "all" from grep-files-aliases. Split grep-files-aliases by
whitespace, call wildcard-to-regexp on substrings and concat them
with "\\|". (Bug#6114)
2010-05-21 Alan Mackenzie <acm@muc.de>
* progmodes/cc-engine.el (c-parse-state-get-strategy): Replace
parameter `here' with `here-' and `here-plus', which sandwich any
pertinent CPP construct.
(c-remove-stale-state-cache-backwards): Fix a bug which happens
when doing (c-parse-state) in a CPP construct: Exclude any "new"
CPP construct from taking part in the scanning.
2010-05-21 Michael Albinus <michael.albinus@gmx.de>
* net/tramp.el (tramp-do-copy-or-rename-file)
(tramp-handle-file-local-copy, tramp-maybe-open-connection): Tune
`with-progress-reporter' messages.
(tramp-handle-vc-registered):
* net/tramp-fish.el (tramp-fish-handle-file-local-copy)
(tramp-fish-handle-insert-file-contents)
(tramp-fish-maybe-open-connection):
* net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
* net/tramp-imap.el (tramp-imap-do-copy-or-rename-file)
(tramp-imap-handle-insert-file-contents)
(tramp-imap-handle-file-local-copy): Use `with-progress-reporter'.
2010-05-21 Juanma Barranquero <lekktu@gmail.com>
* add-log.el (change-log-font-lock-keywords):
Highlight all authors in multi-author entries.
* smerge-mode.el (smerge-refine-ignore-whitespace)
(smerge-refine-weight-hack, smerge-refine, smerge-makeup-conflict):
Fix typos in docstrings.
(smerge-resolve, smerge-refine-subst): Reflow docstrings.
2010-05-21 Glenn Morris <rgm@gnu.org>
* progmodes/fortran.el (fortran-mode):
* progmodes/f90.el (f90-mode): Derive from prog-mode.
* loadup.el [CANNOT_DUMP]: Update for bootstrap-emacs no longer
having a relative path in src/Makefile.in.
2010-05-20 Kevin Ryde <user42@zip.com.au>
* help-mode.el (help-make-xrefs): For Info node links turn
newlines into spaces. Link node names with newlines are matched
by help-xref-info-regexp and buttonized, this change ensures they
can be followed successfully with RET. (Bug#6206)
2010-05-20 Juri Linkov <juri@jurta.org>
* locate.el (locate): Use pop-to-buffer instead of
switch-to-buffer-other-window. (Bug#6204)
2010-05-20 Juri Linkov <juri@jurta.org>
* replace.el (replace-highlight): Fix lazy-highlighting
for `M-s w str M-% str RET'.
2009-12-15 Masatake YAMATO <yamato@redhat.com>
* isearch.el (isearch-yank-word-or-char): Pull next subword
when `subword-mode' is activated. (Bug#6220)
2010-05-20 Mark A. Hershberger <mah@everybody.org>
* isearch.el (isearch-update-post-hook): New hook.
(isearch-update): Use the new hook. (Bug#6225)
2010-05-20 Juri Linkov <juri@jurta.org>
* isearch.el (isearch-mode-map): Bind more keys to isearch-help-map:
[f1], [help], and (char-to-string help-char) instead of "\C-h".
(Bug#6222)
2010-05-20 Juri Linkov <juri@jurta.org>
* isearch.el (isearch-yank-string): Use isearch-process-search-string.
(Bug#6223)
2010-05-20 Juri Linkov <juri@jurta.org>
* dired-x.el (dired-jump, dired-jump-other-window): Add arg
FILE-NAME to read from the minibuffer when called interactively
with prefix argument instead of using buffer-file-name.
http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00534.html
* dired.el: Update autoloads.
2010-05-20 Chong Yidong <cyd@stupidchicken.com>
* nxml/nxml-mode.el (nxml-mode-map): Bind C-c / to
nxml-finish-element, for consistency with SGML mode.
* progmodes/octave-mod.el (octave-mode-map): Bind C-c / to
octave-close-block.
2010-05-20 Juanma Barranquero <lekktu@gmail.com>
* composite.el: Require cl when compiling.
(reference-point-alist, compose-gstring-for-graphic)
(compose-gstring-for-terminal): Fix typos in docstrings.
2010-05-19 Juri Linkov <juri@jurta.org>
* emacs-lisp/cl-macs.el (window-parameter): Add defsetf with
set-window-parameter.
2010-05-19 Michael Albinus <michael.albinus@gmx.de>
* net/tramp.el (tramp-methods): Add `tramp-async-args' attribute
where appropriate.
(tramp-maybe-open-connection): Use it.
2010-05-19 Eli Zaretskii <eliz@gnu.org>
* simple.el (move-end-of-line): Make sure we are at line beginning
before backing up to end of previous line.
2010-05-19 Michael Albinus <michael.albinus@gmx.de>
* password-cache.el (password-cache-remove): Fix docstring.
* net/secrets.el: Autoload the widget functions.
(secrets-search-items, secrets-create-item)
(secrets-get-attributes, secrets-expand-item): Attributes will be
stored on the password database without leading ":", as all other
clients do as well.
(secrets-mode): Fix docstring.
(secrets-show-secrets): Provide it as autoloaded command only when
D-Bus support is available. Check existence of Secret Service API.
2010-05-19 Stefan Monnier <monnier@iro.umontreal.ca>
* indent.el (indent-region): Deactivate region (bug#6200).
2010-05-19 Glenn Morris <rgm@gnu.org>
* vc-dir.el (vc-dir): Don't pop-up-windows. (Bug#6204)
2010-05-19 Kenichi Handa <handa@m17n.org>
* composite.el: Register compose-gstring-for-graphic in
composition-function-table only for combining characters (Mn, Mc,
Me).
composition-function-table only for combining characters (Mn, Mc, Me).
2010-05-18 Jay Belanger <jay.p.belanger@gmail.com>

View file

@ -245,7 +245,7 @@ Note: The search is conducted only within 10%, at the beginning of the file."
;; wrongly with a non-date line existing as a random note. In
;; addition, using any kind of fixed setting like this doesn't
;; work if a user customizes add-log-time-format.
("^[0-9-]+ +\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) [A-z][a-z][a-z] [0-9:+ ]+"
("^[0-9-]+ +\\|^ \\{11,\\}\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) [A-z][a-z][a-z] [0-9:+ ]+"
(0 'change-log-date-face)
;; Name and e-mail; some people put e-mail in parens, not angles.
("\\([^<(]+?\\)[ \t]*[(<]\\([A-Za-z0-9_.+-]+@[A-Za-z0-9_.-]+\\)[>)]" nil nil

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

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.")
@ -537,7 +539,7 @@ character. If the preceding character is not a base character,
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))
@ -669,7 +671,7 @@ All non-spacing characters has this function in
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

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

@ -3974,7 +3974,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 +3983,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

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

@ -1,3 +1,7 @@
2010-05-20 Kevin Ryde <user42@zip.com.au>
* gnus-start.el (gnus-level-unsubscribed): Doc fix. (Bug#6206)
2010-05-14 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sum.el (gnus-summary-save-article): Don't bother to re-fetch

View file

@ -181,7 +181,7 @@ Groups with levels less than `gnus-level-subscribed', which
should be less than this variable, are subscribed. Groups with
levels from `gnus-level-subscribed' (exclusive) upto this
variable (inclusive) are unsubscribed. See also
`gnus-level-zombie', `gnus-level-killed' and the Info node `Group
`gnus-level-zombie', `gnus-level-killed' and the Info node `(gnus)Group
Levels' for details.")
(defconst gnus-level-zombie 8

View file

@ -433,7 +433,9 @@ that."
(let ((data (match-string 2)))
(save-match-data
(unless (string-match "^([^)]+)" data)
(setq data (concat "(emacs)" data))))
(setq data (concat "(emacs)" data)))
(setq data ;; possible newlines if para filled
(replace-regexp-in-string "[ \t\n]+" " " data t t)))
(help-xref-button 2 'help-info data))))
;; URLs
(save-excursion

View file

@ -448,7 +448,7 @@ Remove text properties that display the image."
(defvar archive-superior-buffer)
(defvar tar-superior-buffer)
(declare-function image-refresh "image.c" (spec &optional frame))
(declare-function image-flush "image.c" (spec &optional frame))
(defun image-toggle-display-image ()
"Show the image of the image file.
@ -477,7 +477,7 @@ was inserted."
(inhibit-read-only t)
(buffer-undo-list t)
(modified (buffer-modified-p)))
(image-refresh image)
(image-flush image)
(let ((buffer-file-truename nil)) ; avoid changing dir mtime by lock_file
(add-text-properties (point-min) (point-max) props)
(restore-buffer-modified-p modified))

View file

@ -30,6 +30,7 @@
"Image support."
:group 'multimedia)
(defalias 'image-refresh 'image-flush)
(defconst image-type-header-regexps
`(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)

View file

@ -431,7 +431,11 @@ column to indent to; if it is nil, use one of the three methods above."
(or (eolp)
(indent-to column 0))
(forward-line 1))
(move-marker end nil))))
(move-marker end nil)))
;; In most cases, reindenting modifies the buffer, but it may also
;; leave it unmodified, in which case we have to deactivate the mark
;; by hand.
(deactivate-mark))
(defun indent-relative-maybe ()
"Indent a new line like previous nonblank line.

View file

@ -156,6 +156,9 @@ command history."
(defvar isearch-mode-hook nil
"Function(s) to call after starting up an incremental search.")
(defvar isearch-update-post-hook nil
"Function(s) to call after isearch has found matches in the buffer.")
(defvar isearch-mode-end-hook nil
"Function(s) to call after terminating an incremental search.
When these functions are called, `isearch-mode-end-hook-quit'
@ -460,7 +463,9 @@ This is like `describe-bindings', but displays only Isearch keys."
(define-key map "\M-\C-y" 'isearch-yank-char)
(define-key map "\C-y" 'isearch-yank-line)
(define-key map "\C-h" isearch-help-map)
(define-key map (char-to-string help-char) isearch-help-map)
(define-key map [help] isearch-help-map)
(define-key map [f1] isearch-help-map)
(define-key map "\M-n" 'isearch-ring-advance)
(define-key map "\M-p" 'isearch-ring-retreat)
@ -868,7 +873,8 @@ It is called by the function `isearch-forward' and other related functions."
(isearch-lazy-highlight-new-loop))
;; We must prevent the point moving to the end of composition when a
;; part of the composition has just been searched.
(setq disable-point-adjustment t))
(setq disable-point-adjustment t)
(run-hooks 'isearch-update-post-hook))
(defun isearch-done (&optional nopush edit)
"Exit Isearch mode.
@ -1476,14 +1482,10 @@ If search string is empty, just beep."
(eq 'not-yanks search-upper-case))
(setq string (downcase string)))
(if isearch-regexp (setq string (regexp-quote string)))
(setq isearch-string (concat isearch-string string)
isearch-message
(concat isearch-message
(mapconcat 'isearch-text-char-description
string ""))
;; Don't move cursor in reverse search.
isearch-yank-flag t)
(isearch-search-and-update))
;; Don't move cursor in reverse search.
(setq isearch-yank-flag t)
(isearch-process-search-string
string (mapconcat 'isearch-text-char-description string "")))
(defun isearch-yank-kill ()
"Pull string from kill ring into search string."
@ -1538,14 +1540,18 @@ or it might return the position of the end of the line."
(interactive "p")
(isearch-yank-internal (lambda () (forward-char arg) (point))))
(declare-function subword-forward "subword" (&optional arg))
(defun isearch-yank-word-or-char ()
"Pull next character or word from buffer into search string."
"Pull next character, subword or word from buffer into search string.
Subword is used when `subword-mode' is activated. "
(interactive)
(isearch-yank-internal
(lambda ()
(if (or (= (char-syntax (or (char-after) 0)) ?w)
(= (char-syntax (or (char-after (1+ (point))) 0)) ?w))
(forward-word 1)
(if (and (boundp 'subword-mode) subword-mode)
(subword-forward 1)
(forward-word 1))
(forward-char 1)) (point))))
(defun isearch-yank-word ()

View file

@ -54,7 +54,7 @@
(equal (nth 3 command-line-args) "unidata-gen.el")
(equal (nth 4 command-line-args) "unidata-gen-files")
;; In case CANNOT_DUMP.
(equal (nth 0 command-line-args) "../src/bootstrap-emacs"))
(string-match "src/bootstrap-emacs" (nth 0 command-line-args)))
(let ((dir (car load-path)))
;; We'll probably overflow the pure space.
(setq purify-flag nil)

View file

@ -326,7 +326,7 @@ ARG is the interactive prefix arg."
(locate-do-setup search-string)
))
(and (not (string-equal (buffer-name) locate-buffer-name))
(switch-to-buffer-other-window locate-buffer-name))
(pop-to-buffer locate-buffer-name))
(run-hooks 'dired-mode-hook)
(dired-next-line 3) ;move to first matching file.

View file

@ -1,3 +1,10 @@
2010-05-14 Peter S Galbraith <psg@debian.org>
* mh-mime.el (mh-decode-message-subject): New function to decode
RFC2047 encoded Subject lines. Used for reply drafts.
* mh-comp.el (mh-compose-and-send-mail): Call
`mh-decode-message-subject' on (reply or forward) message drafts.
2010-05-07 Chong Yidong <cyd@stupidchicken.com>
* Version 23.2 released.

View file

@ -905,6 +905,9 @@ letter."
(mh-identity-make-menu)
(mh-identity-add-menu)
;; Cleanup possibly RFC2047 encoded subject header
(mh-decode-message-subject)
;; Insert extra fields.
(mh-insert-x-mailer)
(mh-insert-x-face)

View file

@ -507,6 +507,15 @@ decoding the same message multiple times."
(let ((buffer-read-only nil))
(rfc2047-decode-region (point-min) (mh-mail-header-end)))))
;;;###mh-autoload
(defun mh-decode-message-subject ()
"Decode RFC2047 encoded message header fields."
(when mh-decode-mime-flag
(save-excursion
(let ((buffer-read-only nil))
(rfc2047-decode-region (progn (mh-goto-header-field "subject:") (point))
(progn (mh-header-field-end) (point)))))))
;;;###mh-autoload
(defun mh-mime-display (&optional pre-dissected-handles)
"Display (and possibly decode) MIME handles.

View file

@ -151,11 +151,11 @@
(require 'dbus)
(declare-function tree-widget-set-theme "tree-widget")
(declare-function widget-create-child-and-convert "wid-edit")
(declare-function widget-default-value-set "wid-edit")
(declare-function widget-field-end "wid-edit")
(declare-function widget-member "wid-edit")
(autoload 'tree-widget-set-theme "tree-widget")
(autoload 'widget-create-child-and-convert "wid-edit")
(autoload 'widget-default-value-set "wid-edit")
(autoload 'widget-field-end "wid-edit")
(autoload 'widget-member "wid-edit")
(defvar tree-widget-after-toggle-functions)
(defvar secrets-enabled nil
@ -563,7 +563,7 @@ The object paths of the found items are returned as list."
(setq props (add-to-list
'props
(list :dict-entry
(symbol-name (car attributes))
(substring (symbol-name (car attributes)) 1)
(cadr attributes))
'append)
attributes (cddr attributes)))
@ -601,7 +601,7 @@ The object path of the created item is returned."
(setq props (add-to-list
'props
(list :dict-entry
(symbol-name (car attributes))
(substring (symbol-name (car attributes)) 1)
(cadr attributes))
'append)
attributes (cddr attributes)))
@ -656,7 +656,8 @@ If there is no such item, or the item has no attributes, return nil."
(let ((item-path (secrets-item-path collection item)))
(unless (secrets-empty-path item-path)
(mapcar
(lambda (attribute) (cons (intern (car attribute)) (cadr attribute)))
(lambda (attribute)
(cons (intern (concat ":" (car attribute))) (cadr attribute)))
(dbus-get-property
:session secrets-service item-path
secrets-interface-item "Attributes")))))
@ -678,13 +679,10 @@ If there is no such item, or the item doesn't own this attribute, return nil."
;;; Visualization.
(define-derived-mode secrets-mode nil "Secrets"
"Major mode for presenting search results of a Xesam search.
"Major mode for presenting password entries retrieved by Security Service.
In this mode, widgets represent the search results.
\\{secrets-mode-map}
Turning on Xesam mode runs the normal hook `xesam-mode-hook'. It
can be used to set `xesam-notify-function', which must a search
engine specific, widget :notify function to visualize xesam:url."
\\{secrets-mode-map}"
;; Keymap.
(setq secrets-mode-map (copy-keymap special-mode-map))
(set-keymap-parent secrets-mode-map widget-keymap)
@ -707,19 +705,27 @@ engine specific, widget :notify function to visualize xesam:url."
;; keymap etc. So we create a dummy buffer. Stupid.
(with-temp-buffer (secrets-mode))
;;;###autoload
;; We autoload `secrets-show-secrets' only on systems with D-Bus support.
;;;###autoload(when (featurep 'dbusbind)
;;;###autoload (autoload 'secrets-show-secrets "secrets" nil t))
(defun secrets-show-secrets ()
"Display a list of collections from the Secret Service API.
The collections are in tree view, that means they can be expanded
to the corresponding secret items, which could also be expanded
to their attributes."
(interactive)
;; Create the search buffer.
(with-current-buffer (get-buffer-create "*Secrets*")
(switch-to-buffer-other-window (current-buffer))
;; Inialize buffer with `secrets-mode'.
(secrets-mode)
(secrets-show-collections)))
;; Check, whether the Secret Service API is enabled.
(if (null secrets-enabled)
(message "Secret Service not available")
;; Create the search buffer.
(with-current-buffer (get-buffer-create "*Secrets*")
(switch-to-buffer-other-window (current-buffer))
;; Inialize buffer with `secrets-mode'.
(secrets-mode)
(secrets-show-collections))))
(defun secrets-show-collections ()
"Show all available collections."
@ -757,14 +763,14 @@ to their attributes."
(attributes (secrets-get-attributes coll item))
;; padding is needed to format attribute names.
(padding
(1+
(apply
'max
(cons
(length "password")
(mapcar
(lambda (attribute) (length (symbol-name (car attribute))))
attributes))))))
(apply
'max
(cons
(1+ (length "password"))
(mapcar
;; Atribute names have a leading ":", which will be suppressed.
(lambda (attribute) (length (symbol-name (car attribute))))
attributes)))))
(cons
;; The password widget.
`(editable-field :tag "password"
@ -779,7 +785,7 @@ to their attributes."
"%v\n"))
(mapcar
(lambda (attribute)
(let ((name (symbol-name (car attribute)))
(let ((name (substring (symbol-name (car attribute)) 1))
(value (cdr attribute)))
;; The attribute widget.
`(editable-field :tag ,name

View file

@ -149,9 +149,12 @@
;; parameter of `write-region'. Transfer of binary data fails due to
;; Emacs' process input/output handling.
;;; Code:
(eval-when-compile
;; Pacify byte-compiler.
(require 'cl))
(require 'tramp)
(require 'tramp-cache)
(require 'tramp-compat)
@ -487,13 +490,13 @@ pass to the OPERATION."
v 'file-error
"Cannot make local copy of non-existing file `%s'" filename))
(let ((tmpfile (tramp-compat-make-temp-file filename)))
(tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile)
(when (tramp-fish-retrieve-data v)
;; Save file
(with-current-buffer (tramp-get-buffer v)
(write-region (point-min) (point-max) tmpfile))
(tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile)
tmpfile))))
(with-progress-reporter
v 3 (format "Fetching %s to tmp file %s" filename tmpfile)
(when (tramp-fish-retrieve-data v)
;; Save file
(with-current-buffer (tramp-get-buffer v)
(write-region (point-min) (point-max) tmpfile))
tmpfile)))))
;; This function should return "foo/" for directories and "bar" for
;; files.
@ -591,17 +594,16 @@ WILDCARD and FULL-DIRECTORY-P are not handled."
(let ((point (point))
size)
(tramp-message v 4 "Fetching file %s..." filename)
(when (tramp-fish-retrieve-data v)
;; Insert file
(insert
(with-current-buffer (tramp-get-buffer v)
(let ((beg (or beg (point-min)))
(end (min (or end (point-max)) (point-max))))
(setq size (- end beg))
(buffer-substring beg end))))
(goto-char point))
(tramp-message v 4 "Fetching file %s...done" filename)
(with-progress-reporter v 3 (format "Fetching file %s" filename)
(when (tramp-fish-retrieve-data v)
;; Insert file
(insert
(with-current-buffer (tramp-get-buffer v)
(let ((beg (or beg (point-min)))
(end (min (or end (point-max)) (point-max))))
(setq size (- end beg))
(buffer-substring beg end))))
(goto-char point)))
(list (expand-file-name filename) size)))))
@ -1115,34 +1117,36 @@ connection if a previous connection has died for some reason."
(delete-process p))
(setenv "TERM" tramp-terminal-type)
(setenv "PS1" tramp-initial-end-of-output)
(tramp-message
vec 3 "Opening connection for %s@%s using %s..."
tramp-current-user tramp-current-host tramp-current-method)
(with-progress-reporter
vec 3
(format "Opening connection for %s@%s using %s"
tramp-current-user tramp-current-host tramp-current-method)
(let* ((process-connection-type tramp-process-connection-type)
(inhibit-eol-conversion nil)
(coding-system-for-read 'binary)
(coding-system-for-write 'binary)
;; This must be done in order to avoid our file name handler.
(p (let ((default-directory
(tramp-compat-temporary-file-directory)))
(start-process
(or (tramp-get-connection-property vec "process-name" nil)
(tramp-buffer-name vec))
(tramp-get-connection-buffer vec)
"ssh" "-l"
(tramp-file-name-user vec)
(tramp-file-name-host vec)))))
(tramp-message vec 6 "%s" (mapconcat 'identity (process-command p) " "))
(let* ((process-connection-type tramp-process-connection-type)
(inhibit-eol-conversion nil)
(coding-system-for-read 'binary)
(coding-system-for-write 'binary)
;; This must be done in order to avoid our file name handler.
(p (let ((default-directory
(tramp-compat-temporary-file-directory)))
(start-process
(or (tramp-get-connection-property vec "process-name" nil)
(tramp-buffer-name vec))
(tramp-get-connection-buffer vec)
"ssh" "-l"
(tramp-file-name-user vec)
(tramp-file-name-host vec)))))
(tramp-message
vec 6 "%s" (mapconcat 'identity (process-command p) " "))
;; Check whether process is alive.
(tramp-set-process-query-on-exit-flag p nil)
;; Check whether process is alive.
(tramp-set-process-query-on-exit-flag p nil)
(tramp-process-actions p vec tramp-actions-before-shell 60)
(tramp-fish-send-command vec tramp-fish-start-fish-server-command)
(tramp-message
vec 3
"Found remote shell prompt on `%s'" (tramp-file-name-host vec))))))
(tramp-process-actions p vec tramp-actions-before-shell 60)
(tramp-fish-send-command vec tramp-fish-start-fish-server-command)
(tramp-message
vec 3
"Found remote shell prompt on `%s'" (tramp-file-name-host vec)))))))
(defun tramp-fish-send-command (vec command)
"Send the COMMAND to connection VEC."

View file

@ -1067,65 +1067,58 @@ connection if a previous connection has died for some reason."
(tramp-gvfs-object-path
(tramp-make-tramp-file-name method user host ""))))
(if (zerop (length (tramp-file-name-user vec)))
(tramp-message
vec 3 "Opening connection for %s using %s..." host method)
(tramp-message
vec 3 "Opening connection for %s@%s using %s..." user host method))
(with-progress-reporter
vec 3
(if (zerop (length user))
(format "Opening connection for %s using %s" host method)
(format "Opening connection for %s@%s using %s" user host method))
;; Enable auth-sorce and password-cache.
(tramp-set-connection-property vec "first-password-request" t)
;; Enable auth-sorce and password-cache.
(tramp-set-connection-property vec "first-password-request" t)
;; There will be a callback of "askPassword", when a password is
;; needed.
(dbus-register-method
:session dbus-service-emacs object-path
tramp-gvfs-interface-mountoperation "askPassword"
'tramp-gvfs-handler-askpassword)
;; There will be a callback of "askPassword", when a password is
;; needed.
(dbus-register-method
:session dbus-service-emacs object-path
tramp-gvfs-interface-mountoperation "askPassword"
'tramp-gvfs-handler-askpassword)
;; There could be a callback of "askQuestion", when adding fingerprint.
(dbus-register-method
:session dbus-service-emacs object-path
tramp-gvfs-interface-mountoperation "askQuestion"
'tramp-gvfs-handler-askquestion)
;; There could be a callback of "askQuestion", when adding fingerprint.
(dbus-register-method
:session dbus-service-emacs object-path
tramp-gvfs-interface-mountoperation "askQuestion"
'tramp-gvfs-handler-askquestion)
;; The call must be asynchronously, because of the "askPassword"
;; or "askQuestion"callbacks.
(with-tramp-dbus-call-method vec nil
:session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker
tramp-gvfs-interface-mounttracker "mountLocation"
`(:struct
,(dbus-string-to-byte-array "/")
,(tramp-gvfs-mount-spec vec))
(dbus-get-unique-name :session)
:object-path object-path)
;; The call must be asynchronously, because of the "askPassword"
;; or "askQuestion"callbacks.
(with-tramp-dbus-call-method vec nil
:session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker
tramp-gvfs-interface-mounttracker "mountLocation"
`(:struct
,(dbus-string-to-byte-array "/")
,(tramp-gvfs-mount-spec vec))
(dbus-get-unique-name :session)
:object-path object-path)
;; We must wait, until the mount is applied. This will be
;; indicated by the "mounted" signal, i.e. the "fuse-mountpoint"
;; file property.
(with-timeout
(60
(if (zerop (length (tramp-file-name-user vec)))
;; We must wait, until the mount is applied. This will be
;; indicated by the "mounted" signal, i.e. the "fuse-mountpoint"
;; file property.
(with-timeout
(60
(if (zerop (length (tramp-file-name-user vec)))
(tramp-error
vec 'file-error
"Timeout reached mounting %s using %s" host method)
(tramp-error
vec 'file-error
"Timeout reached mounting %s using %s" host method)
(tramp-error
vec 'file-error
"Timeout reached mounting %s@%s using %s" user host method)))
(while (not (tramp-get-file-property vec "/" "fuse-mountpoint" nil))
(read-event nil nil 0.1)))
"Timeout reached mounting %s@%s using %s" user host method)))
(while (not (tramp-get-file-property vec "/" "fuse-mountpoint" nil))
(read-event nil nil 0.1)))
;; We set the connection property "started" in order to put the
;; remote location into the cache, which is helpful for further
;; completion.
(tramp-set-connection-property vec "started" t)
(if (zerop (length (tramp-file-name-user vec)))
(tramp-message
vec 3 "Opening connection for %s using %s...done" host method)
(tramp-message
vec 3
"Opening connection for %s@%s using %s...done" user host method)))))
;; We set the connection property "started" in order to put the
;; remote location into the cache, which is helpful for further
;; completion.
(tramp-set-connection-property vec "started" t)))))
;; D-Bus BLUEZ functions.

View file

@ -241,32 +241,31 @@ of `copy' and `rename'."
(t2 (and (tramp-tramp-file-p newname)
(tramp-imap-file-name-p newname))))
(when (and (not ok-if-already-exists) (file-exists-p newname))
(with-parsed-tramp-file-name (if t1 filename newname) nil
(with-parsed-tramp-file-name (if t1 filename newname) nil
(when (and (not ok-if-already-exists) (file-exists-p newname))
(tramp-error
v 'file-already-exists "File %s already exists" newname)))
v 'file-already-exists "File %s already exists" newname))
(with-parsed-tramp-file-name (if t1 filename newname) nil
(tramp-message v 0 "Transferring %s to %s..." filename newname))
(with-progress-reporter
v 0 (format "%s %s to %s"
(if (eq op 'copy) "Copying" "Renaming")
filename newname)
;; We just make a local copy of FILENAME, and write it then to
;; NEWNAME. This must be optimized, when both files are located
;; on the same IMAP server.
(with-temp-buffer
(if (and t1 t2)
;; We don't encrypt.
(with-parsed-tramp-file-name newname nil
(insert (tramp-imap-get-file filename nil))
(tramp-imap-put-file
v (current-buffer)
(tramp-imap-file-name-name v)
nil nil (nth 7 (file-attributes filename))))
;; One of them is not located on a IMAP mailbox.
(insert-file-contents filename)
(write-region (point-min) (point-max) newname)))
(with-parsed-tramp-file-name (if t1 filename newname) nil
(tramp-message v 0 "Transferring %s to %s...done" filename newname))
;; We just make a local copy of FILENAME, and write it then to
;; NEWNAME. This must be optimized, when both files are
;; located on the same IMAP server.
(with-temp-buffer
(if (and t1 t2)
;; We don't encrypt.
(with-parsed-tramp-file-name newname v1
(insert (tramp-imap-get-file filename nil))
(tramp-imap-put-file
v1 (current-buffer)
(tramp-imap-file-name-name v1)
nil nil (nth 7 (file-attributes filename))))
;; One of them is not located on a IMAP mailbox.
(insert-file-contents filename)
(write-region (point-min) (point-max) newname)))))
(when (eq op 'rename)
(tramp-compat-delete-file filename 'force))))
@ -505,17 +504,16 @@ SIZE MODE WEIRD INODE DEVICE)."
v 'file-error "File `%s' not found on remote host" filename)
(let ((point (point))
size data)
(tramp-message v 4 "Fetching file %s..." filename)
(insert (tramp-imap-get-file filename t))
(setq size (- (point) point))
(with-progress-reporter v 3 (format "Fetching file %s" filename)
(insert (tramp-imap-get-file filename t))
(setq size (- (point) point))
;;; TODO: handle ranges.
;;; (let ((beg (or beg (point-min)))
;;; (end (min (or end (point-max)) (point-max))))
;;; (setq size (- end beg))
;;; (buffer-substring beg end))
(goto-char point)
(tramp-message v 4 "Fetching file %s...done" filename)
(list (expand-file-name filename) size)))))
(goto-char point)
(list (expand-file-name filename) size))))))
(defun tramp-imap-handle-file-exists-p (filename)
"Like `file-exists-p' for Tramp files."
@ -588,12 +586,12 @@ SIZE MODE WEIRD INODE DEVICE)."
v 'file-error
"Cannot make local copy of non-existing file `%s'" filename))
(let ((tmpfile (tramp-compat-make-temp-file filename)))
(tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile)
(with-temp-buffer
(insert-file-contents filename)
(write-region (point-min) (point-max) tmpfile)
(tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile)
tmpfile))))
(with-progress-reporter
v 3 (format "Fetching %s to tmp file %s" filename tmpfile)
(with-temp-buffer
(insert-file-contents filename)
(write-region (point-min) (point-max) tmpfile)
tmpfile)))))
(defun tramp-imap-put-file
(vec filename-or-buffer &optional subject inode encode size)

View file

@ -334,6 +334,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("scp" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "scp")
(tramp-copy-args (("-P" "%p") ("-p" "%k")
@ -349,6 +350,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("scp1" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-1" "-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "scp")
(tramp-copy-args (("-1") ("-P" "%p") ("-p" "%k")
@ -364,6 +366,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("scp2" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-2" "-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "scp")
(tramp-copy-args (("-2") ("-P" "%p") ("-p" "%k")
@ -399,6 +402,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("sftp" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "sftp")
(tramp-copy-args nil)
@ -407,6 +411,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("rsync" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "rsync")
(tramp-copy-args (("-e" "ssh") ("-t" "%k") ("-r")))
@ -420,6 +425,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("-o" "ControlPath=%t.%%r@%%h:%%p")
("-o" "ControlMaster=yes")
("-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "rsync")
(tramp-copy-args (("-t" "%k") ("-r")))
@ -449,6 +455,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("ssh" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program nil)
(tramp-copy-args nil)
@ -462,6 +469,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("ssh1" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-1" "-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program nil)
(tramp-copy-args nil)
@ -475,6 +483,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("ssh2" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-2" "-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program nil)
(tramp-copy-args nil)
@ -489,6 +498,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
(tramp-login-program "ssh1")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program nil)
(tramp-copy-args nil)
@ -539,6 +549,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("-o" "ControlPath=%t.%%r@%%h:%%p")
("-o" "ControlMaster=yes")
("-e" "none")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "scp")
(tramp-copy-args (("-P" "%p") ("-p" "%k") ("-q")
@ -554,6 +565,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("scpx" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-e" "none" "-t" "-t" "/bin/sh")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program "scp")
(tramp-copy-args (("-p" "%k")))
@ -567,6 +579,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
("sshx" (tramp-login-program "ssh")
(tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
("-e" "none" "-t" "-t" "/bin/sh")))
(tramp-async-args (("-q")))
(tramp-remote-sh "/bin/sh")
(tramp-copy-program nil)
(tramp-copy-args nil)
@ -672,6 +685,11 @@ pair of the form (KEY VALUE). The following KEYs are defined:
\"%t\" is replaced by the temporary file name produced with
`tramp-make-tramp-temp-file'. \"%k\" indicates the keep-date
parameter of a program, if exists.
* `tramp-async-args'
When an asynchronous process is started, we know already that
the connection works. Therefore, we can pass additional
parameters to suppress diagnostic messages, in order not to
tamper the process output.
* `tramp-copy-program'
This specifies the name of the program to use for remotely copying
the file; this might be the absolute filename of rcp or the name of
@ -3641,85 +3659,86 @@ and `rename'. FILENAME and NEWNAME must be absolute file names."
(apply 'file-selinux-context (list filename))))
pr tm)
(when (and (not ok-if-already-exists) (file-exists-p newname))
(with-parsed-tramp-file-name (if t1 filename newname) nil
(tramp-error
v 'file-already-exists "File %s already exists" newname)))
(with-parsed-tramp-file-name (if t1 filename newname) nil
(when (and (not ok-if-already-exists) (file-exists-p newname))
(tramp-error
v 'file-already-exists "File %s already exists" newname))
(with-progress-reporter
v 0 (format "Transferring %s to %s" filename newname)
v 0 (format "%s %s to %s"
(if (eq op 'copy) "Copying" "Renaming")
filename newname)
(cond
;; Both are Tramp files.
((and t1 t2)
(with-parsed-tramp-file-name filename v1
(with-parsed-tramp-file-name newname v2
(cond
;; Shortcut: if method, host, user are the same for both
;; files, we invoke `cp' or `mv' on the remote host
;; directly.
((tramp-equal-remote filename newname)
(tramp-do-copy-or-rename-file-directly
op filename newname
ok-if-already-exists keep-date preserve-uid-gid))
(cond
;; Both are Tramp files.
((and t1 t2)
(with-parsed-tramp-file-name filename v1
(with-parsed-tramp-file-name newname v2
(cond
;; Shortcut: if method, host, user are the same for
;; both files, we invoke `cp' or `mv' on the remote
;; host directly.
((tramp-equal-remote filename newname)
(tramp-do-copy-or-rename-file-directly
op filename newname
ok-if-already-exists keep-date preserve-uid-gid))
;; Try out-of-band operation.
((tramp-method-out-of-band-p
v1 (nth 7 (file-attributes filename)))
(tramp-do-copy-or-rename-file-out-of-band
op filename newname keep-date))
;; Try out-of-band operation.
((tramp-method-out-of-band-p
v1 (nth 7 (file-attributes filename)))
(tramp-do-copy-or-rename-file-out-of-band
op filename newname keep-date))
;; No shortcut was possible. So we copy the
;; file first. If the operation was `rename', we go
;; back and delete the original file (if the copy was
;; successful). The approach is simple-minded: we
;; create a new buffer, insert the contents of the
;; source file into it, then write out the buffer to
;; the target file. The advantage is that it doesn't
;; matter which filename handlers are used for the
;; source and target file.
(t
(tramp-do-copy-or-rename-file-via-buffer
op filename newname keep-date))))))
;; No shortcut was possible. So we copy the file
;; first. If the operation was `rename', we go back
;; and delete the original file (if the copy was
;; successful). The approach is simple-minded: we
;; create a new buffer, insert the contents of the
;; source file into it, then write out the buffer to
;; the target file. The advantage is that it doesn't
;; matter which filename handlers are used for the
;; source and target file.
(t
(tramp-do-copy-or-rename-file-via-buffer
op filename newname keep-date))))))
;; One file is a Tramp file, the other one is local.
((or t1 t2)
(cond
;; Fast track on local machine.
((tramp-local-host-p v)
(tramp-do-copy-or-rename-file-directly
op filename newname
ok-if-already-exists keep-date preserve-uid-gid))
;; One file is a Tramp file, the other one is local.
((or t1 t2)
(cond
;; Fast track on local machine.
((tramp-local-host-p v)
(tramp-do-copy-or-rename-file-directly
op filename newname
ok-if-already-exists keep-date preserve-uid-gid))
;; If the Tramp file has an out-of-band method, the corresponding
;; copy-program can be invoked.
((tramp-method-out-of-band-p v (nth 7 (file-attributes filename)))
(tramp-do-copy-or-rename-file-out-of-band
op filename newname keep-date))
;; If the Tramp file has an out-of-band method, the
;; corresponding copy-program can be invoked.
((tramp-method-out-of-band-p v (nth 7 (file-attributes filename)))
(tramp-do-copy-or-rename-file-out-of-band
op filename newname keep-date))
;; Use the inline method via a Tramp buffer.
(t (tramp-do-copy-or-rename-file-via-buffer
op filename newname keep-date))))
;; Use the inline method via a Tramp buffer.
(t (tramp-do-copy-or-rename-file-via-buffer
op filename newname keep-date))))
(t
;; One of them must be a Tramp file.
(error "Tramp implementation says this cannot happen")))
(t
;; One of them must be a Tramp file.
(error "Tramp implementation says this cannot happen")))
;; Handle `preserve-selinux-context'.
(when context (apply 'set-file-selinux-context (list newname context)))
;; Handle `preserve-selinux-context'.
(when context (apply 'set-file-selinux-context (list newname context)))
;; In case of `rename', we must flush the cache of the source file.
(when (and t1 (eq op 'rename))
(with-parsed-tramp-file-name filename v1
(tramp-flush-file-property v1 (file-name-directory localname))
(tramp-flush-file-property v1 localname)))
;; In case of `rename', we must flush the cache of the source file.
(when (and t1 (eq op 'rename))
(with-parsed-tramp-file-name filename v1
(tramp-flush-file-property v1 (file-name-directory localname))
(tramp-flush-file-property v1 localname)))
;; When newname did exist, we have wrong cached values.
(when t2
(with-parsed-tramp-file-name newname v2
(tramp-flush-file-property v2 (file-name-directory localname))
(tramp-flush-file-property v2 localname)))))))
;; When newname did exist, we have wrong cached values.
(when t2
(with-parsed-tramp-file-name newname v2
(tramp-flush-file-property v2 (file-name-directory localname))
(tramp-flush-file-property v2 localname)))))))
(defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date)
"Use an Emacs buffer to copy or rename a file.
@ -4752,7 +4771,7 @@ Lisp error raised when PROGRAM is nil is trapped also, returning 1."
(rem-enc
(save-excursion
(with-progress-reporter
v 5 (format "Encoding remote file %s" filename)
v 3 (format "Encoding remote file %s" filename)
(tramp-barf-unless-okay
v (format rem-enc (tramp-shell-quote-argument localname))
"Encoding remote file failed"))
@ -5323,46 +5342,50 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file."
;; any other remote command.
(defun tramp-handle-vc-registered (file)
"Like `vc-registered' for Tramp files."
(with-parsed-tramp-file-name file nil
(with-temp-message ""
(with-parsed-tramp-file-name file nil
(with-progress-reporter
v 3 (format "Checking `vc-registered' for %s" file)
;; There could be new files, created by the vc backend. We cannot
;; reuse the old cache entries, therefore.
(let (tramp-vc-registered-file-names
(tramp-cache-inhibit-cache (current-time))
(file-name-handler-alist
`((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
;; There could be new files, created by the vc backend. We
;; cannot reuse the old cache entries, therefore.
(let (tramp-vc-registered-file-names
(tramp-cache-inhibit-cache (current-time))
(file-name-handler-alist
`((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
;; Here we collect only file names, which need an operation.
(tramp-run-real-handler 'vc-registered (list file))
(tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
;; Here we collect only file names, which need an operation.
(tramp-run-real-handler 'vc-registered (list file))
(tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
;; Send just one command, in order to fill the cache.
(when tramp-vc-registered-file-names
(tramp-maybe-send-script
v
(format tramp-vc-registered-read-file-names
(tramp-get-file-exists-command v)
(format "%s -r" (tramp-get-test-command v)))
"tramp_vc_registered_read_file_names")
;; Send just one command, in order to fill the cache.
(when tramp-vc-registered-file-names
(tramp-maybe-send-script
v
(format tramp-vc-registered-read-file-names
(tramp-get-file-exists-command v)
(format "%s -r" (tramp-get-test-command v)))
"tramp_vc_registered_read_file_names")
(dolist
(elt
(tramp-send-command-and-read
v
(format
"tramp_vc_registered_read_file_names %s"
(mapconcat 'tramp-shell-quote-argument
tramp-vc-registered-file-names
" "))))
(dolist
(elt
(tramp-send-command-and-read
v
(format
"tramp_vc_registered_read_file_names %s"
(mapconcat 'tramp-shell-quote-argument
tramp-vc-registered-file-names
" "))))
(tramp-set-file-property v (car elt) (cadr elt) (cadr (cdr elt))))))
(tramp-set-file-property
v (car elt) (cadr elt) (cadr (cdr elt))))))
;; Second run. Now all `file-exists-p' or `file-readable-p' calls
;; shall be answered from the file cache.
;; We unset `process-file-side-effects' in order to keep the cache
;; when `process-file' calls appear.
(let (process-file-side-effects)
(tramp-run-real-handler 'vc-registered (list file)))))
;; Second run. Now all `file-exists-p' or `file-readable-p'
;; calls shall be answered from the file cache. We unset
;; `process-file-side-effects' in order to keep the cache when
;; `process-file' calls appear.
(let (process-file-side-effects)
(tramp-run-real-handler 'vc-registered (list file)))))))
;;;###autoload
(progn (defun tramp-run-real-handler (operation args)
@ -7380,6 +7403,7 @@ Does not do anything if a connection is already open, but re-opens the
connection if a previous connection has died for some reason."
(catch 'uname-changed
(let ((p (tramp-get-connection-process vec))
(process-name (tramp-get-connection-property vec "process-name" nil))
(process-environment (copy-sequence process-environment)))
;; If too much time has passed since last command was sent, look
@ -7413,126 +7437,135 @@ connection if a previous connection has died for some reason."
;; We call `tramp-get-buffer' in order to get a debug buffer for
;; messages from the beginning.
(tramp-get-buffer vec)
(if (zerop (length (tramp-file-name-user vec)))
(with-progress-reporter
vec 3
(if (zerop (length (tramp-file-name-user vec)))
(format "Opening connection for %s using %s"
(tramp-file-name-host vec)
(tramp-file-name-method vec))
(format "Opening connection for %s@%s using %s"
(tramp-file-name-user vec)
(tramp-file-name-host vec)
(tramp-file-name-method vec)))
;; Start new process.
(when (and p (processp p))
(delete-process p))
(setenv "TERM" tramp-terminal-type)
(setenv "LC_ALL" "C")
(setenv "PROMPT_COMMAND")
(setenv "PS1" tramp-initial-end-of-output)
(let* ((target-alist (tramp-compute-multi-hops vec))
(process-connection-type tramp-process-connection-type)
(process-adaptive-read-buffering nil)
(coding-system-for-read nil)
;; This must be done in order to avoid our file name handler.
(p (let ((default-directory
(tramp-compat-temporary-file-directory)))
(start-process
(or process-name (tramp-buffer-name vec))
(tramp-get-connection-buffer vec)
tramp-encoding-shell))))
(tramp-message
vec 3 "Opening connection for %s using %s"
(tramp-file-name-host vec)
(tramp-file-name-method vec))
(tramp-message
vec 3 "Opening connection for %s@%s using %s"
(tramp-file-name-user vec)
(tramp-file-name-host vec)
(tramp-file-name-method vec)))
vec 6 "%s" (mapconcat 'identity (process-command p) " "))
;; Start new process.
(when (and p (processp p))
(delete-process p))
(setenv "TERM" tramp-terminal-type)
(setenv "LC_ALL" "C")
(setenv "PROMPT_COMMAND")
(setenv "PS1" tramp-initial-end-of-output)
(let* ((target-alist (tramp-compute-multi-hops vec))
(process-connection-type tramp-process-connection-type)
(process-adaptive-read-buffering nil)
(coding-system-for-read nil)
;; This must be done in order to avoid our file name handler.
(p (let ((default-directory
(tramp-compat-temporary-file-directory)))
(start-process
(or (tramp-get-connection-property vec "process-name" nil)
(tramp-buffer-name vec))
(tramp-get-connection-buffer vec)
tramp-encoding-shell))))
(tramp-message
vec 6 "%s" (mapconcat 'identity (process-command p) " "))
;; Check whether process is alive.
(tramp-set-process-query-on-exit-flag p nil)
(with-progress-reporter vec 3 "Waiting 60s for local shell to come up"
;; Check whether process is alive.
(tramp-set-process-query-on-exit-flag p nil)
(tramp-barf-if-no-shell-prompt
p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell))
p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)
;; Now do all the connections as specified.
(while target-alist
(let* ((hop (car target-alist))
(l-method (tramp-file-name-method hop))
(l-user (tramp-file-name-user hop))
(l-host (tramp-file-name-host hop))
(l-port nil)
(login-program
(tramp-get-method-parameter l-method 'tramp-login-program))
(login-args
(tramp-get-method-parameter l-method 'tramp-login-args))
(gw-args
(tramp-get-method-parameter l-method 'tramp-gw-args))
(gw (tramp-get-file-property hop "" "gateway" nil))
(g-method (and gw (tramp-file-name-method gw)))
(g-user (and gw (tramp-file-name-user gw)))
(g-host (and gw (tramp-file-name-host gw)))
(command login-program)
;; We don't create the temporary file. In fact, it
;; is just a prefix for the ControlPath option of
;; ssh; the real temporary file has another name, and
;; it is created and protected by ssh. It is also
;; removed by ssh, when the connection is closed.
(tmpfile
(tramp-set-connection-property
p "temp-file"
(make-temp-name
(expand-file-name
tramp-temp-name-prefix
(tramp-compat-temporary-file-directory)))))
spec)
;; Now do all the connections as specified.
(while target-alist
(let* ((hop (car target-alist))
(l-method (tramp-file-name-method hop))
(l-user (tramp-file-name-user hop))
(l-host (tramp-file-name-host hop))
(l-port nil)
(login-program
(tramp-get-method-parameter
l-method 'tramp-login-program))
(login-args
(tramp-get-method-parameter l-method 'tramp-login-args))
(async-args
(tramp-get-method-parameter l-method 'tramp-async-args))
(gw-args
(tramp-get-method-parameter l-method 'tramp-gw-args))
(gw (tramp-get-file-property hop "" "gateway" nil))
(g-method (and gw (tramp-file-name-method gw)))
(g-user (and gw (tramp-file-name-user gw)))
(g-host (and gw (tramp-file-name-host gw)))
(command login-program)
;; We don't create the temporary file. In fact,
;; it is just a prefix for the ControlPath option
;; of ssh; the real temporary file has another
;; name, and it is created and protected by ssh.
;; It is also removed by ssh, when the connection
;; is closed.
(tmpfile
(tramp-set-connection-property
p "temp-file"
(make-temp-name
(expand-file-name
tramp-temp-name-prefix
(tramp-compat-temporary-file-directory)))))
spec)
;; Add gateway arguments if necessary.
(when (and gw gw-args)
(setq login-args (append login-args gw-args)))
;; Add arguments for asynchrononous processes.
(when (and process-name async-args)
(setq login-args (append login-args async-args)))
;; Check for port number. Until now, there's no need
;; for handling like method, user, host.
(when (string-match tramp-host-with-port-regexp l-host)
;; Add gateway arguments if necessary.
(when (and gw gw-args)
(setq login-args (append login-args gw-args)))
;; Check for port number. Until now, there's no need
;; for handling like method, user, host.
(when (string-match tramp-host-with-port-regexp l-host)
(setq l-port (match-string 2 l-host)
l-host (match-string 1 l-host)))
;; Set variables for computing the prompt for reading
;; password. They can also be derived from a gateway.
(setq tramp-current-method (or g-method l-method)
tramp-current-user (or g-user l-user)
tramp-current-host (or g-host l-host))
;; Set variables for computing the prompt for reading
;; password. They can also be derived from a gateway.
(setq tramp-current-method (or g-method l-method)
tramp-current-user (or g-user l-user)
tramp-current-host (or g-host l-host))
;; Replace login-args place holders.
(setq
l-host (or l-host "")
l-user (or l-user "")
l-port (or l-port "")
spec (format-spec-make ?h l-host ?u l-user ?p l-port ?t tmpfile)
command
(concat
;; We do not want to see the trailing local prompt in
;; `start-file-process'.
(unless (memq system-type '(windows-nt)) "exec ")
command " "
(mapconcat
(lambda (x)
(setq x (mapcar (lambda (y) (format-spec y spec)) x))
(unless (member "" x) (mapconcat 'identity x " ")))
login-args " ")
;; Local shell could be a Windows COMSPEC. It doesn't
;; know the ";" syntax, but we must exit always for
;; `start-file-process'. "exec" does not work either.
(if (memq system-type '(windows-nt)) " && exit || exit")))
;; Replace login-args place holders.
(setq
l-host (or l-host "")
l-user (or l-user "")
l-port (or l-port "")
spec (format-spec-make
?h l-host ?u l-user ?p l-port ?t tmpfile)
command
(concat
;; We do not want to see the trailing local prompt in
;; `start-file-process'.
(unless (memq system-type '(windows-nt)) "exec ")
command " "
(mapconcat
(lambda (x)
(setq x (mapcar (lambda (y) (format-spec y spec)) x))
(unless (member "" x) (mapconcat 'identity x " ")))
login-args " ")
;; Local shell could be a Windows COMSPEC. It
;; doesn't know the ";" syntax, but we must exit
;; always for `start-file-process'. "exec" does not
;; work either.
(if (memq system-type '(windows-nt)) " && exit || exit")))
;; Send the command.
(tramp-message vec 3 "Sending command `%s'" command)
(tramp-send-command vec command t t)
(tramp-process-actions p vec tramp-actions-before-shell 60)
(tramp-message vec 3 "Found remote shell prompt on `%s'" l-host))
;; Next hop.
(setq target-alist (cdr target-alist)))
;; Send the command.
(tramp-message vec 3 "Sending command `%s'" command)
(tramp-send-command vec command t t)
(tramp-process-actions p vec tramp-actions-before-shell 60)
(tramp-message
vec 3 "Found remote shell prompt on `%s'" l-host))
;; Next hop.
(setq target-alist (cdr target-alist)))
;; Make initial shell settings.
(tramp-open-connection-setup-interactive-shell p vec))))))
;; Make initial shell settings.
(tramp-open-connection-setup-interactive-shell p vec)))))))
(defun tramp-send-command (vec command &optional neveropen nooutput)
"Send the COMMAND to connection VEC.

View file

@ -404,6 +404,7 @@ reference.")
(define-key map "\M-}" 'nxml-forward-paragraph)
(define-key map "\M-h" 'nxml-mark-paragraph)
(define-key map "\C-c\C-f" 'nxml-finish-element)
(define-key map "\C-c/" 'nxml-finish-element)
(define-key map "\C-c\C-m" 'nxml-split-element)
(define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block)
(define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline)

View file

@ -105,7 +105,7 @@ remove incorrect ones from the cache."
(defun password-cache-remove (key)
"Remove password indexed by KEY from password cache.
This is typically run be a timer setup from `password-cache-add',
This is typically run by a timer setup from `password-cache-add',
but can be invoked at any time to forcefully remove passwords
from the cache. This may be useful when it has been detected
that a password is invalid, so that `password-read' query the

View file

@ -2245,50 +2245,50 @@ comment at the start of cc-engine.el for more info."
(setq cnt (1- cnt)))))
(point)))
(defun c-state-balance-parens-backwards (here top)
;; Return the position of the opening paren/brace/bracket before HERE which
;; matches the outermost close p/b/b between HERE and TOP, like this:
(defun c-state-balance-parens-backwards (here- here+ top)
;; Return the position of the opening paren/brace/bracket before HERE- which
;; matches the outermost close p/b/b between HERE+ and TOP. Except when
;; there's a macro, HERE- and HERE+ are the same. Like this:
;;
;; ......................................
;; | |
;; ( [ ( ........... ) ( ) ] )
;; ^ ^ ^
;; | | |
;; return HERE TOP
;; ............................................
;; | |
;; ( [ ( .........#macro.. ) ( ) ] )
;; ^ ^ ^ ^
;; | | | |
;; return HERE- HERE+ TOP
;;
;; If there aren't enough opening paren/brace/brackets, return the position
;; of the outermost one found, or HERE it there are none. If there are no
;; closeing p/b/bs between HERE and TOP, return HERE. HERE and TOP must not
;; be inside literals. Only the accessible portion of the buffer will be
;; scanned.
;; of the outermost one found, or HERE- if there are none. If there are no
;; closeing p/b/bs between HERE+ and TOP, return HERE-. HERE-/+ and TOP
;; must not be inside literals. Only the accessible portion of the buffer
;; will be scanned.
;; PART 1: scan from `here' up to `top', accumulating ")"s which enclose
;; `here'. Go round the next loop each time we pass over such a ")". These
;; probably match "("s before `here'.
;; PART 1: scan from `here+' up to `top', accumulating ")"s which enclose
;; `here'. Go round the next loop each time we pass over such a ")". These
;; probably match "("s before `here-'.
(let (pos pa ren+1 lonely-rens)
(save-excursion
(save-restriction
(narrow-to-region (point-min) top) ; This can move point, sometimes.
(setq pos here)
(setq pos here+)
(c-safe
(while
(setq ren+1 (scan-lists pos 1 1)) ; might signal
(setq lonely-rens (cons ren+1 lonely-rens)
pos ren+1)))))
;; PART 2: Scan back before `here' searching for the "("s
;; PART 2: Scan back before `here-' searching for the "("s
;; matching/mismatching the ")"s found above. We only need to direct the
;; caller to scan when we've encountered unmatched right parens.
(when lonely-rens
(setq pos here)
(c-safe
(while
(and lonely-rens ; actual values aren't used.
(setq pa (scan-lists pos -1 1)))
(setq pos pa)
(setq lonely-rens (cdr lonely-rens)))) ;)
)
pos))
(setq pos here-)
(when lonely-rens
(c-safe
(while
(and lonely-rens ; actual values aren't used.
(setq pa (scan-lists pos -1 1)))
(setq pos pa)
(setq lonely-rens (cdr lonely-rens)))))
pos))
(defun c-parse-state-get-strategy (here good-pos)
;; Determine the scanning strategy for adjusting `c-parse-state', attempting
@ -2746,6 +2746,7 @@ comment at the start of cc-engine.el for more info."
lit ; (START . END) of a literal containing some point.
here-lit-start here-lit-end ; bounds of literal containing `here'
; or `here' itself.
here- here+ ; start/end of macro around HERE, or HERE
(here-bol (c-point 'bol here))
(too-far-back (max (- here c-state-cache-too-far) 1)))
@ -2758,57 +2759,73 @@ comment at the start of cc-engine.el for more info."
;; At this stage, (> pos here);
;; (< (c-state-cache-top-lparen) here) (or is nil).
;; CASE 1: The top of the cache is a brace pair which now encloses `here'.
;; As good-pos, return the address. of the "{".
(if (and (consp (car c-state-cache))
(> (cdar c-state-cache) here))
;; Since we've no knowledge of what's inside these braces, we have no
;; alternative but to direct the caller to scan the buffer from the
;; opening brace.
(progn
(setq pos (caar c-state-cache))
(setcar c-state-cache pos)
(list (1+ pos) pos t)) ; return value. We've just converted a brace
; pair entry into a { entry, so the caller
; needs to search for a brace pair before the
; {.
(cond
((and (consp (car c-state-cache))
(> (cdar c-state-cache) here))
;; CASE 1: The top of the cache is a brace pair which now encloses
;; `here'. As good-pos, return the address. of the "{". Since we've no
;; knowledge of what's inside these braces, we have no alternative but
;; to direct the caller to scan the buffer from the opening brace.
(setq pos (caar c-state-cache))
(setcar c-state-cache pos)
(list (1+ pos) pos t)) ; return value. We've just converted a brace pair
; entry into a { entry, so the caller needs to
; search for a brace pair before the {.
;; ;; `here' might be inside a literal. Check for this.
(setq lit (c-state-literal-at here)
here-lit-start (or (car lit) here)
here-lit-end (or (cdr lit) here))
;; `here' might be inside a literal. Check for this.
((progn
(setq lit (c-state-literal-at here)
here-lit-start (or (car lit) here)
here-lit-end (or (cdr lit) here))
;; Has `here' just "newly entered" a macro?
(save-excursion
(goto-char here-lit-start)
(if (and (c-beginning-of-macro)
(or (null c-state-old-cpp-beg)
(not (= (point) c-state-old-cpp-beg))))
(progn
(setq here- (point))
(c-end-of-macro)
(setq here+ (point)))
(setq here- here-lit-start
here+ here-lit-end)))
;; `here' might be nested inside any depth of parens (or brackets but
;; not braces). Scan backwards to find the outermost such opening
;; paren, if there is one. This will be the scan position to return.
(save-restriction
(narrow-to-region cache-pos (point-max))
(setq pos (c-state-balance-parens-backwards here-lit-end pos)))
;; `here' might be nested inside any depth of parens (or brackets but
;; not braces). Scan backwards to find the outermost such opening
;; paren, if there is one. This will be the scan position to return.
(save-restriction
(narrow-to-region cache-pos (point-max))
(setq pos (c-state-balance-parens-backwards here- here+ pos)))
nil)) ; for the cond
(if (< pos here-lit-start)
;; CASE 2: Address of outermost ( or [ which now encloses `here',
;; but didn't enclose the (previous) `c-state-cache-good-pos'. If
;; there is a brace pair preceding this, it will already be in
;; `c-state-cache', unless there was a brace pair after it,
;; i.e. there'll only be one to scan for if we've just deleted one.
(list pos (and dropped-cons pos) t) ; Return value.
((< pos here-lit-start)
;; CASE 2: Address of outermost ( or [ which now encloses `here', but
;; didn't enclose the (previous) `c-state-cache-good-pos'. If there is
;; a brace pair preceding this, it will already be in `c-state-cache',
;; unless there was a brace pair after it, i.e. there'll only be one to
;; scan for if we've just deleted one.
(list pos (and dropped-cons pos) t)) ; Return value.
;; `here' isn't enclosed in a (previously unrecorded) bracket/paren.
;; Further forward scanning isn't needed, but we still need to find a
;; GOOD-POS. Step out of all enclosing "("s on HERE's line.
;; `here' isn't enclosed in a (previously unrecorded) bracket/paren.
;; Further forward scanning isn't needed, but we still need to find a
;; GOOD-POS. Step out of all enclosing "("s on HERE's line.
((progn
(save-restriction
(narrow-to-region here-bol (point-max))
(setq pos here-lit-start)
(c-safe (while (setq pa (scan-lists pos -1 1))
(setq pos pa)))) ; might signal
(if (setq ren (c-safe-scan-lists pos -1 -1 too-far-back))
;; CASE 3: After a }/)/] before `here''s BOL.
(list (1+ ren) (and dropped-cons pos) nil) ; Return value
nil)) ; for the cond
;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of
;; literal containing it.
(setq good-pos (c-state-lit-beg (c-point 'bopl here-bol)))
(list good-pos (and dropped-cons good-pos) nil))))))
((setq ren (c-safe-scan-lists pos -1 -1 too-far-back))
;; CASE 3: After a }/)/] before `here''s BOL.
(list (1+ ren) (and dropped-cons pos) nil)) ; Return value
(t
;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of
;; literal containing it.
(setq good-pos (c-state-lit-beg (c-point 'bopl here-bol)))
(list good-pos (and dropped-cons good-pos) nil)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View file

@ -1008,7 +1008,7 @@ Set subexpression 1 in the match-data to the name of the type."
:regexp "\\(?:[^[:word:]_`]\\|^\\)\\(`?[[:word:]_]+\\)[^[:word:]_]*")
;;;###autoload
(defun f90-mode ()
(define-derived-mode f90-mode prog-mode "F90"
"Major mode for editing Fortran 90,95 code in free format.
For fixed format code, use `fortran-mode'.
@ -1065,13 +1065,9 @@ Variables controlling indentation style and extra features:
Turning on F90 mode calls the value of the variable `f90-mode-hook'
with no args, if that value is non-nil."
(interactive)
(kill-all-local-variables)
(setq major-mode 'f90-mode
mode-name "F90"
local-abbrev-table f90-mode-abbrev-table)
(set-syntax-table f90-mode-syntax-table)
(use-local-map f90-mode-map)
:group 'f90
:syntax-table f90-mode-syntax-table
:abbrev-table f90-mode-abbrev-table
(set (make-local-variable 'indent-line-function) 'f90-indent-line)
(set (make-local-variable 'indent-region-function) 'f90-indent-region)
(set (make-local-variable 'require-final-newline) mode-require-final-newline)
@ -1094,8 +1090,7 @@ with no args, if that value is non-nil."
'f90-beginning-of-subprogram)
(set (make-local-variable 'end-of-defun-function) 'f90-end-of-subprogram)
(set (make-local-variable 'add-log-current-defun-function)
#'f90-current-defun)
(run-mode-hooks 'f90-mode-hook))
#'f90-current-defun))
;; Inline-functions.

View file

@ -778,7 +778,7 @@ Used in the Fortran entry in `hs-special-modes-alist'.")
;;;###autoload
(defun fortran-mode ()
(define-derived-mode fortran-mode prog-mode "Fortran"
"Major mode for editing Fortran code in fixed format.
For free format code, use `f90-mode'.
@ -848,13 +848,9 @@ Variables controlling indentation style and extra features:
Turning on Fortran mode calls the value of the variable `fortran-mode-hook'
with no args, if that value is non-nil."
(interactive)
(kill-all-local-variables)
(setq major-mode 'fortran-mode
mode-name "Fortran"
local-abbrev-table fortran-mode-abbrev-table)
(set-syntax-table fortran-mode-syntax-table)
(use-local-map fortran-mode-map)
:group 'fortran
:syntax-table fortran-mode-syntax-table
:abbrev-table fortran-mode-abbrev-table
(set (make-local-variable 'indent-line-function) 'fortran-indent-line)
(set (make-local-variable 'indent-region-function)
(lambda (start end)
@ -906,8 +902,7 @@ with no args, if that value is non-nil."
#'fortran-current-defun)
(set (make-local-variable 'dabbrev-case-fold-search) 'case-fold-search)
(set (make-local-variable 'gud-find-expr-function) 'fortran-gud-find-expr)
(add-hook 'hack-local-variables-hook 'fortran-hack-local-variables nil t)
(run-mode-hooks 'fortran-mode-hook))
(add-hook 'hack-local-variables-hook 'fortran-hack-local-variables nil t))
(defun fortran-line-length (nchars &optional global)

View file

@ -781,12 +781,17 @@ substitution string. Note dynamic scoping of variables.")
(file-name-nondirectory bn)))
(default-alias
(and fn
(let ((aliases grep-files-aliases)
(let ((aliases (remove (assoc "all" grep-files-aliases)
grep-files-aliases))
alias)
(while aliases
(setq alias (car aliases)
aliases (cdr aliases))
(if (string-match (wildcard-to-regexp (cdr alias)) fn)
(if (string-match (mapconcat
'wildcard-to-regexp
(split-string (cdr alias) nil t)
"\\|")
fn)
(setq aliases nil)
(setq alias nil)))
(cdr alias))))

View file

@ -214,6 +214,7 @@ parenthetical grouping.")
(define-key map "\C-c\M-\C-d" 'octave-down-block)
(define-key map "\C-c\M-\C-h" 'octave-mark-block)
(define-key map "\C-c]" 'octave-close-block)
(define-key map "\C-c/" 'octave-close-block)
(define-key map "\C-c\C-f" 'octave-insert-defun)
(define-key map "\C-c\C-h" 'octave-help)
(define-key map "\C-c\C-il" 'octave-send-line)

View file

@ -76,7 +76,7 @@
;; the old `c-forward-into-nomenclature' originally contributed by
;; Terry_Glanfield dot Southern at rxuk dot xerox dot com.
;; TODO: ispell-word and subword oriented C-w in isearch.
;; TODO: ispell-word.
;;; Code:

View file

@ -1980,6 +1980,9 @@ make, or the user didn't cancel the call."
(isearch-regexp regexp)
(search-whitespace-regexp nil)
(isearch-case-fold-search case-fold))
;; Set isearch-word to nil because word-replace is regexp-based,
;; so `isearch-search-fun' should not use `word-search-forward'.
(if (and isearch-word isearch-regexp) (setq isearch-word nil))
(isearch-lazy-highlight-new-loop range-beg range-end))))
(defun replace-dehighlight ()

View file

@ -4539,6 +4539,9 @@ rests."
(let ((goal-column 0)
(line-move-visual nil))
(and (line-move arg t)
;; With bidi reordering, we may not be at bol,
;; so make sure we are.
(skip-chars-backward "^\n")
(not (bobp))
(progn
(while (and (not (bobp)) (invisible-p (1- (point))))

View file

@ -457,8 +457,8 @@ BUF contains a plain diff between match-1 and match-3."
(defun smerge-resolve (&optional safe)
"Resolve the conflict at point intelligently.
This relies on mode-specific knowledge and thus only works in
some major modes. Uses `smerge-resolve-function' to do the actual work."
This relies on mode-specific knowledge and thus only works in some
major modes. Uses `smerge-resolve-function' to do the actual work."
(interactive)
(smerge-match-conflict)
(smerge-remove-props (match-beginning 0) (match-end 0))
@ -815,12 +815,12 @@ Its behavior has mainly two restrictions:
This only matters if `smerge-refine-weight-hack' is nil.")
(defvar smerge-refine-ignore-whitespace t
"If non-nil,Indicate that smerge-refine should try to ignore change in whitespace.")
"If non-nil, indicate that `smerge-refine' should try to ignore change in whitespace.")
(defvar smerge-refine-weight-hack t
"If non-nil, pass to diff as many lines as there are chars in the region.
I.e. each atomic element (e.g. word) will be copied as many times (on different
lines) as it has chars. This has 2 advantages:
lines) as it has chars. This has two advantages:
- if `diff' tries to minimize the number *lines* (rather than chars)
added/removed, this adjust the weights so that adding/removing long
symbols is considered correspondingly more costly.
@ -919,8 +919,8 @@ chars to try and eliminate some spurious differences."
"Show fine differences in the two regions BEG1..END1 and BEG2..END2.
PROPS is an alist of properties to put (via overlays) on the changes.
If non-nil, PREPROC is called with no argument in a buffer that contains
a copy of a region, just before preparing it to for `diff'. It can be used to
replace chars to try and eliminate some spurious differences."
a copy of a region, just before preparing it to for `diff'. It can be
used to replace chars to try and eliminate some spurious differences."
(let* ((buf (current-buffer))
(pos (point))
(file1 (make-temp-file "diff1"))
@ -988,9 +988,9 @@ replace chars to try and eliminate some spurious differences."
(defun smerge-refine (&optional part)
"Highlight the words of the conflict that are different.
For 3-way conflicts, highlights only 2 of the 3 parts.
A numeric argument PART can be used to specify which 2 parts;
repeating the command will highlight other 2 parts."
For 3-way conflicts, highlights only two of the three parts.
A numeric argument PART can be used to specify which two parts;
repeating the command will highlight other two parts."
(interactive
(if (integerp current-prefix-arg) (list current-prefix-arg)
(smerge-match-conflict)
@ -1161,7 +1161,7 @@ buffer names."
(defun smerge-makeup-conflict (pt1 pt2 pt3 &optional pt4)
"Insert diff3 markers to make a new conflict.
Uses point and mark for 2 of the relevant positions and previous marks
Uses point and mark for two of the relevant positions and previous marks
for the other ones.
By default, makes up a 2-way conflict,
with a \\[universal-argument] prefix, makes up a 3-way conflict."
@ -1184,7 +1184,7 @@ with a \\[universal-argument] prefix, makes up a 3-way conflict."
(insert "<<<<<<< MINE\n"))
(if smerge-mode nil (smerge-mode 1))
(smerge-refine))
(defconst smerge-parsep-re
(concat smerge-begin-re "\\|" smerge-end-re "\\|"

View file

@ -1169,7 +1169,8 @@ These are the commands available for use in the file status buffer:
nil t nil nil)))))
(unless backend
(setq backend (vc-responsible-backend dir)))
(pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend))
(let (pop-up-windows) ; based on cvs-examine; bug#6204
(pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend)))
(if (derived-mode-p 'vc-dir-mode)
(vc-dir-refresh)
;; FIXME: find a better way to pass the backend to `vc-dir-mode'.

View file

@ -121,8 +121,8 @@ while [ $# -gt 0 ]; do
done
### Make sure we're running in the right place.
if [ ! -d src -o ! -f src/lisp.h -o ! -d lisp -o ! -f lisp/version.el ]; then
echo "${progname}: Can't find \`src/lisp.h' and \`lisp/version.el'." >&2
if [ ! -d src -o ! -f src/lisp.h -o ! -d lisp -o ! -f lisp/subr.el ]; then
echo "${progname}: Can't find \`src/lisp.h' and \`lisp/subr.el'." >&2
echo "${progname} must be run in the top directory of the Emacs" >&2
echo "distribution tree. cd to that directory and try again." >&2
exit 1
@ -150,12 +150,12 @@ then
fi
### Find out which version of Emacs this is.
shortversion=`grep 'defconst[ ]*emacs-version' lisp/version.el \
shortversion=`grep 'char emacs_version' src/emacs.c \
| sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/'`
version=`grep 'defconst[ ]*emacs-version' lisp/version.el \
version=`grep 'char emacs_version' src/emacs.c \
| sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'`
if [ ! "${version}" ]; then
echo "${progname}: can't find current Emacs version in \`./lisp/version.el'" >&2
echo "${progname}: can't find current Emacs version in \`./src/emacs.c'" >&2
exit 1
fi
@ -440,6 +440,7 @@ echo "Making links to \`src'"
ln [a-zA-Z]*.h ../${tempdir}/src
ln [a-zA-Z]*.m ../${tempdir}/src
ln [a-zA-Z]*.in ../${tempdir}/src
ln [a-zA-Z]*.mk ../${tempdir}/src
## If we ended up with a symlink, or if we did not get anything
## due to a cross-device symlink, copy the file.
for file in [a-zA-Z]*.[hcs] [a-zA-Z]*.in; do

View file

@ -1,3 +1,24 @@
2010-05-21 Glenn Morris <rgm@gnu.org>
* sed1v2.inp(@ns_frag@): Edit to nothing.
* sed1x.inp (OLDXMENU): Replace any initial value.
* sed1v2.inp (OLDXMENU): Edit to "nothing".
* sed1v2.inp (CANNOT_DUMP): Edit to no.
2010-05-20 Glenn Morris <rgm@gnu.org>
* sed1v2.inp (DEPFLAGS, deps_frag): Edit to empty.
(MKDEPDIR): Edit to ':'.
2010-05-19 Glenn Morris <rgm@gnu.org>
* sed2v2.inp (ORDINARY_LINK): Set here rather than in s/msdos.h.
* sed1v2.inp (LD): Edit to $(CC).
(YMF_PASS_LDFLAGS): Edit to `flags'.
2010-05-18 Eli Zaretskii <eliz@gnu.org>
* sed1x.inp: Add copyright notice.

View file

@ -68,10 +68,10 @@ top_srcdir := $(subst \,/,$(shell cd))
version := ${shell sed -n -e '/(defconst emacs-version/s/^[^"]*\("[^"]*"\).*/\1/p' lisp/version.el}
# Q: Do we need to bootstrap?
# A: Only if we find admin/admin.el, i.e. we are building out of CVS,
# and src/b-emacs.exe does not exist. This avoids building a
# bootstrap-emacs and recompiling Lisp files when building a
# pretest/release tarball.
# A: Only if we find admin/admin.el, i.e. we are building out of
# a VCS-checkout (not a release) and src/b-emacs.exe does not exist.
# This avoids building a bootstrap-emacs and recompiling Lisp files
# when building a pretest/release tarball.
boot :=
ifneq ($(wildcard admin/admin.el),)
ifeq ($(wildcard src/b-emacs.exe),)

View file

@ -55,6 +55,7 @@ s/\.h\.in/.h-in/
/^TEMACS_LDFLAGS2 *=/s/@TEMACS_LDFLAGS2@/$(LDFLAGS)/
/^LIBS_SYSTEM *=/s/@LIBS_SYSTEM@//
/^LIB_GCC *=/s/@LIB_GCC@/-Lgcc/
/^LD *=/s/@LINKER@/$(CC)/
/^LIB_STANDARD *=/s/@LIB_STANDARD@//
/^LIB_MATH *=/s/@LIB_MATH@/-lm/
/^LIBTIFF *=/s/@LIBTIFF@//
@ -113,7 +114,7 @@ s/\.h\.in/.h-in/
/^WINDOW_SUPPORT *=/s/@WINDOW_SUPPORT@//
/^LIBGPM *=/s/@LIBGPM@//
/^EXEEXT *=/s/@EXEEXT@/.exe/
/^OLDXMENU *=/s/@OLDXMENU@//
/^OLDXMENU *=/s/@OLDXMENU@/nothing/
/^LIBXMENU *=/s/@LIBXMENU@//
/^LIBX_OTHER *=/s/@LIBX_OTHER@//
/^GMALLOC_OBJ *=/s/@GMALLOC_OBJ@/gmalloc.o/
@ -122,6 +123,9 @@ s/\.h\.in/.h-in/
/^PRE_ALLOC_OBJ *=/s/@PRE_ALLOC_OBJ@/lastfile.o/
/^POST_ALLOC_OBJ *=/s/@POST_ALLOC_OBJ@/$(vmlimitobj)/
/^UNEXEC_OBJ *=/s/@unexec@/unexec.o/
/^CANNOT_DUMP *=/s/@cannot_dump@/no/
/^DEPFLAGS *=/s/@DEPFLAGS@//
/^MKDEPDIR *=/s/@MKDEPDIR@/:/
/^version *=/s/@[^@\n]*@//
/^M_FILE *=/s!@[^@\n]*@!m/intel386.h!
/^S_FILE *=/s!@[^@\n]*@!s/msdos.h!
@ -143,6 +147,9 @@ s/\.h\.in/.h-in/
/^ @: /d
/^ -\{0,1\}ln -/s/ln -f/cp -pf/
/^[ ]touch /s/touch/djecho $@ >/
s/@YMF_PASS_LDFLAGS@/flags/
s/@deps_frag@//
s/@ns_frag@//
s/bootstrap-emacs/b-emacs/
s/bootstrap-temacs/b-temacs/
s/bootstrap-doc/b-doc/

View file

@ -19,7 +19,7 @@
s!^ cd \${oldXMenudir}; \${MAKE}.*$! ${MAKE} -C ${oldXMenudir}.!
s!^ @true *$! @rem!
s/DOC/DOC-X/g
/^OLDXMENU *=/s!= *!= ${oldXMenudir}libXMenu11.a!
/^OLDXMENU *=/s!=.*!= ${oldXMenudir}libXMenu11.a!
/^LIBXMENU *=/s!= *!= ${OLDXMENU}!
/^LIBX_OTHER *=/s!= *!= ${LIBXT} ${LIBX_EXTRA}!
/^OLDXMENU_TARGET *=/s!= *!= really-oldxmenu!

View file

@ -52,6 +52,7 @@
/^#undef HAVE_MKSTEMP *$/s/^.*$/#define HAVE_MKSTEMP 1/
/^#undef HAVE_STRUCT_TM_TM_ZONE *$/s/^.*$/#define HAVE_STRUCT_TM_TM_ZONE 1/
/^#undef HAVE_SYNC *$/s/^.*$/#define HAVE_SYNC 1/
/^#undef ORDINARY_LINK/s/^.*$/#define ORDINARY_LINK 1/
/^#undef PACKAGE_BUGREPORT/s/^.*$/#define PACKAGE_BUGREPORT ""/
/^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/
/^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/

View file

@ -616,7 +616,7 @@ Pretty print all glyphs in it->glyph_row.
end
define prowlims
printf "start=%d,end=%d,reversed=%d,cont=%d,at_zv=%d\n", $arg0->start.pos.charpos, $arg0->end.pos.charpos, $arg0->reversed_p, $arg0->continued_p, $arg0->ends_at_zv_p
printf "edges=(%d,%d),r2l=%d,cont=%d,trunc=(%d,%d),at_zv=%d\n", $arg0->minpos.charpos, $arg0->maxpos.charpos, $arg0->reversed_p, $arg0->continued_p, $arg0->truncated_on_left_p, $arg0->truncated_on_right_p, $arg0->ends_at_zv_p
end
document prowlims
Print important attributes of a glyph_row structure.
@ -626,10 +626,13 @@ end
define pmtxrows
set $mtx = $arg0
set $gl = $mtx->rows
set $glend = $mtx->rows + $mtx->nrows
set $glend = $mtx->rows + $mtx->nrows - 1
set $i = 0
while ($gl < $glend)
printf "%d: ", $i
prowlims $gl
set $gl = $gl + 1
set $i = $i + 1
end
end
document pmtxrows

View file

@ -21,6 +21,139 @@
is at the last character of the current grapheme cluster when
CMP_IT->reversed_p is nonzero.
2010-05-24 Stefan Monnier <monnier@iro.umontreal.ca>
* process.c (Fmake_network_process): Set :host to nil if it's not used.
Suggested by Masatake YAMATO <yamato@redhat.com>.
2010-05-23 Eli Zaretskii <eliz@gnu.org>
* dispextern.h (init_iterator): Sync prototype with changed
definition.
2010-05-19 Eli Zaretskii <eliz@gnu.org>
Redesign and reimplement bidi-aware edge positions of glyph rows.
* dispextern.h (struct glyph_row): New members minpos and maxpos.
(MATRIX_ROW_START_CHARPOS, MATRIX_ROW_START_BYTEPOS)
(MATRIX_ROW_END_CHARPOS, MATRIX_ROW_END_BYTEPOS): Reference minpos
and maxpos members instead of start.pos and end.pos, respectively.
* xdisp.c (display_line): Compare IT_CHARPOS with the position in
row->start.pos, rather than with MATRIX_ROW_START_CHARPOS.
(cursor_row_p): Use row->end.pos rather than MATRIX_ROW_END_CHARPOS.
(try_window_reusing_current_matrix, try_window_id):
Use ROW->minpos rather than ROW->start.pos.
(init_from_display_pos, init_iterator): Use EMACS_INT for
character and byte positions.
(find_row_edges): Rename from find_row_end. Accept additional
arguments for minimum and maximum buffer positions seen by
display_line for this row. Don't use iterator to find the
position following the maximum one; instead, increment the
position found by display_line directly. Fix logic; eol_pos
should be tested before the rest. Handle the case of characters
delivered from display vector (bug#6036). Fix tests related to
it->method. Handle the truncated_on_right_p rows.
(RECORD_MAX_MIN_POS): New macro.
(display_line): Use it to record the minimum and maximum buffer
positions for glyphs in the row being assembled. Record the
position of the newline that terminates the line. If word wrap is
in effect, restore minimum and maximum positions seen up to the
wrap point, when iterator returns to it.
(try_window_reusing_current_matrix): Give up if in bidi-reordered
row and cursor not already at point. Restore original pre-bidi
code for unidirectional buffers.
* dispnew.c (increment_row_positions, check_matrix_invariants):
Increment and check row->start.pos and row->end.pos, in addition
to MATRIX_ROW_START_CHARPOS and MATRIX_ROW_END_CHARPOS.
* .gdbinit (prowlims): Display row->minpos and row->maxpos.
Display truncated_on_left_p and truncated_on_right_p flags.
Formatting fixes.
(pmtxrows): Display the ordinal number of each row. Don't display
rows beyond the last one.
* bidi.c (bidi_cache_iterator_state): Don't zero out new_paragraph:
it is not copied by bidi_copy_it.
2010-05-22 Eli Zaretskii <eliz@gnu.org>
* w32.c (sys_write): Break writes into chunks smaller than 32MB.
(Bug#6237)
2010-05-22 Chong Yidong <cyd@stupidchicken.com>
* image.c (Fimage_flush): Rename from image-refresh.
2010-05-21 Chong Yidong <cyd@stupidchicken.com>
* xdisp.c (redisplay_internal): Clear caches even if redisplaying
just one window.
* image.c (Vimage_cache_eviction_delay): Decrease to 300.
(clear_image_cache): If the number of cached images is unusually
large, decrease the cache eviction delay (Bug#6230).
2010-05-21 Glenn Morris <rgm@gnu.org>
* Makefile.in (${ns_appdir}, ${ns_appbindir}Emacs, ns-app):
Move these rules to ns.mk.
* ns.mk: New file.
* Makefile.in (../src/$(OLDXMENU), $(OLDXMENU)): Always define rules.
* Makefile.in (CANNOT_DUMP): New, set by configure.
(emacs${EXEEXT}, bootstrap-emacs${EXEEXT}): Use $CANNOT_DUMP.
2010-05-20 Juri Linkov <juri@jurta.org>
* fileio.c (Fdelete_file): Change interative spec to use
`read-file-name' like in `find-file-read-args' where the default
value is `default-directory' instead of `buffer-file-name'.
http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00533.html
2010-05-20 Kevin Ryde <user42@zip.com.au>
* keyboard.c (Vlast_command, Vkeyboard_translate_table)
(Voverriding_terminal_local_map, Vsystem_key_alist)
(Vlocal_function_key_map): Fix manual link in docstring (Bug#6224).
2010-05-20 Glenn Morris <rgm@gnu.org>
* Makefile.in (DEPDIR): New constant.
(DEPFLAGS): Set with configure, not cpp.
(MKDEPDIR): New, set by configure.
(.c.o, .m.o, ecrt0.o): Use $MKDEPDIR.
(clean): Use $DEPDIR.
(deps_frag): Include from configure.
Move static/dynamic dependency stuff to deps.mk/autodeps.mk.
* deps.mk, autodeps.mk: New files, extracted from Makefile.in.
* bidi.c (bidi_cache_shrink, bidi_cache_iterator_state): Fix
reallocation of the cache. (Bug#6210)
2010-05-19 Glenn Morris <rgm@gnu.org>
* s/msdos.h (ORDINARY_LINK): Move to sed2v2.inp.
* Makefile.in (LD, YMF_PASS_LDFLAGS): Set with configure, not cpp.
(GNULIB_VAR): Remove.
(LIBES): Use LIB_GCC instead of GNULIB_VAR.
* m/ibms390x.h (LINKER):
* m/macppc.h (LINKER) [GNU_LINUX]:
* s/aix4-2.h (ORDINARY_LINK):
* s/cygwin.h (LINKER):
* s/darwin.h (ORDINARY_LINK):
* s/gnu.h (ORDINARY_LINK):
* s/netbsd.h (LINKER):
* s/usg5-4.h (ORDINARY_LINK):
Move to configure.
* s/aix4-2.h (LINKER): Remove; this file sets ORDINARY_LINK.
2010-05-18 Chong Yidong <cyd@stupidchicken.com>
* character.c (Fstring, Funibyte_string): Use SAFE_ALLOCA to
@ -120,6 +253,8 @@
* xdisp.c (Fcurrent_bidi_paragraph_direction): New function.
(syms_of_xdisp): Defsubr it.
* cmds.c (Fforward_char, Fbackward_char): Doc fix.
* Makefile.in: Fix MSDOS-related comments.
2010-05-15 Glenn Morris <rgm@gnu.org>

View file

@ -124,6 +124,8 @@ LIBS_SYSTEM=@LIBS_SYSTEM@
## Where to find libgcc.a, if using gcc and necessary.
LIB_GCC=@LIB_GCC@
LD=@LINKER@
## May use $CRT_DIR.
LIB_STANDARD=@LIB_STANDARD@
@ -171,13 +173,20 @@ LIBXTR6=@LIBXTR6@
## Only used if HAVE_X_WINDOWS.
LIBXT_OTHER=@LIBXT_OTHER@
## Only used if HAVE_X11 && !USE_GTK.
## really-lwlib if USE_X_TOOLKIT, else really-oldxmenu.
## If !HAVE_X11 || USE_GTK, empty.
## Else if USE_X_TOOLKIT really-lwlib, else really-oldxmenu.
OLDXMENU_TARGET=@OLDXMENU_TARGET@
## If !HAVE_X11 || USE_GTK, empty.
## Else if USE_X_TOOLKIT, ${lwlibdir}liblw.a.
## Else ${oldXMenudir}libXMenu11.a.
## (Actually, rather than being empty, it is set to "nothing".
## It is never actually used for anything in this case.
## This is done because there is a rule with target $(OLDXMENU) below,
## and I think it might be a syntax error with some makes to have
## an empty target, even if the associated rule is never run.
## http://lists.gnu.org/archive/html/help-make/2010-05/msg00058.html
## The alternative would be to put that rule in a makefile fragment.)
OLDXMENU=@OLDXMENU@
## If HAVE_X11 && !USE_GTK, ${OLDXMENU} ../src/${OLDXMENU}; else empty.
@ -282,16 +291,20 @@ START_FILES = @START_FILES@
UNEXEC_OBJ = @unexec@
CANNOT_DUMP=@cannot_dump@
DEPDIR=deps
## -MMD -MF ${DEPDIR}/$*.d if AUTO_DEPEND; else empty.
DEPFLAGS=@DEPFLAGS@
## test -d ${DEPDIR} || mkdir ${DEPDIR} (if AUTO_DEPEND); else ':'.
MKDEPDIR=@MKDEPDIR@
# ========================== start of cpp stuff =======================
/* From here on, comments must be done in C syntax. */
#define NOT_C_CODE
#include "config.h"
#ifdef AUTO_DEPEND
DEPFLAGS = -MMD -MF deps/$*.d
#endif
/* If NS_IMPL_GNUSTEP, some definitions and includes are expanded here. */
@NS_IMPL_GNUSTEP_INC@
@ -318,63 +331,13 @@ ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS)
.SUFFIXES: .m
.c.o:
#ifdef AUTO_DEPEND
@-test -d deps || mkdir deps
#endif
@$(MKDEPDIR)
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
.m.o:
#ifdef AUTO_DEPEND
@-test -d deps || mkdir deps
#endif
@$(MKDEPDIR)
$(CC) -c $(CPPFLAGS) $(ALL_OBJC_CFLAGS) $<
/* A macro which other sections of Makefile can redefine to munge the
flags before they are passed to LD. This is helpful if you have
redefined LD to something odd, like "gcc".
(The YMF prefix is a holdover from the old name "ymakefile".) */
#define YMF_PASS_LDFLAGS(flags) flags
#ifdef ORDINARY_LINK
LD = $(CC)
#else /* not ORDINARY_LINK */
GNULIB_VAR = $(LIB_GCC)
/* Fix linking if compiled with GCC. */
#if defined (__GNUC__) && ! defined (LINKER)
/* Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
places that are difficult to figure out at make time. Fortunately,
these same versions allow you to pass arbitrary flags on to the
linker, so there is no reason not to use it as a linker.
Well, it is not quite perfect. The "-nostdlib" keeps GCC from
searching for libraries in its internal directories, so we have to
ask GCC explicitly where to find libgcc.a. */
#define LINKER $(CC) -nostdlib
/* GCC passes any argument prefixed with -Xlinker directly to the linker.
See prefix-args.c for an explanation of why we do not do this with the
shell''s ``for'' construct. Note that sane people do not have '.' in
their paths, so we must use ./prefix-args. */
#undef YMF_PASS_LDFLAGS
#define YMF_PASS_LDFLAGS(flags) `./prefix-args -Xlinker flags`
#endif /* defined (__GNUC__) && ! defined (LINKER) */
#ifdef LINKER
LD=LINKER
#else /* not LINKER */
LD=ld
#endif /* not LINKER */
#endif /* not ORDINARY_LINK */
#ifdef NS_IMPL_GNUSTEP
LD=$(CC) -rdynamic
#endif
/* lastfile must follow all files whose initialized data areas should
be dumped as pure by dump-emacs. */
obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
@ -634,29 +597,29 @@ SOME_MACHINE_LISP = ../lisp/mouse.elc \
/* Construct full set of libraries to be linked.
Note that SunOS needs -lm to come before -lc; otherwise, you get
duplicated symbols. If the standard libraries were compiled
with GCC, we might need gnulib again after them. */
with GCC, we might need LIB_GCC again after them. */
LIBES = $(LOADLIBES) $(LIBS) $(LIBX_BASE) $(LIBX_OTHER) $(LIBSOUND) \
$(RSVG_LIBS) $(DBUS_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \
$(LIBS_TERMCAP) $(GETLOADAVG_LIBS) ${GCONF_LIBS} ${LIBSELINUX_LIBS} \
$(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
$(GNULIB_VAR) $(LIB_MATH) $(LIB_STANDARD) $(GNULIB_VAR)
$(LIB_GCC) $(LIB_MATH) $(LIB_STANDARD) $(LIB_GCC)
all: emacs${EXEEXT} $(OTHER_FILES)
/* Does anyone ever pay attention to the load-path-shadows output here? */
/* The dumped Emacs is as functional and more efficient than
bootstrap-emacs, so we replace the latter with the former. */
emacs${EXEEXT}: temacs${EXEEXT} ${etc}DOC ${lisp}
#ifdef CANNOT_DUMP
rm -f emacs${EXEEXT}
ln temacs${EXEEXT} emacs${EXEEXT}
-EMACSLOADPATH=${lispsource} ./emacs -q -batch -f list-load-path-shadows
#else
LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump
@: This new Emacs is as functional and more efficient then
@: bootstrap-emacs, so let us replace it.
-ln -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}
-./emacs -q -batch -f list-load-path-shadows
#endif /* ! defined (CANNOT_DUMP) */
if test "${CANNOT_DUMP}" = "yes"; then \
ln -f temacs${EXEEXT} emacs${EXEEXT}; \
EMACSLOADPATH=${lispsource} ./emacs -q -batch \
-f list-load-path-shadows || true; \
else \
LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump || exit 1; \
ln -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}; \
./emacs -q -batch -f list-load-path-shadows || true; \
fi
/* We run make-docfile twice because the command line may get too long
on some systems. */
@ -682,6 +645,8 @@ ${libsrc}make-docfile${EXEEXT}:
buildobj.h: Makefile
echo "#define BUILDOBJ \"${obj} ${otherobj} " "\"" > buildobj.h
#define YMF_PASS_LDFLAGS(flags) @YMF_PASS_LDFLAGS@
temacs${EXEEXT}: $(START_FILES) stamp-oldxmenu ${obj} ${otherobj} prefix-args${EXEEXT}
$(LD) YMF_PASS_LDFLAGS ( ${TEMACS_LDFLAGS} \
${NS_IMPL_GNUSTEP_TEMACS_LDFLAGS} ) \
@ -692,8 +657,9 @@ prefix-args${EXEEXT}: prefix-args.o $(config_h)
$(CC) $(LDFLAGS) prefix-args.o -o prefix-args
/* Only (possibly) used if HAVE_X11 && !USE_GTK, but no harm in always
defining. */
/* The following oldxmenu-related rules are only (possibly) used if
HAVE_X11 && !USE_GTK, but there is no harm in always defining them
(provided we take a little care that OLDXMENU is never empty). */
really-lwlib:
cd ${lwlibdir}; ${MAKE} ${MFLAGS} \
CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}'
@ -711,13 +677,10 @@ really-oldXMenu:
stamp-oldxmenu: ${OLDXMENU_DEPS}
touch stamp-oldxmenu
/* HAVE_X11 implies HAVE_X_WINDOWS and HAVE_MENUS. */
#if defined (HAVE_X11) && ! defined (USE_GTK)
/* Supply an ordering for parallel make. */
../src/$(OLDXMENU): ${OLDXMENU}
$(OLDXMENU): $(OLDXMENU_TARGET)
#endif /* HAVE_X11 && !USE_GTK */
../config.status:: epaths.in
@echo "The file epaths.h needs to be set up from epaths.in."
@ -730,278 +693,14 @@ $(OLDXMENU): $(OLDXMENU_TARGET)
exit 1
ecrt0.o: ecrt0.c $(config_h)
#ifdef AUTO_DEPEND
@-test -d deps || mkdir deps
#endif
@$(MKDEPDIR)
$(CC) -c $(ALL_CFLAGS) ${srcdir}/ecrt0.c
doc.o: buildobj.h
#ifndef AUTO_DEPEND
/* FIXME some of these dependencies are platform-specific.
Eg callproc.c only depends on w32.h for WINDOWSNT builds.
One way to fix this would be to replace w32.h (etc) by $(W32_H),
a variable set by configure. Does not seem worth the trouble.
Since the w32 build does not even use this file, you might ask
why these dependencies are here at all...
/* If HAVE_NS, some ns-specific rules (for OTHER_FILES) are inserted here. */
@ns_frag@
nsgui.h: In fact, every .o file depends directly or indirectly on
dispextern.h and hence nsgui.h under NS. But the ones that actually
use stuff there are more limited. */
atimer.o: atimer.c atimer.h syssignal.h systime.h lisp.h blockinput.h \
$(config_h)
bidi.o: bidi.c buffer.h character.h dispextern.h lisp.h $(config_h)
buffer.o: buffer.c buffer.h region-cache.h commands.h window.h \
$(INTERVALS_H) blockinput.h atimer.h systime.h character.h \
indent.h keyboard.h coding.h keymap.h frame.h lisp.h $(config_h)
callint.o: callint.c window.h commands.h buffer.h keymap.h \
keyboard.h dispextern.h systime.h coding.h composite.h lisp.h $(config_h)
callproc.o: callproc.c epaths.h buffer.h commands.h lisp.h $(config_h) \
process.h systty.h syssignal.h character.h coding.h ccl.h msdos.h \
composite.h w32.h blockinput.h atimer.h systime.h frame.h termhooks.h \
buffer.h
casefiddle.o: casefiddle.c syntax.h commands.h buffer.h character.h \
composite.h keymap.h lisp.h $(config_h)
casetab.o: casetab.c buffer.h character.h lisp.h $(config_h)
category.o: category.c category.h buffer.h charset.h keymap.h \
character.h lisp.h $(config_h)
ccl.o: ccl.c ccl.h charset.h character.h coding.h composite.h lisp.h $(config_h)
character.o: character.c character.h buffer.h charset.h composite.h disptab.h \
lisp.h $(config_h)
charset.o: charset.c charset.h character.h buffer.h coding.h composite.h \
disptab.h lisp.h $(config_h)
chartab.o: charset.h character.h ccl.h lisp.h $(config_h)
coding.o: coding.c coding.h ccl.h buffer.h character.h charset.h composite.h \
window.h dispextern.h frame.h termhooks.h lisp.h $(config_h)
cm.o: cm.c frame.h cm.h termhooks.h termchar.h dispextern.h lisp.h $(config_h)
cmds.o: cmds.c syntax.h buffer.h character.h commands.h window.h lisp.h $(config_h) \
msdos.h dispextern.h keyboard.h keymap.h systime.h coding.h frame.h \
composite.h
pre-crt0.o: pre-crt0.c
dbusbind.o: dbusbind.c termhooks.h frame.h keyboard.h lisp.h $(config_h)
dired.o: dired.c commands.h buffer.h lisp.h $(config_h) character.h charset.h \
coding.h regex.h systime.h blockinput.h atimer.h composite.h
dispnew.o: dispnew.c systime.h commands.h process.h frame.h coding.h \
window.h buffer.h termchar.h termopts.h termhooks.h cm.h \
disptab.h indent.h $(INTERVALS_H) nsgui.h \
xterm.h blockinput.h atimer.h character.h msdos.h keyboard.h \
syssignal.h lisp.h $(config_h)
doc.o: doc.c lisp.h $(config_h) epaths.h buffer.h keyboard.h keymap.h \
character.h systime.h coding.h composite.h
doprnt.o: doprnt.c character.h lisp.h $(config_h)
dosfns.o: buffer.h termchar.h termhooks.h frame.h blockinput.h window.h \
msdos.h dosfns.h dispextern.h charset.h coding.h atimer.h systime.h \
lisp.h $(config_h)
editfns.o: editfns.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
coding.h frame.h blockinput.h atimer.h lisp.h $(config_h)
emacs.o: emacs.c commands.h systty.h syssignal.h blockinput.h process.h \
termhooks.h buffer.h atimer.h systime.h $(INTERVALS_H) lisp.h $(config_h) \
window.h dispextern.h keyboard.h keymap.h frame.h coding.h
fileio.o: fileio.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
coding.h msdos.h blockinput.h atimer.h lisp.h $(config_h) frame.h commands.h
filelock.o: filelock.c buffer.h character.h coding.h systime.h composite.h \
lisp.h $(config_h)
filemode.o: filemode.c $(config_h)
frame.o: frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
blockinput.h atimer.h systime.h buffer.h character.h fontset.h font.h \
msdos.h dosfns.h dispextern.h w32term.h nsgui.h termchar.h coding.h \
composite.h lisp.h $(config_h) termhooks.h ccl.h
fringe.o: fringe.c dispextern.h nsgui.h frame.h window.h buffer.h termhooks.h \
blockinput.h atimer.h systime.h lisp.h $(config_h)
font.o: font.c dispextern.h frame.h window.h ccl.h character.h charset.h \
font.h lisp.h $(config_h) buffer.h composite.h fontset.h xterm.h nsgui.h
ftfont.o: dispextern.h frame.h character.h charset.h composite.h font.h \
lisp.h $(config_h) blockinput.h atimer.h systime.h coding.h fontset.h \
ccl.h ftfont.h
fontset.o: fontset.c fontset.h ccl.h buffer.h character.h \
charset.h frame.h keyboard.h termhooks.h font.h lisp.h $(config_h) \
blockinput.h atimer.h systime.h coding.h $(INTERVALS_H) nsgui.h \
window.h xterm.h
getloadavg.o: getloadavg.c $(config_h)
gtkutil.o: gtkutil.c gtkutil.h xterm.h lisp.h frame.h lisp.h $(config_h) \
blockinput.h window.h atimer.h systime.h termhooks.h keyboard.h \
charset.h coding.h syssignal.h dispextern.h composite.h
image.o: image.c frame.h window.h dispextern.h blockinput.h atimer.h \
systime.h xterm.h w32term.h w32gui.h font.h epaths.h character.h coding.h \
nsterm.h nsgui.h lisp.h $(config_h) composite.h termhooks.h ccl.h
indent.o: indent.c frame.h window.h indent.h buffer.h lisp.h $(config_h) termchar.h \
termopts.h disptab.h region-cache.h character.h category.h \
keyboard.h systime.h coding.h $(INTERVALS_H)
insdel.o: insdel.c window.h buffer.h $(INTERVALS_H) blockinput.h character.h \
dispextern.h atimer.h systime.h region-cache.h lisp.h $(config_h)
keyboard.o: keyboard.c termchar.h termhooks.h termopts.h buffer.h character.h \
commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
systime.h syntax.h $(INTERVALS_H) blockinput.h atimer.h composite.h \
xterm.h puresize.h msdos.h keymap.h w32term.h nsterm.h nsgui.h coding.h \
lisp.h $(config_h)
keymap.o: keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
atimer.h systime.h puresize.h character.h charset.h $(INTERVALS_H) keymap.h window.h \
coding.h frame.h lisp.h $(config_h)
lastfile.o: lastfile.c $(config_h)
macros.o: macros.c window.h buffer.h commands.h macros.h keyboard.h \
dispextern.h lisp.h $(config_h) systime.h coding.h composite.h
gmalloc.o: gmalloc.c $(config_h)
ralloc.o: ralloc.c lisp.h $(config_h)
vm-limit.o: vm-limit.c mem-limits.h lisp.h $(config_h)
marker.o: marker.c buffer.h character.h lisp.h $(config_h)
md5.o: md5.c md5.h $(config_h)
minibuf.o: minibuf.c syntax.h frame.h window.h keyboard.h systime.h \
buffer.h commands.h character.h msdos.h $(INTERVALS_H) keymap.h \
termhooks.h lisp.h $(config_h) coding.h
mktime.o: mktime.c $(config_h)
msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \
termopts.h termchar.h character.h coding.h ccl.h disptab.h window.h \
keyboard.h $(INTERVALS_H) buffer.h commands.h blockinput.h atimer.h lisp.h $(config_h)
nsfns.o: nsfns.m charset.h nsterm.h nsgui.h frame.h window.h buffer.h \
dispextern.h fontset.h $(INTERVALS_H) keyboard.h blockinput.h \
atimer.h systime.h epaths.h termhooks.h coding.h systime.h lisp.h $(config_h)
nsfont.o: nsterm.h dispextern.h frame.h lisp.h lisp.h $(config_h)
nsimage.o: nsimage.m nsterm.h lisp.h $(config_h)
nsmenu.o: nsmenu.m termhooks.h frame.h window.h dispextern.h \
nsgui.h keyboard.h blockinput.h atimer.h systime.h buffer.h \
nsterm.h lisp.h $(config_h)
nsterm.o: nsterm.m blockinput.h atimer.h systime.h syssignal.h nsterm.h \
nsgui.h frame.h charset.h ccl.h dispextern.h fontset.h termhooks.h \
termopts.h termchar.h disptab.h buffer.h window.h keyboard.h \
$(INTERVALS_H) process.h coding.h lisp.h $(config_h)
nsselect.o: nsselect.m blockinput.h nsterm.h nsgui.h frame.h lisp.h $(config_h)
process.o: process.c process.h buffer.h window.h termhooks.h termopts.h \
commands.h syssignal.h systime.h systty.h syswait.h frame.h dispextern.h \
blockinput.h atimer.h charset.h coding.h ccl.h msdos.h composite.h \
keyboard.h lisp.h $(config_h) character.h xgselect.h sysselect.h
regex.o: regex.c syntax.h buffer.h lisp.h $(config_h) regex.h category.h character.h
region-cache.o: region-cache.c buffer.h region-cache.h lisp.h $(config_h)
scroll.o: scroll.c termchar.h dispextern.h frame.h msdos.h keyboard.h \
termhooks.h lisp.h $(config_h) systime.h coding.h composite.h window.h
search.o: search.c regex.h commands.h buffer.h region-cache.h syntax.h \
blockinput.h atimer.h systime.h category.h character.h charset.h \
$(INTERVALS_H) \
lisp.h $(config_h)
sound.o: sound.c dispextern.h syssignal.h lisp.h $(config_h) atimer.h systime.h
strftime.o: strftime.c $(config_h)
syntax.o: syntax.c syntax.h buffer.h commands.h category.h character.h \
keymap.h regex.h $(INTERVALS_H) lisp.h $(config_h)
sysdep.o: sysdep.c syssignal.h systty.h systime.h syswait.h blockinput.h \
process.h dispextern.h termhooks.h termchar.h termopts.h coding.h \
frame.h atimer.h window.h msdos.h dosfns.h keyboard.h cm.h lisp.h $(config_h) \
composite.h
term.o: term.c termchar.h termhooks.h termopts.h lisp.h $(config_h) cm.h frame.h \
disptab.h keyboard.h character.h charset.h coding.h ccl.h xterm.h \
msdos.h window.h keymap.h blockinput.h atimer.h systime.h systty.h \
syssignal.h $(INTERVALS_H) buffer.h
termcap.o: termcap.c lisp.h $(config_h)
terminal.o: terminal.c frame.h termchar.h termhooks.h charset.h coding.h \
keyboard.h lisp.h $(config_h) dispextern.h composite.h systime.h
terminfo.o: terminfo.c lisp.h $(config_h)
tparam.o: tparam.c lisp.h $(config_h)
undo.o: undo.c buffer.h commands.h window.h dispextern.h lisp.h $(config_h)
unexaix.o: unexaix.c lisp.h $(config_h)
unexalpha.o: unexalpha.c $(config_h)
unexcw.o: unexcw.c lisp.h $(config_h)
unexec.o: unexec.c lisp.h $(config_h)
unexelf.o: unexelf.c $(config_h)
unexhp9k800.o: unexhp9k800.c $(config_h)
unexmacosx.o: unexmacosx.c $(config_h)
unexsol.o: unexsol.c lisp.h $(config_h)
unexw32.o: unexw32.c $(config_h)
w16select.o: w16select.c dispextern.h frame.h blockinput.h atimer.h systime.h \
msdos.h buffer.h charset.h coding.h composite.h lisp.h $(config_h)
widget.o: widget.c xterm.h frame.h dispextern.h widgetprv.h \
$(srcdir)/../lwlib/lwlib.h lisp.h $(config_h)
window.o: window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
disptab.h keyboard.h msdos.h coding.h termhooks.h \
keymap.h blockinput.h atimer.h systime.h $(INTERVALS_H) \
xterm.h w32term.h nsterm.h nsgui.h lisp.h $(config_h)
xdisp.o: xdisp.c macros.h commands.h process.h indent.h buffer.h dispextern.h \
coding.h termchar.h frame.h window.h disptab.h termhooks.h character.h \
charset.h lisp.h $(config_h) keyboard.h $(INTERVALS_H) region-cache.h \
xterm.h w32term.h nsterm.h nsgui.h msdos.h composite.h fontset.h ccl.h \
blockinput.h atimer.h systime.h keymap.h font.h
xfaces.o: xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
window.h character.h charset.h msdos.h dosfns.h composite.h atimer.h \
systime.h keyboard.h fontset.h w32term.h nsterm.h coding.h ccl.h \
$(INTERVALS_H) nsgui.h termchar.h termhooks.h font.h lisp.h $(config_h)
xfns.o: xfns.c buffer.h frame.h window.h keyboard.h xterm.h dispextern.h \
$(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h systime.h epaths.h \
character.h charset.h coding.h gtkutil.h lisp.h $(config_h) termhooks.h \
fontset.h termchar.h font.h xsettings.h $(INTERVALS_H) ccl.h
xfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
xftfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h ftfont.h
ftxfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
menu.o: menu.c lisp.h keyboard.h keymap.h frame.h termhooks.h blockinput.h \
dispextern.h $(srcdir)/../lwlib/lwlib.h xterm.h gtkutil.h menu.h \
lisp.h $(config_h) systime.h coding.h composite.h window.h atimer.h nsgui.h
xmenu.o: xmenu.c xterm.h termhooks.h window.h dispextern.h frame.h buffer.h \
charset.h keyboard.h $(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h \
systime.h gtkutil.h msdos.h coding.h menu.h lisp.h $(config_h) composite.h \
keymap.h sysselect.h
xterm.o: xterm.c xterm.h termhooks.h termopts.h termchar.h window.h buffer.h \
dispextern.h frame.h disptab.h blockinput.h atimer.h systime.h syssignal.h \
keyboard.h emacs-icon.h character.h charset.h ccl.h fontset.h composite.h \
coding.h process.h gtkutil.h font.h fontset.h lisp.h $(config_h) \
xsettings.h intervals.h keymap.h xgselect.h sysselect.h
xselect.o: xselect.c process.h dispextern.h frame.h xterm.h blockinput.h \
buffer.h atimer.h systime.h termhooks.h lisp.h $(config_h) keyboard.h \
coding.h composite.h
xgselect.o: xgselect.h systime.h sysselect.h lisp.h $(config_h)
xrdb.o: xrdb.c lisp.h $(config_h) epaths.h
xsmfns.o: xsmfns.c lisp.h $(config_h) systime.h sysselect.h termhooks.h xterm.h \
lisp.h termopts.h frame.h dispextern.h
xsettings.o: xterm.h xsettings.h lisp.h frame.h termhooks.h $(config_h) \
dispextern.h keyboard.h systime.h coding.h composite.h blockinput.h atimer.h \
termopts.h
/* The files of Lisp proper. */
alloc.o: alloc.c process.h frame.h window.h buffer.h puresize.h syssignal.h \
keyboard.h blockinput.h atimer.h systime.h character.h lisp.h $(config_h) \
$(INTERVALS_H) termhooks.h
bytecode.o: bytecode.c buffer.h syntax.h character.h window.h dispextern.h \
frame.h xterm.h lisp.h $(config_h)
data.o: data.c buffer.h puresize.h character.h syssignal.h keyboard.h frame.h \
termhooks.h systime.h coding.h composite.h dispextern.h font.h ccl.h \
lisp.h $(config_h)
eval.o: eval.c commands.h keyboard.h blockinput.h atimer.h systime.h \
dispextern.h lisp.h $(config_h) coding.h composite.h xterm.h
floatfns.o: floatfns.c syssignal.h lisp.h $(config_h)
fns.o: fns.c commands.h lisp.h $(config_h) frame.h buffer.h character.h keyboard.h \
keymap.h window.h dispextern.h $(INTERVALS_H) coding.h md5.h \
blockinput.h atimer.h systime.h xterm.h
print.o: print.c process.h frame.h window.h buffer.h keyboard.h character.h \
lisp.h $(config_h) termchar.h $(INTERVALS_H) msdos.h termhooks.h \
blockinput.h atimer.h systime.h font.h charset.h coding.h ccl.h
lread.o: lread.c commands.h keyboard.h buffer.h epaths.h character.h \
charset.h lisp.h $(config_h) $(INTERVALS_H) termhooks.h coding.h msdos.h \
systime.h frame.h blockinput.h atimer.h
/* Text properties support. */
composite.o: composite.c buffer.h character.h coding.h font.h ccl.h \
frame.h termhooks.h $(INTERVALS_H) window.h lisp.h $(config_h)
intervals.o: intervals.c buffer.h $(INTERVALS_H) keyboard.h puresize.h \
keymap.h lisp.h $(config_h) systime.h coding.h
textprop.o: textprop.c buffer.h window.h $(INTERVALS_H) \
lisp.h $(config_h)
#endif /* ! AUTO_DEPEND */
/* System-specific programs to be made.
OTHER_FILES select which of these should be compiled. */
#ifdef HAVE_NS
${ns_appdir}: ${ns_appsrc}
rm -fr ${ns_appdir}
mkdir -p ${ns_appdir}
( cd ${ns_appsrc} ; tar cfh - . ) | ( cd ${ns_appdir} ; umask 022; tar xf - )
#endif /* HAVE_NS */
/* These are only used if HAVE_NS, but no harm in always defining them. */
${ns_appbindir}Emacs: emacs${EXEEXT}
mkdir -p ${ns_appbindir}
cp -f emacs${EXEEXT} ${ns_appbindir}Emacs
ns-app: ${ns_appdir} ${ns_appbindir}Emacs
mostlyclean:
rm -f temacs${EXEEXT} prefix-args${EXEEXT} core *.core \#* *.o libXMenu11.a liblw.a
@ -1010,7 +709,7 @@ mostlyclean:
rm -f buildobj.h
clean: mostlyclean
rm -f emacs-*.*.*${EXEEXT} emacs${EXEEXT}
-rm -rf deps
-rm -rf ${DEPDIR}
test "X${ns_appdir}" = "X" || rm -rf ${ns_appdir}
/* bootstrap-clean is used to clean up just before a bootstrap.
@ -1102,16 +801,14 @@ ${lispsource}loaddefs.el: $(BOOTSTRAPEMACS) $(VCSWITNESS)
bootstrap-emacs${EXEEXT}: temacs${EXEEXT}
cd ../lisp; $(MAKE) $(MFLAGS) update-subdirs
#ifdef CANNOT_DUMP
ln -f temacs${EXEEXT} bootstrap-emacs${EXEEXT}
#else
$(RUN_TEMACS) --batch --load loadup bootstrap
mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}
#endif /* ! defined (CANNOT_DUMP) */
if test "${CANNOT_DUMP}" = "yes"; then \
ln -f temacs${EXEEXT} bootstrap-emacs${EXEEXT}; \
else \
$(RUN_TEMACS) --batch --load loadup bootstrap || exit 1; \
mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}; \
fi
@: Compile some files earlier to speed up further compilation.
cd ../lisp; $(MAKE) $(MFLAGS) compile-first EMACS=${bootstrap_exe}
#ifdef AUTO_DEPEND
ALLOBJS=$(START_FILES) ${obj} ${otherobj} prefix-args.o
-include $(ALLOBJS:%.o=deps/%.d)
#endif
/* Insert either autodeps.mk (if AUTO_DEPEND), else deps.mk. */
@deps_frag@

6
src/autodeps.mk Normal file
View file

@ -0,0 +1,6 @@
/* autodeps.mk --- src/Makefile fragment for GNU Emacs
This is inserted in src/Makefile if AUTO_DEPEND=yes. */
ALLOBJS=$(START_FILES) ${obj} ${otherobj} prefix-args.o
-include $(ALLOBJS:%.o=${DEPDIR}/%.d)

View file

@ -543,6 +543,7 @@ bidi_copy_it (struct bidi_it *to, struct bidi_it *from)
#define BIDI_CACHE_CHUNK 200
static struct bidi_it *bidi_cache;
static size_t bidi_cache_size = 0;
static size_t elsz = sizeof (struct bidi_it);
static int bidi_cache_idx; /* next unused cache slot */
static int bidi_cache_last_idx; /* slot of last cache hit */
@ -558,8 +559,9 @@ bidi_cache_shrink (void)
{
if (bidi_cache_size > BIDI_CACHE_CHUNK)
{
bidi_cache_size = BIDI_CACHE_CHUNK * sizeof (struct bidi_it);
bidi_cache = (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size);
bidi_cache_size = BIDI_CACHE_CHUNK;
bidi_cache =
(struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size * elsz);
}
bidi_cache_reset ();
}
@ -688,9 +690,9 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, int resolved)
/* Enlarge the cache as needed. */
if (idx >= bidi_cache_size)
{
bidi_cache_size += BIDI_CACHE_CHUNK * sizeof (struct bidi_it);
bidi_cache_size += BIDI_CACHE_CHUNK;
bidi_cache =
(struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size);
(struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size * elsz);
}
/* Character positions should correspond to cache positions 1:1.
If we are outside the range of cached positions, the cache is
@ -705,7 +707,6 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, int resolved)
bidi_copy_it (&bidi_cache[idx], bidi_it);
if (!resolved)
bidi_cache[idx].resolved_level = -1;
bidi_cache[idx].new_paragraph = 0;
}
else
{

View file

@ -27,9 +27,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define EMACS_CONFIG_H
/* Generate dependencies with gcc. */
#undef AUTO_DEPEND
/* Define to 1 if the mktime function is broken. */
#undef BROKEN_MKTIME
@ -841,6 +838,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you are using NS windowing under GNUstep. */
#undef NS_IMPL_GNUSTEP
/* Define if the C compiler is the linker. */
#undef ORDINARY_LINK
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT

279
src/deps.mk Normal file
View file

@ -0,0 +1,279 @@
/* deps.mk --- src/Makefile fragment for GNU Emacs
Copyright (C) 1985, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001, 2002,
2003, 2004, 2005, 2006, 2007, 2008, 2009, 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/>.
Commentary:
This file is inserted in src/Makefile if AUTO_DEPEND=no.
It defines static dependencies between the various source files.
FIXME some of these dependencies are platform-specific.
Eg callproc.c only depends on w32.h for WINDOWSNT builds.
One way to fix this would be to replace w32.h (etc) by $(W32_H),
a variable set by configure. Does not seem worth the trouble.
Since the w32 build does not even use this file, you might ask
why these dependencies are here at all...
nsgui.h: In fact, every .o file depends directly or indirectly on
dispextern.h and hence nsgui.h under NS. But the ones that actually
use stuff there are more limited.
Code: */
atimer.o: atimer.c atimer.h syssignal.h systime.h lisp.h blockinput.h \
$(config_h)
bidi.o: bidi.c buffer.h character.h dispextern.h lisp.h $(config_h)
buffer.o: buffer.c buffer.h region-cache.h commands.h window.h \
$(INTERVALS_H) blockinput.h atimer.h systime.h character.h \
indent.h keyboard.h coding.h keymap.h frame.h lisp.h $(config_h)
callint.o: callint.c window.h commands.h buffer.h keymap.h \
keyboard.h dispextern.h systime.h coding.h composite.h lisp.h $(config_h)
callproc.o: callproc.c epaths.h buffer.h commands.h lisp.h $(config_h) \
process.h systty.h syssignal.h character.h coding.h ccl.h msdos.h \
composite.h w32.h blockinput.h atimer.h systime.h frame.h termhooks.h \
buffer.h
casefiddle.o: casefiddle.c syntax.h commands.h buffer.h character.h \
composite.h keymap.h lisp.h $(config_h)
casetab.o: casetab.c buffer.h character.h lisp.h $(config_h)
category.o: category.c category.h buffer.h charset.h keymap.h \
character.h lisp.h $(config_h)
ccl.o: ccl.c ccl.h charset.h character.h coding.h composite.h lisp.h $(config_h)
character.o: character.c character.h buffer.h charset.h composite.h disptab.h \
lisp.h $(config_h)
charset.o: charset.c charset.h character.h buffer.h coding.h composite.h \
disptab.h lisp.h $(config_h)
chartab.o: charset.h character.h ccl.h lisp.h $(config_h)
coding.o: coding.c coding.h ccl.h buffer.h character.h charset.h composite.h \
window.h dispextern.h frame.h termhooks.h lisp.h $(config_h)
cm.o: cm.c frame.h cm.h termhooks.h termchar.h dispextern.h lisp.h $(config_h)
cmds.o: cmds.c syntax.h buffer.h character.h commands.h window.h lisp.h \
$(config_h) msdos.h dispextern.h keyboard.h keymap.h systime.h \
coding.h frame.h composite.h
pre-crt0.o: pre-crt0.c
dbusbind.o: dbusbind.c termhooks.h frame.h keyboard.h lisp.h $(config_h)
dired.o: dired.c commands.h buffer.h lisp.h $(config_h) character.h charset.h \
coding.h regex.h systime.h blockinput.h atimer.h composite.h
dispnew.o: dispnew.c systime.h commands.h process.h frame.h coding.h \
window.h buffer.h termchar.h termopts.h termhooks.h cm.h \
disptab.h indent.h $(INTERVALS_H) nsgui.h \
xterm.h blockinput.h atimer.h character.h msdos.h keyboard.h \
syssignal.h lisp.h $(config_h)
doc.o: doc.c lisp.h $(config_h) epaths.h buffer.h keyboard.h keymap.h \
character.h systime.h coding.h composite.h
doprnt.o: doprnt.c character.h lisp.h $(config_h)
dosfns.o: buffer.h termchar.h termhooks.h frame.h blockinput.h window.h \
msdos.h dosfns.h dispextern.h charset.h coding.h atimer.h systime.h \
lisp.h $(config_h)
editfns.o: editfns.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
coding.h frame.h blockinput.h atimer.h lisp.h $(config_h)
emacs.o: emacs.c commands.h systty.h syssignal.h blockinput.h process.h \
termhooks.h buffer.h atimer.h systime.h $(INTERVALS_H) lisp.h $(config_h) \
window.h dispextern.h keyboard.h keymap.h frame.h coding.h
fileio.o: fileio.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
coding.h msdos.h blockinput.h atimer.h lisp.h $(config_h) frame.h commands.h
filelock.o: filelock.c buffer.h character.h coding.h systime.h composite.h \
lisp.h $(config_h)
filemode.o: filemode.c $(config_h)
frame.o: frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
blockinput.h atimer.h systime.h buffer.h character.h fontset.h font.h \
msdos.h dosfns.h dispextern.h w32term.h nsgui.h termchar.h coding.h \
composite.h lisp.h $(config_h) termhooks.h ccl.h
fringe.o: fringe.c dispextern.h nsgui.h frame.h window.h buffer.h termhooks.h \
blockinput.h atimer.h systime.h lisp.h $(config_h)
font.o: font.c dispextern.h frame.h window.h ccl.h character.h charset.h \
font.h lisp.h $(config_h) buffer.h composite.h fontset.h xterm.h nsgui.h
ftfont.o: dispextern.h frame.h character.h charset.h composite.h font.h \
lisp.h $(config_h) blockinput.h atimer.h systime.h coding.h fontset.h \
ccl.h ftfont.h
fontset.o: fontset.c fontset.h ccl.h buffer.h character.h \
charset.h frame.h keyboard.h termhooks.h font.h lisp.h $(config_h) \
blockinput.h atimer.h systime.h coding.h $(INTERVALS_H) nsgui.h \
window.h xterm.h
getloadavg.o: getloadavg.c $(config_h)
gtkutil.o: gtkutil.c gtkutil.h xterm.h lisp.h frame.h lisp.h $(config_h) \
blockinput.h window.h atimer.h systime.h termhooks.h keyboard.h \
charset.h coding.h syssignal.h dispextern.h composite.h
image.o: image.c frame.h window.h dispextern.h blockinput.h atimer.h \
systime.h xterm.h w32term.h w32gui.h font.h epaths.h character.h coding.h \
nsterm.h nsgui.h lisp.h $(config_h) composite.h termhooks.h ccl.h
indent.o: indent.c frame.h window.h indent.h buffer.h lisp.h $(config_h) \
termchar.h termopts.h disptab.h region-cache.h character.h category.h \
keyboard.h systime.h coding.h $(INTERVALS_H)
insdel.o: insdel.c window.h buffer.h $(INTERVALS_H) blockinput.h character.h \
dispextern.h atimer.h systime.h region-cache.h lisp.h $(config_h)
keyboard.o: keyboard.c termchar.h termhooks.h termopts.h buffer.h character.h \
commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
systime.h syntax.h $(INTERVALS_H) blockinput.h atimer.h composite.h \
xterm.h puresize.h msdos.h keymap.h w32term.h nsterm.h nsgui.h coding.h \
lisp.h $(config_h)
keymap.o: keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
atimer.h systime.h puresize.h character.h charset.h $(INTERVALS_H) \
keymap.h window.h coding.h frame.h lisp.h $(config_h)
lastfile.o: lastfile.c $(config_h)
macros.o: macros.c window.h buffer.h commands.h macros.h keyboard.h \
dispextern.h lisp.h $(config_h) systime.h coding.h composite.h
gmalloc.o: gmalloc.c $(config_h)
ralloc.o: ralloc.c lisp.h $(config_h)
vm-limit.o: vm-limit.c mem-limits.h lisp.h $(config_h)
marker.o: marker.c buffer.h character.h lisp.h $(config_h)
md5.o: md5.c md5.h $(config_h)
minibuf.o: minibuf.c syntax.h frame.h window.h keyboard.h systime.h \
buffer.h commands.h character.h msdos.h $(INTERVALS_H) keymap.h \
termhooks.h lisp.h $(config_h) coding.h
mktime.o: mktime.c $(config_h)
msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \
termopts.h termchar.h character.h coding.h ccl.h disptab.h window.h \
keyboard.h $(INTERVALS_H) buffer.h commands.h blockinput.h atimer.h \
lisp.h $(config_h)
nsfns.o: nsfns.m charset.h nsterm.h nsgui.h frame.h window.h buffer.h \
dispextern.h fontset.h $(INTERVALS_H) keyboard.h blockinput.h \
atimer.h systime.h epaths.h termhooks.h coding.h systime.h lisp.h $(config_h)
nsfont.o: nsterm.h dispextern.h frame.h lisp.h lisp.h $(config_h)
nsimage.o: nsimage.m nsterm.h lisp.h $(config_h)
nsmenu.o: nsmenu.m termhooks.h frame.h window.h dispextern.h \
nsgui.h keyboard.h blockinput.h atimer.h systime.h buffer.h \
nsterm.h lisp.h $(config_h)
nsterm.o: nsterm.m blockinput.h atimer.h systime.h syssignal.h nsterm.h \
nsgui.h frame.h charset.h ccl.h dispextern.h fontset.h termhooks.h \
termopts.h termchar.h disptab.h buffer.h window.h keyboard.h \
$(INTERVALS_H) process.h coding.h lisp.h $(config_h)
nsselect.o: nsselect.m blockinput.h nsterm.h nsgui.h frame.h lisp.h $(config_h)
process.o: process.c process.h buffer.h window.h termhooks.h termopts.h \
commands.h syssignal.h systime.h systty.h syswait.h frame.h dispextern.h \
blockinput.h atimer.h charset.h coding.h ccl.h msdos.h composite.h \
keyboard.h lisp.h $(config_h) character.h xgselect.h sysselect.h
regex.o: regex.c syntax.h buffer.h lisp.h $(config_h) regex.h \
category.h character.h
region-cache.o: region-cache.c buffer.h region-cache.h lisp.h $(config_h)
scroll.o: scroll.c termchar.h dispextern.h frame.h msdos.h keyboard.h \
termhooks.h lisp.h $(config_h) systime.h coding.h composite.h window.h
search.o: search.c regex.h commands.h buffer.h region-cache.h syntax.h \
blockinput.h atimer.h systime.h category.h character.h charset.h \
$(INTERVALS_H) \
lisp.h $(config_h)
sound.o: sound.c dispextern.h syssignal.h lisp.h $(config_h) atimer.h systime.h
strftime.o: strftime.c $(config_h)
syntax.o: syntax.c syntax.h buffer.h commands.h category.h character.h \
keymap.h regex.h $(INTERVALS_H) lisp.h $(config_h)
sysdep.o: sysdep.c syssignal.h systty.h systime.h syswait.h blockinput.h \
process.h dispextern.h termhooks.h termchar.h termopts.h coding.h \
frame.h atimer.h window.h msdos.h dosfns.h keyboard.h cm.h lisp.h \
$(config_h) composite.h
term.o: term.c termchar.h termhooks.h termopts.h lisp.h $(config_h) \
cm.h frame.h disptab.h keyboard.h character.h charset.h coding.h ccl.h \
xterm.h msdos.h window.h keymap.h blockinput.h atimer.h systime.h \
systty.h syssignal.h $(INTERVALS_H) buffer.h
termcap.o: termcap.c lisp.h $(config_h)
terminal.o: terminal.c frame.h termchar.h termhooks.h charset.h coding.h \
keyboard.h lisp.h $(config_h) dispextern.h composite.h systime.h
terminfo.o: terminfo.c lisp.h $(config_h)
tparam.o: tparam.c lisp.h $(config_h)
undo.o: undo.c buffer.h commands.h window.h dispextern.h lisp.h $(config_h)
unexaix.o: unexaix.c lisp.h $(config_h)
unexalpha.o: unexalpha.c $(config_h)
unexcw.o: unexcw.c lisp.h $(config_h)
unexec.o: unexec.c lisp.h $(config_h)
unexelf.o: unexelf.c $(config_h)
unexhp9k800.o: unexhp9k800.c $(config_h)
unexmacosx.o: unexmacosx.c $(config_h)
unexsol.o: unexsol.c lisp.h $(config_h)
unexw32.o: unexw32.c $(config_h)
w16select.o: w16select.c dispextern.h frame.h blockinput.h atimer.h systime.h \
msdos.h buffer.h charset.h coding.h composite.h lisp.h $(config_h)
widget.o: widget.c xterm.h frame.h dispextern.h widgetprv.h \
$(srcdir)/../lwlib/lwlib.h lisp.h $(config_h)
window.o: window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
disptab.h keyboard.h msdos.h coding.h termhooks.h \
keymap.h blockinput.h atimer.h systime.h $(INTERVALS_H) \
xterm.h w32term.h nsterm.h nsgui.h lisp.h $(config_h)
xdisp.o: xdisp.c macros.h commands.h process.h indent.h buffer.h dispextern.h \
coding.h termchar.h frame.h window.h disptab.h termhooks.h character.h \
charset.h lisp.h $(config_h) keyboard.h $(INTERVALS_H) region-cache.h \
xterm.h w32term.h nsterm.h nsgui.h msdos.h composite.h fontset.h ccl.h \
blockinput.h atimer.h systime.h keymap.h font.h
xfaces.o: xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
window.h character.h charset.h msdos.h dosfns.h composite.h atimer.h \
systime.h keyboard.h fontset.h w32term.h nsterm.h coding.h ccl.h \
$(INTERVALS_H) nsgui.h termchar.h termhooks.h font.h lisp.h $(config_h)
xfns.o: xfns.c buffer.h frame.h window.h keyboard.h xterm.h dispextern.h \
$(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h systime.h epaths.h \
character.h charset.h coding.h gtkutil.h lisp.h $(config_h) termhooks.h \
fontset.h termchar.h font.h xsettings.h $(INTERVALS_H) ccl.h
xfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
xftfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h ftfont.h
ftxfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
menu.o: menu.c lisp.h keyboard.h keymap.h frame.h termhooks.h blockinput.h \
dispextern.h $(srcdir)/../lwlib/lwlib.h xterm.h gtkutil.h menu.h \
lisp.h $(config_h) systime.h coding.h composite.h window.h atimer.h nsgui.h
xmenu.o: xmenu.c xterm.h termhooks.h window.h dispextern.h frame.h buffer.h \
charset.h keyboard.h $(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h \
systime.h gtkutil.h msdos.h coding.h menu.h lisp.h $(config_h) composite.h \
keymap.h sysselect.h
xterm.o: xterm.c xterm.h termhooks.h termopts.h termchar.h window.h buffer.h \
dispextern.h frame.h disptab.h blockinput.h atimer.h systime.h syssignal.h \
keyboard.h emacs-icon.h character.h charset.h ccl.h fontset.h composite.h \
coding.h process.h gtkutil.h font.h fontset.h lisp.h $(config_h) \
xsettings.h intervals.h keymap.h xgselect.h sysselect.h
xselect.o: xselect.c process.h dispextern.h frame.h xterm.h blockinput.h \
buffer.h atimer.h systime.h termhooks.h lisp.h $(config_h) keyboard.h \
coding.h composite.h
xgselect.o: xgselect.h systime.h sysselect.h lisp.h $(config_h)
xrdb.o: xrdb.c lisp.h $(config_h) epaths.h
xsmfns.o: xsmfns.c lisp.h $(config_h) systime.h sysselect.h termhooks.h \
xterm.h lisp.h termopts.h frame.h dispextern.h
xsettings.o: xterm.h xsettings.h lisp.h frame.h termhooks.h $(config_h) \
dispextern.h keyboard.h systime.h coding.h composite.h blockinput.h \
atimer.h termopts.h
/* The files of Lisp proper. */
alloc.o: alloc.c process.h frame.h window.h buffer.h puresize.h syssignal.h \
keyboard.h blockinput.h atimer.h systime.h character.h lisp.h $(config_h) \
$(INTERVALS_H) termhooks.h
bytecode.o: bytecode.c buffer.h syntax.h character.h window.h dispextern.h \
frame.h xterm.h lisp.h $(config_h)
data.o: data.c buffer.h puresize.h character.h syssignal.h keyboard.h frame.h \
termhooks.h systime.h coding.h composite.h dispextern.h font.h ccl.h \
lisp.h $(config_h)
eval.o: eval.c commands.h keyboard.h blockinput.h atimer.h systime.h \
dispextern.h lisp.h $(config_h) coding.h composite.h xterm.h
floatfns.o: floatfns.c syssignal.h lisp.h $(config_h)
fns.o: fns.c commands.h lisp.h $(config_h) frame.h buffer.h character.h \
keyboard.h keymap.h window.h dispextern.h $(INTERVALS_H) coding.h md5.h \
blockinput.h atimer.h systime.h xterm.h
print.o: print.c process.h frame.h window.h buffer.h keyboard.h character.h \
lisp.h $(config_h) termchar.h $(INTERVALS_H) msdos.h termhooks.h \
blockinput.h atimer.h systime.h font.h charset.h coding.h ccl.h
lread.o: lread.c commands.h keyboard.h buffer.h epaths.h character.h \
charset.h lisp.h $(config_h) $(INTERVALS_H) termhooks.h coding.h msdos.h \
systime.h frame.h blockinput.h atimer.h
/* Text properties support. */
composite.o: composite.c buffer.h character.h coding.h font.h ccl.h \
frame.h termhooks.h $(INTERVALS_H) window.h lisp.h $(config_h)
intervals.o: intervals.c buffer.h $(INTERVALS_H) keyboard.h puresize.h \
keymap.h lisp.h $(config_h) systime.h coding.h
textprop.o: textprop.c buffer.h window.h $(INTERVALS_H) \
lisp.h $(config_h)
/* deps.mk ends here */

View file

@ -748,21 +748,29 @@ struct glyph_row
/* First position in this row. This is the text position, including
overlay position information etc, where the display of this row
started, and can thus be less the position of the first glyph
(e.g. due to invisible text or horizontal scrolling). BIDI Note:
This is the smallest character position in the row, but not
necessarily the character that is the leftmost on the display. */
started, and can thus be less than the position of the first
glyph (e.g. due to invisible text or horizontal scrolling).
BIDI Note: In R2L rows, that have its reversed_p flag set, this
position is at or beyond the right edge of the row. */
struct display_pos start;
/* Text position at the end of this row. This is the position after
the last glyph on this row. It can be greater than the last
glyph position + 1, due to truncation, invisible text etc. In an
up-to-date display, this should always be equal to the start
position of the next row. BIDI Note: this is the character whose
buffer position is the largest, but not necessarily the rightmost
one on the display. */
glyph position + 1, due to a newline that ends the line,
truncation, invisible text etc. In an up-to-date display, this
should always be equal to the start position of the next row.
BIDI Note: In R2L rows, this position is at or beyond the left
edge of the row. */
struct display_pos end;
/* The smallest and the largest buffer positions that contributed to
glyphs in this row. Note that due to bidi reordering, these are
in general different from the text positions stored in `start'
and `end' members above, and also different from the buffer
positions recorded in the glyphs displayed the leftmost and
rightmost on the screen. */
struct text_pos minpos, maxpos;
/* Non-zero means the overlay arrow bitmap is on this line.
-1 means use default overlay arrow bitmap, else
it specifies actual fringe bitmap number. */
@ -947,16 +955,16 @@ struct glyph_row *matrix_row P_ ((struct glyph_matrix *, int));
displayed by ROW, which is not necessarily the smallest horizontal
position. */
#define MATRIX_ROW_START_CHARPOS(ROW) ((ROW)->start.pos.charpos)
#define MATRIX_ROW_START_BYTEPOS(ROW) ((ROW)->start.pos.bytepos)
#define MATRIX_ROW_START_CHARPOS(ROW) ((ROW)->minpos.charpos)
#define MATRIX_ROW_START_BYTEPOS(ROW) ((ROW)->minpos.bytepos)
/* Return the character/ byte position at which ROW ends. BIDI Note:
this is the largest character/byte position among characters in
ROW, i.e. the last logical-order character displayed by ROW, which
is not necessarily the largest horizontal position. */
#define MATRIX_ROW_END_CHARPOS(ROW) ((ROW)->end.pos.charpos)
#define MATRIX_ROW_END_BYTEPOS(ROW) ((ROW)->end.pos.bytepos)
#define MATRIX_ROW_END_CHARPOS(ROW) ((ROW)->maxpos.charpos)
#define MATRIX_ROW_END_BYTEPOS(ROW) ((ROW)->maxpos.bytepos)
/* Return the vertical position of ROW in MATRIX. */
@ -1789,7 +1797,7 @@ struct bidi_it {
EMACS_INT next_en_pos; /* position of next EN char for ET */
EMACS_INT ignore_bn_limit; /* position until which to ignore BNs */
bidi_dir_t sor; /* direction of start-of-run in effect */
int scan_dir; /* direction of text scan */
int scan_dir; /* direction of text scan, 1: forw, -1: back */
int stack_idx; /* index of current data on the stack */
/* Note: Everything from here on is not copied/saved when the bidi
iterator state is saved, pushed, or popped. So only put here
@ -2913,8 +2921,8 @@ void mark_window_display_accurate P_ ((Lisp_Object, int));
void redisplay_preserve_echo_area P_ ((int));
int set_cursor_from_row P_ ((struct window *, struct glyph_row *,
struct glyph_matrix *, int, int, int, int));
void init_iterator P_ ((struct it *, struct window *, int,
int, struct glyph_row *, enum face_id));
void init_iterator P_ ((struct it *, struct window *, EMACS_INT,
EMACS_INT, struct glyph_row *, enum face_id));
void init_iterator_to_row_start P_ ((struct it *, struct window *,
struct glyph_row *));
int get_next_display_element P_ ((struct it *));

View file

@ -1188,6 +1188,10 @@ increment_row_positions (row, delta, delta_bytes)
MATRIX_ROW_START_BYTEPOS (row) += delta_bytes;
MATRIX_ROW_END_CHARPOS (row) += delta;
MATRIX_ROW_END_BYTEPOS (row) += delta_bytes;
CHARPOS (row->start.pos) += delta;
BYTEPOS (row->start.pos) += delta_bytes;
CHARPOS (row->end.pos) += delta;
BYTEPOS (row->end.pos) += delta_bytes;
if (!row->enabled_p)
return;
@ -1748,13 +1752,19 @@ check_matrix_invariants (w)
/* Check that character and byte positions are in sync. */
xassert (MATRIX_ROW_START_BYTEPOS (row)
== CHAR_TO_BYTE (MATRIX_ROW_START_CHARPOS (row)));
xassert (BYTEPOS (row->start.pos)
== CHAR_TO_BYTE (CHARPOS (row->start.pos)));
/* CHAR_TO_BYTE aborts when invoked for a position > Z. We can
have such a position temporarily in case of a minibuffer
displaying something like `[Sole completion]' at its end. */
if (MATRIX_ROW_END_CHARPOS (row) < BUF_ZV (current_buffer))
xassert (MATRIX_ROW_END_BYTEPOS (row)
== CHAR_TO_BYTE (MATRIX_ROW_END_CHARPOS (row)));
{
xassert (MATRIX_ROW_END_BYTEPOS (row)
== CHAR_TO_BYTE (MATRIX_ROW_END_CHARPOS (row)));
xassert (BYTEPOS (row->end.pos)
== CHAR_TO_BYTE (CHARPOS (row->end.pos)));
}
/* Check that end position of `row' is equal to start position
of next row. */
@ -1764,6 +1774,8 @@ check_matrix_invariants (w)
== MATRIX_ROW_START_CHARPOS (next));
xassert (MATRIX_ROW_END_BYTEPOS (row)
== MATRIX_ROW_START_BYTEPOS (next));
xassert (CHARPOS (row->end.pos) == CHARPOS (next->start.pos));
xassert (BYTEPOS (row->end.pos) == BYTEPOS (next->start.pos));
}
row = next;
}

View file

@ -2194,7 +2194,10 @@ DEFUN ("delete-directory-internal", Fdelete_directory_internal,
return Qnil;
}
DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 2, "fDelete file: \nP",
DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 2,
"(list (read-file-name \"Delete file: \" nil default-directory \
(confirm-nonexistent-file-or-buffer)) \
current-prefix-arg)",
doc: /* Delete file named FILENAME. If it is a symlink, remove the symlink.
If file has multiple names, it continues to exist with the other names.

View file

@ -1582,29 +1582,56 @@ clear_image_cache (struct frame *f, Lisp_Object filter)
{
struct image_cache *c = FRAME_IMAGE_CACHE (f);
if (c && (!NILP (filter) || INTEGERP (Vimage_cache_eviction_delay)))
if (c)
{
EMACS_TIME t;
unsigned long old;
int i, nfreed;
EMACS_GET_TIME (t);
old = EMACS_SECS (t) - XFASTINT (Vimage_cache_eviction_delay);
int i, nfreed = 0;
/* Block input so that we won't be interrupted by a SIGIO
while being in an inconsistent state. */
BLOCK_INPUT;
for (i = nfreed = 0; i < c->used; ++i)
if (!NILP (filter))
{
struct image *img = c->images[i];
if (img != NULL
&& (NILP (filter) ? img->timestamp < old
: (EQ (Qt, filter)
|| !NILP (Fmember (filter, img->dependencies)))))
/* Filter image cache. */
for (i = 0; i < c->used; ++i)
{
free_image (f, img);
++nfreed;
struct image *img = c->images[i];
if (img && (EQ (Qt, filter)
|| !NILP (Fmember (filter, img->dependencies))))
{
free_image (f, img);
++nfreed;
}
}
}
else if (INTEGERP (Vimage_cache_eviction_delay))
{
/* Free cache based on timestamp. */
EMACS_TIME t;
unsigned long old;
int delay, nimages = 0;
for (i = 0; i < c->used; ++i)
if (c->images[i])
nimages++;
/* If the number of cached images has grown unusually large,
decrease the cache eviction delay (Bug#6230). */
delay = XFASTINT (Vimage_cache_eviction_delay);
if (nimages > 40)
delay = max (1, 1600 * delay / (nimages*nimages));
EMACS_GET_TIME (t);
old = EMACS_SECS (t) - delay;
for (i = 0; i < c->used; ++i)
{
struct image *img = c->images[i];
if (img && img->timestamp < old)
{
free_image (f, img);
++nfreed;
}
}
}
@ -1662,11 +1689,13 @@ which is then usually a filename. */)
}
DEFUN ("image-refresh", Fimage_refresh, Simage_refresh,
DEFUN ("image-flush", Fimage_flush, Simage_flush,
1, 2, 0,
doc: /* Refresh the image with specification SPEC on frame FRAME.
If SPEC specifies an image file, the displayed image is updated with
the current contents of that file.
doc: /* Fush the image with specification SPEC on frame FRAME.
This removes the image from the Emacs image cache. If SPEC specifies
an image file, the next redisplay of this image will read from the
current contents of that file.
FRAME nil or omitted means use the selected frame.
FRAME t means refresh the image on all frames. */)
(spec, frame)
@ -8499,7 +8528,7 @@ non-numeric, there is no explicit limit on the size of images. */);
defsubr (&Sinit_image_library);
defsubr (&Sclear_image_cache);
defsubr (&Simage_refresh);
defsubr (&Simage_flush);
defsubr (&Simage_size);
defsubr (&Simage_mask_p);
defsubr (&Simage_metadata);
@ -8520,11 +8549,14 @@ A cross is always drawn on black & white displays. */);
Vx_bitmap_file_path = decode_env_path ((char *) 0, PATH_BITMAPS);
DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay,
doc: /* Time after which cached images are removed from the cache.
When an image has not been displayed this many seconds, remove it
from the image cache. Value must be an integer or nil with nil
meaning don't clear the cache. */);
Vimage_cache_eviction_delay = make_number (30 * 60);
doc: /* Maximum time after which images are removed from the cache.
When an image has not been displayed this many seconds, Emacs
automatically removes it from the image cache. If the cache contains
a large number of images, the actual eviction time may be shorter.
The value can also be nil, meaning the cache is never cleared.
The function `clear-image-cache' disregards this variable. */);
Vimage_cache_eviction_delay = make_number (300);
}
void

View file

@ -11985,7 +11985,7 @@ The value `kill-region' is special; it means that the previous command
was a kill command.
`last-command' has a separate binding for each terminal device.
See Info node `(elisp)Multiple displays'. */);
See Info node `(elisp)Multiple Terminals'. */);
DEFVAR_KBOARD ("real-last-command", Vreal_last_command,
doc: /* Same as `last-command', but never altered by Lisp code. */);
@ -12123,8 +12123,8 @@ untranslated. In a vector, an element which is nil means "no translation".
This is applied to the characters supplied to input methods, not their
output. See also `translation-table-for-input'.
This variable has a separate binding for each terminal. See Info node
`(elisp)Multiple displays'. */);
This variable has a separate binding for each terminal.
See Info node `(elisp)Multiple Terminals'. */);
DEFVAR_BOOL ("cannot-suspend", &cannot_suspend,
doc: /* Non-nil means to always spawn a subshell instead of suspending.
@ -12215,7 +12215,7 @@ set up a different keymap for reading the next command.
`overriding-terminal-local-map' has a separate binding for each
terminal device.
See Info node `(elisp)Multiple displays'. */);
See Info node `(elisp)Multiple Terminals'. */);
DEFVAR_LISP ("overriding-local-map", &Voverriding_local_map,
doc: /* Keymap that overrides all other local keymaps.
@ -12243,7 +12243,7 @@ numeric keysym code (sans the \"system-specific\" bit 1<<28)
and SYMBOL is its name.
`system-key-alist' has a separate binding for each terminal device.
See Info node `(elisp)Multiple displays'. */);
See Info node `(elisp)Multiple Terminals'. */);
DEFVAR_KBOARD ("local-function-key-map", Vlocal_function_key_map,
doc: /* Keymap that translates key sequences to key sequences during input.
@ -12269,7 +12269,7 @@ Typing `ESC O P' to `read-key-sequence' would return [f1]. Typing
typing `ESC O P x' would return [f1 x].
`local-function-key-map' has a separate binding for each terminal
device. See Info node `(elisp)Multiple displays'. If you need to
device. See Info node `(elisp)Multiple Terminals'. If you need to
define a binding on all terminals, change `function-key-map'
instead. Initially, `local-function-key-map' is an empty keymap that
has `function-key-map' as its parent on all terminal devices. */);

View file

@ -62,8 +62,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* On the 64 bit architecture, we can use 60 bits for addresses */
#define VALBITS 60
#define LINKER $(CC) -nostdlib
/* Define XPNTR to avoid or'ing with DATA_SEG_BITS */
#define XPNTR(a) XUINT (a)

View file

@ -32,12 +32,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define HAVE_TEXT_START
#endif
/* NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> says this is needed
For MkLinux/LinuxPPC. */
#ifdef GNU_LINUX
#define LINKER $(CC) -nostdlib
#endif
#ifdef _ARCH_PPC64
#ifndef _LP64
#define _LP64

39
src/ns.mk Normal file
View file

@ -0,0 +1,39 @@
/* autodeps.mk --- src/Makefile fragment for GNU Emacs
Copyright (C) 2008, 2009, 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/>.
Commentary:
This is inserted in src/Makefile if HAVE_NS.
The only reason this is in a separate file is because $ns_appdir,
which appears as a target, is empty on non-NS builds. Some makes
do not like empty targets, even if they are never used. */
${ns_appdir}: ${ns_appsrc}
rm -fr ${ns_appdir}
mkdir -p ${ns_appdir}
( cd ${ns_appsrc} ; tar cfh - . ) | ( cd ${ns_appdir} ; umask 022; tar xf - )
${ns_appbindir}Emacs: emacs${EXEEXT}
mkdir -p ${ns_appbindir}
cp -f emacs${EXEEXT} ${ns_appbindir}Emacs
ns-app: ${ns_appdir} ${ns_appbindir}Emacs
/* ns.mk ends here */

View file

@ -3347,11 +3347,25 @@ usage: (make-network-process &rest ARGS) */)
/* :service SERVICE -- string, integer (port number), or t (random port). */
service = Fplist_get (contact, QCservice);
/* :host HOST -- hostname, ip address, or 'local for localhost. */
host = Fplist_get (contact, QChost);
if (!NILP (host))
{
if (EQ (host, Qlocal))
host = build_string ("localhost");
CHECK_STRING (host);
}
#ifdef HAVE_LOCAL_SOCKETS
if (family == AF_LOCAL)
{
/* Host is not used. */
host = Qnil;
if (!NILP (host))
{
message (":family local ignores the :host \"%s\" property",
SDATA (host));
contact = Fplist_put (contact, QChost, Qnil);
host = Qnil;
}
CHECK_STRING (service);
bzero (&address_un, sizeof address_un);
address_un.sun_family = AF_LOCAL;
@ -3362,15 +3376,6 @@ usage: (make-network-process &rest ARGS) */)
}
#endif
/* :host HOST -- hostname, ip address, or 'local for localhost. */
host = Fplist_get (contact, QChost);
if (!NILP (host))
{
if (EQ (host, Qlocal))
host = build_string ("localhost");
CHECK_STRING (host);
}
/* Slow down polling to every ten seconds.
Some kernels have a bug which causes retrying connect to fail
after a connect. Polling can interfere with gethostbyname too. */

View file

@ -61,11 +61,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* The kernel symbol where the load average is found is named avenrun. */
#define LDAV_SYMBOL "avenrun"
/* Special itemss needed to make Emacs run on this system. */
#ifndef __GNUC__
#define LINKER cc
#endif
/* Special items needed to make Emacs run on this system. */
/* The following definition seems to be needed in AIX version 3.1.6.8.
It may not have been needed in certain earlier versions. */
@ -110,7 +106,5 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define UNEXEC unexaix.o
#define ORDINARY_LINK
/* arch-tag: 38fe75ea-6aef-42bd-8449-bc34d921a562
(do not change this comment) */

View file

@ -1,7 +1,7 @@
/* System description header file for Cygwin.
Copyright (C) 1985, 1986, 1992, 1999, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010 Free Software Foundation, Inc.
2007, 2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* SYSTEM_TYPE should indicate the kind of system you are using.
It sets the Lisp variable system-type. */
It sets the Lisp variable system-type. */
#define SYSTEM_TYPE "cygwin"
/* Emacs can read input using SIGIO and buffering characters itself,
@ -94,7 +94,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base)
#define SYSV_SYSTEM_DIR 1
#define UNEXEC unexcw.o
#define LINKER $(CC)
#define HAVE_SOCKETS

View file

@ -147,9 +147,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#undef HAVE_POSIX_MEMALIGN
#endif
/* Link this program just by running cc. */
#define ORDINARY_LINK
/* Define the following so emacs symbols will not conflict with those
in the System framework. Otherwise -prebind will not work. */

View file

@ -29,8 +29,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define SIGNALS_VIA_CHARACTERS
/* GNU needs its own crt0, and libc defines data_start. */
#define ORDINARY_LINK
/* libc defines data_start. */
#define DATA_START ({ extern int data_start; (char *) &data_start; })
/* Some losing code fails to include this and then assumes

View file

@ -82,8 +82,6 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */
#define _NAIVE_DOS_REGS
#define ORDINARY_LINK
/* command.com does not understand `...` so we define this. */
#define SEPCHAR ';'

View file

@ -26,12 +26,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base)
/* On post 1.3 releases of NetBSD, gcc -nostdlib also clears
the library search parth, i.e. it won't search /usr/lib
for libc and friends. Using -nostartfiles instead avoids
this problem, and will also work on earlier NetBSD releases. */
#define LINKER $(CC) -nostartfiles
#define DEFAULT_SOUND_DEVICE "/dev/audio"
/* Greg A. Woods <woods@weird.com> says we must include signal.h

View file

@ -69,8 +69,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* On USG systems signal handlers return void. */
#define SIGTYPE void
#define ORDINARY_LINK
/* Undump with ELF. */
#undef COFF

View file

@ -5700,7 +5700,34 @@ sys_write (int fd, const void * buffer, unsigned int count)
}
else
#endif
nchars = _write (fd, buffer, count);
{
/* Some networked filesystems don't like too large writes, so
break them into smaller chunks. See the Comments section of
the MSDN documentation of WriteFile for details behind the
choice of the value of CHUNK below. See also the thread
http://thread.gmane.org/gmane.comp.version-control.git/145294
in the git mailing list. */
const unsigned char *p = buffer;
const unsigned chunk = 30 * 1024 * 1024;
nchars = 0;
while (count > 0)
{
unsigned this_chunk = count < chunk ? count : chunk;
int n = _write (fd, p, this_chunk);
nchars += n;
if (n < 0)
{
nchars = n;
break;
}
else if (n < this_chunk)
break;
count -= n;
p += n;
}
}
return nchars;
}

View file

@ -2598,7 +2598,7 @@ void
init_iterator (it, w, charpos, bytepos, row, base_face_id)
struct it *it;
struct window *w;
int charpos, bytepos;
EMACS_INT charpos, bytepos;
struct glyph_row *row;
enum face_id base_face_id;
{
@ -3012,7 +3012,7 @@ init_from_display_pos (it, w, pos)
struct window *w;
struct display_pos *pos;
{
int charpos = CHARPOS (pos->pos), bytepos = BYTEPOS (pos->pos);
EMACS_INT charpos = CHARPOS (pos->pos), bytepos = BYTEPOS (pos->pos);
int i, overlay_strings_with_newlines = 0;
/* If POS specifies a position in a display vector, this might
@ -12486,23 +12486,26 @@ redisplay_internal (preserve_echo_area)
if (windows_or_buffers_changed && !pause)
goto retry;
/* Clear the face cache eventually. */
if (consider_all_windows_p)
/* Clear the face and image caches.
We used to do this only if consider_all_windows_p. But the cache
needs to be cleared if a timer creates images in the current
buffer (e.g. the test case in Bug#6230). */
if (clear_face_cache_count > CLEAR_FACE_CACHE_COUNT)
{
if (clear_face_cache_count > CLEAR_FACE_CACHE_COUNT)
{
clear_face_cache (0);
clear_face_cache_count = 0;
}
#ifdef HAVE_WINDOW_SYSTEM
if (clear_image_cache_count > CLEAR_IMAGE_CACHE_COUNT)
{
clear_image_caches (Qnil);
clear_image_cache_count = 0;
}
#endif /* HAVE_WINDOW_SYSTEM */
clear_face_cache (0);
clear_face_cache_count = 0;
}
#ifdef HAVE_WINDOW_SYSTEM
if (clear_image_cache_count > CLEAR_IMAGE_CACHE_COUNT)
{
clear_image_caches (Qnil);
clear_image_cache_count = 0;
}
#endif /* HAVE_WINDOW_SYSTEM */
end_of_redisplay:
unbind_to (count, Qnil);
RESUME_POLLING;
@ -14959,7 +14962,7 @@ try_window_reusing_current_matrix (w)
/* The variable new_start now holds the new window start. The old
start `start' can be determined from the current matrix. */
SET_TEXT_POS_FROM_MARKER (new_start, w->start);
start = start_row->start.pos;
start = start_row->minpos;
start_vpos = MATRIX_ROW_VPOS (start_row, w->current_matrix);
/* Clear the desired matrix for the display below. */
@ -14998,7 +15001,7 @@ try_window_reusing_current_matrix (w)
{
/* Advance to the next row as the "start". */
start_row++;
start = start_row->start.pos;
start = start_row->minpos;
/* If there are no more rows to try, or just one, give up. */
if (start_row == MATRIX_MODE_LINE_ROW (w->current_matrix) - 1
|| w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (w, start_row)
@ -15280,39 +15283,26 @@ try_window_reusing_current_matrix (w)
{
struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos;
struct glyph *end = glyph + row->used[TEXT_AREA];
struct glyph *orig_glyph = glyph;
struct cursor_pos orig_cursor = w->cursor;
for (; glyph < end
&& (!BUFFERP (glyph->object)
|| glyph->charpos != PT);
glyph++)
/* Can't use this optimization with bidi-reordered glyph
rows, unless cursor is already at point. */
if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering))
{
w->cursor.hpos++;
w->cursor.x += glyph->pixel_width;
}
/* With bidi reordering, charpos changes non-linearly
with hpos, so the right glyph could be to the
left. */
if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering)
&& (!BUFFERP (glyph->object) || glyph->charpos != PT))
{
struct glyph *start_glyph = row->glyphs[TEXT_AREA];
glyph = orig_glyph - 1;
orig_cursor.hpos--;
orig_cursor.x -= glyph->pixel_width;
for (; glyph >= start_glyph
&& (!BUFFERP (glyph->object)
|| glyph->charpos != PT);
glyph--)
{
w->cursor.hpos--;
w->cursor.x -= glyph->pixel_width;
}
if (BUFFERP (glyph->object) && glyph->charpos == PT)
w->cursor = orig_cursor;
if (!(w->cursor.hpos >= 0
&& w->cursor.hpos < row->used[TEXT_AREA]
&& BUFFERP (glyph->object)
&& glyph->charpos == PT))
return 0;
}
else
for (; glyph < end
&& (!BUFFERP (glyph->object)
|| glyph->charpos < PT);
glyph++)
{
w->cursor.hpos++;
w->cursor.x += glyph->pixel_width;
}
}
}
@ -15892,13 +15882,13 @@ try_window_id (w)
as is, without changing glyph positions since no text has
been added/removed in front of the window end. */
r0 = MATRIX_FIRST_TEXT_ROW (current_matrix);
if (TEXT_POS_EQUAL_P (start, r0->start.pos)
if (TEXT_POS_EQUAL_P (start, r0->minpos)
/* PT must not be in a partially visible line. */
&& !(PT >= MATRIX_ROW_START_CHARPOS (row)
&& MATRIX_ROW_BOTTOM_Y (row) > window_text_bottom_y (w)))
{
/* We have to compute the window end anew since text
can have been added/removed after it. */
could have been added/removed after it. */
w->window_end_pos
= make_number (Z - MATRIX_ROW_END_CHARPOS (row));
w->window_end_bytepos
@ -15930,7 +15920,7 @@ try_window_id (w)
start is not in changed text, otherwise positions would not be
comparable. */
row = MATRIX_FIRST_TEXT_ROW (current_matrix);
if (!TEXT_POS_EQUAL_P (start, row->start.pos))
if (!TEXT_POS_EQUAL_P (start, row->minpos))
GIVE_UP (16);
/* Give up if the window ends in strings. Overlay strings
@ -17322,7 +17312,7 @@ cursor_row_p (w, row)
{
int cursor_row_p = 1;
if (PT == MATRIX_ROW_END_CHARPOS (row))
if (PT == CHARPOS (row->end.pos))
{
/* Suppose the row ends on a string.
Unless the row is continued, that means it ends on a newline
@ -17359,14 +17349,15 @@ cursor_row_p (w, row)
{
/* If the row ends in middle of a real character,
and the line is continued, we want the cursor here.
That's because MATRIX_ROW_END_CHARPOS would equal
That's because CHARPOS (ROW->end.pos) would equal
PT if PT is before the character. */
if (!row->ends_in_ellipsis_p)
cursor_row_p = row->continued_p;
else
/* If the row ends in an ellipsis, then
MATRIX_ROW_END_CHARPOS will equal point after the invisible text.
We want that position to be displayed after the ellipsis. */
CHARPOS (ROW->end.pos) will equal point after the
invisible text. We want that position to be displayed
after the ellipsis. */
cursor_row_p = 0;
}
/* If the row ends at ZV, display the cursor at the end of that
@ -17502,122 +17493,87 @@ unproduce_glyphs (it, n)
glyph[-n] = *glyph;
}
/* Find the positions in a bidi-reordered ROW to serve as ROW->start
and ROW->end. */
static struct display_pos
find_row_end (it, row)
/* Find the positions in a bidi-reordered ROW to serve as ROW->minpos
and ROW->maxpos. */
static void
find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos)
struct it *it;
struct glyph_row *row;
EMACS_INT min_pos, min_bpos, max_pos, max_bpos;
{
/* FIXME: Revisit this when glyph ``spilling'' in continuation
lines' rows is implemented for bidi-reordered rows. */
EMACS_INT min_pos = ZV + 1, max_pos = 0;
struct glyph *g;
struct it save_it;
struct text_pos tpos;
struct display_pos row_end = it->current;
for (g = row->glyphs[TEXT_AREA];
g < row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
g++)
{
if (BUFFERP (g->object))
{
if (g->charpos > 0 && g->charpos < min_pos)
min_pos = g->charpos;
if (g->charpos > max_pos)
max_pos = g->charpos;
}
}
/* Empty lines have a valid buffer position at their first
glyph, but that glyph's OBJECT is zero, as if it didn't come
from a buffer. If we didn't find any valid buffer positions
in this row, maybe we have such an empty line. */
if (max_pos == 0 && row->used[TEXT_AREA])
{
for (g = row->glyphs[TEXT_AREA];
g < row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
g++)
{
if (INTEGERP (g->object))
{
if (g->charpos > 0 && g->charpos < min_pos)
min_pos = g->charpos;
if (g->charpos > max_pos)
max_pos = g->charpos;
}
}
}
/* ROW->start is the value of min_pos, the minimal buffer position
/* ROW->minpos is the value of min_pos, the minimal buffer position
we have in ROW. */
if (min_pos <= ZV)
SET_TEXT_POS (row->minpos, min_pos, min_bpos);
else
{
/* Avoid calling the costly CHAR_TO_BYTE if possible. */
if (min_pos != row->start.pos.charpos)
SET_TEXT_POS (row->start.pos, min_pos, CHAR_TO_BYTE (min_pos));
if (max_pos == 0)
max_pos = min_pos;
/* We didn't find _any_ valid buffer positions in any of the
glyphs, so we must trust the iterator's computed
positions. */
row->minpos = row->start.pos;
max_pos = CHARPOS (it->current.pos);
max_bpos = BYTEPOS (it->current.pos);
}
/* For ROW->end, we need the position that is _after_ max_pos, in
the logical order, unless we are at ZV. */
if (!max_pos)
abort ();
/* Here are the various use-cases for ending the row, and the
corresponding values for ROW->maxpos:
Line ends in a newline from buffer eol_pos + 1
Line is continued from buffer max_pos + 1
Line is truncated on right it->current.pos
Line ends in a newline from string max_pos
Line is continued from string max_pos
Line is continued from display vector max_pos
Line is entirely from a string min_pos == max_pos
Line is entirely from a display vector min_pos == max_pos
Line that ends at ZV ZV
If you discover other use-cases, please add them here as
appropriate. */
if (row->ends_at_zv_p)
row->maxpos = it->current.pos;
else if (row->used[TEXT_AREA])
{
if (!row->used[TEXT_AREA])
row->start.pos = row_end.pos;
}
else if (row->used[TEXT_AREA] && max_pos)
{
int at_eol_p;
SET_TEXT_POS (tpos, max_pos, CHAR_TO_BYTE (max_pos));
save_it = *it;
it->bidi_p = 0;
reseat (it, tpos, 0);
if (!get_next_display_element (it))
abort (); /* this row cannot be at ZV, see above */
at_eol_p = ITERATOR_AT_END_OF_LINE_P (it);
set_iterator_to_next (it, 1);
row_end = it->current;
/* If the character at max_pos is not a newline and the
characters at max_pos+1 is a newline, skip that newline as
well. Note that this may skip some invisible text. */
if (!at_eol_p
&& get_next_display_element (it)
&& ITERATOR_AT_END_OF_LINE_P (it))
if (row->ends_in_newline_from_string_p)
SET_TEXT_POS (row->maxpos, max_pos, max_bpos);
else if (CHARPOS (it->eol_pos) > 0)
SET_TEXT_POS (row->maxpos,
CHARPOS (it->eol_pos) + 1, BYTEPOS (it->eol_pos) + 1);
else if (row->continued_p)
{
set_iterator_to_next (it, 1);
/* Record the position after the newline of a continued row.
We will need that to set ROW->end of the last row
produced for a continued line. */
if (row->continued_p)
save_it.eol_pos = it->current.pos;
/* If max_pos is different from IT's current position, it
means IT->method does not belong to the display element
at max_pos. However, it also means that the display
element at max_pos was displayed in its entirety on this
line, which is equivalent to saying that the next line
starts at the next buffer position. */
if (IT_CHARPOS (*it) == max_pos && it->method != GET_FROM_BUFFER)
SET_TEXT_POS (row->maxpos, max_pos, max_bpos);
else
{
row_end = it->current;
save_it.eol_pos.charpos = save_it.eol_pos.bytepos = 0;
INC_BOTH (max_pos, max_bpos);
SET_TEXT_POS (row->maxpos, max_pos, max_bpos);
}
}
else if (!row->continued_p
&& MATRIX_ROW_CONTINUATION_LINE_P (row)
&& it->eol_pos.charpos > 0)
{
/* Last row of a continued line. Use the position recorded
in IT->eol_pos, to the effect that the newline belongs to
this row, not to the row which displays the character
with the largest buffer position before the newline. */
row_end.pos = it->eol_pos;
it->eol_pos.charpos = it->eol_pos.bytepos = 0;
}
*it = save_it;
/* The members of ROW->end that are not taken from buffer
positions are copied from IT->current. */
row_end.string_pos = it->current.string_pos;
row_end.overlay_string_index = it->current.overlay_string_index;
row_end.dpvec_index = it->current.dpvec_index;
else if (row->truncated_on_right_p)
/* display_line already called reseat_at_next_visible_line_start,
which puts the iterator at the beginning of the next line, in
the logical order. */
row->maxpos = it->current.pos;
else if (max_pos == min_pos && it->method != GET_FROM_BUFFER)
/* A line that is entirely from a string/image/stretch... */
row->maxpos = row->minpos;
else
abort ();
}
return row_end;
else
row->maxpos = it->current.pos;
}
/* Construct the glyph row IT->glyph_row in the desired matrix of
@ -17637,7 +17593,10 @@ display_line (it)
int wrap_row_used = -1, wrap_row_ascent, wrap_row_height;
int wrap_row_phys_ascent, wrap_row_phys_height;
int wrap_row_extra_line_spacing;
EMACS_INT wrap_row_min_pos, wrap_row_min_bpos;
EMACS_INT wrap_row_max_pos, wrap_row_max_bpos;
int cvpos;
EMACS_INT min_pos = ZV + 1, min_bpos, max_pos = 0, max_bpos;
/* We always start displaying at hpos zero even if hscrolled. */
xassert (it->hpos == 0 && it->current_x == 0);
@ -17694,6 +17653,23 @@ display_line (it)
row->phys_height = it->max_phys_ascent + it->max_phys_descent;
row->extra_line_spacing = it->max_extra_line_spacing;
/* Utility macro to record max and min buffer positions seen until now. */
#define RECORD_MAX_MIN_POS(IT) \
do \
{ \
if (IT_CHARPOS (*(IT)) < min_pos) \
{ \
min_pos = IT_CHARPOS (*(IT)); \
min_bpos = IT_BYTEPOS (*(IT)); \
} \
if (IT_CHARPOS (*(IT)) > max_pos) \
{ \
max_pos = IT_CHARPOS (*(IT)); \
max_bpos = IT_BYTEPOS (*(IT)); \
} \
} \
while (0)
/* Loop generating characters. The loop is left with IT on the next
character to display. */
while (1)
@ -17728,7 +17704,8 @@ display_line (it)
row->ends_at_zv_p = 1;
/* A row that displays right-to-left text must always have
its last face extended all the way to the end of line,
even if this row ends in ZV. */
even if this row ends in ZV, because we still write to th
screen left to right. */
if (row->reversed_p)
extend_face_to_end_of_line (it);
break;
@ -17762,6 +17739,10 @@ display_line (it)
wrap_row_phys_ascent = row->phys_ascent;
wrap_row_phys_height = row->phys_height;
wrap_row_extra_line_spacing = row->extra_line_spacing;
wrap_row_min_pos = min_pos;
wrap_row_min_bpos = min_bpos;
wrap_row_max_pos = max_pos;
wrap_row_max_bpos = max_bpos;
may_wrap = 0;
}
}
@ -17812,6 +17793,10 @@ display_line (it)
it->max_extra_line_spacing);
if (it->current_x - it->pixel_width < it->first_visible_x)
row->x = x - it->first_visible_x;
/* Record the maximum and minimum buffer positions seen so
far in glyphs that will be displayed by this row. */
if (it->bidi_p)
RECORD_MAX_MIN_POS (it);
}
else
{
@ -17845,6 +17830,11 @@ display_line (it)
it->current_x = new_x;
it->continuation_lines_width += new_x;
++it->hpos;
/* Record the maximum and minimum buffer
positions seen so far in glyphs that will be
displayed by this row. */
if (it->bidi_p)
RECORD_MAX_MIN_POS (it);
if (i == nglyphs - 1)
{
/* If line-wrap is on, check if a previous
@ -17919,6 +17909,10 @@ display_line (it)
row->phys_ascent = wrap_row_phys_ascent;
row->phys_height = wrap_row_phys_height;
row->extra_line_spacing = wrap_row_extra_line_spacing;
min_pos = wrap_row_min_pos;
min_bpos = wrap_row_min_bpos;
max_pos = wrap_row_max_pos;
max_bpos = wrap_row_max_bpos;
row->continued_p = 1;
row->ends_at_zv_p = 0;
row->exact_window_width_line_p = 0;
@ -17981,6 +17975,12 @@ display_line (it)
/* Increment number of glyphs actually displayed. */
++it->hpos;
/* Record the maximum and minimum buffer positions
seen so far in glyphs that will be displayed by
this row. */
if (it->bidi_p)
RECORD_MAX_MIN_POS (it);
if (x < it->first_visible_x)
/* Glyph is partially visible, i.e. row starts at
negative X position. */
@ -18032,6 +18032,10 @@ display_line (it)
if (used_before == 0)
row->glyphs[TEXT_AREA]->charpos = CHARPOS (it->position);
/* Record the position of the newline, for use in
find_row_edges. */
it->eol_pos = it->current.pos;
/* Consume the line end. This skips over invisible lines. */
set_iterator_to_next (it, 1);
it->continuation_lines_width = 0;
@ -18111,7 +18115,7 @@ display_line (it)
/* If line is not empty and hscrolled, maybe insert truncation glyphs
at the left window margin. */
if (it->first_visible_x
&& IT_CHARPOS (*it) != MATRIX_ROW_START_CHARPOS (row))
&& IT_CHARPOS (*it) != CHARPOS (row->start.pos))
{
if (!FRAME_WINDOW_P (it->f))
insert_left_trunc_glyphs (it);
@ -18165,12 +18169,19 @@ display_line (it)
/* Remember the position at which this line ends. */
row->end = it->current;
/* ROW->start and ROW->end must be the smallest and the largest
buffer positions in ROW. But if ROW was bidi-reordered, these
two positions can be anywhere in the row, so we must rescan all
of the ROW's glyphs to find them. */
if (it->bidi_p)
row->end = find_row_end (it, row);
if (!it->bidi_p)
{
row->minpos = row->start.pos;
row->maxpos = row->end.pos;
}
else
{
/* ROW->minpos and ROW->maxpos must be the smallest and
`1 + the largest' buffer positions in ROW. But if ROW was
bidi-reordered, these two positions can be anywhere in the
row, so we must determine them now. */
find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos);
}
/* Record whether this row ends inside an ellipsis. */
row->ends_in_ellipsis_p
@ -18216,6 +18227,7 @@ display_line (it)
row to be used. */
it->current_x = it->hpos = 0;
it->current_y += row->height;
SET_TEXT_POS (it->eol_pos, 0, 0);
++it->vpos;
++it->glyph_row;
/* The next row should by default use the same value of the
@ -18226,6 +18238,8 @@ display_line (it)
it->glyph_row->reversed_p = row->reversed_p;
it->start = row->end;
return row->displays_text_p;
#undef RECORD_MAX_MIN_POS
}
DEFUN ("current-bidi-paragraph-direction", Fcurrent_bidi_paragraph_direction,