diff options
36 files changed, 401 insertions, 114 deletions
diff --git a/ChangeLog b/ChangeLog index 412b840a55e..32fde8b0c4c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-06-21 Paul Eggert <eggert@cs.ucla.edu> + + * configure.ac: Warn about --enable-link-time-optimization's issues + in --help message (Bug#17806). + + Port to GCC 4.9.0 with link time optimization (Bug#17806). + * configure.ac (CFLAGS): With link time optimization, + use -ffat-lto-objects if supported; otherwise Emacs won't + build with GCC 4.9.0. + 2014-06-20 Paul Eggert <eggert@cs.ucla.edu> Diagnose failures due to colons in directory names (Bug#17278). diff --git a/admin/ChangeLog b/admin/ChangeLog index 02d8dc08eac..dc128325523 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,8 @@ +2014-06-21 Stephen Berman <Stephen.Berman@gmx.net> + + * notes/elpa: Use "git" instead of "bzr" in the name of machine to + clone the repository from. + 2014-06-13 Glenn Morris <rgm@gnu.org> * unidata/Makefile.in (${DSTDIR}/charprop.el): diff --git a/admin/notes/elpa b/admin/notes/elpa index 469a0ca8bd1..39226044a91 100644 --- a/admin/notes/elpa +++ b/admin/notes/elpa @@ -3,9 +3,9 @@ NOTES ON THE EMACS PACKAGE ARCHIVE The GNU Emacs package archive, at elpa.gnu.org, is managed using a Git repository named "elpa", hosted on Savannah. To check it out: - git clone git://bzr.sv.gnu.org/emacs/elpa + git clone git://git.sv.gnu.org/emacs/elpa cd elpa - git remote set-url --push origin git+ssh://bzr.sv.gnu.org/srv/git/emacs/elpa + git remote set-url --push origin git+ssh://git.sv.gnu.org/srv/git/emacs/elpa [create task branch for edits, etc.] Changes to this branch propagate to elpa.gnu.org via a "deployment" script run diff --git a/configure.ac b/configure.ac index c4ca395d6d1..b253d2465fa 100644 --- a/configure.ac +++ b/configure.ac @@ -931,8 +931,11 @@ edit_cflags=" AC_ARG_ENABLE(link-time-optimization, [AS_HELP_STRING([--enable-link-time-optimization], [build emacs with link-time optimization. - This is supported for gcc since 4.5.0 and clang. - Note that clang support is experimental - see INSTALL])], + This requires GCC 4.5.0 or later, or clang. + (Note that clang support is experimental - see INSTALL.) + It also makes Emacs harder to debug, and when we tried it + with GCC 4.9.0 x86-64 it made Emacs slower, so it's not + recommended for typical use.])], if test "${enableval}" != "no"; then ac_lto_supported=no if test $emacs_cv_clang = yes; then @@ -970,6 +973,13 @@ if test "${enableval}" != "no"; then # command, so plugin name is appended to ARFLAGS. ARFLAGS="cru --plugin $GOLD_PLUGIN" RANLIB="$RANLIB --plugin $GOLD_PLUGIN" + else + dnl The following is needed for GCC 4.9.0. The GCC 4.9.0 release notes + dnl suggest that instead of -ffat-lto-objects we should use gcc-ar and + dnl gcc-ranlib in place of ar and ranlib, but gcc-ar makes /usr/bin/ar + dnl dump core on Fedora 20, so play it safe for now. + gl_COMPILER_OPTION_IF([-ffat-lto-objects], + [CFLAGS="$CFLAGS -ffat-lto-objects"]) fi fi fi) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 4089068c906..3b7ca9c7288 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * positions.texi (Screen Lines): Clarify how columns are counted + by vertical-motion. + 2014-06-15 Glenn Morris <rgm@gnu.org> * Makefile.in (bootstrap-clean): New. diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi index 5a77b37e7e1..e32f0ef0b34 100644 --- a/doc/lispref/positions.texi +++ b/doc/lispref/positions.texi @@ -500,7 +500,11 @@ is negative, it moves up instead. The @var{count} argument can be a cons cell, @code{(@var{cols} . @var{lines})}, instead of an integer. Then the function moves by @var{lines} screen lines, and puts point @var{cols} columns from the -start of that screen line. +visual start of that screen line. Note that @var{cols} are counted +from the @emph{visual} start of the line; if the window is scrolled +horizontally (@pxref{Horizontal Scrolling}), the column on which point +will end is in addition to the number of columns by which the text is +scrolled. The return value is the number of screen lines over which point was moved. The value may be less in absolute value than @var{count} if diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index a6ddb15496d..a1a99e5fd06 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,12 @@ +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * autotype.texi (Skeleton Language): Document the feature of \n + when at eol. + +2014-06-21 Michael Albinus <michael.albinus@gmx.de> + + * dbus.texi (Type Conversion): Formatting edits in example. + 2014-06-15 Michael Albinus <michael.albinus@gmx.de> Sync with Tramp 2.2.10. diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi index 04f74cc44cb..e0fce74bd3f 100644 --- a/doc/misc/autotype.texi +++ b/doc/misc/autotype.texi @@ -232,8 +232,11 @@ Insert string or character. Literal strings and characters are passed through @code{skeleton-transformation} when that is non-@code{nil}. @item @code{?\n} @c ??? something seems very wrong here. -Insert a newline and align under current line. Use newline character -@code{?\n} to prevent alignment. +Insert a newline and align under current line, but not if this is the +last element of a skeleton and the newline would be inserted at end of +line. Use newline character @code{?\n} to prevent alignment. Use +@code{"\n"} as the last string element of a skeleton to insert a +newline after the skeleton unconditionally. @item @code{_} Interesting point. When wrapping skeletons around successive regions, they are put at these places. Point is left at first @code{_} where nothing is wrapped. diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi index e7f822498b6..0c19cb963e7 100644 --- a/doc/misc/dbus.texi +++ b/doc/misc/dbus.texi @@ -1060,11 +1060,11 @@ elements of this array. Example: "" ;; No icon. "Notification summary" ;; Summary. (format ;; Body. - "This is a test notification, raised from %s" (emacs-version)) + "This is a test notification, raised from\n%S" (emacs-version)) '(:array) ;; No actions (empty array of strings). '(:array :signature "@{sv@}") ;; No hints ;; (empty array of dictionary entries). - :int32 -1) ;; Default timeout. + :int32 -1) ;; Default timeout. @result{} 3 @end lisp diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d8146a96312..95c3566dd5b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,98 @@ +2014-06-21 Fabián Ezequiel Gallina <fgallina@gnu.org> + + Fix completion retrieval parsing (bug#17209). + * progmodes/python.el (python-mode): + (python-util-strip-string): New function. + (python-shell-completion-get-completions): Use it. + +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * skeleton.el (skeleton-insert): Fix last change. + +2014-06-21 Fabián Ezequiel Gallina <fgallina@gnu.org> + + Enhancements for outline integration (bug#17796). + * progmodes/python.el (python-mode): Properly set + outline-heading-end-regexp so that comments after colons for + defuns are supported. + +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * skeleton.el (skeleton-insert): Doc fix. + +2014-06-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * emacs-lisp/smie.el (smie-config--guess): Fix typo. + (smie-config-guess): Use smie-config-local so the rules are obeyed + (bug#17818). + + * mouse.el (mouse-drag-line): Don't re-add to unread-comment-events, + since it's already done inside the loop (bug#17819). + +2014-06-21 Martin Rudalics <rudalics@gmx.at> + + * mouse.el (mouse-drag-line): Re-remove code initially removed + on 2013-03-09 and inadvertently reintroduced on 2013-11-30 + (Bug#17819). + +2014-06-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * progmodes/sh-script.el (sh-smie-sh-rules): For { after &&, don't + align with the surrounding parent (bug#17721). + +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * textmodes/texinfo.el (texinfo-mode): Set skeleton-end-newline + locally to nil. + (texinfo-insert-block, texinfo-insert-@end) + (texinfo-insert-@example, texinfo-insert-@quotation): Adjust to + local setting of skeleton-end-newline by adding an explicit \n to + the skeletons where appropriate. (Bug#17801) + +2014-06-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * emacs-lisp/smie.el (smie--hanging-eolp-function): New var. + (smie-indent--hanging-p): Use it. + * progmodes/sh-script.el (sh-set-shell): Set it (bug#17621). + +2014-06-21 Leo Liu <sdl.web@gmail.com> + + * simple.el (read-quoted-char): Don't let help chars pop up help + buffer. (Bug#16617) + +2014-06-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * progmodes/sh-script.el (sh-smie-sh-rules): Use same rule for && as + for | (bug#17621). + + * xt-mouse.el (xterm-mouse--read-event-sequence-1000): + Drop unknown events instead of burping. + +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * term/w32-win.el (dynamic-library-alist): Support giflib 5.1.0 + and later. (Bug#17790) + +2014-06-21 Juri Linkov <juri@jurta.org> + + * dired.el (dired-mark-pop-up): Let-bind display-buffer-mark-dedicated + to `soft'. (Bug#17554) + +2014-06-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * delsel.el (electric-newline-and-maybe-indent): Mark it as well + (bug#17737). + +2014-06-21 Dmitry Gutov <dgutov@yandex.ru> + + * progmodes/ruby-mode.el (ruby-font-lock-keywords): Don't fontify + `!' in `!~' with `font-lock-negation-char-face'. (Bug#17732) + +2014-06-21 Michael Albinus <michael.albinus@gmx.de> + + * net/dbus.el (dbus-call-method): Push only non D-Bus events into + `unread-command-events'. + 2014-06-19 William Xu <william.xwl@gmail.com> * progmodes/hideif.el (hif-string-to-number): Don't return float for diff --git a/lisp/delsel.el b/lisp/delsel.el index ab71e606444..1ada02705fe 100644 --- a/lisp/delsel.el +++ b/lisp/delsel.el @@ -188,6 +188,7 @@ See `delete-selection-helper'." (put 'reindent-then-newline-and-indent 'delete-selection t) (put 'newline-and-indent 'delete-selection t) (put 'newline 'delete-selection t) +(put 'electric-newline-and-maybe-indent 'delete-selection t) (put 'open-line 'delete-selection 'kill) ;; This is very useful for canceling a selection in the minibuffer without diff --git a/lisp/dired.el b/lisp/dired.el index fc90b7a98e0..a241fb3b339 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -3099,7 +3099,10 @@ argument or confirmation)." ;; If FILES defaulted to the current line's file. (= (length files) 1)) (apply function args) - (let ((buffer (get-buffer-create (or buffer-or-name " *Marked Files*")))) + (let ((buffer (get-buffer-create (or buffer-or-name " *Marked Files*"))) + ;; Mark *Marked Files* window as softly-dedicated, to prevent + ;; other buffers e.g. *Completions* from reusing it (bug#17554). + (display-buffer-mark-dedicated 'soft)) (with-current-buffer buffer (with-current-buffer-window buffer diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index 3e40d37aacf..1819daa3df0 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -1155,6 +1155,15 @@ NUMBER offset by NUMBER, relative to a base token The functions whose name starts with \"smie-rule-\" are helper functions designed specifically for use in this function.") +(defvar smie--hanging-eolp-function + ;; FIXME: This is a quick hack for 24.4. Don't document it and replace with + ;; a well-defined function with a cleaner interface instead! + (lambda () + (skip-chars-forward " \t") + (or (eolp) + (and ;; (looking-at comment-start-skip) ;(bug#16041). + (forward-comment (point-max)))))) + (defalias 'smie-rule-hanging-p 'smie-indent--hanging-p) (defun smie-indent--hanging-p () "Return non-nil if the current token is \"hanging\". @@ -1168,10 +1177,7 @@ the beginning of a line." (not (eobp)) ;; Could be an open-paren. (forward-char 1)) - (skip-chars-forward " \t") - (or (eolp) - (and ;; (looking-at comment-start-skip) ;(bug#16041). - (forward-comment (point-max)))) + (funcall smie--hanging-eolp-function) (point)))))) (defalias 'smie-rule-bolp 'smie-indent--bolp) @@ -2132,7 +2138,7 @@ position corresponding to each rule." nil (push (cons (+ offset (nth 2 sig)) sig) rules) ;; Adjust the rest of the data. - (pcase-dolist ((and cotrace `(,count ,toffset ,trace)) + (pcase-dolist ((and cotrace `(,count ,toffset . ,trace)) cotraces) (setf (nth 1 cotrace) (- toffset offset)) (dolist (sig trace) @@ -2161,15 +2167,14 @@ To save the result for future sessions, use `smie-config-save'." (cond ((null config) (message "Nothing to change")) ((null smie-config--buffer-local) - (message "Local rules set") - (setq smie-config--buffer-local config)) + (smie-config-local config) + (message "Local rules set")) ((y-or-n-p "Replace existing local config? ") (message "Local rules replaced") - (setq smie-config--buffer-local config)) + (smie-config-local config)) ((y-or-n-p "Merge with existing local config? ") (message "Local rules adjusted") - (setq smie-config--buffer-local - (append config smie-config--buffer-local))) + (smie-config-local (append config smie-config--buffer-local))) (t (message "Rules guessed: %S" config))))) diff --git a/lisp/mouse.el b/lisp/mouse.el index ca9ea5dadca..f5a09f45a07 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -390,8 +390,6 @@ must be one of the symbols `header', `mode', or `vertical'." (window (posn-window start)) (frame (window-frame window)) (minibuffer-window (minibuffer-window frame)) - (on-link (and mouse-1-click-follows-link - (mouse-on-link-p start))) (side (and (eq line 'vertical) (or (cdr (assq 'vertical-scroll-bars (frame-parameters frame))) @@ -487,15 +485,7 @@ must be one of the symbols `header', `mode', or `vertical'." (unless (zerop growth) (setq dragged t) (adjust-window-trailing-edge - window (if (eq line 'mode) growth (- growth)) nil t)))))) - ;; Process the terminating event. - (when (and (mouse-event-p event) on-link (not dragged) - (mouse--remap-link-click-p start-event event)) - ;; If mouse-2 has never been done by the user, it doesn't have - ;; the necessary property to be interpreted correctly. - (put 'mouse-2 'event-kind 'mouse-click) - (setcar event 'mouse-2) - (push event unread-command-events)))) + window (if (eq line 'mode) growth (- growth)) nil t)))))))) (defun mouse-drag-mode-line (start-event) "Change the height of a window by dragging on the mode line." diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el index 7f230a9d2ab..66170dafef8 100644 --- a/lisp/net/dbus.el +++ b/lisp/net/dbus.el @@ -318,10 +318,12 @@ object is returned instead of a list containing this single Lisp object. (while (eq (car result) :pending) (let ((event (let ((inhibit-redisplay t) unread-command-events) (read-event nil nil check-interval)))) - (when event - (setf unread-command-events - (nconc unread-command-events - (cons event nil)))) + (when event + (if (ignore-errors (dbus-check-event event)) + (setf result (gethash key dbus-return-values-table)) + (setf unread-command-events + (nconc unread-command-events + (cons event nil))))) (when (< check-interval 1) (setf check-interval (* check-interval 1.05)))))) (when (eq (car result) :error) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 91a85526420..743981b3714 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -2461,8 +2461,10 @@ LINE is used to detect the context on how to complete given INPUT." (and completion-code (> (length input) 0) (with-current-buffer (process-buffer process) - (let ((completions (python-shell-send-string-no-output - (format completion-code input) process))) + (let ((completions + (python-util-strip-string + (python-shell-send-string-no-output + (format completion-code input) process)))) (and (> (length completions) 2) (split-string completions "^'\\|^\"\\|;\\|'$\\|\"$" t))))))) @@ -3648,6 +3650,14 @@ returned as is." n (1- n))) (reverse acc)))) +(defun python-util-strip-string (string) + "Strip STRING whitespace and newlines from end and beginning." + (replace-regexp-in-string + (rx (or (: string-start (* (any whitespace ?\r ?\n))) + (: (* (any whitespace ?\r ?\n)) string-end))) + "" + string)) + (defun python-electric-pair-string-delimiter () (when (and electric-pair-mode @@ -3736,7 +3746,7 @@ returned as is." (set (make-local-variable 'outline-regexp) (python-rx (* space) block-start)) - (set (make-local-variable 'outline-heading-end-regexp) ":\\s-*\n") + (set (make-local-variable 'outline-heading-end-regexp) ":[^\n]*\n") (set (make-local-variable 'outline-level) #'(lambda () "`outline-level' function for Python mode." diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 74edf7a680f..3c20279600e 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -2152,7 +2152,7 @@ See `font-lock-syntax-table'.") (ruby-match-expression-expansion 2 font-lock-variable-name-face t) ;; Negation char. - ("\\(?:^\\|[^[:alnum:]_]\\)\\(!+\\)[^=]" + ("\\(?:^\\|[^[:alnum:]_]\\)\\(!+\\)[^=~]" 1 font-lock-negation-char-face) ;; Character literals. ;; FIXME: Support longer escape sequences. diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index b4148ef5621..c3032b4f195 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -1975,7 +1975,11 @@ May return nil if the line should not be treated as continued." (<= indent initial)) `(column . ,(+ initial sh-indentation))))) (`(:before . ,(or `"(" `"{" `"[")) - (if (smie-rule-hanging-p) (smie-rule-parent))) + (when (smie-rule-hanging-p) + (if (not (smie-rule-prev-p "&&" "||" "|")) + (smie-rule-parent) + (smie-backward-sexp 'halfexp) + `(column . ,(smie-indent-virtual))))) ;; FIXME: Maybe this handling of ;; should be made into ;; a smie-rule-terminator function that takes the substitute ";" as arg. (`(:before . ,(or `";;" `";&" `";;&")) @@ -1993,7 +1997,7 @@ May return nil if the line should not be treated as continued." (smie-rule-bolp)))) (current-column) (smie-indent-calculate))))) - (`(:after . "|") (if (smie-rule-parent-p "|") nil 4)) + (`(:after . ,(or `"|" `"&&" `"||")) (if (smie-rule-parent-p token) nil 4)) ;; Attempt at backward compatibility with the old config variables. (`(:before . "fi") (sh-var-value 'sh-indent-for-fi)) (`(:before . "done") (sh-var-value 'sh-indent-for-done)) @@ -2300,6 +2304,11 @@ Calls the value of `sh-set-shell-hook' if set." (let ((mksym (lambda (name) (intern (format "sh-smie-%s-%s" sh-indent-supported-here name))))) + (add-function :around (local 'smie--hanging-eolp-function) + (lambda (orig) + (if (looking-at "[ \t]*\\\\\n") + (goto-char (match-end 0)) + (funcall orig)))) (smie-setup (symbol-value (funcall mksym "grammar")) (funcall mksym "rules") :forward-token (funcall mksym "forward-token") diff --git a/lisp/simple.el b/lisp/simple.el index 031aac3a49c..63bfbb51419 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -658,11 +658,16 @@ any other terminator is used itself as input. The optional argument PROMPT specifies a string to use to prompt the user. The variable `read-quoted-char-radix' controls which radix to use for numeric input." - (let ((message-log-max nil) done (first t) (code 0) translated) + (let ((message-log-max nil) + (help-events (delq nil (mapcar (lambda (c) (unless (characterp c) c)) + help-event-list))) + done (first t) (code 0) translated) (while (not done) (let ((inhibit-quit first) - ;; Don't let C-h get the help message--only help function keys. + ;; Don't let C-h or other help chars get the help + ;; message--only help function keys. See bug#16617. (help-char nil) + (help-event-list help-events) (help-form "Type the special character you want to use, or the octal character code. diff --git a/lisp/skeleton.el b/lisp/skeleton.el index f85dc8ef068..28792ac558e 100644 --- a/lisp/skeleton.el +++ b/lisp/skeleton.el @@ -197,7 +197,8 @@ not needed, a prompt-string or an expression for complex read functions. If ELEMENT is a string or a character it gets inserted (see also `skeleton-transformation-function'). Other possibilities are: - \\n go to next line and indent according to mode + \\n if not the last element of the skeleton, or not at eol, + go to next line and indent according to mode _ interesting point, interregion here - interesting point, no interregion interaction, overrides interesting point set by _ @@ -212,6 +213,10 @@ If ELEMENT is a string or a character it gets inserted (see also After termination, point will be positioned at the last occurrence of - or at the first occurrence of _ or at the end of the inserted text. +Note that \\n as the last element of the skeleton only inserts a +newline if not at eol. If you want to unconditionally insert a newline +at the end of the skeleton, use \"\\n\" instead. + Further elements can be defined via `skeleton-further-elements'. ELEMENT may itself be a SKELETON with an INTERACTOR. The user is prompted repeatedly for different inputs. The SKELETON is processed as often as diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el index e2cabe5397d..e103562ba7a 100644 --- a/lisp/term/w32-win.el +++ b/lisp/term/w32-win.el @@ -251,13 +251,16 @@ This returns an error if any Emacs frames are X frames, or always under W32." ;; libraries according to the version of giflib we were ;; compiled against. (If we were compiled without GIF support, ;; libgif-version's value is -1.) - (if (>= libgif-version 50000) - ;; Yes, giflib 5.x uses 6 as the major version of the API, - ;; thus "libgif-6.dll" below (giflib 4.x used 5 as the - ;; major API version). - ;; giflib5.dll is from the lua-files project. - '(gif "libgif-6.dll" "giflib5.dll") - '(gif "libgif-5.dll" "giflib4.dll" "libungif4.dll" "libungif.dll")) + (if (>= libgif-version 50100) + ;; Yes, giflib 5.0 uses 6 as the major version of the API, + ;; and giflib 5.1 uses 7, thus "libgif-7.dll" and + ;; "libgif-6.dll" below (giflib 4.x used 5 as the major API + ;; version). giflib5.dll is from the lua-files project, + ;; and gif.dll is from luapower. + '(gif "libgif-7.dll") + (if (>= libgif-version 50000) + '(gif "libgif-6.dll" "giflib5.dll" "gif.dll") + '(gif "libgif-5.dll" "giflib4.dll" "libungif4.dll" "libungif.dll"))) '(svg "librsvg-2-2.dll") '(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll") '(glib "libglib-2.0-0.dll") diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el index 20d4d415254..1d085017214 100644 --- a/lisp/term/xterm.el +++ b/lisp/term/xterm.el @@ -606,8 +606,8 @@ The relevant features are: ;; Gnome terminal 2.32.1 reports 1;2802;0 (setq version 200)) (when (equal (match-string 1 str) "83") - ;; OSX's Terminal.app (version 2.3 (309), which returns 83;40003;0) - ;; seems to also lack support for some of these (bug#17607). + ;; `screen' (which returns 83;40003;0) seems to also lack support for + ;; some of these (bug#17607). (setq version 240)) ;; If version is 242 or higher, assume the xterm supports ;; reporting the background color (TODO: maybe earlier diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el index e1e2656275c..6f441d67b3c 100644 --- a/lisp/textmodes/texinfo.el +++ b/lisp/textmodes/texinfo.el @@ -44,6 +44,8 @@ (defvar outline-heading-alist) +(defvar skeleton-end-newline) + (defgroup texinfo nil "Texinfo Mode." :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces) @@ -626,6 +628,11 @@ value of `texinfo-mode-hook'." (setq-local tex-first-line-header-regexp "^\\\\input") (setq-local tex-trailer "@bye\n") + ;; Prevent skeleton.el from adding a newline to each inserted + ;; skeleton. Those which do want a newline do that explicitly in + ;; their define-skeleton form. + (setq-local skeleton-end-newline nil) + ;; Prevent filling certain lines, in addition to ones specified by ;; the user. (setq-local auto-fill-inhibit-regexp @@ -653,7 +660,7 @@ Puts point on a blank line between them." (if (or (string-match "\\`def" str) (member str '("table" "ftable" "vtable"))) '(nil " " -)) - \n _ \n "@end " str \n) + \n _ \n "@end " str \n \n) (defun texinfo-inside-macro-p (macro &optional bound) "Non-nil if inside a macro matching the regexp MACRO." @@ -732,7 +739,7 @@ With prefix argument or inside @code or @example, inserts a plain \"." (backward-word 1) (texinfo-last-unended-begin) (or (match-string 1) '-))) - \n "@end " str \n) + \n "@end " str \n \n) (define-skeleton texinfo-insert-braces "Make a pair of braces and be poised to type inside of them. @@ -771,7 +778,7 @@ The default is not to surround any existing words with the braces." (define-skeleton texinfo-insert-@example "Insert the string `@example' in a Texinfo buffer." nil - \n "@example" \n) + \n "@example" \n \n) (define-skeleton texinfo-insert-@file "Insert a `@file{...}' command in a Texinfo buffer. @@ -816,7 +823,7 @@ Leave point after `@node'." (define-skeleton texinfo-insert-@quotation "Insert the string `@quotation' in a Texinfo buffer." - \n "@quotation" \n) + \n "@quotation" \n _ \n) (define-skeleton texinfo-insert-@samp "Insert a `@samp{...}' command in a Texinfo buffer. diff --git a/lisp/window.el b/lisp/window.el index e9f4fd0b1d2..28dd6a8ab26 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -5966,7 +5966,7 @@ live." ;; FIXME: By the way, there could be more levels of dedication: ;; - `barely' dedicated doesn't prevent reuse of the window, only records that ;; the window hasn't been used for something else yet. -;; - `softly' dedicated only allows reuse when asked explicitly. +;; - `soft' (`softly') dedicated only allows reuse when asked explicitly. ;; - `strongly' never allows reuse. (defvar display-buffer-mark-dedicated nil "If non-nil, `display-buffer' marks the windows it creates as dedicated. diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el index 54fd1a44d5b..f9e89880dae 100644 --- a/lisp/xt-mouse.el +++ b/lisp/xt-mouse.el @@ -145,26 +145,25 @@ http://invisible-island.net/xterm/ctlseqs/ctlseqs.html)." (defun xterm-mouse--read-event-sequence-1000 () (let* ((code (- (read-event) 32)) (type - (intern - ;; For buttons > 3, the release-event looks differently - ;; (see xc/programs/xterm/button.c, function EditorButton), - ;; and come in a release-event only, no down-event. - (cond ((>= code 64) - (format "mouse-%d" (- code 60))) - ((memq code '(8 9 10)) - (format "M-down-mouse-%d" (- code 7))) - ((memq code '(3 11)) - (let ((down (car (terminal-parameter - nil 'xterm-mouse-last-down)))) - (when (and down (string-match "[0-9]" (symbol-name down))) - (format (if (eq code 3) "mouse-%s" "M-mouse-%s") - (match-string 0 (symbol-name down)))))) - ((memq code '(0 1 2)) - (format "down-mouse-%d" (+ 1 code)))))) + ;; For buttons > 3, the release-event looks differently + ;; (see xc/programs/xterm/button.c, function EditorButton), + ;; and come in a release-event only, no down-event. + (cond ((>= code 64) + (format "mouse-%d" (- code 60))) + ((memq code '(8 9 10)) + (format "M-down-mouse-%d" (- code 7))) + ((memq code '(3 11)) + (let ((down (car (terminal-parameter + nil 'xterm-mouse-last-down)))) + (when (and down (string-match "[0-9]" (symbol-name down))) + (format (if (eq code 3) "mouse-%s" "M-mouse-%s") + (match-string 0 (symbol-name down)))))) + ((memq code '(0 1 2)) + (format "down-mouse-%d" (+ 1 code))))) (x (- (read-event) 33)) (y (- (read-event) 33))) (and type (wholenump x) (wholenump y) - (list type x y)))) + (list (intern type) x y)))) ;; XTerm's 1006-mode terminal mouse click reporting has the form ;; <BUTTON> ; <X> ; <Y> <M or m>, where the button and ordinates are diff --git a/src/ChangeLog b/src/ChangeLog index 94f4444d38c..c845568ddcf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,42 @@ +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * indent.c (Fvertical_motion): Doc fix. + Move to the goal column, if any, with a single call to + move_it_in_display_line, not in two calls. Doing this with two + calls causes move_it_in_display_line apply the line-prefix + handling twice instead of just once. (Bug#17823) + +2014-06-21 Paul Eggert <eggert@cs.ucla.edu> + + Port to OS X ACLs (Bug#17810). + * fileio.c (Ffile_acl): Port to OS X, where acl_get_file (..., + ACL_TYPE_ACCESS) doesn't work. + +2014-06-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * keyboard.c (read_key_sequence): Don't invoke Vprefix_help_command + before checking key-translation-map (bug#17659). + +2014-06-21 Dmitry Antipov <dmantipov@yandex.ru> + + * font.c (font_make_object): Avoid dangling pointer which may + crash GC (Bug#17771). + +2014-06-21 Eli Zaretskii <eliz@gnu.org> + + * image.c [5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR)]: Declare the + prototype of DGifCloseFile as appropriate for older and newer + versions of giflib. + (gif_close): New function, encapsulates the differences in the + calling sequence of DGifCloseFile before v5.1.0 and after it. + (gif_load): Call gif_close instead of DGifCloseFile. Divulge the + error string where appropriate. (Bug#17790) + + * xdisp.c (Fmove_point_visually): Instead of testing for keyboard + macro execution, make sure point didn't move since last complete + redisplay, as the condition for using the glyph matrix + information. (Bug#17777) + 2014-06-19 Dmitry Antipov <dmantipov@yandex.ru> Minor cleanup of fonset code. diff --git a/src/dispextern.h b/src/dispextern.h index e710f8e35d7..5396aeb6c8e 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -2591,7 +2591,8 @@ struct it int vpos; /* Horizontal matrix position reached in move_it_in_display_line. - Only set there, not in display_line. */ + Only set there, not in display_line, and only when the X + coordinate is past first_visible_x. */ int hpos; /* Left fringe bitmap number (enum fringe_bitmap_type). */ diff --git a/src/fileio.c b/src/fileio.c index 6fe11303ded..c7736661207 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -3013,6 +3013,9 @@ was unable to determine the ACL entries. */) acl_t acl; Lisp_Object acl_string; char *str; +# ifndef HAVE_ACL_TYPE_EXTENDED + acl_type_t ACL_TYPE_EXTENDED = ACL_TYPE_ACCESS; +# endif #endif absname = expand_and_dir_to_file (filename, @@ -3027,7 +3030,7 @@ was unable to determine the ACL entries. */) #ifdef HAVE_ACL_SET_FILE absname = ENCODE_FILE (absname); - acl = acl_get_file (SSDATA (absname), ACL_TYPE_ACCESS); + acl = acl_get_file (SSDATA (absname), ACL_TYPE_EXTENDED); if (acl == NULL) return Qnil; diff --git a/src/font.c b/src/font.c index 9e472fb3e3b..251d43ba8b2 100644 --- a/src/font.c +++ b/src/font.c @@ -207,6 +207,9 @@ font_make_object (int size, Lisp_Object entity, int pixelsize) = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, PVEC_FONT); int i; + /* GC can happen before the driver is set up, + so avoid dangling pointer here (Bug#17771). */ + font->driver = NULL; XSETFONT (font_object, font); if (! NILP (entity)) diff --git a/src/image.c b/src/image.c index 3220a45a282..f8c2402bfc4 100644 --- a/src/image.c +++ b/src/image.c @@ -7250,7 +7250,11 @@ gif_image_p (Lisp_Object object) #ifdef WINDOWSNT /* GIF library details. */ +#if 5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR) +DEF_IMGLIB_FN (int, DGifCloseFile, (GifFileType *, int *)); +#else DEF_IMGLIB_FN (int, DGifCloseFile, (GifFileType *)); +#endif DEF_IMGLIB_FN (int, DGifSlurp, (GifFileType *)); #if GIFLIB_MAJOR < 5 DEF_IMGLIB_FN (GifFileType *, DGifOpen, (void *, InputFunc)); @@ -7320,6 +7324,22 @@ gif_read_from_memory (GifFileType *file, GifByteType *buf, int len) return len; } +static int +gif_close (GifFileType *gif, int *err) +{ + int retval; + +#if 5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR) + retval = fn_DGifCloseFile (gif, err); +#else + retval = fn_DGifCloseFile (gif); +#if GIFLIB_MAJOR >= 5 + if (err) + *err = gif->Error; +#endif +#endif + return retval; +} /* Load GIF image IMG for use on frame F. Value is true if successful. */ @@ -7344,9 +7364,7 @@ gif_load (struct frame *f, struct image *img) Lisp_Object specified_data = image_spec_value (img->spec, QCdata, NULL); unsigned long bgcolor = 0; EMACS_INT idx; -#if GIFLIB_MAJOR >= 5 int gif_err; -#endif if (NILP (specified_data)) { @@ -7414,7 +7432,7 @@ gif_load (struct frame *f, struct image *img) if (!check_image_size (f, gif->SWidth, gif->SHeight)) { image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil); - fn_DGifCloseFile (gif); + gif_close (gif, NULL); return 0; } @@ -7423,7 +7441,7 @@ gif_load (struct frame *f, struct image *img) if (rc == GIF_ERROR || gif->ImageCount <= 0) { image_error ("Error reading `%s'", img->spec, Qnil); - fn_DGifCloseFile (gif); + gif_close (gif, NULL); return 0; } @@ -7435,7 +7453,7 @@ gif_load (struct frame *f, struct image *img) { image_error ("Invalid image number `%s' in image `%s'", image_number, img->spec); - fn_DGifCloseFile (gif); + gif_close (gif, NULL); return 0; } } @@ -7453,7 +7471,7 @@ gif_load (struct frame *f, struct image *img) if (!check_image_size (f, width, height)) { image_error ("Invalid image size (see `max-image-size')", Qnil, Qnil); - fn_DGifCloseFile (gif); + gif_close (gif, NULL); return 0; } @@ -7471,7 +7489,7 @@ gif_load (struct frame *f, struct image *img) && 0 <= subimg_left && subimg_left <= width - subimg_width)) { image_error ("Subimage does not fit in image", Qnil, Qnil); - fn_DGifCloseFile (gif); + gif_close (gif, NULL); return 0; } } @@ -7479,7 +7497,7 @@ gif_load (struct frame *f, struct image *img) /* Create the X image and pixmap. */ if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0)) { - fn_DGifCloseFile (gif); + gif_close (gif, NULL); return 0; } @@ -7650,7 +7668,18 @@ gif_load (struct frame *f, struct image *img) Fcons (make_number (gif->ImageCount), img->lisp_data)); - fn_DGifCloseFile (gif); + if (gif_close (gif, &gif_err) == GIF_ERROR) + { +#if 5 <= GIFLIB_MAJOR + char *error_text = fn_GifErrorString (gif_err); + + if (error_text) + image_error ("Error closing `%s': %s", + img->spec, build_string (error_text)); +#else + image_error ("Error closing `%s'", img->spec, Qnil); +#endif + } /* Maybe fill in the background field while we have ximg handy. */ if (NILP (image_spec_value (img->spec, QCbackground, NULL))) diff --git a/src/indent.c b/src/indent.c index dc862518924..711792f75cd 100644 --- a/src/indent.c +++ b/src/indent.c @@ -1944,9 +1944,12 @@ The optional second argument WINDOW specifies the window to use for parameters such as width, horizontal scrolling, and so on. The default is to use the selected window's parameters. -LINES can optionally take the form (COLS . LINES), in which case -the motion will not stop at the start of a screen line but on -its column COLS (if such exists on that line, that is). +LINES can optionally take the form (COLS . LINES), in which case the +motion will not stop at the start of a screen line but COLS column +from the visual start of the line (if such exists on that line, that +is). If the line is scrolled horizontally, COLS is interpreted +visually, i.e., as addition to the columns of text beyond the left +edge of the window. `vertical-motion' always uses the current buffer, regardless of which buffer is displayed in WINDOW. @@ -2126,20 +2129,14 @@ whether or not it is currently displayed in some window. */) } } - /* Move to the goal column, if one was specified. */ + /* Move to the goal column, if one was specified. If the window + was originally hscrolled, the goal column is interpreted as + an addition to the hscroll amount. */ if (!NILP (lcols)) { - /* If the window was originally hscrolled, move forward by - the hscrolled amount first. */ - if (first_x > 0) - { - move_it_in_display_line (&it, ZV, first_x, MOVE_TO_X); - it.current_x = 0; - } - move_it_in_display_line - (&it, ZV, - (int)(cols * FRAME_COLUMN_WIDTH (XFRAME (w->frame)) + 0.5), - MOVE_TO_X); + int to_x = (int)(cols * FRAME_COLUMN_WIDTH (XFRAME (w->frame)) + 0.5); + + move_it_in_display_line (&it, ZV, first_x + to_x, MOVE_TO_X); } SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); diff --git a/src/keyboard.c b/src/keyboard.c index 3e5e405d66e..1da300b77cc 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2181,7 +2181,7 @@ show_help_echo (Lisp_Object help, Lisp_Object window, Lisp_Object object, -/* Input of single characters from keyboard */ +/* Input of single characters from keyboard. */ static Lisp_Object kbd_buffer_get_event (KBOARD **kbp, bool *used_mouse_menu, struct timespec *end_time); @@ -9382,16 +9382,6 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt, first_unbound = min (t, first_unbound); head = EVENT_HEAD (key); - if (help_char_p (head) && t > 0) - { - read_key_sequence_cmd = Vprefix_help_command; - keybuf[t++] = key; - last_nonmenu_event = key; - /* The Microsoft C compiler can't handle the goto that - would go here. */ - dummyflag = 1; - break; - } if (SYMBOLP (head)) { @@ -9649,6 +9639,17 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt, goto replay_sequence; } + + if (NILP (current_binding) + && help_char_p (EVENT_HEAD (key)) && t > 1) + { + read_key_sequence_cmd = Vprefix_help_command; + /* The Microsoft C compiler can't handle the goto that + would go here. */ + dummyflag = 1; + break; + } + /* If KEY is not defined in any of the keymaps, and cannot be part of a function key or translation, and is a shifted function key, diff --git a/src/xdisp.c b/src/xdisp.c index 70e4d1b5e59..8711487780c 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -15790,7 +15790,7 @@ set_vertical_scroll_bar (struct window *w) redisplay itself, when it decides that the previous window start point is fine and should be kept. Search for "goto force_start" below to see the details. Like the values of window-start - specified outside of redisply, these internally deduced values + specified outside of redisplay, these internally-deduced values are tested for feasibility, and ignored if found to be unfeasible. @@ -20741,12 +20741,15 @@ Value is the new character position of point. */) recorded in the glyphs, at least as long as the goal is on the screen. */ if (w->window_end_valid - && NILP (Vexecuting_kbd_macro) && !windows_or_buffers_changed && b && !b->clip_changed && !b->prevent_redisplay_optimizations_p && !window_outdated (w) + /* We rely below on the cursor coordinates to be up to date, but + we cannot trust them if some command moved point since the + last complete redisplay. */ + && w->last_point == BUF_PT (b) && w->cursor.vpos >= 0 && w->cursor.vpos < w->current_matrix->nrows && (row = MATRIX_ROW (w->current_matrix, w->cursor.vpos))->enabled_p) diff --git a/test/ChangeLog b/test/ChangeLog index 716e42ed95d..b90f47631bc 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-06-21 Fabián Ezequiel Gallina <fgallina@gnu.org> + + * automated/python-tests.el (python-util-strip-string-1): New test. + 2014-06-15 Michael Albinus <michael.albinus@gmx.de> Sync with Tramp 2.2.10. diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index de963a670bc..f580e946b8f 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el @@ -2706,6 +2706,15 @@ def foo(a, b, c): (equal (symbol-value (car ccons)) (cdr ccons))))) (kill-buffer buffer))) +(ert-deftest python-util-strip-string-1 () + (should (string= (python-util-strip-string "\t\r\n str") "str")) + (should (string= (python-util-strip-string "str \n\r") "str")) + (should (string= (python-util-strip-string "\t\r\n str \n\r ") "str")) + (should + (string= (python-util-strip-string "\n str \nin \tg \n\r") "str \nin \tg")) + (should (string= (python-util-strip-string "\n \t \n\r ") "")) + (should (string= (python-util-strip-string "") ""))) + ;;; Electricity diff --git a/test/indent/shell.sh b/test/indent/shell.sh index fdf736e06be..8e831bb8f11 100755 --- a/test/indent/shell.sh +++ b/test/indent/shell.sh @@ -23,6 +23,24 @@ case $X in ;; esac +{ # bug#17621 + foo1 && + foo2 && + bar + + foo1 && \ + foo2 && \ + bar +} + +for foo in bar; do # bug#17721 + [ -e $foo ] && { + echo t + } && { + echo r + } +done + echo -n $(( 5 << 2 )) # This should not be treated as a heredoc (bug#12770). 2 |