Mercurial > emacs
changeset 109193:a0ac80ce32db
Merge from mainline.
author | Katsumi Yamaoka <katsumi@flagship2> |
---|---|
date | Fri, 14 May 2010 11:34:53 +0000 |
parents | 95b466c28f77 (current diff) b2ed92d57b33 (diff) |
children | e0b7f217b35a |
files | |
diffstat | 27 files changed, 964 insertions(+), 560 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Thu May 13 12:10:13 2010 +0000 +++ b/ChangeLog Fri May 14 11:34:53 2010 +0000 @@ -1,3 +1,14 @@ +2010-05-14 Glenn Morris <rgm@gnu.org> + + * configure.in (cpp_undefs): Add mktime, register, X11. + + * configure.in (GPM_MOUSE_SUPPORT): Remove. + (MOUSE_SUPPORT, TOOLTIP_SUPPORT, WINDOW_SUPPORT): New output variables. + (HAVE_WINDOW_SYSTEM, HAVE_MOUSE): Move out of AC_BOTTOM. + + * configure.in (NS_IMPL_GNUSTEP_INC): New output variable. + (GNUSTEP_MAKEFILES): Do not output. + 2010-05-13 Glenn Morris <rgm@gnu.org> * configure.in: Fix some paren typos.
--- a/admin/CPP-DEFINES Thu May 13 12:10:13 2010 +0000 +++ b/admin/CPP-DEFINES Fri May 14 11:34:53 2010 +0000 @@ -22,7 +22,6 @@ NS_IMPL_COCOA Compile support for Cocoa (Apple) implementation of NS GUI API. HAVE_X11 Compile support for the X11 GUI. HAVE_X_WINDOWS Compile support for X Window system -X11 ?? Makefile.in suggests it's equivalent to HAVE_X11 USE_LUCID Use the Lucid toolkit for menus&scrollbars. Requires HAVE_X11. USE_MOTIF Use the Motif toolkit for menus&scrollbars. Requires HAVE_X11. USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11. @@ -84,6 +83,9 @@ BCOPY_UPWARD_SAFE BITS_PER_EMACS_INT BITS_PER_LONG +BITS_PER_CHAR +BITS_PER_SHORT +BITS_PER_INT BROKEN_DATAGRAM_SOCKETS BROKEN_FIONREAD BROKEN_GET_CURRENT_DIR_NAME @@ -98,7 +100,6 @@ BSD4_3 BSD_SYSTEM CLASH_DETECTION -C_SWITCH_X_SYSTEM DATA_SEG_BITS DATA_START DBL_MIN_REPLACEMENT @@ -114,7 +115,6 @@ EMACS_CONFIG_OPTIONS EMACS_INT EMACS_UINT -END_FILES_1 FILE_SYSTEM_CASE FLOAT_CHECK_DOMAIN FSCALE @@ -133,7 +133,6 @@ HAVE_BCOPY HAVE_CBRT HAVE_CLOSEDIR -HAVE_CRTIN HAVE_DUP2 HAVE_EUIDACCESS HAVE_FMOD @@ -154,9 +153,6 @@ HAVE_INET_SOCKETS HAVE_INVERSE_HYPERBOLIC HAVE_LIBKSTAT -HAVE_LIBNCURSES -HAVE_LIBPTHREADS -HAVE_LIBXMU HAVE_LIMITS_H HAVE_LINUX_VERSION_H HAVE_LOGB @@ -266,8 +262,6 @@ SIGTRAP SIGTYPE SOLARIS2 -START_FILES -START_FILES_1 STDC_HEADERS SYMS_SYSTEM SYSTEM_PURESIZE_EXTRA
--- a/configure Thu May 13 12:10:13 2010 +0000 +++ b/configure Fri May 14 11:34:53 2010 +0000 @@ -717,6 +717,7 @@ XMKMF LD_SWITCH_X_SITE_AUX LD_SWITCH_X_SITE_AUX_RPATH +NS_IMPL_GNUSTEP_INC NS_OBJ NS_SUPPORT LIB_STANDARD @@ -751,7 +752,6 @@ LIBTIFF LIBGIF LIBGPM -GPM_MOUSE_SUPPORT LIBXSM ALLOCA liblockfile @@ -796,7 +796,6 @@ ns_appbindir ns_appresdir ns_appsrc -GNUSTEP_MAKEFILES GNUSTEP_SYSTEM_HEADERS GNUSTEP_SYSTEM_LIBRARIES GNU_OBJC_CFLAGS @@ -815,6 +814,9 @@ LD_SWITCH_SYSTEM_TEMACS LD_SWITCH_SYSTEM_EXTRA LIB_GCC +MOUSE_SUPPORT +TOOLTIP_SUPPORT +WINDOW_SUPPORT LTLIBOBJS' ac_subst_files='' ac_user_opts=' @@ -9929,6 +9931,7 @@ HAVE_NS=no NS_IMPL_COCOA=no NS_IMPL_GNUSTEP=no +NS_IMPL_GNUSTEP_INC= tmp_CPPFLAGS="$CPPFLAGS" tmp_CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS -x objective-c" @@ -9949,6 +9952,13 @@ GNUSTEP_MAKEFILES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_MAKEFILES)" GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)" GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)" + ## Pull in stuff from GNUstep-make. + NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu +GUI_LIB=gnu +include $GNUSTEP_MAKEFILES/Additional/base.make +include $GNUSTEP_MAKEFILES/Additional/gui.make +shared=no +" CPPFLAGS="$CPPFLAGS -I${GNUSTEP_SYSTEM_HEADERS}" CFLAGS="$CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}" REAL_CFLAGS="$REAL_CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}" @@ -10141,6 +10151,7 @@ fi fi + NS_OBJ= NS_SUPPORT= if test "${HAVE_NS}" = yes; then @@ -15991,7 +16002,7 @@ ### Use -lgpm if available, unless `--with-gpm=no'. HAVE_GPM=no LIBGPM= -GPM_MOUSE_SUPPORT= +MOUSE_SUPPORT= if test "${with_gpm}" != "no"; then if test "${ac_cv_header_gpm_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for gpm.h" >&5 @@ -16201,10 +16212,10 @@ _ACEOF LIBGPM=-lgpm - GPM_MOUSE_SUPPORT="\${lispsource}mouse.elc" - fi -fi - + ## May be reset below. + MOUSE_SUPPORT="\$(GPM_MOUSE_SUPPORT)" + fi +fi if test "${ac_cv_header_malloc_malloc_h+set}" = set; then @@ -26357,7 +26368,6 @@ - cat >>confdefs.h <<_ACEOF #define EMACS_CONFIGURATION "${canonical}" _ACEOF @@ -26589,6 +26599,33 @@ fi +TOOLTIP_SUPPORT= +WINDOW_SUPPORT= +## If we're using X11/GNUstep, define some consequences. +if test "$HAVE_X_WINDOWS" = "yes" || test "$HAVE_NS" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_WINDOW_SYSTEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MOUSE 1 +_ACEOF + + MOUSE_SUPPORT="\$(REAL_MOUSE_SUPPORT)" + TOOLTIP_SUPPORT="\${lispsource}mouse.elc" + + WINDOW_SUPPORT="\$(BASE_WINDOW_SUPPORT)" + test "$HAVE_X_WINDOWS" = "yes" && \ + WINDOW_SUPPORT="$WINDOW_SUPPORT \$(X_WINDOW_SUPPORT)" + +fi + + + + + @@ -26685,7 +26722,7 @@ # the C preprocessor to some helpful value like 1, or maybe the empty # string. Needless to say consequent macro substitutions are less # than conducive to the makefile finding the correct directory. -cpp_undefs="`echo $srcdir $configuration $canonical unix | +cpp_undefs="`echo $srcdir $configuration $canonical unix mktime register X11 | sed -e 's/[^a-zA-Z0-9_]/ /g' -e 's/^/ /' -e 's/ *$//' \ -e 's/ */ -U/g' -e 's/-U[0-9][^ ]*//g'`"
--- a/configure.in Thu May 13 12:10:13 2010 +0000 +++ b/configure.in Fri May 14 11:34:53 2010 +0000 @@ -1452,6 +1452,7 @@ HAVE_NS=no NS_IMPL_COCOA=no NS_IMPL_GNUSTEP=no +NS_IMPL_GNUSTEP_INC= tmp_CPPFLAGS="$CPPFLAGS" tmp_CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS -x objective-c" @@ -1473,6 +1474,13 @@ GNUSTEP_MAKEFILES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_MAKEFILES)" GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)" GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)" + ## Pull in stuff from GNUstep-make. + NS_IMPL_GNUSTEP_INC="FOUNDATION_LIB=gnu +GUI_LIB=gnu +include $GNUSTEP_MAKEFILES/Additional/base.make +include $GNUSTEP_MAKEFILES/Additional/gui.make +shared=no +" CPPFLAGS="$CPPFLAGS -I${GNUSTEP_SYSTEM_HEADERS}" CFLAGS="$CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}" REAL_CFLAGS="$REAL_CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}" @@ -1491,6 +1499,7 @@ NS_HAVE_NSINTEGER=no fi fi +AC_SUBST(NS_IMPL_GNUSTEP_INC) NS_OBJ= NS_SUPPORT= @@ -2391,7 +2400,7 @@ ### Use -lgpm if available, unless `--with-gpm=no'. HAVE_GPM=no LIBGPM= -GPM_MOUSE_SUPPORT= +MOUSE_SUPPORT= if test "${with_gpm}" != "no"; then AC_CHECK_HEADER(gpm.h, [AC_CHECK_LIB(gpm, Gpm_Open, HAVE_GPM=yes)]) @@ -2399,11 +2408,11 @@ if test "${HAVE_GPM}" = "yes"; then AC_DEFINE(HAVE_GPM, 1, [Define to 1 if you have the gpm library (-lgpm).]) LIBGPM=-lgpm - GPM_MOUSE_SUPPORT="\${lispsource}mouse.elc" + ## May be reset below. + MOUSE_SUPPORT="\$(GPM_MOUSE_SUPPORT)" fi fi AC_SUBST(LIBGPM) -AC_SUBST(GPM_MOUSE_SUPPORT) dnl Check for malloc/malloc.h on darwin AC_CHECK_HEADER(malloc/malloc.h, [AC_DEFINE(HAVE_MALLOC_MALLOC_H, 1, [Define to 1 if you have the <malloc/malloc.h> header file.])]) @@ -3050,7 +3059,6 @@ AC_SUBST(ns_appbindir) AC_SUBST(ns_appresdir) AC_SUBST(ns_appsrc) -AC_SUBST(GNUSTEP_MAKEFILES) AC_SUBST(GNUSTEP_SYSTEM_HEADERS) AC_SUBST(GNUSTEP_SYSTEM_LIBRARIES) AC_SUBST(GNU_OBJC_CFLAGS) @@ -3254,6 +3262,25 @@ AC_SUBST(LIB_GCC) +TOOLTIP_SUPPORT= +WINDOW_SUPPORT= +## If we're using X11/GNUstep, define some consequences. +if test "$HAVE_X_WINDOWS" = "yes" || test "$HAVE_NS" = "yes"; then + AC_DEFINE(HAVE_WINDOW_SYSTEM, 1, [Define if you have a window system.]) + AC_DEFINE(HAVE_MOUSE, 1, [Define if you have mouse support.]) + MOUSE_SUPPORT="\$(REAL_MOUSE_SUPPORT)" + TOOLTIP_SUPPORT="\${lispsource}mouse.elc" + + WINDOW_SUPPORT="\$(BASE_WINDOW_SUPPORT)" + test "$HAVE_X_WINDOWS" = "yes" && \ + WINDOW_SUPPORT="$WINDOW_SUPPORT \$(X_WINDOW_SUPPORT)" + +fi +AC_SUBST(MOUSE_SUPPORT) +AC_SUBST(TOOLTIP_SUPPORT) +AC_SUBST(WINDOW_SUPPORT) + + AH_TOP([/* GNU Emacs site configuration template file. Copyright (C) 1988, 1993, 1994, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. @@ -3282,12 +3309,6 @@ ])dnl AH_BOTTOM([ -/* If we're using X11/Carbon/GNUstep, define some consequences. */ -#if defined(HAVE_X_WINDOWS) || defined(HAVE_NS) -#define HAVE_WINDOW_SYSTEM -#define HAVE_MOUSE -#endif - /* Define AMPERSAND_FULL_NAME if you use the convention that & in the full name stands for the login id. */ /* Turned on June 1996 supposing nobody will mind it. */ @@ -3312,7 +3333,7 @@ #endif #endif /* __FreeBSD__ || __NetBSD__ || __linux__ */ -/* If using GNU, then support inline function declarations. */ +/* If using GNU, then support inline function declarations. */ /* Don't try to switch on inline handling as detected by AC_C_INLINE generally, because even if non-gcc compilers accept `inline', they may reject `extern inline'. */ @@ -3337,7 +3358,7 @@ /* Set up some defines, C and LD flags for NeXTstep interface on GNUstep. (There is probably a better place to do this, but right now the Cocoa side does this in s/darwin.h and we cannot - parallel this exactly since GNUstep is multi-OS. */ + parallel this exactly since GNUstep is multi-OS. */ #ifdef HAVE_NS # ifdef NS_IMPL_GNUSTEP /* GNUstep needs a bit more pure memory. Of the existing knobs, @@ -3434,7 +3455,7 @@ #include "string.h" #endif #ifdef HAVE_STRINGS_H -#include "strings.h" /* May be needed for bcopy & al. */ +#include "strings.h" /* May be needed for bcopy & al. */ #endif #ifdef HAVE_STDLIB_H #include <stdlib.h> @@ -3601,7 +3622,10 @@ # the C preprocessor to some helpful value like 1, or maybe the empty # string. Needless to say consequent macro substitutions are less # than conducive to the makefile finding the correct directory. -[cpp_undefs="`echo $srcdir $configuration $canonical unix | +# src/Makefile.in used to treat X11 as equivalent to HAVE_X11. +# But nothing in Emacs defines X11, and everywhere else uses HAVE_X11, +# so that cannot have been doing anything. +[cpp_undefs="`echo $srcdir $configuration $canonical unix mktime register X11 | sed -e 's/[^a-zA-Z0-9_]/ /g' -e 's/^/ /' -e 's/ *$//' \ -e 's/ */ -U/g' -e 's/-U[0-9][^ ]*//g'`"]
--- a/doc/misc/ChangeLog Thu May 13 12:10:13 2010 +0000 +++ b/doc/misc/ChangeLog Fri May 14 11:34:53 2010 +0000 @@ -1,3 +1,7 @@ +2010-05-13 Jay Belanger <jay.p.belanger@gmail.com> + + * calc.texi: Remove "\turnoffactive" commands througout. + 2010-05-08 Štěpán Němec <stepnem@gmail.com> (tiny change) * url.texi (HTTP language/coding, Customization):
--- a/doc/misc/calc.texi Thu May 13 12:10:13 2010 +0000 +++ b/doc/misc/calc.texi Fri May 14 11:34:53 2010 +0000 @@ -76,7 +76,6 @@ @newcount@calcpageno @newtoks@calcoldeverypar @calcoldeverypar=@everypar @everypar={@calceverypar@the@calcoldeverypar} -@ifx@turnoffactive@undefinedzzz@def@turnoffactive{}@fi @ifx@ninett@undefinedzzz@font@ninett=cmtt9@fi @catcode`@\=0 \catcode`\@=11 \r@ggedbottomtrue @@ -1804,7 +1803,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ 2 + { 3 \times 4 \times 5 \over 6 \times 7^8 } - 9 $$ \afterdisplay @@ -3358,7 +3356,6 @@ @end group @end ifnottex @tex -\turnoffactive \beforedisplayh $$ \openup1\jot \tabskip=0pt plus1fil \halign to\displaywidth{\tabskip=0pt @@ -3385,7 +3382,6 @@ @end group @end ifnottex @tex -\turnoffactive \beforedisplay $$ \pmatrix{ 1 & 2 & 3 \cr 4 & 5 & 6 \cr 7 & 6 & 0 } \times @@ -3457,7 +3453,6 @@ @end group @end ifnottex @tex -\turnoffactive \beforedisplay $$ \eqalign{ x &+ a y = 6 \cr x &+ b y = 10} @@ -3483,7 +3478,6 @@ @samp{trn(A)*A*X = trn(A)*B}. @end ifnottex @tex -\turnoffactive $A^T A \, X = A^T B$, where $A^T$ is the transpose \samp{trn(A)}. @end tex Now @@ -3506,7 +3500,6 @@ @end group @end ifnottex @tex -\turnoffactive \beforedisplayh $$ \openup1\jot \tabskip=0pt plus1fil \halign to\displaywidth{\tabskip=0pt @@ -3778,7 +3771,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ m = {N \sum x y - \sum x \sum y \over N \sum x^2 - \left( \sum x \right)^2} $$ @@ -3820,7 +3812,6 @@ @samp{sum(x y)}.) @end ifnottex @tex -\turnoffactive These are $\sum x$, $\sum x^2$, $\sum y$, and $\sum x y$, respectively. (We could have used \kbd{*} to compute $\sum x^2$ and $\sum x y$.) @@ -3874,7 +3865,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ b = {\sum y - m \sum x \over N} $$ \afterdisplay @@ -5223,7 +5213,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ \displaylines{ \qquad {h \over 3} (f(a) + 4 f(a+h) + 2 f(a+2h) + 4 f(a+3h) + \cdots @@ -5245,7 +5234,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ h (f(a) + f(a+h) + f(a+2h) + f(a+3h) + \cdots + f(a+(n-2)h) + f(a+(n-1)h)) $$ @@ -5686,7 +5674,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ \cos x = 1 - {x^2 \over 2!} + {x^4 \over 4!} - {x^6 \over 6!} + \cdots $$ \afterdisplay @@ -5704,7 +5691,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ \cos x = 1 - {x^2 \over 2!} + O(x^3) $$ \afterdisplay @@ -6336,7 +6322,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ \eqalign{ s(n,n) &= 1 \qquad \hbox{for } n \ge 0, \cr s(n,0) &= 0 \qquad \hbox{for } n > 0, \cr @@ -6875,7 +6860,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ \eqalign{ x &+ a y = 6 \cr x &+ b y = 10} @@ -6939,7 +6923,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplayh $$ \openup1\jot \tabskip=0pt plus1fil \halign to\displaywidth{\tabskip=0pt @@ -7074,7 +7057,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ m \times x + b \times 1 = y $$ \afterdisplay @@ -7865,7 +7847,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ 3 (3 a + b - 511 m) + c - 511 n $$ \afterdisplay @@ -7881,7 +7862,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ 9 a + 3 b + c - 511\times3 m - 511 n $$ \afterdisplay @@ -7899,7 +7879,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ 9 a + 3 b + c - 511 n^{\prime} $$ \afterdisplay @@ -14408,7 +14387,6 @@ @end group @end example @tex -\turnoffactive $$ [3 + 4i, {3 \over 4}, 3 \pm 4, [ 3 \ldots \infty)] $$ @end tex @sp 1 @@ -14434,7 +14412,6 @@ @end group @end example @tex -\turnoffactive $$ [\sin{a}, \sin{2 a}, \sin(2 + a), \sin\left( {a \over b} \right)] $$ @end tex @sp 2 @@ -14467,7 +14444,6 @@ @end group @end example @tex -\turnoffactive $$ 2 + 3 \to 5 $$ $$ 5 $$ @end tex @@ -14482,7 +14458,6 @@ @end group @end example @tex -\turnoffactive $$ [{2 + 3 \to 5}, {{a \over 2} \to {b + c \over 2}}] $$ {\let\to\Rightarrow $$ [{2 + 3 \to 5}, {{a \over 2} \to {b + c \over 2}}] $$} @@ -14499,7 +14474,6 @@ @end group @end example @tex -\turnoffactive $$ \matrix{ {a \over b} & 0 \cr 0 & 2^{(x + 1)} } $$ $$ \pmatrix{ {a \over b} & 0 \cr 0 & 2^{(x + 1)} } $$ @end tex @@ -17935,7 +17909,6 @@ @end example @end ifnottex @tex -\turnoffactive $$ \code{fv}(r, n, p) = p { (1 + r)^n - 1 \over r } $$ $$ \code{fvb}(r, n, p) = p { ((1 + r)^n - 1) (1 + r) \over r } $$ $$ \code{fvl}(r, n, p) = p (1 + r)^n $$ @@ -18591,7 +18564,6 @@ and @kbd{H I f G} [@code{gammaG}] commands. @end ifnottex @tex -\turnoffactive The functions corresponding to the integrals that define $P(a,x)$ and $Q(a,x)$ but without the normalizing $1/\Gamma(a)$ factor are called $\gamma(a,x)$ and $\Gamma(a,x)$, respectively. @@ -20559,7 +20531,6 @@ @texline @math{1 /\sigma^2}. @infoline @expr{1 / s^2}. @tex -\turnoffactive $$ \mu = { \displaystyle \sum { x_i \over \sigma_i^2 } \over \displaystyle \sum { 1 \over \sigma_i^2 } } $$ @end tex @@ -20593,7 +20564,6 @@ of the input errors. (I.e., the variance is the reciprocal of the sum of the reciprocals of the variances.) @tex -\turnoffactive $$ \sigma_\mu^2 = {1 \over \displaystyle \sum {1 \over \sigma_i^2}} $$ @end tex If the inputs are plain @@ -20603,7 +20573,6 @@ then assuming each value's error is equal to this standard deviation.) @tex -\turnoffactive $$ \sigma_\mu^2 = {\sigma^2 \over N} $$ @end tex @@ -20636,7 +20605,6 @@ defined as the reciprocal of the arithmetic mean of the reciprocals of the values. @tex -\turnoffactive $$ { N \over \displaystyle \sum {1 \over x_i} } $$ @end tex @@ -20650,7 +20618,6 @@ equal to the @code{exp} of the arithmetic mean of the logarithms of the data values. @tex -\turnoffactive $$ \exp \left ( \sum { \ln x_i } \right ) = \left ( \prod { x_i } \right)^{1 / N} $$ @end tex @@ -20662,7 +20629,6 @@ replacing the two numbers with their arithmetic mean and geometric mean, then repeating until the two values converge. @tex -\turnoffactive $$ a_{i+1} = { a_i + b_i \over 2 } , \qquad b_{i+1} = \sqrt{a_i b_i} $$ @end tex @@ -20685,7 +20651,6 @@ the differences between the values and the mean of the @expr{N} values, divided by @expr{N-1}. @tex -\turnoffactive $$ \sigma^2 = {1 \over N - 1} \sum (x_i - \mu)^2 $$ @end tex @@ -20712,7 +20677,6 @@ data values, so that the mean computed from the input is itself only an estimate of the true mean. @tex -\turnoffactive $$ \sigma^2 = {1 \over N} \sum (x_i - \mu)^2 $$ @end tex @@ -20777,7 +20741,6 @@ is taken as the square root of the sum of the squares of the two input errors. @tex -\turnoffactive $$ \sigma_{x\!y}^2 = {1 \over N-1} \sum (x_i - \mu_x) (y_i - \mu_y) $$ $$ \sigma_{x\!y}^2 = {\displaystyle {1 \over N-1} @@ -20805,7 +20768,6 @@ product of their standard deviations. (There is no difference between sample or population statistics here.) @tex -\turnoffactive $$ r_{x\!y} = { \sigma_{x\!y}^2 \over \sigma_x^2 \sigma_y^2 } $$ @end tex @@ -24361,8 +24323,6 @@ @end example @end ifnottex @tex -\turnoffactive -\turnoffactive \beforedisplay $$ \pmatrix{ 1 & 2 & 3 & 4 & 5 \cr 5 & 7 & 9 & 11 & 13 } @@ -24422,7 +24382,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ \chi^2 = \sum_{i=1}^N (y_i - (a + b x_i))^2 $$ \afterdisplay @@ -24613,7 +24572,6 @@ @end example @end ifnottex @tex -\turnoffactive \beforedisplay $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ \afterdisplay @@ -25388,7 +25346,6 @@ the stack. Thus, @kbd{' k^2 @key{RET} ' k @key{RET} 1 @key{RET} 5 @key{RET} a + @key{RET}} produces the result 55. @tex -\turnoffactive $$ \sum_{k=1}^5 k^2 = 55 $$ @end tex
--- a/lisp/ChangeLog Thu May 13 12:10:13 2010 +0000 +++ b/lisp/ChangeLog Fri May 14 11:34:53 2010 +0000 @@ -1,3 +1,30 @@ +2010-05-13 Chong Yidong <cyd@stupidchicken.com> + + Add TeX open-block and close-block keybindings to SGML, and vice + versa. + + * textmodes/tex-mode.el (tex-mode-map): Bind C-c C-t to + latex-open-block and C-c / to latex-close-block. + + * textmodes/sgml-mode.el (sgml-mode-map): Bind C-c C-o to sgml-tag + and C-c C-e to sgml-close-tag. + +2010-05-13 Michael Albinus <michael.albinus@gmx.de> + + * net/tramp.el (with-progress-reporter): Create reporter object + only when the message would be displayed. Handled nested calls. + (tramp-handle-load, tramp-handle-file-local-copy) + (tramp-handle-insert-file-contents, tramp-handle-write-region) + (tramp-maybe-send-script, tramp-find-shell): Use + `with-progress-reporter'. + (tramp-handle-dired-compress-file, tramp-maybe-open-connection): + Fix message text. + + * net/tramp-smb.el (tramp-smb-handle-copy-file) + (tramp-smb-handle-file-local-copy, tramp-smb-handle-rename-file) + (tramp-smb-handle-write-region, tramp-smb-maybe-open-connection): + Use `with-progress-reporter'. + 2010-05-13 Agustín Martín <agustin.martin@hispalinux.es> * ispell.el (ispell-init-process): Do not kill ispell process
--- a/lisp/gnus/ChangeLog Thu May 13 12:10:13 2010 +0000 +++ b/lisp/gnus/ChangeLog Fri May 14 11:34:53 2010 +0000 @@ -1,3 +1,8 @@ +2010-05-14 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus-sum.el (gnus-summary-save-article): Don't bother to re-fetch + article unless decoding article to be saved. + 2010-05-13 Katsumi Yamaoka <yamaoka@jpl.org> * mml1991.el (mml1991-mailcrypt-encrypt, mml1991-gpg-encrypt)
--- a/lisp/gnus/gnus-sum.el Thu May 13 12:10:13 2010 +0000 +++ b/lisp/gnus/gnus-sum.el Fri May 14 11:34:53 2010 +0000 @@ -11664,12 +11664,8 @@ (gnus-message 1 "Article %d is unsaveable" article)) ;; This is a real article. (save-window-excursion - (let ((gnus-display-mime-function (when decode - gnus-display-mime-function)) - (gnus-article-prepare-hook (when decode - gnus-article-prepare-hook))) - (gnus-summary-select-article t t nil article) - (gnus-summary-goto-subject article))) + (gnus-summary-select-article decode decode nil article) + (gnus-summary-goto-subject article)) (with-current-buffer save-buffer (erase-buffer) (insert-buffer-substring (if decode
--- a/lisp/net/tramp-smb.el Thu May 13 12:10:13 2010 +0000 +++ b/lisp/net/tramp-smb.el Fri May 14 11:34:53 2010 +0000 @@ -334,41 +334,41 @@ PRESERVE-UID-GID is completely ignored." (setq filename (expand-file-name filename) newname (expand-file-name newname)) + (with-progress-reporter + (tramp-dissect-file-name (if (file-remote-p filename) filename newname)) + 0 (format "Copying %s to %s" filename newname) - (let ((tmpfile (file-local-copy filename))) + (let ((tmpfile (file-local-copy filename))) - (if tmpfile - ;; Remote filename. - (condition-case err - (rename-file tmpfile newname ok-if-already-exists) - ((error quit) - (tramp-compat-delete-file tmpfile 'force) - (signal (car err) (cdr err)))) - - ;; Remote newname. - (when (file-directory-p newname) - (setq newname (expand-file-name - (file-name-nondirectory filename) newname))) + (if tmpfile + ;; Remote filename. + (condition-case err + (rename-file tmpfile newname ok-if-already-exists) + ((error quit) + (tramp-compat-delete-file tmpfile 'force) + (signal (car err) (cdr err)))) - (with-parsed-tramp-file-name newname nil - (when (and (not ok-if-already-exists) - (file-exists-p newname)) - (tramp-error v 'file-already-exists newname)) + ;; Remote newname. + (when (file-directory-p newname) + (setq newname + (expand-file-name (file-name-nondirectory filename) newname))) + + (with-parsed-tramp-file-name newname nil + (when (and (not ok-if-already-exists) + (file-exists-p newname)) + (tramp-error v 'file-already-exists newname)) - ;; We must also flush the cache of the directory, because - ;; `file-attributes' reads the values from there. - (tramp-flush-file-property v (file-name-directory localname)) - (tramp-flush-file-property v localname) - (unless (tramp-smb-get-share v) - (tramp-error - v 'file-error "Target `%s' must contain a share name" newname)) - (tramp-message v 0 "Copying file %s to file %s..." filename newname) - (if (tramp-smb-send-command - v (format "put \"%s\" \"%s\"" - filename (tramp-smb-get-localname v))) - (tramp-message - v 0 "Copying file %s to file %s...done" filename newname) - (tramp-error v 'file-error "Cannot copy `%s'" filename))))) + ;; We must also flush the cache of the directory, because + ;; `file-attributes' reads the values from there. + (tramp-flush-file-property v (file-name-directory localname)) + (tramp-flush-file-property v localname) + (unless (tramp-smb-get-share v) + (tramp-error + v 'file-error "Target `%s' must contain a share name" newname)) + (unless (tramp-smb-send-command + v (format "put \"%s\" \"%s\"" + filename (tramp-smb-get-localname v))) + (tramp-error v 'file-error "Cannot copy `%s'" filename)))))) ;; KEEP-DATE handling. (when keep-date (set-file-times newname (nth 5 (file-attributes filename))))) @@ -605,15 +605,15 @@ v 'file-error "Cannot make local copy of non-existing file `%s'" filename)) (let ((tmpfile (tramp-compat-make-temp-file filename))) - (tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile) - (if (tramp-smb-send-command - v (format "get \"%s\" \"%s\"" (tramp-smb-get-localname v) tmpfile)) - (tramp-message - v 4 "Fetching %s to tmp file %s...done" filename tmpfile) - ;; Oops, an error. We shall cleanup. - (tramp-compat-delete-file tmpfile 'force) - (tramp-error - v 'file-error "Cannot make local copy of file `%s'" filename)) + (with-progress-reporter + v 3 (format "Fetching %s to tmp file %s" filename tmpfile) + (unless (tramp-smb-send-command + v (format "get \"%s\" \"%s\"" + (tramp-smb-get-localname v) tmpfile)) + ;; Oops, an error. We shall cleanup. + (tramp-compat-delete-file tmpfile 'force) + (tramp-error + v 'file-error "Cannot make local copy of file `%s'" filename))) tmpfile))) ;; This function should return "foo/" for directories and "bar" for @@ -850,38 +850,39 @@ "Like `rename-file' for Tramp files." (setq filename (expand-file-name filename) newname (expand-file-name newname)) + (with-progress-reporter + (tramp-dissect-file-name (if (file-remote-p filename) filename newname)) + 0 (format "Renaming %s to %s" filename newname) - (let ((tmpfile (file-local-copy filename))) + (let ((tmpfile (file-local-copy filename))) - (if tmpfile - ;; Remote filename. - (condition-case err - (rename-file tmpfile newname ok-if-already-exists) - ((error quit) - (tramp-compat-delete-file tmpfile 'force) - (signal (car err) (cdr err)))) - - ;; Remote newname. - (when (file-directory-p newname) - (setq newname (expand-file-name - (file-name-nondirectory filename) newname))) + (if tmpfile + ;; Remote filename. + (condition-case err + (rename-file tmpfile newname ok-if-already-exists) + ((error quit) + (tramp-compat-delete-file tmpfile 'force) + (signal (car err) (cdr err)))) - (with-parsed-tramp-file-name newname nil - (when (and (not ok-if-already-exists) - (file-exists-p newname)) - (tramp-error v 'file-already-exists newname)) - ;; We must also flush the cache of the directory, because - ;; `file-attributes' reads the values from there. - (tramp-flush-file-property v (file-name-directory localname)) - (tramp-flush-file-property v localname) - (tramp-message v 0 "Copying file %s to file %s..." filename newname) - (if (tramp-smb-send-command - v (format "put %s \"%s\"" filename (tramp-smb-get-localname v))) - (tramp-message - v 0 "Copying file %s to file %s...done" filename newname) - (tramp-error v 'file-error "Cannot rename `%s'" filename))))) + ;; Remote newname. + (when (file-directory-p newname) + (setq newname (expand-file-name + (file-name-nondirectory filename) newname))) - (tramp-compat-delete-file filename 'force)) + (with-parsed-tramp-file-name newname nil + (when (and (not ok-if-already-exists) + (file-exists-p newname)) + (tramp-error v 'file-already-exists newname)) + ;; We must also flush the cache of the directory, because + ;; `file-attributes' reads the values from there. + (tramp-flush-file-property v (file-name-directory localname)) + (tramp-flush-file-property v localname) + (unless (tramp-smb-send-command + v (format "put %s \"%s\"" + filename (tramp-smb-get-localname v))) + (tramp-error v 'file-error "Cannot rename `%s'" filename))))) + + (tramp-compat-delete-file filename 'force))) (defun tramp-smb-handle-set-file-modes (filename mode) "Like `set-file-modes' for Tramp files." @@ -938,14 +939,14 @@ (list start end tmpfile append 'no-message lockname confirm) (list start end tmpfile append 'no-message lockname))) - (tramp-message v 5 "Writing tmp file %s to file %s..." tmpfile filename) - (unwind-protect - (if (tramp-smb-send-command - v (format "put %s \"%s\"" tmpfile (tramp-smb-get-localname v))) - (tramp-message - v 5 "Writing tmp file %s to file %s...done" tmpfile filename) - (tramp-error v 'file-error "Cannot write `%s'" filename)) - (tramp-compat-delete-file tmpfile 'force)) + (with-progress-reporter + v 3 (format "Moving tmp file %s to %s" tmpfile filename) + (unwind-protect + (unless (tramp-smb-send-command + v (format "put %s \"%s\"" + tmpfile (tramp-smb-get-localname v))) + (tramp-error v 'file-error "Cannot write `%s'" filename)) + (tramp-compat-delete-file tmpfile 'force))) (unless (equal curbuf (current-buffer)) (tramp-error @@ -1302,60 +1303,57 @@ (setq args (append args (list "-s" tramp-smb-conf)))) ;; OK, let's go. - (tramp-message - vec 3 "Opening connection for //%s%s/%s..." - (if (not (zerop (length user))) (concat user "@") "") - host (or share "")) + (with-progress-reporter + vec 3 + (format "Opening connection for //%s%s/%s" + (if (not (zerop (length user))) (concat user "@") "") + host (or share "")) - (let* ((coding-system-for-read nil) - (process-connection-type tramp-process-connection-type) - (p (let ((default-directory - (tramp-compat-temporary-file-directory))) - (apply #'start-process - (tramp-buffer-name vec) (tramp-get-buffer vec) - tramp-smb-program args)))) + (let* ((coding-system-for-read nil) + (process-connection-type tramp-process-connection-type) + (p (let ((default-directory + (tramp-compat-temporary-file-directory))) + (apply #'start-process + (tramp-buffer-name vec) (tramp-get-buffer vec) + tramp-smb-program args)))) - (tramp-message - vec 6 "%s" (mapconcat 'identity (process-command p) " ")) - (tramp-set-process-query-on-exit-flag p nil) + (tramp-message + vec 6 "%s" (mapconcat 'identity (process-command p) " ")) + (tramp-set-process-query-on-exit-flag p nil) - ;; Set variables for computing the prompt for reading password. - (setq tramp-current-method tramp-smb-method - tramp-current-user user - tramp-current-host host) + ;; Set variables for computing the prompt for reading password. + (setq tramp-current-method tramp-smb-method + tramp-current-user user + tramp-current-host host) - ;; Play login scenario. - (tramp-process-actions - p vec - (if share - tramp-smb-actions-with-share - tramp-smb-actions-without-share)) + ;; Play login scenario. + (tramp-process-actions + p vec + (if share + tramp-smb-actions-with-share + tramp-smb-actions-without-share)) - ;; Check server version. - (with-current-buffer (tramp-get-connection-buffer vec) - (goto-char (point-min)) - (search-forward-regexp - "Domain=\\[[^]]*\\] OS=\\[[^]]*\\] Server=\\[[^]]*\\]" nil t) - (let ((smbserver-version (match-string 0))) - (unless - (string-equal - smbserver-version - (tramp-get-connection-property - vec "smbserver-version" smbserver-version)) - (tramp-flush-directory-property vec "") - (tramp-flush-connection-property vec)) - (tramp-set-connection-property - vec "smbserver-version" smbserver-version))) + ;; Check server version. + (with-current-buffer (tramp-get-connection-buffer vec) + (goto-char (point-min)) + (search-forward-regexp + "Domain=\\[[^]]*\\] OS=\\[[^]]*\\] Server=\\[[^]]*\\]" nil t) + (let ((smbserver-version (match-string 0))) + (unless + (string-equal + smbserver-version + (tramp-get-connection-property + vec "smbserver-version" smbserver-version)) + (tramp-flush-directory-property vec "") + (tramp-flush-connection-property vec)) + (tramp-set-connection-property + vec "smbserver-version" smbserver-version))) - ;; Set chunksize. Otherwise, `tramp-send-string' might - ;; try it itself. - (tramp-set-connection-property p "smb-share" share) - (tramp-set-connection-property p "chunksize" tramp-chunksize) - - (tramp-message - vec 3 "Opening connection for //%s%s/%s...done" - (if (not (zerop (length user))) (concat user "@") "") - host (or share "")))))))) + ;; Set chunksize. Otherwise, `tramp-send-string' might + ;; try it itself. + (tramp-set-connection-property p "smb-share" share) + (tramp-set-connection-property + p "chunksize" tramp-chunksize)))))))) ;; We don't use timeouts. If needed, the caller shall wrap around. (defun tramp-smb-wait-for-output (vec)
--- a/lisp/net/tramp.el Thu May 13 12:10:13 2010 +0000 +++ b/lisp/net/tramp.el Fri May 14 11:34:53 2010 +0000 @@ -2271,14 +2271,18 @@ (tramp-message ,vec ,level "%s..." ,message) ;; We start a pulsing progress reporter after 3 seconds. Feature ;; introduced in Emacs 24.1. - (when (<= ,level tramp-verbose) + (when (and tramp-message-show-message + ;; Display only when there is a minimum level. + (<= ,level (min tramp-verbose 3))) (condition-case nil (setq pr (tramp-compat-funcall 'make-progress-reporter ,message) tm (if pr (run-at-time 3 0.1 'progress-reporter-update pr))) (error nil))) (unwind-protect ;; Execute the body. - (progn ,@body) + (let ((tramp-message-show-message + (and tramp-message-show-message (not tm)))) + ,@body) ;; Stop progress reporter. (if tm (tramp-compat-funcall 'cancel-timer tm)) (tramp-message ,vec ,level "%s...done" ,message)))) @@ -2558,13 +2562,13 @@ (tramp-error v 'file-error "Cannot load nonexistent file `%s'" file))) (if (not (file-exists-p file)) nil - (unless nomessage (tramp-message v 0 "Loading %s..." file)) - (let ((local-copy (file-local-copy file))) - ;; MUST-SUFFIX doesn't exist on XEmacs, so let it default to nil. - (unwind-protect - (load local-copy noerror t t) - (tramp-compat-delete-file local-copy 'force))) - (unless nomessage (tramp-message v 0 "Loading %s...done" file)) + (let ((tramp-message-show-message (not nomessage))) + (with-progress-reporter v 0 (format "Loading %s" file) + (let ((local-copy (file-local-copy file))) + ;; MUST-SUFFIX doesn't exist on XEmacs, so let it default to nil. + (unwind-protect + (load local-copy noerror t t) + (tramp-compat-delete-file local-copy 'force))))) t))) ;; Localname manipulation functions that grok Tramp localnames... @@ -4153,7 +4157,7 @@ nil) ((and suffix (nth 2 suffix)) ;; We found an uncompression rule. - (with-progress-reporter v 0 (format "Uncompressing %s..." file) + (with-progress-reporter v 0 (format "Uncompressing %s" file) (when (zerop (tramp-send-command-and-check v (concat (nth 2 suffix) " " @@ -4165,7 +4169,7 @@ (t ;; We don't recognize the file as compressed, so compress it. ;; Try gzip. - (with-progress-reporter v 0 (format "Compressing %s..." file) + (with-progress-reporter v 0 (format "Compressing %s" file) (when (zerop (tramp-send-command-and-check v (concat "gzip -f " @@ -4747,11 +4751,11 @@ ;; Use inline encoding for file transfer. (rem-enc (save-excursion - (tramp-message v 5 "Encoding remote file %s..." filename) - (tramp-barf-unless-okay - v (format rem-enc (tramp-shell-quote-argument localname)) - "Encoding remote file failed") - (tramp-message v 5 "Encoding remote file %s...done" filename) + (with-progress-reporter + v 5 (format "Encoding remote file %s" filename) + (tramp-barf-unless-okay + v (format rem-enc (tramp-shell-quote-argument localname)) + "Encoding remote file failed")) (if (functionp loc-dec) ;; If local decoding is a function, we call it. We @@ -4761,15 +4765,15 @@ (with-temp-buffer (set-buffer-multibyte nil) (insert-buffer-substring (tramp-get-buffer v)) - (tramp-message - v 5 "Decoding remote file %s with function %s..." - filename loc-dec) - (funcall loc-dec (point-min) (point-max)) - ;; Unset `file-name-handler-alist'. Otherwise, - ;; epa-file gets confused. - (let (file-name-handler-alist - (coding-system-for-write 'binary)) - (write-region (point-min) (point-max) tmpfile))) + (with-progress-reporter + v 3 (format "Decoding remote file %s with function %s" + filename loc-dec) + (funcall loc-dec (point-min) (point-max)) + ;; Unset `file-name-handler-alist'. Otherwise, + ;; epa-file gets confused. + (let (file-name-handler-alist + (coding-system-for-write 'binary)) + (write-region (point-min) (point-max) tmpfile)))) ;; If tramp-decoding-function is not defined for this ;; method, we invoke tramp-decoding-command instead. @@ -4779,14 +4783,14 @@ (let (file-name-handler-alist (coding-system-for-write 'binary)) (write-region (point-min) (point-max) tmpfile2)) - (tramp-message - v 5 "Decoding remote file %s with command %s..." - filename loc-dec) - (unwind-protect - (tramp-call-local-coding-command loc-dec tmpfile2 tmpfile) - (tramp-compat-delete-file tmpfile2 'force)))) - - (tramp-message v 5 "Decoding remote file %s...done" filename) + (with-progress-reporter + v 3 (format "Decoding remote file %s with command %s" + filename loc-dec) + (unwind-protect + (tramp-call-local-coding-command + loc-dec tmpfile2 tmpfile) + (tramp-compat-delete-file tmpfile2 'force))))) + ;; Set proper permissions. (set-file-modes tmpfile (tramp-default-file-modes filename)) ;; Set local user ownership. @@ -4842,7 +4846,7 @@ "Like `insert-file-contents' for Tramp files." (barf-if-buffer-read-only) (setq filename (expand-file-name filename)) - (let (coding-system-used result local-copy remote-copy) + (let (result local-copy remote-copy) (with-parsed-tramp-file-name filename nil (unwind-protect (if (not (file-exists-p filename)) @@ -4913,27 +4917,16 @@ (setq tramp-temp-buffer-file-name local-copy) (put 'tramp-temp-buffer-file-name 'permanent-local t)) - (tramp-message - v 4 "Inserting local temp file `%s'..." local-copy) - - ;; We must ensure that `file-coding-system-alist' - ;; matches `local-copy'. - (let ((file-coding-system-alist - (tramp-find-file-name-coding-system-alist - filename local-copy))) - (setq result - (insert-file-contents - local-copy nil nil nil replace)) - ;; Now `last-coding-system-used' has right value. - ;; Remember it. - (when (boundp 'last-coding-system-used) - (setq coding-system-used - (symbol-value 'last-coding-system-used)))) - - (tramp-message - v 4 "Inserting local temp file `%s'...done" local-copy) - (when (boundp 'last-coding-system-used) - (set 'last-coding-system-used coding-system-used)))) + (with-progress-reporter + v 3 (format "Inserting local temp file `%s'" local-copy) + ;; We must ensure that `file-coding-system-alist' + ;; matches `local-copy'. + (let ((file-coding-system-alist + (tramp-find-file-name-coding-system-alist + filename local-copy))) + (setq result + (insert-file-contents + local-copy nil nil nil replace)))))) ;; Save exit. (progn @@ -5193,15 +5186,14 @@ ;; Use inline file transfer. (rem-dec ;; Encode tmpfile. - (tramp-message v 5 "Encoding region...") (unwind-protect (with-temp-buffer (set-buffer-multibyte nil) ;; Use encoding function or command. (if (functionp loc-enc) - (progn - (tramp-message - v 5 "Encoding region using function `%s'..." loc-enc) + (with-progress-reporter + v 3 (format "Encoding region using function `%s'" + loc-enc) (let ((coding-system-for-read 'binary)) (insert-file-contents-literally tmpfile)) ;; The following `let' is a workaround for the @@ -5217,59 +5209,61 @@ (tramp-compat-temporary-file-directory))) (funcall loc-enc (point-min) (point-max)))) - (tramp-message - v 5 "Encoding region using command `%s'..." loc-enc) - (unless (zerop (tramp-call-local-coding-command - loc-enc tmpfile t)) - (tramp-error - v 'file-error - "Cannot write to `%s', local encoding command `%s' failed" - filename loc-enc))) + (with-progress-reporter + v 3 (format "Encoding region using command `%s'" + loc-enc) + (unless (zerop (tramp-call-local-coding-command + loc-enc tmpfile t)) + (tramp-error + v 'file-error + (concat "Cannot write to `%s', " + "local encoding command `%s' failed") + filename loc-enc)))) ;; Send buffer into remote decoding command which ;; writes to remote file. Because this happens on ;; the remote host, we cannot use the function. - (goto-char (point-max)) - (unless (bolp) (newline)) - (tramp-message - v 5 "Decoding region into remote file %s..." filename) - (tramp-send-command - v - (format - (concat rem-dec " <<'EOF'\n%sEOF") - (tramp-shell-quote-argument localname) - (buffer-string))) - (tramp-barf-unless-okay - v nil - "Couldn't write region to `%s', decode using `%s' failed" - filename rem-dec) - ;; When `file-precious-flag' is set, the region is - ;; written to a temporary file. Check that the - ;; checksum is equal to that from the local tmpfile. - (when file-precious-flag - (erase-buffer) - (and - ;; cksum runs locally, if possible. - (zerop (tramp-local-call-process "cksum" tmpfile t)) - ;; cksum runs remotely. - (zerop - (tramp-send-command-and-check - v - (format - "cksum <%s" (tramp-shell-quote-argument localname)))) - ;; ... they are different. - (not - (string-equal - (buffer-string) - (with-current-buffer (tramp-get-buffer v) - (buffer-string)))) - (tramp-error - v 'file-error - (concat "Couldn't write region to `%s'," - " decode using `%s' failed") - filename rem-dec))) - (tramp-message - v 5 "Decoding region into remote file %s...done" filename)) + (with-progress-reporter + v 3 + (format "Decoding region into remote file %s" filename) + (goto-char (point-max)) + (unless (bolp) (newline)) + (tramp-send-command + v + (format + (concat rem-dec " <<'EOF'\n%sEOF") + (tramp-shell-quote-argument localname) + (buffer-string))) + (tramp-barf-unless-okay + v nil + "Couldn't write region to `%s', decode using `%s' failed" + filename rem-dec) + ;; When `file-precious-flag' is set, the region is + ;; written to a temporary file. Check that the + ;; checksum is equal to that from the local tmpfile. + (when file-precious-flag + (erase-buffer) + (and + ;; cksum runs locally, if possible. + (zerop (tramp-local-call-process "cksum" tmpfile t)) + ;; cksum runs remotely. + (zerop + (tramp-send-command-and-check + v + (format + "cksum <%s" + (tramp-shell-quote-argument localname)))) + ;; ... they are different. + (not + (string-equal + (buffer-string) + (with-current-buffer (tramp-get-buffer v) + (buffer-string)))) + (tramp-error + v 'file-error + (concat "Couldn't write region to `%s'," + " decode using `%s' failed") + filename rem-dec))))) ;; Save exit. (tramp-compat-delete-file tmpfile 'force))) @@ -6286,14 +6280,13 @@ (let* ((p (tramp-get-connection-process vec)) (scripts (tramp-get-connection-property p "scripts" nil))) (unless (member name scripts) - (tramp-message vec 5 "Sending script `%s'..." name) - ;; The script could contain a call of Perl. This is masked with `%s'. - (tramp-send-command-and-check - vec - (format "%s () {\n%s\n}" name - (format script (tramp-get-remote-perl vec)))) - (tramp-set-connection-property p "scripts" (cons name scripts)) - (tramp-message vec 5 "Sending script `%s'...done." name)))) + (with-progress-reporter vec 5 (format "Sending script `%s'" name) + ;; The script could contain a call of Perl. This is masked with `%s'. + (tramp-send-command-and-check + vec + (format "%s () {\n%s\n}" name + (format script (tramp-get-remote-perl vec)))) + (tramp-set-connection-property p "scripts" (cons name scripts)))))) (defun tramp-set-auto-save () (when (and ;; ange-ftp has its own auto-save mechanism @@ -6572,7 +6565,7 @@ (setq extra-args (cdr item)))) (when extra-args (setq shell (concat shell " " extra-args)))) (tramp-message - vec 5 "Starting remote shell `%s' for tilde expansion..." shell) + vec 5 "Starting remote shell `%s' for tilde expansion" shell) (let ((tramp-end-of-output tramp-initial-end-of-output)) (tramp-send-command vec @@ -6580,13 +6573,12 @@ (shell-quote-argument tramp-end-of-output) shell) t)) ;; Setting prompts. - (tramp-message vec 5 "Setting remote shell prompt...") - (tramp-send-command - vec (format "PS1=%s" (shell-quote-argument tramp-end-of-output)) t) - (tramp-send-command vec "PS2=''" t) - (tramp-send-command vec "PS3=''" t) - (tramp-send-command vec "PROMPT_COMMAND=''" t) - (tramp-message vec 5 "Setting remote shell prompt...done")) + (with-progress-reporter vec 5 (format "Setting remote shell prompt") + (tramp-send-command + vec (format "PS1=%s" (shell-quote-argument tramp-end-of-output)) t) + (tramp-send-command vec "PS2=''" t) + (tramp-send-command vec "PS3=''" t) + (tramp-send-command vec "PROMPT_COMMAND=''" t))) (t (tramp-message vec 5 "Remote `%s' groks tilde expansion, good" @@ -7423,11 +7415,11 @@ (tramp-get-buffer vec) (if (zerop (length (tramp-file-name-user vec))) (tramp-message - vec 3 "Opening connection for %s using %s..." + vec 3 "Opening connection for %s using %s" (tramp-file-name-host vec) (tramp-file-name-method vec)) (tramp-message - vec 3 "Opening connection for %s@%s using %s..." + vec 3 "Opening connection for %s@%s using %s" (tramp-file-name-user vec) (tramp-file-name-host vec) (tramp-file-name-method vec)))
--- a/lisp/textmodes/sgml-mode.el Thu May 13 12:10:13 2010 +0000 +++ b/lisp/textmodes/sgml-mode.el Fri May 14 11:34:53 2010 +0000 @@ -101,6 +101,11 @@ (define-key map "\C-c\^?" 'sgml-delete-tag) (define-key map "\C-c?" 'sgml-tag-help) (define-key map "\C-c/" 'sgml-close-tag) + + ;; Redundant keybindings, for consistency with TeX mode. + (define-key map "\C-c\C-o" 'sgml-tag) + (define-key map "\C-c\C-e" 'sgml-close-tag) + (define-key map "\C-c8" 'sgml-name-8bit-mode) (define-key map "\C-c\C-v" 'sgml-validate) (when sgml-quick-keys
--- a/lisp/textmodes/tex-mode.el Thu May 13 12:10:13 2010 +0000 +++ b/lisp/textmodes/tex-mode.el Fri May 14 11:34:53 2010 +0000 @@ -808,6 +808,11 @@ (define-key map "\C-c\C-c" 'tex-compile) (define-key map "\C-c\C-i" 'tex-bibtex-file) (define-key map "\C-c\C-o" 'latex-insert-block) + + ;; Redundant keybindings, for consistency with SGML mode. + (define-key map "\C-c\C-t" 'latex-insert-block) + (define-key map "\C-c/" 'latex-close-block) + (define-key map "\C-c\C-e" 'latex-close-block) (define-key map "\C-c\C-u" 'tex-goto-last-unclosed-latex-block) (define-key map "\C-c\C-m" 'tex-feed-input)
--- a/lwlib/ChangeLog Thu May 13 12:10:13 2010 +0000 +++ b/lwlib/ChangeLog Fri May 14 11:34:53 2010 +0000 @@ -1,3 +1,7 @@ +2010-05-13 Jan Djärv <jan.h.d@swipnet.se> + + * lwlib-Xaw.c (make_dialog): Remove extra arg to XtVaGetSubresources. + 2010-05-08 Jan Djärv <jan.h.d@swipnet.se> * xlwmenu.c (XlwMenuDestroy): Remove XtDestroyWidget on subwidgets
--- a/lwlib/lwlib-Xaw.c Thu May 13 12:10:13 2010 +0000 +++ b/lwlib/lwlib-Xaw.c Fri May 14 11:34:53 2010 +0000 @@ -664,7 +664,7 @@ (XtPointer)"Sans-14" }}; char *faceName; XtVaGetSubresources (dialog, &faceName, "Dialog", "dialog", - rec, 1, 0, NULL); + rec, 1, (String)NULL); if (strcmp ("none", faceName) != 0) xft_font = openFont (dialog, faceName); if (xft_font)
--- a/msdos/ChangeLog Thu May 13 12:10:13 2010 +0000 +++ b/msdos/ChangeLog Fri May 14 11:34:53 2010 +0000 @@ -1,3 +1,21 @@ +2010-05-14 Glenn Morris <rgm@gnu.org> + + * sed1v2.inp (ns_appdir, ns_appbindir, ns_appsrc): Edit to empty. + + * sed1v2.inp (MSDOS_OBJ): Edit to dosfns.o msdos.o. + (MSDOS_SUPPORT): Edit to $(MSDOS_SUPPORT_REAL). + * sed1x.inp (MSDOS_X_OBJ): Edit to w16select.o termcap.o. + + * sed2x.inp (HAVE_WINDOW_SYSTEM): Define. + * sed1x.inp (TOOLTIP_SUPPORT): Edit to ${lispsource}tooltip.elc. + (WINDOW_SUPPORT): Edit to $(BASE_WINDOW_SUPPORT) $(X_WINDOW_SUPPORT). + * sed1v2.inp (MOUSE_SUPPORT): Edit to $(REAL_MOUSE_SUPPORT). + (TOOLTIP_SUPPORT, WINDOW_SUPPORT): Edit to empty. + + * sed1v2.inp (FONT_OBJ): Use the plain X version (no XFT, Freetype). + + * sed1v2.inp (@NS_IMPL_GNUSTEP_INC@): Edit to nil. + 2010-05-13 Glenn Morris <rgm@gnu.org> * sed1x.inp (OLDXMENU): Edit to ${oldXMenudir}libXMenu11.a.
--- a/msdos/sed1v2.inp Thu May 13 12:10:13 2010 +0000 +++ b/msdos/sed1v2.inp Fri May 14 11:34:53 2010 +0000 @@ -89,6 +89,11 @@ /^RSVG_CFLAGS *=/s/@RSVG_CFLAGS@// /^WIDGET_OBJ *=/s/@WIDGET_OBJ@// /^CYGWIN_OBJ *=/s/@CYGWIN_OBJ@// +/^MSDOS_OBJ *=/s/= */= dosfns.o msdos.o/ +/^MSDOS_SUPPORT *=/s/= */= $(MSDOS_SUPPORT_REAL)/ +/^ns_appdir *=/s/@ns_appdir@// +/^ns_appbindir *=/s/@ns_appbindir@// +/^ns_appsrc *=/s/@ns_appsrc@// /^NS_OBJ *=/s/@NS_OBJ@// /^NS_SUPPORT *=/s/@NS_SUPPORT@// /^GNU_OBJC_CFLAGS*=/s/@GNU_OBJC_CFLAGS@// @@ -99,7 +104,10 @@ /^START_FILES *=/s/@START_FILES@// /^OTHER_FILES *=/s/@OTHER_FILES@// /^XMENU_OBJ *=/s/@XMENU_OBJ@/xmenu.o/ -/^FONT_OBJ *=/s/@FONT_OBJ@/xfont.o ftfont.o xftfont.o ftxfont.o/ +/^FONT_OBJ *=/s/@FONT_OBJ@/xfont.o/ +/^MOUSE_SUPPORT *=/s/@MOUSE_SUPPORT@/$(REAL_MOUSE_SUPPORT)/ +/^TOOLTIP_SUPPORT *=/s/@TOOLTIP_SUPPORT@// +/^WINDOW_SUPPORT *=/s/@WINDOW_SUPPORT@// /^LIBGPM *=/s/@LIBGPM@// /^EXEEXT *=/s/@EXEEXT@/.exe/ /^PRE_ALLOC_OBJ *=/s/@PRE_ALLOC_OBJ@/lastfile.o/ @@ -109,6 +117,7 @@ /^M_FILE *=/s!@[^@\n]*@!m/intel386.h! /^S_FILE *=/s!@[^@\n]*@!s/msdos.h! /^@SET_MAKE@$/s/@SET_MAKE@// +/^@NS_IMPL_GNUSTEP_INC@/s/@NS_IMPL_GNUSTEP_INC@// /^.\${libsrc}make-docfile.*>/s!make-docfile!make-docfile -o ../etc/DOC! /^.\${libsrc}make-doc/s!>.*$!! /^[ ]*$/d
--- a/msdos/sed1x.inp Thu May 13 12:10:13 2010 +0000 +++ b/msdos/sed1x.inp Fri May 14 11:34:53 2010 +0000 @@ -8,6 +8,9 @@ /^LIBXMENU *=/s!@LIBXMENU@!${OLDXMENU}! /^LIBX_OTHER *=/s!@LIBX_OTHER@!${LIBXT} ${LIBX_EXTRA}! /^LIBS_SYSTEM *=/s!= *!= -lxext -lsys! +/^MSDOS_X_OBJ *=/s!= *!= w16select.o termcap.o! +/^TOOLTIP_SUPPORT *=/s!= *!= ${lispsource}tooltip.elc! +/^WINDOW_SUPPORT *=/s!= *!= $(BASE_WINDOW_SUPPORT) $(X_WINDOW_SUPPORT)! /^temacs *:/s!OLDXMENU!LIBXMENU! # arch-tag: 3e8a78f2-3dec-44f3-81f6-3785a562da19
--- a/msdos/sed2x.inp Thu May 13 12:10:13 2010 +0000 +++ b/msdos/sed2x.inp Fri May 14 11:34:53 2010 +0000 @@ -2,8 +2,8 @@ # Extra configuration script for src/config.h for DesqView/X # ---------------------------------------------------------------------- # -# Copyright (C) 1994, 2001, 2002, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# Copyright (C) 1994, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, +# 2009, 2010 Free Software Foundation, Inc. # # This file is part of GNU Emacs. # @@ -17,6 +17,7 @@ # # ---------------------------------------------------------------------- /^#undef HAVE_X_WINDOWS *$/s/undef/define/ +/^#undef HAVE_WINDOW_SYSTEM *$/s/undef/define/ /^#undef HAVE_X11 *$/s/undef/define/ /^#undef HAVE_X_MENU *$/s/undef/define/ /^#undef HAVE_XSCREENNUMBEROFSCREEN *$/s/undef/define/
--- a/src/ChangeLog Thu May 13 12:10:13 2010 +0000 +++ b/src/ChangeLog Fri May 14 11:34:53 2010 +0000 @@ -1,3 +1,52 @@ +2010-05-14 Kenichi Handa <handa@m17n.org> + + * dispextern.h (struct composition_it): New member reversed_p. + + * composite.c (composition_compute_stop_pos): Search backward if + ENDPOS < CHARPOS. + (composition_reseat_it): Handle the case that ENDPOS < CHARPOS. + Set CMP_IT->reversed_p. + (composition_update_it): Pay attention to CMP_IT->reversed_p. + + * xdisp.c (set_iterator_to_next): Call + composition_compute_stop_pos with negative ENDPOS if we are + scanning backward. Call composition_compute_stop_pos if scan + direction is changed. + (next_element_from_buffer): Call composition_compute_stop_pos with + negative ENDPOS if we are scanning backward. + (next_element_from_composition): Pay attention to + IT->cmp_it.reversed_p. + +2010-05-14 Kenichi Handa <handa@m17n.org> + + * font.c (font_range): Return the range for the font found at + first. + +2010-05-14 Glenn Morris <rgm@gnu.org> + + * Makefile.in (ns_appdir, ns_appbindir, ns_appsrc): Always define. + + * Makefile.in (mktime, X11, register): Move undefs to configure. + + * Makefile.in (MSDOS_OBJ): Default to empty, let msdos scripts set it. + (MSDOS_X_OBJ): New variable. + (MSDOS_SUPPORT_REAL): New constant. + (MSDOS_SUPPORT): Set as a variable, not with cpp. + (obj): Use MSDOS_X_OBJ. + (lisp): Use MSDOS_SUPPORT as a variable. + + * Makefile.in (REAL_MOUSE_SUPPORT): New constant. + (GPM_MOUSE_SUPPORT): Now it's a constant. + (MOUSE_SUPPORT, TOOLTIP_SUPPORT, WINDOW_SUPPORT): Set with configure, + not cpp. + + * Makefile.in (@NS_IMPL_GNUSTEP_INC@): Use in place of #ifdef. + (ns_appresdir): Remove, unused. + + * Makefile.in (SHELL): Move outside cpp section. + + * s/netbsd.h (AMPERSAND_FULL_NAME): Remove (defined in AH_BOTTOM). + 2010-05-13 Glenn Morris <rgm@gnu.org> * Makefile.in (FONT_DRIVERS): Place with other HAVE_X_WINDOWS stuff.
--- a/src/Makefile.in Thu May 13 12:10:13 2010 +0000 +++ b/src/Makefile.in Fri May 14 11:34:53 2010 +0000 @@ -30,6 +30,7 @@ # Some of the conditionals might be dead now. Finding them and # deleting them would be fine. +SHELL = /bin/sh # Here are the things that we expect ../configure to edit. # We use $(srcdir) explicitly in dependencies so as not to depend on VPATH. @@ -183,6 +184,19 @@ ## sheap.o if CYGWIN, otherwise empty. CYGWIN_OBJ=@CYGWIN_OBJ@ +## dosfns.o msdos.o if MSDOS. +MSDOS_OBJ = +## w16select.o termcap.o if MSDOS && HAVE_X_WINDOWS. +MSDOS_X_OBJ = +MSDOS_SUPPORT_REAL = ${lispsource}ls-lisp.elc ${lispsource}disp-table.elc \ + ${lispsource}dos-fns.elc ${lispsource}dos-w32.elc ${lispsource}dos-vars.elc \ + ${lispsource}term/internal.elc ${lispsource}term/pc-win.elc +## $MSDOS_SUPPORT_REAL if MSDOS. +MSDOS_SUPPORT = + +ns_appdir=@ns_appdir@/ +ns_appbindir=@ns_appbindir@/ +ns_appsrc=@ns_appsrc@ NS_OBJ=@NS_OBJ@ NS_SUPPORT=@NS_SUPPORT@ ## Next two only set if NS_IMPL_GNUSTEP. @@ -192,10 +206,17 @@ ## Only used if HAVE_X_WINDOWS. FONT_OBJ=@FONT_OBJ@ -## ${lispsource}mouse.elc if HAVE_GPM, otherwise empty. -## Not used if HAVE_MOUSE. -GPM_MOUSE_SUPPORT=@GPM_MOUSE_SUPPORT@ +## Used if HAVE_MOUSE. +REAL_MOUSE_SUPPORT=${lispsource}mouse.elc ${lispsource}select.elc \ + ${lispsource}scroll-bar.elc +## Used if HAVE_GPM && !HAVE_MOUSE +GPM_MOUSE_SUPPORT=${lispsource}mouse.elc LIBGPM = @LIBGPM@ +## Either of the two preceding options, or empty. +MOUSE_SUPPORT=@MOUSE_SUPPORT@ + +## ${lispsource}tooltip.elc if HAVE_WINDOW_SYSTEM, else empty. +TOOLTIP_SUPPORT=@TOOLTIP_SUPPORT@ BASE_WINDOW_SUPPORT=${lispsource}fringe.elc ${lispsource}image.elc \ ${lispsource}international/fontset.elc ${lispsource}dnd.elc \ @@ -204,6 +225,10 @@ X_WINDOW_SUPPORT=${lispsource}x-dnd.elc ${lispsource}term/common-win.elc \ ${lispsource}term/x-win.elc ${lispsource}dynamic-setting.elc +## If HAVE_X_WINDOWS, both the above +## else if HAVE_WINDOW_SYSTEM (ie, HAVE_NS) just the former; else empty. +WINDOW_SUPPORT=@WINDOW_SUPPORT@ + ## -lresolv, or empty. LIBRESOLV = @LIBRESOLV@ @@ -222,9 +247,6 @@ # ========================== start of cpp stuff ======================= /* From here on, comments must be done in C syntax. */ -/* just to be sure the sh is used */ -SHELL=/bin/sh - #define NOT_C_CODE #include "config.h" @@ -232,37 +254,13 @@ DEPFLAGS = -MMD -MF deps/$*.d #endif -/* Do not let the file name mktime.c get messed up. */ -#ifdef mktime -#undef mktime -#endif - -/* Use HAVE_X11 as an alias for X11 in this file - to avoid problems with X11 as a subdirectory name - in -I and other such options which pass through this file. */ - -#ifdef X11 -#define HAVE_X11 -#undef X11 -#endif - -/* On some machines #define register is done in config; - do not let it interfere with this file. */ -#undef register - -#ifdef NS_IMPL_GNUSTEP -/* Pull in stuff from GNUstep-make. */ -FOUNDATION_LIB=gnu -GUI_LIB=gnu -include @GNUSTEP_MAKEFILES@/Additional/base.make -include @GNUSTEP_MAKEFILES@/Additional/gui.make -shared=no -#endif +/* If NS_IMPL_GNUSTEP, some definitions and includes are expanded here. */ +@NS_IMPL_GNUSTEP_INC@ /* DO NOT use -R. There is a special hack described in lastfile.c which is used instead. Some initialized data areas are modified at initial startup, then labeled as part of the text area when - Emacs is dumped for the first time, and never changed again. */ + Emacs is dumped for the first time, and never changed again. */ /* -Demacs is needed to make some files produce the correct version for use in Emacs. @@ -338,24 +336,8 @@ #endif /* not ORDINARY_LINK */ - -#ifdef MSDOS -#ifdef HAVE_X_WINDOWS -MSDOS_OBJ = dosfns.o msdos.o -#else -MSDOS_OBJ = dosfns.o msdos.o w16select.o termcap.o -#endif -#endif - -#ifdef HAVE_NS -ns_appdir=@ns_appdir@/ -ns_appbindir=@ns_appbindir@/ -ns_appresdir=@ns_appresdir@/ -ns_appsrc=@ns_appsrc@ -#endif /* HAVE_NS */ - -/* lastfile must follow all files - whose initialized data areas should be dumped as pure by dump-emacs. */ +/* lastfile must follow all files whose initialized data areas should + be dumped as pure by dump-emacs. */ obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \ charset.o coding.o category.o ccl.o character.o chartab.o bidi.o \ cm.o term.o terminal.o xfaces.o $(XOBJ) $(GTK_OBJ) $(DBUS_OBJ) \ @@ -369,11 +351,10 @@ process.o callproc.o \ region-cache.o sound.o atimer.o \ doprnt.o strftime.o intervals.o textprop.o composite.o md5.o \ - $(MSDOS_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_DRIVERS) + $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_DRIVERS) /* Object files used on some machine or other. - These go in the DOC file on all machines - in case they are needed there. */ + These go in the DOC file on all machines in case they are needed. */ SOME_MACHINE_OBJECTS = dosfns.o msdos.o \ xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \ fontset.o dbusbind.o \ @@ -405,34 +386,6 @@ otherobj= $(TERMCAP_OBJ) $(PRE_ALLOC_OBJ) $(gmallocobj) $(rallocobj) \ $(POST_ALLOC_OBJ) $(WIDGET_OBJ) $(LIBOBJS) -#ifdef HAVE_MOUSE -#define MOUSE_SUPPORT ${lispsource}mouse.elc \ - ${lispsource}select.elc ${lispsource}scroll-bar.elc -#else -#define MOUSE_SUPPORT $(GPM_MOUSE_SUPPORT) -#endif - -#ifdef MSDOS -#define MSDOS_SUPPORT ${lispsource}ls-lisp.elc ${lispsource}disp-table.elc \ - ${lispsource}dos-fns.elc ${lispsource}dos-w32.elc ${lispsource}dos-vars.elc \ - ${lispsource}term/internal.elc ${lispsource}term/pc-win.elc - -#else -#define MSDOS_SUPPORT -#endif - -#ifdef HAVE_WINDOW_SYSTEM -#define TOOLTIP_SUPPORT ${lispsource}tooltip.elc -#ifdef HAVE_X_WINDOWS -#define WINDOW_SUPPORT $(BASE_WINDOW_SUPPORT) $(X_WINDOW_SUPPORT) -#else -#define WINDOW_SUPPORT $(BASE_WINDOW_SUPPORT) -#endif /* HAVE_X_WINDOWS */ -#else -#define TOOLTIP_SUPPORT -#define WINDOW_SUPPORT -#endif /* HAVE_WINDOW_SYSTEM */ - /* This is the platform-specific list of Lisp files loaded into the dumped Emacs. It is arranged like this because it is easier to generate it semi-mechanically from loadup.el this way. @@ -466,7 +419,7 @@ ${lispsource}files.elc \ ${lispsource}format.elc \ ${lispsource}facemenu.elc \ - MOUSE_SUPPORT \ + ${MOUSE_SUPPORT} \ ${lispsource}emacs-lisp/float-sup.elc \ ${lispsource}frame.elc \ ${lispsource}help.elc \ @@ -529,9 +482,9 @@ ${lispsource}vc-hooks.elc \ ${lispsource}ediff-hook.elc \ ${lispsource}epa-hook.elc \ - TOOLTIP_SUPPORT \ - MSDOS_SUPPORT \ - WINDOW_SUPPORT \ + ${TOOLTIP_SUPPORT} \ + ${MSDOS_SUPPORT} \ + ${WINDOW_SUPPORT} \ ${NS_SUPPORT} \ ${lispsource}widget.elc \ ${lispsource}window.elc \ @@ -713,9 +666,8 @@ #if defined (HAVE_X_WINDOWS) && defined (HAVE_X11) && defined (HAVE_MENUS) && ! defined (USE_GTK) -/* We use stamp-xmenu with these two deps - to both ensure that lwlib gets remade based on its dependencies - in its own makefile, +/* We use stamp-xmenu with these two deps to both ensure that lwlib + gets remade based on its dependencies in its own makefile, and remake temacs if lwlib gets changed by this. */ stamp-oldxmenu: ${OLDXMENU} ../src/$(OLDXMENU) touch stamp-oldxmenu @@ -769,6 +721,8 @@ Eg callproc.c only depends on w32.h for WINDOWSNT builds. One way to fix this would be to replace w32.h (etc) by $(W32_H), a variable set by configure. Does not seem worth the trouble. +Since the w32 build does not even use this file, you might ask +why these dependencies are here at all... nsgui.h: In fact, every .o file depends directly or indirectly on dispextern.h and hence nsgui.h under NS. But the ones that actually @@ -978,8 +932,8 @@ xsettings.o: xterm.h xsettings.h lisp.h frame.h termhooks.h $(config_h) \ dispextern.h keyboard.h systime.h coding.h composite.h blockinput.h atimer.h \ termopts.h -/* The files of Lisp proper */ +/* The files of Lisp proper. */ alloc.o: alloc.c process.h frame.h window.h buffer.h puresize.h syssignal.h \ keyboard.h blockinput.h atimer.h systime.h character.h lisp.h $(config_h) \ $(INTERVALS_H) termhooks.h @@ -1001,7 +955,7 @@ charset.h lisp.h $(config_h) $(INTERVALS_H) termhooks.h coding.h msdos.h \ systime.h frame.h blockinput.h atimer.h -/* Text properties support */ +/* Text properties support. */ composite.o: composite.c buffer.h character.h coding.h font.h ccl.h \ frame.h termhooks.h $(INTERVALS_H) window.h lisp.h $(config_h) intervals.o: intervals.c buffer.h $(INTERVALS_H) keyboard.h puresize.h \ @@ -1012,8 +966,7 @@ #endif /* ! AUTO_DEPEND */ /* System-specific programs to be made. - OTHER_FILES - select which of these should be compiled. */ + OTHER_FILES select which of these should be compiled. */ #ifdef HAVE_NS ${ns_appdir}: ${ns_appsrc}
--- a/src/composite.c Thu May 13 12:10:13 2010 +0000 +++ b/src/composite.c Fri May 14 11:34:53 2010 +0000 @@ -1018,12 +1018,29 @@ return unbind_to (count, Qnil); } +static Lisp_Object _work_val; +static int _work_char; + +/* 1 iff the character C is composable. */ +#define CHAR_COMPOSABLE_P(C) \ + ((C) == 0x200C || (C) == 0x200D \ + || (_work_val = CHAR_TABLE_REF (Vunicode_category_table, (C)), \ + (SYMBOLP (_work_val) \ + && (_work_char = SDATA (SYMBOL_NAME (_work_val))[0]) != 'C' \ + && _work_char != 'Z'))) /* Update cmp_it->stop_pos to the next position after CHARPOS (and BYTEPOS) where character composition may happen. If BYTEPOS is - negative, compute it. If it is a static composition, set - cmp_it->ch to -1. Otherwise, set cmp_it->ch to the character that - triggers a automatic composition. */ + negative, compute it. ENDPOS is a limit of searching. If it is + less than CHARPOS, search backward to ENDPOS+1 assuming that + set_iterator_to_next works in reverse order. In this case, if a + composition closest to CHARPOS is found, set cmp_it->stop_pos to + the last character of the composition. + + If no composition is found, set cmp_it->ch to -2. If a static + composition is found, set cmp_it->ch to -1. Otherwise, set + cmp_it->ch to the character that triggers the automatic + composition. */ void composition_compute_stop_pos (cmp_it, charpos, bytepos, endpos, string) @@ -1036,60 +1053,200 @@ /* This is from forward_to_next_line_start in xdisp.c. */ const int MAX_NEWLINE_DISTANCE = 500; - if (endpos > charpos + MAX_NEWLINE_DISTANCE) - endpos = charpos + MAX_NEWLINE_DISTANCE; - cmp_it->stop_pos = endpos; + if (charpos < endpos) + { + if (endpos > charpos + MAX_NEWLINE_DISTANCE) + endpos = charpos + MAX_NEWLINE_DISTANCE; + } + else if (endpos < charpos) + { + /* We search backward for a position to check composition. */ + if (endpos < 0) + { + /* But we don't know where to stop the searching. */ + endpos = NILP (string) ? BEGV - 1 : -1; + /* Usually we don't reach ENDPOS because we stop searching + at an uncomposable character (NL, LRE, etc). */ + } + } cmp_it->id = -1; cmp_it->ch = -2; - if (find_composition (charpos, endpos, &start, &end, &prop, string) + cmp_it->reversed_p = 0; + cmp_it->stop_pos = endpos; + if (charpos == endpos) + return; + /* FIXME: Bidi is not yet handled well in static composition. */ + if (charpos < endpos + && find_composition (charpos, endpos, &start, &end, &prop, string) && COMPOSITION_VALID_P (start, end, prop)) { cmp_it->stop_pos = endpos = start; cmp_it->ch = -1; } - if (NILP (string) && PT > charpos && PT < endpos) - cmp_it->stop_pos = PT; + if (NILP (string)) + { + /* A composition never strides over PT. */ + if (PT > charpos) + { + if (PT < endpos) + cmp_it->stop_pos = endpos = PT; + } + else if (PT < charpos && PT > endpos) + { + cmp_it->stop_pos = endpos = PT - 1; + } + } if (NILP (current_buffer->enable_multibyte_characters) || NILP (Vauto_composition_mode)) return; if (bytepos < 0) { - if (STRINGP (string)) + if (NILP (string)) + bytepos = CHAR_TO_BYTE (charpos); + else bytepos = string_char_to_byte (string, charpos); - else - bytepos = CHAR_TO_BYTE (charpos); } start = charpos; - while (charpos < endpos) + if (charpos < endpos) { - if (STRINGP (string)) - FETCH_STRING_CHAR_ADVANCE (c, string, charpos, bytepos); + /* Forward search. */ + while (charpos < endpos) + { + if (STRINGP (string)) + FETCH_STRING_CHAR_ADVANCE (c, string, charpos, bytepos); + else + FETCH_CHAR_ADVANCE (c, charpos, bytepos); + if (c == '\n') + { + cmp_it->ch = -2; + break; + } + val = CHAR_TABLE_REF (Vcomposition_function_table, c); + if (! NILP (val)) + { + Lisp_Object elt; + + for (; CONSP (val); val = XCDR (val)) + { + elt = XCAR (val); + if (VECTORP (elt) && ASIZE (elt) == 3 + && NATNUMP (AREF (elt, 1)) + && charpos - 1 - XFASTINT (AREF (elt, 1)) >= start) + break; + } + if (CONSP (val)) + { + cmp_it->lookback = XFASTINT (AREF (elt, 1)); + cmp_it->stop_pos = charpos - 1 - cmp_it->lookback; + cmp_it->ch = c; + return; + } + } + } + } + else + { + /* Search backward for a pattern that may be composed and the + position of (possibly) the last character of the match is + closest to (but not after) START. The reason for the last + character is that set_iterator_to_next works in reverse order + and, thus we must stop at the last character for composition + check. */ + unsigned char *p; + int len; + /* limit byte position used in fast_looking_at. This is the + byte position of the next character of START. */ + EMACS_INT limit; + + if (NILP (string)) + p = BYTE_POS_ADDR (bytepos); else - FETCH_CHAR_ADVANCE (c, charpos, bytepos); - if (c == '\n') - { - cmp_it->ch = -2; - break; - } - val = CHAR_TABLE_REF (Vcomposition_function_table, c); - if (! NILP (val)) + p = SDATA (string) + bytepos; + c = STRING_CHAR_AND_LENGTH (p, len); + limit = bytepos + len; + while (CHAR_COMPOSABLE_P (c)) { - Lisp_Object elt; - - for (; CONSP (val); val = XCDR (val)) + for (val = CHAR_TABLE_REF (Vcomposition_function_table, c); + CONSP (val); val = XCDR (val)) { - elt = XCAR (val); - if (VECTORP (elt) && ASIZE (elt) == 3 && NATNUMP (AREF (elt, 1)) - && charpos - 1 - XFASTINT (AREF (elt, 1)) >= start) - break; + Lisp_Object elt = XCAR (val); + int back, len; + + if (VECTORP (elt) && ASIZE (elt) == 3 + && NATNUMP (AREF (elt, 1)) + && charpos - (back = XFASTINT (AREF (elt, 1))) > endpos) + { + EMACS_INT cpos = charpos - back, bpos; + + if (back == 0) + bpos = bytepos; + else + bpos = (NILP (string) ? CHAR_TO_BYTE (cpos) + : string_char_to_byte (string, cpos)); + if (STRINGP (AREF (elt, 0))) + len = fast_looking_at (AREF (elt, 0), cpos, bpos, + start + 1, limit, string); + else + len = 1; + if (len > 0) + { + /* Make CPOS points the last character of match. + Note that LEN is byte-length. */ + bpos += len; + if (NILP (string)) + cpos = BYTE_TO_CHAR (bpos) - 1; + else + cpos = string_byte_to_char (string, bpos) - 1; + back = cpos - (charpos - back); + if (cmp_it->stop_pos < cpos + || (cmp_it->stop_pos == cpos + && cmp_it->lookback < back)) + { + cmp_it->stop_pos = cpos; + cmp_it->ch = c; + cmp_it->lookback = back; + } + } + } } - if (CONSP (val)) + if (charpos - 1 == endpos) + break; + if (STRINGP (string)) + { + p--, bytepos--; + while (! CHAR_HEAD_P (*p)) + p--, bytepos--; + charpos--; + } + else { - cmp_it->lookback = XFASTINT (AREF (elt, 1)); - cmp_it->stop_pos = charpos - 1 - cmp_it->lookback; - cmp_it->ch = c; - return; + DEC_BOTH (charpos, bytepos); + p = BYTE_POS_ADDR (bytepos); + } + c = STRING_CHAR (p); + } + if (cmp_it->ch >= 0) + /* We found a position to check. */ + return; + /* Skip all uncomposable characters. */ + if (NILP (string)) + { + while (charpos - 1 > endpos && ! CHAR_COMPOSABLE_P (c)) + { + DEC_BOTH (charpos, bytepos); + c = FETCH_MULTIBYTE_CHAR (bytepos); + } + } + else + { + while (charpos - 1 > endpos && ! CHAR_COMPOSABLE_P (c)) + { + p--; + while (! CHAR_HEAD_P (*p)) + p--; + charpos--; + c = STRING_CHAR (p); } } } @@ -1104,8 +1261,8 @@ string. In that case, FACE must not be NULL. If the character is composed, setup members of CMP_IT (id, nglyphs, - and from), and return 1. Otherwise, update CMP_IT->stop_pos, and - return 0. */ + from, to, reversed_p), and return 1. Otherwise, update + CMP_IT->stop_pos, and return 0. */ int composition_reseat_it (cmp_it, charpos, bytepos, endpos, w, face, string) @@ -1115,13 +1272,29 @@ struct face *face; Lisp_Object string; { - if (NILP (string) && charpos < PT && PT < endpos) - endpos = PT; + if (endpos <= charpos) + { + if (NILP (string)) + { + if (endpos < 0) + endpos = BEGV; + if (endpos < PT && PT < charpos) + endpos = PT; + } + else if (endpos < 0) + endpos = 0; + } + else + { + if (NILP (string) && charpos < PT && PT < endpos) + endpos = PT; + } if (cmp_it->ch == -2) { composition_compute_stop_pos (cmp_it, charpos, bytepos, endpos, string); - if (cmp_it->ch == -2) + if (cmp_it->stop_pos != charpos) + /* The current position is not composed. */ return 0; } @@ -1145,18 +1318,46 @@ int i; val = CHAR_TABLE_REF (Vcomposition_function_table, cmp_it->ch); - for (; CONSP (val); val = XCDR (val)) + if (charpos < endpos) { - elt = XCAR (val); - if (cmp_it->lookback == XFASTINT (AREF (elt, 1))) - break; + for (; CONSP (val); val = XCDR (val)) + { + elt = XCAR (val); + if (cmp_it->lookback == XFASTINT (AREF (elt, 1))) + break; + } + if (NILP (val)) + goto no_composition; + + val = autocmp_chars (val, charpos, bytepos, endpos, w, face, string); + if (! composition_gstring_p (val)) + goto no_composition; + cmp_it->reversed_p = 0; } - if (NILP (val)) - goto no_composition; + else + { + EMACS_INT saved_charpos = charpos, saved_bytepos = bytepos; - val = autocmp_chars (val, charpos, bytepos, endpos, w, face, string); - if (! composition_gstring_p (val)) - goto no_composition; + if (cmp_it->lookback > 0) + { + charpos -= cmp_it->lookback; + if (charpos < endpos) + goto no_composition; + if (STRINGP (string)) + bytepos = string_char_to_byte (string, charpos); + else + bytepos = CHAR_TO_BYTE (charpos); + } + val = autocmp_chars (val, charpos, bytepos, saved_charpos + 1, + w, face, string); + if (! composition_gstring_p (val) + || charpos + LGSTRING_CHAR_LEN (val) <= saved_charpos) + { + charpos = saved_charpos, bytepos = saved_bytepos; + goto no_composition; + } + cmp_it->reversed_p = 1; + } if (NILP (LGSTRING_ID (val))) val = composition_gstring_put_cache (val, -1); cmp_it->id = XINT (LGSTRING_ID (val)); @@ -1164,22 +1365,40 @@ if (NILP (LGSTRING_GLYPH (val, i))) break; cmp_it->nglyphs = i; + cmp_it->from = 0; + cmp_it->to = i; } else goto no_composition; - cmp_it->from = 0; return 1; no_composition: - charpos++; - if (STRINGP (string)) - bytepos += MULTIBYTE_LENGTH_NO_CHECK (SDATA (string) + bytepos); + if (charpos == endpos) + return 0; + if (charpos < endpos) + { + charpos++; + if (STRINGP (string)) + bytepos += MULTIBYTE_LENGTH_NO_CHECK (SDATA (string) + bytepos); + else + INC_POS (bytepos); + } else - INC_POS (bytepos); + { + charpos--; + /* BYTEPOS is calculated in composition_compute_stop_pos */ + bytepos = -1; + } composition_compute_stop_pos (cmp_it, charpos, bytepos, endpos, string); return 0; } +/* Update nchars, nbytes, and width of the current grapheme cluster + which is identified by CMP_IT->from (if the composition is static + or automatic in l2r context) or CMPT_IT->to (if the composition is + automatic in r2l context). In addition, in the former case, update + CMP_IT->to, and in the latter case, update CMP_IT->from. */ + int composition_update_it (cmp_it, charpos, bytepos, string) struct composition_it *cmp_it; @@ -1215,7 +1434,7 @@ cmp_it->nchars = LGSTRING_CHAR_LEN (gstring); cmp_it->width = 0; } - else + else if (! cmp_it->reversed_p) { Lisp_Object glyph = LGSTRING_GLYPH (gstring, cmp_it->from); int from = LGLYPH_FROM (glyph); @@ -1234,6 +1453,33 @@ cmp_it->width += CHAR_WIDTH (LGLYPH_CHAR (glyph)); } } + else + { + int from_idx = cmp_it->to - 1; + Lisp_Object glyph = LGSTRING_GLYPH (gstring, from_idx); + int from = LGLYPH_FROM (glyph); + + c = XINT (LGSTRING_CHAR (gstring, from)); + cmp_it->nchars = LGLYPH_TO (glyph) - from + 1; + cmp_it->width = (LGLYPH_WIDTH (glyph) > 0 + ? CHAR_WIDTH (LGLYPH_CHAR (glyph)) : 0); + for (from_idx--; from_idx >= 0; from_idx--) + { + glyph = LGSTRING_GLYPH (gstring, from_idx); + if (LGLYPH_FROM (glyph) != from) + break; + if (LGLYPH_WIDTH (glyph) > 0) + cmp_it->width += CHAR_WIDTH (LGLYPH_CHAR (glyph)); + } + cmp_it->from = from_idx + 1; + charpos -= cmp_it->nchars - 1; + bytepos += CHAR_BYTES (c); + if (STRINGP (string)) + cmp_it->nbytes = bytepos - string_char_to_byte (string, charpos); + else + cmp_it->nbytes = bytepos - CHAR_TO_BYTE (charpos); + return c; + } } charpos += cmp_it->nchars; @@ -1279,17 +1525,6 @@ (POSITION).pos--; \ } while (0) -static Lisp_Object _work_val; -static int _work_char; - -/* 1 iff the character C is composable. */ -#define CHAR_COMPOSABLE_P(C) \ - ((C) == 0x200C || (C) == 0x200D \ - || (_work_val = CHAR_TABLE_REF (Vunicode_category_table, (C)), \ - (SYMBOLP (_work_val) \ - && (_work_char = SDATA (SYMBOL_NAME (_work_val))[0]) != 'C' \ - && _work_char != 'Z'))) - /* This is like find_composition, but find an automatic composition instead. If found, set *GSTRING to the glyph-string representing the composition, and return 1. Otherwise, return 0. */
--- a/src/config.in Thu May 13 12:10:13 2010 +0000 +++ b/src/config.in Fri May 14 11:34:53 2010 +0000 @@ -482,6 +482,9 @@ /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP +/* Define if you have mouse support. */ +#undef HAVE_MOUSE + /* Define to 1 if you have the `mremap' function. */ #undef HAVE_MREMAP @@ -737,6 +740,9 @@ /* Define to 1 if you have the <vfork.h> header file. */ #undef HAVE_VFORK_H +/* Define if you have a window system. */ +#undef HAVE_WINDOW_SYSTEM + /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK @@ -1004,12 +1010,6 @@ #undef volatile -/* If we're using X11/Carbon/GNUstep, define some consequences. */ -#if defined(HAVE_X_WINDOWS) || defined(HAVE_NS) -#define HAVE_WINDOW_SYSTEM -#define HAVE_MOUSE -#endif - /* Define AMPERSAND_FULL_NAME if you use the convention that & in the full name stands for the login id. */ /* Turned on June 1996 supposing nobody will mind it. */ @@ -1034,7 +1034,7 @@ #endif #endif /* __FreeBSD__ || __NetBSD__ || __linux__ */ -/* If using GNU, then support inline function declarations. */ +/* If using GNU, then support inline function declarations. */ /* Don't try to switch on inline handling as detected by AC_C_INLINE generally, because even if non-gcc compilers accept `inline', they may reject `extern inline'. */ @@ -1059,7 +1059,7 @@ /* Set up some defines, C and LD flags for NeXTstep interface on GNUstep. (There is probably a better place to do this, but right now the Cocoa side does this in s/darwin.h and we cannot - parallel this exactly since GNUstep is multi-OS. */ + parallel this exactly since GNUstep is multi-OS. */ #ifdef HAVE_NS # ifdef NS_IMPL_GNUSTEP /* GNUstep needs a bit more pure memory. Of the existing knobs, @@ -1156,7 +1156,7 @@ #include "string.h" #endif #ifdef HAVE_STRINGS_H -#include "strings.h" /* May be needed for bcopy & al. */ +#include "strings.h" /* May be needed for bcopy & al. */ #endif #ifdef HAVE_STDLIB_H #include <stdlib.h>
--- a/src/dispextern.h Thu May 13 12:10:13 2010 +0000 +++ b/src/dispextern.h Fri May 14 11:34:53 2010 +0000 @@ -1987,6 +1987,10 @@ graphic display and in units of canonical characters on a terminal display. */ int width; + /* Nonzero iff the composition is created while buffer is scanned in + reverse order, and thus the grapheme clusters must be rendered + from the last to the first. */ + int reversed_p; }; struct it
--- a/src/font.c Thu May 13 12:10:13 2010 +0000 +++ b/src/font.c Fri May 14 11:34:53 2010 +0000 @@ -3961,7 +3961,7 @@ struct face *face; Lisp_Object string; { - EMACS_INT pos_byte, ignore, start, start_byte; + EMACS_INT pos_byte, ignore; int c; Lisp_Object font_object = Qnil; @@ -3983,7 +3983,6 @@ pos_byte = string_char_to_byte (string, pos); } - start = pos, start_byte = pos_byte; while (pos < *limit) { Lisp_Object category; @@ -3992,6 +3991,10 @@ FETCH_CHAR_ADVANCE_NO_CHECK (c, pos, pos_byte); else FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, pos, pos_byte); + category = CHAR_TABLE_REF (Vunicode_category_table, c); + if (EQ (category, QCf) + || CHAR_VARIATION_SELECTOR_P (c)) + continue; if (NILP (font_object)) { font_object = font_for_char (face, c, pos - 1, string); @@ -3999,40 +4002,8 @@ return Qnil; continue; } - - category = CHAR_TABLE_REF (Vunicode_category_table, c); - if (! EQ (category, QCf) - && ! CHAR_VARIATION_SELECTOR_P (c) - && font_encode_char (font_object, c) == FONT_INVALID_CODE) - { - Lisp_Object f = font_for_char (face, c, pos - 1, string); - EMACS_INT i, i_byte; - - - if (NILP (f)) - { - *limit = pos - 1; - return font_object; - } - i = start, i_byte = start_byte; - while (i < pos - 1) - { - - if (NILP (string)) - FETCH_CHAR_ADVANCE_NO_CHECK (c, i, i_byte); - else - FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, i, i_byte); - category = CHAR_TABLE_REF (Vunicode_category_table, c); - if (! EQ (category, QCf) - && ! CHAR_VARIATION_SELECTOR_P (c) - && font_encode_char (f, c) == FONT_INVALID_CODE) - { - *limit = pos - 1; - return font_object; - } - } - font_object = f; - } + if (font_encode_char (font_object, c) == FONT_INVALID_CODE) + *limit = pos - 1; } return font_object; }
--- a/src/s/netbsd.h Thu May 13 12:10:13 2010 +0000 +++ b/src/s/netbsd.h Fri May 14 11:34:53 2010 +0000 @@ -26,8 +26,6 @@ #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) -#define AMPERSAND_FULL_NAME - /* On post 1.3 releases of NetBSD, gcc -nostdlib also clears the library search parth, i.e. it won't search /usr/lib for libc and friends. Using -nostartfiles instead avoids
--- a/src/xdisp.c Thu May 13 12:10:13 2010 +0000 +++ b/src/xdisp.c Fri May 14 11:34:53 2010 +0000 @@ -6285,25 +6285,96 @@ reseat_at_next_visible_line_start (it, 0); else if (it->cmp_it.id >= 0) { - IT_CHARPOS (*it) += it->cmp_it.nchars; - IT_BYTEPOS (*it) += it->cmp_it.nbytes; - if (it->bidi_p) - { - if (it->bidi_it.new_paragraph) - bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it); - /* Resync the bidi iterator with IT's new position. - FIXME: this doesn't support bidirectional text. */ - while (it->bidi_it.charpos < IT_CHARPOS (*it)) + /* We are currently getting glyphs from a composition. */ + int i; + + if (! it->bidi_p) + { + IT_CHARPOS (*it) += it->cmp_it.nchars; + IT_BYTEPOS (*it) += it->cmp_it.nbytes; + if (it->cmp_it.to < it->cmp_it.nglyphs) + { + it->cmp_it.from = it->cmp_it.to; + } + else + { + it->cmp_it.id = -1; + composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it), + IT_BYTEPOS (*it), + it->stop_charpos, Qnil); + } + } + else if (! it->cmp_it.reversed_p) + { + /* Composition created while scanning forward. */ + /* Update IT's char/byte positions to point the first + character of the next grapheme cluster, or to the + character visually after the current composition. */ +#if 0 + /* Is it ok to do this directly? */ + IT_CHARPOS (*it) += it->cmp_it.nchars; + IT_BYTEPOS (*it) += it->cmp_it.nbytes; +#else + /* Or do we have to call bidi_get_next_char_visually + repeatedly (perhaps not to confuse some internal + state of bidi_it)? At least we must do this if we + have consumed all grapheme clusters in the current + composition because the next character will be in the + different bidi level. */ + for (i = 0; i < it->cmp_it.nchars; i++) bidi_get_next_char_visually (&it->bidi_it); - } - if (it->cmp_it.to < it->cmp_it.nglyphs) - it->cmp_it.from = it->cmp_it.to; - else - { - it->cmp_it.id = -1; - composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it), - IT_BYTEPOS (*it), it->stop_charpos, - Qnil); + /* BTW, it seems that the name + bidi_get_next_char_visually is confusing because + it sounds like not advancing character position. + How about bidi_set_iterator_to_next? */ + IT_BYTEPOS (*it) = it->bidi_it.bytepos; + IT_CHARPOS (*it) = it->bidi_it.charpos; +#endif + if (it->cmp_it.to < it->cmp_it.nglyphs) + { + /* Proceed to the next grapheme cluster. */ + it->cmp_it.from = it->cmp_it.to; + } + else + { + /* No more grapheme cluster in this composition. + Find the next stop position. */ + EMACS_INT stop = it->stop_charpos; + if (it->bidi_it.scan_dir < 0) + /* Now we are scanning backward and don't know + where to stop. */ + stop = -1; + composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it), + IT_BYTEPOS (*it), stop, Qnil); + } + } + else + { + /* Composition created while scanning backward. */ + /* Update IT's char/byte positions to point the last + character of the previous grapheme cluster, or the + character visually after the current composition. */ + bidi_get_next_char_visually (&it->bidi_it); + IT_BYTEPOS (*it) = it->bidi_it.bytepos; + IT_CHARPOS (*it) = it->bidi_it.charpos; + + if (it->cmp_it.from > 0) + { + /* Proceed to the previous grapheme cluster. */ + it->cmp_it.to = it->cmp_it.from; + } + else + { + /* No more grapheme cluster in this composition. + Find the next stop position. */ + EMACS_INT stop = it->stop_charpos; + if (it->bidi_it.scan_dir < 0) + /* Now we are scanning backward and don't know + where to stop. */ + stop = -1; + composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it), + IT_BYTEPOS (*it), stop, Qnil); + } } } else @@ -6317,6 +6388,7 @@ } else { + int prev_scan_dir = it->bidi_it.scan_dir; /* If this is a new paragraph, determine its base direction (a.k.a. its base embedding level). */ if (it->bidi_it.new_paragraph) @@ -6324,6 +6396,16 @@ bidi_get_next_char_visually (&it->bidi_it); IT_BYTEPOS (*it) = it->bidi_it.bytepos; IT_CHARPOS (*it) = it->bidi_it.charpos; + if (prev_scan_dir != it->bidi_it.scan_dir) + { + /* As scan direction was changed, we must re-compute + the stop position for composition. */ + EMACS_INT stop = it->stop_charpos; + if (it->bidi_it.scan_dir < 0) + stop = -1; + composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it), + IT_BYTEPOS (*it), stop, Qnil); + } } xassert (IT_BYTEPOS (*it) == CHAR_TO_BYTE (IT_CHARPOS (*it))); } @@ -6820,6 +6902,13 @@ IT_CHARPOS (*it) = it->bidi_it.charpos; IT_BYTEPOS (*it) = it->bidi_it.bytepos; SET_TEXT_POS (it->position, IT_CHARPOS (*it), IT_BYTEPOS (*it)); + { + EMACS_INT stop = it->stop_charpos; + if (it->bidi_it.scan_dir < 0) + stop = -1; + composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it), + IT_BYTEPOS (*it), stop, Qnil); + } } if (IT_CHARPOS (*it) >= it->stop_charpos) @@ -6897,6 +6986,7 @@ /* No face changes, overlays etc. in sight, so just return a character from current_buffer. */ unsigned char *p; + EMACS_INT stop; /* Maybe run the redisplay end trigger hook. Performance note: This doesn't seem to cost measurable time. */ @@ -6905,8 +6995,9 @@ && IT_CHARPOS (*it) >= it->redisplay_end_trigger_charpos) run_redisplay_end_trigger_hook (it); + stop = it->bidi_it.scan_dir < 0 ? -1 : it->end_charpos; if (CHAR_COMPOSED_P (it, IT_CHARPOS (*it), IT_BYTEPOS (*it), - it->end_charpos) + stop) && next_element_from_composition (it)) { return 1; @@ -7032,6 +7123,19 @@ it->object = it->w->buffer; it->c = composition_update_it (&it->cmp_it, IT_CHARPOS (*it), IT_BYTEPOS (*it), Qnil); + if (it->cmp_it.reversed_p) + { + /* Now it->position points the last character of the current + grapheme cluster. Adjust it to point the first one. We + have to do it here so that append_composite_glyph sets + correct (struct glyph)->charpos. */ + int i; + for (i = 0; i < it->cmp_it.nchars - 1; i++) + bidi_get_next_char_visually (&it->bidi_it); + IT_CHARPOS (*it) = it->bidi_it.charpos; + IT_BYTEPOS (*it) = it->bidi_it.bytepos; + it->position = it->current.pos; + } } return 1; }