aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenichi Handa2010-05-25 09:35:50 +0900
committerKenichi Handa2010-05-25 09:35:50 +0900
commit8a2b8c4f7c2a18254fc0b34f236d7487fc7917d4 (patch)
tree48e379874bd0bf796a12a5f43b369e0d6691a125
parent10f72a3793087770f131a0dc729f29ff50f08ad9 (diff)
parent7eca871a82d582b986c638343f74d16b819a0f14 (diff)
downloademacs-8a2b8c4f7c2a18254fc0b34f236d7487fc7917d4.tar.gz
emacs-8a2b8c4f7c2a18254fc0b34f236d7487fc7917d4.zip
merge trunk
-rw-r--r--ChangeLog37
-rw-r--r--admin/notes/bugtracker4
-rw-r--r--config.bat7
-rwxr-xr-xconfigure211
-rw-r--r--configure.in134
-rw-r--r--doc/lispref/ChangeLog5
-rw-r--r--doc/lispref/display.texi53
-rw-r--r--etc/NEWS9
-rw-r--r--etc/TODO15
-rw-r--r--lib-src/ChangeLog8
-rw-r--r--lib-src/Makefile.in18
-rw-r--r--lisp/ChangeLog155
-rw-r--r--lisp/add-log.el2
-rw-r--r--lisp/comint.el1
-rw-r--r--lisp/composite.el8
-rw-r--r--lisp/dired-x.el23
-rw-r--r--lisp/dired.el7
-rw-r--r--lisp/emacs-lisp/cl-loaddefs.el2
-rw-r--r--lisp/emacs-lisp/cl-macs.el1
-rw-r--r--lisp/gnus/ChangeLog4
-rw-r--r--lisp/gnus/gnus-start.el2
-rw-r--r--lisp/help-mode.el4
-rw-r--r--lisp/image-mode.el4
-rw-r--r--lisp/image.el1
-rw-r--r--lisp/indent.el6
-rw-r--r--lisp/isearch.el30
-rw-r--r--lisp/loadup.el2
-rw-r--r--lisp/locate.el2
-rw-r--r--lisp/mh-e/ChangeLog7
-rw-r--r--lisp/mh-e/mh-comp.el3
-rw-r--r--lisp/mh-e/mh-mime.el9
-rw-r--r--lisp/net/secrets.el64
-rw-r--r--lisp/net/tramp-fish.el98
-rw-r--r--lisp/net/tramp-gvfs.el107
-rw-r--r--lisp/net/tramp-imap.el72
-rw-r--r--lisp/net/tramp.el493
-rw-r--r--lisp/nxml/nxml-mode.el1
-rw-r--r--lisp/password-cache.el2
-rw-r--r--lisp/progmodes/cc-engine.el169
-rw-r--r--lisp/progmodes/f90.el15
-rw-r--r--lisp/progmodes/fortran.el15
-rw-r--r--lisp/progmodes/grep.el9
-rw-r--r--lisp/progmodes/octave-mod.el1
-rw-r--r--lisp/progmodes/subword.el2
-rw-r--r--lisp/replace.el3
-rw-r--r--lisp/simple.el3
-rw-r--r--lisp/smerge-mode.el22
-rw-r--r--lisp/vc-dir.el3
-rwxr-xr-xmake-dist11
-rw-r--r--msdos/ChangeLog21
-rw-r--r--msdos/mainmake.v28
-rw-r--r--msdos/sed1v2.inp9
-rw-r--r--msdos/sed1x.inp2
-rw-r--r--msdos/sed2v2.inp1
-rw-r--r--src/.gdbinit7
-rw-r--r--src/ChangeLog135
-rw-r--r--src/Makefile.in409
-rw-r--r--src/autodeps.mk6
-rw-r--r--src/bidi.c11
-rw-r--r--src/config.in6
-rw-r--r--src/deps.mk279
-rw-r--r--src/dispextern.h40
-rw-r--r--src/dispnew.c16
-rw-r--r--src/fileio.c5
-rw-r--r--src/image.c82
-rw-r--r--src/keyboard.c12
-rw-r--r--src/m/ibms390x.h2
-rw-r--r--src/m/macppc.h6
-rw-r--r--src/ns.mk39
-rw-r--r--src/process.c27
-rw-r--r--src/s/aix4-2.h8
-rw-r--r--src/s/cygwin.h5
-rw-r--r--src/s/darwin.h3
-rw-r--r--src/s/gnu.h3
-rw-r--r--src/s/msdos.h2
-rw-r--r--src/s/netbsd.h6
-rw-r--r--src/s/usg5-4.h2
-rw-r--r--src/w32.c29
-rw-r--r--src/xdisp.c336
79 files changed, 2104 insertions, 1277 deletions
diff --git a/ChangeLog b/ChangeLog
index eb3ed433d0a..4fbebc2480a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,40 @@
12010-05-24 Romain Francoise <romain@orebokech.com>
2
3 * make-dist: Look for version in src/emacs.c.
4 Use lisp/subr.el rather than lisp/version.el for location check.
5
62010-05-21 Glenn Morris <rgm@gnu.org>
7
8 * configure.in (MKDEPDIR): Parallel build tweak.
9
10 * configure.in (ns_frag): New output file.
11
12 * configure.in (OLDXMENU): Set to "nothing" if !HAVE_X11 || USE_GTK.
13 (OLDXMENU_TARGET): Set to empty if USE_GTK.
14
15 * configure.in (cannot_dump): New output variable.
16
172010-05-20 enami tsugutomo <tsugutomo.enami@jp.sony.com>
18
19 * configure.in: On NetBSD, if terminfo is found, use it in
20 preference to termcap. (Bug#6190)
21
222010-05-20 Glenn Morris <rgm@gnu.org>
23
24 * make-dist (src): Include *.mk.
25 * config.bat: Concatenate deps.mk onto the end of src/Makefile.
26 * configure.in (DEPFLAGS, MKDEPDIR): New output variables.
27 (deps_frag): New output file.
28 (AUTO_DEPEND): Remove this definition.
29
30 * configure.in (--with-gtk, --with-gcc): Remove option stubs.
31
322010-05-19 Glenn Morris <rgm@gnu.org>
33
34 * configure.in (LINKER, YMF_PASS_LDFLAGS): New output variables.
35 (ORDINARY_LINK): New AC_DEFINE.
36 (LIB_GCC): No need to set if ORDINARY_LINK.
37
12010-05-18 Glenn Morris <rgm@gnu.org> 382010-05-18 Glenn Morris <rgm@gnu.org>
2 39
3 * configure.in (POST_ALLOC_OBJ) [cygwin]: Omit vm-limit.o. 40 * configure.in (POST_ALLOC_OBJ) [cygwin]: Omit vm-limit.o.
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index 5936eead85a..fc74c4dcedf 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -553,9 +553,13 @@ All discarded messages are stored in /var/lib/mailman/spam.
553If a non-spam message accidentally gets discarded, just do: 553If a non-spam message accidentally gets discarded, just do:
554 554
555cat /var/lib/mailman/spam/not-really-spam.msg | /usr/lib/debbugs/receive 555cat /var/lib/mailman/spam/not-really-spam.msg | /usr/lib/debbugs/receive
556chown Debian-debbugs:Debian-debbugs /var/lib/debbugs/spool/incoming/*
556... check it works ... 557... check it works ...
557mv /var/lib/mailman/spam/not-really-spam.msg /var/lib/mailman/not-spam/ 558mv /var/lib/mailman/spam/not-really-spam.msg /var/lib/mailman/not-spam/
558 559
560Also check that the sender was not added to the auto-discard/reject list
561in the debbugs-submit Mailman interface.
562
559** Administrivia 563** Administrivia
560 564
561The debbugs-submit list should have the administrivia option off, 565The debbugs-submit list should have the administrivia option off,
diff --git a/config.bat b/config.bat
index 20b8b285e59..ba31161962e 100644
--- a/config.bat
+++ b/config.bat
@@ -190,10 +190,11 @@ rem On my system dir.h gets in the way. It's a VMS file so who cares.
190if exist dir.h ren dir.h vmsdir.h 190if exist dir.h ren dir.h vmsdir.h
191 191
192rem Create "makefile" from "makefile.in". 192rem Create "makefile" from "makefile.in".
193rm -f Makefile junk.c 193rm -f Makefile junk.c junk2.c
194sed -e "1,/== start of cpp stuff ==/s@^##*[ ].*$@@" <Makefile.in >junk.c 194sed -e "1,/== start of cpp stuff ==/s@^##*[ ].*$@@" <Makefile.in >junk.c
195gcc -E -traditional junk.c | sed -f ../msdos/sed1v2.inp >Makefile 195copy junk.c + deps.mk junk2.c
196rm -f junk.c 196gcc -E -traditional junk2.c | sed -f ../msdos/sed1v2.inp >Makefile
197rm -f junk.c junk2.c
197 198
198if "%X11%" == "" goto src5 199if "%X11%" == "" goto src5
199mv Makefile makefile.tmp 200mv Makefile makefile.tmp
diff --git a/configure b/configure
index 5cc425413cd..9e3c0fff5fd 100755
--- a/configure
+++ b/configure
@@ -701,6 +701,7 @@ RANLIB
701INSTALL_INFO 701INSTALL_INFO
702GZIP_PROG 702GZIP_PROG
703MAKEINFO 703MAKEINFO
704cannot_dump
704LD_SWITCH_SYSTEM 705LD_SWITCH_SYSTEM
705C_SWITCH_MACHINE 706C_SWITCH_MACHINE
706C_SWITCH_SYSTEM 707C_SWITCH_SYSTEM
@@ -714,6 +715,8 @@ ALSA_CFLAGS
714ALSA_LIBS 715ALSA_LIBS
715CFLAGS_SOUND 716CFLAGS_SOUND
716SET_MAKE 717SET_MAKE
718MKDEPDIR
719DEPFLAGS
717XMKMF 720XMKMF
718LD_SWITCH_X_SITE_AUX 721LD_SWITCH_X_SITE_AUX
719LD_SWITCH_X_SITE_AUX_RPATH 722LD_SWITCH_X_SITE_AUX_RPATH
@@ -818,12 +821,15 @@ PRE_ALLOC_OBJ
818POST_ALLOC_OBJ 821POST_ALLOC_OBJ
819LD_SWITCH_SYSTEM_TEMACS 822LD_SWITCH_SYSTEM_TEMACS
820LD_SWITCH_SYSTEM_EXTRA 823LD_SWITCH_SYSTEM_EXTRA
824YMF_PASS_LDFLAGS
825LINKER
821LIB_GCC 826LIB_GCC
822MOUSE_SUPPORT 827MOUSE_SUPPORT
823TOOLTIP_SUPPORT 828TOOLTIP_SUPPORT
824WINDOW_SUPPORT 829WINDOW_SUPPORT
825LTLIBOBJS' 830LTLIBOBJS'
826ac_subst_files='' 831ac_subst_files='deps_frag
832ns_frag'
827ac_user_opts=' 833ac_user_opts='
828enable_option_checking 834enable_option_checking
829with_pop 835with_pop
@@ -854,8 +860,6 @@ with_dbus
854with_gconf 860with_gconf
855with_selinux 861with_selinux
856with_makeinfo 862with_makeinfo
857with_gtk
858with_gcc
859with_pkg_config_prog 863with_pkg_config_prog
860with_crt_dir 864with_crt_dir
861with_gnustep_conf 865with_gnustep_conf
@@ -1569,7 +1573,6 @@ Optional Packages:
1569 --without-gconf don't compile with GConf support 1573 --without-gconf don't compile with GConf support
1570 --without-selinux don't compile with SELinux support 1574 --without-selinux don't compile with SELinux support
1571 --without-makeinfo don't require makeinfo for building manuals 1575 --without-makeinfo don't require makeinfo for building manuals
1572
1573 --with-pkg-config-prog=PATH 1576 --with-pkg-config-prog=PATH
1574 path to pkg-config for finding GTK and librsvg 1577 path to pkg-config for finding GTK and librsvg
1575 --with-crt-dir=DIR directory containing crtn.o etc. The default is 1578 --with-crt-dir=DIR directory containing crtn.o etc. The default is
@@ -2382,28 +2385,6 @@ fi
2382 2385
2383 2386
2384 2387
2385# Check whether --with-gtk was given.
2386if test "${with_gtk+set}" = set; then
2387 withval=$with_gtk; { { $as_echo "$as_me:$LINENO: error: --with-gtk has been removed. Use --with-x-toolkit to
2388specify a toolkit." >&5
2389$as_echo "$as_me: error: --with-gtk has been removed. Use --with-x-toolkit to
2390specify a toolkit." >&2;}
2391 { (exit 1); exit 1; }; }
2392fi
2393
2394
2395
2396# Check whether --with-gcc was given.
2397if test "${with_gcc+set}" = set; then
2398 withval=$with_gcc; { { $as_echo "$as_me:$LINENO: error: --with-gcc has been removed. Set the \`CC' environment
2399variable to specify a compiler." >&5
2400$as_echo "$as_me: error: --with-gcc has been removed. Set the \`CC' environment
2401variable to specify a compiler." >&2;}
2402 { (exit 1); exit 1; }; }
2403fi
2404
2405
2406
2407# Check whether --with-pkg-config-prog was given. 2388# Check whether --with-pkg-config-prog was given.
2408if test "${with_pkg_config_prog+set}" = set; then 2389if test "${with_pkg_config_prog+set}" = set; then
2409 withval=$with_pkg_config_prog; 2390 withval=$with_pkg_config_prog;
@@ -5851,6 +5832,12 @@ configure___ LIBX=-lX11
5851 5832
5852configure___ unexec=UNEXEC 5833configure___ unexec=UNEXEC
5853 5834
5835#ifdef CANNOT_DUMP
5836configure___ cannot_dump=yes
5837#else
5838configure___ cannot_dump=no
5839#endif
5840
5854#ifdef SYSTEM_MALLOC 5841#ifdef SYSTEM_MALLOC
5855configure___ system_malloc=yes 5842configure___ system_malloc=yes
5856#else 5843#else
@@ -5912,6 +5899,9 @@ fi
5912rm ${tempcname} 5899rm ${tempcname}
5913 5900
5914 5901
5902
5903
5904
5915LD_SWITCH_SYSTEM= 5905LD_SWITCH_SYSTEM=
5916case "$opsys" in 5906case "$opsys" in
5917 freebsd) 5907 freebsd)
@@ -9501,6 +9491,9 @@ $as_echo "no" >&6; }
9501fi 9491fi
9502 9492
9503 9493
9494DEPFLAGS=
9495MKDEPDIR=":"
9496deps_frag=deps.mk
9504if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then 9497if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
9505 { $as_echo "$as_me:$LINENO: checking whether we are using GNU Make" >&5 9498 { $as_echo "$as_me:$LINENO: checking whether we are using GNU Make" >&5
9506$as_echo_n "checking whether we are using GNU Make... " >&6; } 9499$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
9567$as_echo "$ac_enable_autodepend" >&6; } 9560$as_echo "$ac_enable_autodepend" >&6; }
9568 fi 9561 fi
9569 if test $ac_enable_autodepend = yes; then 9562 if test $ac_enable_autodepend = yes; then
9570 9563 DEPFLAGS='-MMD -MF ${DEPDIR}/$*.d'
9571cat >>confdefs.h <<\_ACEOF 9564 ## In parallel builds, another make might create depdir between
9572#define AUTO_DEPEND 1 9565 ## the first test and mkdir, so stick another test on the end.
9573_ACEOF 9566 ## Or use mkinstalldirs? mkdir -p is not portable.
9574 9567 MKDEPDIR='test -d ${DEPDIR} || mkdir ${DEPDIR} || test -d ${DEPDIR}'
9568 deps_frag=autodeps.mk
9575 fi 9569 fi
9576fi 9570fi
9571deps_frag=$srcdir/src/$deps_frag
9572
9573
9574
9575
9577 9576
9578{ $as_echo "$as_me:$LINENO: checking for long file names" >&5 9577{ $as_echo "$as_me:$LINENO: checking for long file names" >&5
9579$as_echo_n "checking for long file names... " >&6; } 9578$as_echo_n "checking for long file names... " >&6; }
@@ -9960,6 +9959,7 @@ if test "${with_ns}" != no; then
9960 GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)" 9959 GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)"
9961 GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)" 9960 GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)"
9962 ## Pull in stuff from GNUstep-make. 9961 ## Pull in stuff from GNUstep-make.
9962 ## FIXME? Cleaner to use AC_SUBST_FILE for this?
9963 NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu 9963 NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu
9964GUI_LIB=gnu 9964GUI_LIB=gnu
9965include $GNUSTEP_MAKEFILES/Additional/base.make 9965include $GNUSTEP_MAKEFILES/Additional/base.make
@@ -10164,6 +10164,7 @@ fi
10164 10164
10165 10165
10166 10166
10167ns_frag=/dev/null
10167NS_OBJ= 10168NS_OBJ=
10168NS_SUPPORT= 10169NS_SUPPORT=
10169if test "${HAVE_NS}" = yes; then 10170if test "${HAVE_NS}" = yes; then
@@ -10175,6 +10176,7 @@ if test "${HAVE_NS}" = yes; then
10175 if test "${EN_NS_SELF_CONTAINED}" = yes; then 10176 if test "${EN_NS_SELF_CONTAINED}" = yes; then
10176 prefix=${ns_appresdir} 10177 prefix=${ns_appresdir}
10177 fi 10178 fi
10179 ns_frag=$srcdir/src/ns.mk
10178 NS_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o fontset.o fringe.o image.o" 10180 NS_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o fontset.o fringe.o image.o"
10179 NS_SUPPORT="\${lispsource}emacs-lisp/easymenu.elc \${lispsource}term/ns-win.elc" 10181 NS_SUPPORT="\${lispsource}emacs-lisp/easymenu.elc \${lispsource}term/ns-win.elc"
10180fi 10182fi
@@ -10184,6 +10186,7 @@ CPPFLAGS="$tmp_CPPFLAGS"
10184 10186
10185 10187
10186 10188
10189
10187case "${window_system}" in 10190case "${window_system}" in
10188 x11 ) 10191 x11 )
10189 HAVE_X_WINDOWS=yes 10192 HAVE_X_WINDOWS=yes
@@ -21622,7 +21625,7 @@ HAVE_LIBNCURSES=yes
21622 21625
21623## Use terminfo instead of termcap? 21626## Use terminfo instead of termcap?
21624## Note only system files NOT using terminfo are: 21627## Note only system files NOT using terminfo are:
21625## freebsd < 40000, ms-w32, msdos, netbsd, and 21628## freebsd < 40000, ms-w32, msdos, netbsd < 599002500, and
21626## darwin|gnu without ncurses. 21629## darwin|gnu without ncurses.
21627TERMINFO=no 21630TERMINFO=no
21628LIBS_TERMCAP= 21631LIBS_TERMCAP=
@@ -21715,13 +21718,22 @@ $as_echo "$emacs_cv_freebsd_terminfo" >&6; }
21715 fi 21718 fi
21716 ;; 21719 ;;
21717 21720
21721 netbsd)
21722 if test $ac_cv_search_tputs = -lterminfo; then
21723 TERMINFO=yes
21724 LIBS_TERMCAP="-lterminfo"
21725 else
21726 LIBS_TERMCAP="-ltermcap"
21727 fi
21728 ;;
21729
21718esac 21730esac
21719 21731
21720case "$opsys" in 21732case "$opsys" in
21721 ## hpux: Make sure we get select from libc rather than from libcurses 21733 ## hpux: Make sure we get select from libc rather than from libcurses
21722 ## because libcurses on HPUX 10.10 has a broken version of select. 21734 ## because libcurses on HPUX 10.10 has a broken version of select.
21723 ## We used to use -lc -lcurses, but this may be cleaner. 21735 ## We used to use -lc -lcurses, but this may be cleaner.
21724 hpux*|netbsd) LIBS_TERMCAP="-ltermcap" ;; 21736 hpux*) LIBS_TERMCAP="-ltermcap" ;;
21725 21737
21726 openbsd) LIBS_TERMCAP="-lncurses" ;; 21738 openbsd) LIBS_TERMCAP="-lncurses" ;;
21727 21739
@@ -26491,7 +26503,6 @@ else
26491fi 26503fi
26492 26504
26493 26505
26494
26495## The X Menu stuff is present in the X10 distribution, but missing 26506## The X Menu stuff is present in the X10 distribution, but missing
26496## from X11. If we have X10, just use the installed library; 26507## from X11. If we have X10, just use the installed library;
26497## otherwise, use our own copy. 26508## otherwise, use our own copy.
@@ -26511,7 +26522,9 @@ _ACEOF
26511 LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)" 26522 LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
26512 OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}" 26523 OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}"
26513else 26524else
26514 OLDXMENU= 26525 ## For a syntactically valid Makefile; not actually used for anything.
26526 ## See comments in src/Makefile.in.
26527 OLDXMENU=nothing
26515 ## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?). 26528 ## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?).
26516 if test "${HAVE_X_WINDOWS}" = "yes"; then 26529 if test "${HAVE_X_WINDOWS}" = "yes"; then
26517 LIBXMENU="-lXMenu" 26530 LIBXMENU="-lXMenu"
@@ -26523,7 +26536,8 @@ else
26523fi 26536fi
26524 26537
26525if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then 26538if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then
26526 OLDXMENU= 26539 OLDXMENU_TARGET=
26540 OLDXMENU=nothing
26527 LIBXMENU= 26541 LIBXMENU=
26528 OLDXMENU_DEPS= 26542 OLDXMENU_DEPS=
26529fi 26543fi
@@ -26533,6 +26547,7 @@ fi
26533 26547
26534 26548
26535 26549
26550
26536if test "${HAVE_MENUS}" = "yes" ; then 26551if test "${HAVE_MENUS}" = "yes" ; then
26537 26552
26538cat >>confdefs.h <<\_ACEOF 26553cat >>confdefs.h <<\_ACEOF
@@ -26616,8 +26631,79 @@ fi
26616 26631
26617 26632
26618 26633
26634LINKER=
26635ORDINARY_LINK=
26636case "$opsys" in
26637 ## gnu: GNU needs its own crt0.
26638 aix4-2|darwin|gnu|usg5-4|irix6-5|sol2*|unixware) ORDINARY_LINK=yes ;;
26639
26640 cygwin) LINKER="\$(CC)" ;;
26641
26642 ## On post 1.3 releases of NetBSD, gcc -nostdlib also clears the
26643 ## library search parth, i.e. it won't search /usr/lib for libc and
26644 ## friends. Using -nostartfiles instead avoids this problem, and
26645 ## will also work on earlier NetBSD releases.
26646 netbsd|openbsd) LINKER="\$(CC) -nostartfiles" ;;
26647
26648 ## macpcc: NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> says
26649 ## MkLinux/LinuxPPC needs this.
26650 ## ibms390x only supports opsys = gnu-linux so it can be added here.
26651 gnu-*)
26652 case "$machine" in
26653 macppc|ibms390x) LINKER="\$(CC) -nostdlib" ;;
26654 esac
26655 ;;
26656esac
26657
26658## A macro which other sections of Makefile can redefine to munge the
26659## flags before they are passed to LD. This is helpful if you have
26660## redefined LD to something odd, like "gcc".
26661## (The YMF prefix is a holdover from the old name "ymakefile".)
26662YMF_PASS_LDFLAGS=flags
26663if test "x$ORDINARY_LINK" = "xyes"; then
26664
26665 LINKER="\$(CC)"
26666
26667cat >>confdefs.h <<\_ACEOF
26668#define ORDINARY_LINK 1
26669_ACEOF
26670
26671
26672## The system files defining neither ORDINARY_LINK nor LINKER are:
26673## (bsd-common), freebsd, gnu-* not on macppc|ibms390x, hpux*.
26674elif test "x$GCC" = "xyes" && test "x$LINKER" = "x"; then
26675
26676 ## Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
26677 ## places that are difficult to figure out at make time. Fortunately,
26678 ## these same versions allow you to pass arbitrary flags on to the
26679 ## linker, so there is no reason not to use it as a linker.
26680 ##
26681 ## Well, it is not quite perfect. The "-nostdlib" keeps GCC from
26682 ## searching for libraries in its internal directories, so we have to
26683 ## ask GCC explicitly where to find libgcc.a (LIB_GCC below).
26684 LINKER="\$(CC) -nostdlib"
26685 ## GCC passes any argument prefixed with -Xlinker directly to the linker.
26686 ## See prefix-args.c for an explanation of why we do not do this with the
26687 ## shell''s ``for'' construct. Note that sane people do not have '.' in
26688 ## their paths, so we must use ./prefix-args.
26689 ## TODO either make prefix-args check ORDINARY_LINK internally,
26690 ## or remove it altogether (bug#6184), removing the need for this macro.
26691 YMF_PASS_LDFLAGS='`./prefix-args -Xlinker flags`'
26692fi
26693
26694
26695test "x$LINKER" = "x" && LINKER=ld
26696## FIXME? What setting of YMF_PASS_LDFLAGS should this have?
26697test "$NS_IMPL_GNUSTEP" = "yes" && LINKER="\$(CC) -rdynamic"
26698
26699
26700
26701
26702## FIXME? The logic here is not precisely the same as that above
26703## setting YMF_PASS_LDFLAGS. There is no check here for a pre-defined
26704## LINKER. Should we only be setting LIB_GCC if LD ~ -nostdlib?
26619LIB_GCC= 26705LIB_GCC=
26620if test "x$GCC" = "xyes"; then 26706if test "x$GCC" = "xyes" && test "x$ORDINARY_LINK" != "xyes"; then
26621 26707
26622 case "$opsys" in 26708 case "$opsys" in
26623 ## cygwin: don't link against static libgcc. 26709 ## cygwin: don't link against static libgcc.
@@ -27458,7 +27544,24 @@ $debug ||
27458# This happens for instance with `./config.status config.h'. 27544# This happens for instance with `./config.status config.h'.
27459if test -n "$CONFIG_FILES"; then 27545if test -n "$CONFIG_FILES"; then
27460 27546
27461 27547if $AWK 'BEGIN { getline <"/dev/null" }' </dev/null 2>/dev/null; then
27548 ac_cs_awk_getline=:
27549 ac_cs_awk_pipe_init=
27550 ac_cs_awk_read_file='
27551 while ((getline aline < (F[key])) > 0)
27552 print(aline)
27553 close(F[key])'
27554 ac_cs_awk_pipe_fini=
27555else
27556 ac_cs_awk_getline=false
27557 ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
27558 ac_cs_awk_read_file='
27559 print "|#_!!_#|"
27560 print "cat " F[key] " &&"
27561 '$ac_cs_awk_pipe_init
27562 # The final `:' finishes the AND list.
27563 ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }'
27564fi
27462ac_cr=' ' 27565ac_cr=' '
27463ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` 27566ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
27464if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then 27567if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
@@ -27470,6 +27573,19 @@ fi
27470echo 'BEGIN {' >"$tmp/subs1.awk" && 27573echo 'BEGIN {' >"$tmp/subs1.awk" &&
27471_ACEOF 27574_ACEOF
27472 27575
27576# Create commands to substitute file output variables.
27577{
27578 echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
27579 echo 'cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&' &&
27580 echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' &&
27581 echo "_ACAWK" &&
27582 echo "_ACEOF"
27583} >conf$$files.sh &&
27584. ./conf$$files.sh ||
27585 { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
27586$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
27587 { (exit 1); exit 1; }; }
27588rm -f conf$$files.sh
27473 27589
27474{ 27590{
27475 echo "cat >conf$$subs.awk <<_ACEOF" && 27591 echo "cat >conf$$subs.awk <<_ACEOF" &&
@@ -27551,7 +27667,7 @@ _ACAWK
27551cat >>"\$tmp/subs1.awk" <<_ACAWK && 27667cat >>"\$tmp/subs1.awk" <<_ACAWK &&
27552 for (key in S) S_is_set[key] = 1 27668 for (key in S) S_is_set[key] = 1
27553 FS = "" 27669 FS = ""
27554 27670 \$ac_cs_awk_pipe_init
27555} 27671}
27556{ 27672{
27557 line = $ 0 27673 line = $ 0
@@ -27569,10 +27685,16 @@ cat >>"\$tmp/subs1.awk" <<_ACAWK &&
27569 } else 27685 } else
27570 len += 1 + keylen 27686 len += 1 + keylen
27571 } 27687 }
27572 27688 if (nfields == 3 && !substed) {
27689 key = field[2]
27690 if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) {
27691 \$ac_cs_awk_read_file
27692 next
27693 }
27694 }
27573 print line 27695 print line
27574} 27696}
27575 27697\$ac_cs_awk_pipe_fini
27576_ACAWK 27698_ACAWK
27577_ACEOF 27699_ACEOF
27578cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 27700cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -27959,7 +28081,12 @@ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
27959s&@INSTALL@&$ac_INSTALL&;t t 28081s&@INSTALL@&$ac_INSTALL&;t t
27960$ac_datarootdir_hack 28082$ac_datarootdir_hack
27961" 28083"
27962eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ 28084eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
28085if $ac_cs_awk_getline; then
28086 $AWK -f "$tmp/subs.awk"
28087else
28088 $AWK -f "$tmp/subs.awk" | $SHELL
28089fi >$tmp/out \
27963 || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 28090 || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
27964$as_echo "$as_me: error: could not create $ac_file" >&2;} 28091$as_echo "$as_me: error: could not create $ac_file" >&2;}
27965 { (exit 1); exit 1; }; } 28092 { (exit 1); exit 1; }; }
diff --git a/configure.in b/configure.in
index 57fb0548f53..36359e25072 100644
--- a/configure.in
+++ b/configure.in
@@ -2,9 +2,11 @@ dnl Autoconf script for GNU Emacs
2dnl To rebuild the `configure' script from this, execute the command 2dnl To rebuild the `configure' script from this, execute the command
3dnl autoconf 3dnl autoconf
4dnl in the directory containing this script. 4dnl in the directory containing this script.
5dnl If you changed any AC_DEFINES, also run autoheader.
5dnl 6dnl
6dnl Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003, 7dnl Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003, 2004,
7dnl 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 8dnl 2005, 2006, 2007, 2008, 2009, 2010
9dnl Free Software Foundation, Inc.
8dnl 10dnl
9dnl This file is part of GNU Emacs. 11dnl This file is part of GNU Emacs.
10dnl 12dnl
@@ -168,15 +170,6 @@ OPTION_DEFAULT_ON([selinux],[don't compile with SELinux support])
168dnl http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01844.html 170dnl http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01844.html
169OPTION_DEFAULT_ON([makeinfo],[don't require makeinfo for building manuals]) 171OPTION_DEFAULT_ON([makeinfo],[don't require makeinfo for building manuals])
170 172
171dnl Can remove these in Emacs 24.
172AC_ARG_WITH([gtk],,
173 [AC_MSG_ERROR([--with-gtk has been removed. Use --with-x-toolkit to
174specify a toolkit.])],,)
175
176AC_ARG_WITH([gcc],,
177 [AC_MSG_ERROR([--with-gcc has been removed. Set the `CC' environment
178variable to specify a compiler.])],,)
179
180AC_ARG_WITH([pkg-config-prog],dnl 173AC_ARG_WITH([pkg-config-prog],dnl
181[AS_HELP_STRING([--with-pkg-config-prog=PATH], 174[AS_HELP_STRING([--with-pkg-config-prog=PATH],
182 [path to pkg-config for finding GTK and librsvg])]) 175 [path to pkg-config for finding GTK and librsvg])])
@@ -864,6 +857,12 @@ configure___ LIBX=-lX11
864 857
865configure___ unexec=UNEXEC 858configure___ unexec=UNEXEC
866 859
860#ifdef CANNOT_DUMP
861configure___ cannot_dump=yes
862#else
863configure___ cannot_dump=no
864#endif
865
867#ifdef SYSTEM_MALLOC 866#ifdef SYSTEM_MALLOC
868configure___ system_malloc=yes 867configure___ system_malloc=yes
869#else 868#else
@@ -925,6 +924,9 @@ fi]
925rm ${tempcname} 924rm ${tempcname}
926 925
927 926
927AC_SUBST(cannot_dump)
928
929
928LD_SWITCH_SYSTEM= 930LD_SWITCH_SYSTEM=
929case "$opsys" in 931case "$opsys" in
930 freebsd) 932 freebsd)
@@ -1348,6 +1350,9 @@ dnl AC_C_BIGENDIAN
1348dnl check for Make feature 1350dnl check for Make feature
1349AC_PROG_MAKE_SET 1351AC_PROG_MAKE_SET
1350 1352
1353DEPFLAGS=
1354MKDEPDIR=":"
1355deps_frag=deps.mk
1351dnl check for GNU Make if we have GCC and autodepend is on. 1356dnl check for GNU Make if we have GCC and autodepend is on.
1352if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then 1357if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
1353 AC_MSG_CHECKING([whether we are using GNU Make]) 1358 AC_MSG_CHECKING([whether we are using GNU Make])
@@ -1370,9 +1375,19 @@ if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
1370 AC_MSG_RESULT([$ac_enable_autodepend]) 1375 AC_MSG_RESULT([$ac_enable_autodepend])
1371 fi 1376 fi
1372 if test $ac_enable_autodepend = yes; then 1377 if test $ac_enable_autodepend = yes; then
1373 AC_DEFINE(AUTO_DEPEND, 1, [Generate dependencies with gcc.]) 1378 DEPFLAGS='-MMD -MF ${DEPDIR}/$*.d'
1379 ## In parallel builds, another make might create depdir between
1380 ## the first test and mkdir, so stick another test on the end.
1381 ## Or use mkinstalldirs? mkdir -p is not portable.
1382 MKDEPDIR='test -d ${DEPDIR} || mkdir ${DEPDIR} || test -d ${DEPDIR}'
1383 deps_frag=autodeps.mk
1374 fi 1384 fi
1375fi 1385fi
1386deps_frag=$srcdir/src/$deps_frag
1387AC_SUBST(MKDEPDIR)
1388AC_SUBST(DEPFLAGS)
1389AC_SUBST_FILE(deps_frag)
1390
1376 1391
1377dnl checks for operating system services 1392dnl checks for operating system services
1378AC_SYS_LONG_FILE_NAMES 1393AC_SYS_LONG_FILE_NAMES
@@ -1480,6 +1495,7 @@ if test "${with_ns}" != no; then
1480 GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)" 1495 GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)"
1481 GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)" 1496 GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)"
1482 ## Pull in stuff from GNUstep-make. 1497 ## Pull in stuff from GNUstep-make.
1498 ## FIXME? Cleaner to use AC_SUBST_FILE for this?
1483 NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu 1499 NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu
1484GUI_LIB=gnu 1500GUI_LIB=gnu
1485include $GNUSTEP_MAKEFILES/Additional/base.make 1501include $GNUSTEP_MAKEFILES/Additional/base.make
@@ -1512,6 +1528,7 @@ AC_SUBST(NS_IMPL_GNUSTEP_INC)
1512AC_SUBST(NS_IMPL_GNUSTEP_TEMACS_LDFLAGS) 1528AC_SUBST(NS_IMPL_GNUSTEP_TEMACS_LDFLAGS)
1513AC_SUBST(TEMACS_LDFLAGS2) 1529AC_SUBST(TEMACS_LDFLAGS2)
1514 1530
1531ns_frag=/dev/null
1515NS_OBJ= 1532NS_OBJ=
1516NS_SUPPORT= 1533NS_SUPPORT=
1517if test "${HAVE_NS}" = yes; then 1534if test "${HAVE_NS}" = yes; then
@@ -1523,6 +1540,7 @@ if test "${HAVE_NS}" = yes; then
1523 if test "${EN_NS_SELF_CONTAINED}" = yes; then 1540 if test "${EN_NS_SELF_CONTAINED}" = yes; then
1524 prefix=${ns_appresdir} 1541 prefix=${ns_appresdir}
1525 fi 1542 fi
1543 ns_frag=$srcdir/src/ns.mk
1526 NS_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o fontset.o fringe.o image.o" 1544 NS_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o fontset.o fringe.o image.o"
1527 NS_SUPPORT="\${lispsource}emacs-lisp/easymenu.elc \${lispsource}term/ns-win.elc" 1545 NS_SUPPORT="\${lispsource}emacs-lisp/easymenu.elc \${lispsource}term/ns-win.elc"
1528fi 1546fi
@@ -1531,6 +1549,7 @@ CPPFLAGS="$tmp_CPPFLAGS"
1531AC_SUBST(NS_OBJ) 1549AC_SUBST(NS_OBJ)
1532AC_SUBST(NS_SUPPORT) 1550AC_SUBST(NS_SUPPORT)
1533AC_SUBST(LIB_STANDARD) 1551AC_SUBST(LIB_STANDARD)
1552AC_SUBST_FILE(ns_frag)
1534 1553
1535case "${window_system}" in 1554case "${window_system}" in
1536 x11 ) 1555 x11 )
@@ -2640,7 +2659,7 @@ HAVE_LIBNCURSES=yes
2640 2659
2641## Use terminfo instead of termcap? 2660## Use terminfo instead of termcap?
2642## Note only system files NOT using terminfo are: 2661## Note only system files NOT using terminfo are:
2643## freebsd < 40000, ms-w32, msdos, netbsd, and 2662## freebsd < 40000, ms-w32, msdos, netbsd < 599002500, and
2644## darwin|gnu without ncurses. 2663## darwin|gnu without ncurses.
2645TERMINFO=no 2664TERMINFO=no
2646LIBS_TERMCAP= 2665LIBS_TERMCAP=
@@ -2682,13 +2701,22 @@ fail;
2682 fi 2701 fi
2683 ;; 2702 ;;
2684 2703
2704 netbsd)
2705 if test $ac_cv_search_tputs = -lterminfo; then
2706 TERMINFO=yes
2707 LIBS_TERMCAP="-lterminfo"
2708 else
2709 LIBS_TERMCAP="-ltermcap"
2710 fi
2711 ;;
2712
2685esac 2713esac
2686 2714
2687case "$opsys" in 2715case "$opsys" in
2688 ## hpux: Make sure we get select from libc rather than from libcurses 2716 ## hpux: Make sure we get select from libc rather than from libcurses
2689 ## because libcurses on HPUX 10.10 has a broken version of select. 2717 ## because libcurses on HPUX 10.10 has a broken version of select.
2690 ## We used to use -lc -lcurses, but this may be cleaner. 2718 ## We used to use -lc -lcurses, but this may be cleaner.
2691 hpux*|netbsd) LIBS_TERMCAP="-ltermcap" ;; 2719 hpux*) LIBS_TERMCAP="-ltermcap" ;;
2692 2720
2693 openbsd) LIBS_TERMCAP="-lncurses" ;; 2721 openbsd) LIBS_TERMCAP="-lncurses" ;;
2694 2722
@@ -3159,7 +3187,6 @@ else
3159 OLDXMENU_TARGET="really-lwlib" 3187 OLDXMENU_TARGET="really-lwlib"
3160fi 3188fi
3161AC_SUBST(LIBXT_OTHER) 3189AC_SUBST(LIBXT_OTHER)
3162AC_SUBST(OLDXMENU_TARGET)
3163 3190
3164## The X Menu stuff is present in the X10 distribution, but missing 3191## The X Menu stuff is present in the X10 distribution, but missing
3165## from X11. If we have X10, just use the installed library; 3192## from X11. If we have X10, just use the installed library;
@@ -3178,7 +3205,9 @@ if test "${HAVE_X11}" = "yes" ; then
3178 LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)" 3205 LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
3179 OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}" 3206 OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}"
3180else 3207else
3181 OLDXMENU= 3208 ## For a syntactically valid Makefile; not actually used for anything.
3209 ## See comments in src/Makefile.in.
3210 OLDXMENU=nothing
3182 ## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?). 3211 ## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?).
3183 if test "${HAVE_X_WINDOWS}" = "yes"; then 3212 if test "${HAVE_X_WINDOWS}" = "yes"; then
3184 LIBXMENU="-lXMenu" 3213 LIBXMENU="-lXMenu"
@@ -3190,11 +3219,13 @@ else
3190fi 3219fi
3191 3220
3192if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then 3221if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then
3193 OLDXMENU= 3222 OLDXMENU_TARGET=
3223 OLDXMENU=nothing
3194 LIBXMENU= 3224 LIBXMENU=
3195 OLDXMENU_DEPS= 3225 OLDXMENU_DEPS=
3196fi 3226fi
3197 3227
3228AC_SUBST(OLDXMENU_TARGET)
3198AC_SUBST(OLDXMENU) 3229AC_SUBST(OLDXMENU)
3199AC_SUBST(LIBXMENU) 3230AC_SUBST(LIBXMENU)
3200AC_SUBST(LIBX_OTHER) 3231AC_SUBST(LIBX_OTHER)
@@ -3277,8 +3308,75 @@ fi
3277AC_SUBST(LD_SWITCH_SYSTEM_EXTRA) 3308AC_SUBST(LD_SWITCH_SYSTEM_EXTRA)
3278 3309
3279 3310
3311LINKER=
3312ORDINARY_LINK=
3313case "$opsys" in
3314 ## gnu: GNU needs its own crt0.
3315 aix4-2|darwin|gnu|usg5-4|irix6-5|sol2*|unixware) ORDINARY_LINK=yes ;;
3316
3317 cygwin) LINKER="\$(CC)" ;;
3318
3319 ## On post 1.3 releases of NetBSD, gcc -nostdlib also clears the
3320 ## library search parth, i.e. it won't search /usr/lib for libc and
3321 ## friends. Using -nostartfiles instead avoids this problem, and
3322 ## will also work on earlier NetBSD releases.
3323 netbsd|openbsd) LINKER="\$(CC) -nostartfiles" ;;
3324
3325 ## macpcc: NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> says
3326 ## MkLinux/LinuxPPC needs this.
3327 ## ibms390x only supports opsys = gnu-linux so it can be added here.
3328 gnu-*)
3329 case "$machine" in
3330 macppc|ibms390x) LINKER="\$(CC) -nostdlib" ;;
3331 esac
3332 ;;
3333esac
3334
3335## A macro which other sections of Makefile can redefine to munge the
3336## flags before they are passed to LD. This is helpful if you have
3337## redefined LD to something odd, like "gcc".
3338## (The YMF prefix is a holdover from the old name "ymakefile".)
3339YMF_PASS_LDFLAGS=flags
3340if test "x$ORDINARY_LINK" = "xyes"; then
3341
3342 LINKER="\$(CC)"
3343 AC_DEFINE(ORDINARY_LINK, 1, [Define if the C compiler is the linker.])
3344
3345## The system files defining neither ORDINARY_LINK nor LINKER are:
3346## (bsd-common), freebsd, gnu-* not on macppc|ibms390x, hpux*.
3347elif test "x$GCC" = "xyes" && test "x$LINKER" = "x"; then
3348
3349 ## Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
3350 ## places that are difficult to figure out at make time. Fortunately,
3351 ## these same versions allow you to pass arbitrary flags on to the
3352 ## linker, so there is no reason not to use it as a linker.
3353 ##
3354 ## Well, it is not quite perfect. The "-nostdlib" keeps GCC from
3355 ## searching for libraries in its internal directories, so we have to
3356 ## ask GCC explicitly where to find libgcc.a (LIB_GCC below).
3357 LINKER="\$(CC) -nostdlib"
3358 ## GCC passes any argument prefixed with -Xlinker directly to the linker.
3359 ## See prefix-args.c for an explanation of why we do not do this with the
3360 ## shell''s ``for'' construct. Note that sane people do not have '.' in
3361 ## their paths, so we must use ./prefix-args.
3362 ## TODO either make prefix-args check ORDINARY_LINK internally,
3363 ## or remove it altogether (bug#6184), removing the need for this macro.
3364 YMF_PASS_LDFLAGS='`./prefix-args -Xlinker flags`'
3365fi
3366AC_SUBST(YMF_PASS_LDFLAGS)
3367
3368test "x$LINKER" = "x" && LINKER=ld
3369## FIXME? What setting of YMF_PASS_LDFLAGS should this have?
3370test "$NS_IMPL_GNUSTEP" = "yes" && LINKER="\$(CC) -rdynamic"
3371
3372AC_SUBST(LINKER)
3373
3374
3375## FIXME? The logic here is not precisely the same as that above
3376## setting YMF_PASS_LDFLAGS. There is no check here for a pre-defined
3377## LINKER. Should we only be setting LIB_GCC if LD ~ -nostdlib?
3280LIB_GCC= 3378LIB_GCC=
3281if test "x$GCC" = "xyes"; then 3379if test "x$GCC" = "xyes" && test "x$ORDINARY_LINK" != "xyes"; then
3282 3380
3283 case "$opsys" in 3381 case "$opsys" in
3284 ## cygwin: don't link against static libgcc. 3382 ## cygwin: don't link against static libgcc.
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 94a0e72ca85..1ed5b7ea928 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,8 @@
12010-05-22 Chong Yidong <cyd@stupidchicken.com>
2
3 * display.texi (Image Cache): Update documentation about image
4 caching.
5
12010-05-08 Štěpán Němec <stepnem@gmail.com> (tiny change) 62010-05-08 Štěpán Němec <stepnem@gmail.com> (tiny change)
2 7
3 * windows.texi (Textual Scrolling): 8 * windows.texi (Textual Scrolling):
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 68631dcdefc..622de2cd3cf 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -4730,29 +4730,35 @@ cache, it can always be displayed, even if the value of
4730efficiently. When Emacs displays an image, it searches the image 4730efficiently. When Emacs displays an image, it searches the image
4731cache for an existing image specification @code{equal} to the desired 4731cache for an existing image specification @code{equal} to the desired
4732specification. If a match is found, the image is displayed from the 4732specification. If a match is found, the image is displayed from the
4733cache; otherwise, Emacs loads the image normally. 4733cache. Otherwise, Emacs loads the image normally.
4734 4734
4735 Occasionally, you may need to tell Emacs to refresh the images 4735@defun image-flush spec &optional frame
4736associated with a given image specification. For example, suppose you 4736This function removes the image with specification @var{spec} from the
4737display an image using a specification that contains a @code{:file} 4737image cache of frame @var{frame}. Image specifications are compared
4738property. The image is automatically cached, and subsequent displays 4738using @code{equal}. If @var{frame} is @code{nil}, it defaults to the
4739of that image, with the same image specification, will use the image 4739selected frame. If @var{frame} is @code{t}, the image is flushed on
4740cache. If the image file changes in the meantime, Emacs would be 4740all existing frames.
4741displaying the old version of the image. In such a situation, you can 4741
4742``refresh'' the image by calling @code{image-refresh}. 4742In Emacs' current implementation, each graphical terminal possesses an
4743 4743image cache, which is shared by all the frames on that terminal
4744 In Emacs' current implementation, each graphical terminal possesses
4745an image cache, which is shared by all the frames on that terminal
4746(@pxref{Multiple Terminals}). Thus, refreshing an image in one frame 4744(@pxref{Multiple Terminals}). Thus, refreshing an image in one frame
4747also refreshes it in all other frames on the same terminal. 4745also refreshes it in all other frames on the same terminal.
4748
4749@defun image-refresh spec &optional frame
4750This function refreshes any images with image specifications
4751@code{equal} to @var{spec} on frame @var{frame}. If @var{frame} is
4752@code{nil}, it defaults to the selected frame. If @var{frame} is
4753@code{t}, the refresh is applied to all existing frames.
4754@end defun 4746@end defun
4755 4747
4748 One use for @code{image-flush} is to tell Emacs about a change in an
4749image file. If an image specification contains a @code{:file}
4750property, the image is cached based on the file's contents when the
4751image is first displayed. Even if the file subsequently changes,
4752Emacs continues displaying the old version of the image. Calling
4753@code{image-flush} flushes the image from the cache, forcing Emacs to
4754re-read the file the next time it needs to display that image.
4755
4756 Another use for @code{image-flush} is for memory conservation. If
4757your Lisp program creates a large number of temporary images over a
4758period much shorter than @code{image-cache-eviction-delay} (see
4759below), you can opt to flush unused images yourself, instead of
4760waiting for Emacs to do it automatically.
4761
4756@defun clear-image-cache &optional filter 4762@defun clear-image-cache &optional filter
4757This function clears an image cache, removing all the images stored in 4763This function clears an image cache, removing all the images stored in
4758it. If @var{filter} is omitted or @code{nil}, it clears the cache for 4764it. 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
4768associated memory. 4774associated memory.
4769 4775
4770@defvar image-cache-eviction-delay 4776@defvar image-cache-eviction-delay
4771This variable specifies the number of seconds an image can remain in the 4777This variable specifies the number of seconds an image can remain in
4772cache without being displayed. When an image is not displayed for this 4778the cache without being displayed. When an image is not displayed for
4773length of time, Emacs removes it from the image cache. 4779this length of time, Emacs removes it from the image cache.
4780
4781Under some circumstances, if the number of images in the cache grows
4782too large, the actual eviction delay may be shorter than this.
4774 4783
4775If the value is @code{nil}, Emacs does not remove images from the cache 4784If the value is @code{nil}, Emacs does not remove images from the cache
4776except when you explicitly clear it. This mode can be useful for 4785except when you explicitly clear it. This mode can be useful for
diff --git a/etc/NEWS b/etc/NEWS
index 0d07a160ac1..c5871ebd98a 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -147,6 +147,11 @@ Use the arrow to the left of the option name to toggle visibility.
147*** The color widget now has a "Choose" button, which allows you to 147*** The color widget now has a "Choose" button, which allows you to
148choose a color via list-colors-display. 148choose a color via list-colors-display.
149 149
150** Dired-x
151
152*** dired-jump and dired-jump-other-window called with a prefix argument
153read a file name from the minibuffer instead of using buffer-file-name.
154
150** VC and related modes 155** VC and related modes
151 156
152*** New VC commands: vc-log-incoming, vc-log-outgoing, vc-find-conflicted-file. 157*** 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.
250 255
251*** `image-extension-data' is renamed to `image-metadata'. 256*** `image-extension-data' is renamed to `image-metadata'.
252 257
258** Isearch
259
260*** New hook `isearch-update-post-hook' that runs in `isearch-update'.
261
253** Progress reporters can now "spin". 262** Progress reporters can now "spin".
254The MIN-VALUE and MAX-VALUE arguments of `make-progress-reporter' can 263The MIN-VALUE and MAX-VALUE arguments of `make-progress-reporter' can
255now be nil, or omitted. This makes a "non-numeric" reporter. Each 264now be nil, or omitted. This makes a "non-numeric" reporter. Each
diff --git a/etc/TODO b/etc/TODO
index f21d105b2cd..78ef0213b93 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -40,9 +40,9 @@ make it.
40 fix_submap_inheritance hack and to more cleanly express the 40 fix_submap_inheritance hack and to more cleanly express the
41 relationship between minibuffer-local-*-map): I've had this locally 41 relationship between minibuffer-local-*-map): I've had this locally
42 for a long time, but the details of the semantics is somewhat ... delicate. 42 for a long time, but the details of the semantics is somewhat ... delicate.
43*** prog-mode (a parent-mode, like text-mode). Could/should provide 43*** Derive from prog-mode in more places, close bug#5532.
44 a better fill-paragraph default that uses syntax-tables to recognize 44*** prog-mode could/should provide a better fill-paragraph default
45 string/comment boundaries. 45 that uses syntax-tables to recognize string/comment boundaries.
46*** provide more completion-at-point-functions. Make existing 46*** provide more completion-at-point-functions. Make existing
47 in-buffer completion use completion-at-point. 47 in-buffer completion use completion-at-point.
48*** "functional" function-key-map that would make it easy to add (and 48*** "functional" function-key-map that would make it easy to add (and
@@ -181,7 +181,14 @@ dired buffers and DTRT WRT `auto-revert-mode'.
181http://lists.gnu.org/archive/html/emacs-devel/2008-08/msg00456.html 181http://lists.gnu.org/archive/html/emacs-devel/2008-08/msg00456.html
182 182
183* Important features: 183* Important features:
184 184** Extended text-properties (to make overlays "obsolete")
185*** Several text-property planes
186This would get us rid of font-lock-face property (and I'd be happy to
187get rid of char-property-alias-alist as well) since font-lock would
188simply use the `face' property in the `font-lock' plane.
189Each property would come with an Elisp merge-function. The merge
190would be performed in add-text-properties.
191*** zero-width text-properties.
185** Having tabs above a window to switch buffers in it. 192** Having tabs above a window to switch buffers in it.
186 193
187** "Perspectives" are named persistent window configurations. We have 194** "Perspectives" are named persistent window configurations. We have
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 36e2f29e58f..d2c7301fb6f 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,11 @@
12010-05-22 Jan Djärv <jan.h.d@swipnet.se>
2
3 * Makefile.in (STAMP_INST_SCRIPTS, STAMP_SCRIPS): New (Bug #6246).
4 (all): Depend onSTAMP_INST_SCRIPTS, STAMP_SCRIPS (Bug #6246).
5 (stamp-rcs2log, stamp-rcs-checkin, stamp-grep-changelog, stamp-vcdiff):
6 New rules (Bug #6246).
7 (clean): Remove stamp-* (Bug #6246).
8
12010-05-12 Glenn Morris <rgm@gnu.org> 92010-05-12 Glenn Morris <rgm@gnu.org>
2 10
3 * Makefile.in (INSTALLABLES): Remove @LIB_SRC_EXTRA_INSTALLABLES@. 11 * Makefile.in (INSTALLABLES): Remove @LIB_SRC_EXTRA_INSTALLABLES@.
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index 6202feb890c..1c19dec276b 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -111,6 +111,7 @@ INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} \
111 b2m${EXEEXT} ebrowse${EXEEXT} 111 b2m${EXEEXT} ebrowse${EXEEXT}
112 112
113INSTALLABLE_SCRIPTS = rcs-checkin grep-changelog 113INSTALLABLE_SCRIPTS = rcs-checkin grep-changelog
114STAMP_INST_SCRIPTS = stamp-rcs-checkin stamp-grep-changelog
114 115
115# Things that Emacs runs internally, or during the build process, 116# Things that Emacs runs internally, or during the build process,
116# which should not be installed in bindir. 117# which should not be installed in bindir.
@@ -123,6 +124,7 @@ DONT_INSTALL= test-distrib${EXEEXT} make-docfile${EXEEXT}
123# Like UTILITIES, but they're not system-dependent, and should not be 124# Like UTILITIES, but they're not system-dependent, and should not be
124# deleted by the distclean target. 125# deleted by the distclean target.
125SCRIPTS= rcs2log vcdiff 126SCRIPTS= rcs2log vcdiff
127STAMP_SCRIPTS= stamp-rcs2log stamp-vcdiff
126 128
127EXECUTABLES= ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS} 129EXECUTABLES= ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS}
128 130
@@ -180,23 +182,27 @@ LOADLIBES=$(LIBS_SYSTEM)
180.c.o: 182.c.o:
181 ${CC} -c ${CPP_CFLAGS} $< 183 ${CC} -c ${CPP_CFLAGS} $<
182 184
183all: ${DONT_INSTALL} ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS} 185all: ${DONT_INSTALL} ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS} ${STAMP_INST_SCRIPTS} ${STAMP_SCRIPTS}
184 186
185## These targets copy the scripts into the build directory so that 187## These targets copy the scripts into the build directory so that
186## they can be run from there in an uninstalled Emacs. 188## they can be run from there in an uninstalled Emacs.
187## The "-" is prepended because some versions of cp barf when srcdir 189## The "-" is prepended because some versions of cp barf when srcdir
188## is the current directory, and thus the file will be copied into itself. 190## is the current directory, and thus the file will be copied into itself.
189rcs2log: $(srcdir)/rcs2log 191stamp-rcs2log: $(srcdir)/rcs2log
190 -cp -p $(srcdir)/rcs2log rcs2log 192 -cp -p $(srcdir)/rcs2log rcs2log
193 touch $@
191 194
192rcs-checkin: $(srcdir)/rcs-checkin 195stamp-rcs-checkin: $(srcdir)/rcs-checkin
193 -cp -p $(srcdir)/rcs-checkin rcs-checkin 196 -cp -p $(srcdir)/rcs-checkin rcs-checkin
197 touch $@
194 198
195grep-changelog: $(srcdir)/grep-changelog 199stamp-grep-changelog: $(srcdir)/grep-changelog
196 -cp -p $(srcdir)/grep-changelog grep-changelog 200 -cp -p $(srcdir)/grep-changelog grep-changelog
201 touch $@
197 202
198vcdiff: $(srcdir)/vcdiff 203stamp-vcdiff: $(srcdir)/vcdiff
199 -cp -p $(srcdir)/vcdiff vcdiff 204 -cp -p $(srcdir)/vcdiff vcdiff
205 touch $@
200 206
201## Only used if we need blessmail, but no harm in always defining. 207## Only used if we need blessmail, but no harm in always defining.
202## This makes the actual blessmail executable. 208## This makes the actual blessmail executable.
@@ -273,7 +279,7 @@ mostlyclean:
273 279
274clean: mostlyclean 280clean: mostlyclean
275 -rm -f ${INSTALLABLES} ${UTILITIES} ${DONT_INSTALL} 281 -rm -f ${INSTALLABLES} ${UTILITIES} ${DONT_INSTALL}
276 -rm -f fns*.el *.tab.c *.tab.h 282 -rm -f fns*.el *.tab.c *.tab.h stamp-*
277 283
278distclean: clean 284distclean: clean
279 -rm -f TAGS 285 -rm -f TAGS
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 545311d6530..72f00e60edf 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,8 +1,159 @@
12010-05-22 Chong Yidong <cyd@stupidchicken.com>
2
3 * image.el (image-refresh): Define as an alias for image-flush.
4
5 * image-mode.el (image-toggle-display-image): Caller changed.
6
72010-05-21 Juri Linkov <juri@jurta.org>
8
9 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
10 Remove "all" from grep-files-aliases. Split grep-files-aliases by
11 whitespace, call wildcard-to-regexp on substrings and concat them
12 with "\\|". (Bug#6114)
13
142010-05-21 Alan Mackenzie <acm@muc.de>
15
16 * progmodes/cc-engine.el (c-parse-state-get-strategy): Replace
17 parameter `here' with `here-' and `here-plus', which sandwich any
18 pertinent CPP construct.
19 (c-remove-stale-state-cache-backwards): Fix a bug which happens
20 when doing (c-parse-state) in a CPP construct: Exclude any "new"
21 CPP construct from taking part in the scanning.
22
232010-05-21 Michael Albinus <michael.albinus@gmx.de>
24
25 * net/tramp.el (tramp-do-copy-or-rename-file)
26 (tramp-handle-file-local-copy, tramp-maybe-open-connection): Tune
27 `with-progress-reporter' messages.
28 (tramp-handle-vc-registered):
29 * net/tramp-fish.el (tramp-fish-handle-file-local-copy)
30 (tramp-fish-handle-insert-file-contents)
31 (tramp-fish-maybe-open-connection):
32 * net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
33 * net/tramp-imap.el (tramp-imap-do-copy-or-rename-file)
34 (tramp-imap-handle-insert-file-contents)
35 (tramp-imap-handle-file-local-copy): Use `with-progress-reporter'.
36
372010-05-21 Juanma Barranquero <lekktu@gmail.com>
38
39 * add-log.el (change-log-font-lock-keywords):
40 Highlight all authors in multi-author entries.
41
42 * smerge-mode.el (smerge-refine-ignore-whitespace)
43 (smerge-refine-weight-hack, smerge-refine, smerge-makeup-conflict):
44 Fix typos in docstrings.
45 (smerge-resolve, smerge-refine-subst): Reflow docstrings.
46
472010-05-21 Glenn Morris <rgm@gnu.org>
48
49 * progmodes/fortran.el (fortran-mode):
50 * progmodes/f90.el (f90-mode): Derive from prog-mode.
51
52 * loadup.el [CANNOT_DUMP]: Update for bootstrap-emacs no longer
53 having a relative path in src/Makefile.in.
54
552010-05-20 Kevin Ryde <user42@zip.com.au>
56
57 * help-mode.el (help-make-xrefs): For Info node links turn
58 newlines into spaces. Link node names with newlines are matched
59 by help-xref-info-regexp and buttonized, this change ensures they
60 can be followed successfully with RET. (Bug#6206)
61
622010-05-20 Juri Linkov <juri@jurta.org>
63
64 * locate.el (locate): Use pop-to-buffer instead of
65 switch-to-buffer-other-window. (Bug#6204)
66
672010-05-20 Juri Linkov <juri@jurta.org>
68
69 * replace.el (replace-highlight): Fix lazy-highlighting
70 for `M-s w str M-% str RET'.
71
722009-12-15 Masatake YAMATO <yamato@redhat.com>
73
74 * isearch.el (isearch-yank-word-or-char): Pull next subword
75 when `subword-mode' is activated. (Bug#6220)
76
772010-05-20 Mark A. Hershberger <mah@everybody.org>
78
79 * isearch.el (isearch-update-post-hook): New hook.
80 (isearch-update): Use the new hook. (Bug#6225)
81
822010-05-20 Juri Linkov <juri@jurta.org>
83
84 * isearch.el (isearch-mode-map): Bind more keys to isearch-help-map:
85 [f1], [help], and (char-to-string help-char) instead of "\C-h".
86 (Bug#6222)
87
882010-05-20 Juri Linkov <juri@jurta.org>
89
90 * isearch.el (isearch-yank-string): Use isearch-process-search-string.
91 (Bug#6223)
92
932010-05-20 Juri Linkov <juri@jurta.org>
94
95 * dired-x.el (dired-jump, dired-jump-other-window): Add arg
96 FILE-NAME to read from the minibuffer when called interactively
97 with prefix argument instead of using buffer-file-name.
98 http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00534.html
99
100 * dired.el: Update autoloads.
101
1022010-05-20 Chong Yidong <cyd@stupidchicken.com>
103
104 * nxml/nxml-mode.el (nxml-mode-map): Bind C-c / to
105 nxml-finish-element, for consistency with SGML mode.
106
107 * progmodes/octave-mod.el (octave-mode-map): Bind C-c / to
108 octave-close-block.
109
1102010-05-20 Juanma Barranquero <lekktu@gmail.com>
111
112 * composite.el: Require cl when compiling.
113 (reference-point-alist, compose-gstring-for-graphic)
114 (compose-gstring-for-terminal): Fix typos in docstrings.
115
1162010-05-19 Juri Linkov <juri@jurta.org>
117
118 * emacs-lisp/cl-macs.el (window-parameter): Add defsetf with
119 set-window-parameter.
120
1212010-05-19 Michael Albinus <michael.albinus@gmx.de>
122
123 * net/tramp.el (tramp-methods): Add `tramp-async-args' attribute
124 where appropriate.
125 (tramp-maybe-open-connection): Use it.
126
1272010-05-19 Eli Zaretskii <eliz@gnu.org>
128
129 * simple.el (move-end-of-line): Make sure we are at line beginning
130 before backing up to end of previous line.
131
1322010-05-19 Michael Albinus <michael.albinus@gmx.de>
133
134 * password-cache.el (password-cache-remove): Fix docstring.
135
136 * net/secrets.el: Autoload the widget functions.
137 (secrets-search-items, secrets-create-item)
138 (secrets-get-attributes, secrets-expand-item): Attributes will be
139 stored on the password database without leading ":", as all other
140 clients do as well.
141 (secrets-mode): Fix docstring.
142 (secrets-show-secrets): Provide it as autoloaded command only when
143 D-Bus support is available. Check existence of Secret Service API.
144
1452010-05-19 Stefan Monnier <monnier@iro.umontreal.ca>
146
147 * indent.el (indent-region): Deactivate region (bug#6200).
148
1492010-05-19 Glenn Morris <rgm@gnu.org>
150
151 * vc-dir.el (vc-dir): Don't pop-up-windows. (Bug#6204)
152
12010-05-19 Kenichi Handa <handa@m17n.org> 1532010-05-19 Kenichi Handa <handa@m17n.org>
2 154
3 * composite.el: Register compose-gstring-for-graphic in 155 * composite.el: Register compose-gstring-for-graphic in
4 composition-function-table only for combining characters (Mn, Mc, 156 composition-function-table only for combining characters (Mn, Mc, Me).
5 Me).
6 157
72010-05-18 Jay Belanger <jay.p.belanger@gmail.com> 1582010-05-18 Jay Belanger <jay.p.belanger@gmail.com>
8 159
diff --git a/lisp/add-log.el b/lisp/add-log.el
index ab99f6787c8..88277e66640 100644
--- a/lisp/add-log.el
+++ b/lisp/add-log.el
@@ -245,7 +245,7 @@ Note: The search is conducted only within 10%, at the beginning of the file."
245 ;; wrongly with a non-date line existing as a random note. In 245 ;; wrongly with a non-date line existing as a random note. In
246 ;; addition, using any kind of fixed setting like this doesn't 246 ;; addition, using any kind of fixed setting like this doesn't
247 ;; work if a user customizes add-log-time-format. 247 ;; work if a user customizes add-log-time-format.
248 ("^[0-9-]+ +\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) [A-z][a-z][a-z] [0-9:+ ]+" 248 ("^[0-9-]+ +\\|^ \\{11,\\}\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) [A-z][a-z][a-z] [0-9:+ ]+"
249 (0 'change-log-date-face) 249 (0 'change-log-date-face)
250 ;; Name and e-mail; some people put e-mail in parens, not angles. 250 ;; Name and e-mail; some people put e-mail in parens, not angles.
251 ("\\([^<(]+?\\)[ \t]*[(<]\\([A-Za-z0-9_.+-]+@[A-Za-z0-9_.-]+\\)[>)]" nil nil 251 ("\\([^<(]+?\\)[ \t]*[(<]\\([A-Za-z0-9_.+-]+@[A-Za-z0-9_.-]+\\)[>)]" nil nil
diff --git a/lisp/comint.el b/lisp/comint.el
index 8defc3c7800..fd3cff3b5f9 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -309,7 +309,6 @@ the function `comint-truncate-buffer' is on `comint-output-filter-functions'."
309 :type 'integer 309 :type 'integer
310 :group 'comint) 310 :group 'comint)
311 311
312;; FIXME: this should be defcustom
313(defcustom comint-input-ring-size 500 312(defcustom comint-input-ring-size 500
314 "Size of the input history ring in `comint-mode'." 313 "Size of the input history ring in `comint-mode'."
315 :type 'integer 314 :type 'integer
diff --git a/lisp/composite.el b/lisp/composite.el
index 0afb2864879..d886be5a463 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -28,6 +28,8 @@
28 28
29;;; Code: 29;;; Code:
30 30
31(eval-when-compile (require 'cl))
32
31(defconst reference-point-alist 33(defconst reference-point-alist
32 '((tl . 0) (tc . 1) (tr . 2) 34 '((tl . 0) (tc . 1) (tr . 2)
33 (Bl . 3) (Bc . 4) (Br . 5) 35 (Bl . 3) (Bc . 4) (Br . 5)
@@ -77,7 +79,7 @@ follows (the point `*' corresponds to both reference points):
77 +----+-----+ <--- new descent 79 +----+-----+ <--- new descent
78 80
79A composition rule may have the form \(GLOBAL-REF-POINT 81A composition rule may have the form \(GLOBAL-REF-POINT
80NEW-REF-POINT XOFF YOFF), where XOFF and YOFF specifies how much 82NEW-REF-POINT XOFF YOFF), where XOFF and YOFF specify how much
81to shift NEW-REF-POINT from GLOBAL-REF-POINT. In this case, XOFF 83to shift NEW-REF-POINT from GLOBAL-REF-POINT. In this case, XOFF
82and YOFF are integers in the range -100..100 representing the 84and YOFF are integers in the range -100..100 representing the
83shifting percentage against the font size.") 85shifting percentage against the font size.")
@@ -537,7 +539,7 @@ character. If the preceding character is not a base character,
537each combining character is composed as a spacing character by 539each combining character is composed as a spacing character by
538a padding space before and/or after the character. 540a padding space before and/or after the character.
539 541
540All non-spacing characters has this function in 542All non-spacing characters have this function in
541`composition-function-table' unless overwritten." 543`composition-function-table' unless overwritten."
542 (let* ((header (lgstring-header gstring)) 544 (let* ((header (lgstring-header gstring))
543 (nchars (lgstring-char-len gstring)) 545 (nchars (lgstring-char-len gstring))
@@ -669,7 +671,7 @@ All non-spacing characters has this function in
669Non-spacing characters are composed with the preceding base 671Non-spacing characters are composed with the preceding base
670character. If the preceding character is not a base character, 672character. If the preceding character is not a base character,
671each non-spacing character is composed as a spacing character by 673each non-spacing character is composed as a spacing character by
672a prepending a space before it." 674prepending a space before it."
673 (let* ((header (lgstring-header gstring)) 675 (let* ((header (lgstring-header gstring))
674 (nchars (lgstring-char-len gstring)) 676 (nchars (lgstring-char-len gstring))
675 (nglyphs (lgstring-glyph-len gstring)) 677 (nglyphs (lgstring-glyph-len gstring))
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index aba4b7a7a9d..2dc7475e9e3 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -506,16 +506,21 @@ See variables `dired-texinfo-unclean-extensions',
506;;; JUMP. 506;;; JUMP.
507 507
508;;;###autoload 508;;;###autoload
509(defun dired-jump (&optional other-window) 509(defun dired-jump (&optional other-window file-name)
510 "Jump to dired buffer corresponding to current buffer. 510 "Jump to dired buffer corresponding to current buffer.
511If in a file, dired the current directory and move to file's line. 511If in a file, dired the current directory and move to file's line.
512If in Dired already, pop up a level and goto old directory's line. 512If in Dired already, pop up a level and goto old directory's line.
513In case the proper dired file line cannot be found, refresh the dired 513In case the proper dired file line cannot be found, refresh the dired
514buffer and try again." 514buffer and try again.
515 (interactive "P") 515When OTHER-WINDOW is non-nil, jump to dired buffer in other window.
516 (let* ((file buffer-file-name) 516Interactively with prefix argument, read FILE-NAME and
517move to its line in dired."
518 (interactive
519 (list nil (and current-prefix-arg
520 (read-file-name "Jump to dired file: "))))
521 (let* ((file (or file-name buffer-file-name))
517 (dir (if file (file-name-directory file) default-directory))) 522 (dir (if file (file-name-directory file) default-directory)))
518 (if (eq major-mode 'dired-mode) 523 (if (and (eq major-mode 'dired-mode) (null file-name))
519 (progn 524 (progn
520 (setq dir (dired-current-directory)) 525 (setq dir (dired-current-directory))
521 (dired-up-directory other-window) 526 (dired-up-directory other-window)
@@ -539,10 +544,12 @@ buffer and try again."
539 (dired-omit-mode) 544 (dired-omit-mode)
540 (dired-goto-file file)))))))) 545 (dired-goto-file file))))))))
541 546
542(defun dired-jump-other-window () 547(defun dired-jump-other-window (&optional file-name)
543 "Like \\[dired-jump] (`dired-jump') but in other window." 548 "Like \\[dired-jump] (`dired-jump') but in other window."
544 (interactive) 549 (interactive
545 (dired-jump t)) 550 (list (and current-prefix-arg
551 (read-file-name "Jump to dired file: "))))
552 (dired-jump t file-name))
546 553
547;;; OMITTING. 554;;; OMITTING.
548 555
diff --git a/lisp/dired.el b/lisp/dired.el
index 0dc53bf32c4..ae9915698de 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -3974,7 +3974,7 @@ true then the type of the file linked to by FILE is printed instead.
3974;;;*** 3974;;;***
3975 3975
3976;;;### (autoloads (dired-do-relsymlink dired-jump) "dired-x" "dired-x.el" 3976;;;### (autoloads (dired-do-relsymlink dired-jump) "dired-x" "dired-x.el"
3977;;;;;; "2f8d3d5a31b969b181e23c40d6bb16a0") 3977;;;;;; "6c492aba3ca0d36a4cd7b02fb9c1cc10")
3978;;; Generated autoloads from dired-x.el 3978;;; Generated autoloads from dired-x.el
3979 3979
3980(autoload 'dired-jump "dired-x" "\ 3980(autoload 'dired-jump "dired-x" "\
@@ -3983,8 +3983,11 @@ If in a file, dired the current directory and move to file's line.
3983If in Dired already, pop up a level and goto old directory's line. 3983If in Dired already, pop up a level and goto old directory's line.
3984In case the proper dired file line cannot be found, refresh the dired 3984In case the proper dired file line cannot be found, refresh the dired
3985buffer and try again. 3985buffer and try again.
3986When OTHER-WINDOW is non-nil, jump to dired buffer in other window.
3987Interactively with prefix argument, read FILE-NAME and
3988move to its line in dired.
3986 3989
3987\(fn &optional OTHER-WINDOW)" t nil) 3990\(fn &optional OTHER-WINDOW FILE-NAME)" t nil)
3988 3991
3989(autoload 'dired-do-relsymlink "dired-x" "\ 3992(autoload 'dired-do-relsymlink "dired-x" "\
3990Relative symlink all marked (or next ARG) files into a directory. 3993Relative symlink all marked (or next ARG) files into a directory.
diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el
index e828325bd0e..1bffcde03d2 100644
--- a/lisp/emacs-lisp/cl-loaddefs.el
+++ b/lisp/emacs-lisp/cl-loaddefs.el
@@ -282,7 +282,7 @@ Not documented
282;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist 282;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist
283;;;;;; do* do loop return-from return block etypecase typecase ecase 283;;;;;; do* do loop return-from return block etypecase typecase ecase
284;;;;;; case load-time-value eval-when destructuring-bind function* 284;;;;;; case load-time-value eval-when destructuring-bind function*
285;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "0faa39d8f21ae59f2cc1baa835e28a5f") 285;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "fbeedbf769c72fee9b4e0671957c1077")
286;;; Generated autoloads from cl-macs.el 286;;; Generated autoloads from cl-macs.el
287 287
288(autoload 'gensym "cl-macs" "\ 288(autoload 'gensym "cl-macs" "\
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 57870b19066..444178edb0c 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -1813,6 +1813,7 @@ Example:
1813(defsetf window-height () (store) 1813(defsetf window-height () (store)
1814 (list 'progn (list 'enlarge-window (list '- store '(window-height))) store)) 1814 (list 'progn (list 'enlarge-window (list '- store '(window-height))) store))
1815(defsetf window-hscroll set-window-hscroll) 1815(defsetf window-hscroll set-window-hscroll)
1816(defsetf window-parameter set-window-parameter)
1816(defsetf window-point set-window-point) 1817(defsetf window-point set-window-point)
1817(defsetf window-start set-window-start) 1818(defsetf window-start set-window-start)
1818(defsetf window-width () (store) 1819(defsetf window-width () (store)
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 395cca72a93..26543c4048a 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,7 @@
12010-05-20 Kevin Ryde <user42@zip.com.au>
2
3 * gnus-start.el (gnus-level-unsubscribed): Doc fix. (Bug#6206)
4
12010-05-14 Katsumi Yamaoka <yamaoka@jpl.org> 52010-05-14 Katsumi Yamaoka <yamaoka@jpl.org>
2 6
3 * gnus-sum.el (gnus-summary-save-article): Don't bother to re-fetch 7 * gnus-sum.el (gnus-summary-save-article): Don't bother to re-fetch
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index ff51530457f..9ef251f2147 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -181,7 +181,7 @@ Groups with levels less than `gnus-level-subscribed', which
181should be less than this variable, are subscribed. Groups with 181should be less than this variable, are subscribed. Groups with
182levels from `gnus-level-subscribed' (exclusive) upto this 182levels from `gnus-level-subscribed' (exclusive) upto this
183variable (inclusive) are unsubscribed. See also 183variable (inclusive) are unsubscribed. See also
184`gnus-level-zombie', `gnus-level-killed' and the Info node `Group 184`gnus-level-zombie', `gnus-level-killed' and the Info node `(gnus)Group
185Levels' for details.") 185Levels' for details.")
186 186
187(defconst gnus-level-zombie 8 187(defconst gnus-level-zombie 8
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index bad4ae94e2a..f115e425325 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -433,7 +433,9 @@ that."
433 (let ((data (match-string 2))) 433 (let ((data (match-string 2)))
434 (save-match-data 434 (save-match-data
435 (unless (string-match "^([^)]+)" data) 435 (unless (string-match "^([^)]+)" data)
436 (setq data (concat "(emacs)" data)))) 436 (setq data (concat "(emacs)" data)))
437 (setq data ;; possible newlines if para filled
438 (replace-regexp-in-string "[ \t\n]+" " " data t t)))
437 (help-xref-button 2 'help-info data)))) 439 (help-xref-button 2 'help-info data))))
438 ;; URLs 440 ;; URLs
439 (save-excursion 441 (save-excursion
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index dfc96bb4a16..f1323563d5d 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -448,7 +448,7 @@ Remove text properties that display the image."
448 448
449(defvar archive-superior-buffer) 449(defvar archive-superior-buffer)
450(defvar tar-superior-buffer) 450(defvar tar-superior-buffer)
451(declare-function image-refresh "image.c" (spec &optional frame)) 451(declare-function image-flush "image.c" (spec &optional frame))
452 452
453(defun image-toggle-display-image () 453(defun image-toggle-display-image ()
454 "Show the image of the image file. 454 "Show the image of the image file.
@@ -477,7 +477,7 @@ was inserted."
477 (inhibit-read-only t) 477 (inhibit-read-only t)
478 (buffer-undo-list t) 478 (buffer-undo-list t)
479 (modified (buffer-modified-p))) 479 (modified (buffer-modified-p)))
480 (image-refresh image) 480 (image-flush image)
481 (let ((buffer-file-truename nil)) ; avoid changing dir mtime by lock_file 481 (let ((buffer-file-truename nil)) ; avoid changing dir mtime by lock_file
482 (add-text-properties (point-min) (point-max) props) 482 (add-text-properties (point-min) (point-max) props)
483 (restore-buffer-modified-p modified)) 483 (restore-buffer-modified-p modified))
diff --git a/lisp/image.el b/lisp/image.el
index 67c1ad946b1..b3a0f1a8a7d 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -30,6 +30,7 @@
30 "Image support." 30 "Image support."
31 :group 'multimedia) 31 :group 'multimedia)
32 32
33(defalias 'image-refresh 'image-flush)
33 34
34(defconst image-type-header-regexps 35(defconst image-type-header-regexps
35 `(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm) 36 `(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
diff --git a/lisp/indent.el b/lisp/indent.el
index adecbfaeb12..c1da4a46b9c 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -431,7 +431,11 @@ column to indent to; if it is nil, use one of the three methods above."
431 (or (eolp) 431 (or (eolp)
432 (indent-to column 0)) 432 (indent-to column 0))
433 (forward-line 1)) 433 (forward-line 1))
434 (move-marker end nil)))) 434 (move-marker end nil)))
435 ;; In most cases, reindenting modifies the buffer, but it may also
436 ;; leave it unmodified, in which case we have to deactivate the mark
437 ;; by hand.
438 (deactivate-mark))
435 439
436(defun indent-relative-maybe () 440(defun indent-relative-maybe ()
437 "Indent a new line like previous nonblank line. 441 "Indent a new line like previous nonblank line.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 64cb66bdab5..ea5836edc4d 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -156,6 +156,9 @@ command history."
156(defvar isearch-mode-hook nil 156(defvar isearch-mode-hook nil
157 "Function(s) to call after starting up an incremental search.") 157 "Function(s) to call after starting up an incremental search.")
158 158
159(defvar isearch-update-post-hook nil
160 "Function(s) to call after isearch has found matches in the buffer.")
161
159(defvar isearch-mode-end-hook nil 162(defvar isearch-mode-end-hook nil
160 "Function(s) to call after terminating an incremental search. 163 "Function(s) to call after terminating an incremental search.
161When these functions are called, `isearch-mode-end-hook-quit' 164When these functions are called, `isearch-mode-end-hook-quit'
@@ -460,7 +463,9 @@ This is like `describe-bindings', but displays only Isearch keys."
460 (define-key map "\M-\C-y" 'isearch-yank-char) 463 (define-key map "\M-\C-y" 'isearch-yank-char)
461 (define-key map "\C-y" 'isearch-yank-line) 464 (define-key map "\C-y" 'isearch-yank-line)
462 465
463 (define-key map "\C-h" isearch-help-map) 466 (define-key map (char-to-string help-char) isearch-help-map)
467 (define-key map [help] isearch-help-map)
468 (define-key map [f1] isearch-help-map)
464 469
465 (define-key map "\M-n" 'isearch-ring-advance) 470 (define-key map "\M-n" 'isearch-ring-advance)
466 (define-key map "\M-p" 'isearch-ring-retreat) 471 (define-key map "\M-p" 'isearch-ring-retreat)
@@ -868,7 +873,8 @@ It is called by the function `isearch-forward' and other related functions."
868 (isearch-lazy-highlight-new-loop)) 873 (isearch-lazy-highlight-new-loop))
869 ;; We must prevent the point moving to the end of composition when a 874 ;; We must prevent the point moving to the end of composition when a
870 ;; part of the composition has just been searched. 875 ;; part of the composition has just been searched.
871 (setq disable-point-adjustment t)) 876 (setq disable-point-adjustment t)
877 (run-hooks 'isearch-update-post-hook))
872 878
873(defun isearch-done (&optional nopush edit) 879(defun isearch-done (&optional nopush edit)
874 "Exit Isearch mode. 880 "Exit Isearch mode.
@@ -1476,14 +1482,10 @@ If search string is empty, just beep."
1476 (eq 'not-yanks search-upper-case)) 1482 (eq 'not-yanks search-upper-case))
1477 (setq string (downcase string))) 1483 (setq string (downcase string)))
1478 (if isearch-regexp (setq string (regexp-quote string))) 1484 (if isearch-regexp (setq string (regexp-quote string)))
1479 (setq isearch-string (concat isearch-string string) 1485 ;; Don't move cursor in reverse search.
1480 isearch-message 1486 (setq isearch-yank-flag t)
1481 (concat isearch-message 1487 (isearch-process-search-string
1482 (mapconcat 'isearch-text-char-description 1488 string (mapconcat 'isearch-text-char-description string "")))
1483 string ""))
1484 ;; Don't move cursor in reverse search.
1485 isearch-yank-flag t)
1486 (isearch-search-and-update))
1487 1489
1488(defun isearch-yank-kill () 1490(defun isearch-yank-kill ()
1489 "Pull string from kill ring into search string." 1491 "Pull string from kill ring into search string."
@@ -1538,14 +1540,18 @@ or it might return the position of the end of the line."
1538 (interactive "p") 1540 (interactive "p")
1539 (isearch-yank-internal (lambda () (forward-char arg) (point)))) 1541 (isearch-yank-internal (lambda () (forward-char arg) (point))))
1540 1542
1543(declare-function subword-forward "subword" (&optional arg))
1541(defun isearch-yank-word-or-char () 1544(defun isearch-yank-word-or-char ()
1542 "Pull next character or word from buffer into search string." 1545 "Pull next character, subword or word from buffer into search string.
1546Subword is used when `subword-mode' is activated. "
1543 (interactive) 1547 (interactive)
1544 (isearch-yank-internal 1548 (isearch-yank-internal
1545 (lambda () 1549 (lambda ()
1546 (if (or (= (char-syntax (or (char-after) 0)) ?w) 1550 (if (or (= (char-syntax (or (char-after) 0)) ?w)
1547 (= (char-syntax (or (char-after (1+ (point))) 0)) ?w)) 1551 (= (char-syntax (or (char-after (1+ (point))) 0)) ?w))
1548 (forward-word 1) 1552 (if (and (boundp 'subword-mode) subword-mode)
1553 (subword-forward 1)
1554 (forward-word 1))
1549 (forward-char 1)) (point)))) 1555 (forward-char 1)) (point))))
1550 1556
1551(defun isearch-yank-word () 1557(defun isearch-yank-word ()
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 36bf8dea082..b087aa79040 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -54,7 +54,7 @@
54 (equal (nth 3 command-line-args) "unidata-gen.el") 54 (equal (nth 3 command-line-args) "unidata-gen.el")
55 (equal (nth 4 command-line-args) "unidata-gen-files") 55 (equal (nth 4 command-line-args) "unidata-gen-files")
56 ;; In case CANNOT_DUMP. 56 ;; In case CANNOT_DUMP.
57 (equal (nth 0 command-line-args) "../src/bootstrap-emacs")) 57 (string-match "src/bootstrap-emacs" (nth 0 command-line-args)))
58 (let ((dir (car load-path))) 58 (let ((dir (car load-path)))
59 ;; We'll probably overflow the pure space. 59 ;; We'll probably overflow the pure space.
60 (setq purify-flag nil) 60 (setq purify-flag nil)
diff --git a/lisp/locate.el b/lisp/locate.el
index d0021dfed22..f1983a3e18a 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -326,7 +326,7 @@ ARG is the interactive prefix arg."
326 (locate-do-setup search-string) 326 (locate-do-setup search-string)
327 )) 327 ))
328 (and (not (string-equal (buffer-name) locate-buffer-name)) 328 (and (not (string-equal (buffer-name) locate-buffer-name))
329 (switch-to-buffer-other-window locate-buffer-name)) 329 (pop-to-buffer locate-buffer-name))
330 330
331 (run-hooks 'dired-mode-hook) 331 (run-hooks 'dired-mode-hook)
332 (dired-next-line 3) ;move to first matching file. 332 (dired-next-line 3) ;move to first matching file.
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index e3c9599b873..29a49c45a38 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -1,3 +1,10 @@
12010-05-14 Peter S Galbraith <psg@debian.org>
2
3 * mh-mime.el (mh-decode-message-subject): New function to decode
4 RFC2047 encoded Subject lines. Used for reply drafts.
5 * mh-comp.el (mh-compose-and-send-mail): Call
6 `mh-decode-message-subject' on (reply or forward) message drafts.
7
12010-05-07 Chong Yidong <cyd@stupidchicken.com> 82010-05-07 Chong Yidong <cyd@stupidchicken.com>
2 9
3 * Version 23.2 released. 10 * Version 23.2 released.
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 3bb1e343253..762aad86080 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -905,6 +905,9 @@ letter."
905 (mh-identity-make-menu) 905 (mh-identity-make-menu)
906 (mh-identity-add-menu) 906 (mh-identity-add-menu)
907 907
908 ;; Cleanup possibly RFC2047 encoded subject header
909 (mh-decode-message-subject)
910
908 ;; Insert extra fields. 911 ;; Insert extra fields.
909 (mh-insert-x-mailer) 912 (mh-insert-x-mailer)
910 (mh-insert-x-face) 913 (mh-insert-x-face)
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index a60f31e3ac2..8d47af40ebd 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -508,6 +508,15 @@ decoding the same message multiple times."
508 (rfc2047-decode-region (point-min) (mh-mail-header-end))))) 508 (rfc2047-decode-region (point-min) (mh-mail-header-end)))))
509 509
510;;;###mh-autoload 510;;;###mh-autoload
511(defun mh-decode-message-subject ()
512 "Decode RFC2047 encoded message header fields."
513 (when mh-decode-mime-flag
514 (save-excursion
515 (let ((buffer-read-only nil))
516 (rfc2047-decode-region (progn (mh-goto-header-field "subject:") (point))
517 (progn (mh-header-field-end) (point)))))))
518
519;;;###mh-autoload
511(defun mh-mime-display (&optional pre-dissected-handles) 520(defun mh-mime-display (&optional pre-dissected-handles)
512 "Display (and possibly decode) MIME handles. 521 "Display (and possibly decode) MIME handles.
513Optional argument, PRE-DISSECTED-HANDLES is a list of MIME 522Optional argument, PRE-DISSECTED-HANDLES is a list of MIME
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index a7225d663e3..4487407971f 100644
--- a/lisp/net/secrets.el
+++ b/lisp/net/secrets.el
@@ -151,11 +151,11 @@
151 151
152(require 'dbus) 152(require 'dbus)
153 153
154(declare-function tree-widget-set-theme "tree-widget") 154(autoload 'tree-widget-set-theme "tree-widget")
155(declare-function widget-create-child-and-convert "wid-edit") 155(autoload 'widget-create-child-and-convert "wid-edit")
156(declare-function widget-default-value-set "wid-edit") 156(autoload 'widget-default-value-set "wid-edit")
157(declare-function widget-field-end "wid-edit") 157(autoload 'widget-field-end "wid-edit")
158(declare-function widget-member "wid-edit") 158(autoload 'widget-member "wid-edit")
159(defvar tree-widget-after-toggle-functions) 159(defvar tree-widget-after-toggle-functions)
160 160
161(defvar secrets-enabled nil 161(defvar secrets-enabled nil
@@ -563,7 +563,7 @@ The object paths of the found items are returned as list."
563 (setq props (add-to-list 563 (setq props (add-to-list
564 'props 564 'props
565 (list :dict-entry 565 (list :dict-entry
566 (symbol-name (car attributes)) 566 (substring (symbol-name (car attributes)) 1)
567 (cadr attributes)) 567 (cadr attributes))
568 'append) 568 'append)
569 attributes (cddr attributes))) 569 attributes (cddr attributes)))
@@ -601,7 +601,7 @@ The object path of the created item is returned."
601 (setq props (add-to-list 601 (setq props (add-to-list
602 'props 602 'props
603 (list :dict-entry 603 (list :dict-entry
604 (symbol-name (car attributes)) 604 (substring (symbol-name (car attributes)) 1)
605 (cadr attributes)) 605 (cadr attributes))
606 'append) 606 'append)
607 attributes (cddr attributes))) 607 attributes (cddr attributes)))
@@ -656,7 +656,8 @@ If there is no such item, or the item has no attributes, return nil."
656 (let ((item-path (secrets-item-path collection item))) 656 (let ((item-path (secrets-item-path collection item)))
657 (unless (secrets-empty-path item-path) 657 (unless (secrets-empty-path item-path)
658 (mapcar 658 (mapcar
659 (lambda (attribute) (cons (intern (car attribute)) (cadr attribute))) 659 (lambda (attribute)
660 (cons (intern (concat ":" (car attribute))) (cadr attribute)))
660 (dbus-get-property 661 (dbus-get-property
661 :session secrets-service item-path 662 :session secrets-service item-path
662 secrets-interface-item "Attributes"))))) 663 secrets-interface-item "Attributes")))))
@@ -678,13 +679,10 @@ If there is no such item, or the item doesn't own this attribute, return nil."
678;;; Visualization. 679;;; Visualization.
679 680
680(define-derived-mode secrets-mode nil "Secrets" 681(define-derived-mode secrets-mode nil "Secrets"
681 "Major mode for presenting search results of a Xesam search. 682 "Major mode for presenting password entries retrieved by Security Service.
682In this mode, widgets represent the search results. 683In this mode, widgets represent the search results.
683 684
684\\{secrets-mode-map} 685\\{secrets-mode-map}"
685Turning on Xesam mode runs the normal hook `xesam-mode-hook'. It
686can be used to set `xesam-notify-function', which must a search
687engine specific, widget :notify function to visualize xesam:url."
688 ;; Keymap. 686 ;; Keymap.
689 (setq secrets-mode-map (copy-keymap special-mode-map)) 687 (setq secrets-mode-map (copy-keymap special-mode-map))
690 (set-keymap-parent secrets-mode-map widget-keymap) 688 (set-keymap-parent secrets-mode-map widget-keymap)
@@ -707,19 +705,27 @@ engine specific, widget :notify function to visualize xesam:url."
707;; keymap etc. So we create a dummy buffer. Stupid. 705;; keymap etc. So we create a dummy buffer. Stupid.
708(with-temp-buffer (secrets-mode)) 706(with-temp-buffer (secrets-mode))
709 707
710;;;###autoload 708;; We autoload `secrets-show-secrets' only on systems with D-Bus support.
709;;;###autoload(when (featurep 'dbusbind)
710;;;###autoload (autoload 'secrets-show-secrets "secrets" nil t))
711
711(defun secrets-show-secrets () 712(defun secrets-show-secrets ()
712 "Display a list of collections from the Secret Service API. 713 "Display a list of collections from the Secret Service API.
713The collections are in tree view, that means they can be expanded 714The collections are in tree view, that means they can be expanded
714to the corresponding secret items, which could also be expanded 715to the corresponding secret items, which could also be expanded
715to their attributes." 716to their attributes."
716 (interactive) 717 (interactive)
717 ;; Create the search buffer. 718
718 (with-current-buffer (get-buffer-create "*Secrets*") 719 ;; Check, whether the Secret Service API is enabled.
719 (switch-to-buffer-other-window (current-buffer)) 720 (if (null secrets-enabled)
720 ;; Inialize buffer with `secrets-mode'. 721 (message "Secret Service not available")
721 (secrets-mode) 722
722 (secrets-show-collections))) 723 ;; Create the search buffer.
724 (with-current-buffer (get-buffer-create "*Secrets*")
725 (switch-to-buffer-other-window (current-buffer))
726 ;; Inialize buffer with `secrets-mode'.
727 (secrets-mode)
728 (secrets-show-collections))))
723 729
724(defun secrets-show-collections () 730(defun secrets-show-collections ()
725 "Show all available collections." 731 "Show all available collections."
@@ -757,14 +763,14 @@ to their attributes."
757 (attributes (secrets-get-attributes coll item)) 763 (attributes (secrets-get-attributes coll item))
758 ;; padding is needed to format attribute names. 764 ;; padding is needed to format attribute names.
759 (padding 765 (padding
760 (1+ 766 (apply
761 (apply 767 'max
762 'max 768 (cons
763 (cons 769 (1+ (length "password"))
764 (length "password") 770 (mapcar
765 (mapcar 771 ;; Atribute names have a leading ":", which will be suppressed.
766 (lambda (attribute) (length (symbol-name (car attribute)))) 772 (lambda (attribute) (length (symbol-name (car attribute))))
767 attributes)))))) 773 attributes)))))
768 (cons 774 (cons
769 ;; The password widget. 775 ;; The password widget.
770 `(editable-field :tag "password" 776 `(editable-field :tag "password"
@@ -779,7 +785,7 @@ to their attributes."
779 "%v\n")) 785 "%v\n"))
780 (mapcar 786 (mapcar
781 (lambda (attribute) 787 (lambda (attribute)
782 (let ((name (symbol-name (car attribute))) 788 (let ((name (substring (symbol-name (car attribute)) 1))
783 (value (cdr attribute))) 789 (value (cdr attribute)))
784 ;; The attribute widget. 790 ;; The attribute widget.
785 `(editable-field :tag ,name 791 `(editable-field :tag ,name
diff --git a/lisp/net/tramp-fish.el b/lisp/net/tramp-fish.el
index dd1947d5f1e..c7617252288 100644
--- a/lisp/net/tramp-fish.el
+++ b/lisp/net/tramp-fish.el
@@ -149,9 +149,12 @@
149;; parameter of `write-region'. Transfer of binary data fails due to 149;; parameter of `write-region'. Transfer of binary data fails due to
150;; Emacs' process input/output handling. 150;; Emacs' process input/output handling.
151 151
152
153;;; Code: 152;;; Code:
154 153
154(eval-when-compile
155 ;; Pacify byte-compiler.
156 (require 'cl))
157
155(require 'tramp) 158(require 'tramp)
156(require 'tramp-cache) 159(require 'tramp-cache)
157(require 'tramp-compat) 160(require 'tramp-compat)
@@ -487,13 +490,13 @@ pass to the OPERATION."
487 v 'file-error 490 v 'file-error
488 "Cannot make local copy of non-existing file `%s'" filename)) 491 "Cannot make local copy of non-existing file `%s'" filename))
489 (let ((tmpfile (tramp-compat-make-temp-file filename))) 492 (let ((tmpfile (tramp-compat-make-temp-file filename)))
490 (tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile) 493 (with-progress-reporter
491 (when (tramp-fish-retrieve-data v) 494 v 3 (format "Fetching %s to tmp file %s" filename tmpfile)
492 ;; Save file 495 (when (tramp-fish-retrieve-data v)
493 (with-current-buffer (tramp-get-buffer v) 496 ;; Save file
494 (write-region (point-min) (point-max) tmpfile)) 497 (with-current-buffer (tramp-get-buffer v)
495 (tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile) 498 (write-region (point-min) (point-max) tmpfile))
496 tmpfile)))) 499 tmpfile)))))
497 500
498;; This function should return "foo/" for directories and "bar" for 501;; This function should return "foo/" for directories and "bar" for
499;; files. 502;; files.
@@ -591,17 +594,16 @@ WILDCARD and FULL-DIRECTORY-P are not handled."
591 594
592 (let ((point (point)) 595 (let ((point (point))
593 size) 596 size)
594 (tramp-message v 4 "Fetching file %s..." filename) 597 (with-progress-reporter v 3 (format "Fetching file %s" filename)
595 (when (tramp-fish-retrieve-data v) 598 (when (tramp-fish-retrieve-data v)
596 ;; Insert file 599 ;; Insert file
597 (insert 600 (insert
598 (with-current-buffer (tramp-get-buffer v) 601 (with-current-buffer (tramp-get-buffer v)
599 (let ((beg (or beg (point-min))) 602 (let ((beg (or beg (point-min)))
600 (end (min (or end (point-max)) (point-max)))) 603 (end (min (or end (point-max)) (point-max))))
601 (setq size (- end beg)) 604 (setq size (- end beg))
602 (buffer-substring beg end)))) 605 (buffer-substring beg end))))
603 (goto-char point)) 606 (goto-char point)))
604 (tramp-message v 4 "Fetching file %s...done" filename)
605 607
606 (list (expand-file-name filename) size))))) 608 (list (expand-file-name filename) size)))))
607 609
@@ -1115,34 +1117,36 @@ connection if a previous connection has died for some reason."
1115 (delete-process p)) 1117 (delete-process p))
1116 (setenv "TERM" tramp-terminal-type) 1118 (setenv "TERM" tramp-terminal-type)
1117 (setenv "PS1" tramp-initial-end-of-output) 1119 (setenv "PS1" tramp-initial-end-of-output)
1118 (tramp-message 1120 (with-progress-reporter
1119 vec 3 "Opening connection for %s@%s using %s..." 1121 vec 3
1120 tramp-current-user tramp-current-host tramp-current-method) 1122 (format "Opening connection for %s@%s using %s"
1121 1123 tramp-current-user tramp-current-host tramp-current-method)
1122 (let* ((process-connection-type tramp-process-connection-type) 1124
1123 (inhibit-eol-conversion nil) 1125 (let* ((process-connection-type tramp-process-connection-type)
1124 (coding-system-for-read 'binary) 1126 (inhibit-eol-conversion nil)
1125 (coding-system-for-write 'binary) 1127 (coding-system-for-read 'binary)
1126 ;; This must be done in order to avoid our file name handler. 1128 (coding-system-for-write 'binary)
1127 (p (let ((default-directory 1129 ;; This must be done in order to avoid our file name handler.
1128 (tramp-compat-temporary-file-directory))) 1130 (p (let ((default-directory
1129 (start-process 1131 (tramp-compat-temporary-file-directory)))
1130 (or (tramp-get-connection-property vec "process-name" nil) 1132 (start-process
1131 (tramp-buffer-name vec)) 1133 (or (tramp-get-connection-property vec "process-name" nil)
1132 (tramp-get-connection-buffer vec) 1134 (tramp-buffer-name vec))
1133 "ssh" "-l" 1135 (tramp-get-connection-buffer vec)
1134 (tramp-file-name-user vec) 1136 "ssh" "-l"
1135 (tramp-file-name-host vec))))) 1137 (tramp-file-name-user vec)
1136 (tramp-message vec 6 "%s" (mapconcat 'identity (process-command p) " ")) 1138 (tramp-file-name-host vec)))))
1137 1139 (tramp-message
1138 ;; Check whether process is alive. 1140 vec 6 "%s" (mapconcat 'identity (process-command p) " "))
1139 (tramp-set-process-query-on-exit-flag p nil) 1141
1140 1142 ;; Check whether process is alive.
1141 (tramp-process-actions p vec tramp-actions-before-shell 60) 1143 (tramp-set-process-query-on-exit-flag p nil)
1142 (tramp-fish-send-command vec tramp-fish-start-fish-server-command) 1144
1143 (tramp-message 1145 (tramp-process-actions p vec tramp-actions-before-shell 60)
1144 vec 3 1146 (tramp-fish-send-command vec tramp-fish-start-fish-server-command)
1145 "Found remote shell prompt on `%s'" (tramp-file-name-host vec)))))) 1147 (tramp-message
1148 vec 3
1149 "Found remote shell prompt on `%s'" (tramp-file-name-host vec)))))))
1146 1150
1147(defun tramp-fish-send-command (vec command) 1151(defun tramp-fish-send-command (vec command)
1148 "Send the COMMAND to connection VEC." 1152 "Send the COMMAND to connection VEC."
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 0851f3fe86c..6607dae32f5 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1067,65 +1067,58 @@ connection if a previous connection has died for some reason."
1067 (tramp-gvfs-object-path 1067 (tramp-gvfs-object-path
1068 (tramp-make-tramp-file-name method user host "")))) 1068 (tramp-make-tramp-file-name method user host ""))))
1069 1069
1070 (if (zerop (length (tramp-file-name-user vec))) 1070 (with-progress-reporter
1071 (tramp-message 1071 vec 3
1072 vec 3 "Opening connection for %s using %s..." host method) 1072 (if (zerop (length user))
1073 (tramp-message 1073 (format "Opening connection for %s using %s" host method)
1074 vec 3 "Opening connection for %s@%s using %s..." user host method)) 1074 (format "Opening connection for %s@%s using %s" user host method))
1075 1075
1076 ;; Enable auth-sorce and password-cache. 1076 ;; Enable auth-sorce and password-cache.
1077 (tramp-set-connection-property vec "first-password-request" t) 1077 (tramp-set-connection-property vec "first-password-request" t)
1078 1078
1079 ;; There will be a callback of "askPassword", when a password is 1079 ;; There will be a callback of "askPassword", when a password is
1080 ;; needed. 1080 ;; needed.
1081 (dbus-register-method 1081 (dbus-register-method
1082 :session dbus-service-emacs object-path 1082 :session dbus-service-emacs object-path
1083 tramp-gvfs-interface-mountoperation "askPassword" 1083 tramp-gvfs-interface-mountoperation "askPassword"
1084 'tramp-gvfs-handler-askpassword) 1084 'tramp-gvfs-handler-askpassword)
1085 1085
1086 ;; There could be a callback of "askQuestion", when adding fingerprint. 1086 ;; There could be a callback of "askQuestion", when adding fingerprint.
1087 (dbus-register-method 1087 (dbus-register-method
1088 :session dbus-service-emacs object-path 1088 :session dbus-service-emacs object-path
1089 tramp-gvfs-interface-mountoperation "askQuestion" 1089 tramp-gvfs-interface-mountoperation "askQuestion"
1090 'tramp-gvfs-handler-askquestion) 1090 'tramp-gvfs-handler-askquestion)
1091 1091
1092 ;; The call must be asynchronously, because of the "askPassword" 1092 ;; The call must be asynchronously, because of the "askPassword"
1093 ;; or "askQuestion"callbacks. 1093 ;; or "askQuestion"callbacks.
1094 (with-tramp-dbus-call-method vec nil 1094 (with-tramp-dbus-call-method vec nil
1095 :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker 1095 :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker
1096 tramp-gvfs-interface-mounttracker "mountLocation" 1096 tramp-gvfs-interface-mounttracker "mountLocation"
1097 `(:struct 1097 `(:struct
1098 ,(dbus-string-to-byte-array "/") 1098 ,(dbus-string-to-byte-array "/")
1099 ,(tramp-gvfs-mount-spec vec)) 1099 ,(tramp-gvfs-mount-spec vec))
1100 (dbus-get-unique-name :session) 1100 (dbus-get-unique-name :session)
1101 :object-path object-path) 1101 :object-path object-path)
1102 1102
1103 ;; We must wait, until the mount is applied. This will be 1103 ;; We must wait, until the mount is applied. This will be
1104 ;; indicated by the "mounted" signal, i.e. the "fuse-mountpoint" 1104 ;; indicated by the "mounted" signal, i.e. the "fuse-mountpoint"
1105 ;; file property. 1105 ;; file property.
1106 (with-timeout 1106 (with-timeout
1107 (60 1107 (60
1108 (if (zerop (length (tramp-file-name-user vec))) 1108 (if (zerop (length (tramp-file-name-user vec)))
1109 (tramp-error
1110 vec 'file-error
1111 "Timeout reached mounting %s using %s" host method)
1109 (tramp-error 1112 (tramp-error
1110 vec 'file-error 1113 vec 'file-error
1111 "Timeout reached mounting %s using %s" host method) 1114 "Timeout reached mounting %s@%s using %s" user host method)))
1112 (tramp-error 1115 (while (not (tramp-get-file-property vec "/" "fuse-mountpoint" nil))
1113 vec 'file-error 1116 (read-event nil nil 0.1)))
1114 "Timeout reached mounting %s@%s using %s" user host method))) 1117
1115 (while (not (tramp-get-file-property vec "/" "fuse-mountpoint" nil)) 1118 ;; We set the connection property "started" in order to put the
1116 (read-event nil nil 0.1))) 1119 ;; remote location into the cache, which is helpful for further
1117 1120 ;; completion.
1118 ;; We set the connection property "started" in order to put the 1121 (tramp-set-connection-property vec "started" t)))))
1119 ;; remote location into the cache, which is helpful for further
1120 ;; completion.
1121 (tramp-set-connection-property vec "started" t)
1122
1123 (if (zerop (length (tramp-file-name-user vec)))
1124 (tramp-message
1125 vec 3 "Opening connection for %s using %s...done" host method)
1126 (tramp-message
1127 vec 3
1128 "Opening connection for %s@%s using %s...done" user host method)))))
1129 1122
1130 1123
1131;; D-Bus BLUEZ functions. 1124;; D-Bus BLUEZ functions.
diff --git a/lisp/net/tramp-imap.el b/lisp/net/tramp-imap.el
index 68e181ae7d5..e1e91365792 100644
--- a/lisp/net/tramp-imap.el
+++ b/lisp/net/tramp-imap.el
@@ -241,32 +241,31 @@ of `copy' and `rename'."
241 (t2 (and (tramp-tramp-file-p newname) 241 (t2 (and (tramp-tramp-file-p newname)
242 (tramp-imap-file-name-p newname)))) 242 (tramp-imap-file-name-p newname))))
243 243
244 (when (and (not ok-if-already-exists) (file-exists-p newname))
245 (with-parsed-tramp-file-name (if t1 filename newname) nil
246 (tramp-error
247 v 'file-already-exists "File %s already exists" newname)))
248
249 (with-parsed-tramp-file-name (if t1 filename newname) nil
250 (tramp-message v 0 "Transferring %s to %s..." filename newname))
251
252 ;; We just make a local copy of FILENAME, and write it then to
253 ;; NEWNAME. This must be optimized, when both files are located
254 ;; on the same IMAP server.
255 (with-temp-buffer
256 (if (and t1 t2)
257 ;; We don't encrypt.
258 (with-parsed-tramp-file-name newname nil
259 (insert (tramp-imap-get-file filename nil))
260 (tramp-imap-put-file
261 v (current-buffer)
262 (tramp-imap-file-name-name v)
263 nil nil (nth 7 (file-attributes filename))))
264 ;; One of them is not located on a IMAP mailbox.
265 (insert-file-contents filename)
266 (write-region (point-min) (point-max) newname)))
267
268 (with-parsed-tramp-file-name (if t1 filename newname) nil 244 (with-parsed-tramp-file-name (if t1 filename newname) nil
269 (tramp-message v 0 "Transferring %s to %s...done" filename newname)) 245 (when (and (not ok-if-already-exists) (file-exists-p newname))
246 (tramp-error
247 v 'file-already-exists "File %s already exists" newname))
248
249 (with-progress-reporter
250 v 0 (format "%s %s to %s"
251 (if (eq op 'copy) "Copying" "Renaming")
252 filename newname)
253
254 ;; We just make a local copy of FILENAME, and write it then to
255 ;; NEWNAME. This must be optimized, when both files are
256 ;; located on the same IMAP server.
257 (with-temp-buffer
258 (if (and t1 t2)
259 ;; We don't encrypt.
260 (with-parsed-tramp-file-name newname v1
261 (insert (tramp-imap-get-file filename nil))
262 (tramp-imap-put-file
263 v1 (current-buffer)
264 (tramp-imap-file-name-name v1)
265 nil nil (nth 7 (file-attributes filename))))
266 ;; One of them is not located on a IMAP mailbox.
267 (insert-file-contents filename)
268 (write-region (point-min) (point-max) newname)))))
270 269
271 (when (eq op 'rename) 270 (when (eq op 'rename)
272 (tramp-compat-delete-file filename 'force)))) 271 (tramp-compat-delete-file filename 'force))))
@@ -505,17 +504,16 @@ SIZE MODE WEIRD INODE DEVICE)."
505 v 'file-error "File `%s' not found on remote host" filename) 504 v 'file-error "File `%s' not found on remote host" filename)
506 (let ((point (point)) 505 (let ((point (point))
507 size data) 506 size data)
508 (tramp-message v 4 "Fetching file %s..." filename) 507 (with-progress-reporter v 3 (format "Fetching file %s" filename)
509 (insert (tramp-imap-get-file filename t)) 508 (insert (tramp-imap-get-file filename t))
510 (setq size (- (point) point)) 509 (setq size (- (point) point))
511;;; TODO: handle ranges. 510;;; TODO: handle ranges.
512;;; (let ((beg (or beg (point-min))) 511;;; (let ((beg (or beg (point-min)))
513;;; (end (min (or end (point-max)) (point-max)))) 512;;; (end (min (or end (point-max)) (point-max))))
514;;; (setq size (- end beg)) 513;;; (setq size (- end beg))
515;;; (buffer-substring beg end)) 514;;; (buffer-substring beg end))
516 (goto-char point) 515 (goto-char point)
517 (tramp-message v 4 "Fetching file %s...done" filename) 516 (list (expand-file-name filename) size))))))
518 (list (expand-file-name filename) size)))))
519 517
520(defun tramp-imap-handle-file-exists-p (filename) 518(defun tramp-imap-handle-file-exists-p (filename)
521 "Like `file-exists-p' for Tramp files." 519 "Like `file-exists-p' for Tramp files."
@@ -588,12 +586,12 @@ SIZE MODE WEIRD INODE DEVICE)."
588 v 'file-error 586 v 'file-error
589 "Cannot make local copy of non-existing file `%s'" filename)) 587 "Cannot make local copy of non-existing file `%s'" filename))
590 (let ((tmpfile (tramp-compat-make-temp-file filename))) 588 (let ((tmpfile (tramp-compat-make-temp-file filename)))
591 (tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile) 589 (with-progress-reporter
592 (with-temp-buffer 590 v 3 (format "Fetching %s to tmp file %s" filename tmpfile)
593 (insert-file-contents filename) 591 (with-temp-buffer
594 (write-region (point-min) (point-max) tmpfile) 592 (insert-file-contents filename)
595 (tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile) 593 (write-region (point-min) (point-max) tmpfile)
596 tmpfile)))) 594 tmpfile)))))
597 595
598(defun tramp-imap-put-file 596(defun tramp-imap-put-file
599 (vec filename-or-buffer &optional subject inode encode size) 597 (vec filename-or-buffer &optional subject inode encode size)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index c5addae8e5d..d643e85ec24 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -334,6 +334,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
334 ("scp" (tramp-login-program "ssh") 334 ("scp" (tramp-login-program "ssh")
335 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 335 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
336 ("-e" "none"))) 336 ("-e" "none")))
337 (tramp-async-args (("-q")))
337 (tramp-remote-sh "/bin/sh") 338 (tramp-remote-sh "/bin/sh")
338 (tramp-copy-program "scp") 339 (tramp-copy-program "scp")
339 (tramp-copy-args (("-P" "%p") ("-p" "%k") 340 (tramp-copy-args (("-P" "%p") ("-p" "%k")
@@ -349,6 +350,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
349 ("scp1" (tramp-login-program "ssh") 350 ("scp1" (tramp-login-program "ssh")
350 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 351 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
351 ("-1" "-e" "none"))) 352 ("-1" "-e" "none")))
353 (tramp-async-args (("-q")))
352 (tramp-remote-sh "/bin/sh") 354 (tramp-remote-sh "/bin/sh")
353 (tramp-copy-program "scp") 355 (tramp-copy-program "scp")
354 (tramp-copy-args (("-1") ("-P" "%p") ("-p" "%k") 356 (tramp-copy-args (("-1") ("-P" "%p") ("-p" "%k")
@@ -364,6 +366,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
364 ("scp2" (tramp-login-program "ssh") 366 ("scp2" (tramp-login-program "ssh")
365 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 367 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
366 ("-2" "-e" "none"))) 368 ("-2" "-e" "none")))
369 (tramp-async-args (("-q")))
367 (tramp-remote-sh "/bin/sh") 370 (tramp-remote-sh "/bin/sh")
368 (tramp-copy-program "scp") 371 (tramp-copy-program "scp")
369 (tramp-copy-args (("-2") ("-P" "%p") ("-p" "%k") 372 (tramp-copy-args (("-2") ("-P" "%p") ("-p" "%k")
@@ -399,6 +402,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
399 ("sftp" (tramp-login-program "ssh") 402 ("sftp" (tramp-login-program "ssh")
400 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 403 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
401 ("-e" "none"))) 404 ("-e" "none")))
405 (tramp-async-args (("-q")))
402 (tramp-remote-sh "/bin/sh") 406 (tramp-remote-sh "/bin/sh")
403 (tramp-copy-program "sftp") 407 (tramp-copy-program "sftp")
404 (tramp-copy-args nil) 408 (tramp-copy-args nil)
@@ -407,6 +411,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
407 ("rsync" (tramp-login-program "ssh") 411 ("rsync" (tramp-login-program "ssh")
408 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 412 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
409 ("-e" "none"))) 413 ("-e" "none")))
414 (tramp-async-args (("-q")))
410 (tramp-remote-sh "/bin/sh") 415 (tramp-remote-sh "/bin/sh")
411 (tramp-copy-program "rsync") 416 (tramp-copy-program "rsync")
412 (tramp-copy-args (("-e" "ssh") ("-t" "%k") ("-r"))) 417 (tramp-copy-args (("-e" "ssh") ("-t" "%k") ("-r")))
@@ -420,6 +425,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
420 ("-o" "ControlPath=%t.%%r@%%h:%%p") 425 ("-o" "ControlPath=%t.%%r@%%h:%%p")
421 ("-o" "ControlMaster=yes") 426 ("-o" "ControlMaster=yes")
422 ("-e" "none"))) 427 ("-e" "none")))
428 (tramp-async-args (("-q")))
423 (tramp-remote-sh "/bin/sh") 429 (tramp-remote-sh "/bin/sh")
424 (tramp-copy-program "rsync") 430 (tramp-copy-program "rsync")
425 (tramp-copy-args (("-t" "%k") ("-r"))) 431 (tramp-copy-args (("-t" "%k") ("-r")))
@@ -449,6 +455,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
449 ("ssh" (tramp-login-program "ssh") 455 ("ssh" (tramp-login-program "ssh")
450 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 456 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
451 ("-e" "none"))) 457 ("-e" "none")))
458 (tramp-async-args (("-q")))
452 (tramp-remote-sh "/bin/sh") 459 (tramp-remote-sh "/bin/sh")
453 (tramp-copy-program nil) 460 (tramp-copy-program nil)
454 (tramp-copy-args nil) 461 (tramp-copy-args nil)
@@ -462,6 +469,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
462 ("ssh1" (tramp-login-program "ssh") 469 ("ssh1" (tramp-login-program "ssh")
463 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 470 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
464 ("-1" "-e" "none"))) 471 ("-1" "-e" "none")))
472 (tramp-async-args (("-q")))
465 (tramp-remote-sh "/bin/sh") 473 (tramp-remote-sh "/bin/sh")
466 (tramp-copy-program nil) 474 (tramp-copy-program nil)
467 (tramp-copy-args nil) 475 (tramp-copy-args nil)
@@ -475,6 +483,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
475 ("ssh2" (tramp-login-program "ssh") 483 ("ssh2" (tramp-login-program "ssh")
476 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 484 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
477 ("-2" "-e" "none"))) 485 ("-2" "-e" "none")))
486 (tramp-async-args (("-q")))
478 (tramp-remote-sh "/bin/sh") 487 (tramp-remote-sh "/bin/sh")
479 (tramp-copy-program nil) 488 (tramp-copy-program nil)
480 (tramp-copy-args nil) 489 (tramp-copy-args nil)
@@ -489,6 +498,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
489 (tramp-login-program "ssh1") 498 (tramp-login-program "ssh1")
490 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 499 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
491 ("-e" "none"))) 500 ("-e" "none")))
501 (tramp-async-args (("-q")))
492 (tramp-remote-sh "/bin/sh") 502 (tramp-remote-sh "/bin/sh")
493 (tramp-copy-program nil) 503 (tramp-copy-program nil)
494 (tramp-copy-args nil) 504 (tramp-copy-args nil)
@@ -539,6 +549,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
539 ("-o" "ControlPath=%t.%%r@%%h:%%p") 549 ("-o" "ControlPath=%t.%%r@%%h:%%p")
540 ("-o" "ControlMaster=yes") 550 ("-o" "ControlMaster=yes")
541 ("-e" "none"))) 551 ("-e" "none")))
552 (tramp-async-args (("-q")))
542 (tramp-remote-sh "/bin/sh") 553 (tramp-remote-sh "/bin/sh")
543 (tramp-copy-program "scp") 554 (tramp-copy-program "scp")
544 (tramp-copy-args (("-P" "%p") ("-p" "%k") ("-q") 555 (tramp-copy-args (("-P" "%p") ("-p" "%k") ("-q")
@@ -554,6 +565,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
554 ("scpx" (tramp-login-program "ssh") 565 ("scpx" (tramp-login-program "ssh")
555 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 566 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
556 ("-e" "none" "-t" "-t" "/bin/sh"))) 567 ("-e" "none" "-t" "-t" "/bin/sh")))
568 (tramp-async-args (("-q")))
557 (tramp-remote-sh "/bin/sh") 569 (tramp-remote-sh "/bin/sh")
558 (tramp-copy-program "scp") 570 (tramp-copy-program "scp")
559 (tramp-copy-args (("-p" "%k"))) 571 (tramp-copy-args (("-p" "%k")))
@@ -567,6 +579,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
567 ("sshx" (tramp-login-program "ssh") 579 ("sshx" (tramp-login-program "ssh")
568 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 580 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
569 ("-e" "none" "-t" "-t" "/bin/sh"))) 581 ("-e" "none" "-t" "-t" "/bin/sh")))
582 (tramp-async-args (("-q")))
570 (tramp-remote-sh "/bin/sh") 583 (tramp-remote-sh "/bin/sh")
571 (tramp-copy-program nil) 584 (tramp-copy-program nil)
572 (tramp-copy-args nil) 585 (tramp-copy-args nil)
@@ -672,6 +685,11 @@ pair of the form (KEY VALUE). The following KEYs are defined:
672 \"%t\" is replaced by the temporary file name produced with 685 \"%t\" is replaced by the temporary file name produced with
673 `tramp-make-tramp-temp-file'. \"%k\" indicates the keep-date 686 `tramp-make-tramp-temp-file'. \"%k\" indicates the keep-date
674 parameter of a program, if exists. 687 parameter of a program, if exists.
688 * `tramp-async-args'
689 When an asynchronous process is started, we know already that
690 the connection works. Therefore, we can pass additional
691 parameters to suppress diagnostic messages, in order not to
692 tamper the process output.
675 * `tramp-copy-program' 693 * `tramp-copy-program'
676 This specifies the name of the program to use for remotely copying 694 This specifies the name of the program to use for remotely copying
677 the file; this might be the absolute filename of rcp or the name of 695 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."
3641 (apply 'file-selinux-context (list filename)))) 3659 (apply 'file-selinux-context (list filename))))
3642 pr tm) 3660 pr tm)
3643 3661
3644 (when (and (not ok-if-already-exists) (file-exists-p newname)) 3662 (with-parsed-tramp-file-name (if t1 filename newname) nil
3645 (with-parsed-tramp-file-name (if t1 filename newname) nil 3663 (when (and (not ok-if-already-exists) (file-exists-p newname))
3646 (tramp-error 3664 (tramp-error
3647 v 'file-already-exists "File %s already exists" newname))) 3665 v 'file-already-exists "File %s already exists" newname))
3648 3666
3649 (with-parsed-tramp-file-name (if t1 filename newname) nil
3650 (with-progress-reporter 3667 (with-progress-reporter
3651 v 0 (format "Transferring %s to %s" filename newname) 3668 v 0 (format "%s %s to %s"
3669 (if (eq op 'copy) "Copying" "Renaming")
3670 filename newname)
3652 3671
3653 (cond 3672 (cond
3654 ;; Both are Tramp files. 3673 ;; Both are Tramp files.
3655 ((and t1 t2) 3674 ((and t1 t2)
3656 (with-parsed-tramp-file-name filename v1 3675 (with-parsed-tramp-file-name filename v1
3657 (with-parsed-tramp-file-name newname v2 3676 (with-parsed-tramp-file-name newname v2
3658 (cond 3677 (cond
3659 ;; Shortcut: if method, host, user are the same for both 3678 ;; Shortcut: if method, host, user are the same for
3660 ;; files, we invoke `cp' or `mv' on the remote host 3679 ;; both files, we invoke `cp' or `mv' on the remote
3661 ;; directly. 3680 ;; host directly.
3662 ((tramp-equal-remote filename newname) 3681 ((tramp-equal-remote filename newname)
3663 (tramp-do-copy-or-rename-file-directly 3682 (tramp-do-copy-or-rename-file-directly
3664 op filename newname 3683 op filename newname
3665 ok-if-already-exists keep-date preserve-uid-gid)) 3684 ok-if-already-exists keep-date preserve-uid-gid))
3666 3685
3667 ;; Try out-of-band operation. 3686 ;; Try out-of-band operation.
3668 ((tramp-method-out-of-band-p 3687 ((tramp-method-out-of-band-p
3669 v1 (nth 7 (file-attributes filename))) 3688 v1 (nth 7 (file-attributes filename)))
3670 (tramp-do-copy-or-rename-file-out-of-band 3689 (tramp-do-copy-or-rename-file-out-of-band
3671 op filename newname keep-date)) 3690 op filename newname keep-date))
3672 3691
3673 ;; No shortcut was possible. So we copy the 3692 ;; No shortcut was possible. So we copy the file
3674 ;; file first. If the operation was `rename', we go 3693 ;; first. If the operation was `rename', we go back
3675 ;; back and delete the original file (if the copy was 3694 ;; and delete the original file (if the copy was
3676 ;; successful). The approach is simple-minded: we 3695 ;; successful). The approach is simple-minded: we
3677 ;; create a new buffer, insert the contents of the 3696 ;; create a new buffer, insert the contents of the
3678 ;; source file into it, then write out the buffer to 3697 ;; source file into it, then write out the buffer to
3679 ;; the target file. The advantage is that it doesn't 3698 ;; the target file. The advantage is that it doesn't
3680 ;; matter which filename handlers are used for the 3699 ;; matter which filename handlers are used for the
3681 ;; source and target file. 3700 ;; source and target file.
3682 (t 3701 (t
3683 (tramp-do-copy-or-rename-file-via-buffer 3702 (tramp-do-copy-or-rename-file-via-buffer
3684 op filename newname keep-date)))))) 3703 op filename newname keep-date))))))
3685 3704
3686 ;; One file is a Tramp file, the other one is local. 3705 ;; One file is a Tramp file, the other one is local.
3687 ((or t1 t2) 3706 ((or t1 t2)
3688 (cond 3707 (cond
3689 ;; Fast track on local machine. 3708 ;; Fast track on local machine.
3690 ((tramp-local-host-p v) 3709 ((tramp-local-host-p v)
3691 (tramp-do-copy-or-rename-file-directly 3710 (tramp-do-copy-or-rename-file-directly
3692 op filename newname 3711 op filename newname
3693 ok-if-already-exists keep-date preserve-uid-gid)) 3712 ok-if-already-exists keep-date preserve-uid-gid))
3694 3713
3695 ;; If the Tramp file has an out-of-band method, the corresponding 3714 ;; If the Tramp file has an out-of-band method, the
3696 ;; copy-program can be invoked. 3715 ;; corresponding copy-program can be invoked.
3697 ((tramp-method-out-of-band-p v (nth 7 (file-attributes filename))) 3716 ((tramp-method-out-of-band-p v (nth 7 (file-attributes filename)))
3698 (tramp-do-copy-or-rename-file-out-of-band 3717 (tramp-do-copy-or-rename-file-out-of-band
3699 op filename newname keep-date)) 3718 op filename newname keep-date))
3700 3719
3701 ;; Use the inline method via a Tramp buffer. 3720 ;; Use the inline method via a Tramp buffer.
3702 (t (tramp-do-copy-or-rename-file-via-buffer 3721 (t (tramp-do-copy-or-rename-file-via-buffer
3703 op filename newname keep-date)))) 3722 op filename newname keep-date))))
3704 3723
3705 (t 3724 (t
3706 ;; One of them must be a Tramp file. 3725 ;; One of them must be a Tramp file.
3707 (error "Tramp implementation says this cannot happen"))) 3726 (error "Tramp implementation says this cannot happen")))
3708 3727
3709 ;; Handle `preserve-selinux-context'. 3728 ;; Handle `preserve-selinux-context'.
3710 (when context (apply 'set-file-selinux-context (list newname context))) 3729 (when context (apply 'set-file-selinux-context (list newname context)))
3711 3730
3712 ;; In case of `rename', we must flush the cache of the source file. 3731 ;; In case of `rename', we must flush the cache of the source file.
3713 (when (and t1 (eq op 'rename)) 3732 (when (and t1 (eq op 'rename))
3714 (with-parsed-tramp-file-name filename v1 3733 (with-parsed-tramp-file-name filename v1
3715 (tramp-flush-file-property v1 (file-name-directory localname)) 3734 (tramp-flush-file-property v1 (file-name-directory localname))
3716 (tramp-flush-file-property v1 localname))) 3735 (tramp-flush-file-property v1 localname)))
3717 3736
3718 ;; When newname did exist, we have wrong cached values. 3737 ;; When newname did exist, we have wrong cached values.
3719 (when t2 3738 (when t2
3720 (with-parsed-tramp-file-name newname v2 3739 (with-parsed-tramp-file-name newname v2
3721 (tramp-flush-file-property v2 (file-name-directory localname)) 3740 (tramp-flush-file-property v2 (file-name-directory localname))
3722 (tramp-flush-file-property v2 localname))))))) 3741 (tramp-flush-file-property v2 localname)))))))
3723 3742
3724(defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date) 3743(defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date)
3725 "Use an Emacs buffer to copy or rename a file. 3744 "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."
4752 (rem-enc 4771 (rem-enc
4753 (save-excursion 4772 (save-excursion
4754 (with-progress-reporter 4773 (with-progress-reporter
4755 v 5 (format "Encoding remote file %s" filename) 4774 v 3 (format "Encoding remote file %s" filename)
4756 (tramp-barf-unless-okay 4775 (tramp-barf-unless-okay
4757 v (format rem-enc (tramp-shell-quote-argument localname)) 4776 v (format rem-enc (tramp-shell-quote-argument localname))
4758 "Encoding remote file failed")) 4777 "Encoding remote file failed"))
@@ -5323,46 +5342,50 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file."
5323;; any other remote command. 5342;; any other remote command.
5324(defun tramp-handle-vc-registered (file) 5343(defun tramp-handle-vc-registered (file)
5325 "Like `vc-registered' for Tramp files." 5344 "Like `vc-registered' for Tramp files."
5326 (with-parsed-tramp-file-name file nil 5345 (with-temp-message ""
5327 5346 (with-parsed-tramp-file-name file nil
5328 ;; There could be new files, created by the vc backend. We cannot 5347 (with-progress-reporter
5329 ;; reuse the old cache entries, therefore. 5348 v 3 (format "Checking `vc-registered' for %s" file)
5330 (let (tramp-vc-registered-file-names 5349
5331 (tramp-cache-inhibit-cache (current-time)) 5350 ;; There could be new files, created by the vc backend. We
5332 (file-name-handler-alist 5351 ;; cannot reuse the old cache entries, therefore.
5333 `((,tramp-file-name-regexp . tramp-vc-file-name-handler)))) 5352 (let (tramp-vc-registered-file-names
5334 5353 (tramp-cache-inhibit-cache (current-time))
5335 ;; Here we collect only file names, which need an operation. 5354 (file-name-handler-alist
5336 (tramp-run-real-handler 'vc-registered (list file)) 5355 `((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
5337 (tramp-message v 10 "\n%s" tramp-vc-registered-file-names) 5356
5338 5357 ;; Here we collect only file names, which need an operation.
5339 ;; Send just one command, in order to fill the cache. 5358 (tramp-run-real-handler 'vc-registered (list file))
5340 (when tramp-vc-registered-file-names 5359 (tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
5341 (tramp-maybe-send-script 5360
5342 v 5361 ;; Send just one command, in order to fill the cache.
5343 (format tramp-vc-registered-read-file-names 5362 (when tramp-vc-registered-file-names
5344 (tramp-get-file-exists-command v) 5363 (tramp-maybe-send-script
5345 (format "%s -r" (tramp-get-test-command v))) 5364 v
5346 "tramp_vc_registered_read_file_names") 5365 (format tramp-vc-registered-read-file-names
5347 5366 (tramp-get-file-exists-command v)
5348 (dolist 5367 (format "%s -r" (tramp-get-test-command v)))
5349 (elt 5368 "tramp_vc_registered_read_file_names")
5350 (tramp-send-command-and-read 5369
5351 v 5370 (dolist
5352 (format 5371 (elt
5353 "tramp_vc_registered_read_file_names %s" 5372 (tramp-send-command-and-read
5354 (mapconcat 'tramp-shell-quote-argument 5373 v
5355 tramp-vc-registered-file-names 5374 (format
5356 " ")))) 5375 "tramp_vc_registered_read_file_names %s"
5357 5376 (mapconcat 'tramp-shell-quote-argument
5358 (tramp-set-file-property v (car elt) (cadr elt) (cadr (cdr elt)))))) 5377 tramp-vc-registered-file-names
5359 5378 " "))))
5360 ;; Second run. Now all `file-exists-p' or `file-readable-p' calls 5379
5361 ;; shall be answered from the file cache. 5380 (tramp-set-file-property
5362 ;; We unset `process-file-side-effects' in order to keep the cache 5381 v (car elt) (cadr elt) (cadr (cdr elt))))))
5363 ;; when `process-file' calls appear. 5382
5364 (let (process-file-side-effects) 5383 ;; Second run. Now all `file-exists-p' or `file-readable-p'
5365 (tramp-run-real-handler 'vc-registered (list file))))) 5384 ;; calls shall be answered from the file cache. We unset
5385 ;; `process-file-side-effects' in order to keep the cache when
5386 ;; `process-file' calls appear.
5387 (let (process-file-side-effects)
5388 (tramp-run-real-handler 'vc-registered (list file)))))))
5366 5389
5367;;;###autoload 5390;;;###autoload
5368(progn (defun tramp-run-real-handler (operation args) 5391(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
7380connection if a previous connection has died for some reason." 7403connection if a previous connection has died for some reason."
7381 (catch 'uname-changed 7404 (catch 'uname-changed
7382 (let ((p (tramp-get-connection-process vec)) 7405 (let ((p (tramp-get-connection-process vec))
7406 (process-name (tramp-get-connection-property vec "process-name" nil))
7383 (process-environment (copy-sequence process-environment))) 7407 (process-environment (copy-sequence process-environment)))
7384 7408
7385 ;; If too much time has passed since last command was sent, look 7409 ;; 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."
7413 ;; We call `tramp-get-buffer' in order to get a debug buffer for 7437 ;; We call `tramp-get-buffer' in order to get a debug buffer for
7414 ;; messages from the beginning. 7438 ;; messages from the beginning.
7415 (tramp-get-buffer vec) 7439 (tramp-get-buffer vec)
7416 (if (zerop (length (tramp-file-name-user vec))) 7440 (with-progress-reporter
7417 (tramp-message 7441 vec 3
7418 vec 3 "Opening connection for %s using %s" 7442 (if (zerop (length (tramp-file-name-user vec)))
7419 (tramp-file-name-host vec) 7443 (format "Opening connection for %s using %s"
7420 (tramp-file-name-method vec)) 7444 (tramp-file-name-host vec)
7421 (tramp-message 7445 (tramp-file-name-method vec))
7422 vec 3 "Opening connection for %s@%s using %s" 7446 (format "Opening connection for %s@%s using %s"
7423 (tramp-file-name-user vec) 7447 (tramp-file-name-user vec)
7424 (tramp-file-name-host vec) 7448 (tramp-file-name-host vec)
7425 (tramp-file-name-method vec))) 7449 (tramp-file-name-method vec)))
7426 7450
7427 ;; Start new process. 7451 ;; Start new process.
7428 (when (and p (processp p)) 7452 (when (and p (processp p))
7429 (delete-process p)) 7453 (delete-process p))
7430 (setenv "TERM" tramp-terminal-type) 7454 (setenv "TERM" tramp-terminal-type)
7431 (setenv "LC_ALL" "C") 7455 (setenv "LC_ALL" "C")
7432 (setenv "PROMPT_COMMAND") 7456 (setenv "PROMPT_COMMAND")
7433 (setenv "PS1" tramp-initial-end-of-output) 7457 (setenv "PS1" tramp-initial-end-of-output)
7434 (let* ((target-alist (tramp-compute-multi-hops vec)) 7458 (let* ((target-alist (tramp-compute-multi-hops vec))
7435 (process-connection-type tramp-process-connection-type) 7459 (process-connection-type tramp-process-connection-type)
7436 (process-adaptive-read-buffering nil) 7460 (process-adaptive-read-buffering nil)
7437 (coding-system-for-read nil) 7461 (coding-system-for-read nil)
7438 ;; This must be done in order to avoid our file name handler. 7462 ;; This must be done in order to avoid our file name handler.
7439 (p (let ((default-directory 7463 (p (let ((default-directory
7440 (tramp-compat-temporary-file-directory))) 7464 (tramp-compat-temporary-file-directory)))
7441 (start-process 7465 (start-process
7442 (or (tramp-get-connection-property vec "process-name" nil) 7466 (or process-name (tramp-buffer-name vec))
7443 (tramp-buffer-name vec)) 7467 (tramp-get-connection-buffer vec)
7444 (tramp-get-connection-buffer vec) 7468 tramp-encoding-shell))))
7445 tramp-encoding-shell))))
7446 7469
7447 (tramp-message 7470 (tramp-message
7448 vec 6 "%s" (mapconcat 'identity (process-command p) " ")) 7471 vec 6 "%s" (mapconcat 'identity (process-command p) " "))
7449 7472
7450 ;; Check whether process is alive. 7473 ;; Check whether process is alive.
7451 (tramp-set-process-query-on-exit-flag p nil) 7474 (tramp-set-process-query-on-exit-flag p nil)
7452 (with-progress-reporter vec 3 "Waiting 60s for local shell to come up"
7453 (tramp-barf-if-no-shell-prompt 7475 (tramp-barf-if-no-shell-prompt
7454 p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)) 7476 p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)
7455 7477
7456 ;; Now do all the connections as specified. 7478 ;; Now do all the connections as specified.
7457 (while target-alist 7479 (while target-alist
7458 (let* ((hop (car target-alist)) 7480 (let* ((hop (car target-alist))
7459 (l-method (tramp-file-name-method hop)) 7481 (l-method (tramp-file-name-method hop))
7460 (l-user (tramp-file-name-user hop)) 7482 (l-user (tramp-file-name-user hop))
7461 (l-host (tramp-file-name-host hop)) 7483 (l-host (tramp-file-name-host hop))
7462 (l-port nil) 7484 (l-port nil)
7463 (login-program 7485 (login-program
7464 (tramp-get-method-parameter l-method 'tramp-login-program)) 7486 (tramp-get-method-parameter
7465 (login-args 7487 l-method 'tramp-login-program))
7466 (tramp-get-method-parameter l-method 'tramp-login-args)) 7488 (login-args
7467 (gw-args 7489 (tramp-get-method-parameter l-method 'tramp-login-args))
7468 (tramp-get-method-parameter l-method 'tramp-gw-args)) 7490 (async-args
7469 (gw (tramp-get-file-property hop "" "gateway" nil)) 7491 (tramp-get-method-parameter l-method 'tramp-async-args))
7470 (g-method (and gw (tramp-file-name-method gw))) 7492 (gw-args
7471 (g-user (and gw (tramp-file-name-user gw))) 7493 (tramp-get-method-parameter l-method 'tramp-gw-args))
7472 (g-host (and gw (tramp-file-name-host gw))) 7494 (gw (tramp-get-file-property hop "" "gateway" nil))
7473 (command login-program) 7495 (g-method (and gw (tramp-file-name-method gw)))
7474 ;; We don't create the temporary file. In fact, it 7496 (g-user (and gw (tramp-file-name-user gw)))
7475 ;; is just a prefix for the ControlPath option of 7497 (g-host (and gw (tramp-file-name-host gw)))
7476 ;; ssh; the real temporary file has another name, and 7498 (command login-program)
7477 ;; it is created and protected by ssh. It is also 7499 ;; We don't create the temporary file. In fact,
7478 ;; removed by ssh, when the connection is closed. 7500 ;; it is just a prefix for the ControlPath option
7479 (tmpfile 7501 ;; of ssh; the real temporary file has another
7480 (tramp-set-connection-property 7502 ;; name, and it is created and protected by ssh.
7481 p "temp-file" 7503 ;; It is also removed by ssh, when the connection
7482 (make-temp-name 7504 ;; is closed.
7483 (expand-file-name 7505 (tmpfile
7484 tramp-temp-name-prefix 7506 (tramp-set-connection-property
7485 (tramp-compat-temporary-file-directory))))) 7507 p "temp-file"
7486 spec) 7508 (make-temp-name
7487 7509 (expand-file-name
7488 ;; Add gateway arguments if necessary. 7510 tramp-temp-name-prefix
7489 (when (and gw gw-args) 7511 (tramp-compat-temporary-file-directory)))))
7490 (setq login-args (append login-args gw-args))) 7512 spec)
7491 7513
7492 ;; Check for port number. Until now, there's no need 7514 ;; Add arguments for asynchrononous processes.
7493 ;; for handling like method, user, host. 7515 (when (and process-name async-args)
7494 (when (string-match tramp-host-with-port-regexp l-host) 7516 (setq login-args (append login-args async-args)))
7517
7518 ;; Add gateway arguments if necessary.
7519 (when (and gw gw-args)
7520 (setq login-args (append login-args gw-args)))
7521
7522 ;; Check for port number. Until now, there's no need
7523 ;; for handling like method, user, host.
7524 (when (string-match tramp-host-with-port-regexp l-host)
7495 (setq l-port (match-string 2 l-host) 7525 (setq l-port (match-string 2 l-host)
7496 l-host (match-string 1 l-host))) 7526 l-host (match-string 1 l-host)))
7497 7527
7498 ;; Set variables for computing the prompt for reading 7528 ;; Set variables for computing the prompt for reading
7499 ;; password. They can also be derived from a gateway. 7529 ;; password. They can also be derived from a gateway.
7500 (setq tramp-current-method (or g-method l-method) 7530 (setq tramp-current-method (or g-method l-method)
7501 tramp-current-user (or g-user l-user) 7531 tramp-current-user (or g-user l-user)
7502 tramp-current-host (or g-host l-host)) 7532 tramp-current-host (or g-host l-host))
7503 7533
7504 ;; Replace login-args place holders. 7534 ;; Replace login-args place holders.
7505 (setq 7535 (setq
7506 l-host (or l-host "") 7536 l-host (or l-host "")
7507 l-user (or l-user "") 7537 l-user (or l-user "")
7508 l-port (or l-port "") 7538 l-port (or l-port "")
7509 spec (format-spec-make ?h l-host ?u l-user ?p l-port ?t tmpfile) 7539 spec (format-spec-make
7510 command 7540 ?h l-host ?u l-user ?p l-port ?t tmpfile)
7511 (concat 7541 command
7512 ;; We do not want to see the trailing local prompt in 7542 (concat
7513 ;; `start-file-process'. 7543 ;; We do not want to see the trailing local prompt in
7514 (unless (memq system-type '(windows-nt)) "exec ") 7544 ;; `start-file-process'.
7515 command " " 7545 (unless (memq system-type '(windows-nt)) "exec ")
7516 (mapconcat 7546 command " "
7517 (lambda (x) 7547 (mapconcat
7518 (setq x (mapcar (lambda (y) (format-spec y spec)) x)) 7548 (lambda (x)
7519 (unless (member "" x) (mapconcat 'identity x " "))) 7549 (setq x (mapcar (lambda (y) (format-spec y spec)) x))
7520 login-args " ") 7550 (unless (member "" x) (mapconcat 'identity x " ")))
7521 ;; Local shell could be a Windows COMSPEC. It doesn't 7551 login-args " ")
7522 ;; know the ";" syntax, but we must exit always for 7552 ;; Local shell could be a Windows COMSPEC. It
7523 ;; `start-file-process'. "exec" does not work either. 7553 ;; doesn't know the ";" syntax, but we must exit
7524 (if (memq system-type '(windows-nt)) " && exit || exit"))) 7554 ;; always for `start-file-process'. "exec" does not
7525 7555 ;; work either.
7526 ;; Send the command. 7556 (if (memq system-type '(windows-nt)) " && exit || exit")))
7527 (tramp-message vec 3 "Sending command `%s'" command) 7557
7528 (tramp-send-command vec command t t) 7558 ;; Send the command.
7529 (tramp-process-actions p vec tramp-actions-before-shell 60) 7559 (tramp-message vec 3 "Sending command `%s'" command)
7530 (tramp-message vec 3 "Found remote shell prompt on `%s'" l-host)) 7560 (tramp-send-command vec command t t)
7531 ;; Next hop. 7561 (tramp-process-actions p vec tramp-actions-before-shell 60)
7532 (setq target-alist (cdr target-alist))) 7562 (tramp-message
7533 7563 vec 3 "Found remote shell prompt on `%s'" l-host))
7534 ;; Make initial shell settings. 7564 ;; Next hop.
7535 (tramp-open-connection-setup-interactive-shell p vec)))))) 7565 (setq target-alist (cdr target-alist)))
7566
7567 ;; Make initial shell settings.
7568 (tramp-open-connection-setup-interactive-shell p vec)))))))
7536 7569
7537(defun tramp-send-command (vec command &optional neveropen nooutput) 7570(defun tramp-send-command (vec command &optional neveropen nooutput)
7538 "Send the COMMAND to connection VEC. 7571 "Send the COMMAND to connection VEC.
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index 5eb9840a4ca..101b2585186 100644
--- a/lisp/nxml/nxml-mode.el
+++ b/lisp/nxml/nxml-mode.el
@@ -404,6 +404,7 @@ reference.")
404 (define-key map "\M-}" 'nxml-forward-paragraph) 404 (define-key map "\M-}" 'nxml-forward-paragraph)
405 (define-key map "\M-h" 'nxml-mark-paragraph) 405 (define-key map "\M-h" 'nxml-mark-paragraph)
406 (define-key map "\C-c\C-f" 'nxml-finish-element) 406 (define-key map "\C-c\C-f" 'nxml-finish-element)
407 (define-key map "\C-c/" 'nxml-finish-element)
407 (define-key map "\C-c\C-m" 'nxml-split-element) 408 (define-key map "\C-c\C-m" 'nxml-split-element)
408 (define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block) 409 (define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block)
409 (define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline) 410 (define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline)
diff --git a/lisp/password-cache.el b/lisp/password-cache.el
index 126205a532f..7c07642a1f3 100644
--- a/lisp/password-cache.el
+++ b/lisp/password-cache.el
@@ -105,7 +105,7 @@ remove incorrect ones from the cache."
105 105
106(defun password-cache-remove (key) 106(defun password-cache-remove (key)
107 "Remove password indexed by KEY from password cache. 107 "Remove password indexed by KEY from password cache.
108This is typically run be a timer setup from `password-cache-add', 108This is typically run by a timer setup from `password-cache-add',
109but can be invoked at any time to forcefully remove passwords 109but can be invoked at any time to forcefully remove passwords
110from the cache. This may be useful when it has been detected 110from the cache. This may be useful when it has been detected
111that a password is invalid, so that `password-read' query the 111that a password is invalid, so that `password-read' query the
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 2d28d003fd5..1ee3c295fe1 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -2245,50 +2245,50 @@ comment at the start of cc-engine.el for more info."
2245 (setq cnt (1- cnt))))) 2245 (setq cnt (1- cnt)))))
2246 (point))) 2246 (point)))
2247 2247
2248(defun c-state-balance-parens-backwards (here top) 2248(defun c-state-balance-parens-backwards (here- here+ top)
2249 ;; Return the position of the opening paren/brace/bracket before HERE which 2249 ;; Return the position of the opening paren/brace/bracket before HERE- which
2250 ;; matches the outermost close p/b/b between HERE and TOP, like this: 2250 ;; matches the outermost close p/b/b between HERE+ and TOP. Except when
2251 ;; 2251 ;; there's a macro, HERE- and HERE+ are the same. Like this:
2252 ;; ...................................... 2252 ;;
2253 ;; | | 2253 ;; ............................................
2254 ;; ( [ ( ........... ) ( ) ] ) 2254 ;; | |
2255 ;; ^ ^ ^ 2255 ;; ( [ ( .........#macro.. ) ( ) ] )
2256 ;; | | | 2256 ;; ^ ^ ^ ^
2257 ;; return HERE TOP 2257 ;; | | | |
2258 ;; return HERE- HERE+ TOP
2258 ;; 2259 ;;
2259 ;; If there aren't enough opening paren/brace/brackets, return the position 2260 ;; If there aren't enough opening paren/brace/brackets, return the position
2260 ;; of the outermost one found, or HERE it there are none. If there are no 2261 ;; of the outermost one found, or HERE- if there are none. If there are no
2261 ;; closeing p/b/bs between HERE and TOP, return HERE. HERE and TOP must not 2262 ;; closeing p/b/bs between HERE+ and TOP, return HERE-. HERE-/+ and TOP
2262 ;; be inside literals. Only the accessible portion of the buffer will be 2263 ;; must not be inside literals. Only the accessible portion of the buffer
2263 ;; scanned. 2264 ;; will be scanned.
2264 2265
2265 ;; PART 1: scan from `here' up to `top', accumulating ")"s which enclose 2266 ;; PART 1: scan from `here+' up to `top', accumulating ")"s which enclose
2266 ;; `here'. Go round the next loop each time we pass over such a ")". These 2267 ;; `here'. Go round the next loop each time we pass over such a ")". These
2267 ;; probably match "("s before `here'. 2268 ;; probably match "("s before `here-'.
2268 (let (pos pa ren+1 lonely-rens) 2269 (let (pos pa ren+1 lonely-rens)
2269 (save-excursion 2270 (save-excursion
2270 (save-restriction 2271 (save-restriction
2271 (narrow-to-region (point-min) top) ; This can move point, sometimes. 2272 (narrow-to-region (point-min) top) ; This can move point, sometimes.
2272 (setq pos here) 2273 (setq pos here+)
2273 (c-safe 2274 (c-safe
2274 (while 2275 (while
2275 (setq ren+1 (scan-lists pos 1 1)) ; might signal 2276 (setq ren+1 (scan-lists pos 1 1)) ; might signal
2276 (setq lonely-rens (cons ren+1 lonely-rens) 2277 (setq lonely-rens (cons ren+1 lonely-rens)
2277 pos ren+1))))) 2278 pos ren+1)))))
2278 2279
2279 ;; PART 2: Scan back before `here' searching for the "("s 2280 ;; PART 2: Scan back before `here-' searching for the "("s
2280 ;; matching/mismatching the ")"s found above. We only need to direct the 2281 ;; matching/mismatching the ")"s found above. We only need to direct the
2281 ;; caller to scan when we've encountered unmatched right parens. 2282 ;; caller to scan when we've encountered unmatched right parens.
2282 (when lonely-rens 2283 (setq pos here-)
2283 (setq pos here) 2284 (when lonely-rens
2284 (c-safe 2285 (c-safe
2285 (while 2286 (while
2286 (and lonely-rens ; actual values aren't used. 2287 (and lonely-rens ; actual values aren't used.
2287 (setq pa (scan-lists pos -1 1))) 2288 (setq pa (scan-lists pos -1 1)))
2288 (setq pos pa) 2289 (setq pos pa)
2289 (setq lonely-rens (cdr lonely-rens)))) ;) 2290 (setq lonely-rens (cdr lonely-rens)))))
2290 ) 2291 pos))
2291 pos))
2292 2292
2293(defun c-parse-state-get-strategy (here good-pos) 2293(defun c-parse-state-get-strategy (here good-pos)
2294 ;; Determine the scanning strategy for adjusting `c-parse-state', attempting 2294 ;; 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."
2746 lit ; (START . END) of a literal containing some point. 2746 lit ; (START . END) of a literal containing some point.
2747 here-lit-start here-lit-end ; bounds of literal containing `here' 2747 here-lit-start here-lit-end ; bounds of literal containing `here'
2748 ; or `here' itself. 2748 ; or `here' itself.
2749 here- here+ ; start/end of macro around HERE, or HERE
2749 (here-bol (c-point 'bol here)) 2750 (here-bol (c-point 'bol here))
2750 (too-far-back (max (- here c-state-cache-too-far) 1))) 2751 (too-far-back (max (- here c-state-cache-too-far) 1)))
2751 2752
@@ -2758,57 +2759,73 @@ comment at the start of cc-engine.el for more info."
2758 ;; At this stage, (> pos here); 2759 ;; At this stage, (> pos here);
2759 ;; (< (c-state-cache-top-lparen) here) (or is nil). 2760 ;; (< (c-state-cache-top-lparen) here) (or is nil).
2760 2761
2761 ;; CASE 1: The top of the cache is a brace pair which now encloses `here'. 2762 (cond
2762 ;; As good-pos, return the address. of the "{". 2763 ((and (consp (car c-state-cache))
2763 (if (and (consp (car c-state-cache)) 2764 (> (cdar c-state-cache) here))
2764 (> (cdar c-state-cache) here)) 2765 ;; CASE 1: The top of the cache is a brace pair which now encloses
2765 ;; Since we've no knowledge of what's inside these braces, we have no 2766 ;; `here'. As good-pos, return the address. of the "{". Since we've no
2766 ;; alternative but to direct the caller to scan the buffer from the 2767 ;; knowledge of what's inside these braces, we have no alternative but
2767 ;; opening brace. 2768 ;; to direct the caller to scan the buffer from the opening brace.
2768 (progn 2769 (setq pos (caar c-state-cache))
2769 (setq pos (caar c-state-cache)) 2770 (setcar c-state-cache pos)
2770 (setcar c-state-cache pos) 2771 (list (1+ pos) pos t)) ; return value. We've just converted a brace pair
2771 (list (1+ pos) pos t)) ; return value. We've just converted a brace 2772 ; entry into a { entry, so the caller needs to
2772 ; pair entry into a { entry, so the caller 2773 ; search for a brace pair before the {.
2773 ; needs to search for a brace pair before the 2774
2774 ; {. 2775 ;; `here' might be inside a literal. Check for this.
2775 2776 ((progn
2776 ;; ;; `here' might be inside a literal. Check for this. 2777 (setq lit (c-state-literal-at here)
2777 (setq lit (c-state-literal-at here) 2778 here-lit-start (or (car lit) here)
2778 here-lit-start (or (car lit) here) 2779 here-lit-end (or (cdr lit) here))
2779 here-lit-end (or (cdr lit) here)) 2780 ;; Has `here' just "newly entered" a macro?
2780 2781 (save-excursion
2781 ;; `here' might be nested inside any depth of parens (or brackets but 2782 (goto-char here-lit-start)
2782 ;; not braces). Scan backwards to find the outermost such opening 2783 (if (and (c-beginning-of-macro)
2783 ;; paren, if there is one. This will be the scan position to return. 2784 (or (null c-state-old-cpp-beg)
2784 (save-restriction 2785 (not (= (point) c-state-old-cpp-beg))))
2785 (narrow-to-region cache-pos (point-max)) 2786 (progn
2786 (setq pos (c-state-balance-parens-backwards here-lit-end pos))) 2787 (setq here- (point))
2787 2788 (c-end-of-macro)
2788 (if (< pos here-lit-start) 2789 (setq here+ (point)))
2789 ;; CASE 2: Address of outermost ( or [ which now encloses `here', 2790 (setq here- here-lit-start
2790 ;; but didn't enclose the (previous) `c-state-cache-good-pos'. If 2791 here+ here-lit-end)))
2791 ;; there is a brace pair preceding this, it will already be in 2792
2792 ;; `c-state-cache', unless there was a brace pair after it, 2793 ;; `here' might be nested inside any depth of parens (or brackets but
2793 ;; i.e. there'll only be one to scan for if we've just deleted one. 2794 ;; not braces). Scan backwards to find the outermost such opening
2794 (list pos (and dropped-cons pos) t) ; Return value. 2795 ;; paren, if there is one. This will be the scan position to return.
2795 2796 (save-restriction
2796 ;; `here' isn't enclosed in a (previously unrecorded) bracket/paren. 2797 (narrow-to-region cache-pos (point-max))
2797 ;; Further forward scanning isn't needed, but we still need to find a 2798 (setq pos (c-state-balance-parens-backwards here- here+ pos)))
2798 ;; GOOD-POS. Step out of all enclosing "("s on HERE's line. 2799 nil)) ; for the cond
2800
2801 ((< pos here-lit-start)
2802 ;; CASE 2: Address of outermost ( or [ which now encloses `here', but
2803 ;; didn't enclose the (previous) `c-state-cache-good-pos'. If there is
2804 ;; a brace pair preceding this, it will already be in `c-state-cache',
2805 ;; unless there was a brace pair after it, i.e. there'll only be one to
2806 ;; scan for if we've just deleted one.
2807 (list pos (and dropped-cons pos) t)) ; Return value.
2808
2809 ;; `here' isn't enclosed in a (previously unrecorded) bracket/paren.
2810 ;; Further forward scanning isn't needed, but we still need to find a
2811 ;; GOOD-POS. Step out of all enclosing "("s on HERE's line.
2812 ((progn
2799 (save-restriction 2813 (save-restriction
2800 (narrow-to-region here-bol (point-max)) 2814 (narrow-to-region here-bol (point-max))
2801 (setq pos here-lit-start) 2815 (setq pos here-lit-start)
2802 (c-safe (while (setq pa (scan-lists pos -1 1)) 2816 (c-safe (while (setq pa (scan-lists pos -1 1))
2803 (setq pos pa)))) ; might signal 2817 (setq pos pa)))) ; might signal
2804 (if (setq ren (c-safe-scan-lists pos -1 -1 too-far-back)) 2818 nil)) ; for the cond
2805 ;; CASE 3: After a }/)/] before `here''s BOL. 2819
2806 (list (1+ ren) (and dropped-cons pos) nil) ; Return value 2820 ((setq ren (c-safe-scan-lists pos -1 -1 too-far-back))
2807 2821 ;; CASE 3: After a }/)/] before `here''s BOL.
2808 ;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of 2822 (list (1+ ren) (and dropped-cons pos) nil)) ; Return value
2809 ;; literal containing it. 2823
2810 (setq good-pos (c-state-lit-beg (c-point 'bopl here-bol))) 2824 (t
2811 (list good-pos (and dropped-cons good-pos) nil)))))) 2825 ;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of
2826 ;; literal containing it.
2827 (setq good-pos (c-state-lit-beg (c-point 'bopl here-bol)))
2828 (list good-pos (and dropped-cons good-pos) nil)))))
2812 2829
2813 2830
2814;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2831;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index 0a3c96d7894..64c716208e9 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -1008,7 +1008,7 @@ Set subexpression 1 in the match-data to the name of the type."
1008 :regexp "\\(?:[^[:word:]_`]\\|^\\)\\(`?[[:word:]_]+\\)[^[:word:]_]*") 1008 :regexp "\\(?:[^[:word:]_`]\\|^\\)\\(`?[[:word:]_]+\\)[^[:word:]_]*")
1009 1009
1010;;;###autoload 1010;;;###autoload
1011(defun f90-mode () 1011(define-derived-mode f90-mode prog-mode "F90"
1012 "Major mode for editing Fortran 90,95 code in free format. 1012 "Major mode for editing Fortran 90,95 code in free format.
1013For fixed format code, use `fortran-mode'. 1013For fixed format code, use `fortran-mode'.
1014 1014
@@ -1065,13 +1065,9 @@ Variables controlling indentation style and extra features:
1065 1065
1066Turning on F90 mode calls the value of the variable `f90-mode-hook' 1066Turning on F90 mode calls the value of the variable `f90-mode-hook'
1067with no args, if that value is non-nil." 1067with no args, if that value is non-nil."
1068 (interactive) 1068 :group 'f90
1069 (kill-all-local-variables) 1069 :syntax-table f90-mode-syntax-table
1070 (setq major-mode 'f90-mode 1070 :abbrev-table f90-mode-abbrev-table
1071 mode-name "F90"
1072 local-abbrev-table f90-mode-abbrev-table)
1073 (set-syntax-table f90-mode-syntax-table)
1074 (use-local-map f90-mode-map)
1075 (set (make-local-variable 'indent-line-function) 'f90-indent-line) 1071 (set (make-local-variable 'indent-line-function) 'f90-indent-line)
1076 (set (make-local-variable 'indent-region-function) 'f90-indent-region) 1072 (set (make-local-variable 'indent-region-function) 'f90-indent-region)
1077 (set (make-local-variable 'require-final-newline) mode-require-final-newline) 1073 (set (make-local-variable 'require-final-newline) mode-require-final-newline)
@@ -1094,8 +1090,7 @@ with no args, if that value is non-nil."
1094 'f90-beginning-of-subprogram) 1090 'f90-beginning-of-subprogram)
1095 (set (make-local-variable 'end-of-defun-function) 'f90-end-of-subprogram) 1091 (set (make-local-variable 'end-of-defun-function) 'f90-end-of-subprogram)
1096 (set (make-local-variable 'add-log-current-defun-function) 1092 (set (make-local-variable 'add-log-current-defun-function)
1097 #'f90-current-defun) 1093 #'f90-current-defun))
1098 (run-mode-hooks 'f90-mode-hook))
1099 1094
1100 1095
1101;; Inline-functions. 1096;; Inline-functions.
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index 3784ba787c4..c37744bfe45 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -778,7 +778,7 @@ Used in the Fortran entry in `hs-special-modes-alist'.")
778 778
779 779
780;;;###autoload 780;;;###autoload
781(defun fortran-mode () 781(define-derived-mode fortran-mode prog-mode "Fortran"
782 "Major mode for editing Fortran code in fixed format. 782 "Major mode for editing Fortran code in fixed format.
783For free format code, use `f90-mode'. 783For free format code, use `f90-mode'.
784 784
@@ -848,13 +848,9 @@ Variables controlling indentation style and extra features:
848 848
849Turning on Fortran mode calls the value of the variable `fortran-mode-hook' 849Turning on Fortran mode calls the value of the variable `fortran-mode-hook'
850with no args, if that value is non-nil." 850with no args, if that value is non-nil."
851 (interactive) 851 :group 'fortran
852 (kill-all-local-variables) 852 :syntax-table fortran-mode-syntax-table
853 (setq major-mode 'fortran-mode 853 :abbrev-table fortran-mode-abbrev-table
854 mode-name "Fortran"
855 local-abbrev-table fortran-mode-abbrev-table)
856 (set-syntax-table fortran-mode-syntax-table)
857 (use-local-map fortran-mode-map)
858 (set (make-local-variable 'indent-line-function) 'fortran-indent-line) 854 (set (make-local-variable 'indent-line-function) 'fortran-indent-line)
859 (set (make-local-variable 'indent-region-function) 855 (set (make-local-variable 'indent-region-function)
860 (lambda (start end) 856 (lambda (start end)
@@ -906,8 +902,7 @@ with no args, if that value is non-nil."
906 #'fortran-current-defun) 902 #'fortran-current-defun)
907 (set (make-local-variable 'dabbrev-case-fold-search) 'case-fold-search) 903 (set (make-local-variable 'dabbrev-case-fold-search) 'case-fold-search)
908 (set (make-local-variable 'gud-find-expr-function) 'fortran-gud-find-expr) 904 (set (make-local-variable 'gud-find-expr-function) 'fortran-gud-find-expr)
909 (add-hook 'hack-local-variables-hook 'fortran-hack-local-variables nil t) 905 (add-hook 'hack-local-variables-hook 'fortran-hack-local-variables nil t))
910 (run-mode-hooks 'fortran-mode-hook))
911 906
912 907
913(defun fortran-line-length (nchars &optional global) 908(defun fortran-line-length (nchars &optional global)
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index de94620c737..3f5fa543813 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -781,12 +781,17 @@ substitution string. Note dynamic scoping of variables.")
781 (file-name-nondirectory bn))) 781 (file-name-nondirectory bn)))
782 (default-alias 782 (default-alias
783 (and fn 783 (and fn
784 (let ((aliases grep-files-aliases) 784 (let ((aliases (remove (assoc "all" grep-files-aliases)
785 grep-files-aliases))
785 alias) 786 alias)
786 (while aliases 787 (while aliases
787 (setq alias (car aliases) 788 (setq alias (car aliases)
788 aliases (cdr aliases)) 789 aliases (cdr aliases))
789 (if (string-match (wildcard-to-regexp (cdr alias)) fn) 790 (if (string-match (mapconcat
791 'wildcard-to-regexp
792 (split-string (cdr alias) nil t)
793 "\\|")
794 fn)
790 (setq aliases nil) 795 (setq aliases nil)
791 (setq alias nil))) 796 (setq alias nil)))
792 (cdr alias)))) 797 (cdr alias))))
diff --git a/lisp/progmodes/octave-mod.el b/lisp/progmodes/octave-mod.el
index eb84be601de..12f561c6814 100644
--- a/lisp/progmodes/octave-mod.el
+++ b/lisp/progmodes/octave-mod.el
@@ -214,6 +214,7 @@ parenthetical grouping.")
214 (define-key map "\C-c\M-\C-d" 'octave-down-block) 214 (define-key map "\C-c\M-\C-d" 'octave-down-block)
215 (define-key map "\C-c\M-\C-h" 'octave-mark-block) 215 (define-key map "\C-c\M-\C-h" 'octave-mark-block)
216 (define-key map "\C-c]" 'octave-close-block) 216 (define-key map "\C-c]" 'octave-close-block)
217 (define-key map "\C-c/" 'octave-close-block)
217 (define-key map "\C-c\C-f" 'octave-insert-defun) 218 (define-key map "\C-c\C-f" 'octave-insert-defun)
218 (define-key map "\C-c\C-h" 'octave-help) 219 (define-key map "\C-c\C-h" 'octave-help)
219 (define-key map "\C-c\C-il" 'octave-send-line) 220 (define-key map "\C-c\C-il" 'octave-send-line)
diff --git a/lisp/progmodes/subword.el b/lisp/progmodes/subword.el
index 4081791ae2e..7df42c8b9a2 100644
--- a/lisp/progmodes/subword.el
+++ b/lisp/progmodes/subword.el
@@ -76,7 +76,7 @@
76;; the old `c-forward-into-nomenclature' originally contributed by 76;; the old `c-forward-into-nomenclature' originally contributed by
77;; Terry_Glanfield dot Southern at rxuk dot xerox dot com. 77;; Terry_Glanfield dot Southern at rxuk dot xerox dot com.
78 78
79;; TODO: ispell-word and subword oriented C-w in isearch. 79;; TODO: ispell-word.
80 80
81;;; Code: 81;;; Code:
82 82
diff --git a/lisp/replace.el b/lisp/replace.el
index 487974073aa..d73692ccc20 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1980,6 +1980,9 @@ make, or the user didn't cancel the call."
1980 (isearch-regexp regexp) 1980 (isearch-regexp regexp)
1981 (search-whitespace-regexp nil) 1981 (search-whitespace-regexp nil)
1982 (isearch-case-fold-search case-fold)) 1982 (isearch-case-fold-search case-fold))
1983 ;; Set isearch-word to nil because word-replace is regexp-based,
1984 ;; so `isearch-search-fun' should not use `word-search-forward'.
1985 (if (and isearch-word isearch-regexp) (setq isearch-word nil))
1983 (isearch-lazy-highlight-new-loop range-beg range-end)))) 1986 (isearch-lazy-highlight-new-loop range-beg range-end))))
1984 1987
1985(defun replace-dehighlight () 1988(defun replace-dehighlight ()
diff --git a/lisp/simple.el b/lisp/simple.el
index 48e1148ae6b..608151e5dd2 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -4539,6 +4539,9 @@ rests."
4539 (let ((goal-column 0) 4539 (let ((goal-column 0)
4540 (line-move-visual nil)) 4540 (line-move-visual nil))
4541 (and (line-move arg t) 4541 (and (line-move arg t)
4542 ;; With bidi reordering, we may not be at bol,
4543 ;; so make sure we are.
4544 (skip-chars-backward "^\n")
4542 (not (bobp)) 4545 (not (bobp))
4543 (progn 4546 (progn
4544 (while (and (not (bobp)) (invisible-p (1- (point)))) 4547 (while (and (not (bobp)) (invisible-p (1- (point))))
diff --git a/lisp/smerge-mode.el b/lisp/smerge-mode.el
index 732f7d19cf9..e9cba88ea1a 100644
--- a/lisp/smerge-mode.el
+++ b/lisp/smerge-mode.el
@@ -457,8 +457,8 @@ BUF contains a plain diff between match-1 and match-3."
457 457
458(defun smerge-resolve (&optional safe) 458(defun smerge-resolve (&optional safe)
459 "Resolve the conflict at point intelligently. 459 "Resolve the conflict at point intelligently.
460This relies on mode-specific knowledge and thus only works in 460This relies on mode-specific knowledge and thus only works in some
461some major modes. Uses `smerge-resolve-function' to do the actual work." 461major modes. Uses `smerge-resolve-function' to do the actual work."
462 (interactive) 462 (interactive)
463 (smerge-match-conflict) 463 (smerge-match-conflict)
464 (smerge-remove-props (match-beginning 0) (match-end 0)) 464 (smerge-remove-props (match-beginning 0) (match-end 0))
@@ -815,12 +815,12 @@ Its behavior has mainly two restrictions:
815 This only matters if `smerge-refine-weight-hack' is nil.") 815 This only matters if `smerge-refine-weight-hack' is nil.")
816 816
817(defvar smerge-refine-ignore-whitespace t 817(defvar smerge-refine-ignore-whitespace t
818 "If non-nil,Indicate that smerge-refine should try to ignore change in whitespace.") 818 "If non-nil, indicate that `smerge-refine' should try to ignore change in whitespace.")
819 819
820(defvar smerge-refine-weight-hack t 820(defvar smerge-refine-weight-hack t
821 "If non-nil, pass to diff as many lines as there are chars in the region. 821 "If non-nil, pass to diff as many lines as there are chars in the region.
822I.e. each atomic element (e.g. word) will be copied as many times (on different 822I.e. each atomic element (e.g. word) will be copied as many times (on different
823lines) as it has chars. This has 2 advantages: 823lines) as it has chars. This has two advantages:
824- if `diff' tries to minimize the number *lines* (rather than chars) 824- if `diff' tries to minimize the number *lines* (rather than chars)
825 added/removed, this adjust the weights so that adding/removing long 825 added/removed, this adjust the weights so that adding/removing long
826 symbols is considered correspondingly more costly. 826 symbols is considered correspondingly more costly.
@@ -919,8 +919,8 @@ chars to try and eliminate some spurious differences."
919 "Show fine differences in the two regions BEG1..END1 and BEG2..END2. 919 "Show fine differences in the two regions BEG1..END1 and BEG2..END2.
920PROPS is an alist of properties to put (via overlays) on the changes. 920PROPS is an alist of properties to put (via overlays) on the changes.
921If non-nil, PREPROC is called with no argument in a buffer that contains 921If non-nil, PREPROC is called with no argument in a buffer that contains
922a copy of a region, just before preparing it to for `diff'. It can be used to 922a copy of a region, just before preparing it to for `diff'. It can be
923replace chars to try and eliminate some spurious differences." 923used to replace chars to try and eliminate some spurious differences."
924 (let* ((buf (current-buffer)) 924 (let* ((buf (current-buffer))
925 (pos (point)) 925 (pos (point))
926 (file1 (make-temp-file "diff1")) 926 (file1 (make-temp-file "diff1"))
@@ -988,9 +988,9 @@ replace chars to try and eliminate some spurious differences."
988 988
989(defun smerge-refine (&optional part) 989(defun smerge-refine (&optional part)
990 "Highlight the words of the conflict that are different. 990 "Highlight the words of the conflict that are different.
991For 3-way conflicts, highlights only 2 of the 3 parts. 991For 3-way conflicts, highlights only two of the three parts.
992A numeric argument PART can be used to specify which 2 parts; 992A numeric argument PART can be used to specify which two parts;
993repeating the command will highlight other 2 parts." 993repeating the command will highlight other two parts."
994 (interactive 994 (interactive
995 (if (integerp current-prefix-arg) (list current-prefix-arg) 995 (if (integerp current-prefix-arg) (list current-prefix-arg)
996 (smerge-match-conflict) 996 (smerge-match-conflict)
@@ -1161,7 +1161,7 @@ buffer names."
1161 1161
1162(defun smerge-makeup-conflict (pt1 pt2 pt3 &optional pt4) 1162(defun smerge-makeup-conflict (pt1 pt2 pt3 &optional pt4)
1163 "Insert diff3 markers to make a new conflict. 1163 "Insert diff3 markers to make a new conflict.
1164Uses point and mark for 2 of the relevant positions and previous marks 1164Uses point and mark for two of the relevant positions and previous marks
1165for the other ones. 1165for the other ones.
1166By default, makes up a 2-way conflict, 1166By default, makes up a 2-way conflict,
1167with a \\[universal-argument] prefix, makes up a 3-way conflict." 1167with 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."
1184 (insert "<<<<<<< MINE\n")) 1184 (insert "<<<<<<< MINE\n"))
1185 (if smerge-mode nil (smerge-mode 1)) 1185 (if smerge-mode nil (smerge-mode 1))
1186 (smerge-refine)) 1186 (smerge-refine))
1187 1187
1188 1188
1189(defconst smerge-parsep-re 1189(defconst smerge-parsep-re
1190 (concat smerge-begin-re "\\|" smerge-end-re "\\|" 1190 (concat smerge-begin-re "\\|" smerge-end-re "\\|"
diff --git a/lisp/vc-dir.el b/lisp/vc-dir.el
index f24e627de64..5809110e5b5 100644
--- a/lisp/vc-dir.el
+++ b/lisp/vc-dir.el
@@ -1169,7 +1169,8 @@ These are the commands available for use in the file status buffer:
1169 nil t nil nil))))) 1169 nil t nil nil)))))
1170 (unless backend 1170 (unless backend
1171 (setq backend (vc-responsible-backend dir))) 1171 (setq backend (vc-responsible-backend dir)))
1172 (pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend)) 1172 (let (pop-up-windows) ; based on cvs-examine; bug#6204
1173 (pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend)))
1173 (if (derived-mode-p 'vc-dir-mode) 1174 (if (derived-mode-p 'vc-dir-mode)
1174 (vc-dir-refresh) 1175 (vc-dir-refresh)
1175 ;; FIXME: find a better way to pass the backend to `vc-dir-mode'. 1176 ;; FIXME: find a better way to pass the backend to `vc-dir-mode'.
diff --git a/make-dist b/make-dist
index f725a1554bd..11969042db1 100755
--- a/make-dist
+++ b/make-dist
@@ -121,8 +121,8 @@ while [ $# -gt 0 ]; do
121done 121done
122 122
123### Make sure we're running in the right place. 123### Make sure we're running in the right place.
124if [ ! -d src -o ! -f src/lisp.h -o ! -d lisp -o ! -f lisp/version.el ]; then 124if [ ! -d src -o ! -f src/lisp.h -o ! -d lisp -o ! -f lisp/subr.el ]; then
125 echo "${progname}: Can't find \`src/lisp.h' and \`lisp/version.el'." >&2 125 echo "${progname}: Can't find \`src/lisp.h' and \`lisp/subr.el'." >&2
126 echo "${progname} must be run in the top directory of the Emacs" >&2 126 echo "${progname} must be run in the top directory of the Emacs" >&2
127 echo "distribution tree. cd to that directory and try again." >&2 127 echo "distribution tree. cd to that directory and try again." >&2
128 exit 1 128 exit 1
@@ -150,12 +150,12 @@ then
150fi 150fi
151 151
152### Find out which version of Emacs this is. 152### Find out which version of Emacs this is.
153shortversion=`grep 'defconst[ ]*emacs-version' lisp/version.el \ 153shortversion=`grep 'char emacs_version' src/emacs.c \
154 | sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/'` 154 | sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/'`
155version=`grep 'defconst[ ]*emacs-version' lisp/version.el \ 155version=`grep 'char emacs_version' src/emacs.c \
156 | sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'` 156 | sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'`
157if [ ! "${version}" ]; then 157if [ ! "${version}" ]; then
158 echo "${progname}: can't find current Emacs version in \`./lisp/version.el'" >&2 158 echo "${progname}: can't find current Emacs version in \`./src/emacs.c'" >&2
159 exit 1 159 exit 1
160fi 160fi
161 161
@@ -440,6 +440,7 @@ echo "Making links to \`src'"
440 ln [a-zA-Z]*.h ../${tempdir}/src 440 ln [a-zA-Z]*.h ../${tempdir}/src
441 ln [a-zA-Z]*.m ../${tempdir}/src 441 ln [a-zA-Z]*.m ../${tempdir}/src
442 ln [a-zA-Z]*.in ../${tempdir}/src 442 ln [a-zA-Z]*.in ../${tempdir}/src
443 ln [a-zA-Z]*.mk ../${tempdir}/src
443 ## If we ended up with a symlink, or if we did not get anything 444 ## If we ended up with a symlink, or if we did not get anything
444 ## due to a cross-device symlink, copy the file. 445 ## due to a cross-device symlink, copy the file.
445 for file in [a-zA-Z]*.[hcs] [a-zA-Z]*.in; do 446 for file in [a-zA-Z]*.[hcs] [a-zA-Z]*.in; do
diff --git a/msdos/ChangeLog b/msdos/ChangeLog
index fd320d85920..54e9f9cbe76 100644
--- a/msdos/ChangeLog
+++ b/msdos/ChangeLog
@@ -1,3 +1,24 @@
12010-05-21 Glenn Morris <rgm@gnu.org>
2
3 * sed1v2.inp(@ns_frag@): Edit to nothing.
4
5 * sed1x.inp (OLDXMENU): Replace any initial value.
6 * sed1v2.inp (OLDXMENU): Edit to "nothing".
7
8 * sed1v2.inp (CANNOT_DUMP): Edit to no.
9
102010-05-20 Glenn Morris <rgm@gnu.org>
11
12 * sed1v2.inp (DEPFLAGS, deps_frag): Edit to empty.
13 (MKDEPDIR): Edit to ':'.
14
152010-05-19 Glenn Morris <rgm@gnu.org>
16
17 * sed2v2.inp (ORDINARY_LINK): Set here rather than in s/msdos.h.
18
19 * sed1v2.inp (LD): Edit to $(CC).
20 (YMF_PASS_LDFLAGS): Edit to `flags'.
21
12010-05-18 Eli Zaretskii <eliz@gnu.org> 222010-05-18 Eli Zaretskii <eliz@gnu.org>
2 23
3 * sed1x.inp: Add copyright notice. 24 * sed1x.inp: Add copyright notice.
diff --git a/msdos/mainmake.v2 b/msdos/mainmake.v2
index 7044b82f64f..271db707e37 100644
--- a/msdos/mainmake.v2
+++ b/msdos/mainmake.v2
@@ -68,10 +68,10 @@ top_srcdir := $(subst \,/,$(shell cd))
68version := ${shell sed -n -e '/(defconst emacs-version/s/^[^"]*\("[^"]*"\).*/\1/p' lisp/version.el} 68version := ${shell sed -n -e '/(defconst emacs-version/s/^[^"]*\("[^"]*"\).*/\1/p' lisp/version.el}
69 69
70# Q: Do we need to bootstrap? 70# Q: Do we need to bootstrap?
71# A: Only if we find admin/admin.el, i.e. we are building out of CVS, 71# A: Only if we find admin/admin.el, i.e. we are building out of
72# and src/b-emacs.exe does not exist. This avoids building a 72# a VCS-checkout (not a release) and src/b-emacs.exe does not exist.
73# bootstrap-emacs and recompiling Lisp files when building a 73# This avoids building a bootstrap-emacs and recompiling Lisp files
74# pretest/release tarball. 74# when building a pretest/release tarball.
75boot := 75boot :=
76ifneq ($(wildcard admin/admin.el),) 76ifneq ($(wildcard admin/admin.el),)
77ifeq ($(wildcard src/b-emacs.exe),) 77ifeq ($(wildcard src/b-emacs.exe),)
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp
index 574910d2beb..ca397e6b08b 100644
--- a/msdos/sed1v2.inp
+++ b/msdos/sed1v2.inp
@@ -55,6 +55,7 @@ s/\.h\.in/.h-in/
55/^TEMACS_LDFLAGS2 *=/s/@TEMACS_LDFLAGS2@/$(LDFLAGS)/ 55/^TEMACS_LDFLAGS2 *=/s/@TEMACS_LDFLAGS2@/$(LDFLAGS)/
56/^LIBS_SYSTEM *=/s/@LIBS_SYSTEM@// 56/^LIBS_SYSTEM *=/s/@LIBS_SYSTEM@//
57/^LIB_GCC *=/s/@LIB_GCC@/-Lgcc/ 57/^LIB_GCC *=/s/@LIB_GCC@/-Lgcc/
58/^LD *=/s/@LINKER@/$(CC)/
58/^LIB_STANDARD *=/s/@LIB_STANDARD@// 59/^LIB_STANDARD *=/s/@LIB_STANDARD@//
59/^LIB_MATH *=/s/@LIB_MATH@/-lm/ 60/^LIB_MATH *=/s/@LIB_MATH@/-lm/
60/^LIBTIFF *=/s/@LIBTIFF@// 61/^LIBTIFF *=/s/@LIBTIFF@//
@@ -113,7 +114,7 @@ s/\.h\.in/.h-in/
113/^WINDOW_SUPPORT *=/s/@WINDOW_SUPPORT@// 114/^WINDOW_SUPPORT *=/s/@WINDOW_SUPPORT@//
114/^LIBGPM *=/s/@LIBGPM@// 115/^LIBGPM *=/s/@LIBGPM@//
115/^EXEEXT *=/s/@EXEEXT@/.exe/ 116/^EXEEXT *=/s/@EXEEXT@/.exe/
116/^OLDXMENU *=/s/@OLDXMENU@// 117/^OLDXMENU *=/s/@OLDXMENU@/nothing/
117/^LIBXMENU *=/s/@LIBXMENU@// 118/^LIBXMENU *=/s/@LIBXMENU@//
118/^LIBX_OTHER *=/s/@LIBX_OTHER@// 119/^LIBX_OTHER *=/s/@LIBX_OTHER@//
119/^GMALLOC_OBJ *=/s/@GMALLOC_OBJ@/gmalloc.o/ 120/^GMALLOC_OBJ *=/s/@GMALLOC_OBJ@/gmalloc.o/
@@ -122,6 +123,9 @@ s/\.h\.in/.h-in/
122/^PRE_ALLOC_OBJ *=/s/@PRE_ALLOC_OBJ@/lastfile.o/ 123/^PRE_ALLOC_OBJ *=/s/@PRE_ALLOC_OBJ@/lastfile.o/
123/^POST_ALLOC_OBJ *=/s/@POST_ALLOC_OBJ@/$(vmlimitobj)/ 124/^POST_ALLOC_OBJ *=/s/@POST_ALLOC_OBJ@/$(vmlimitobj)/
124/^UNEXEC_OBJ *=/s/@unexec@/unexec.o/ 125/^UNEXEC_OBJ *=/s/@unexec@/unexec.o/
126/^CANNOT_DUMP *=/s/@cannot_dump@/no/
127/^DEPFLAGS *=/s/@DEPFLAGS@//
128/^MKDEPDIR *=/s/@MKDEPDIR@/:/
125/^version *=/s/@[^@\n]*@// 129/^version *=/s/@[^@\n]*@//
126/^M_FILE *=/s!@[^@\n]*@!m/intel386.h! 130/^M_FILE *=/s!@[^@\n]*@!m/intel386.h!
127/^S_FILE *=/s!@[^@\n]*@!s/msdos.h! 131/^S_FILE *=/s!@[^@\n]*@!s/msdos.h!
@@ -143,6 +147,9 @@ s/\.h\.in/.h-in/
143/^ @: /d 147/^ @: /d
144/^ -\{0,1\}ln -/s/ln -f/cp -pf/ 148/^ -\{0,1\}ln -/s/ln -f/cp -pf/
145/^[ ]touch /s/touch/djecho $@ >/ 149/^[ ]touch /s/touch/djecho $@ >/
150s/@YMF_PASS_LDFLAGS@/flags/
151s/@deps_frag@//
152s/@ns_frag@//
146s/bootstrap-emacs/b-emacs/ 153s/bootstrap-emacs/b-emacs/
147s/bootstrap-temacs/b-temacs/ 154s/bootstrap-temacs/b-temacs/
148s/bootstrap-doc/b-doc/ 155s/bootstrap-doc/b-doc/
diff --git a/msdos/sed1x.inp b/msdos/sed1x.inp
index 118b00c2538..aa755ee784f 100644
--- a/msdos/sed1x.inp
+++ b/msdos/sed1x.inp
@@ -19,7 +19,7 @@
19s!^ cd \${oldXMenudir}; \${MAKE}.*$! ${MAKE} -C ${oldXMenudir}.! 19s!^ cd \${oldXMenudir}; \${MAKE}.*$! ${MAKE} -C ${oldXMenudir}.!
20s!^ @true *$! @rem! 20s!^ @true *$! @rem!
21s/DOC/DOC-X/g 21s/DOC/DOC-X/g
22/^OLDXMENU *=/s!= *!= ${oldXMenudir}libXMenu11.a! 22/^OLDXMENU *=/s!=.*!= ${oldXMenudir}libXMenu11.a!
23/^LIBXMENU *=/s!= *!= ${OLDXMENU}! 23/^LIBXMENU *=/s!= *!= ${OLDXMENU}!
24/^LIBX_OTHER *=/s!= *!= ${LIBXT} ${LIBX_EXTRA}! 24/^LIBX_OTHER *=/s!= *!= ${LIBXT} ${LIBX_EXTRA}!
25/^OLDXMENU_TARGET *=/s!= *!= really-oldxmenu! 25/^OLDXMENU_TARGET *=/s!= *!= really-oldxmenu!
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index ea3f1718646..ab088cf2724 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -52,6 +52,7 @@
52/^#undef HAVE_MKSTEMP *$/s/^.*$/#define HAVE_MKSTEMP 1/ 52/^#undef HAVE_MKSTEMP *$/s/^.*$/#define HAVE_MKSTEMP 1/
53/^#undef HAVE_STRUCT_TM_TM_ZONE *$/s/^.*$/#define HAVE_STRUCT_TM_TM_ZONE 1/ 53/^#undef HAVE_STRUCT_TM_TM_ZONE *$/s/^.*$/#define HAVE_STRUCT_TM_TM_ZONE 1/
54/^#undef HAVE_SYNC *$/s/^.*$/#define HAVE_SYNC 1/ 54/^#undef HAVE_SYNC *$/s/^.*$/#define HAVE_SYNC 1/
55/^#undef ORDINARY_LINK/s/^.*$/#define ORDINARY_LINK 1/
55/^#undef PACKAGE_BUGREPORT/s/^.*$/#define PACKAGE_BUGREPORT ""/ 56/^#undef PACKAGE_BUGREPORT/s/^.*$/#define PACKAGE_BUGREPORT ""/
56/^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/ 57/^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/
57/^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/ 58/^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/
diff --git a/src/.gdbinit b/src/.gdbinit
index 5ecdaa4a572..1fd7e288736 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -616,7 +616,7 @@ Pretty print all glyphs in it->glyph_row.
616end 616end
617 617
618define prowlims 618define prowlims
619 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 619 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
620end 620end
621document prowlims 621document prowlims
622Print important attributes of a glyph_row structure. 622Print important attributes of a glyph_row structure.
@@ -626,10 +626,13 @@ end
626define pmtxrows 626define pmtxrows
627 set $mtx = $arg0 627 set $mtx = $arg0
628 set $gl = $mtx->rows 628 set $gl = $mtx->rows
629 set $glend = $mtx->rows + $mtx->nrows 629 set $glend = $mtx->rows + $mtx->nrows - 1
630 set $i = 0
630 while ($gl < $glend) 631 while ($gl < $glend)
632 printf "%d: ", $i
631 prowlims $gl 633 prowlims $gl
632 set $gl = $gl + 1 634 set $gl = $gl + 1
635 set $i = $i + 1
633 end 636 end
634end 637end
635document pmtxrows 638document pmtxrows
diff --git a/src/ChangeLog b/src/ChangeLog
index 347ee7b1f20..67911d5def3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -21,6 +21,139 @@
21 is at the last character of the current grapheme cluster when 21 is at the last character of the current grapheme cluster when
22 CMP_IT->reversed_p is nonzero. 22 CMP_IT->reversed_p is nonzero.
23 23
242010-05-24 Stefan Monnier <monnier@iro.umontreal.ca>
25
26 * process.c (Fmake_network_process): Set :host to nil if it's not used.
27 Suggested by Masatake YAMATO <yamato@redhat.com>.
28
292010-05-23 Eli Zaretskii <eliz@gnu.org>
30
31 * dispextern.h (init_iterator): Sync prototype with changed
32 definition.
33
342010-05-19 Eli Zaretskii <eliz@gnu.org>
35
36 Redesign and reimplement bidi-aware edge positions of glyph rows.
37
38 * dispextern.h (struct glyph_row): New members minpos and maxpos.
39 (MATRIX_ROW_START_CHARPOS, MATRIX_ROW_START_BYTEPOS)
40 (MATRIX_ROW_END_CHARPOS, MATRIX_ROW_END_BYTEPOS): Reference minpos
41 and maxpos members instead of start.pos and end.pos, respectively.
42
43 * xdisp.c (display_line): Compare IT_CHARPOS with the position in
44 row->start.pos, rather than with MATRIX_ROW_START_CHARPOS.
45 (cursor_row_p): Use row->end.pos rather than MATRIX_ROW_END_CHARPOS.
46 (try_window_reusing_current_matrix, try_window_id):
47 Use ROW->minpos rather than ROW->start.pos.
48 (init_from_display_pos, init_iterator): Use EMACS_INT for
49 character and byte positions.
50 (find_row_edges): Rename from find_row_end. Accept additional
51 arguments for minimum and maximum buffer positions seen by
52 display_line for this row. Don't use iterator to find the
53 position following the maximum one; instead, increment the
54 position found by display_line directly. Fix logic; eol_pos
55 should be tested before the rest. Handle the case of characters
56 delivered from display vector (bug#6036). Fix tests related to
57 it->method. Handle the truncated_on_right_p rows.
58 (RECORD_MAX_MIN_POS): New macro.
59 (display_line): Use it to record the minimum and maximum buffer
60 positions for glyphs in the row being assembled. Record the
61 position of the newline that terminates the line. If word wrap is
62 in effect, restore minimum and maximum positions seen up to the
63 wrap point, when iterator returns to it.
64 (try_window_reusing_current_matrix): Give up if in bidi-reordered
65 row and cursor not already at point. Restore original pre-bidi
66 code for unidirectional buffers.
67
68 * dispnew.c (increment_row_positions, check_matrix_invariants):
69 Increment and check row->start.pos and row->end.pos, in addition
70 to MATRIX_ROW_START_CHARPOS and MATRIX_ROW_END_CHARPOS.
71
72 * .gdbinit (prowlims): Display row->minpos and row->maxpos.
73 Display truncated_on_left_p and truncated_on_right_p flags.
74 Formatting fixes.
75 (pmtxrows): Display the ordinal number of each row. Don't display
76 rows beyond the last one.
77
78 * bidi.c (bidi_cache_iterator_state): Don't zero out new_paragraph:
79 it is not copied by bidi_copy_it.
80
812010-05-22 Eli Zaretskii <eliz@gnu.org>
82
83 * w32.c (sys_write): Break writes into chunks smaller than 32MB.
84 (Bug#6237)
85
862010-05-22 Chong Yidong <cyd@stupidchicken.com>
87
88 * image.c (Fimage_flush): Rename from image-refresh.
89
902010-05-21 Chong Yidong <cyd@stupidchicken.com>
91
92 * xdisp.c (redisplay_internal): Clear caches even if redisplaying
93 just one window.
94
95 * image.c (Vimage_cache_eviction_delay): Decrease to 300.
96 (clear_image_cache): If the number of cached images is unusually
97 large, decrease the cache eviction delay (Bug#6230).
98
992010-05-21 Glenn Morris <rgm@gnu.org>
100
101 * Makefile.in (${ns_appdir}, ${ns_appbindir}Emacs, ns-app):
102 Move these rules to ns.mk.
103 * ns.mk: New file.
104
105 * Makefile.in (../src/$(OLDXMENU), $(OLDXMENU)): Always define rules.
106
107 * Makefile.in (CANNOT_DUMP): New, set by configure.
108 (emacs${EXEEXT}, bootstrap-emacs${EXEEXT}): Use $CANNOT_DUMP.
109
1102010-05-20 Juri Linkov <juri@jurta.org>
111
112 * fileio.c (Fdelete_file): Change interative spec to use
113 `read-file-name' like in `find-file-read-args' where the default
114 value is `default-directory' instead of `buffer-file-name'.
115 http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00533.html
116
1172010-05-20 Kevin Ryde <user42@zip.com.au>
118
119 * keyboard.c (Vlast_command, Vkeyboard_translate_table)
120 (Voverriding_terminal_local_map, Vsystem_key_alist)
121 (Vlocal_function_key_map): Fix manual link in docstring (Bug#6224).
122
1232010-05-20 Glenn Morris <rgm@gnu.org>
124
125 * Makefile.in (DEPDIR): New constant.
126 (DEPFLAGS): Set with configure, not cpp.
127 (MKDEPDIR): New, set by configure.
128 (.c.o, .m.o, ecrt0.o): Use $MKDEPDIR.
129 (clean): Use $DEPDIR.
130 (deps_frag): Include from configure.
131 Move static/dynamic dependency stuff to deps.mk/autodeps.mk.
132 * deps.mk, autodeps.mk: New files, extracted from Makefile.in.
133
134 * bidi.c (bidi_cache_shrink, bidi_cache_iterator_state): Fix
135 reallocation of the cache. (Bug#6210)
136
1372010-05-19 Glenn Morris <rgm@gnu.org>
138
139 * s/msdos.h (ORDINARY_LINK): Move to sed2v2.inp.
140
141 * Makefile.in (LD, YMF_PASS_LDFLAGS): Set with configure, not cpp.
142 (GNULIB_VAR): Remove.
143 (LIBES): Use LIB_GCC instead of GNULIB_VAR.
144
145 * m/ibms390x.h (LINKER):
146 * m/macppc.h (LINKER) [GNU_LINUX]:
147 * s/aix4-2.h (ORDINARY_LINK):
148 * s/cygwin.h (LINKER):
149 * s/darwin.h (ORDINARY_LINK):
150 * s/gnu.h (ORDINARY_LINK):
151 * s/netbsd.h (LINKER):
152 * s/usg5-4.h (ORDINARY_LINK):
153 Move to configure.
154
155 * s/aix4-2.h (LINKER): Remove; this file sets ORDINARY_LINK.
156
242010-05-18 Chong Yidong <cyd@stupidchicken.com> 1572010-05-18 Chong Yidong <cyd@stupidchicken.com>
25 158
26 * character.c (Fstring, Funibyte_string): Use SAFE_ALLOCA to 159 * character.c (Fstring, Funibyte_string): Use SAFE_ALLOCA to
@@ -120,6 +253,8 @@
120 * xdisp.c (Fcurrent_bidi_paragraph_direction): New function. 253 * xdisp.c (Fcurrent_bidi_paragraph_direction): New function.
121 (syms_of_xdisp): Defsubr it. 254 (syms_of_xdisp): Defsubr it.
122 255
256 * cmds.c (Fforward_char, Fbackward_char): Doc fix.
257
123 * Makefile.in: Fix MSDOS-related comments. 258 * Makefile.in: Fix MSDOS-related comments.
124 259
1252010-05-15 Glenn Morris <rgm@gnu.org> 2602010-05-15 Glenn Morris <rgm@gnu.org>
diff --git a/src/Makefile.in b/src/Makefile.in
index 676d2a0834e..554caa44a97 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -124,6 +124,8 @@ LIBS_SYSTEM=@LIBS_SYSTEM@
124## Where to find libgcc.a, if using gcc and necessary. 124## Where to find libgcc.a, if using gcc and necessary.
125LIB_GCC=@LIB_GCC@ 125LIB_GCC=@LIB_GCC@
126 126
127LD=@LINKER@
128
127## May use $CRT_DIR. 129## May use $CRT_DIR.
128LIB_STANDARD=@LIB_STANDARD@ 130LIB_STANDARD=@LIB_STANDARD@
129 131
@@ -171,13 +173,20 @@ LIBXTR6=@LIBXTR6@
171## Only used if HAVE_X_WINDOWS. 173## Only used if HAVE_X_WINDOWS.
172LIBXT_OTHER=@LIBXT_OTHER@ 174LIBXT_OTHER=@LIBXT_OTHER@
173 175
174## Only used if HAVE_X11 && !USE_GTK. 176## If !HAVE_X11 || USE_GTK, empty.
175## really-lwlib if USE_X_TOOLKIT, else really-oldxmenu. 177## Else if USE_X_TOOLKIT really-lwlib, else really-oldxmenu.
176OLDXMENU_TARGET=@OLDXMENU_TARGET@ 178OLDXMENU_TARGET=@OLDXMENU_TARGET@
177 179
178## If !HAVE_X11 || USE_GTK, empty. 180## If !HAVE_X11 || USE_GTK, empty.
179## Else if USE_X_TOOLKIT, ${lwlibdir}liblw.a. 181## Else if USE_X_TOOLKIT, ${lwlibdir}liblw.a.
180## Else ${oldXMenudir}libXMenu11.a. 182## Else ${oldXMenudir}libXMenu11.a.
183## (Actually, rather than being empty, it is set to "nothing".
184## It is never actually used for anything in this case.
185## This is done because there is a rule with target $(OLDXMENU) below,
186## and I think it might be a syntax error with some makes to have
187## an empty target, even if the associated rule is never run.
188## http://lists.gnu.org/archive/html/help-make/2010-05/msg00058.html
189## The alternative would be to put that rule in a makefile fragment.)
181OLDXMENU=@OLDXMENU@ 190OLDXMENU=@OLDXMENU@
182 191
183## If HAVE_X11 && !USE_GTK, ${OLDXMENU} ../src/${OLDXMENU}; else empty. 192## If HAVE_X11 && !USE_GTK, ${OLDXMENU} ../src/${OLDXMENU}; else empty.
@@ -282,16 +291,20 @@ START_FILES = @START_FILES@
282 291
283UNEXEC_OBJ = @unexec@ 292UNEXEC_OBJ = @unexec@
284 293
294CANNOT_DUMP=@cannot_dump@
295
296DEPDIR=deps
297## -MMD -MF ${DEPDIR}/$*.d if AUTO_DEPEND; else empty.
298DEPFLAGS=@DEPFLAGS@
299## test -d ${DEPDIR} || mkdir ${DEPDIR} (if AUTO_DEPEND); else ':'.
300MKDEPDIR=@MKDEPDIR@
301
285# ========================== start of cpp stuff ======================= 302# ========================== start of cpp stuff =======================
286/* From here on, comments must be done in C syntax. */ 303/* From here on, comments must be done in C syntax. */
287 304
288#define NOT_C_CODE 305#define NOT_C_CODE
289#include "config.h" 306#include "config.h"
290 307
291#ifdef AUTO_DEPEND
292DEPFLAGS = -MMD -MF deps/$*.d
293#endif
294
295/* If NS_IMPL_GNUSTEP, some definitions and includes are expanded here. */ 308/* If NS_IMPL_GNUSTEP, some definitions and includes are expanded here. */
296@NS_IMPL_GNUSTEP_INC@ 309@NS_IMPL_GNUSTEP_INC@
297 310
@@ -318,63 +331,13 @@ ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS)
318 331
319.SUFFIXES: .m 332.SUFFIXES: .m
320.c.o: 333.c.o:
321#ifdef AUTO_DEPEND 334 @$(MKDEPDIR)
322 @-test -d deps || mkdir deps
323#endif
324 $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< 335 $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
325.m.o: 336.m.o:
326#ifdef AUTO_DEPEND 337 @$(MKDEPDIR)
327 @-test -d deps || mkdir deps
328#endif
329 $(CC) -c $(CPPFLAGS) $(ALL_OBJC_CFLAGS) $< 338 $(CC) -c $(CPPFLAGS) $(ALL_OBJC_CFLAGS) $<
330 339
331 340
332/* A macro which other sections of Makefile can redefine to munge the
333 flags before they are passed to LD. This is helpful if you have
334 redefined LD to something odd, like "gcc".
335 (The YMF prefix is a holdover from the old name "ymakefile".) */
336#define YMF_PASS_LDFLAGS(flags) flags
337
338
339#ifdef ORDINARY_LINK
340LD = $(CC)
341
342#else /* not ORDINARY_LINK */
343GNULIB_VAR = $(LIB_GCC)
344
345/* Fix linking if compiled with GCC. */
346#if defined (__GNUC__) && ! defined (LINKER)
347/* Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
348 places that are difficult to figure out at make time. Fortunately,
349 these same versions allow you to pass arbitrary flags on to the
350 linker, so there is no reason not to use it as a linker.
351
352 Well, it is not quite perfect. The "-nostdlib" keeps GCC from
353 searching for libraries in its internal directories, so we have to
354 ask GCC explicitly where to find libgcc.a. */
355#define LINKER $(CC) -nostdlib
356/* GCC passes any argument prefixed with -Xlinker directly to the linker.
357 See prefix-args.c for an explanation of why we do not do this with the
358 shell''s ``for'' construct. Note that sane people do not have '.' in
359 their paths, so we must use ./prefix-args. */
360#undef YMF_PASS_LDFLAGS
361#define YMF_PASS_LDFLAGS(flags) `./prefix-args -Xlinker flags`
362#endif /* defined (__GNUC__) && ! defined (LINKER) */
363
364#ifdef LINKER
365LD=LINKER
366#else /* not LINKER */
367LD=ld
368#endif /* not LINKER */
369
370#endif /* not ORDINARY_LINK */
371
372
373#ifdef NS_IMPL_GNUSTEP
374LD=$(CC) -rdynamic
375#endif
376
377
378/* lastfile must follow all files whose initialized data areas should 341/* lastfile must follow all files whose initialized data areas should
379 be dumped as pure by dump-emacs. */ 342 be dumped as pure by dump-emacs. */
380obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \ 343obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
@@ -634,29 +597,29 @@ SOME_MACHINE_LISP = ../lisp/mouse.elc \
634/* Construct full set of libraries to be linked. 597/* Construct full set of libraries to be linked.
635 Note that SunOS needs -lm to come before -lc; otherwise, you get 598 Note that SunOS needs -lm to come before -lc; otherwise, you get
636 duplicated symbols. If the standard libraries were compiled 599 duplicated symbols. If the standard libraries were compiled
637 with GCC, we might need gnulib again after them. */ 600 with GCC, we might need LIB_GCC again after them. */
638 601
639LIBES = $(LOADLIBES) $(LIBS) $(LIBX_BASE) $(LIBX_OTHER) $(LIBSOUND) \ 602LIBES = $(LOADLIBES) $(LIBS) $(LIBX_BASE) $(LIBX_OTHER) $(LIBSOUND) \
640 $(RSVG_LIBS) $(DBUS_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \ 603 $(RSVG_LIBS) $(DBUS_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \
641 $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) ${GCONF_LIBS} ${LIBSELINUX_LIBS} \ 604 $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) ${GCONF_LIBS} ${LIBSELINUX_LIBS} \
642 $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \ 605 $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
643 $(GNULIB_VAR) $(LIB_MATH) $(LIB_STANDARD) $(GNULIB_VAR) 606 $(LIB_GCC) $(LIB_MATH) $(LIB_STANDARD) $(LIB_GCC)
644 607
645all: emacs${EXEEXT} $(OTHER_FILES) 608all: emacs${EXEEXT} $(OTHER_FILES)
646 609
647/* Does anyone ever pay attention to the load-path-shadows output here? */ 610/* Does anyone ever pay attention to the load-path-shadows output here? */
611/* The dumped Emacs is as functional and more efficient than
612 bootstrap-emacs, so we replace the latter with the former. */
648emacs${EXEEXT}: temacs${EXEEXT} ${etc}DOC ${lisp} 613emacs${EXEEXT}: temacs${EXEEXT} ${etc}DOC ${lisp}
649#ifdef CANNOT_DUMP 614 if test "${CANNOT_DUMP}" = "yes"; then \
650 rm -f emacs${EXEEXT} 615 ln -f temacs${EXEEXT} emacs${EXEEXT}; \
651 ln temacs${EXEEXT} emacs${EXEEXT} 616 EMACSLOADPATH=${lispsource} ./emacs -q -batch \
652 -EMACSLOADPATH=${lispsource} ./emacs -q -batch -f list-load-path-shadows 617 -f list-load-path-shadows || true; \
653#else 618 else \
654 LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump 619 LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump || exit 1; \
655 @: This new Emacs is as functional and more efficient then 620 ln -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}; \
656 @: bootstrap-emacs, so let us replace it. 621 ./emacs -q -batch -f list-load-path-shadows || true; \
657 -ln -f emacs${EXEEXT} bootstrap-emacs${EXEEXT} 622 fi
658 -./emacs -q -batch -f list-load-path-shadows
659#endif /* ! defined (CANNOT_DUMP) */
660 623
661/* We run make-docfile twice because the command line may get too long 624/* We run make-docfile twice because the command line may get too long
662 on some systems. */ 625 on some systems. */
@@ -682,6 +645,8 @@ ${libsrc}make-docfile${EXEEXT}:
682buildobj.h: Makefile 645buildobj.h: Makefile
683 echo "#define BUILDOBJ \"${obj} ${otherobj} " "\"" > buildobj.h 646 echo "#define BUILDOBJ \"${obj} ${otherobj} " "\"" > buildobj.h
684 647
648#define YMF_PASS_LDFLAGS(flags) @YMF_PASS_LDFLAGS@
649
685temacs${EXEEXT}: $(START_FILES) stamp-oldxmenu ${obj} ${otherobj} prefix-args${EXEEXT} 650temacs${EXEEXT}: $(START_FILES) stamp-oldxmenu ${obj} ${otherobj} prefix-args${EXEEXT}
686 $(LD) YMF_PASS_LDFLAGS ( ${TEMACS_LDFLAGS} \ 651 $(LD) YMF_PASS_LDFLAGS ( ${TEMACS_LDFLAGS} \
687 ${NS_IMPL_GNUSTEP_TEMACS_LDFLAGS} ) \ 652 ${NS_IMPL_GNUSTEP_TEMACS_LDFLAGS} ) \
@@ -692,8 +657,9 @@ prefix-args${EXEEXT}: prefix-args.o $(config_h)
692 $(CC) $(LDFLAGS) prefix-args.o -o prefix-args 657 $(CC) $(LDFLAGS) prefix-args.o -o prefix-args
693 658
694 659
695/* Only (possibly) used if HAVE_X11 && !USE_GTK, but no harm in always 660/* The following oldxmenu-related rules are only (possibly) used if
696 defining. */ 661 HAVE_X11 && !USE_GTK, but there is no harm in always defining them
662 (provided we take a little care that OLDXMENU is never empty). */
697really-lwlib: 663really-lwlib:
698 cd ${lwlibdir}; ${MAKE} ${MFLAGS} \ 664 cd ${lwlibdir}; ${MAKE} ${MFLAGS} \
699 CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' 665 CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}'
@@ -711,13 +677,10 @@ really-oldXMenu:
711stamp-oldxmenu: ${OLDXMENU_DEPS} 677stamp-oldxmenu: ${OLDXMENU_DEPS}
712 touch stamp-oldxmenu 678 touch stamp-oldxmenu
713 679
714/* HAVE_X11 implies HAVE_X_WINDOWS and HAVE_MENUS. */
715#if defined (HAVE_X11) && ! defined (USE_GTK)
716/* Supply an ordering for parallel make. */ 680/* Supply an ordering for parallel make. */
717../src/$(OLDXMENU): ${OLDXMENU} 681../src/$(OLDXMENU): ${OLDXMENU}
718 682
719$(OLDXMENU): $(OLDXMENU_TARGET) 683$(OLDXMENU): $(OLDXMENU_TARGET)
720#endif /* HAVE_X11 && !USE_GTK */
721 684
722../config.status:: epaths.in 685../config.status:: epaths.in
723 @echo "The file epaths.h needs to be set up from epaths.in." 686 @echo "The file epaths.h needs to be set up from epaths.in."
@@ -730,278 +693,14 @@ $(OLDXMENU): $(OLDXMENU_TARGET)
730 exit 1 693 exit 1
731 694
732ecrt0.o: ecrt0.c $(config_h) 695ecrt0.o: ecrt0.c $(config_h)
733#ifdef AUTO_DEPEND 696 @$(MKDEPDIR)
734 @-test -d deps || mkdir deps
735#endif
736 $(CC) -c $(ALL_CFLAGS) ${srcdir}/ecrt0.c 697 $(CC) -c $(ALL_CFLAGS) ${srcdir}/ecrt0.c
737doc.o: buildobj.h 698doc.o: buildobj.h
738 699
739#ifndef AUTO_DEPEND 700
740 701/* If HAVE_NS, some ns-specific rules (for OTHER_FILES) are inserted here. */
741/* FIXME some of these dependencies are platform-specific. 702@ns_frag@
742Eg callproc.c only depends on w32.h for WINDOWSNT builds. 703
743One way to fix this would be to replace w32.h (etc) by $(W32_H),
744a variable set by configure. Does not seem worth the trouble.
745Since the w32 build does not even use this file, you might ask
746why these dependencies are here at all...
747
748nsgui.h: In fact, every .o file depends directly or indirectly on
749dispextern.h and hence nsgui.h under NS. But the ones that actually
750use stuff there are more limited. */
751atimer.o: atimer.c atimer.h syssignal.h systime.h lisp.h blockinput.h \
752 $(config_h)
753bidi.o: bidi.c buffer.h character.h dispextern.h lisp.h $(config_h)
754buffer.o: buffer.c buffer.h region-cache.h commands.h window.h \
755 $(INTERVALS_H) blockinput.h atimer.h systime.h character.h \
756 indent.h keyboard.h coding.h keymap.h frame.h lisp.h $(config_h)
757callint.o: callint.c window.h commands.h buffer.h keymap.h \
758 keyboard.h dispextern.h systime.h coding.h composite.h lisp.h $(config_h)
759callproc.o: callproc.c epaths.h buffer.h commands.h lisp.h $(config_h) \
760 process.h systty.h syssignal.h character.h coding.h ccl.h msdos.h \
761 composite.h w32.h blockinput.h atimer.h systime.h frame.h termhooks.h \
762 buffer.h
763casefiddle.o: casefiddle.c syntax.h commands.h buffer.h character.h \
764 composite.h keymap.h lisp.h $(config_h)
765casetab.o: casetab.c buffer.h character.h lisp.h $(config_h)
766category.o: category.c category.h buffer.h charset.h keymap.h \
767 character.h lisp.h $(config_h)
768ccl.o: ccl.c ccl.h charset.h character.h coding.h composite.h lisp.h $(config_h)
769character.o: character.c character.h buffer.h charset.h composite.h disptab.h \
770 lisp.h $(config_h)
771charset.o: charset.c charset.h character.h buffer.h coding.h composite.h \
772 disptab.h lisp.h $(config_h)
773chartab.o: charset.h character.h ccl.h lisp.h $(config_h)
774coding.o: coding.c coding.h ccl.h buffer.h character.h charset.h composite.h \
775 window.h dispextern.h frame.h termhooks.h lisp.h $(config_h)
776cm.o: cm.c frame.h cm.h termhooks.h termchar.h dispextern.h lisp.h $(config_h)
777cmds.o: cmds.c syntax.h buffer.h character.h commands.h window.h lisp.h $(config_h) \
778 msdos.h dispextern.h keyboard.h keymap.h systime.h coding.h frame.h \
779 composite.h
780pre-crt0.o: pre-crt0.c
781dbusbind.o: dbusbind.c termhooks.h frame.h keyboard.h lisp.h $(config_h)
782dired.o: dired.c commands.h buffer.h lisp.h $(config_h) character.h charset.h \
783 coding.h regex.h systime.h blockinput.h atimer.h composite.h
784dispnew.o: dispnew.c systime.h commands.h process.h frame.h coding.h \
785 window.h buffer.h termchar.h termopts.h termhooks.h cm.h \
786 disptab.h indent.h $(INTERVALS_H) nsgui.h \
787 xterm.h blockinput.h atimer.h character.h msdos.h keyboard.h \
788 syssignal.h lisp.h $(config_h)
789doc.o: doc.c lisp.h $(config_h) epaths.h buffer.h keyboard.h keymap.h \
790 character.h systime.h coding.h composite.h
791doprnt.o: doprnt.c character.h lisp.h $(config_h)
792dosfns.o: buffer.h termchar.h termhooks.h frame.h blockinput.h window.h \
793 msdos.h dosfns.h dispextern.h charset.h coding.h atimer.h systime.h \
794 lisp.h $(config_h)
795editfns.o: editfns.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
796 coding.h frame.h blockinput.h atimer.h lisp.h $(config_h)
797emacs.o: emacs.c commands.h systty.h syssignal.h blockinput.h process.h \
798 termhooks.h buffer.h atimer.h systime.h $(INTERVALS_H) lisp.h $(config_h) \
799 window.h dispextern.h keyboard.h keymap.h frame.h coding.h
800fileio.o: fileio.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
801 coding.h msdos.h blockinput.h atimer.h lisp.h $(config_h) frame.h commands.h
802filelock.o: filelock.c buffer.h character.h coding.h systime.h composite.h \
803 lisp.h $(config_h)
804filemode.o: filemode.c $(config_h)
805frame.o: frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
806 blockinput.h atimer.h systime.h buffer.h character.h fontset.h font.h \
807 msdos.h dosfns.h dispextern.h w32term.h nsgui.h termchar.h coding.h \
808 composite.h lisp.h $(config_h) termhooks.h ccl.h
809fringe.o: fringe.c dispextern.h nsgui.h frame.h window.h buffer.h termhooks.h \
810 blockinput.h atimer.h systime.h lisp.h $(config_h)
811font.o: font.c dispextern.h frame.h window.h ccl.h character.h charset.h \
812 font.h lisp.h $(config_h) buffer.h composite.h fontset.h xterm.h nsgui.h
813ftfont.o: dispextern.h frame.h character.h charset.h composite.h font.h \
814 lisp.h $(config_h) blockinput.h atimer.h systime.h coding.h fontset.h \
815 ccl.h ftfont.h
816fontset.o: fontset.c fontset.h ccl.h buffer.h character.h \
817 charset.h frame.h keyboard.h termhooks.h font.h lisp.h $(config_h) \
818 blockinput.h atimer.h systime.h coding.h $(INTERVALS_H) nsgui.h \
819 window.h xterm.h
820getloadavg.o: getloadavg.c $(config_h)
821gtkutil.o: gtkutil.c gtkutil.h xterm.h lisp.h frame.h lisp.h $(config_h) \
822 blockinput.h window.h atimer.h systime.h termhooks.h keyboard.h \
823 charset.h coding.h syssignal.h dispextern.h composite.h
824image.o: image.c frame.h window.h dispextern.h blockinput.h atimer.h \
825 systime.h xterm.h w32term.h w32gui.h font.h epaths.h character.h coding.h \
826 nsterm.h nsgui.h lisp.h $(config_h) composite.h termhooks.h ccl.h
827indent.o: indent.c frame.h window.h indent.h buffer.h lisp.h $(config_h) termchar.h \
828 termopts.h disptab.h region-cache.h character.h category.h \
829 keyboard.h systime.h coding.h $(INTERVALS_H)
830insdel.o: insdel.c window.h buffer.h $(INTERVALS_H) blockinput.h character.h \
831 dispextern.h atimer.h systime.h region-cache.h lisp.h $(config_h)
832keyboard.o: keyboard.c termchar.h termhooks.h termopts.h buffer.h character.h \
833 commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
834 systime.h syntax.h $(INTERVALS_H) blockinput.h atimer.h composite.h \
835 xterm.h puresize.h msdos.h keymap.h w32term.h nsterm.h nsgui.h coding.h \
836 lisp.h $(config_h)
837keymap.o: keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
838 atimer.h systime.h puresize.h character.h charset.h $(INTERVALS_H) keymap.h window.h \
839 coding.h frame.h lisp.h $(config_h)
840lastfile.o: lastfile.c $(config_h)
841macros.o: macros.c window.h buffer.h commands.h macros.h keyboard.h \
842 dispextern.h lisp.h $(config_h) systime.h coding.h composite.h
843gmalloc.o: gmalloc.c $(config_h)
844ralloc.o: ralloc.c lisp.h $(config_h)
845vm-limit.o: vm-limit.c mem-limits.h lisp.h $(config_h)
846marker.o: marker.c buffer.h character.h lisp.h $(config_h)
847md5.o: md5.c md5.h $(config_h)
848minibuf.o: minibuf.c syntax.h frame.h window.h keyboard.h systime.h \
849 buffer.h commands.h character.h msdos.h $(INTERVALS_H) keymap.h \
850 termhooks.h lisp.h $(config_h) coding.h
851mktime.o: mktime.c $(config_h)
852msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \
853 termopts.h termchar.h character.h coding.h ccl.h disptab.h window.h \
854 keyboard.h $(INTERVALS_H) buffer.h commands.h blockinput.h atimer.h lisp.h $(config_h)
855nsfns.o: nsfns.m charset.h nsterm.h nsgui.h frame.h window.h buffer.h \
856 dispextern.h fontset.h $(INTERVALS_H) keyboard.h blockinput.h \
857 atimer.h systime.h epaths.h termhooks.h coding.h systime.h lisp.h $(config_h)
858nsfont.o: nsterm.h dispextern.h frame.h lisp.h lisp.h $(config_h)
859nsimage.o: nsimage.m nsterm.h lisp.h $(config_h)
860nsmenu.o: nsmenu.m termhooks.h frame.h window.h dispextern.h \
861 nsgui.h keyboard.h blockinput.h atimer.h systime.h buffer.h \
862 nsterm.h lisp.h $(config_h)
863nsterm.o: nsterm.m blockinput.h atimer.h systime.h syssignal.h nsterm.h \
864 nsgui.h frame.h charset.h ccl.h dispextern.h fontset.h termhooks.h \
865 termopts.h termchar.h disptab.h buffer.h window.h keyboard.h \
866 $(INTERVALS_H) process.h coding.h lisp.h $(config_h)
867nsselect.o: nsselect.m blockinput.h nsterm.h nsgui.h frame.h lisp.h $(config_h)
868process.o: process.c process.h buffer.h window.h termhooks.h termopts.h \
869 commands.h syssignal.h systime.h systty.h syswait.h frame.h dispextern.h \
870 blockinput.h atimer.h charset.h coding.h ccl.h msdos.h composite.h \
871 keyboard.h lisp.h $(config_h) character.h xgselect.h sysselect.h
872regex.o: regex.c syntax.h buffer.h lisp.h $(config_h) regex.h category.h character.h
873region-cache.o: region-cache.c buffer.h region-cache.h lisp.h $(config_h)
874scroll.o: scroll.c termchar.h dispextern.h frame.h msdos.h keyboard.h \
875 termhooks.h lisp.h $(config_h) systime.h coding.h composite.h window.h
876search.o: search.c regex.h commands.h buffer.h region-cache.h syntax.h \
877 blockinput.h atimer.h systime.h category.h character.h charset.h \
878 $(INTERVALS_H) \
879 lisp.h $(config_h)
880sound.o: sound.c dispextern.h syssignal.h lisp.h $(config_h) atimer.h systime.h
881strftime.o: strftime.c $(config_h)
882syntax.o: syntax.c syntax.h buffer.h commands.h category.h character.h \
883 keymap.h regex.h $(INTERVALS_H) lisp.h $(config_h)
884sysdep.o: sysdep.c syssignal.h systty.h systime.h syswait.h blockinput.h \
885 process.h dispextern.h termhooks.h termchar.h termopts.h coding.h \
886 frame.h atimer.h window.h msdos.h dosfns.h keyboard.h cm.h lisp.h $(config_h) \
887 composite.h
888term.o: term.c termchar.h termhooks.h termopts.h lisp.h $(config_h) cm.h frame.h \
889 disptab.h keyboard.h character.h charset.h coding.h ccl.h xterm.h \
890 msdos.h window.h keymap.h blockinput.h atimer.h systime.h systty.h \
891 syssignal.h $(INTERVALS_H) buffer.h
892termcap.o: termcap.c lisp.h $(config_h)
893terminal.o: terminal.c frame.h termchar.h termhooks.h charset.h coding.h \
894 keyboard.h lisp.h $(config_h) dispextern.h composite.h systime.h
895terminfo.o: terminfo.c lisp.h $(config_h)
896tparam.o: tparam.c lisp.h $(config_h)
897undo.o: undo.c buffer.h commands.h window.h dispextern.h lisp.h $(config_h)
898unexaix.o: unexaix.c lisp.h $(config_h)
899unexalpha.o: unexalpha.c $(config_h)
900unexcw.o: unexcw.c lisp.h $(config_h)
901unexec.o: unexec.c lisp.h $(config_h)
902unexelf.o: unexelf.c $(config_h)
903unexhp9k800.o: unexhp9k800.c $(config_h)
904unexmacosx.o: unexmacosx.c $(config_h)
905unexsol.o: unexsol.c lisp.h $(config_h)
906unexw32.o: unexw32.c $(config_h)
907w16select.o: w16select.c dispextern.h frame.h blockinput.h atimer.h systime.h \
908 msdos.h buffer.h charset.h coding.h composite.h lisp.h $(config_h)
909widget.o: widget.c xterm.h frame.h dispextern.h widgetprv.h \
910 $(srcdir)/../lwlib/lwlib.h lisp.h $(config_h)
911window.o: window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
912 disptab.h keyboard.h msdos.h coding.h termhooks.h \
913 keymap.h blockinput.h atimer.h systime.h $(INTERVALS_H) \
914 xterm.h w32term.h nsterm.h nsgui.h lisp.h $(config_h)
915xdisp.o: xdisp.c macros.h commands.h process.h indent.h buffer.h dispextern.h \
916 coding.h termchar.h frame.h window.h disptab.h termhooks.h character.h \
917 charset.h lisp.h $(config_h) keyboard.h $(INTERVALS_H) region-cache.h \
918 xterm.h w32term.h nsterm.h nsgui.h msdos.h composite.h fontset.h ccl.h \
919 blockinput.h atimer.h systime.h keymap.h font.h
920xfaces.o: xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
921 window.h character.h charset.h msdos.h dosfns.h composite.h atimer.h \
922 systime.h keyboard.h fontset.h w32term.h nsterm.h coding.h ccl.h \
923 $(INTERVALS_H) nsgui.h termchar.h termhooks.h font.h lisp.h $(config_h)
924xfns.o: xfns.c buffer.h frame.h window.h keyboard.h xterm.h dispextern.h \
925 $(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h systime.h epaths.h \
926 character.h charset.h coding.h gtkutil.h lisp.h $(config_h) termhooks.h \
927 fontset.h termchar.h font.h xsettings.h $(INTERVALS_H) ccl.h
928xfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
929 font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
930xftfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
931 font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h ftfont.h
932ftxfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
933 font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
934menu.o: menu.c lisp.h keyboard.h keymap.h frame.h termhooks.h blockinput.h \
935 dispextern.h $(srcdir)/../lwlib/lwlib.h xterm.h gtkutil.h menu.h \
936 lisp.h $(config_h) systime.h coding.h composite.h window.h atimer.h nsgui.h
937xmenu.o: xmenu.c xterm.h termhooks.h window.h dispextern.h frame.h buffer.h \
938 charset.h keyboard.h $(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h \
939 systime.h gtkutil.h msdos.h coding.h menu.h lisp.h $(config_h) composite.h \
940 keymap.h sysselect.h
941xterm.o: xterm.c xterm.h termhooks.h termopts.h termchar.h window.h buffer.h \
942 dispextern.h frame.h disptab.h blockinput.h atimer.h systime.h syssignal.h \
943 keyboard.h emacs-icon.h character.h charset.h ccl.h fontset.h composite.h \
944 coding.h process.h gtkutil.h font.h fontset.h lisp.h $(config_h) \
945 xsettings.h intervals.h keymap.h xgselect.h sysselect.h
946xselect.o: xselect.c process.h dispextern.h frame.h xterm.h blockinput.h \
947 buffer.h atimer.h systime.h termhooks.h lisp.h $(config_h) keyboard.h \
948 coding.h composite.h
949xgselect.o: xgselect.h systime.h sysselect.h lisp.h $(config_h)
950xrdb.o: xrdb.c lisp.h $(config_h) epaths.h
951xsmfns.o: xsmfns.c lisp.h $(config_h) systime.h sysselect.h termhooks.h xterm.h \
952 lisp.h termopts.h frame.h dispextern.h
953xsettings.o: xterm.h xsettings.h lisp.h frame.h termhooks.h $(config_h) \
954 dispextern.h keyboard.h systime.h coding.h composite.h blockinput.h atimer.h \
955 termopts.h
956
957/* The files of Lisp proper. */
958alloc.o: alloc.c process.h frame.h window.h buffer.h puresize.h syssignal.h \
959 keyboard.h blockinput.h atimer.h systime.h character.h lisp.h $(config_h) \
960 $(INTERVALS_H) termhooks.h
961bytecode.o: bytecode.c buffer.h syntax.h character.h window.h dispextern.h \
962 frame.h xterm.h lisp.h $(config_h)
963data.o: data.c buffer.h puresize.h character.h syssignal.h keyboard.h frame.h \
964 termhooks.h systime.h coding.h composite.h dispextern.h font.h ccl.h \
965 lisp.h $(config_h)
966eval.o: eval.c commands.h keyboard.h blockinput.h atimer.h systime.h \
967 dispextern.h lisp.h $(config_h) coding.h composite.h xterm.h
968floatfns.o: floatfns.c syssignal.h lisp.h $(config_h)
969fns.o: fns.c commands.h lisp.h $(config_h) frame.h buffer.h character.h keyboard.h \
970 keymap.h window.h dispextern.h $(INTERVALS_H) coding.h md5.h \
971 blockinput.h atimer.h systime.h xterm.h
972print.o: print.c process.h frame.h window.h buffer.h keyboard.h character.h \
973 lisp.h $(config_h) termchar.h $(INTERVALS_H) msdos.h termhooks.h \
974 blockinput.h atimer.h systime.h font.h charset.h coding.h ccl.h
975lread.o: lread.c commands.h keyboard.h buffer.h epaths.h character.h \
976 charset.h lisp.h $(config_h) $(INTERVALS_H) termhooks.h coding.h msdos.h \
977 systime.h frame.h blockinput.h atimer.h
978
979/* Text properties support. */
980composite.o: composite.c buffer.h character.h coding.h font.h ccl.h \
981 frame.h termhooks.h $(INTERVALS_H) window.h lisp.h $(config_h)
982intervals.o: intervals.c buffer.h $(INTERVALS_H) keyboard.h puresize.h \
983 keymap.h lisp.h $(config_h) systime.h coding.h
984textprop.o: textprop.c buffer.h window.h $(INTERVALS_H) \
985 lisp.h $(config_h)
986
987#endif /* ! AUTO_DEPEND */
988
989/* System-specific programs to be made.
990 OTHER_FILES select which of these should be compiled. */
991
992#ifdef HAVE_NS
993${ns_appdir}: ${ns_appsrc}
994 rm -fr ${ns_appdir}
995 mkdir -p ${ns_appdir}
996 ( cd ${ns_appsrc} ; tar cfh - . ) | ( cd ${ns_appdir} ; umask 022; tar xf - )
997#endif /* HAVE_NS */
998
999/* These are only used if HAVE_NS, but no harm in always defining them. */
1000${ns_appbindir}Emacs: emacs${EXEEXT}
1001 mkdir -p ${ns_appbindir}
1002 cp -f emacs${EXEEXT} ${ns_appbindir}Emacs
1003
1004ns-app: ${ns_appdir} ${ns_appbindir}Emacs
1005 704
1006mostlyclean: 705mostlyclean:
1007 rm -f temacs${EXEEXT} prefix-args${EXEEXT} core *.core \#* *.o libXMenu11.a liblw.a 706 rm -f temacs${EXEEXT} prefix-args${EXEEXT} core *.core \#* *.o libXMenu11.a liblw.a
@@ -1010,7 +709,7 @@ mostlyclean:
1010 rm -f buildobj.h 709 rm -f buildobj.h
1011clean: mostlyclean 710clean: mostlyclean
1012 rm -f emacs-*.*.*${EXEEXT} emacs${EXEEXT} 711 rm -f emacs-*.*.*${EXEEXT} emacs${EXEEXT}
1013 -rm -rf deps 712 -rm -rf ${DEPDIR}
1014 test "X${ns_appdir}" = "X" || rm -rf ${ns_appdir} 713 test "X${ns_appdir}" = "X" || rm -rf ${ns_appdir}
1015 714
1016/* bootstrap-clean is used to clean up just before a bootstrap. 715/* bootstrap-clean is used to clean up just before a bootstrap.
@@ -1102,16 +801,14 @@ ${lispsource}loaddefs.el: $(BOOTSTRAPEMACS) $(VCSWITNESS)
1102 801
1103bootstrap-emacs${EXEEXT}: temacs${EXEEXT} 802bootstrap-emacs${EXEEXT}: temacs${EXEEXT}
1104 cd ../lisp; $(MAKE) $(MFLAGS) update-subdirs 803 cd ../lisp; $(MAKE) $(MFLAGS) update-subdirs
1105#ifdef CANNOT_DUMP 804 if test "${CANNOT_DUMP}" = "yes"; then \
1106 ln -f temacs${EXEEXT} bootstrap-emacs${EXEEXT} 805 ln -f temacs${EXEEXT} bootstrap-emacs${EXEEXT}; \
1107#else 806 else \
1108 $(RUN_TEMACS) --batch --load loadup bootstrap 807 $(RUN_TEMACS) --batch --load loadup bootstrap || exit 1; \
1109 mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT} 808 mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}; \
1110#endif /* ! defined (CANNOT_DUMP) */ 809 fi
1111 @: Compile some files earlier to speed up further compilation. 810 @: Compile some files earlier to speed up further compilation.
1112 cd ../lisp; $(MAKE) $(MFLAGS) compile-first EMACS=${bootstrap_exe} 811 cd ../lisp; $(MAKE) $(MFLAGS) compile-first EMACS=${bootstrap_exe}
1113 812
1114#ifdef AUTO_DEPEND 813/* Insert either autodeps.mk (if AUTO_DEPEND), else deps.mk. */
1115ALLOBJS=$(START_FILES) ${obj} ${otherobj} prefix-args.o 814@deps_frag@
1116-include $(ALLOBJS:%.o=deps/%.d)
1117#endif
diff --git a/src/autodeps.mk b/src/autodeps.mk
new file mode 100644
index 00000000000..a5d2a04dcf4
--- /dev/null
+++ b/src/autodeps.mk
@@ -0,0 +1,6 @@
1/* autodeps.mk --- src/Makefile fragment for GNU Emacs
2
3This is inserted in src/Makefile if AUTO_DEPEND=yes. */
4
5ALLOBJS=$(START_FILES) ${obj} ${otherobj} prefix-args.o
6-include $(ALLOBJS:%.o=${DEPDIR}/%.d)
diff --git a/src/bidi.c b/src/bidi.c
index dbc95608fea..bdeccfee97c 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -543,6 +543,7 @@ bidi_copy_it (struct bidi_it *to, struct bidi_it *from)
543#define BIDI_CACHE_CHUNK 200 543#define BIDI_CACHE_CHUNK 200
544static struct bidi_it *bidi_cache; 544static struct bidi_it *bidi_cache;
545static size_t bidi_cache_size = 0; 545static size_t bidi_cache_size = 0;
546static size_t elsz = sizeof (struct bidi_it);
546static int bidi_cache_idx; /* next unused cache slot */ 547static int bidi_cache_idx; /* next unused cache slot */
547static int bidi_cache_last_idx; /* slot of last cache hit */ 548static int bidi_cache_last_idx; /* slot of last cache hit */
548 549
@@ -558,8 +559,9 @@ bidi_cache_shrink (void)
558{ 559{
559 if (bidi_cache_size > BIDI_CACHE_CHUNK) 560 if (bidi_cache_size > BIDI_CACHE_CHUNK)
560 { 561 {
561 bidi_cache_size = BIDI_CACHE_CHUNK * sizeof (struct bidi_it); 562 bidi_cache_size = BIDI_CACHE_CHUNK;
562 bidi_cache = (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size); 563 bidi_cache =
564 (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size * elsz);
563 } 565 }
564 bidi_cache_reset (); 566 bidi_cache_reset ();
565} 567}
@@ -688,9 +690,9 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, int resolved)
688 /* Enlarge the cache as needed. */ 690 /* Enlarge the cache as needed. */
689 if (idx >= bidi_cache_size) 691 if (idx >= bidi_cache_size)
690 { 692 {
691 bidi_cache_size += BIDI_CACHE_CHUNK * sizeof (struct bidi_it); 693 bidi_cache_size += BIDI_CACHE_CHUNK;
692 bidi_cache = 694 bidi_cache =
693 (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size); 695 (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size * elsz);
694 } 696 }
695 /* Character positions should correspond to cache positions 1:1. 697 /* Character positions should correspond to cache positions 1:1.
696 If we are outside the range of cached positions, the cache is 698 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)
705 bidi_copy_it (&bidi_cache[idx], bidi_it); 707 bidi_copy_it (&bidi_cache[idx], bidi_it);
706 if (!resolved) 708 if (!resolved)
707 bidi_cache[idx].resolved_level = -1; 709 bidi_cache[idx].resolved_level = -1;
708 bidi_cache[idx].new_paragraph = 0;
709 } 710 }
710 else 711 else
711 { 712 {
diff --git a/src/config.in b/src/config.in
index 99a95d7f15d..e7122bf665b 100644
--- a/src/config.in
+++ b/src/config.in
@@ -27,9 +27,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
27#define EMACS_CONFIG_H 27#define EMACS_CONFIG_H
28 28
29 29
30/* Generate dependencies with gcc. */
31#undef AUTO_DEPEND
32
33/* Define to 1 if the mktime function is broken. */ 30/* Define to 1 if the mktime function is broken. */
34#undef BROKEN_MKTIME 31#undef BROKEN_MKTIME
35 32
@@ -841,6 +838,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
841/* Define to 1 if you are using NS windowing under GNUstep. */ 838/* Define to 1 if you are using NS windowing under GNUstep. */
842#undef NS_IMPL_GNUSTEP 839#undef NS_IMPL_GNUSTEP
843 840
841/* Define if the C compiler is the linker. */
842#undef ORDINARY_LINK
843
844/* Define to the address where bug reports for this package should be sent. */ 844/* Define to the address where bug reports for this package should be sent. */
845#undef PACKAGE_BUGREPORT 845#undef PACKAGE_BUGREPORT
846 846
diff --git a/src/deps.mk b/src/deps.mk
new file mode 100644
index 00000000000..08a435da6a9
--- /dev/null
+++ b/src/deps.mk
@@ -0,0 +1,279 @@
1/* deps.mk --- src/Makefile fragment for GNU Emacs
2
3Copyright (C) 1985, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001, 2002,
4 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
5 Free Software Foundation, Inc.
6
7This file is part of GNU Emacs.
8
9GNU Emacs is free software: you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation, either version 3 of the License, or
12(at your option) any later version.
13
14GNU Emacs is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22Commentary:
23
24This file is inserted in src/Makefile if AUTO_DEPEND=no.
25It defines static dependencies between the various source files.
26
27FIXME some of these dependencies are platform-specific.
28Eg callproc.c only depends on w32.h for WINDOWSNT builds.
29One way to fix this would be to replace w32.h (etc) by $(W32_H),
30a variable set by configure. Does not seem worth the trouble.
31Since the w32 build does not even use this file, you might ask
32why these dependencies are here at all...
33
34nsgui.h: In fact, every .o file depends directly or indirectly on
35dispextern.h and hence nsgui.h under NS. But the ones that actually
36use stuff there are more limited.
37
38Code: */
39
40atimer.o: atimer.c atimer.h syssignal.h systime.h lisp.h blockinput.h \
41 $(config_h)
42bidi.o: bidi.c buffer.h character.h dispextern.h lisp.h $(config_h)
43buffer.o: buffer.c buffer.h region-cache.h commands.h window.h \
44 $(INTERVALS_H) blockinput.h atimer.h systime.h character.h \
45 indent.h keyboard.h coding.h keymap.h frame.h lisp.h $(config_h)
46callint.o: callint.c window.h commands.h buffer.h keymap.h \
47 keyboard.h dispextern.h systime.h coding.h composite.h lisp.h $(config_h)
48callproc.o: callproc.c epaths.h buffer.h commands.h lisp.h $(config_h) \
49 process.h systty.h syssignal.h character.h coding.h ccl.h msdos.h \
50 composite.h w32.h blockinput.h atimer.h systime.h frame.h termhooks.h \
51 buffer.h
52casefiddle.o: casefiddle.c syntax.h commands.h buffer.h character.h \
53 composite.h keymap.h lisp.h $(config_h)
54casetab.o: casetab.c buffer.h character.h lisp.h $(config_h)
55category.o: category.c category.h buffer.h charset.h keymap.h \
56 character.h lisp.h $(config_h)
57ccl.o: ccl.c ccl.h charset.h character.h coding.h composite.h lisp.h $(config_h)
58character.o: character.c character.h buffer.h charset.h composite.h disptab.h \
59 lisp.h $(config_h)
60charset.o: charset.c charset.h character.h buffer.h coding.h composite.h \
61 disptab.h lisp.h $(config_h)
62chartab.o: charset.h character.h ccl.h lisp.h $(config_h)
63coding.o: coding.c coding.h ccl.h buffer.h character.h charset.h composite.h \
64 window.h dispextern.h frame.h termhooks.h lisp.h $(config_h)
65cm.o: cm.c frame.h cm.h termhooks.h termchar.h dispextern.h lisp.h $(config_h)
66cmds.o: cmds.c syntax.h buffer.h character.h commands.h window.h lisp.h \
67 $(config_h) msdos.h dispextern.h keyboard.h keymap.h systime.h \
68 coding.h frame.h composite.h
69pre-crt0.o: pre-crt0.c
70dbusbind.o: dbusbind.c termhooks.h frame.h keyboard.h lisp.h $(config_h)
71dired.o: dired.c commands.h buffer.h lisp.h $(config_h) character.h charset.h \
72 coding.h regex.h systime.h blockinput.h atimer.h composite.h
73dispnew.o: dispnew.c systime.h commands.h process.h frame.h coding.h \
74 window.h buffer.h termchar.h termopts.h termhooks.h cm.h \
75 disptab.h indent.h $(INTERVALS_H) nsgui.h \
76 xterm.h blockinput.h atimer.h character.h msdos.h keyboard.h \
77 syssignal.h lisp.h $(config_h)
78doc.o: doc.c lisp.h $(config_h) epaths.h buffer.h keyboard.h keymap.h \
79 character.h systime.h coding.h composite.h
80doprnt.o: doprnt.c character.h lisp.h $(config_h)
81dosfns.o: buffer.h termchar.h termhooks.h frame.h blockinput.h window.h \
82 msdos.h dosfns.h dispextern.h charset.h coding.h atimer.h systime.h \
83 lisp.h $(config_h)
84editfns.o: editfns.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
85 coding.h frame.h blockinput.h atimer.h lisp.h $(config_h)
86emacs.o: emacs.c commands.h systty.h syssignal.h blockinput.h process.h \
87 termhooks.h buffer.h atimer.h systime.h $(INTERVALS_H) lisp.h $(config_h) \
88 window.h dispextern.h keyboard.h keymap.h frame.h coding.h
89fileio.o: fileio.c window.h buffer.h systime.h $(INTERVALS_H) character.h \
90 coding.h msdos.h blockinput.h atimer.h lisp.h $(config_h) frame.h commands.h
91filelock.o: filelock.c buffer.h character.h coding.h systime.h composite.h \
92 lisp.h $(config_h)
93filemode.o: filemode.c $(config_h)
94frame.o: frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
95 blockinput.h atimer.h systime.h buffer.h character.h fontset.h font.h \
96 msdos.h dosfns.h dispextern.h w32term.h nsgui.h termchar.h coding.h \
97 composite.h lisp.h $(config_h) termhooks.h ccl.h
98fringe.o: fringe.c dispextern.h nsgui.h frame.h window.h buffer.h termhooks.h \
99 blockinput.h atimer.h systime.h lisp.h $(config_h)
100font.o: font.c dispextern.h frame.h window.h ccl.h character.h charset.h \
101 font.h lisp.h $(config_h) buffer.h composite.h fontset.h xterm.h nsgui.h
102ftfont.o: dispextern.h frame.h character.h charset.h composite.h font.h \
103 lisp.h $(config_h) blockinput.h atimer.h systime.h coding.h fontset.h \
104 ccl.h ftfont.h
105fontset.o: fontset.c fontset.h ccl.h buffer.h character.h \
106 charset.h frame.h keyboard.h termhooks.h font.h lisp.h $(config_h) \
107 blockinput.h atimer.h systime.h coding.h $(INTERVALS_H) nsgui.h \
108 window.h xterm.h
109getloadavg.o: getloadavg.c $(config_h)
110gtkutil.o: gtkutil.c gtkutil.h xterm.h lisp.h frame.h lisp.h $(config_h) \
111 blockinput.h window.h atimer.h systime.h termhooks.h keyboard.h \
112 charset.h coding.h syssignal.h dispextern.h composite.h
113image.o: image.c frame.h window.h dispextern.h blockinput.h atimer.h \
114 systime.h xterm.h w32term.h w32gui.h font.h epaths.h character.h coding.h \
115 nsterm.h nsgui.h lisp.h $(config_h) composite.h termhooks.h ccl.h
116indent.o: indent.c frame.h window.h indent.h buffer.h lisp.h $(config_h) \
117 termchar.h termopts.h disptab.h region-cache.h character.h category.h \
118 keyboard.h systime.h coding.h $(INTERVALS_H)
119insdel.o: insdel.c window.h buffer.h $(INTERVALS_H) blockinput.h character.h \
120 dispextern.h atimer.h systime.h region-cache.h lisp.h $(config_h)
121keyboard.o: keyboard.c termchar.h termhooks.h termopts.h buffer.h character.h \
122 commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
123 systime.h syntax.h $(INTERVALS_H) blockinput.h atimer.h composite.h \
124 xterm.h puresize.h msdos.h keymap.h w32term.h nsterm.h nsgui.h coding.h \
125 lisp.h $(config_h)
126keymap.o: keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
127 atimer.h systime.h puresize.h character.h charset.h $(INTERVALS_H) \
128 keymap.h window.h coding.h frame.h lisp.h $(config_h)
129lastfile.o: lastfile.c $(config_h)
130macros.o: macros.c window.h buffer.h commands.h macros.h keyboard.h \
131 dispextern.h lisp.h $(config_h) systime.h coding.h composite.h
132gmalloc.o: gmalloc.c $(config_h)
133ralloc.o: ralloc.c lisp.h $(config_h)
134vm-limit.o: vm-limit.c mem-limits.h lisp.h $(config_h)
135marker.o: marker.c buffer.h character.h lisp.h $(config_h)
136md5.o: md5.c md5.h $(config_h)
137minibuf.o: minibuf.c syntax.h frame.h window.h keyboard.h systime.h \
138 buffer.h commands.h character.h msdos.h $(INTERVALS_H) keymap.h \
139 termhooks.h lisp.h $(config_h) coding.h
140mktime.o: mktime.c $(config_h)
141msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \
142 termopts.h termchar.h character.h coding.h ccl.h disptab.h window.h \
143 keyboard.h $(INTERVALS_H) buffer.h commands.h blockinput.h atimer.h \
144 lisp.h $(config_h)
145nsfns.o: nsfns.m charset.h nsterm.h nsgui.h frame.h window.h buffer.h \
146 dispextern.h fontset.h $(INTERVALS_H) keyboard.h blockinput.h \
147 atimer.h systime.h epaths.h termhooks.h coding.h systime.h lisp.h $(config_h)
148nsfont.o: nsterm.h dispextern.h frame.h lisp.h lisp.h $(config_h)
149nsimage.o: nsimage.m nsterm.h lisp.h $(config_h)
150nsmenu.o: nsmenu.m termhooks.h frame.h window.h dispextern.h \
151 nsgui.h keyboard.h blockinput.h atimer.h systime.h buffer.h \
152 nsterm.h lisp.h $(config_h)
153nsterm.o: nsterm.m blockinput.h atimer.h systime.h syssignal.h nsterm.h \
154 nsgui.h frame.h charset.h ccl.h dispextern.h fontset.h termhooks.h \
155 termopts.h termchar.h disptab.h buffer.h window.h keyboard.h \
156 $(INTERVALS_H) process.h coding.h lisp.h $(config_h)
157nsselect.o: nsselect.m blockinput.h nsterm.h nsgui.h frame.h lisp.h $(config_h)
158process.o: process.c process.h buffer.h window.h termhooks.h termopts.h \
159 commands.h syssignal.h systime.h systty.h syswait.h frame.h dispextern.h \
160 blockinput.h atimer.h charset.h coding.h ccl.h msdos.h composite.h \
161 keyboard.h lisp.h $(config_h) character.h xgselect.h sysselect.h
162regex.o: regex.c syntax.h buffer.h lisp.h $(config_h) regex.h \
163 category.h character.h
164region-cache.o: region-cache.c buffer.h region-cache.h lisp.h $(config_h)
165scroll.o: scroll.c termchar.h dispextern.h frame.h msdos.h keyboard.h \
166 termhooks.h lisp.h $(config_h) systime.h coding.h composite.h window.h
167search.o: search.c regex.h commands.h buffer.h region-cache.h syntax.h \
168 blockinput.h atimer.h systime.h category.h character.h charset.h \
169 $(INTERVALS_H) \
170 lisp.h $(config_h)
171sound.o: sound.c dispextern.h syssignal.h lisp.h $(config_h) atimer.h systime.h
172strftime.o: strftime.c $(config_h)
173syntax.o: syntax.c syntax.h buffer.h commands.h category.h character.h \
174 keymap.h regex.h $(INTERVALS_H) lisp.h $(config_h)
175sysdep.o: sysdep.c syssignal.h systty.h systime.h syswait.h blockinput.h \
176 process.h dispextern.h termhooks.h termchar.h termopts.h coding.h \
177 frame.h atimer.h window.h msdos.h dosfns.h keyboard.h cm.h lisp.h \
178 $(config_h) composite.h
179term.o: term.c termchar.h termhooks.h termopts.h lisp.h $(config_h) \
180 cm.h frame.h disptab.h keyboard.h character.h charset.h coding.h ccl.h \
181 xterm.h msdos.h window.h keymap.h blockinput.h atimer.h systime.h \
182 systty.h syssignal.h $(INTERVALS_H) buffer.h
183termcap.o: termcap.c lisp.h $(config_h)
184terminal.o: terminal.c frame.h termchar.h termhooks.h charset.h coding.h \
185 keyboard.h lisp.h $(config_h) dispextern.h composite.h systime.h
186terminfo.o: terminfo.c lisp.h $(config_h)
187tparam.o: tparam.c lisp.h $(config_h)
188undo.o: undo.c buffer.h commands.h window.h dispextern.h lisp.h $(config_h)
189unexaix.o: unexaix.c lisp.h $(config_h)
190unexalpha.o: unexalpha.c $(config_h)
191unexcw.o: unexcw.c lisp.h $(config_h)
192unexec.o: unexec.c lisp.h $(config_h)
193unexelf.o: unexelf.c $(config_h)
194unexhp9k800.o: unexhp9k800.c $(config_h)
195unexmacosx.o: unexmacosx.c $(config_h)
196unexsol.o: unexsol.c lisp.h $(config_h)
197unexw32.o: unexw32.c $(config_h)
198w16select.o: w16select.c dispextern.h frame.h blockinput.h atimer.h systime.h \
199 msdos.h buffer.h charset.h coding.h composite.h lisp.h $(config_h)
200widget.o: widget.c xterm.h frame.h dispextern.h widgetprv.h \
201 $(srcdir)/../lwlib/lwlib.h lisp.h $(config_h)
202window.o: window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
203 disptab.h keyboard.h msdos.h coding.h termhooks.h \
204 keymap.h blockinput.h atimer.h systime.h $(INTERVALS_H) \
205 xterm.h w32term.h nsterm.h nsgui.h lisp.h $(config_h)
206xdisp.o: xdisp.c macros.h commands.h process.h indent.h buffer.h dispextern.h \
207 coding.h termchar.h frame.h window.h disptab.h termhooks.h character.h \
208 charset.h lisp.h $(config_h) keyboard.h $(INTERVALS_H) region-cache.h \
209 xterm.h w32term.h nsterm.h nsgui.h msdos.h composite.h fontset.h ccl.h \
210 blockinput.h atimer.h systime.h keymap.h font.h
211xfaces.o: xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
212 window.h character.h charset.h msdos.h dosfns.h composite.h atimer.h \
213 systime.h keyboard.h fontset.h w32term.h nsterm.h coding.h ccl.h \
214 $(INTERVALS_H) nsgui.h termchar.h termhooks.h font.h lisp.h $(config_h)
215xfns.o: xfns.c buffer.h frame.h window.h keyboard.h xterm.h dispextern.h \
216 $(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h systime.h epaths.h \
217 character.h charset.h coding.h gtkutil.h lisp.h $(config_h) termhooks.h \
218 fontset.h termchar.h font.h xsettings.h $(INTERVALS_H) ccl.h
219xfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
220 font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
221xftfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
222 font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h ftfont.h
223ftxfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
224 font.h lisp.h $(config_h) atimer.h systime.h fontset.h ccl.h
225menu.o: menu.c lisp.h keyboard.h keymap.h frame.h termhooks.h blockinput.h \
226 dispextern.h $(srcdir)/../lwlib/lwlib.h xterm.h gtkutil.h menu.h \
227 lisp.h $(config_h) systime.h coding.h composite.h window.h atimer.h nsgui.h
228xmenu.o: xmenu.c xterm.h termhooks.h window.h dispextern.h frame.h buffer.h \
229 charset.h keyboard.h $(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h \
230 systime.h gtkutil.h msdos.h coding.h menu.h lisp.h $(config_h) composite.h \
231 keymap.h sysselect.h
232xterm.o: xterm.c xterm.h termhooks.h termopts.h termchar.h window.h buffer.h \
233 dispextern.h frame.h disptab.h blockinput.h atimer.h systime.h syssignal.h \
234 keyboard.h emacs-icon.h character.h charset.h ccl.h fontset.h composite.h \
235 coding.h process.h gtkutil.h font.h fontset.h lisp.h $(config_h) \
236 xsettings.h intervals.h keymap.h xgselect.h sysselect.h
237xselect.o: xselect.c process.h dispextern.h frame.h xterm.h blockinput.h \
238 buffer.h atimer.h systime.h termhooks.h lisp.h $(config_h) keyboard.h \
239 coding.h composite.h
240xgselect.o: xgselect.h systime.h sysselect.h lisp.h $(config_h)
241xrdb.o: xrdb.c lisp.h $(config_h) epaths.h
242xsmfns.o: xsmfns.c lisp.h $(config_h) systime.h sysselect.h termhooks.h \
243 xterm.h lisp.h termopts.h frame.h dispextern.h
244xsettings.o: xterm.h xsettings.h lisp.h frame.h termhooks.h $(config_h) \
245 dispextern.h keyboard.h systime.h coding.h composite.h blockinput.h \
246 atimer.h termopts.h
247
248/* The files of Lisp proper. */
249alloc.o: alloc.c process.h frame.h window.h buffer.h puresize.h syssignal.h \
250 keyboard.h blockinput.h atimer.h systime.h character.h lisp.h $(config_h) \
251 $(INTERVALS_H) termhooks.h
252bytecode.o: bytecode.c buffer.h syntax.h character.h window.h dispextern.h \
253 frame.h xterm.h lisp.h $(config_h)
254data.o: data.c buffer.h puresize.h character.h syssignal.h keyboard.h frame.h \
255 termhooks.h systime.h coding.h composite.h dispextern.h font.h ccl.h \
256 lisp.h $(config_h)
257eval.o: eval.c commands.h keyboard.h blockinput.h atimer.h systime.h \
258 dispextern.h lisp.h $(config_h) coding.h composite.h xterm.h
259floatfns.o: floatfns.c syssignal.h lisp.h $(config_h)
260fns.o: fns.c commands.h lisp.h $(config_h) frame.h buffer.h character.h \
261 keyboard.h keymap.h window.h dispextern.h $(INTERVALS_H) coding.h md5.h \
262 blockinput.h atimer.h systime.h xterm.h
263print.o: print.c process.h frame.h window.h buffer.h keyboard.h character.h \
264 lisp.h $(config_h) termchar.h $(INTERVALS_H) msdos.h termhooks.h \
265 blockinput.h atimer.h systime.h font.h charset.h coding.h ccl.h
266lread.o: lread.c commands.h keyboard.h buffer.h epaths.h character.h \
267 charset.h lisp.h $(config_h) $(INTERVALS_H) termhooks.h coding.h msdos.h \
268 systime.h frame.h blockinput.h atimer.h
269
270/* Text properties support. */
271composite.o: composite.c buffer.h character.h coding.h font.h ccl.h \
272 frame.h termhooks.h $(INTERVALS_H) window.h lisp.h $(config_h)
273intervals.o: intervals.c buffer.h $(INTERVALS_H) keyboard.h puresize.h \
274 keymap.h lisp.h $(config_h) systime.h coding.h
275textprop.o: textprop.c buffer.h window.h $(INTERVALS_H) \
276 lisp.h $(config_h)
277
278
279/* deps.mk ends here */
diff --git a/src/dispextern.h b/src/dispextern.h
index a68bc3e9899..f0d14c0e487 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -748,21 +748,29 @@ struct glyph_row
748 748
749 /* First position in this row. This is the text position, including 749 /* First position in this row. This is the text position, including
750 overlay position information etc, where the display of this row 750 overlay position information etc, where the display of this row
751 started, and can thus be less the position of the first glyph 751 started, and can thus be less than the position of the first
752 (e.g. due to invisible text or horizontal scrolling). BIDI Note: 752 glyph (e.g. due to invisible text or horizontal scrolling).
753 This is the smallest character position in the row, but not 753 BIDI Note: In R2L rows, that have its reversed_p flag set, this
754 necessarily the character that is the leftmost on the display. */ 754 position is at or beyond the right edge of the row. */
755 struct display_pos start; 755 struct display_pos start;
756 756
757 /* Text position at the end of this row. This is the position after 757 /* Text position at the end of this row. This is the position after
758 the last glyph on this row. It can be greater than the last 758 the last glyph on this row. It can be greater than the last
759 glyph position + 1, due to truncation, invisible text etc. In an 759 glyph position + 1, due to a newline that ends the line,
760 up-to-date display, this should always be equal to the start 760 truncation, invisible text etc. In an up-to-date display, this
761 position of the next row. BIDI Note: this is the character whose 761 should always be equal to the start position of the next row.
762 buffer position is the largest, but not necessarily the rightmost 762 BIDI Note: In R2L rows, this position is at or beyond the left
763 one on the display. */ 763 edge of the row. */
764 struct display_pos end; 764 struct display_pos end;
765 765
766 /* The smallest and the largest buffer positions that contributed to
767 glyphs in this row. Note that due to bidi reordering, these are
768 in general different from the text positions stored in `start'
769 and `end' members above, and also different from the buffer
770 positions recorded in the glyphs displayed the leftmost and
771 rightmost on the screen. */
772 struct text_pos minpos, maxpos;
773
766 /* Non-zero means the overlay arrow bitmap is on this line. 774 /* Non-zero means the overlay arrow bitmap is on this line.
767 -1 means use default overlay arrow bitmap, else 775 -1 means use default overlay arrow bitmap, else
768 it specifies actual fringe bitmap number. */ 776 it specifies actual fringe bitmap number. */
@@ -947,16 +955,16 @@ struct glyph_row *matrix_row P_ ((struct glyph_matrix *, int));
947 displayed by ROW, which is not necessarily the smallest horizontal 955 displayed by ROW, which is not necessarily the smallest horizontal
948 position. */ 956 position. */
949 957
950#define MATRIX_ROW_START_CHARPOS(ROW) ((ROW)->start.pos.charpos) 958#define MATRIX_ROW_START_CHARPOS(ROW) ((ROW)->minpos.charpos)
951#define MATRIX_ROW_START_BYTEPOS(ROW) ((ROW)->start.pos.bytepos) 959#define MATRIX_ROW_START_BYTEPOS(ROW) ((ROW)->minpos.bytepos)
952 960
953/* Return the character/ byte position at which ROW ends. BIDI Note: 961/* Return the character/ byte position at which ROW ends. BIDI Note:
954 this is the largest character/byte position among characters in 962 this is the largest character/byte position among characters in
955 ROW, i.e. the last logical-order character displayed by ROW, which 963 ROW, i.e. the last logical-order character displayed by ROW, which
956 is not necessarily the largest horizontal position. */ 964 is not necessarily the largest horizontal position. */
957 965
958#define MATRIX_ROW_END_CHARPOS(ROW) ((ROW)->end.pos.charpos) 966#define MATRIX_ROW_END_CHARPOS(ROW) ((ROW)->maxpos.charpos)
959#define MATRIX_ROW_END_BYTEPOS(ROW) ((ROW)->end.pos.bytepos) 967#define MATRIX_ROW_END_BYTEPOS(ROW) ((ROW)->maxpos.bytepos)
960 968
961/* Return the vertical position of ROW in MATRIX. */ 969/* Return the vertical position of ROW in MATRIX. */
962 970
@@ -1789,7 +1797,7 @@ struct bidi_it {
1789 EMACS_INT next_en_pos; /* position of next EN char for ET */ 1797 EMACS_INT next_en_pos; /* position of next EN char for ET */
1790 EMACS_INT ignore_bn_limit; /* position until which to ignore BNs */ 1798 EMACS_INT ignore_bn_limit; /* position until which to ignore BNs */
1791 bidi_dir_t sor; /* direction of start-of-run in effect */ 1799 bidi_dir_t sor; /* direction of start-of-run in effect */
1792 int scan_dir; /* direction of text scan */ 1800 int scan_dir; /* direction of text scan, 1: forw, -1: back */
1793 int stack_idx; /* index of current data on the stack */ 1801 int stack_idx; /* index of current data on the stack */
1794 /* Note: Everything from here on is not copied/saved when the bidi 1802 /* Note: Everything from here on is not copied/saved when the bidi
1795 iterator state is saved, pushed, or popped. So only put here 1803 iterator state is saved, pushed, or popped. So only put here
@@ -2913,8 +2921,8 @@ void mark_window_display_accurate P_ ((Lisp_Object, int));
2913void redisplay_preserve_echo_area P_ ((int)); 2921void redisplay_preserve_echo_area P_ ((int));
2914int set_cursor_from_row P_ ((struct window *, struct glyph_row *, 2922int set_cursor_from_row P_ ((struct window *, struct glyph_row *,
2915 struct glyph_matrix *, int, int, int, int)); 2923 struct glyph_matrix *, int, int, int, int));
2916void init_iterator P_ ((struct it *, struct window *, int, 2924void init_iterator P_ ((struct it *, struct window *, EMACS_INT,
2917 int, struct glyph_row *, enum face_id)); 2925 EMACS_INT, struct glyph_row *, enum face_id));
2918void init_iterator_to_row_start P_ ((struct it *, struct window *, 2926void init_iterator_to_row_start P_ ((struct it *, struct window *,
2919 struct glyph_row *)); 2927 struct glyph_row *));
2920int get_next_display_element P_ ((struct it *)); 2928int get_next_display_element P_ ((struct it *));
diff --git a/src/dispnew.c b/src/dispnew.c
index 7ab2bf35811..476b58ae7e3 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -1188,6 +1188,10 @@ increment_row_positions (row, delta, delta_bytes)
1188 MATRIX_ROW_START_BYTEPOS (row) += delta_bytes; 1188 MATRIX_ROW_START_BYTEPOS (row) += delta_bytes;
1189 MATRIX_ROW_END_CHARPOS (row) += delta; 1189 MATRIX_ROW_END_CHARPOS (row) += delta;
1190 MATRIX_ROW_END_BYTEPOS (row) += delta_bytes; 1190 MATRIX_ROW_END_BYTEPOS (row) += delta_bytes;
1191 CHARPOS (row->start.pos) += delta;
1192 BYTEPOS (row->start.pos) += delta_bytes;
1193 CHARPOS (row->end.pos) += delta;
1194 BYTEPOS (row->end.pos) += delta_bytes;
1191 1195
1192 if (!row->enabled_p) 1196 if (!row->enabled_p)
1193 return; 1197 return;
@@ -1748,13 +1752,19 @@ check_matrix_invariants (w)
1748 /* Check that character and byte positions are in sync. */ 1752 /* Check that character and byte positions are in sync. */
1749 xassert (MATRIX_ROW_START_BYTEPOS (row) 1753 xassert (MATRIX_ROW_START_BYTEPOS (row)
1750 == CHAR_TO_BYTE (MATRIX_ROW_START_CHARPOS (row))); 1754 == CHAR_TO_BYTE (MATRIX_ROW_START_CHARPOS (row)));
1755 xassert (BYTEPOS (row->start.pos)
1756 == CHAR_TO_BYTE (CHARPOS (row->start.pos)));
1751 1757
1752 /* CHAR_TO_BYTE aborts when invoked for a position > Z. We can 1758 /* CHAR_TO_BYTE aborts when invoked for a position > Z. We can
1753 have such a position temporarily in case of a minibuffer 1759 have such a position temporarily in case of a minibuffer
1754 displaying something like `[Sole completion]' at its end. */ 1760 displaying something like `[Sole completion]' at its end. */
1755 if (MATRIX_ROW_END_CHARPOS (row) < BUF_ZV (current_buffer)) 1761 if (MATRIX_ROW_END_CHARPOS (row) < BUF_ZV (current_buffer))
1756 xassert (MATRIX_ROW_END_BYTEPOS (row) 1762 {
1757 == CHAR_TO_BYTE (MATRIX_ROW_END_CHARPOS (row))); 1763 xassert (MATRIX_ROW_END_BYTEPOS (row)
1764 == CHAR_TO_BYTE (MATRIX_ROW_END_CHARPOS (row)));
1765 xassert (BYTEPOS (row->end.pos)
1766 == CHAR_TO_BYTE (CHARPOS (row->end.pos)));
1767 }
1758 1768
1759 /* Check that end position of `row' is equal to start position 1769 /* Check that end position of `row' is equal to start position
1760 of next row. */ 1770 of next row. */
@@ -1764,6 +1774,8 @@ check_matrix_invariants (w)
1764 == MATRIX_ROW_START_CHARPOS (next)); 1774 == MATRIX_ROW_START_CHARPOS (next));
1765 xassert (MATRIX_ROW_END_BYTEPOS (row) 1775 xassert (MATRIX_ROW_END_BYTEPOS (row)
1766 == MATRIX_ROW_START_BYTEPOS (next)); 1776 == MATRIX_ROW_START_BYTEPOS (next));
1777 xassert (CHARPOS (row->end.pos) == CHARPOS (next->start.pos));
1778 xassert (BYTEPOS (row->end.pos) == BYTEPOS (next->start.pos));
1767 } 1779 }
1768 row = next; 1780 row = next;
1769 } 1781 }
diff --git a/src/fileio.c b/src/fileio.c
index 85685ebc9c4..de32bfecd34 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2194,7 +2194,10 @@ DEFUN ("delete-directory-internal", Fdelete_directory_internal,
2194 return Qnil; 2194 return Qnil;
2195} 2195}
2196 2196
2197DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 2, "fDelete file: \nP", 2197DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 2,
2198 "(list (read-file-name \"Delete file: \" nil default-directory \
2199 (confirm-nonexistent-file-or-buffer)) \
2200 current-prefix-arg)",
2198 doc: /* Delete file named FILENAME. If it is a symlink, remove the symlink. 2201 doc: /* Delete file named FILENAME. If it is a symlink, remove the symlink.
2199If file has multiple names, it continues to exist with the other names. 2202If file has multiple names, it continues to exist with the other names.
2200 2203
diff --git a/src/image.c b/src/image.c
index 030e06ad77a..b9620e10948 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1582,29 +1582,56 @@ clear_image_cache (struct frame *f, Lisp_Object filter)
1582{ 1582{
1583 struct image_cache *c = FRAME_IMAGE_CACHE (f); 1583 struct image_cache *c = FRAME_IMAGE_CACHE (f);
1584 1584
1585 if (c && (!NILP (filter) || INTEGERP (Vimage_cache_eviction_delay))) 1585 if (c)
1586 { 1586 {
1587 EMACS_TIME t; 1587 int i, nfreed = 0;
1588 unsigned long old;
1589 int i, nfreed;
1590
1591 EMACS_GET_TIME (t);
1592 old = EMACS_SECS (t) - XFASTINT (Vimage_cache_eviction_delay);
1593 1588
1594 /* Block input so that we won't be interrupted by a SIGIO 1589 /* Block input so that we won't be interrupted by a SIGIO
1595 while being in an inconsistent state. */ 1590 while being in an inconsistent state. */
1596 BLOCK_INPUT; 1591 BLOCK_INPUT;
1597 1592
1598 for (i = nfreed = 0; i < c->used; ++i) 1593 if (!NILP (filter))
1599 { 1594 {
1600 struct image *img = c->images[i]; 1595 /* Filter image cache. */
1601 if (img != NULL 1596 for (i = 0; i < c->used; ++i)
1602 && (NILP (filter) ? img->timestamp < old
1603 : (EQ (Qt, filter)
1604 || !NILP (Fmember (filter, img->dependencies)))))
1605 { 1597 {
1606 free_image (f, img); 1598 struct image *img = c->images[i];
1607 ++nfreed; 1599 if (img && (EQ (Qt, filter)
1600 || !NILP (Fmember (filter, img->dependencies))))
1601 {
1602 free_image (f, img);
1603 ++nfreed;
1604 }
1605 }
1606 }
1607 else if (INTEGERP (Vimage_cache_eviction_delay))
1608 {
1609 /* Free cache based on timestamp. */
1610 EMACS_TIME t;
1611 unsigned long old;
1612 int delay, nimages = 0;
1613
1614 for (i = 0; i < c->used; ++i)
1615 if (c->images[i])
1616 nimages++;
1617
1618 /* If the number of cached images has grown unusually large,
1619 decrease the cache eviction delay (Bug#6230). */
1620 delay = XFASTINT (Vimage_cache_eviction_delay);
1621 if (nimages > 40)
1622 delay = max (1, 1600 * delay / (nimages*nimages));
1623
1624 EMACS_GET_TIME (t);
1625 old = EMACS_SECS (t) - delay;
1626
1627 for (i = 0; i < c->used; ++i)
1628 {
1629 struct image *img = c->images[i];
1630 if (img && img->timestamp < old)
1631 {
1632 free_image (f, img);
1633 ++nfreed;
1634 }
1608 } 1635 }
1609 } 1636 }
1610 1637
@@ -1662,11 +1689,13 @@ which is then usually a filename. */)
1662} 1689}
1663 1690
1664 1691
1665DEFUN ("image-refresh", Fimage_refresh, Simage_refresh, 1692DEFUN ("image-flush", Fimage_flush, Simage_flush,
1666 1, 2, 0, 1693 1, 2, 0,
1667 doc: /* Refresh the image with specification SPEC on frame FRAME. 1694 doc: /* Fush the image with specification SPEC on frame FRAME.
1668If SPEC specifies an image file, the displayed image is updated with 1695This removes the image from the Emacs image cache. If SPEC specifies
1669the current contents of that file. 1696an image file, the next redisplay of this image will read from the
1697current contents of that file.
1698
1670FRAME nil or omitted means use the selected frame. 1699FRAME nil or omitted means use the selected frame.
1671FRAME t means refresh the image on all frames. */) 1700FRAME t means refresh the image on all frames. */)
1672 (spec, frame) 1701 (spec, frame)
@@ -8499,7 +8528,7 @@ non-numeric, there is no explicit limit on the size of images. */);
8499 8528
8500 defsubr (&Sinit_image_library); 8529 defsubr (&Sinit_image_library);
8501 defsubr (&Sclear_image_cache); 8530 defsubr (&Sclear_image_cache);
8502 defsubr (&Simage_refresh); 8531 defsubr (&Simage_flush);
8503 defsubr (&Simage_size); 8532 defsubr (&Simage_size);
8504 defsubr (&Simage_mask_p); 8533 defsubr (&Simage_mask_p);
8505 defsubr (&Simage_metadata); 8534 defsubr (&Simage_metadata);
@@ -8520,11 +8549,14 @@ A cross is always drawn on black & white displays. */);
8520 Vx_bitmap_file_path = decode_env_path ((char *) 0, PATH_BITMAPS); 8549 Vx_bitmap_file_path = decode_env_path ((char *) 0, PATH_BITMAPS);
8521 8550
8522 DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay, 8551 DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay,
8523 doc: /* Time after which cached images are removed from the cache. 8552 doc: /* Maximum time after which images are removed from the cache.
8524When an image has not been displayed this many seconds, remove it 8553When an image has not been displayed this many seconds, Emacs
8525from the image cache. Value must be an integer or nil with nil 8554automatically removes it from the image cache. If the cache contains
8526meaning don't clear the cache. */); 8555a large number of images, the actual eviction time may be shorter.
8527 Vimage_cache_eviction_delay = make_number (30 * 60); 8556The value can also be nil, meaning the cache is never cleared.
8557
8558The function `clear-image-cache' disregards this variable. */);
8559 Vimage_cache_eviction_delay = make_number (300);
8528} 8560}
8529 8561
8530void 8562void
diff --git a/src/keyboard.c b/src/keyboard.c
index 74efb856852..63372d600e3 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -11985,7 +11985,7 @@ The value `kill-region' is special; it means that the previous command
11985was a kill command. 11985was a kill command.
11986 11986
11987`last-command' has a separate binding for each terminal device. 11987`last-command' has a separate binding for each terminal device.
11988See Info node `(elisp)Multiple displays'. */); 11988See Info node `(elisp)Multiple Terminals'. */);
11989 11989
11990 DEFVAR_KBOARD ("real-last-command", Vreal_last_command, 11990 DEFVAR_KBOARD ("real-last-command", Vreal_last_command,
11991 doc: /* Same as `last-command', but never altered by Lisp code. */); 11991 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".
12123This is applied to the characters supplied to input methods, not their 12123This is applied to the characters supplied to input methods, not their
12124output. See also `translation-table-for-input'. 12124output. See also `translation-table-for-input'.
12125 12125
12126This variable has a separate binding for each terminal. See Info node 12126This variable has a separate binding for each terminal.
12127`(elisp)Multiple displays'. */); 12127See Info node `(elisp)Multiple Terminals'. */);
12128 12128
12129 DEFVAR_BOOL ("cannot-suspend", &cannot_suspend, 12129 DEFVAR_BOOL ("cannot-suspend", &cannot_suspend,
12130 doc: /* Non-nil means to always spawn a subshell instead of suspending. 12130 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.
12215 12215
12216`overriding-terminal-local-map' has a separate binding for each 12216`overriding-terminal-local-map' has a separate binding for each
12217terminal device. 12217terminal device.
12218See Info node `(elisp)Multiple displays'. */); 12218See Info node `(elisp)Multiple Terminals'. */);
12219 12219
12220 DEFVAR_LISP ("overriding-local-map", &Voverriding_local_map, 12220 DEFVAR_LISP ("overriding-local-map", &Voverriding_local_map,
12221 doc: /* Keymap that overrides all other local keymaps. 12221 doc: /* Keymap that overrides all other local keymaps.
@@ -12243,7 +12243,7 @@ numeric keysym code (sans the \"system-specific\" bit 1<<28)
12243and SYMBOL is its name. 12243and SYMBOL is its name.
12244 12244
12245`system-key-alist' has a separate binding for each terminal device. 12245`system-key-alist' has a separate binding for each terminal device.
12246See Info node `(elisp)Multiple displays'. */); 12246See Info node `(elisp)Multiple Terminals'. */);
12247 12247
12248 DEFVAR_KBOARD ("local-function-key-map", Vlocal_function_key_map, 12248 DEFVAR_KBOARD ("local-function-key-map", Vlocal_function_key_map,
12249 doc: /* Keymap that translates key sequences to key sequences during input. 12249 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
12269typing `ESC O P x' would return [f1 x]. 12269typing `ESC O P x' would return [f1 x].
12270 12270
12271`local-function-key-map' has a separate binding for each terminal 12271`local-function-key-map' has a separate binding for each terminal
12272device. See Info node `(elisp)Multiple displays'. If you need to 12272device. See Info node `(elisp)Multiple Terminals'. If you need to
12273define a binding on all terminals, change `function-key-map' 12273define a binding on all terminals, change `function-key-map'
12274instead. Initially, `local-function-key-map' is an empty keymap that 12274instead. Initially, `local-function-key-map' is an empty keymap that
12275has `function-key-map' as its parent on all terminal devices. */); 12275has `function-key-map' as its parent on all terminal devices. */);
diff --git a/src/m/ibms390x.h b/src/m/ibms390x.h
index fda3007cb74..d6aa0c713c6 100644
--- a/src/m/ibms390x.h
+++ b/src/m/ibms390x.h
@@ -62,8 +62,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
62/* On the 64 bit architecture, we can use 60 bits for addresses */ 62/* On the 64 bit architecture, we can use 60 bits for addresses */
63#define VALBITS 60 63#define VALBITS 60
64 64
65#define LINKER $(CC) -nostdlib
66
67/* Define XPNTR to avoid or'ing with DATA_SEG_BITS */ 65/* Define XPNTR to avoid or'ing with DATA_SEG_BITS */
68#define XPNTR(a) XUINT (a) 66#define XPNTR(a) XUINT (a)
69 67
diff --git a/src/m/macppc.h b/src/m/macppc.h
index b9dcf3bdc92..f348286030c 100644
--- a/src/m/macppc.h
+++ b/src/m/macppc.h
@@ -32,12 +32,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
32#define HAVE_TEXT_START 32#define HAVE_TEXT_START
33#endif 33#endif
34 34
35/* NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> says this is needed
36 For MkLinux/LinuxPPC. */
37#ifdef GNU_LINUX
38#define LINKER $(CC) -nostdlib
39#endif
40
41#ifdef _ARCH_PPC64 35#ifdef _ARCH_PPC64
42#ifndef _LP64 36#ifndef _LP64
43#define _LP64 37#define _LP64
diff --git a/src/ns.mk b/src/ns.mk
new file mode 100644
index 00000000000..255ffa7046b
--- /dev/null
+++ b/src/ns.mk
@@ -0,0 +1,39 @@
1/* autodeps.mk --- src/Makefile fragment for GNU Emacs
2
3Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
4
5This file is part of GNU Emacs.
6
7GNU Emacs is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 3 of the License, or
10(at your option) any later version.
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
19
20Commentary:
21
22This is inserted in src/Makefile if HAVE_NS.
23
24The only reason this is in a separate file is because $ns_appdir,
25which appears as a target, is empty on non-NS builds. Some makes
26do not like empty targets, even if they are never used. */
27
28${ns_appdir}: ${ns_appsrc}
29 rm -fr ${ns_appdir}
30 mkdir -p ${ns_appdir}
31 ( cd ${ns_appsrc} ; tar cfh - . ) | ( cd ${ns_appdir} ; umask 022; tar xf - )
32
33${ns_appbindir}Emacs: emacs${EXEEXT}
34 mkdir -p ${ns_appbindir}
35 cp -f emacs${EXEEXT} ${ns_appbindir}Emacs
36
37ns-app: ${ns_appdir} ${ns_appbindir}Emacs
38
39/* ns.mk ends here */
diff --git a/src/process.c b/src/process.c
index a09ac297a2d..acc13ea199b 100644
--- a/src/process.c
+++ b/src/process.c
@@ -3347,11 +3347,25 @@ usage: (make-network-process &rest ARGS) */)
3347 /* :service SERVICE -- string, integer (port number), or t (random port). */ 3347 /* :service SERVICE -- string, integer (port number), or t (random port). */
3348 service = Fplist_get (contact, QCservice); 3348 service = Fplist_get (contact, QCservice);
3349 3349
3350 /* :host HOST -- hostname, ip address, or 'local for localhost. */
3351 host = Fplist_get (contact, QChost);
3352 if (!NILP (host))
3353 {
3354 if (EQ (host, Qlocal))
3355 host = build_string ("localhost");
3356 CHECK_STRING (host);
3357 }
3358
3350#ifdef HAVE_LOCAL_SOCKETS 3359#ifdef HAVE_LOCAL_SOCKETS
3351 if (family == AF_LOCAL) 3360 if (family == AF_LOCAL)
3352 { 3361 {
3353 /* Host is not used. */ 3362 if (!NILP (host))
3354 host = Qnil; 3363 {
3364 message (":family local ignores the :host \"%s\" property",
3365 SDATA (host));
3366 contact = Fplist_put (contact, QChost, Qnil);
3367 host = Qnil;
3368 }
3355 CHECK_STRING (service); 3369 CHECK_STRING (service);
3356 bzero (&address_un, sizeof address_un); 3370 bzero (&address_un, sizeof address_un);
3357 address_un.sun_family = AF_LOCAL; 3371 address_un.sun_family = AF_LOCAL;
@@ -3362,15 +3376,6 @@ usage: (make-network-process &rest ARGS) */)
3362 } 3376 }
3363#endif 3377#endif
3364 3378
3365 /* :host HOST -- hostname, ip address, or 'local for localhost. */
3366 host = Fplist_get (contact, QChost);
3367 if (!NILP (host))
3368 {
3369 if (EQ (host, Qlocal))
3370 host = build_string ("localhost");
3371 CHECK_STRING (host);
3372 }
3373
3374 /* Slow down polling to every ten seconds. 3379 /* Slow down polling to every ten seconds.
3375 Some kernels have a bug which causes retrying connect to fail 3380 Some kernels have a bug which causes retrying connect to fail
3376 after a connect. Polling can interfere with gethostbyname too. */ 3381 after a connect. Polling can interfere with gethostbyname too. */
diff --git a/src/s/aix4-2.h b/src/s/aix4-2.h
index cdb97b7f9fa..5212c432843 100644
--- a/src/s/aix4-2.h
+++ b/src/s/aix4-2.h
@@ -61,11 +61,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
61/* The kernel symbol where the load average is found is named avenrun. */ 61/* The kernel symbol where the load average is found is named avenrun. */
62#define LDAV_SYMBOL "avenrun" 62#define LDAV_SYMBOL "avenrun"
63 63
64/* Special itemss needed to make Emacs run on this system. */ 64/* Special items needed to make Emacs run on this system. */
65
66#ifndef __GNUC__
67#define LINKER cc
68#endif
69 65
70/* The following definition seems to be needed in AIX version 3.1.6.8. 66/* The following definition seems to be needed in AIX version 3.1.6.8.
71 It may not have been needed in certain earlier versions. */ 67 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/>. */
110 106
111#define UNEXEC unexaix.o 107#define UNEXEC unexaix.o
112 108
113#define ORDINARY_LINK
114
115/* arch-tag: 38fe75ea-6aef-42bd-8449-bc34d921a562 109/* arch-tag: 38fe75ea-6aef-42bd-8449-bc34d921a562
116 (do not change this comment) */ 110 (do not change this comment) */
diff --git a/src/s/cygwin.h b/src/s/cygwin.h
index e2afb7ddc44..b6d0c7c88ff 100644
--- a/src/s/cygwin.h
+++ b/src/s/cygwin.h
@@ -1,7 +1,7 @@
1/* System description header file for Cygwin. 1/* System description header file for Cygwin.
2 2
3Copyright (C) 1985, 1986, 1992, 1999, 2002, 2003, 2004, 2005, 2006, 3Copyright (C) 1985, 1986, 1992, 1999, 2002, 2003, 2004, 2005, 2006,
4 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 4 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5 5
6This file is part of GNU Emacs. 6This file is part of GNU Emacs.
7 7
@@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ 19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 20
21/* SYSTEM_TYPE should indicate the kind of system you are using. 21/* SYSTEM_TYPE should indicate the kind of system you are using.
22 It sets the Lisp variable system-type. */ 22 It sets the Lisp variable system-type. */
23#define SYSTEM_TYPE "cygwin" 23#define SYSTEM_TYPE "cygwin"
24 24
25/* Emacs can read input using SIGIO and buffering characters itself, 25/* 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/>. */
94#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) 94#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base)
95#define SYSV_SYSTEM_DIR 1 95#define SYSV_SYSTEM_DIR 1
96#define UNEXEC unexcw.o 96#define UNEXEC unexcw.o
97#define LINKER $(CC)
98 97
99#define HAVE_SOCKETS 98#define HAVE_SOCKETS
100 99
diff --git a/src/s/darwin.h b/src/s/darwin.h
index 76c0054cd3f..a30360576a8 100644
--- a/src/s/darwin.h
+++ b/src/s/darwin.h
@@ -147,9 +147,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
147#undef HAVE_POSIX_MEMALIGN 147#undef HAVE_POSIX_MEMALIGN
148#endif 148#endif
149 149
150/* Link this program just by running cc. */
151#define ORDINARY_LINK
152
153/* Define the following so emacs symbols will not conflict with those 150/* Define the following so emacs symbols will not conflict with those
154 in the System framework. Otherwise -prebind will not work. */ 151 in the System framework. Otherwise -prebind will not work. */
155 152
diff --git a/src/s/gnu.h b/src/s/gnu.h
index cb4c4a9d807..4567f4e9f4f 100644
--- a/src/s/gnu.h
+++ b/src/s/gnu.h
@@ -29,8 +29,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
29 29
30#define SIGNALS_VIA_CHARACTERS 30#define SIGNALS_VIA_CHARACTERS
31 31
32/* GNU needs its own crt0, and libc defines data_start. */ 32/* libc defines data_start. */
33#define ORDINARY_LINK
34#define DATA_START ({ extern int data_start; (char *) &data_start; }) 33#define DATA_START ({ extern int data_start; (char *) &data_start; })
35 34
36/* Some losing code fails to include this and then assumes 35/* Some losing code fails to include this and then assumes
diff --git a/src/s/msdos.h b/src/s/msdos.h
index 90f630c8627..c78096c6b90 100644
--- a/src/s/msdos.h
+++ b/src/s/msdos.h
@@ -82,8 +82,6 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */
82 82
83#define _NAIVE_DOS_REGS 83#define _NAIVE_DOS_REGS
84 84
85#define ORDINARY_LINK
86
87/* command.com does not understand `...` so we define this. */ 85/* command.com does not understand `...` so we define this. */
88#define SEPCHAR ';' 86#define SEPCHAR ';'
89 87
diff --git a/src/s/netbsd.h b/src/s/netbsd.h
index 4874ec9af56..af8fd00a6bd 100644
--- a/src/s/netbsd.h
+++ b/src/s/netbsd.h
@@ -26,12 +26,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
26 26
27#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) 27#define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base)
28 28
29/* On post 1.3 releases of NetBSD, gcc -nostdlib also clears
30 the library search parth, i.e. it won't search /usr/lib
31 for libc and friends. Using -nostartfiles instead avoids
32 this problem, and will also work on earlier NetBSD releases. */
33#define LINKER $(CC) -nostartfiles
34
35#define DEFAULT_SOUND_DEVICE "/dev/audio" 29#define DEFAULT_SOUND_DEVICE "/dev/audio"
36 30
37/* Greg A. Woods <woods@weird.com> says we must include signal.h 31/* Greg A. Woods <woods@weird.com> says we must include signal.h
diff --git a/src/s/usg5-4.h b/src/s/usg5-4.h
index f870086368c..85499fb1124 100644
--- a/src/s/usg5-4.h
+++ b/src/s/usg5-4.h
@@ -69,8 +69,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
69/* On USG systems signal handlers return void. */ 69/* On USG systems signal handlers return void. */
70#define SIGTYPE void 70#define SIGTYPE void
71 71
72#define ORDINARY_LINK
73
74/* Undump with ELF. */ 72/* Undump with ELF. */
75#undef COFF 73#undef COFF
76 74
diff --git a/src/w32.c b/src/w32.c
index 0f2d8b54e6b..0560ce4a6b8 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -5700,7 +5700,34 @@ sys_write (int fd, const void * buffer, unsigned int count)
5700 } 5700 }
5701 else 5701 else
5702#endif 5702#endif
5703 nchars = _write (fd, buffer, count); 5703 {
5704 /* Some networked filesystems don't like too large writes, so
5705 break them into smaller chunks. See the Comments section of
5706 the MSDN documentation of WriteFile for details behind the
5707 choice of the value of CHUNK below. See also the thread
5708 http://thread.gmane.org/gmane.comp.version-control.git/145294
5709 in the git mailing list. */
5710 const unsigned char *p = buffer;
5711 const unsigned chunk = 30 * 1024 * 1024;
5712
5713 nchars = 0;
5714 while (count > 0)
5715 {
5716 unsigned this_chunk = count < chunk ? count : chunk;
5717 int n = _write (fd, p, this_chunk);
5718
5719 nchars += n;
5720 if (n < 0)
5721 {
5722 nchars = n;
5723 break;
5724 }
5725 else if (n < this_chunk)
5726 break;
5727 count -= n;
5728 p += n;
5729 }
5730 }
5704 5731
5705 return nchars; 5732 return nchars;
5706} 5733}
diff --git a/src/xdisp.c b/src/xdisp.c
index 177a0a7e018..699f375e2f4 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2598,7 +2598,7 @@ void
2598init_iterator (it, w, charpos, bytepos, row, base_face_id) 2598init_iterator (it, w, charpos, bytepos, row, base_face_id)
2599 struct it *it; 2599 struct it *it;
2600 struct window *w; 2600 struct window *w;
2601 int charpos, bytepos; 2601 EMACS_INT charpos, bytepos;
2602 struct glyph_row *row; 2602 struct glyph_row *row;
2603 enum face_id base_face_id; 2603 enum face_id base_face_id;
2604{ 2604{
@@ -3012,7 +3012,7 @@ init_from_display_pos (it, w, pos)
3012 struct window *w; 3012 struct window *w;
3013 struct display_pos *pos; 3013 struct display_pos *pos;
3014{ 3014{
3015 int charpos = CHARPOS (pos->pos), bytepos = BYTEPOS (pos->pos); 3015 EMACS_INT charpos = CHARPOS (pos->pos), bytepos = BYTEPOS (pos->pos);
3016 int i, overlay_strings_with_newlines = 0; 3016 int i, overlay_strings_with_newlines = 0;
3017 3017
3018 /* If POS specifies a position in a display vector, this might 3018 /* If POS specifies a position in a display vector, this might
@@ -12486,22 +12486,25 @@ redisplay_internal (preserve_echo_area)
12486 if (windows_or_buffers_changed && !pause) 12486 if (windows_or_buffers_changed && !pause)
12487 goto retry; 12487 goto retry;
12488 12488
12489 /* Clear the face cache eventually. */ 12489 /* Clear the face and image caches.
12490 if (consider_all_windows_p) 12490
12491 We used to do this only if consider_all_windows_p. But the cache
12492 needs to be cleared if a timer creates images in the current
12493 buffer (e.g. the test case in Bug#6230). */
12494
12495 if (clear_face_cache_count > CLEAR_FACE_CACHE_COUNT)
12491 { 12496 {
12492 if (clear_face_cache_count > CLEAR_FACE_CACHE_COUNT) 12497 clear_face_cache (0);
12493 { 12498 clear_face_cache_count = 0;
12494 clear_face_cache (0); 12499 }
12495 clear_face_cache_count = 0; 12500
12496 }
12497#ifdef HAVE_WINDOW_SYSTEM 12501#ifdef HAVE_WINDOW_SYSTEM
12498 if (clear_image_cache_count > CLEAR_IMAGE_CACHE_COUNT) 12502 if (clear_image_cache_count > CLEAR_IMAGE_CACHE_COUNT)
12499 { 12503 {
12500 clear_image_caches (Qnil); 12504 clear_image_caches (Qnil);
12501 clear_image_cache_count = 0; 12505 clear_image_cache_count = 0;
12502 }
12503#endif /* HAVE_WINDOW_SYSTEM */
12504 } 12506 }
12507#endif /* HAVE_WINDOW_SYSTEM */
12505 12508
12506 end_of_redisplay: 12509 end_of_redisplay:
12507 unbind_to (count, Qnil); 12510 unbind_to (count, Qnil);
@@ -14959,7 +14962,7 @@ try_window_reusing_current_matrix (w)
14959 /* The variable new_start now holds the new window start. The old 14962 /* The variable new_start now holds the new window start. The old
14960 start `start' can be determined from the current matrix. */ 14963 start `start' can be determined from the current matrix. */
14961 SET_TEXT_POS_FROM_MARKER (new_start, w->start); 14964 SET_TEXT_POS_FROM_MARKER (new_start, w->start);
14962 start = start_row->start.pos; 14965 start = start_row->minpos;
14963 start_vpos = MATRIX_ROW_VPOS (start_row, w->current_matrix); 14966 start_vpos = MATRIX_ROW_VPOS (start_row, w->current_matrix);
14964 14967
14965 /* Clear the desired matrix for the display below. */ 14968 /* Clear the desired matrix for the display below. */
@@ -14998,7 +15001,7 @@ try_window_reusing_current_matrix (w)
14998 { 15001 {
14999 /* Advance to the next row as the "start". */ 15002 /* Advance to the next row as the "start". */
15000 start_row++; 15003 start_row++;
15001 start = start_row->start.pos; 15004 start = start_row->minpos;
15002 /* If there are no more rows to try, or just one, give up. */ 15005 /* If there are no more rows to try, or just one, give up. */
15003 if (start_row == MATRIX_MODE_LINE_ROW (w->current_matrix) - 1 15006 if (start_row == MATRIX_MODE_LINE_ROW (w->current_matrix) - 1
15004 || w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (w, start_row) 15007 || w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (w, start_row)
@@ -15280,39 +15283,26 @@ try_window_reusing_current_matrix (w)
15280 { 15283 {
15281 struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos; 15284 struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos;
15282 struct glyph *end = glyph + row->used[TEXT_AREA]; 15285 struct glyph *end = glyph + row->used[TEXT_AREA];
15283 struct glyph *orig_glyph = glyph;
15284 struct cursor_pos orig_cursor = w->cursor;
15285 15286
15286 for (; glyph < end 15287 /* Can't use this optimization with bidi-reordered glyph
15287 && (!BUFFERP (glyph->object) 15288 rows, unless cursor is already at point. */
15288 || glyph->charpos != PT); 15289 if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering))
15289 glyph++)
15290 {
15291 w->cursor.hpos++;
15292 w->cursor.x += glyph->pixel_width;
15293 }
15294 /* With bidi reordering, charpos changes non-linearly
15295 with hpos, so the right glyph could be to the
15296 left. */
15297 if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering)
15298 && (!BUFFERP (glyph->object) || glyph->charpos != PT))
15299 { 15290 {
15300 struct glyph *start_glyph = row->glyphs[TEXT_AREA]; 15291 if (!(w->cursor.hpos >= 0
15301 15292 && w->cursor.hpos < row->used[TEXT_AREA]
15302 glyph = orig_glyph - 1; 15293 && BUFFERP (glyph->object)
15303 orig_cursor.hpos--; 15294 && glyph->charpos == PT))
15304 orig_cursor.x -= glyph->pixel_width; 15295 return 0;
15305 for (; glyph >= start_glyph
15306 && (!BUFFERP (glyph->object)
15307 || glyph->charpos != PT);
15308 glyph--)
15309 {
15310 w->cursor.hpos--;
15311 w->cursor.x -= glyph->pixel_width;
15312 }
15313 if (BUFFERP (glyph->object) && glyph->charpos == PT)
15314 w->cursor = orig_cursor;
15315 } 15296 }
15297 else
15298 for (; glyph < end
15299 && (!BUFFERP (glyph->object)
15300 || glyph->charpos < PT);
15301 glyph++)
15302 {
15303 w->cursor.hpos++;
15304 w->cursor.x += glyph->pixel_width;
15305 }
15316 } 15306 }
15317 } 15307 }
15318 15308
@@ -15892,13 +15882,13 @@ try_window_id (w)
15892 as is, without changing glyph positions since no text has 15882 as is, without changing glyph positions since no text has
15893 been added/removed in front of the window end. */ 15883 been added/removed in front of the window end. */
15894 r0 = MATRIX_FIRST_TEXT_ROW (current_matrix); 15884 r0 = MATRIX_FIRST_TEXT_ROW (current_matrix);
15895 if (TEXT_POS_EQUAL_P (start, r0->start.pos) 15885 if (TEXT_POS_EQUAL_P (start, r0->minpos)
15896 /* PT must not be in a partially visible line. */ 15886 /* PT must not be in a partially visible line. */
15897 && !(PT >= MATRIX_ROW_START_CHARPOS (row) 15887 && !(PT >= MATRIX_ROW_START_CHARPOS (row)
15898 && MATRIX_ROW_BOTTOM_Y (row) > window_text_bottom_y (w))) 15888 && MATRIX_ROW_BOTTOM_Y (row) > window_text_bottom_y (w)))
15899 { 15889 {
15900 /* We have to compute the window end anew since text 15890 /* We have to compute the window end anew since text
15901 can have been added/removed after it. */ 15891 could have been added/removed after it. */
15902 w->window_end_pos 15892 w->window_end_pos
15903 = make_number (Z - MATRIX_ROW_END_CHARPOS (row)); 15893 = make_number (Z - MATRIX_ROW_END_CHARPOS (row));
15904 w->window_end_bytepos 15894 w->window_end_bytepos
@@ -15930,7 +15920,7 @@ try_window_id (w)
15930 start is not in changed text, otherwise positions would not be 15920 start is not in changed text, otherwise positions would not be
15931 comparable. */ 15921 comparable. */
15932 row = MATRIX_FIRST_TEXT_ROW (current_matrix); 15922 row = MATRIX_FIRST_TEXT_ROW (current_matrix);
15933 if (!TEXT_POS_EQUAL_P (start, row->start.pos)) 15923 if (!TEXT_POS_EQUAL_P (start, row->minpos))
15934 GIVE_UP (16); 15924 GIVE_UP (16);
15935 15925
15936 /* Give up if the window ends in strings. Overlay strings 15926 /* Give up if the window ends in strings. Overlay strings
@@ -17322,7 +17312,7 @@ cursor_row_p (w, row)
17322{ 17312{
17323 int cursor_row_p = 1; 17313 int cursor_row_p = 1;
17324 17314
17325 if (PT == MATRIX_ROW_END_CHARPOS (row)) 17315 if (PT == CHARPOS (row->end.pos))
17326 { 17316 {
17327 /* Suppose the row ends on a string. 17317 /* Suppose the row ends on a string.
17328 Unless the row is continued, that means it ends on a newline 17318 Unless the row is continued, that means it ends on a newline
@@ -17359,14 +17349,15 @@ cursor_row_p (w, row)
17359 { 17349 {
17360 /* If the row ends in middle of a real character, 17350 /* If the row ends in middle of a real character,
17361 and the line is continued, we want the cursor here. 17351 and the line is continued, we want the cursor here.
17362 That's because MATRIX_ROW_END_CHARPOS would equal 17352 That's because CHARPOS (ROW->end.pos) would equal
17363 PT if PT is before the character. */ 17353 PT if PT is before the character. */
17364 if (!row->ends_in_ellipsis_p) 17354 if (!row->ends_in_ellipsis_p)
17365 cursor_row_p = row->continued_p; 17355 cursor_row_p = row->continued_p;
17366 else 17356 else
17367 /* If the row ends in an ellipsis, then 17357 /* If the row ends in an ellipsis, then
17368 MATRIX_ROW_END_CHARPOS will equal point after the invisible text. 17358 CHARPOS (ROW->end.pos) will equal point after the
17369 We want that position to be displayed after the ellipsis. */ 17359 invisible text. We want that position to be displayed
17360 after the ellipsis. */
17370 cursor_row_p = 0; 17361 cursor_row_p = 0;
17371 } 17362 }
17372 /* If the row ends at ZV, display the cursor at the end of that 17363 /* If the row ends at ZV, display the cursor at the end of that
@@ -17502,122 +17493,87 @@ unproduce_glyphs (it, n)
17502 glyph[-n] = *glyph; 17493 glyph[-n] = *glyph;
17503} 17494}
17504 17495
17505/* Find the positions in a bidi-reordered ROW to serve as ROW->start 17496/* Find the positions in a bidi-reordered ROW to serve as ROW->minpos
17506 and ROW->end. */ 17497 and ROW->maxpos. */
17507static struct display_pos 17498static void
17508find_row_end (it, row) 17499find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos)
17509 struct it *it; 17500 struct it *it;
17510 struct glyph_row *row; 17501 struct glyph_row *row;
17502 EMACS_INT min_pos, min_bpos, max_pos, max_bpos;
17511{ 17503{
17512 /* FIXME: Revisit this when glyph ``spilling'' in continuation 17504 /* FIXME: Revisit this when glyph ``spilling'' in continuation
17513 lines' rows is implemented for bidi-reordered rows. */ 17505 lines' rows is implemented for bidi-reordered rows. */
17514 EMACS_INT min_pos = ZV + 1, max_pos = 0;
17515 struct glyph *g;
17516 struct it save_it;
17517 struct text_pos tpos;
17518 struct display_pos row_end = it->current;
17519
17520 for (g = row->glyphs[TEXT_AREA];
17521 g < row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
17522 g++)
17523 {
17524 if (BUFFERP (g->object))
17525 {
17526 if (g->charpos > 0 && g->charpos < min_pos)
17527 min_pos = g->charpos;
17528 if (g->charpos > max_pos)
17529 max_pos = g->charpos;
17530 }
17531 }
17532 /* Empty lines have a valid buffer position at their first
17533 glyph, but that glyph's OBJECT is zero, as if it didn't come
17534 from a buffer. If we didn't find any valid buffer positions
17535 in this row, maybe we have such an empty line. */
17536 if (max_pos == 0 && row->used[TEXT_AREA])
17537 {
17538 for (g = row->glyphs[TEXT_AREA];
17539 g < row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
17540 g++)
17541 {
17542 if (INTEGERP (g->object))
17543 {
17544 if (g->charpos > 0 && g->charpos < min_pos)
17545 min_pos = g->charpos;
17546 if (g->charpos > max_pos)
17547 max_pos = g->charpos;
17548 }
17549 }
17550 }
17551 17506
17552 /* ROW->start is the value of min_pos, the minimal buffer position 17507 /* ROW->minpos is the value of min_pos, the minimal buffer position
17553 we have in ROW. */ 17508 we have in ROW. */
17554 if (min_pos <= ZV) 17509 if (min_pos <= ZV)
17510 SET_TEXT_POS (row->minpos, min_pos, min_bpos);
17511 else
17555 { 17512 {
17556 /* Avoid calling the costly CHAR_TO_BYTE if possible. */ 17513 /* We didn't find _any_ valid buffer positions in any of the
17557 if (min_pos != row->start.pos.charpos) 17514 glyphs, so we must trust the iterator's computed
17558 SET_TEXT_POS (row->start.pos, min_pos, CHAR_TO_BYTE (min_pos)); 17515 positions. */
17559 if (max_pos == 0) 17516 row->minpos = row->start.pos;
17560 max_pos = min_pos; 17517 max_pos = CHARPOS (it->current.pos);
17518 max_bpos = BYTEPOS (it->current.pos);
17561 } 17519 }
17562 17520
17563 /* For ROW->end, we need the position that is _after_ max_pos, in 17521 if (!max_pos)
17564 the logical order, unless we are at ZV. */ 17522 abort ();
17565 if (row->ends_at_zv_p)
17566 {
17567 if (!row->used[TEXT_AREA])
17568 row->start.pos = row_end.pos;
17569 }
17570 else if (row->used[TEXT_AREA] && max_pos)
17571 {
17572 int at_eol_p;
17573 17523
17574 SET_TEXT_POS (tpos, max_pos, CHAR_TO_BYTE (max_pos)); 17524 /* Here are the various use-cases for ending the row, and the
17575 save_it = *it; 17525 corresponding values for ROW->maxpos:
17576 it->bidi_p = 0; 17526
17577 reseat (it, tpos, 0); 17527 Line ends in a newline from buffer eol_pos + 1
17578 if (!get_next_display_element (it)) 17528 Line is continued from buffer max_pos + 1
17579 abort (); /* this row cannot be at ZV, see above */ 17529 Line is truncated on right it->current.pos
17580 at_eol_p = ITERATOR_AT_END_OF_LINE_P (it); 17530 Line ends in a newline from string max_pos
17581 set_iterator_to_next (it, 1); 17531 Line is continued from string max_pos
17582 row_end = it->current; 17532 Line is continued from display vector max_pos
17583 /* If the character at max_pos is not a newline and the 17533 Line is entirely from a string min_pos == max_pos
17584 characters at max_pos+1 is a newline, skip that newline as 17534 Line is entirely from a display vector min_pos == max_pos
17585 well. Note that this may skip some invisible text. */ 17535 Line that ends at ZV ZV
17586 if (!at_eol_p 17536
17587 && get_next_display_element (it) 17537 If you discover other use-cases, please add them here as
17588 && ITERATOR_AT_END_OF_LINE_P (it)) 17538 appropriate. */
17589 { 17539 if (row->ends_at_zv_p)
17590 set_iterator_to_next (it, 1); 17540 row->maxpos = it->current.pos;
17591 /* Record the position after the newline of a continued row. 17541 else if (row->used[TEXT_AREA])
17592 We will need that to set ROW->end of the last row 17542 {
17593 produced for a continued line. */ 17543 if (row->ends_in_newline_from_string_p)
17594 if (row->continued_p) 17544 SET_TEXT_POS (row->maxpos, max_pos, max_bpos);
17595 save_it.eol_pos = it->current.pos; 17545 else if (CHARPOS (it->eol_pos) > 0)
17546 SET_TEXT_POS (row->maxpos,
17547 CHARPOS (it->eol_pos) + 1, BYTEPOS (it->eol_pos) + 1);
17548 else if (row->continued_p)
17549 {
17550 /* If max_pos is different from IT's current position, it
17551 means IT->method does not belong to the display element
17552 at max_pos. However, it also means that the display
17553 element at max_pos was displayed in its entirety on this
17554 line, which is equivalent to saying that the next line
17555 starts at the next buffer position. */
17556 if (IT_CHARPOS (*it) == max_pos && it->method != GET_FROM_BUFFER)
17557 SET_TEXT_POS (row->maxpos, max_pos, max_bpos);
17596 else 17558 else
17597 { 17559 {
17598 row_end = it->current; 17560 INC_BOTH (max_pos, max_bpos);
17599 save_it.eol_pos.charpos = save_it.eol_pos.bytepos = 0; 17561 SET_TEXT_POS (row->maxpos, max_pos, max_bpos);
17600 } 17562 }
17601 } 17563 }
17602 else if (!row->continued_p 17564 else if (row->truncated_on_right_p)
17603 && MATRIX_ROW_CONTINUATION_LINE_P (row) 17565 /* display_line already called reseat_at_next_visible_line_start,
17604 && it->eol_pos.charpos > 0) 17566 which puts the iterator at the beginning of the next line, in
17605 { 17567 the logical order. */
17606 /* Last row of a continued line. Use the position recorded 17568 row->maxpos = it->current.pos;
17607 in IT->eol_pos, to the effect that the newline belongs to 17569 else if (max_pos == min_pos && it->method != GET_FROM_BUFFER)
17608 this row, not to the row which displays the character 17570 /* A line that is entirely from a string/image/stretch... */
17609 with the largest buffer position before the newline. */ 17571 row->maxpos = row->minpos;
17610 row_end.pos = it->eol_pos; 17572 else
17611 it->eol_pos.charpos = it->eol_pos.bytepos = 0; 17573 abort ();
17612 }
17613 *it = save_it;
17614 /* The members of ROW->end that are not taken from buffer
17615 positions are copied from IT->current. */
17616 row_end.string_pos = it->current.string_pos;
17617 row_end.overlay_string_index = it->current.overlay_string_index;
17618 row_end.dpvec_index = it->current.dpvec_index;
17619 } 17574 }
17620 return row_end; 17575 else
17576 row->maxpos = it->current.pos;
17621} 17577}
17622 17578
17623/* Construct the glyph row IT->glyph_row in the desired matrix of 17579/* Construct the glyph row IT->glyph_row in the desired matrix of
@@ -17637,7 +17593,10 @@ display_line (it)
17637 int wrap_row_used = -1, wrap_row_ascent, wrap_row_height; 17593 int wrap_row_used = -1, wrap_row_ascent, wrap_row_height;
17638 int wrap_row_phys_ascent, wrap_row_phys_height; 17594 int wrap_row_phys_ascent, wrap_row_phys_height;
17639 int wrap_row_extra_line_spacing; 17595 int wrap_row_extra_line_spacing;
17596 EMACS_INT wrap_row_min_pos, wrap_row_min_bpos;
17597 EMACS_INT wrap_row_max_pos, wrap_row_max_bpos;
17640 int cvpos; 17598 int cvpos;
17599 EMACS_INT min_pos = ZV + 1, min_bpos, max_pos = 0, max_bpos;
17641 17600
17642 /* We always start displaying at hpos zero even if hscrolled. */ 17601 /* We always start displaying at hpos zero even if hscrolled. */
17643 xassert (it->hpos == 0 && it->current_x == 0); 17602 xassert (it->hpos == 0 && it->current_x == 0);
@@ -17694,6 +17653,23 @@ display_line (it)
17694 row->phys_height = it->max_phys_ascent + it->max_phys_descent; 17653 row->phys_height = it->max_phys_ascent + it->max_phys_descent;
17695 row->extra_line_spacing = it->max_extra_line_spacing; 17654 row->extra_line_spacing = it->max_extra_line_spacing;
17696 17655
17656/* Utility macro to record max and min buffer positions seen until now. */
17657#define RECORD_MAX_MIN_POS(IT) \
17658 do \
17659 { \
17660 if (IT_CHARPOS (*(IT)) < min_pos) \
17661 { \
17662 min_pos = IT_CHARPOS (*(IT)); \
17663 min_bpos = IT_BYTEPOS (*(IT)); \
17664 } \
17665 if (IT_CHARPOS (*(IT)) > max_pos) \
17666 { \
17667 max_pos = IT_CHARPOS (*(IT)); \
17668 max_bpos = IT_BYTEPOS (*(IT)); \
17669 } \
17670 } \
17671 while (0)
17672
17697 /* Loop generating characters. The loop is left with IT on the next 17673 /* Loop generating characters. The loop is left with IT on the next
17698 character to display. */ 17674 character to display. */
17699 while (1) 17675 while (1)
@@ -17728,7 +17704,8 @@ display_line (it)
17728 row->ends_at_zv_p = 1; 17704 row->ends_at_zv_p = 1;
17729 /* A row that displays right-to-left text must always have 17705 /* A row that displays right-to-left text must always have
17730 its last face extended all the way to the end of line, 17706 its last face extended all the way to the end of line,
17731 even if this row ends in ZV. */ 17707 even if this row ends in ZV, because we still write to th
17708 screen left to right. */
17732 if (row->reversed_p) 17709 if (row->reversed_p)
17733 extend_face_to_end_of_line (it); 17710 extend_face_to_end_of_line (it);
17734 break; 17711 break;
@@ -17762,6 +17739,10 @@ display_line (it)
17762 wrap_row_phys_ascent = row->phys_ascent; 17739 wrap_row_phys_ascent = row->phys_ascent;
17763 wrap_row_phys_height = row->phys_height; 17740 wrap_row_phys_height = row->phys_height;
17764 wrap_row_extra_line_spacing = row->extra_line_spacing; 17741 wrap_row_extra_line_spacing = row->extra_line_spacing;
17742 wrap_row_min_pos = min_pos;
17743 wrap_row_min_bpos = min_bpos;
17744 wrap_row_max_pos = max_pos;
17745 wrap_row_max_bpos = max_bpos;
17765 may_wrap = 0; 17746 may_wrap = 0;
17766 } 17747 }
17767 } 17748 }
@@ -17812,6 +17793,10 @@ display_line (it)
17812 it->max_extra_line_spacing); 17793 it->max_extra_line_spacing);
17813 if (it->current_x - it->pixel_width < it->first_visible_x) 17794 if (it->current_x - it->pixel_width < it->first_visible_x)
17814 row->x = x - it->first_visible_x; 17795 row->x = x - it->first_visible_x;
17796 /* Record the maximum and minimum buffer positions seen so
17797 far in glyphs that will be displayed by this row. */
17798 if (it->bidi_p)
17799 RECORD_MAX_MIN_POS (it);
17815 } 17800 }
17816 else 17801 else
17817 { 17802 {
@@ -17845,6 +17830,11 @@ display_line (it)
17845 it->current_x = new_x; 17830 it->current_x = new_x;
17846 it->continuation_lines_width += new_x; 17831 it->continuation_lines_width += new_x;
17847 ++it->hpos; 17832 ++it->hpos;
17833 /* Record the maximum and minimum buffer
17834 positions seen so far in glyphs that will be
17835 displayed by this row. */
17836 if (it->bidi_p)
17837 RECORD_MAX_MIN_POS (it);
17848 if (i == nglyphs - 1) 17838 if (i == nglyphs - 1)
17849 { 17839 {
17850 /* If line-wrap is on, check if a previous 17840 /* If line-wrap is on, check if a previous
@@ -17919,6 +17909,10 @@ display_line (it)
17919 row->phys_ascent = wrap_row_phys_ascent; 17909 row->phys_ascent = wrap_row_phys_ascent;
17920 row->phys_height = wrap_row_phys_height; 17910 row->phys_height = wrap_row_phys_height;
17921 row->extra_line_spacing = wrap_row_extra_line_spacing; 17911 row->extra_line_spacing = wrap_row_extra_line_spacing;
17912 min_pos = wrap_row_min_pos;
17913 min_bpos = wrap_row_min_bpos;
17914 max_pos = wrap_row_max_pos;
17915 max_bpos = wrap_row_max_bpos;
17922 row->continued_p = 1; 17916 row->continued_p = 1;
17923 row->ends_at_zv_p = 0; 17917 row->ends_at_zv_p = 0;
17924 row->exact_window_width_line_p = 0; 17918 row->exact_window_width_line_p = 0;
@@ -17981,6 +17975,12 @@ display_line (it)
17981 /* Increment number of glyphs actually displayed. */ 17975 /* Increment number of glyphs actually displayed. */
17982 ++it->hpos; 17976 ++it->hpos;
17983 17977
17978 /* Record the maximum and minimum buffer positions
17979 seen so far in glyphs that will be displayed by
17980 this row. */
17981 if (it->bidi_p)
17982 RECORD_MAX_MIN_POS (it);
17983
17984 if (x < it->first_visible_x) 17984 if (x < it->first_visible_x)
17985 /* Glyph is partially visible, i.e. row starts at 17985 /* Glyph is partially visible, i.e. row starts at
17986 negative X position. */ 17986 negative X position. */
@@ -18032,6 +18032,10 @@ display_line (it)
18032 if (used_before == 0) 18032 if (used_before == 0)
18033 row->glyphs[TEXT_AREA]->charpos = CHARPOS (it->position); 18033 row->glyphs[TEXT_AREA]->charpos = CHARPOS (it->position);
18034 18034
18035 /* Record the position of the newline, for use in
18036 find_row_edges. */
18037 it->eol_pos = it->current.pos;
18038
18035 /* Consume the line end. This skips over invisible lines. */ 18039 /* Consume the line end. This skips over invisible lines. */
18036 set_iterator_to_next (it, 1); 18040 set_iterator_to_next (it, 1);
18037 it->continuation_lines_width = 0; 18041 it->continuation_lines_width = 0;
@@ -18111,7 +18115,7 @@ display_line (it)
18111 /* If line is not empty and hscrolled, maybe insert truncation glyphs 18115 /* If line is not empty and hscrolled, maybe insert truncation glyphs
18112 at the left window margin. */ 18116 at the left window margin. */
18113 if (it->first_visible_x 18117 if (it->first_visible_x
18114 && IT_CHARPOS (*it) != MATRIX_ROW_START_CHARPOS (row)) 18118 && IT_CHARPOS (*it) != CHARPOS (row->start.pos))
18115 { 18119 {
18116 if (!FRAME_WINDOW_P (it->f)) 18120 if (!FRAME_WINDOW_P (it->f))
18117 insert_left_trunc_glyphs (it); 18121 insert_left_trunc_glyphs (it);
@@ -18165,12 +18169,19 @@ display_line (it)
18165 18169
18166 /* Remember the position at which this line ends. */ 18170 /* Remember the position at which this line ends. */
18167 row->end = it->current; 18171 row->end = it->current;
18168 /* ROW->start and ROW->end must be the smallest and the largest 18172 if (!it->bidi_p)
18169 buffer positions in ROW. But if ROW was bidi-reordered, these 18173 {
18170 two positions can be anywhere in the row, so we must rescan all 18174 row->minpos = row->start.pos;
18171 of the ROW's glyphs to find them. */ 18175 row->maxpos = row->end.pos;
18172 if (it->bidi_p) 18176 }
18173 row->end = find_row_end (it, row); 18177 else
18178 {
18179 /* ROW->minpos and ROW->maxpos must be the smallest and
18180 `1 + the largest' buffer positions in ROW. But if ROW was
18181 bidi-reordered, these two positions can be anywhere in the
18182 row, so we must determine them now. */
18183 find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos);
18184 }
18174 18185
18175 /* Record whether this row ends inside an ellipsis. */ 18186 /* Record whether this row ends inside an ellipsis. */
18176 row->ends_in_ellipsis_p 18187 row->ends_in_ellipsis_p
@@ -18216,6 +18227,7 @@ display_line (it)
18216 row to be used. */ 18227 row to be used. */
18217 it->current_x = it->hpos = 0; 18228 it->current_x = it->hpos = 0;
18218 it->current_y += row->height; 18229 it->current_y += row->height;
18230 SET_TEXT_POS (it->eol_pos, 0, 0);
18219 ++it->vpos; 18231 ++it->vpos;
18220 ++it->glyph_row; 18232 ++it->glyph_row;
18221 /* The next row should by default use the same value of the 18233 /* The next row should by default use the same value of the
@@ -18226,6 +18238,8 @@ display_line (it)
18226 it->glyph_row->reversed_p = row->reversed_p; 18238 it->glyph_row->reversed_p = row->reversed_p;
18227 it->start = row->end; 18239 it->start = row->end;
18228 return row->displays_text_p; 18240 return row->displays_text_p;
18241
18242#undef RECORD_MAX_MIN_POS
18229} 18243}
18230 18244
18231DEFUN ("current-bidi-paragraph-direction", Fcurrent_bidi_paragraph_direction, 18245DEFUN ("current-bidi-paragraph-direction", Fcurrent_bidi_paragraph_direction,