emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r117499: Merge from emacs-24; up to r117365


From: Glenn Morris
Subject: [Emacs-diffs] trunk r117499: Merge from emacs-24; up to r117365
Date: Wed, 09 Jul 2014 02:04:59 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117499 [merge]
revision-id: address@hidden
parent: address@hidden
parent: address@hidden
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Tue 2014-07-08 19:04:12 -0700
message:
  Merge from emacs-24; up to r117365
modified:
  doc/emacs/ChangeLog            changelog-20091113204419-o5vbwnq5f7feedwu-6227
  doc/emacs/search.texi          
search.texi-20091113204419-o5vbwnq5f7feedwu-6276
  doc/lispref/ChangeLog          changelog-20091113204419-o5vbwnq5f7feedwu-6155
  doc/lispref/debugging.texi     
debugging.texi-20091113204419-o5vbwnq5f7feedwu-6171
  doc/misc/ChangeLog             changelog-20091113204419-o5vbwnq5f7feedwu-6331
  doc/misc/todo-mode.texi        todomode.texi-20130804212326-csuj921rpk9gy1gz-1
  etc/NEWS                       news-20100311060928-aoit31wvzf25yr1z-1
  etc/TODO                       todo-20091113204419-o5vbwnq5f7feedwu-1501
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/calendar/todo-mode.el     todos.el-20120911155047-0ytqo2nidwqquefa-1
  lisp/desktop.el                desktop.el-20091113204419-o5vbwnq5f7feedwu-591
  lisp/emacs-lisp/edebug.el      edebug.el-20091113204419-o5vbwnq5f7feedwu-483
  lisp/emulation/cua-rect.el     cuarect.el-20091113204419-o5vbwnq5f7feedwu-2417
  lisp/facemenu.el               facemenu.el-20091113204419-o5vbwnq5f7feedwu-786
  lisp/faces.el                  faces.el-20091113204419-o5vbwnq5f7feedwu-562
  lisp/progmodes/octave.el       
octavemod.el-20091113204419-o5vbwnq5f7feedwu-1028
  lisp/progmodes/ruby-mode.el    
rubymode.el-20091113204419-o5vbwnq5f7feedwu-8804
  lisp/progmodes/sh-script.el    shscript.el-20091113204419-o5vbwnq5f7feedwu-727
  lisp/startup.el                startup.el-20091113204419-o5vbwnq5f7feedwu-260
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/syntax.c                   syntax.c-20091113204419-o5vbwnq5f7feedwu-180
  src/w32.c                      w32.c-20091113204419-o5vbwnq5f7feedwu-808
  src/window.c                   window.c-20091113204419-o5vbwnq5f7feedwu-231
  src/xdisp.c                    xdisp.c-20091113204419-o5vbwnq5f7feedwu-240
  test/indent/shell.sh           shell.sh-20110209185043-iuyrh0is1gz0s4w6-1
=== modified file 'doc/emacs/ChangeLog'
--- a/doc/emacs/ChangeLog       2014-07-03 06:00:53 +0000
+++ b/doc/emacs/ChangeLog       2014-07-09 02:04:12 +0000
@@ -1,3 +1,8 @@
+2014-07-09  Juri Linkov  <address@hidden>
+
+       * search.texi (Regexp Search): Update lax space matching that is
+       not active in regexp search by default now.  (Bug#17901)
+
 2014-07-03  Glenn Morris  <address@hidden>
 
        * help.texi (Misc Help):

=== modified file 'doc/emacs/search.texi'
--- a/doc/emacs/search.texi     2014-04-29 14:45:24 +0000
+++ b/doc/emacs/search.texi     2014-07-03 23:52:42 +0000
@@ -602,12 +602,13 @@
 They also have separate search rings, which you can access with
 @kbd{M-p} and @kbd{M-n}.
 
-  Just as in ordinary incremental search, any @key{SPC} typed in
-incremental regexp search matches any sequence of one or more
-whitespace characters.  The variable @code{search-whitespace-regexp}
-specifies the regexp for the lax space matching, and @kbd{M-s @key{SPC}}
-(@code{isearch-toggle-lax-whitespace}) toggles the feature.
address@hidden Isearch}.
+  Unlike ordinary incremental search, incremental regexp search
+do not use lax space matching by default.  To toggle this feature
+use @kbd{M-s @key{SPC}} (@code{isearch-toggle-lax-whitespace}).
+Then any @key{SPC} typed in incremental regexp search will match
+any sequence of one or more whitespace characters.  The variable
address@hidden specifies the regexp for the lax
+space matching.  @xref{Special Isearch}.
 
   In some cases, adding characters to the regexp in an incremental
 regexp search can make the cursor move back and start again.  For

=== modified file 'doc/lispref/ChangeLog'
--- a/doc/lispref/ChangeLog     2014-07-03 06:00:53 +0000
+++ b/doc/lispref/ChangeLog     2014-07-09 02:04:12 +0000
@@ -1,3 +1,8 @@
+2014-07-09  Stefan Monnier  <address@hidden>
+
+       * debugging.texi (Function Debugging, Debugger Commands):
+       Update debug-on-entry w.r.t behavior after redefinitions (bug#17902).
+
 2014-07-03  Glenn Morris  <address@hidden>
 
        * help.texi (Help Functions): "Online" help doesn't mean what it

=== modified file 'doc/lispref/debugging.texi'
--- a/doc/lispref/debugging.texi        2014-02-13 08:26:01 +0000
+++ b/doc/lispref/debugging.texi        2014-07-08 18:24:39 +0000
@@ -226,9 +226,7 @@
 
 @deffn Command debug-on-entry function-name
 This function requests @var{function-name} to invoke the debugger each
-time it is called.  It works by inserting the form
address@hidden(implement-debug-on-entry)} into the function definition as the
-first form.
+time it is called.
 
 Any function or macro defined as Lisp code may be set to break on
 entry, regardless of whether it is interpreted code or compiled code.
