------------------------------------------------------------ revno: 115169 committer: Paul Eggert branch nick: trunk timestamp: Wed 2013-11-20 23:50:57 -0800 message: Fix some dependency problems that cause unnecessary recompiles. Problem reported by RMS in . * configure.ac (OLDXMENU_TARGET, OLDXMENU, LIBXMENU, OLDXMENU_DEPS): Remove. (LIBXMENU_DIR, LIBXMENU_BASE): New vars. * src/Makefile.in (OLDXMENU_TARGET, OLDXMENU, OLDXMENU_DEPS) (really-lwlib, really-oldXMenu, stamp-oldxmenu) (../src/$(OLDXMENU), $(OLDXMENU)): Remove. (LIBXMENU_DIR, LIBXMENU_BASE): New macros. (LIBXMENU): Use them. (temacs$(EXEEXT)): Depend on $(LIBXMENU), not stamp-oldxmenu. ($(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a, FORCE): New targets. (boostrap-clean): No need to remove stamp-oldxmenu. diff: === modified file 'ChangeLog' --- ChangeLog 2013-11-20 01:50:37 +0000 +++ ChangeLog 2013-11-21 07:50:57 +0000 @@ -1,3 +1,10 @@ +2013-11-21 Paul Eggert + + Fix some dependency problems that cause unnecessary recompiles. + * configure.ac (OLDXMENU_TARGET, OLDXMENU, LIBXMENU, OLDXMENU_DEPS): + Remove. + (LIBXMENU_DIR, LIBXMENU_BASE): New vars. + 2013-11-20 Glenn Morris * make-dist: Distribute build-aux/msys-to-w32. === modified file 'configure.ac' --- configure.ac 2013-11-17 03:58:30 +0000 +++ configure.ac 2013-11-21 07:50:57 +0000 @@ -4598,56 +4598,34 @@ if test "${opsys}" != "mingw32"; then if test "$USE_X_TOOLKIT" = "none"; then LIBXT_OTHER="\$(LIBXSM)" - OLDXMENU_TARGET="really-oldXMenu" else LIBXT_OTHER="\$(LIBXMU) -lXt \$(LIBXTR6) -lXext" - OLDXMENU_TARGET="really-lwlib" fi fi AC_SUBST(LIBXT_OTHER) -## The X Menu stuff is present in the X10 distribution, but missing -## from X11. If we have X10, just use the installed library; -## otherwise, use our own copy. if test "${HAVE_X11}" = "yes" ; then AC_DEFINE(HAVE_X11, 1, - [Define to 1 if you want to use version 11 of X windows. - Otherwise, Emacs expects to use version 10.]) - - if test "$USE_X_TOOLKIT" = "none"; then - OLDXMENU="\${oldXMenudir}/libXMenu11.a" - else - OLDXMENU="\${lwlibdir}/liblw.a" - fi - LIBXMENU="\$(OLDXMENU)" + [Define to 1 if you want to use version 11 of X windows.]) LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)" - OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}" else - ## For a syntactically valid Makefile; not actually used for anything. - ## See comments in src/Makefile.in. - OLDXMENU=nothing - ## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?). - if test "${HAVE_X_WINDOWS}" = "yes"; then - LIBXMENU="-lXMenu" - else - LIBXMENU= - fi LIBX_OTHER= - OLDXMENU_DEPS= -fi - -if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then - OLDXMENU_TARGET= - OLDXMENU=nothing - LIBXMENU= - OLDXMENU_DEPS= -fi - -AC_SUBST(OLDXMENU_TARGET) -AC_SUBST(OLDXMENU) -AC_SUBST(LIBXMENU) +fi AC_SUBST(LIBX_OTHER) -AC_SUBST(OLDXMENU_DEPS) + +if test "$HAVE_GTK" = yes || + test "$HAVE_MENUS" != yes || test "$HAVE_X11" != yes; then + LIBXMENU_DIR= + LIBXMENU_BASE= +elif test "$USE_X_TOOLKIT" = none; then + LIBXMENU_DIR='$(oldXMenudir)/' + LIBXMENU_BASE='libXMenu11.a' +else + LIBXMENU_DIR='$(lwlibdir)/' + LIBXMENU_BASE='liblw.a' +fi +AC_SUBST(LIBXMENU_DIR) +AC_SUBST(LIBXMENU_BASE) if test "${HAVE_MENUS}" = "yes" ; then AC_DEFINE(HAVE_MENUS, 1, === modified file 'src/ChangeLog' --- src/ChangeLog 2013-11-21 06:46:59 +0000 +++ src/ChangeLog 2013-11-21 07:50:57 +0000 @@ -1,5 +1,17 @@ 2013-11-21 Paul Eggert + Fix some dependency problems that cause unnecessary recompiles. + Problem reported by RMS in + . + * Makefile.in (OLDXMENU_TARGET, OLDXMENU, OLDXMENU_DEPS) + (really-lwlib, really-oldXMenu, stamp-oldxmenu) + (../src/$(OLDXMENU), $(OLDXMENU)): Remove. + (LIBXMENU_DIR, LIBXMENU_BASE): New macros. + (LIBXMENU): Use them. + (temacs$(EXEEXT)): Depend on $(LIBXMENU), not stamp-oldxmenu. + ($(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a, FORCE): New targets. + (boostrap-clean): No need to remove stamp-oldxmenu. + Fix recently introduced bool vector overrun. This was due to an optimization that went awry. Reported by Glenn Morris in === modified file 'src/Makefile.in' --- src/Makefile.in 2013-11-02 23:49:54 +0000 +++ src/Makefile.in 2013-11-21 07:50:57 +0000 @@ -179,31 +179,13 @@ LIBXT_OTHER=@LIBXT_OTHER@ ## If !HAVE_X11 || USE_GTK, empty. -## Else if USE_X_TOOLKIT really-lwlib, else really-oldxmenu. -OLDXMENU_TARGET=@OLDXMENU_TARGET@ - -## If !HAVE_X11 || USE_GTK, empty. ## Else if USE_X_TOOLKIT, $(lwlibdir)/liblw.a. ## Else $(oldXMenudir)/libXMenu11.a. -## (Actually, rather than being empty, it is set to "nothing". -## It is never actually used for anything in this case. -## This is done because there is a rule with target $(OLDXMENU) below, -## and I think it might be a syntax error with some makes to have -## an empty target, even if the associated rule is never run. -## http://lists.gnu.org/archive/html/help-make/2010-05/msg00058.html -## The alternative would be to put that rule in a makefile fragment.) -OLDXMENU=@OLDXMENU@ - -## If HAVE_X11 && !USE_GTK, $(OLDXMENU) ../src/$(OLDXMENU); else empty. -## 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. -OLDXMENU_DEPS=@OLDXMENU_DEPS@ - -## If !HAVE_X11 && HAVE_X_WINDOWS, -lXMenu (this case no longer possible). -## Else if !HAVE_X11 || USE_GTK, empty. -## Else $(OLDXMENU). -LIBXMENU=@LIBXMENU@ +## LIBXMENU_DIR is the directory part, including any slash; +## LIBXMENU_BASE is the rest. +LIBXMENU_DIR=@LIBXMENU_DIR@ +LIBXMENU_BASE=@LIBXMENU_BASE@ +LIBXMENU=$(LIBXMENU_DIR)$(LIBXMENU_BASE) ## xmenu.o if HAVE_X_WINDOWS, else empty. XMENU_OBJ=@XMENU_OBJ@ @@ -504,7 +486,7 @@ ## existence when setting Vinstallation_directory (FIXME?). ## This goes on to affect various things, and the emacs binary fails ## to start if Vinstallation_directory has the wrong value. -temacs$(EXEEXT): stamp-oldxmenu $(ALLOBJS) \ +temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) \ $(lib)/libgnu.a $(EMACSRES) $(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \ -o temacs $(ALLOBJS) $(lib)/libgnu.a $(W32_RES_LINK) $(LIBES) @@ -514,29 +496,17 @@ test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT) ## The following oldxmenu-related rules are only (possibly) used if -## HAVE_X11 && !USE_GTK, but there is no harm in always defining them -## (provided we take a little care that OLDXMENU is never empty). -really-lwlib: globals.h - cd $(lwlibdir); $(MAKE) $(MFLAGS) \ - CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)' - @true # make -t should not create really-lwlib. -.PHONY: really-lwlib - -really-oldXMenu: - cd $(oldXMenudir); $(MAKE) $(MFLAGS) \ - CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)' - @true # make -t should not create really-oldXMenu. -.PHONY: really-oldXMenu - -## We do not really need this when OLDXMENU_DEPS is empty, but as -## things stand we need something to satisfy the temacs dependency. -stamp-oldxmenu: $(OLDXMENU_DEPS) - touch stamp-oldxmenu - -## Supply an ordering for parallel make. -../src/$(OLDXMENU): $(OLDXMENU) - -$(OLDXMENU): $(OLDXMENU_TARGET) +## HAVE_X11 && !USE_GTK, but there is no harm in always defining them. +$(lwlibdir)/liblw.a: $(config_h) globals.h lisp.h FORCE + cd $(lwlibdir) && \ + $(MAKE) $(MFLAGS) CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)' \ + liblw.a +$(oldXMenudir)/libXMenu11.a: FORCE + cd $(oldXMenudir) && \ + $(MAKE) $(MFLAGS) CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)' \ + libXMenu11.a +FORCE: +.PHONY: FORCE ../config.status: config.in epaths.in @echo "The file ${?:.in=.h} needs to be set up from $?." @@ -572,7 +542,7 @@ ## It should remove all files generated during a compilation/bootstrap, ## but not things like config.status or TAGS. bootstrap-clean: clean - rm -f epaths.h config.h config.stamp stamp-h1 stamp-oldxmenu + rm -f epaths.h config.h config.stamp stamp-h1 if test -f ./.gdbinit; then \ mv ./.gdbinit ./.gdbinit.save; \ if test -f "$(srcdir)/.gdbinit"; then rm -f ./.gdbinit.save; \ ------------------------------------------------------------ revno: 115168 committer: Paul Eggert branch nick: trunk timestamp: Wed 2013-11-20 22:46:59 -0800 message: Fix recently introduced bool vector overrun. This was due to an optimization that went awry. Reported by Glenn Morris in . * alloc.c (make_uninit_bool_vector): Don't allocate a dummy word for empty vectors, undoing the 2013-11-18 change. * data.c (bool_vector_binop_driver): Rely on this. Fix bug that occasionally overran the destination. * lisp.h (struct Lisp_Bool_vector): Document this. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-11-20 18:33:12 +0000 +++ src/ChangeLog 2013-11-21 06:46:59 +0000 @@ -1,3 +1,15 @@ +2013-11-21 Paul Eggert + + Fix recently introduced bool vector overrun. + This was due to an optimization that went awry. + Reported by Glenn Morris in + . + * alloc.c (make_uninit_bool_vector): Don't allocate a dummy word + for empty vectors, undoing the 2013-11-18 change. + * data.c (bool_vector_binop_driver): Rely on this. + Fix bug that occasionally overran the destination. + * lisp.h (struct Lisp_Bool_vector): Document this. + 2013-11-20 Jan Djärv * nsterm.m (init, run, stop:): Enable again. stop calls super stop === modified file 'src/alloc.c' --- src/alloc.c 2013-11-18 18:37:25 +0000 +++ src/alloc.c 2013-11-21 06:46:59 +0000 @@ -2066,8 +2066,7 @@ make_uninit_bool_vector (EMACS_INT nbits) { Lisp_Object val; - EMACS_INT words0 = bool_vector_words (nbits); - EMACS_INT words = words0 + !words0; /* Allocate at least one word. */ + EMACS_INT words = bool_vector_words (nbits); EMACS_INT word_bytes = words * sizeof (bits_word); EMACS_INT needed_elements = ((bool_header_size - header_size + word_bytes + word_size - 1) @@ -2078,9 +2077,9 @@ XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0); p->size = nbits; - /* Clear padding at the end. If NBITS != 0 this initializes more - than it needs to, but that's OK. */ - p->data[words - 1] = 0; + /* Clear padding at the end. */ + if (words) + p->data[words - 1] = 0; return val; } === modified file 'src/data.c' --- src/data.c 2013-11-18 19:31:05 +0000 +++ src/data.c 2013-11-21 06:46:59 +0000 @@ -3054,60 +3054,64 @@ switch (op) { case bool_vector_exclusive_or: - while (destdata[i] == (adata[i] ^ bdata[i])) - if (! (++i < nr_words)) - return Qnil; + for (; i < nr_words; i++) + if (destdata[i] != (adata[i] ^ bdata[i])) + goto set_dest; break; case bool_vector_subsetp: + for (; i < nr_words; i++) + if (adata[i] &~ bdata[i]) + return Qnil; + return Qt; + case bool_vector_union: - while (destdata[i] == (adata[i] | bdata[i])) - if (! (++i < nr_words)) - return Qnil; + for (; i < nr_words; i++) + if (destdata[i] != (adata[i] | bdata[i])) + goto set_dest; break; case bool_vector_intersection: - while (destdata[i] == (adata[i] & bdata[i])) - if (! (++i < nr_words)) - return Qnil; + for (; i < nr_words; i++) + if (destdata[i] != (adata[i] & bdata[i])) + goto set_dest; break; case bool_vector_set_difference: - while (destdata[i] == (adata[i] &~ bdata[i])) - if (! (++i < nr_words)) - return Qnil; + for (; i < nr_words; i++) + if (destdata[i] != (adata[i] &~ bdata[i])) + goto set_dest; break; } + + return Qnil; } + set_dest: switch (op) { case bool_vector_exclusive_or: - do + for (; i < nr_words; i++) destdata[i] = adata[i] ^ bdata[i]; - while (++i < nr_words); - break; - - case bool_vector_subsetp: break; case bool_vector_union: - do + for (; i < nr_words; i++) destdata[i] = adata[i] | bdata[i]; - while (++i < nr_words); break; case bool_vector_intersection: - do + for (; i < nr_words; i++) destdata[i] = adata[i] & bdata[i]; - while (++i < nr_words); break; case bool_vector_set_difference: - do + for (; i < nr_words; i++) destdata[i] = adata[i] &~ bdata[i]; - while (++i < nr_words); break; + + default: + eassume (0); } return dest; === modified file 'src/lisp.h' --- src/lisp.h 2013-11-18 18:37:25 +0000 +++ src/lisp.h 2013-11-21 06:46:59 +0000 @@ -1213,7 +1213,7 @@ /* This is the size in bits. */ EMACS_INT size; /* The actual bits, packed into bytes. - Zeros fill out the last word as needed; there's always at least one word. + Zeros fill out the last word if needed. The bits are in little-endian order in the bytes, and the bytes are in little-endian order in the words. */ bits_word data[FLEXIBLE_ARRAY_MEMBER]; ------------------------------------------------------------ revno: 115167 fixes bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14646 committer: Stefan Monnier branch nick: trunk timestamp: Wed 2013-11-20 21:46:00 -0500 message: * lisp/emacs-lisp/byte-run.el (eval-when-compile): Fix edebug spec. (make-obsolete): Remove interactive spec. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2013-11-21 00:21:50 +0000 +++ lisp/ChangeLog 2013-11-21 02:46:00 +0000 @@ -1,3 +1,9 @@ +2013-11-21 Stefan Monnier + + * emacs-lisp/byte-run.el (eval-when-compile): Fix edebug spec + (bug#14646). + (make-obsolete): Remove interactive spec. + 2013-11-21 Glenn Morris * startup.el (command-line-1): Use path-separator with -L. @@ -29,8 +35,8 @@ * obsolete/rcompile.el: Mark obsolete. * progmodes/compile.el (compilation-start) - (compilation-goto-locus, compilation-find-file): Pass - no-display-ok and handle nil value from display-buffer. + (compilation-goto-locus, compilation-find-file): + Pass no-display-ok and handle nil value from display-buffer. (Bug#13594) * window.el (display-buffer-alist, display-buffer): Document the === modified file 'lisp/emacs-lisp/byte-run.el' --- lisp/emacs-lisp/byte-run.el 2013-11-04 20:06:02 +0000 +++ lisp/emacs-lisp/byte-run.el 2013-11-21 02:46:00 +0000 @@ -112,10 +112,10 @@ ''edebug-form-spec (list 'quote spec))))) defun-declarations-alist) "List associating properties of macros to their macro expansion. -Each element of the list takes the form (PROP FUN) where FUN is -a function. For each (PROP . VALUES) in a macro's declaration, -the FUN corresponding to PROP is called with the function name -and the VALUES and should return the code to use to set this property.") +Each element of the list takes the form (PROP FUN) where FUN is a function. +For each (PROP . VALUES) in a macro's declaration, the FUN corresponding +to PROP is called with the macro name, the macro's arglist, and the VALUES +and should return the code to use to set this property.") (put 'defmacro 'doc-string-elt 3) (put 'defmacro 'lisp-indent-function 2) @@ -285,7 +285,6 @@ (declare (advertised-calling-convention ;; New code should always provide the `when' argument. (obsolete-name current-name when) "23.1")) - (interactive "aMake function obsolete: \nxObsoletion replacement: ") (put obsolete-name 'byte-obsolete-info ;; The second entry used to hold the `byte-compile' handler, but ;; is not used any more nowadays. @@ -392,7 +391,7 @@ "Like `progn', but evaluates the body at compile time if you're compiling. Thus, the result of the body appears to the compiler as a quoted constant. In interpreted code, this is entirely equivalent to `progn'." - (declare (debug t) (indent 0)) + (declare (debug (def-body)) (indent 0)) (list 'quote (eval (cons 'progn body) lexical-binding))) (defmacro eval-and-compile (&rest body) ------------------------------------------------------------ revno: 115166 committer: Glenn Morris branch nick: trunk timestamp: Wed 2013-11-20 20:31:33 -0500 message: * test/automated/Makefile.in: Tweak previous change diff: === modified file 'test/automated/Makefile.in' --- test/automated/Makefile.in 2013-11-21 00:26:05 +0000 +++ test/automated/Makefile.in 2013-11-21 01:31:33 +0000 @@ -36,7 +36,7 @@ # Command line flags for Emacs. # Apparently MSYS bash would convert "-L :" to "-L ;" anyway, # but we might as well be explicit. -EMACSOPT = -batch --no-site-file --no-site-lisp -L $(PATH_SEPARATOR)$(srcdir) +EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(PATH_SEPARATOR)$(srcdir)" # Extra flags to pass to the byte compiler. BYTE_COMPILE_EXTRA_FLAGS = ------------------------------------------------------------ revno: 115165 committer: Glenn Morris branch nick: trunk timestamp: Wed 2013-11-20 19:26:05 -0500 message: * test/automated/Makefile.in (XARGS_LIMIT): New, set by configure. (compile-main): Pass XARGS_LIMIT to xargs. (Cargo-culted from lisp/Makefile.in.) diff: === modified file 'test/ChangeLog' --- test/ChangeLog 2013-11-21 00:21:50 +0000 +++ test/ChangeLog 2013-11-21 00:26:05 +0000 @@ -1,5 +1,8 @@ 2013-11-21 Glenn Morris + * automated/Makefile.in (XARGS_LIMIT): New, set by configure. + (compile-main): Pass XARGS_LIMIT to xargs. + * automated/Makefile.in (PATH_SEPARATOR): New, set by configure. (EMACSOPT): Use PATH_SEPARATOR. === modified file 'test/automated/Makefile.in' --- test/automated/Makefile.in 2013-11-21 00:21:50 +0000 +++ test/automated/Makefile.in 2013-11-21 00:26:05 +0000 @@ -24,6 +24,10 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ +# Empty for all systems except MinGW, where xargs needs an explicit +# limitation. +XARGS_LIMIT = @XARGS_LIMIT@ + # We never change directory before running Emacs, so a relative file # name is fine, and makes life easier. If we need to change # directory, we can use emacs --chdir. @@ -76,7 +80,7 @@ test -f $$el || continue; \ test ! -f $${el}c && GREP_OPTIONS= grep '^;.*no-byte-compile: t' $$el > /dev/null && continue; \ echo "$${el}c"; \ - done | xargs echo | \ + done | xargs $(XARGS_LIMIT) echo | \ while read chunk; do \ $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \ done ------------------------------------------------------------ revno: 115164 committer: Glenn Morris branch nick: trunk timestamp: Wed 2013-11-20 19:21:50 -0500 message: Use path-separator with -L, rather than just : * lisp/startup.el (command-line-1): Use path-separator with -L. * test/automated/Makefile.in (PATH_SEPARATOR): New, set by configure. (EMACSOPT): Use PATH_SEPARATOR. * doc/emacs/cmdargs.texi (Action Arguments): Use path-separator with -L. * etc/NEWS: Related edit. diff: === modified file 'doc/emacs/ChangeLog' --- doc/emacs/ChangeLog 2013-11-04 01:36:14 +0000 +++ doc/emacs/ChangeLog 2013-11-21 00:21:50 +0000 @@ -1,3 +1,7 @@ +2013-11-21 Glenn Morris + + * cmdargs.texi (Action Arguments): Use path-separator with -L. + 2013-11-04 Glenn Morris * cmdargs.texi (Action Arguments): Mention that `-L :...' appends. === modified file 'doc/emacs/cmdargs.texi' --- doc/emacs/cmdargs.texi 2013-11-18 22:53:47 +0000 +++ doc/emacs/cmdargs.texi 2013-11-21 00:21:50 +0000 @@ -142,6 +142,8 @@ a @code{load-path} of the form @code{("/foo" "/bar" @dots{})}. If @var{dir} begins with @samp{:}, Emacs removes the @samp{:} and appends (rather than prepends) the remainder to @code{load-path}. +(On MS Windows, use @samp{;} instead of @samp{:}; i.e., use +the value of @code{path-separator}.) @item -f @var{function} @opindex -f === modified file 'etc/NEWS' --- etc/NEWS 2013-11-20 02:44:38 +0000 +++ etc/NEWS 2013-11-21 00:21:50 +0000 @@ -64,7 +64,8 @@ +++ ** The -L option, which normally prepends its argument to load-path, -will instead append, if the argument begins with `:'. +will instead append, if the argument begins with `:' (or `;' on MS Windows; +i.e., `path-separator'). * Changes in Emacs 24.4 === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2013-11-20 21:01:00 +0000 +++ lisp/ChangeLog 2013-11-21 00:21:50 +0000 @@ -1,3 +1,7 @@ +2013-11-21 Glenn Morris + + * startup.el (command-line-1): Use path-separator with -L. + 2013-11-20 Teodor Zlatanov * emacs-lisp/package.el (describe-package-1): Add package archive === modified file 'lisp/startup.el' --- lisp/startup.el 2013-11-05 16:18:00 +0000 +++ lisp/startup.el 2013-11-21 00:21:50 +0000 @@ -2219,7 +2219,7 @@ ;; -L :/foo adds /foo to the _end_ of load-path. (let (append) (if (string-match-p - "\\`:" + (format "\\`%s" path-separator) (setq tem (or argval (pop command-line-args-left)))) (setq tem (substring tem 1) append t)) === modified file 'test/ChangeLog' --- test/ChangeLog 2013-11-18 18:56:42 +0000 +++ test/ChangeLog 2013-11-21 00:21:50 +0000 @@ -1,3 +1,8 @@ +2013-11-21 Glenn Morris + + * automated/Makefile.in (PATH_SEPARATOR): New, set by configure. + (EMACSOPT): Use PATH_SEPARATOR. + 2013-11-18 Paul Eggert Improve API of recently-added bool vector functions (Bug#15912). === modified file 'test/automated/Makefile.in' --- test/automated/Makefile.in 2013-11-06 17:56:48 +0000 +++ test/automated/Makefile.in 2013-11-21 00:21:50 +0000 @@ -22,13 +22,17 @@ srcdir = @srcdir@ VPATH = $(srcdir) +PATH_SEPARATOR = @PATH_SEPARATOR@ + # We never change directory before running Emacs, so a relative file # name is fine, and makes life easier. If we need to change # directory, we can use emacs --chdir. EMACS = ../../src/emacs # Command line flags for Emacs. -EMACSOPT = -batch --no-site-file --no-site-lisp -L :$(srcdir) +# Apparently MSYS bash would convert "-L :" to "-L ;" anyway, +# but we might as well be explicit. +EMACSOPT = -batch --no-site-file --no-site-lisp -L $(PATH_SEPARATOR)$(srcdir) # Extra flags to pass to the byte compiler. BYTE_COMPILE_EXTRA_FLAGS = ------------------------------------------------------------ revno: 115163 committer: Ted Zlatanov branch nick: quickfixes timestamp: Wed 2013-11-20 16:01:00 -0500 message: * emacs-lisp/package.el (describe-package-1): Add package archive. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2013-11-20 08:16:20 +0000 +++ lisp/ChangeLog 2013-11-20 21:01:00 +0000 @@ -1,3 +1,8 @@ +2013-11-20 Teodor Zlatanov + + * emacs-lisp/package.el (describe-package-1): Add package archive + to shown fields. + 2013-11-20 era eriksson * ses.el (ses-mode): Doc fix. (Bug#14748) === modified file 'lisp/emacs-lisp/package.el' --- lisp/emacs-lisp/package.el 2013-11-04 16:04:09 +0000 +++ lisp/emacs-lisp/package.el 2013-11-20 21:01:00 +0000 @@ -1403,6 +1403,8 @@ 'action 'package-install-button-action))) (t (insert (capitalize status) "."))) (insert "\n") + (insert " " (propertize "Archive" 'font-lock-face 'bold) + ": " (or archive "n/a") "\n") (and version (insert " " (propertize "Version" 'font-lock-face 'bold) ": " ------------------------------------------------------------ revno: 115162 committer: Jan D. branch nick: trunk timestamp: Wed 2013-11-20 19:33:12 +0100 message: * nsterm.m (init, run, stop:): Enable again. stop calls super stop to handle dialogs. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-11-20 13:03:43 +0000 +++ src/ChangeLog 2013-11-20 18:33:12 +0000 @@ -1,5 +1,8 @@ 2013-11-20 Jan Djärv + * nsterm.m (init, run, stop:): Enable again. stop calls super stop + to handle dialogs. + * nsterm.m (init, run, stop:): Comment out for now, does not work with dialogs. === modified file 'src/nsterm.m' --- src/nsterm.m 2013-11-20 13:03:43 +0000 +++ src/nsterm.m 2013-11-20 18:33:12 +0000 @@ -4367,7 +4367,6 @@ @implementation EmacsApp -#if 0 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 - (id)init { @@ -4386,7 +4385,7 @@ shouldKeepRunning = YES; do - { + { [pool release]; pool = [[NSAutoreleasePool alloc] init]; @@ -4405,9 +4404,11 @@ - (void)stop: (id)sender { shouldKeepRunning = NO; + // Stop possible dialog also. Noop if no dialog present. + // The file dialog still leaks 7k - 10k on 10.9 though. + [super stop:sender]; } #endif -#endif - (void)logNotification: (NSNotification *)notification { ------------------------------------------------------------ revno: 115161 committer: Jan Djärv branch nick: trunk timestamp: Wed 2013-11-20 14:03:43 +0100 message: * nsterm.m (init, run, stop:): Comment out for now, does not work with dialogs. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-11-19 08:57:22 +0000 +++ src/ChangeLog 2013-11-20 13:03:43 +0000 @@ -1,3 +1,8 @@ +2013-11-20 Jan Djärv + + * nsterm.m (init, run, stop:): Comment out for now, does not work + with dialogs. + 2013-11-19 Paul Eggert * charset.c (syms_of_charset): Don't read past end of string. === modified file 'src/nsterm.m' --- src/nsterm.m 2013-11-06 04:11:04 +0000 +++ src/nsterm.m 2013-11-20 13:03:43 +0000 @@ -4367,6 +4367,7 @@ @implementation EmacsApp +#if 0 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 - (id)init { @@ -4406,6 +4407,7 @@ shouldKeepRunning = NO; } #endif +#endif - (void)logNotification: (NSNotification *)notification { ------------------------------------------------------------ revno: 115160 committer: Bozhidar Batsov branch nick: master timestamp: Wed 2013-11-20 13:51:12 +0200 message: * test/automated/ruby-mode-tests.el: Add a few tests for `ruby--insert-coding-comment'. diff: === modified file 'test/automated/ruby-mode-tests.el' --- test/automated/ruby-mode-tests.el 2013-11-20 11:01:31 +0000 +++ test/automated/ruby-mode-tests.el 2013-11-20 11:51:12 +0000 @@ -619,6 +619,26 @@ (ruby-backward-sexp) (should (= 2 (line-number-at-pos))))) +(ert-deftest ruby--insert-coding-comment-ruby-style () + (with-temp-buffer + (let ((ruby-encoding-magic-comment-style 'ruby)) + (ruby--insert-coding-comment "utf-8") + (should (string= "# coding: utf-8\n" (buffer-string)))))) + +(ert-deftest ruby--insert-coding-comment-emacs-style () + (with-temp-buffer + (let ((ruby-encoding-magic-comment-style 'emacs)) + (ruby--insert-coding-comment "utf-8") + (should (string= "# -*- coding: utf-8 -*-\n" (buffer-string)))))) + +(ert-deftest ruby--insert-coding-comment-custom-style () + (with-temp-buffer + (let ((ruby-encoding-magic-comment-style 'custom) + (ruby-custom-encoding-magic-comment-template "# encoding: %s\n")) + (ruby--insert-coding-comment "utf-8") + (should (string= "# encoding: utf-8\n\n" (buffer-string)))))) + + (provide 'ruby-mode-tests) ;;; ruby-mode-tests.el ends here ------------------------------------------------------------ revno: 115159 committer: Bozhidar Batsov branch nick: master timestamp: Wed 2013-11-20 13:01:31 +0200 message: * test/automated/ruby-mode-tests.el: Add a failing test for bug #15874. diff: === modified file 'test/automated/ruby-mode-tests.el' --- test/automated/ruby-mode-tests.el 2013-11-17 21:39:13 +0000 +++ test/automated/ruby-mode-tests.el 2013-11-20 11:01:31 +0000 @@ -91,6 +91,9 @@ (ert-deftest ruby-no-heredoc-inside-quotes () (ruby-assert-state "\"<<\", \"\",\nfoo" 3 nil)) +(ert-deftest ruby-exit!-font-lock () + (ruby-assert-face "exit!" 5 font-lock-builtin-face)) + (ert-deftest ruby-deep-indent () (let ((ruby-deep-arglist nil) (ruby-deep-indent-paren '(?\( ?\{ ?\[ ?\] t))) ------------------------------------------------------------ revno: 115158 committer: Bozhidar Batsov branch nick: master timestamp: Wed 2013-11-20 12:52:07 +0200 message: * lisp/progmodes/ruby-mode.el (ruby-custom-encoding-magic-comment-template): Change default to "# encoding: %s" to differentiate it from the default Ruby encoding comment template. diff: === modified file 'lisp/progmodes/ruby-mode.el' --- lisp/progmodes/ruby-mode.el 2013-11-17 21:39:13 +0000 +++ lisp/progmodes/ruby-mode.el 2013-11-20 10:52:07 +0000 @@ -272,7 +272,7 @@ (const :tag "Custom Style" custom)) :group 'ruby) -(defcustom ruby-custom-encoding-magic-comment-template "# coding: %s" +(defcustom ruby-custom-encoding-magic-comment-template "# encoding: %s" "The encoding comment template to be used when `ruby-encoding-magic-comment-style' is set to `custom'." :type 'string ------------------------------------------------------------ revno: 115157 fixes bug: http://debbugs.gnu.org/14748 author: era eriksson committer: Glenn Morris branch nick: trunk timestamp: Wed 2013-11-20 00:52:15 -0800 message: * doc/misc/ses.texi (Quick Tutorial): New chapter. (The Basics, Formulas): Copyedits. (Resizing, Printer functions): Add index entries. diff: === modified file 'doc/misc/ChangeLog' --- doc/misc/ChangeLog 2013-11-17 07:51:24 +0000 +++ doc/misc/ChangeLog 2013-11-20 08:52:15 +0000 @@ -1,3 +1,9 @@ +2013-11-20 era eriksson + + * ses.texi (Quick Tutorial): New chapter. (Bug#14748) + (The Basics, Formulas): Copyedits. + (Resizing, Printer functions): Add index entries. + 2013-11-17 Jay Belanger * calc.texi (Customizing Calc): Mention new variable === modified file 'doc/misc/ses.texi' --- doc/misc/ses.texi 2013-07-25 07:10:56 +0000 +++ doc/misc/ses.texi 2013-11-20 08:52:15 +0000 @@ -66,6 +66,7 @@ @menu * Sales Pitch:: Why use @acronym{SES}? +* Quick Tutorial:: A quick introduction * The Basics:: Basic spreadsheet commands * Advanced Features:: Want to know more? * For Gurus:: Want to know @emph{even more}? @@ -98,6 +99,95 @@ @c =================================================================== +@node Quick Tutorial +@chapter Quick Tutorial +@cindex introduction +@cindex tutorial + +If you want to get started quickly and think that you know what to +expect from a simple spreadsheet, this chapter may be all that you +need. + +First, visit a new file with the @file{.ses} extension. +Emacs presents you with an empty spreadsheet containing a single cell. + +Begin by inserting a headline: @kbd{"Income"@key{RET}}. The double +quotes indicate that this is a text cell. (Notice that Emacs +automatically inserts the closing quotation mark.) + +To insert your first income value, you must first resize the +spreadsheet. Press @key{TAB} to add a new cell and navigate back up +to it. Enter a number, such as @samp{2.23}. Then proceed to add a +few more income entries, e.g.: + +@example +@group +A + Income + 2.23 + 0.02 + 15.76 + -4.00 +@end group +@end example + +To add up the values, enter a Lisp expression: + +@example +(+ A2 A3 A4 A5) +@end example + +Perhaps you want to add a cell to the right of cell A4 to explain +why you have a negative entry. Pressing @kbd{TAB} in that cell +adds an entire new column @samp{B}, where you can add such a note. + +The column is fairly narrow by default, but pressing @kbd{w} allows +you to resize it as needed. Make it 20 characters wide. You can +now add descriptive legends for all the entries, e.g.: + +@example +@group +A B + Income + 2.23 Consulting fee + 0.02 Informed opinion + 15.76 Lemonade stand + -4 Loan to Joe + 14.01 Total +@end group +@end example + +By default, the labels in column B are right-justified. To change +that, you can enter a printer function for the whole column, using +e.g., @kbd{M-p ("%s")}. You can override a column's printer function +in any individual cell using @kbd{p}. + +If Joe pays back his loan, you might blank that entry; e.g., by +positioning the cursor in cell A5 and pressing @kbd{C-d} twice. +If you do that, the total cell will display @samp{######}. That is +because the regular @code{+} operator does not handle a range that +contains some empty cells. Instead of emptying the cell, you could +enter a literal @samp{0}, or delete the entire row using @kbd{C-k}. +An alternative is to use the special function @code{ses+} instead of +the regular @code{+}: + +@example +(ses+ A2 A3 A4 A5) +@end example + +To make a formula robust against changes in the spreadsheet geometry, +you can use the @code{ses-range} macro to refer to a range of cells by +the end-points, e.g.: + +@example +(apply 'ses+ (ses-range A2 A5)) +@end example + +(The @code{apply} is necessary because @code{ses-range} produces a +@emph{list} of values. This allows for more complex possibilities.) + +@c =================================================================== + @node The Basics @comment node-name, next, previous, up @chapter The Basics @@ -117,6 +207,7 @@ number. Cell B7 is the 2nd column of the 7th row. For very wide spreadsheets, there are two column letters: cell AB7 is the 28th column of the 7th row. Super wide spreadsheets get AAA1, etc. +You move around with the regular Emacs movement commands. @table @kbd @item j @@ -161,13 +252,17 @@ @section Cell formulas @cindex formulas @cindex formulas, entering +@cindex values +@cindex cell values +@cindex editing cells @findex ses-read-cell @findex ses-read-symbol @findex ses-edit-cell @findex ses-recalculate-cell @findex ses-recalculate-all -To enter a number into the current cell, just start typing: +To insert a value into a cell, simply type a numeric expression, +@samp{"double-quoted text"}, or a Lisp expression. @table @kbd @item 0..9 @@ -213,6 +308,13 @@ @node Resizing @section Resizing the spreadsheet @cindex resizing spreadsheets +@cindex dimensions +@cindex row, adding or removing +@cindex column, adding or removing +@cindex adding rows or columns +@cindex inserting rows or columns +@cindex removing rows or columns +@cindex deleting rows or columns @findex ses-insert-row @findex ses-insert-column @findex ses-delete-row @@ -269,6 +371,8 @@ @node Printer functions @section Printer functions @cindex printer functions +@cindex cell formatting +@cindex formatting cells @findex ses-read-cell-printer @findex ses-read-column-printer @findex ses-read-default-printer