------------------------------------------------------------ revno: 117094 committer: Sam Steingold branch nick: trunk timestamp: Mon 2014-05-12 19:56:22 -0400 message: avoid function from `cl' diff: === modified file 'lisp/calendar/time-date.el' --- lisp/calendar/time-date.el 2014-05-12 16:14:24 +0000 +++ lisp/calendar/time-date.el 2014-05-12 23:56:22 +0000 @@ -404,7 +404,7 @@ (t (let ((sts seconds-to-string) here) (while (and (car (setq here (pop sts))) (<= (car here) delay))) - (concat (format "%.2f" (/ delay (third here))) (second here)))))) + (concat (format "%.2f" (/ delay (car (cddr here)))) (cadr here)))))) (provide 'time-date) ------------------------------------------------------------ revno: 117093 committer: Sam Steingold branch nick: trunk timestamp: Mon 2014-05-12 12:14:24 -0400 message: (seconds-to-string): New function to pretty print time delay in seconds. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2014-05-12 13:25:53 +0000 +++ lisp/ChangeLog 2014-05-12 16:14:24 +0000 @@ -1,3 +1,8 @@ +2014-05-12 Sam Steingold + + * calendar/time-date.el (seconds-to-string): New function to + pretty print time delay in seconds. + 2014-05-12 Stefan Monnier * mpc.el (mpc-format): Trim Date to the year. === modified file 'lisp/calendar/time-date.el' --- lisp/calendar/time-date.el 2014-01-01 07:43:34 +0000 +++ lisp/calendar/time-date.el 2014-05-12 16:14:24 +0000 @@ -388,6 +388,23 @@ t t string)))))) (replace-regexp-in-string "%%" "%" string)) +(defvar seconds-to-string + (list (list 1 "ms" 0.001) + (list 100 "s" 1) + (list (* 60 100) "m" 60.0) + (list (* 3600 30) "h" 3600.0) + (list (* 3600 24 400) "d" (* 3600.0 24.0)) + (list nil "y" (* 365.25 24 3600))) + "Formatting used by the function `seconds-to-string'.") +;;;###autoload +(defun seconds-to-string (delay) + "Convert the time interval in seconds to a short string." + (cond ((> 0 delay) (concat "-" (seconds-to-string (- delay)))) + ((= 0 delay) "0s") + (t (let ((sts seconds-to-string) here) + (while (and (car (setq here (pop sts))) + (<= (car here) delay))) + (concat (format "%.2f" (/ delay (third here))) (second here)))))) (provide 'time-date) ------------------------------------------------------------ revno: 117092 committer: Glenn Morris branch nick: trunk timestamp: Mon 2014-05-12 09:06:13 -0700 message: * lisp/net/rcirc.el (rcirc-reconnect-delay): Add :version. Defcustoms docs do not need leading "*", for some years. diff: === modified file 'lisp/net/rcirc.el' --- lisp/net/rcirc.el 2014-05-11 01:39:49 +0000 +++ lisp/net/rcirc.el 2014-05-12 16:06:13 +0000 @@ -659,8 +659,9 @@ Functions are called with PROCESS and SENTINEL arguments.") (defcustom rcirc-reconnect-delay 0 - "*The minimum interval in seconds between reconnect attempts. + "The minimum interval in seconds between reconnect attempts. When 0, do not auto-reconnect." + :version "24.5" :type 'integer :group 'rcirc) ------------------------------------------------------------ revno: 117091 committer: Stefan Monnier branch nick: trunk timestamp: Mon 2014-05-12 09:25:53 -0400 message: * lisp/mpc.el (mpc-format): Trim Date to the year. (mpc-songs-hashcons): Shorten the Date field. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2014-05-12 06:59:30 +0000 +++ lisp/ChangeLog 2014-05-12 13:25:53 +0000 @@ -1,5 +1,8 @@ 2014-05-12 Stefan Monnier + * mpc.el (mpc-format): Trim Date to the year. + (mpc-songs-hashcons): Shorten the Date field. + * emacs-lisp/nadvice.el (advice--interactive-form): Don't get fooled into autoloading just because of a silly indirection. === modified file 'lisp/mpc.el' --- lisp/mpc.el 2014-05-01 01:08:08 +0000 +++ lisp/mpc.el 2014-05-12 13:25:53 +0000 @@ -1024,7 +1024,12 @@ (when (and (null val) (eq tag 'Title)) (setq val (cdr (assq 'file info)))) (push `(equal ',val (cdr (assq ',tag info))) pred) - val))))) + (cond + ((not (and (eq tag 'Date) (stringp val))) val) + ;; For "date", only keep the year! + ((string-match "[0-9]\\{4\\}" val) + (match-string 0 val)) + (t val))))))) (space (when size (setq size (string-to-number size)) (propertize " " 'display @@ -1866,7 +1871,7 @@ `text-property-any'.") (defun mpc-songs-hashcons (name) (or (gethash name mpc-songs-hashcons) (puthash name name mpc-songs-hashcons))) -(defcustom mpc-songs-format "%2{Disc--}%3{Track} %-5{Time} %25{Title} %20{Album} %20{Artist} %10{Date}" +(defcustom mpc-songs-format "%2{Disc--}%3{Track} %-5{Time} %25{Title} %20{Album} %20{Artist} %5{Date}" "Format used to display each song in the list of songs." :type 'string) ------------------------------------------------------------ revno: 117090 committer: YAMAMOTO Mitsuharu branch nick: trunk timestamp: Mon 2014-05-12 17:57:59 +0900 message: * xdisp.c (draw_glyphs): Set clipping to highlight boundaries. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2014-05-12 06:59:30 +0000 +++ src/ChangeLog 2014-05-12 08:57:59 +0000 @@ -1,3 +1,7 @@ +2014-05-12 YAMAMOTO Mitsuharu + + * xdisp.c (draw_glyphs): Set clipping to highlight boundaries. + 2014-05-12 Glenn Morris * fileio.c (Ffile_executable_p): Doc tweak. === modified file 'src/xdisp.c' --- src/xdisp.c 2014-04-24 03:59:19 +0000 +++ src/xdisp.c 2014-05-12 08:57:59 +0000 @@ -24589,13 +24589,16 @@ else overlap_hl = DRAW_NORMAL_TEXT; + if (hl != overlap_hl) + clip_head = head; j = i; BUILD_GLYPH_STRINGS (j, start, h, t, overlap_hl, dummy_x, last_x); start = i; compute_overhangs_and_x (t, head->x, 1); prepend_glyph_string_lists (&head, &tail, h, t); - clip_head = head; + if (clip_head == NULL) + clip_head = head; } /* Prepend glyph strings for glyphs in front of the first glyph @@ -24616,7 +24619,8 @@ else overlap_hl = DRAW_NORMAL_TEXT; - clip_head = head; + if (hl == overlap_hl || clip_head == NULL) + clip_head = head; BUILD_GLYPH_STRINGS (i, start, h, t, overlap_hl, dummy_x, last_x); for (s = h; s; s = s->next) @@ -24640,13 +24644,16 @@ else overlap_hl = DRAW_NORMAL_TEXT; + if (hl != overlap_hl) + clip_tail = tail; BUILD_GLYPH_STRINGS (end, i, h, t, overlap_hl, x, last_x); /* Because BUILD_GLYPH_STRINGS updates the first argument, we don't have `end = i;' here. */ compute_overhangs_and_x (h, tail->x + tail->width, 0); append_glyph_string_lists (&head, &tail, h, t); - clip_tail = tail; + if (clip_tail == NULL) + clip_tail = tail; } /* Append glyph strings for glyphs following the last glyph @@ -24664,7 +24671,8 @@ else overlap_hl = DRAW_NORMAL_TEXT; - clip_tail = tail; + if (hl == overlap_hl || clip_tail == NULL) + clip_tail = tail; i++; /* We must include the Ith glyph. */ BUILD_GLYPH_STRINGS (end, i, h, t, overlap_hl, x, last_x); ------------------------------------------------------------ revno: 117089 [merge] committer: Glenn Morris branch nick: trunk timestamp: Sun 2014-05-11 23:59:30 -0700 message: Merge from emacs-24; up to r117108 diff: === modified file 'admin/ChangeLog' --- admin/ChangeLog 2014-04-18 23:36:51 +0000 +++ admin/ChangeLog 2014-05-12 06:59:30 +0000 @@ -1,3 +1,11 @@ +2014-05-12 Glenn Morris + + * find-gc.el: Move here from ../lisp/emacs-lisp. + + * admin.el (set-version-in-file): Don't set identical version. + (set-version): Provide default version number. + (set-version, set-copyright): Give start/end messages. + 2014-04-18 Paul Eggert * notes/bzr: Update instructions for merging from gnulib. === modified file 'admin/admin.el' --- admin/admin.el 2014-01-13 22:21:32 +0000 +++ admin/admin.el 2014-05-10 21:59:05 +0000 @@ -65,17 +65,25 @@ "Subroutine of `set-version' and `set-copyright'." (find-file (expand-file-name file root)) (goto-char (point-min)) + (setq version (format "%s" version)) (unless (re-search-forward rx nil :noerror) (user-error "Version not found in %s" file)) - (replace-match (format "%s" version) nil nil nil 1)) + (if (not (equal version (match-string 1))) + (replace-match version nil nil nil 1) + (kill-buffer) + (message "No need to update `%s'" file))) -;; TODO report the progress (defun set-version (root version) "Set Emacs version to VERSION in relevant files under ROOT. Root must be the root of an Emacs source tree." - (interactive "DEmacs root directory: \nsVersion number: ") + (interactive (list + (read-directory-name "Emacs root directory: " source-directory) + (read-string "Version number: " + (replace-regexp-in-string "\\.[0-9]+\\'" "" + emacs-version)))) (unless (file-exists-p (expand-file-name "src/emacs.c" root)) (user-error "%s doesn't seem to be the root of an Emacs source tree" root)) + (message "Setting version numbers...") ;; There's also a "version 3" (standing for GPLv3) at the end of ;; `README', but since `set-version-in-file' only replaces the first ;; occurrence, it won't be replaced. @@ -158,11 +166,10 @@ {\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs") (set-version-in-file root "etc/refcards/emacsver.tex" version "\\\\def\\\\versionemacs\ -{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs")))) - +{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs"))) + (message "Setting version numbers...done")) ;; Note this makes some assumptions about form of short copyright. -;; TODO report the progress (defun set-copyright (root copyright) "Set Emacs short copyright to COPYRIGHT in relevant files under ROOT. Root must be the root of an Emacs source tree." @@ -174,6 +181,7 @@ (format-time-string "%Y"))))) (unless (file-exists-p (expand-file-name "src/emacs.c" root)) (user-error "%s doesn't seem to be the root of an Emacs source tree" root)) + (message "Setting copyrights...") (set-version-in-file root "configure.ac" copyright (rx (and bol "copyright" (0+ (not (in ?\"))) ?\" (submatch (1+ (not (in ?\")))) ?\"))) @@ -195,7 +203,8 @@ {\\([0-9]\\{4\\}\\)}.+%.+copyright year") (set-version-in-file root "etc/refcards/emacsver.tex" copyright "\\\\def\\\\year\ -{\\([0-9]\\{4\\}\\)}.+%.+copyright year"))) +{\\([0-9]\\{4\\}\\)}.+%.+copyright year")) + (message "Setting copyrights...done")) ;;; Various bits of magic for generating the web manuals === renamed file 'lisp/emacs-lisp/find-gc.el' => 'admin/find-gc.el' === modified file 'doc/lispref/functions.texi' --- doc/lispref/functions.texi 2014-03-22 22:12:52 +0000 +++ doc/lispref/functions.texi 2014-05-12 06:59:30 +0000 @@ -1240,7 +1240,8 @@ global value of @var{place}. Whereas if @var{place} is of the form @code{(local @var{symbol})}, where @var{symbol} is an expression which returns the variable name, then @var{function} will only be added in the -current buffer. +current buffer. Finally, if you want to modify a lexical variable, you will +have to use @code{(var @var{VARIABLE})}. Every function added with @code{add-function} can be accompanied by an association list of properties @var{props}. Currently only two of those === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2014-05-11 05:49:14 +0000 +++ lisp/ChangeLog 2014-05-12 06:59:30 +0000 @@ -1,3 +1,54 @@ +2014-05-12 Stefan Monnier + + * emacs-lisp/nadvice.el (advice--interactive-form): Don't get fooled + into autoloading just because of a silly indirection. + +2014-05-12 Santiago Payà i Miralta (tiny change) + + * vc/vc-hg.el (vc-hg-unregister): New function. (Bug#17454) + +2014-05-12 Glenn Morris + + * emacs-lisp/find-gc.el: Move to ../admin. + + * printing.el (pr-version): + * ps-print.el (ps-print-version): Also mention bug-gnu-emacs. + + * net/browse-url.el (browse-url-mosaic): + Create /tmp/Mosaic.PID as a private file. + +2014-05-12 Stefan Monnier + + * emacs-lisp/nadvice.el: Support adding a given function multiple times. + (advice--member-p): If name is given, only compare the name. + (advice--remove-function): Don't stop at the first match. + (advice--normalize-place): New function. + (add-function, remove-function): Use it. + (advice--add-function): Pass the name, if any, to + advice--remove-function. + +2014-05-12 Philipp Rumpf (tiny change) + + * electric.el (electric-indent-post-self-insert-function): Don't use + `pos' after modifying the buffer (bug#17449). + +2014-05-12 Stephen Berman + + * calendar/todo-mode.el (todo-insert-item-from-calendar): + Correct argument list to conform to todo-insert-item--basic. + +2014-05-12 Glenn Morris + + * files.el (cd-absolute): Test if directory is accessible + rather than executable. (Bug#17330) + + * progmodes/compile.el (recompile): + Handle C-u M-x recompile from a non-compilation buffer. (Bug#17444) + + * net/browse-url.el (browse-url-mosaic): + Be careful when writing /tmp/Mosaic.PID. (Bug#17428) + This is CVE-2014-3423. + 2014-05-11 Stefan Monnier * mouse.el: Use the normal toplevel loop while dragging. @@ -89,6 +140,7 @@ (tramp-remote-coding-commands): Enhance docstring. (tramp-find-inline-encoding): Replace "%t" by a temporary file name. (Bug#17415) + This is CVE-2014-3424. 2014-05-08 Glenn Morris @@ -96,6 +148,7 @@ (find-gc-source-files): Update some names. (trace-call-tree): Simplify and update. Avoid predictable temp-file names. (http://bugs.debian.org/747100) + This is CVE-2014-3422. 2014-05-08 Stefan Monnier === modified file 'lisp/calendar/todo-mode.el' --- lisp/calendar/todo-mode.el 2014-05-07 09:31:27 +0000 +++ lisp/calendar/todo-mode.el 2014-05-09 07:50:42 +0000 @@ -1984,7 +1984,7 @@ (setq todo-date-from-calendar (calendar-date-string (calendar-cursor-to-date t) t t)) (calendar-exit) - (todo-insert-item--basic arg nil nil todo-date-from-calendar)) + (todo-insert-item--basic arg nil todo-date-from-calendar)) (define-key calendar-mode-map "it" 'todo-insert-item-from-calendar) === modified file 'lisp/electric.el' --- lisp/electric.el 2014-05-05 19:04:40 +0000 +++ lisp/electric.el 2014-05-09 18:03:21 +0000 @@ -259,29 +259,30 @@ (unless (eq act 'do-indent) (nth 8 (syntax-ppss)))))))) ;; For newline, we want to reindent both lines and basically behave like ;; reindent-then-newline-and-indent (whose code we hence copied). - (when (<= pos (line-beginning-position)) - (let ((before (copy-marker (1- pos) t))) - (save-excursion - (unless (or (memq indent-line-function - electric-indent-functions-without-reindent) - electric-indent-inhibit) - ;; Don't reindent the previous line if the indentation function - ;; is not a real one. + (let ((at-newline (<= pos (line-beginning-position)))) + (when at-newline + (let ((before (copy-marker (1- pos) t))) + (save-excursion + (unless (or (memq indent-line-function + electric-indent-functions-without-reindent) + electric-indent-inhibit) + ;; Don't reindent the previous line if the indentation function + ;; is not a real one. + (goto-char before) + (indent-according-to-mode)) + ;; We are at EOL before the call to indent-according-to-mode, and + ;; after it we usually are as well, but not always. We tried to + ;; address it with `save-excursion' but that uses a normal marker + ;; whereas we need `move after insertion', so we do the + ;; save/restore by hand. (goto-char before) - (indent-according-to-mode)) - ;; We are at EOL before the call to indent-according-to-mode, and - ;; after it we usually are as well, but not always. We tried to - ;; address it with `save-excursion' but that uses a normal marker - ;; whereas we need `move after insertion', so we do the - ;; save/restore by hand. - (goto-char before) - (when (eolp) - ;; Remove the trailing whitespace after indentation because - ;; indentation may (re)introduce the whitespace. - (delete-horizontal-space t))))) - (unless (and electric-indent-inhibit - (> pos (line-beginning-position))) - (indent-according-to-mode))))) + (when (eolp) + ;; Remove the trailing whitespace after indentation because + ;; indentation may (re)introduce the whitespace. + (delete-horizontal-space t))))) + (unless (and electric-indent-inhibit + (not at-newline)) + (indent-according-to-mode)))))) (put 'electric-indent-post-self-insert-function 'priority 60) === modified file 'lisp/emacs-lisp/nadvice.el' --- lisp/emacs-lisp/nadvice.el 2014-03-20 16:00:17 +0000 +++ lisp/emacs-lisp/nadvice.el 2014-05-12 05:25:34 +0000 @@ -134,7 +134,7 @@ (defun advice--interactive-form (function) ;; Like `interactive-form' but tries to avoid autoloading functions. (when (commandp function) - (if (not (and (symbolp function) (autoloadp (symbol-function function)))) + (if (not (and (symbolp function) (autoloadp (indirect-function function)))) (interactive-form function) `(interactive (advice-eval-interactive-spec (cadr (interactive-form ',function))))))) @@ -183,9 +183,9 @@ (defun advice--member-p (function name definition) (let ((found nil)) (while (and (not found) (advice--p definition)) - (if (or (equal function (advice--car definition)) - (when name - (equal name (cdr (assq 'name (advice--props definition)))))) + (if (if name + (equal name (cdr (assq 'name (advice--props definition)))) + (equal function (advice--car definition))) (setq found definition) (setq definition (advice--cdr definition)))) found)) @@ -209,8 +209,8 @@ (lambda (first rest props) (cond ((not first) rest) ((or (equal function first) - (equal function (cdr (assq 'name props)))) - (list rest)))))) + (equal function (cdr (assq 'name props)))) + (list (advice--remove-function rest function))))))) (defvar advice--buffer-local-function-sample nil "keeps an example of the special \"run the default value\" functions. @@ -232,6 +232,12 @@ ;; This function acts like the t special value in buffer-local hooks. (lambda (&rest args) (apply (default-value var) args))))) +(defun advice--normalize-place (place) + (cond ((eq 'local (car-safe place)) `(advice--buffer-local ,@(cdr place))) + ((eq 'var (car-safe place)) (nth 1 place)) + ((symbolp place) `(default-value ',place)) + (t place))) + ;;;###autoload (defmacro add-function (where place function &optional props) ;; TODO: @@ -267,8 +273,9 @@ the advice should be innermost (i.e. at the end of the list), whereas a depth of -100 means that the advice should be outermost. -If PLACE is a simple variable, only its global value will be affected. -Use (local 'VAR) if you want to apply FUNCTION to VAR buffer-locally. +If PLACE is a symbol, its `default-value' will be affected. +Use (local 'SYMBOL) if you want to apply FUNCTION to SYMBOL buffer-locally. +Use (var VAR) if you want to apply FUNCTION to the (lexical) VAR. If one of FUNCTION or OLDFUN is interactive, then the resulting function is also interactive. There are 3 cases: @@ -278,20 +285,18 @@ `advice-eval-interactive-spec') and return the list of arguments to use. - Else, use the interactive spec of FUNCTION and ignore the one of OLDFUN." (declare (debug t)) ;;(indent 2) - (cond ((eq 'local (car-safe place)) - (setq place `(advice--buffer-local ,@(cdr place)))) - ((symbolp place) - (setq place `(default-value ',place)))) - `(advice--add-function ,where (gv-ref ,place) ,function ,props)) + `(advice--add-function ,where (gv-ref ,(advice--normalize-place place)) + ,function ,props)) ;;;###autoload (defun advice--add-function (where ref function props) - (let ((a (advice--member-p function (cdr (assq 'name props)) - (gv-deref ref)))) + (let* ((name (cdr (assq 'name props))) + (a (advice--member-p function name (gv-deref ref)))) (when a ;; The advice is already present. Remove the old one, first. (setf (gv-deref ref) - (advice--remove-function (gv-deref ref) (advice--car a)))) + (advice--remove-function (gv-deref ref) + (or name (advice--car a))))) (setf (gv-deref ref) (advice--make where function (gv-deref ref) props)))) @@ -302,11 +307,7 @@ Instead of FUNCTION being the actual function, it can also be the `name' of the piece of advice." (declare (debug t)) - (cond ((eq 'local (car-safe place)) - (setq place `(advice--buffer-local ,@(cdr place)))) - ((symbolp place) - (setq place `(default-value ',place)))) - (gv-letplace (getter setter) place + (gv-letplace (getter setter) (advice--normalize-place place) (macroexp-let2 nil new `(advice--remove-function ,getter ,function) `(unless (eq ,new ,getter) ,(funcall setter new))))) === modified file 'lisp/files.el' --- lisp/files.el 2014-05-09 07:02:00 +0000 +++ lisp/files.el 2014-05-12 06:59:30 +0000 @@ -685,7 +685,7 @@ (if (file-exists-p dir) (error "%s is not a directory" dir) (error "%s: no such directory" dir)) - (unless (file-executable-p dir) + (unless (file-accessible-directory-p dir) (error "Cannot cd to %s: Permission denied" dir)) (setq default-directory dir) (setq list-buffers-directory dir))) === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2014-05-09 09:50:14 +0000 +++ lisp/gnus/ChangeLog 2014-05-12 06:59:30 +0000 @@ -15,6 +15,7 @@ * gnus-fun.el (gnus-grab-cam-face): Do not use predictable temp-file name. (http://bugs.debian.org/747100) + This is CVE-2014-3421. 2014-05-04 Glenn Morris === modified file 'lisp/net/browse-url.el' --- lisp/net/browse-url.el 2014-05-06 03:55:54 +0000 +++ lisp/net/browse-url.el 2014-05-10 20:48:36 +0000 @@ -1333,31 +1333,32 @@ (let ((pidfile (expand-file-name browse-url-mosaic-pidfile)) pid) (if (file-readable-p pidfile) - (save-excursion - (find-file pidfile) - (goto-char (point-min)) - (setq pid (read (current-buffer))) - (kill-buffer nil))) - (if (and pid (zerop (signal-process pid 0))) ; Mosaic running - (save-excursion - ;; This is a predictable temp-file name, which is bad, - ;; but it is what Mosaic uses/used. - ;; So it's not Emacs's problem. http://bugs.debian.org/747100 - (find-file (format "/tmp/Mosaic.%d" pid)) - (erase-buffer) - (insert (if (browse-url-maybe-new-window new-window) - "newwin\n" - "goto\n") - url "\n") - (save-buffer) - (kill-buffer nil) + (with-temp-buffer + (insert-file-contents pidfile) + (setq pid (read (current-buffer))))) + (if (and (integerp pid) (zerop (signal-process pid 0))) ; Mosaic running + (progn + (with-temp-buffer + (insert (if (browse-url-maybe-new-window new-window) + "newwin\n" + "goto\n") + url "\n") + (let ((umask (default-file-modes))) + (unwind-protect + (progn + (set-default-file-modes ?\700) + (if (file-exists-p + (setq pidfile (format "/tmp/Mosaic.%d" pid))) + (delete-file pidfile)) + ;; http://debbugs.gnu.org/17428. Use O_EXCL. + (write-region nil nil pidfile nil 'silent nil 'excl)) + (set-default-file-modes umask)))) ;; Send signal SIGUSR to Mosaic (message "Signaling Mosaic...") (signal-process pid 'SIGUSR1) ;; Or you could try: ;; (call-process "kill" nil 0 nil "-USR1" (int-to-string pid)) - (message "Signaling Mosaic...done") - ) + (message "Signaling Mosaic...done")) ;; Mosaic not running - start it (message "Starting %s..." browse-url-mosaic-program) (apply 'start-process "xmosaic" nil browse-url-mosaic-program === modified file 'lisp/org/ChangeLog' --- lisp/org/ChangeLog 2014-04-22 14:07:45 +0000 +++ lisp/org/ChangeLog 2014-05-12 06:09:43 +0000 @@ -1,3 +1,9 @@ +2014-05-12 Eric Schulte + + * ob-screen.el (org-babel-screen-session-write-temp-file) + (org-babel-screen-test): + Use unpredictable names for temporary files. (Bug#17416) + 2014-04-22 Aaron Ecay * org-src.el (org-edit-src-exit): Place an undo boundary before @@ -286,7 +292,7 @@ 2014-04-22 Justin Gordon - * ox-md (org-md-separate-elements): Fix blank line insertion + * ox-md.el (org-md-separate-elements): Fix blank line insertion between elements. * ox-md.el (org-md-inner-template): New function. === modified file 'lisp/org/ob-screen.el' --- lisp/org/ob-screen.el 2014-01-01 07:43:34 +0000 +++ lisp/org/ob-screen.el 2014-05-12 06:09:43 +0000 @@ -106,7 +106,7 @@ (defun org-babel-screen-session-write-temp-file (session body) "Save BODY in a temp file that is named after SESSION." - (let ((tmpfile (concat "/tmp/screen.org-babel-session-" session))) + (let ((tmpfile (org-babel-temp-file "screen-"))) (with-temp-file tmpfile (insert body) @@ -121,7 +121,7 @@ (interactive) (let* ((session "org-babel-testing") (random-string (format "%s" (random 99999))) - (tmpfile "/tmp/org-babel-screen.test") + (tmpfile (org-babel-temp-file "ob-screen-test-")) (body (concat "echo '" random-string "' > " tmpfile "\nexit\n")) process tmp-string) (org-babel-execute:screen body org-babel-default-header-args:screen) === modified file 'lisp/printing.el' --- lisp/printing.el 2014-05-09 07:02:00 +0000 +++ lisp/printing.el 2014-05-12 06:59:30 +0000 @@ -12,7 +12,7 @@ "printing.el, v 6.9.3 <2007/12/09 vinicius> Please send all bug fixes and enhancements to - Vinicius Jose Latorre + bug-gnu-emacs@gnu.org and Vinicius Jose Latorre ") ;; This file is part of GNU Emacs. === modified file 'lisp/progmodes/compile.el' --- lisp/progmodes/compile.el 2014-05-05 10:58:06 +0000 +++ lisp/progmodes/compile.el 2014-05-12 06:59:30 +0000 @@ -1460,7 +1460,7 @@ `compilation-shell-minor-mode'. Interactively, prompts for the command if the variable -`compilation-read-command' is non-nil; otherwise uses`compile-command'. +`compilation-read-command' is non-nil; otherwise uses `compile-command'. With prefix arg, always prompts. Additionally, with universal prefix arg, compilation buffer will be in comint mode, i.e. interactive. @@ -1499,12 +1499,13 @@ (interactive "P") (save-some-buffers (not compilation-ask-about-save) compilation-save-buffers-predicate) - (let ((default-directory (or compilation-directory default-directory))) + (let ((default-directory (or compilation-directory default-directory)) + (command (eval compile-command))) (when edit-command - (setcar compilation-arguments - (compilation-read-command (car compilation-arguments)))) - (apply 'compilation-start (or compilation-arguments - `(,(eval compile-command)))))) + (setq command (compilation-read-command (or (car compilation-arguments) + command))) + (if compilation-arguments (setcar compilation-arguments command))) + (apply 'compilation-start (or compilation-arguments (list command))))) (defcustom compilation-scroll-output nil "Non-nil to scroll the *compilation* buffer window as output appears. === modified file 'lisp/ps-print.el' --- lisp/ps-print.el 2014-03-19 19:12:50 +0000 +++ lisp/ps-print.el 2014-05-10 21:41:12 +0000 @@ -20,7 +20,7 @@ report the version of Emacs, if any, that ps-print was distributed with. Please send all bug fixes and enhancements to - Vinicius Jose Latorre .") + bug-gnu-emacs@gnu.org and Vinicius Jose Latorre .") ;; This file is part of GNU Emacs. === modified file 'lisp/url/ChangeLog' --- lisp/url/ChangeLog 2014-05-04 19:37:56 +0000 +++ lisp/url/ChangeLog 2014-05-12 06:59:30 +0000 @@ -1,3 +1,8 @@ +2014-05-12 Michael Albinus + + * url-handlers.el (url-file-handler-load-in-progress): New defvar. + (url-file-handler): Use it, in order to avoid recursive load. + 2014-05-04 Glenn Morris * url-parse.el (url-generic-parse-url): Doc fix (replace `iff'). === modified file 'lisp/url/url-handlers.el' --- lisp/url/url-handlers.el 2014-04-01 12:41:56 +0000 +++ lisp/url/url-handlers.el 2014-05-12 06:59:30 +0000 @@ -138,34 +138,41 @@ (inhibit-file-name-operation operation)) (apply operation args))) +(defvar url-file-handler-load-in-progress nil + "Check for recursive load.") + ;;;###autoload (defun url-file-handler (operation &rest args) "Function called from the `file-name-handler-alist' routines. OPERATION is what needs to be done (`file-exists-p', etc). ARGS are the arguments that would have been passed to OPERATION." - ;; Check, whether there are arguments we want pass to Tramp. - (if (catch :do - (dolist (url (cons default-directory args)) - (and (member - (url-type (url-generic-parse-url (and (stringp url) url))) - url-tramp-protocols) - (throw :do t)))) - (apply 'url-tramp-file-handler operation args) - ;; Otherwise, let's do the job. - (let ((fn (get operation 'url-file-handlers)) - (val nil) - (hooked nil)) - (if (and (not fn) (intern-soft (format "url-%s" operation)) - (fboundp (intern-soft (format "url-%s" operation)))) - (error "Missing URL handler mapping for %s" operation)) - (if fn - (setq hooked t - val (save-match-data (apply fn args))) - (setq hooked nil - val (url-run-real-handler operation args))) - (url-debug 'handlers "%s %S%S => %S" (if hooked "Hooked" "Real") - operation args val) - val))) + ;; Avoid recursive load. + (if (and load-in-progress url-file-handler-load-in-progress) + (url-run-real-handler operation args) + (let ((url-file-handler-load-in-progress load-in-progress)) + ;; Check, whether there are arguments we want pass to Tramp. + (if (catch :do + (dolist (url (cons default-directory args)) + (and (member + (url-type (url-generic-parse-url (and (stringp url) url))) + url-tramp-protocols) + (throw :do t)))) + (apply 'url-tramp-file-handler operation args) + ;; Otherwise, let's do the job. + (let ((fn (get operation 'url-file-handlers)) + (val nil) + (hooked nil)) + (if (and (not fn) (intern-soft (format "url-%s" operation)) + (fboundp (intern-soft (format "url-%s" operation)))) + (error "Missing URL handler mapping for %s" operation)) + (if fn + (setq hooked t + val (save-match-data (apply fn args))) + (setq hooked nil + val (url-run-real-handler operation args))) + (url-debug 'handlers "%s %S%S => %S" (if hooked "Hooked" "Real") + operation args val) + val))))) (defun url-file-handler-identity (&rest args) ;; Identity function === modified file 'lisp/vc/vc-hg.el' --- lisp/vc/vc-hg.el 2014-02-10 01:34:22 +0000 +++ lisp/vc/vc-hg.el 2014-05-11 02:01:08 +0000 @@ -60,7 +60,7 @@ ;; - responsible-p (file) OK ;; - could-register (file) OK ;; - receive-file (file rev) ?? PROBABLY NOT NEEDED -;; - unregister (file) COMMENTED OUT, MAY BE INCORRECT +;; - unregister (file) OK ;; * checkin (files rev comment) OK ;; * find-revision (file rev buffer) OK ;; * checkout (file &optional editable rev) OK @@ -436,10 +436,9 @@ ;; registered. (error)))) -;; FIXME: This would remove the file. Is that correct? -;; (defun vc-hg-unregister (file) -;; "Unregister FILE from hg." -;; (vc-hg-command nil nil file "remove")) +(defun vc-hg-unregister (file) + "Unregister FILE from hg." + (vc-hg-command nil 0 file "forget")) (declare-function log-edit-extract-headers "log-edit" (headers string)) === modified file 'src/ChangeLog' --- src/ChangeLog 2014-05-08 03:41:21 +0000 +++ src/ChangeLog 2014-05-12 06:59:30 +0000 @@ -1,3 +1,12 @@ +2014-05-12 Glenn Morris + + * fileio.c (Ffile_executable_p): Doc tweak. + +2014-05-12 Jan Djärv + + * xsettings.c (init_gsettings): Use g_settings_schema_source_lookup + instead of deprecated g_settings_list_schemas if possible (Bug#17434). + 2014-05-08 Paul Eggert * minibuf.c (read_minibuf): Avoid C99ism in previous patch (Bug#17430). === modified file 'src/fileio.c' --- src/fileio.c 2014-04-03 20:46:04 +0000 +++ src/fileio.c 2014-05-12 06:59:30 +0000 @@ -2546,7 +2546,9 @@ DEFUN ("file-executable-p", Ffile_executable_p, Sfile_executable_p, 1, 1, 0, doc: /* Return t if FILENAME can be executed by you. -For a directory, this means you can access files in that directory. */) +For a directory, this means you can access files in that directory. +\(It is generally better to use `file-accessible-directory-p' for that +purpose, though.) */) (Lisp_Object filename) { Lisp_Object absname; === modified file 'src/xsettings.c' --- src/xsettings.c 2014-02-28 21:45:34 +0000 +++ src/xsettings.c 2014-05-10 10:42:08 +0000 @@ -795,17 +795,29 @@ { #ifdef HAVE_GSETTINGS GVariant *val; - const gchar *const *schemas; int schema_found = 0; #if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); #endif - schemas = g_settings_list_schemas (); - if (schemas == NULL) return; - while (! schema_found && *schemas != NULL) - schema_found = strcmp (*schemas++, GSETTINGS_SCHEMA) == 0; +#if GLIB_CHECK_VERSION (2, 32, 0) + { + GSettingsSchema *sc = g_settings_schema_source_lookup + (g_settings_schema_source_get_default (), + GSETTINGS_SCHEMA, + TRUE); + schema_found = sc != NULL; + if (sc) g_settings_schema_unref (sc); + } +#else + { + const gchar *const *schemas = g_settings_list_schemas (); + if (schemas == NULL) return; + while (! schema_found && *schemas != NULL) + schema_found = strcmp (*schemas++, GSETTINGS_SCHEMA) == 0; + } +#endif if (!schema_found) return; gsettings_client = g_settings_new (GSETTINGS_SCHEMA); === modified file 'test/automated/advice-tests.el' --- test/automated/advice-tests.el 2014-01-01 07:43:34 +0000 +++ test/automated/advice-tests.el 2014-05-10 20:07:01 +0000 @@ -179,6 +179,29 @@ (interactive "P") nil) (should (equal (interactive-form 'sm-test9) '(interactive "P")))) +(ert-deftest advice-test-multiples () + (let ((sm-test10 (lambda (a) (+ a 10))) + (sm-advice (lambda (x) (if (consp x) (list (* 5 (car x))) (* 4 x))))) + (should (equal (funcall sm-test10 5) 15)) + (add-function :filter-args (var sm-test10) sm-advice) + (should (equal (funcall sm-test10 5) 35)) + (add-function :filter-return (var sm-test10) sm-advice) + (should (equal (funcall sm-test10 5) 60)) + ;; Make sure we can add multiple times the same function, under the + ;; condition that they have different `name' properties. + (add-function :filter-args (var sm-test10) sm-advice '((name . "args"))) + (should (equal (funcall sm-test10 5) 140)) + (remove-function (var sm-test10) "args") + (should (equal (funcall sm-test10 5) 60)) + (add-function :filter-args (var sm-test10) sm-advice '((name . "args"))) + (add-function :filter-return (var sm-test10) sm-advice '((name . "ret"))) + (should (equal (funcall sm-test10 5) 560)) + ;; Make sure that if we specify to remove a function that was added + ;; multiple times, they are all removed, rather than removing only some + ;; arbitrary subset of them. + (remove-function (var sm-test10) sm-advice) + (should (equal (funcall sm-test10 5) 15)))) + ;; Local Variables: ;; no-byte-compile: t ;; End: === modified file 'test/automated/vc-bzr.el' --- test/automated/vc-bzr.el 2014-05-08 06:58:46 +0000 +++ test/automated/vc-bzr.el 2014-05-08 07:23:40 +0000 @@ -33,17 +33,18 @@ (skip-unless (executable-find vc-bzr-program)) ;; Bzr wants to access HOME, e.g. to write ~/.bzr.log. ;; This is a problem on hydra, where HOME is non-existent. - ;; You can disable logging with BZR_LOG=/dev/null, but then - ;; some commands (eg `bzr status') want to access ~/.bazaar, - ;; and will abort if they cannot. I could not figure out how to - ;; stop bzr doing that, so just set HOME to a tempir for the duration. + ;; You can disable logging with BZR_LOG=/dev/null, but then some + ;; commands (eg `bzr status') want to access ~/.bazaar, and will + ;; abort if they cannot. I could not figure out how to stop bzr + ;; doing that, so just give it a temporary homedir for the duration. + ;; http://bugs.launchpad.net/bzr/+bug/137407 ? (let* ((homedir (make-temp-file "vc-bzr-test" t)) (bzrdir (expand-file-name "bzr" homedir)) (ignored-dir (progn (make-directory bzrdir) (expand-file-name "ignored-dir" bzrdir))) (default-directory (file-name-as-directory bzrdir)) - (process-environment (cons (format "HOME=%s" homedir) + (process-environment (cons (format "BZR_HOME=%s" homedir) process-environment))) (unwind-protect (progn @@ -79,7 +80,7 @@ (expand-file-name "subdir" bzrdir))) (file (expand-file-name "file" bzrdir)) (default-directory (file-name-as-directory bzrdir)) - (process-environment (cons (format "HOME=%s" homedir) + (process-environment (cons (format "BZR_HOME=%s" homedir) process-environment))) (unwind-protect (progn @@ -120,7 +121,7 @@ (expand-file-name "foo.el" bzrdir))) (default-directory (file-name-as-directory bzrdir)) (generated-autoload-file (expand-file-name "loaddefs.el" bzrdir)) - (process-environment (cons (format "HOME=%s" homedir) + (process-environment (cons (format "BZR_HOME=%s" homedir) process-environment))) (unwind-protect (progn === modified file 'test/indent/perl.perl' --- test/indent/perl.perl 2014-04-25 19:22:26 +0000 +++ test/indent/perl.perl 2014-05-12 06:59:30 +0000 @@ -1,6 +1,17 @@ #!/usr/bin/perl # -*- eval: (bug-reference-mode 1) -*- +use v5.14; + +my $str= <