@@ -244,11 +242,6 @@
 up to invoke the debugger on entry, @code{debug-on-entry} does nothing.
 @code{debug-on-entry} always returns @var{function-name}.
 
address@hidden:} if you redefine a function after using
address@hidden on it, the code to enter the debugger is
-discarded by the redefinition.  In effect, redefining the function
-cancels the break-on-entry feature for that function.
-
 Here's an example to illustrate use of this function:
 
 @example
@@ -277,12 +270,6 @@
 ------ Buffer: *Backtrace* ------
 @end group
 
address@hidden
-(symbol-function 'fact)
-     @result{} (lambda (n)
-          (debug (quote debug))
-          (if (zerop n) 1 (* n (fact (1- n)))))
address@hidden group
 @end example
 @end deffn
 
@@ -461,9 +448,7 @@
 @item l
 Display a list of functions that will invoke the debugger when called.
 This is a list of functions that are set to break on entry by means of
address@hidden  @strong{Warning:} if you redefine such a
-function and thus cancel the effect of @code{debug-on-entry}, it may
-erroneously show up in this list.
address@hidden
 
 @item v
 Toggle the display of local variables of the current stack frame.

=== modified file 'doc/misc/ChangeLog'
--- a/doc/misc/ChangeLog        2014-07-03 09:10:05 +0000
+++ b/doc/misc/ChangeLog        2014-07-09 02:04:12 +0000
@@ -1,3 +1,9 @@
+2014-07-09  Stephen Berman  <address@hidden>
+
+       * todo-mode.texi (Levels of Organization): Comment out statement
+       that Emacs recognizes todo files by their extension, since this
+       feature has been removed due to bug#17482.
+
 2014-07-03  Michael Albinus  <address@hidden>
 
        * trampver.texi: Update release number.

=== modified file 'doc/misc/todo-mode.texi'
--- a/doc/misc/todo-mode.texi   2014-06-10 02:20:31 +0000
+++ b/doc/misc/todo-mode.texi   2014-07-09 02:04:12 +0000
@@ -158,11 +158,10 @@
 All todo files reside in a single directory, whose location is specified
 by the user option @code{todo-directory}.  This directory may also
 contain other types of Todo files, which are discussed later
-(@pxref{Todo Archive Mode} and @ref{Todo Filtered Items Mode}).  Emacs
-recognizes Todo files by their extension, so when you visit the files
-the buffer is in the appropriate mode and the current category is
-correctly displayed.
-
+(@pxref{Todo Archive Mode} and @ref{Todo Filtered Items Mode}).
address@hidden Emacs recognizes Todo files by their extension, so when you visit
address@hidden the files the buffer is in the appropriate mode and the current
address@hidden category is correctly displayed.
 When you use a Todo mode command to create a todo file, the extension
 @samp{.todo} is automatically added to the base name you choose (as a
 rule, this name is also used for the other types of Todo files, which

=== modified file 'etc/NEWS'
--- a/etc/NEWS  2014-07-08 08:49:18 +0000
+++ b/etc/NEWS  2014-07-09 02:04:12 +0000
@@ -1166,11 +1166,11 @@
 Some languages match those as »...«, and others as «...», so it is
 better for Emacs to stay neutral by default.
 
-** `read-event' does not return decoded chars in ttys any more.
-As was the case in Emacs 22 and before, the decoding of terminal
-input, according to `keyboard-coding-system', is not performed in
-`read-event' any more.  But unlike in Emacs 22, this decoding is still
-done before `input-decode-map', `function-key-map', etc.
+** `read-event' does not always decode chars in ttys any more.  As was the case
+in Emacs 22 and before, `read-event' (and `read-char') by default read raw
+bytes from the terminal.  If you want to read decoded chars instead (as was
+always the case in Emacs-23, for example), pass a non-nil
+`inherit-input-method' argument.
 
 ** In `symbol-function', nil and "unbound" are indistinguishable.
 `symbol-function' does not signal a `void-function' error any more.
@@ -1519,10 +1519,13 @@
 "Interlocking" in the Emacs User Manual for the details.  To disable
 file locking, customize `create-lockfiles' to nil.
 
-** The "generate a backtrace on fatal error" feature now works on MS Windows.
+** The "generate a backtrace on fatal error" feature now works on MS-Windows.
 The backtrace is written to the 'emacs_backtrace.txt' file in the
 directory where Emacs was running.
 
+** The `network-interface-list' and `network-interface-info' functions
+are now available on MS-Windows.
+
 ** The variable `buffer-file-type' is no longer supported.
 Setting it has no effect, and %t in the mode-line format is ignored.
 Likewise, `file-name-buffer-file-type-alist' is now obsolete, and

=== modified file 'etc/TODO'
--- a/etc/TODO  2014-06-08 00:35:27 +0000
+++ b/etc/TODO  2014-07-09 02:04:12 +0000
@@ -167,14 +167,6 @@
 ** Find a proper fix for rcirc multiline nick adding.
 http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00684.html
 
-** Implement `network-interface-list' and `network-interface-info'
-on MS-Windows.  Hint: the information is present in the Registry,
-under the keys
-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage\
-and
-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<device>\
-where <device> is the network device found under the first key.
-
 ** Check for any included packages that define obsolete bug-reporting commands.
 Change them to use report-emacs-bug.
 *** Related functions:
@@ -232,8 +224,15 @@
 ** FFI (foreign function interface)
 See eg http://lists.gnu.org/archive/html/emacs-devel/2013-10/msg00246.html
 
+One way of doing this is to start with fx's dynamic loading, and use it
+to implement things like auto-loaded buffer parsers and database
+access in cases which need more than Lisp.
+
 ** Replace unexec with a more portable form of dumping
 See eg http://lists.gnu.org/archive/html/emacs-devel/2014-01/msg01034.html
+       http://lists.gnu.org/archive/html/emacs-devel/2014-06/msg00452.html
+
+One way is to provide portable undumping using mmap (per gerd design).
 
 ** Imenu could be extended into a file-structure browsing mechanism
 using code like that of customize-groups.
@@ -260,13 +259,15 @@
   by http://savannah.nongnu.org/projects/emacs-rtf/, which is still in
   very early stages.
 
+  Another place to look is the Wikipedia article at
+  http://en.wikipedia.org/wiki/Rich_Text_Format
+
+  It currently points to the latest spec of RTF v1.9.1 at
+  http://www.microsoft.com/en-us/download/details.aspx?id=10725
+
 ** Implement primitive and higher-level functions to allow filling
   properly with variable-pitch faces.
 
-** Implement a smoother vertical scroll facility, one that allows
-  C-v to scroll through a tall image.  The primitive operations
-  posn-at-point and posn-at-x-y should now make it doable in elisp.
-
 ** Implement intelligent search/replace, going beyond query-replace
   (see http://groups.csail.mit.edu/uid/projects/clustering/chi04.pdf).
 
@@ -301,9 +302,6 @@
   Maybe making Lucid menus work like Gtk's (i.e. just force utf-8) is good
   enough now that Emacs can encode most chars into utf-8.
 
-** Remove the limitation that window and frame widths and heights can
-  be only full columns/lines.
-
 ** The GNUstep port needs some serious attention, ideally from someone
 familiar with GNUstep and Objective C.
 
@@ -317,6 +315,7 @@
 
 ** Allow frames(terminals) created by emacsclient to inherit their environment
 from the emacsclient process.
+
 ** Remove the default toggling behavior of minor modes when called from elisp
 rather than interactively.  This a trivial one-liner in easy-mode.el.
 
@@ -388,23 +387,6 @@
   user-selected input method, with the default being the union of
   latin-1-prefix and latin-1-postfix.
 
-** Switch the Windows port to using Unicode keyboard input (maybe).
-  Based on http://msdn2.microsoft.com/en-us/library/ms633586.aspx,
-  this boils down to (1) calling RegisterClassW function to register
-  Emacs windows, and (2) modifying ALL system messages to use Unicode.
-  In particular, WM_CHAR messages, which result from keyboard input,
-  will then come in encoded in UTF-16.
-
-  One advantage of switching to Unicode is to toss encoded-kbd usage,
-  which will solve the problem with binding non-ASCII keys with modifiers.
-
-  Problem: using this on Windows 9x/ME requires installing the
-  Microsoft Layer for Unicode (MSLU), which might not implement all
-  the required functionality that is available built-in on Windows XP
-  and later.  We should not make this change if it would pressure
-  users of unauthorized copies of older versions of Windows to
-  downgrade to versions that require activation.
-
 ** Implement a clean way to use different major modes for
   different parts of a buffer.  This could be useful in editing
   Bison input files, for instance, or other kinds of text
@@ -452,9 +434,6 @@
   multiple inheritance ?  faster where-is ?  no more fix_submap_inheritance ?
   what else ?
 
-** Provide real menus on ttys.  The MS-DOS implementation can serve as
-  an example how to do part of this; see the XMenu* functions on msdos.c.
-
 ** Implement popular parts of the rest of the CL functions as compiler
   macros in cl-macs.  [Is this still relevant now that cl-lib exists?]
 
@@ -518,15 +497,9 @@
   tree displays generally, mode-line mail indicator.  [See work done
   already for Emacs 23 and consult fx.]
 
-** Do something to make rms happy with fx's dynamic loading, and use it
-  to implement things like auto-loaded buffer parsers and database
-  access in cases which need more than Lisp.
-
 ** Extend ps-print to deal with multiple font sizes, images, and extra
   encodings.
 
-** Provide portable undumping using mmap (per gerd design).
-
 ** Make byte-compile avoid binding an expanded defsubst's args
   when the body only calls primitives.
 
@@ -735,7 +708,7 @@
 Try (setq image-type-header-regexps nil) for a quick hack to prefer
 ImageMagick over the jpg loader.
 
-*** For some reason its unbearably slow to look at a page in a large
+*** For some reason it's unbearably slow to look at a page in a large
 image bundle using the :index feature.  The ImageMagick "display"
 command is also a bit slow, but nowhere near as slow as the Emacs
 code.  It seems ImageMagick tries to unpack every page when loading the

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2014-07-08 19:33:37 +0000
+++ b/lisp/ChangeLog    2014-07-09 02:04:12 +0000
@@ -1,3 +1,66 @@
+2014-07-09  Stefan Monnier  <address@hidden>
+
+       * progmodes/sh-script.el (sh-smie-sh-rules): Don't align with a && in
+       the middle of a line (bug#17896).
+
+2014-07-09  Juri Linkov  <address@hidden>
+
+       * startup.el (command-line): Append displaying the warning about
+       the errors in the init file to the end of `after-init-hook'.
+       (Bug#17927)
+
+       * faces.el (face-name): Return input arg `face' as-is
+       when it's not a symbol.
+       (x-resolve-font-name): Don't check if the face is a symbol.
+       (Bug#17956)
+
+       * facemenu.el (list-colors-print): In help-echo format use %.2f
+       instead of %d because now HSV values are floating-point components
+       between 0.0 and 1.0.
+
+2014-07-09  Glenn Morris  <address@hidden>
+
+       * emulation/cua-rect.el (cua--activate-rectangle):
+       Avoid setting cua--rectangle to nil.  (Bug#17877)
+
+2014-07-09  Stephen Berman  <address@hidden>
+
+       * calendar/todo-mode.el: Fix wrong-type-argument error when
+       marking multiple consecutive items.
+       (todo-toggle-mark-item): Don't try to mark the empty lines at the
+       end of the todo and done items sections.  Note in doc string that
+       items marked by passing a numeric prefix argument can include the
+       last todo and first done items.
+       (todo-mark-category): Don't try to mark the empty line between the
+       todo and done items sections.
+
+2014-07-09  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/edebug.el (edebug-eval-defun): Print result using
+       proper Lisp quoting (bug#17934).
+
+       * progmodes/ruby-mode.el (ruby-mode-variables): Don't meddle with
+       require-final-newline since prog-mode already took care of it 
(bug#17947).
+
+2014-07-09  Stephen Berman  <address@hidden>
+
+       * calendar/todo-mode.el: Fix two bugs.  Shorten Commentary and
+       refer to the Todo mode Info manual.  Update the comment on
+       requiring cl-lib.
+       (todo-find-filtered-items-file): Add todo-prefix overlays.
+       (todo-filter-items): Reorder a let-bound variable to avoid a
+       wrong-type-argument error on canceling the file choice dialog.
+
+2014-07-09  Stefan Monnier  <address@hidden>
+
+       * progmodes/octave.el (inferior-octave-mode):
+       Set comint-input-ring-size to a number (bug#17912).
+
+2014-07-09  Juri Linkov  <address@hidden>
+
+       * desktop.el (desktop-minor-mode-table): Add `defining-kbd-macro'
+       and `isearch-mode' associated with nil.  (Bug#17849)
+
 2014-07-08  Stefan Monnier  <address@hidden>
 
        * linum.el (linum--face-height): New function (bug#17813).

=== modified file 'lisp/calendar/todo-mode.el'
--- a/lisp/calendar/todo-mode.el        2014-07-08 19:15:28 +0000
+++ b/lisp/calendar/todo-mode.el        2014-07-09 02:04:12 +0000
@@ -24,63 +24,37 @@
 
 ;;; Commentary:
 
-;; This package provides facilities for making, displaying, navigating
-;; and editing todo lists, which are prioritized lists of todo items.
-;; Todo lists are identified with named categories, so you can group
-;; together and separately prioritize thematically related todo items.
-;; Each category is stored in a file, which thus provides a further
-;; level of organization.  You can create as many todo files, and in
-;; each as many categories, as you want.
+;; This package provides facilities for making and maintaining
+;; prioritized lists of things to do.  These todo lists are identified
+;; with named categories, so you can group together thematically
+;; related todo items.  Each category is stored in a file, providing a
+;; further level of organization.  You can create as many todo files,
+;; and in each as many categories, as you want.
 
 ;; With Todo mode you can navigate among the items of a category, and
 ;; between categories in the same and in different todo files.  You
-;; can edit todo items, reprioritize them within their category, move
-;; them to another category, delete them, or mark items as done and
-;; store them separately from the not yet done items in a category.
-;; You can add new todo files, edit and delete them.  You can add new
-;; categories, rename and delete them, move categories to another file
-;; and merge the items of two categories.  You can also reorder the
-;; sequence of categories in a todo file for the purpose of
-;; navigation.  You can display summary tables of the categories in a
-;; file and the types of items they contain.  And you can compile
-;; lists of existing items from multiple categories in one or more
-;; todo files, which are filtered by various criteria.
-
-;; To get started, load this package and type `M-x todo-show'.  This
-;; will prompt you for the name of the first todo file, its first
-;; category and the category's first item, create these and display
-;; them in Todo mode.  Now you can insert further items into the list
-;; (i.e., the category) and assign them priorities by typing `i i'.
-
-;; You will probably find it convenient to give `todo-show' a global
-;; key binding in your init file, since it is one of the entry points
-;; to Todo mode; a good choice is `C-c t', since `todo-show' is
-;; bound to `t' in Todo mode.
-
-;; To see a list of all Todo mode commands and their key bindings,
-;; including other entry points, type `C-h m' in Todo mode.  Consult
-;; the documentation strings of the commands for details of their use.
-;; The `todo' customization group and its subgroups list the options
-;; you can set to alter the behavior of many commands and various
-;; aspects of the display.
-
-;; This package is a new version of Oliver Seidel's todo-mode.el.
-;; While it retains the same basic organization and handling of todo
-;; lists and the basic UI, it significantly extends these and adds
-;; many features.  This required also making changes to the internals,
-;; including the file format.  If you have a todo file in old format,
-;; then the first time you invoke `todo-show' (i.e., before you have
-;; created any todo file in the current format), it will ask you
-;; whether to convert that file and show it.  If you choose not to
-;; convert the old-style file at this time, you can do so later by
-;; calling the command `todo-convert-legacy-files'.
+;; can add and edit todo items, reprioritize them, move them to
+;; another category, or delete them.  You can also mark items as done
+;; and store them within their category or in separate archive files.
+;; You can include todo items in the Emacs Fancy Diary display and
+;; treat them as appointments.  You can add new todo files, and rename
+;; or delete them.  You can add new categories to a file, rename or
+;; delete them, move a category to another file and merge the items of
+;; two categories.  You can also reorder the sequence of categories in
+;; a todo file for the purpose of navigation.  You can display
+;; sortable summary tables of the categories in a file and the types
+;; of items they contain.  And you can filter items by various
+;; criteria from multiple categories in one or more todo files to
+;; create prioritizable cross-category overviews of your todo items.
+
+;; To get started, type `M-x todo-show'.  For full details of the user
+;; interface, commands and options, consult the Todo mode user manual,
+;; which is included in the Info documentation.
 
 ;;; Code:
 
 (require 'diary-lib)
-;; For cl-remove-duplicates (in todo-insertion-commands-args) and
-;; cl-oddp.
-(require 'cl-lib)
+(require 'cl-lib)                      ; For cl-oddp and cl-assert.
 
 ;; 
-----------------------------------------------------------------------------
 ;;; Setting up todo files, categories, and items
@@ -1736,31 +1710,40 @@
 
 (defun todo-toggle-mark-item (&optional n)
   "Mark item with `todo-item-mark' if unmarked, otherwise unmark it.
-With a positive numerical prefix argument N, change the
-marking of the next N items."
+With positive numerical prefix argument N, change the marking of
+the next N items in the current category.  If both the todo and
+done items sections are visible, the sequence of N items can
+consist of the the last todo items and the first done items."
   (interactive "p")
   (when (todo-item-string)
     (unless (> n 1) (setq n 1))
-    (dotimes (i n)
-      (let* ((cat (todo-current-category))
-            (marks (assoc cat todo-categories-with-marks))
-            (ov (progn
-                  (unless (looking-at todo-item-start)
-                    (todo-item-start))
-                  (todo-get-overlay 'prefix)))
-            (pref (overlay-get ov 'before-string)))
-       (if (todo-marked-item-p)
-           (progn
-             (overlay-put ov 'before-string (substring pref 1))
-             (if (= (cdr marks) 1)     ; Deleted last mark in this category.
-                 (setq todo-categories-with-marks
-                       (assq-delete-all cat todo-categories-with-marks))
-               (setcdr marks (1- (cdr marks)))))
-         (overlay-put ov 'before-string (concat todo-item-mark pref))
-         (if marks
-             (setcdr marks (1+ (cdr marks)))
-           (push (cons cat 1) todo-categories-with-marks))))
-      (todo-forward-item))))
+    (catch 'end
+      (dotimes (i n)
+       (let* ((cat (todo-current-category))
+              (marks (assoc cat todo-categories-with-marks))
+              (ov (progn
+                    (unless (looking-at todo-item-start)
+                      (todo-item-start))
+                    (todo-get-overlay 'prefix)))
+              (pref (overlay-get ov 'before-string)))
+         (if (todo-marked-item-p)
+             (progn
+               (overlay-put ov 'before-string (substring pref 1))
+               (if (= (cdr marks) 1)   ; Deleted last mark in this category.
+                   (setq todo-categories-with-marks
+                         (assq-delete-all cat todo-categories-with-marks))
+                 (setcdr marks (1- (cdr marks)))))
+           (overlay-put ov 'before-string (concat todo-item-mark pref))
+           (if marks
+               (setcdr marks (1+ (cdr marks)))
+             (push (cons cat 1) todo-categories-with-marks))))
+       (todo-forward-item)
+       ;; Don't try to mark the empty lines at the end of the todo
+       ;; and done items sections.
+       (when (looking-at "^$")
+         (if (eobp)
+             (throw 'end nil)
+           (todo-forward-item)))))))
 
 (defun todo-mark-category ()
   "Mark all visible items in this category with `todo-item-mark'."
@@ -1777,7 +1760,12 @@
            (if marks
                (setcdr marks (1+ (cdr marks)))
              (push (cons cat 1) todo-categories-with-marks))))
-       (todo-forward-item)))))
+       (todo-forward-item)
+       ;; Don't try to mark the empty line between the todo and done
+       ;; items sections.
+       (when (looking-at "^$")
+         (unless (eobp)
+           (todo-forward-item)))))))
 
 (defun todo-unmark-category ()
   "Remove `todo-item-mark' from all visible items in this category."
@@ -3973,7 +3961,8 @@
     (setq file (cdr (assoc-string file falist)))
     (find-file file)
     (unless (derived-mode-p 'todo-filtered-items-mode)
-      (todo-filtered-items-mode))))
+      (todo-filtered-items-mode))
+    (todo-prefix-overlays)))
 
 (defun todo-go-to-source-item ()
   "Display the file and category of the filtered item at point."
@@ -4082,7 +4071,6 @@
                        (progn (todo-multiple-filter-files)
                               todo-multiple-filter-files))
                  (list todo-current-todo-file)))
-        (multi (> (length flist) 1))
         (fname (if (equal flist 'quit)
                    ;; Pressed `cancel' in t-m-f-f file selection dialog.
                    (keyboard-quit)
@@ -4091,6 +4079,7 @@
                          (cond (top ".todt")
                                (diary ".tody")
                                (regexp ".todr")))))
+        (multi (> (length flist) 1))
         (rxfiles (when regexp
                    (directory-files todo-directory t ".*\\.todr$" t)))
         (file-exists (or (file-exists-p fname) rxfiles))

=== modified file 'lisp/desktop.el'
--- a/lisp/desktop.el   2014-07-02 23:45:12 +0000
+++ b/lisp/desktop.el   2014-07-03 23:48:24 +0000
@@ -528,6 +528,8 @@
 
 (defcustom desktop-minor-mode-table
   '((auto-fill-function auto-fill-mode)
+    (defining-kbd-macro nil)
+    (isearch-mode nil)
     (vc-mode nil)
     (vc-dired-mode nil)
     (erc-track-minor-mode nil)

=== modified file 'lisp/emacs-lisp/edebug.el'
--- a/lisp/emacs-lisp/edebug.el 2014-02-25 21:55:45 +0000
+++ b/lisp/emacs-lisp/edebug.el 2014-07-05 19:11:59 +0000
@@ -497,7 +497,7 @@
     (setq edebug-result (eval (eval-sexp-add-defvars form) lexical-binding))
     (if (not edebugging)
        (prog1
-           (princ edebug-result)
+           (prin1 edebug-result)
          (let ((str (eval-expression-print-format edebug-result)))
            (if str (princ str))))
       edebug-result)))

=== modified file 'lisp/emulation/cua-rect.el'
--- a/lisp/emulation/cua-rect.el        2014-01-01 07:43:34 +0000
+++ b/lisp/emulation/cua-rect.el        2014-07-06 23:58:52 +0000
@@ -726,11 +726,11 @@
   ;; Set cua--rectangle to indicate we're marking a rectangle.
   ;; Be careful if we are already marking a rectangle.
   (setq cua--rectangle
-        (if (and cua--last-rectangle
+        (or (and cua--last-rectangle
                  (eq (car cua--last-rectangle) (current-buffer))
-                 (eq (car (cdr cua--last-rectangle)) (point)))
-            (cdr (cdr cua--last-rectangle))
-          (cua--rectangle-get-corners))
+                 (eq (car (cdr cua--last-rectangle)) (point))
+                 (cdr (cdr cua--last-rectangle)))
+            (cua--rectangle-get-corners))
         cua--status-string (if (cua--rectangle-virtual-edges) " [R]" "")
         cua--last-rectangle nil)
   (activate-mark))

=== modified file 'lisp/facemenu.el'
--- a/lisp/facemenu.el  2014-01-01 07:43:34 +0000
+++ b/lisp/facemenu.el  2014-07-08 08:55:00 +0000
@@ -620,7 +620,7 @@
                 'help-echo
                 (let ((hsv (apply 'color-rgb-to-hsv
                                   (color-name-to-rgb (car color)))))
-                  (format "H:%d S:%d V:%d"
+                  (format "H:%.2f S:%.2f V:%.2f"
                           (nth 0 hsv) (nth 1 hsv) (nth 2 hsv)))))
        (when callback
          (make-text-button

=== modified file 'lisp/faces.el'
--- a/lisp/faces.el     2014-04-30 19:54:52 +0000
+++ b/lisp/faces.el     2014-07-09 02:04:12 +0000
@@ -370,7 +370,10 @@
 
 (defun face-name (face)
   "Return the name of face FACE."
-  (symbol-name (check-face face)))
+  (check-face face)
+  (if (symbolp face)
+      (symbol-name face)
+    face))
 
 
 (defun face-all-attributes (face &optional frame)
@@ -2746,8 +2749,8 @@
 contains wildcards.
 Given optional arguments FACE and FRAME, return a font which is
 also the same size as FACE on FRAME, or fail."
-  (or (symbolp face)
-      (setq face (face-name face)))
+  (when face
+    (setq face (face-name face)))
   (and (eq frame t)
        (setq frame nil))
   (if pattern

=== modified file 'lisp/progmodes/octave.el'
--- a/lisp/progmodes/octave.el  2014-04-12 04:07:53 +0000
+++ b/lisp/progmodes/octave.el  2014-07-04 01:35:23 +0000
@@ -747,9 +747,10 @@
   (setq-local info-lookup-mode 'octave-mode)
   (setq-local eldoc-documentation-function 'octave-eldoc-function)
 
-  (setq comint-input-ring-file-name
-        (or (getenv "OCTAVE_HISTFILE") "~/.octave_hist")
-        comint-input-ring-size (or (getenv "OCTAVE_HISTSIZE") 1024))
+  (setq-local comint-input-ring-file-name
+              (or (getenv "OCTAVE_HISTFILE") "~/.octave_hist"))
+  (setq-local comint-input-ring-size
+              (string-to-number (or (getenv "OCTAVE_HISTSIZE") "1024")))
   (comint-read-input-ring t)
   (setq-local comint-dynamic-complete-functions
               inferior-octave-dynamic-complete-functions)

=== modified file 'lisp/progmodes/ruby-mode.el'
--- a/lisp/progmodes/ruby-mode.el       2014-06-16 03:33:29 +0000
+++ b/lisp/progmodes/ruby-mode.el       2014-07-05 18:37:45 +0000
@@ -749,7 +749,6 @@
                   :forward-token  #'ruby-smie--forward-token
                   :backward-token #'ruby-smie--backward-token)
     (setq-local indent-line-function 'ruby-indent-line))
-  (setq-local require-final-newline t)
   (setq-local comment-start "# ")
   (setq-local comment-end "")
   (setq-local comment-column ruby-comment-column)

=== modified file 'lisp/progmodes/sh-script.el'
--- a/lisp/progmodes/sh-script.el       2014-06-26 06:55:15 +0000
+++ b/lisp/progmodes/sh-script.el       2014-07-09 02:04:12 +0000
@@ -2012,9 +2012,10 @@
                         (<= indent initial)))))
      `(column . ,(+ initial sh-indentation)))
     (`(:before . ,(or `"(" `"{" `"["))
-     (when (smie-rule-hanging-p)
-       (if (not (smie-rule-prev-p "&&" "||" "|"))
-          (smie-rule-parent)
+     (if (not (smie-rule-prev-p "&&" "||" "|"))
+         (when (smie-rule-hanging-p)
+           (smie-rule-parent))
+       (unless (smie-rule-bolp)
         (smie-backward-sexp 'halfexp)
         `(column . ,(smie-indent-virtual)))))
     ;; FIXME: Maybe this handling of ;; should be made into

=== modified file 'lisp/startup.el'
--- a/lisp/startup.el   2014-06-08 23:41:43 +0000
+++ b/lisp/startup.el   2014-07-09 02:04:12 +0000
@@ -1182,18 +1182,25 @@
                (funcall inner)
                (setq init-file-had-error nil))
            (error
-            (display-warning
-             'initialization
-             (format "An error occurred while loading `%s':\n\n%s%s%s\n\n\
+            ;; Postpone displaying the warning until all hooks
+            ;; in `after-init-hook' like `desktop-read' will finalize
+            ;; possible changes in the window configuration.
+            (add-hook
+             'after-init-hook
+             (lambda ()
+               (display-warning
+                'initialization
+                (format "An error occurred while loading `%s':\n\n%s%s%s\n\n\
 To ensure normal operation, you should investigate and remove the
 cause of the error in your initialization file.  Start Emacs with
 the `--debug-init' option to view a complete error backtrace."
-                     user-init-file
-                     (get (car error) 'error-message)
-                     (if (cdr error) ": " "")
-                     (mapconcat (lambda (s) (prin1-to-string s t))
-                                 (cdr error) ", "))
-             :warning)
+                        user-init-file
+                        (get (car error) 'error-message)
+                        (if (cdr error) ": " "")
+                        (mapconcat (lambda (s) (prin1-to-string s t))
+                                   (cdr error) ", "))
+                :warning))
+             t)
             (setq init-file-had-error t))))
 
       (if (and deactivate-mark transient-mark-mode)

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-07-08 17:13:32 +0000
+++ b/src/ChangeLog     2014-07-09 02:04:12 +0000
@@ -1,3 +1,37 @@
+2014-07-09  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (move_it_to): Adjust calculation of line_start_x to what
+       x_produce_glyphs does when it generates a stretch glyph that
+       represents a TAB.  (Bug#17969)
+
+       * xdisp.c (pos_visible_p): If CHARPOS is at beginning of window,
+       and there is a display property at that position, don't call
+       move_it_to to move to a position before window start.  (Bug#17942)
+       Fix condition for finding CHARPOS by the first call to move_it_to.
+       (Bug#17944)
+
+2014-07-09  Stefan Monnier  <address@hidden>
+
+       * syntax.c (find_defun_start): Try the cache even
+       if !open_paren_in_column_0_is_defun_start.
+       (back_comment): If find_defun_start was pessimistic, use the
+       scan_sexps_forward result to improve the cache (bug#16526).
+
+2014-07-09  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (redisplay_window): If redisplay of a window ends up
+       with point in a partially visible line at end of the window, make
+       sure the amended position of point actually has smaller Y
+       coordinate; if not, give up and scroll the display.  (Bug#17905)
+
+       * window.c (window_scroll_pixel_based): When point ends up at the
+       last fully visible line, don't let move_it_to stop at the left
+       edge of the line and dupe us into thinking point is inside the
+       scroll margin.
+
+       * w32.c (network_interface_info): Make sure the argument is a
+       Lisp string.
+
 2014-07-08  Paul Eggert  <address@hidden>
 
        * process.c (read_and_dispose_of_process_output): Fix typo

=== modified file 'src/syntax.c'
--- a/src/syntax.c      2014-02-08 05:12:47 +0000
+++ b/src/syntax.c      2014-07-05 02:17:14 +0000
@@ -530,17 +530,6 @@
 {
   ptrdiff_t opoint = PT, opoint_byte = PT_BYTE;
 
-  if (!open_paren_in_column_0_is_defun_start)
-    {
-      find_start_value = BEGV;
-      find_start_value_byte = BEGV_BYTE;
-      find_start_buffer = current_buffer;
-      find_start_modiff = MODIFF;
-      find_start_begv = BEGV;
-      find_start_pos = pos;
-      return BEGV;
-    }
-
   /* Use previous finding, if it's valid and applies to this inquiry.  */
   if (current_buffer == find_start_buffer
       /* Reuse the defun-start even if POS is a little farther on.
@@ -552,6 +541,13 @@
       && MODIFF == find_start_modiff)
     return find_start_value;
 
+  if (!open_paren_in_column_0_is_defun_start)
+    {
+      find_start_value = BEGV;
+      find_start_value_byte = BEGV_BYTE;
+      goto found;
+    }
+
   /* Back up to start of line.  */
   scan_newline (pos, pos_byte, BEGV, BEGV_BYTE, -1, 1);
 
@@ -582,13 +578,14 @@
   /* Record what we found, for the next try.  */
   find_start_value = PT;
   find_start_value_byte = PT_BYTE;
+  TEMP_SET_PT_BOTH (opoint, opoint_byte);
+
+ found:
   find_start_buffer = current_buffer;
   find_start_modiff = MODIFF;
   find_start_begv = BEGV;
   find_start_pos = pos;
 
-  TEMP_SET_PT_BOTH (opoint, opoint_byte);
-
   return find_start_value;
 }
 
@@ -841,7 +838,9 @@
   else
     {
       struct lisp_parse_state state;
+      bool adjusted;
     lossage:
+      adjusted = true;
       /* We had two kinds of string delimiters mixed up
         together.  Decode this going forwards.
         Scan fwd from a known safe place (beginning-of-defun)
@@ -852,6 +851,7 @@
        {
          defun_start = find_defun_start (comment_end, comment_end_byte);
          defun_start_byte = find_start_value_byte;
+         adjusted = (defun_start > BEGV);
        }
       do
        {
@@ -860,6 +860,16 @@
                              comment_end, TYPE_MINIMUM (EMACS_INT),
                              0, Qnil, 0);
          defun_start = comment_end;
+         if (!adjusted)
+           {
+             adjusted = true;
+             find_start_value
+               = CONSP (state.levelstarts) ? XINT (XCAR (state.levelstarts))
+               : state.thislevelstart >= 0 ? state.thislevelstart
+               : find_start_value;
+             find_start_value_byte = CHAR_TO_BYTE (find_start_value);
+           }
+
          if (state.incomment == (comnested ? 1 : -1)
              && state.comstyle == comstyle)
            from = state.comstr_start;

=== modified file 'src/w32.c'
--- a/src/w32.c 2014-05-26 16:55:28 +0000
+++ b/src/w32.c 2014-07-09 02:04:12 +0000
@@ -8612,6 +8612,7 @@
 Lisp_Object
 network_interface_info (Lisp_Object ifname)
 {
+  CHECK_STRING (ifname);
   return network_interface_get_info (ifname);
 }
 

=== modified file 'src/window.c'
--- a/src/window.c      2014-06-17 16:09:19 +0000
+++ b/src/window.c      2014-07-09 02:04:12 +0000
@@ -5161,6 +5161,32 @@
       charpos = IT_CHARPOS (it);
       bytepos = IT_BYTEPOS (it);
 
+      /* If PT is in the screen line at the last fully visible line,
+        move_it_to will stop at X = 0 in that line, because the
+        required Y coordinate is reached there.  See if we can get to
+        PT without descending lower in Y, and if we can, it means we
+        reached PT before the scroll margin.  */
+      if (charpos != PT)
+       {
+         struct it it2;
+         void *it_data;
+
+         it2 = it;
+         it_data = bidi_shelve_cache ();
+         move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
+         if (IT_CHARPOS (it) == PT && it.current_y == it2.current_y)
+           {
+             charpos = IT_CHARPOS (it);
+             bytepos = IT_BYTEPOS (it);
+             bidi_unshelve_cache (it_data, 1);
+           }
+         else
+           {
+             it = it2;
+             bidi_unshelve_cache (it_data, 0);
+           }
+       }
+
       /* See if point is on a partially visible line at the end.  */
       if (it.what == IT_EOB)
        partial_p = it.current_y + it.ascent + it.descent > it.last_visible_y;

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2014-07-03 18:12:41 +0000
+++ b/src/xdisp.c       2014-07-09 02:04:12 +0000
@@ -1436,7 +1436,7 @@
              (charpos >= 0 ? MOVE_TO_POS : 0) | MOVE_TO_Y);
 
   if (charpos >= 0
-      && (((!it.bidi_p || it.bidi_it.scan_dir == 1)
+      && (((!it.bidi_p || it.bidi_it.scan_dir != -1)
           && IT_CHARPOS (it) >= charpos)
          /* When scanning backwards under bidi iteration, move_it_to
             stops at or _before_ CHARPOS, because it stops at or to
@@ -1585,7 +1585,8 @@
                  /* Move to the last buffer position before the
                     display property.  */
                  start_display (&it3, w, top);
-                 move_it_to (&it3, start - 1, -1, -1, -1, MOVE_TO_POS);
+                 if (start > CHARPOS (top))
+                   move_it_to (&it3, start - 1, -1, -1, -1, MOVE_TO_POS);
                  /* Move forward one more line if the position before
                     the display string is a newline or if it is the
                     rightmost character on a line that is
@@ -1688,7 +1689,9 @@
     }
   else
     {
-      /* We were asked to provide info about WINDOW_END.  */
+      /* Either we were asked to provide info about WINDOW_END, or
+        CHARPOS is in the partially visible glyph row at end of
+        window.  */
       struct it it2;
       void *it2data = NULL;
 
@@ -9247,6 +9250,25 @@
                {
                  line_start_x = it->current_x + it->pixel_width
                    - it->last_visible_x;
+                 if (FRAME_WINDOW_P (it->f))
+                   {
+                     struct face *face = FACE_FROM_ID (it->f, it->face_id);
+                     struct font *face_font = face->font;
+
+                     /* When display_line produces a continued line
+                        that ends in a TAB, it skips a tab stop that
+                        is closer than the font's space character
+                        width (see x_produce_glyphs where it produces
+                        the stretch glyph which represents a TAB).
+                        We need to reproduce the same logic here.  */
+                     eassert (face_font);
+                     if (face_font)
+                       {
+                         if (line_start_x < face_font->space_width)
+                           line_start_x
+                             += it->tab_width * face_font->space_width;
+                       }
+                   }
                  set_iterator_to_next (it, 0);
                }
            }
@@ -16088,6 +16110,18 @@
          /* Point does appear, but on a line partly visible at end of window.
             Move it back to a fully-visible line.  */
          new_vpos = window_box_height (w);
+         /* But if window_box_height suggests a Y coordinate that is
+            not less than we already have, that line will clearly not
+            be fully visible, so give up and scroll the display.
+            This can happen when the default face uses a font whose
+            dimensions are different from the frame's default
+            font.  */
+         if (new_vpos >= w->cursor.y)
+           {
+             w->cursor.vpos = -1;
+             clear_glyph_matrix (w->desired_matrix);
+             goto try_to_scroll;
+           }
        }
       else if (w->cursor.vpos >= 0)
        {

=== modified file 'test/indent/shell.sh'
--- a/test/indent/shell.sh      2014-06-24 20:16:10 +0000
+++ b/test/indent/shell.sh      2014-07-08 18:38:07 +0000
@@ -41,6 +41,12 @@
     }
 done
 
+for foo in bar; do              # bug#17896
+    [ -e $foo ] && [ -e $bar ] && {
+        echo just fine thanks
+    }
+done
+
 filter_3 ()                     # bug#17842
 {
     tr -d '"`' | tr '  ' ' ' | \


reply via email to

[Prev in Thread] Current Thread [Next in Thread]