diff options
author | Glenn Morris <rgm@gnu.org> | 2014-07-08 19:04:12 -0700 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2014-07-08 19:04:12 -0700 |
commit | 5613a6f6d52bca0018c5777aba67a99f51016a35 (patch) | |
tree | c070100c79442ae2f9876f82af4eeebadc39249c | |
parent | 27e81f9f4e368176a3b17ceeadd2e0aa5dd9d1ed (diff) | |
parent | d8899d09b992d733dc1cc6ec93b11cb75ce84f5d (diff) | |
download | emacs-5613a6f6d52bca0018c5777aba67a99f51016a35.tar.gz |
Merge from emacs-24; up to 2014-06-19T14:03:45Z!monnier@iro.umontreal.ca
-rw-r--r-- | doc/emacs/ChangeLog | 5 | ||||
-rw-r--r-- | doc/emacs/search.texi | 13 | ||||
-rw-r--r-- | doc/lispref/ChangeLog | 5 | ||||
-rw-r--r-- | doc/lispref/debugging.texi | 19 | ||||
-rw-r--r-- | doc/misc/ChangeLog | 6 | ||||
-rw-r--r-- | doc/misc/todo-mode.texi | 9 | ||||
-rw-r--r-- | etc/NEWS | 15 | ||||
-rw-r--r-- | etc/TODO | 57 | ||||
-rw-r--r-- | lisp/ChangeLog | 63 | ||||
-rw-r--r-- | lisp/calendar/todo-mode.el | 139 | ||||
-rw-r--r-- | lisp/desktop.el | 2 | ||||
-rw-r--r-- | lisp/emacs-lisp/edebug.el | 2 | ||||
-rw-r--r-- | lisp/emulation/cua-rect.el | 8 | ||||
-rw-r--r-- | lisp/facemenu.el | 2 | ||||
-rw-r--r-- | lisp/faces.el | 9 | ||||
-rw-r--r-- | lisp/progmodes/octave.el | 7 | ||||
-rw-r--r-- | lisp/progmodes/ruby-mode.el | 1 | ||||
-rw-r--r-- | lisp/progmodes/sh-script.el | 7 | ||||
-rw-r--r-- | lisp/startup.el | 25 | ||||
-rw-r--r-- | src/ChangeLog | 34 | ||||
-rw-r--r-- | src/syntax.c | 36 | ||||
-rw-r--r-- | src/w32.c | 1 | ||||
-rw-r--r-- | src/window.c | 26 | ||||
-rw-r--r-- | src/xdisp.c | 40 | ||||
-rwxr-xr-x | test/indent/shell.sh | 6 |
25 files changed, 345 insertions, 192 deletions
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 76d692ae9a6..a9c4995d49b 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2014-07-09 Juri Linkov <juri@jurta.org> + + * 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 <rgm@gnu.org> * help.texi (Misc Help): diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index 5331f7da1b9..64ecf165349 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -602,12 +602,13 @@ Incremental regexp and non-regexp searches have independent defaults. 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. -@xref{Special 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 +@code{search-whitespace-regexp} 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 diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index cc372b006ed..c15bbebbe59 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2014-07-09 Stefan Monnier <monnier@iro.umontreal.ca> + + * debugging.texi (Function Debugging, Debugger Commands): + Update debug-on-entry w.r.t behavior after redefinitions (bug#17902). + 2014-07-03 Glenn Morris <rgm@gnu.org> * help.texi (Help Functions): "Online" help doesn't mean what it diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi index a9d0c1c4ed0..66f12a022cb 100644 --- a/doc/lispref/debugging.texi +++ b/doc/lispref/debugging.texi @@ -226,9 +226,7 @@ function, and then step through its caller. @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 -@code{(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 @@ When @code{debug-on-entry} is called interactively, it prompts for up to invoke the debugger on entry, @code{debug-on-entry} does nothing. @code{debug-on-entry} always returns @var{function-name}. -@strong{Warning:} if you redefine a function after using -@code{debug-on-entry} 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 @@ Debugger entered--entering a function: ------ Buffer: *Backtrace* ------ @end group -@group -(symbol-function 'fact) - @result{} (lambda (n) - (debug (quote debug)) - (if (zerop n) 1 (* n (fact (1- n))))) -@end group @end example @end deffn @@ -461,9 +448,7 @@ You can't use @kbd{r} when the debugger was entered due to an error. @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 -@code{debug-on-entry}. @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. +@code{debug-on-entry}. @item v Toggle the display of local variables of the current stack frame. diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 6726007c6d8..44c2272a63d 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,9 @@ +2014-07-09 Stephen Berman <stephen.berman@gmx.net> + + * 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 <michael.albinus@gmx.de> * trampver.texi: Update release number. diff --git a/doc/misc/todo-mode.texi b/doc/misc/todo-mode.texi index 2b119f516f2..bb2aea21ac2 100644 --- a/doc/misc/todo-mode.texi +++ b/doc/misc/todo-mode.texi @@ -158,11 +158,10 @@ you want. 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}). +@c Emacs recognizes Todo files by their extension, so when you visit +@c the files the buffer is in the appropriate mode and the current +@c 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 @@ -1166,11 +1166,11 @@ The new optional CHECK-TIMERS parameter allows for the prior behavior. 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 @@ edited in another Emacs session or by another user. See the node "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 @@ -167,14 +167,6 @@ http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00782.html ** 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 @@ Perspectives also need to interact with the tabs. ** 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 @@ scroll bars are extensible. 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 @@ specified filters, specified timers, and specified hooks. 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 @@ http://lists.gnu.org/archive/html/emacs-devel/2009-04/msg00034.html ** 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 @@ rather than interactively. This a trivial one-liner in easy-mode.el. 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 @@ rather than interactively. This a trivial one-liner in easy-mode.el. 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 @@ rather than interactively. This a trivial one-liner in easy-mode.el. 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 @@ preferring the ImageMagick loader? The user might like zooming etc in jpegs. 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 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0158ce91aea..f50993e2131 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,66 @@ +2014-07-09 Stefan Monnier <monnier@iro.umontreal.ca> + + * 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 <juri@jurta.org> + + * 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 <rgm@gnu.org> + + * emulation/cua-rect.el (cua--activate-rectangle): + Avoid setting cua--rectangle to nil. (Bug#17877) + +2014-07-09 Stephen Berman <stephen.berman@gmx.net> + + * 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 <monnier@iro.umontreal.ca> + + * 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 <stephen.berman@gmx.net> + + * 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 <monnier@iro.umontreal.ca> + + * progmodes/octave.el (inferior-octave-mode): + Set comint-input-ring-size to a number (bug#17912). + +2014-07-09 Juri Linkov <juri@jurta.org> + + * desktop.el (desktop-minor-mode-table): Add `defining-kbd-macro' + and `isearch-mode' associated with nil. (Bug#17849) + 2014-07-08 Stefan Monnier <monnier@iro.umontreal.ca> * linum.el (linum--face-height): New function (bug#17813). diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el index 759b7773713..7429819adc9 100644 --- a/lisp/calendar/todo-mode.el +++ b/lisp/calendar/todo-mode.el @@ -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 @@ means prompt user and omit comment only on confirmation." (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 @@ marking of the next N items." (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 @@ regexp items." (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 @@ multifile commands for further details." (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 @@ multifile commands for further details." (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)) diff --git a/lisp/desktop.el b/lisp/desktop.el index 4bb6fba3532..12207f3cdac 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -528,6 +528,8 @@ Furthermore the major mode function must be autoloaded.") (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) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index e2d38ffe858..892fa7f2d37 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -497,7 +497,7 @@ the minibuffer." (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))) diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el index d516bd4c7cc..31dd137a6b9 100644 --- a/lisp/emulation/cua-rect.el +++ b/lisp/emulation/cua-rect.el @@ -726,11 +726,11 @@ If command is repeated at same position, delete the rectangle." ;; 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)) diff --git a/lisp/facemenu.el b/lisp/facemenu.el index 24613ecd236..678aca24c12 100644 --- a/lisp/facemenu.el +++ b/lisp/facemenu.el @@ -620,7 +620,7 @@ color. The function should accept a single argument, the color name." '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 diff --git a/lisp/faces.el b/lisp/faces.el index d8b3c7a6b0f..bb77af0425e 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -370,7 +370,10 @@ If `inhibit-x-resources' is non-nil, this function does nothing." (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 @@ If PATTERN is nil, return the name of the frame's base font, which never 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 diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index 3fdcec219d3..25b081545a3 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el @@ -747,9 +747,10 @@ Key bindings: (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) diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 3c20279600e..2f23e338f81 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -749,7 +749,6 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'." :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) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index eb6a55689c1..dd1057ebf8d 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -2012,9 +2012,10 @@ May return nil if the line should not be treated as continued." (<= 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 diff --git a/lisp/startup.el b/lisp/startup.el index aa448848cea..d984e6269ae 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1182,18 +1182,25 @@ please check its value") (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) diff --git a/src/ChangeLog b/src/ChangeLog index 4c4ca3a5e00..ba56edda715 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,37 @@ +2014-07-09 Eli Zaretskii <eliz@gnu.org> + + * 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 <monnier@iro.umontreal.ca> + + * 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 <eliz@gnu.org> + + * 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 <eggert@cs.ucla.edu> * process.c (read_and_dispose_of_process_output): Fix typo diff --git a/src/syntax.c b/src/syntax.c index f2451332b19..0ee48bb3725 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -530,17 +530,6 @@ find_defun_start (ptrdiff_t pos, ptrdiff_t pos_byte) { 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 @@ find_defun_start (ptrdiff_t pos, ptrdiff_t pos_byte) && 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 @@ find_defun_start (ptrdiff_t pos, ptrdiff_t pos_byte) /* 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 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop, 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 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop, { 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 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop, 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; diff --git a/src/w32.c b/src/w32.c index 4643fc7fbec..c5d4aa0fe8e 100644 --- a/src/w32.c +++ b/src/w32.c @@ -8612,6 +8612,7 @@ network_interface_list (void) Lisp_Object network_interface_info (Lisp_Object ifname) { + CHECK_STRING (ifname); return network_interface_get_info (ifname); } diff --git a/src/window.c b/src/window.c index 8a608433ed7..6afe7454149 100644 --- a/src/window.c +++ b/src/window.c @@ -5161,6 +5161,32 @@ window_scroll_pixel_based (Lisp_Object window, int n, bool whole, int noerror) 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; diff --git a/src/xdisp.c b/src/xdisp.c index 6cec0bf1925..6b2fa4be846 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1436,7 +1436,7 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, (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 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, /* 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 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, } 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 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos { 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 @@ redisplay_window (Lisp_Object window, bool just_this_one_p) /* 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) { diff --git a/test/indent/shell.sh b/test/indent/shell.sh index 4a30739e2d9..e3619057d6e 100755 --- a/test/indent/shell.sh +++ b/test/indent/shell.sh @@ -41,6 +41,12 @@ for foo in bar; do # bug#17721 } done +for foo in bar; do # bug#17896 + [ -e $foo ] && [ -e $bar ] && { + echo just fine thanks + } +done + filter_3 () # bug#17842 { tr -d '"`' | tr ' ' ' ' | \ |