aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorJoakim Verona2013-02-17 00:04:23 +0100
committerJoakim Verona2013-02-17 00:04:23 +0100
commitbcd8c34aabe11e72a0ce35f654515e2bb9c2964b (patch)
treea294d312b78bc7db718819f498df3a3bbf07258f /lisp
parent613fda6799a504feff2d5a930ef7998125498d10 (diff)
parented8d7fcaa2965216d44388fd00a757c8d55e7395 (diff)
downloademacs-bcd8c34aabe11e72a0ce35f654515e2bb9c2964b.tar.gz
emacs-bcd8c34aabe11e72a0ce35f654515e2bb9c2964b.zip
auto upstream
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog89
-rw-r--r--lisp/autorevert.el9
-rw-r--r--lisp/emacs-lisp/tabulated-list.el4
-rw-r--r--lisp/font-lock.el2
-rw-r--r--lisp/gnus/ChangeLog5
-rw-r--r--lisp/gnus/shr.el3
-rw-r--r--lisp/image-mode.el99
-rw-r--r--lisp/image.el71
-rw-r--r--lisp/info-look.el15
-rw-r--r--lisp/net/tramp-cache.el37
-rw-r--r--lisp/net/tramp-compat.el1
-rw-r--r--lisp/net/tramp-sh.el1
-rw-r--r--lisp/replace.el23
-rw-r--r--lisp/simple.el16
-rw-r--r--lisp/url/ChangeLog6
-rw-r--r--lisp/url/url-http.el4
16 files changed, 315 insertions, 70 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 99704a0b532..66c18a25803 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,25 +1,96 @@
12013-02-16 Glenn Morris <rgm@gnu.org>
2
3 * image.el (image-animated-types): Remove.
4 (image-multi-frame-p): Rename from image-animated-p, and generalize.
5 (image-animated-p): Make obsolete alias.
6 (image-animate, image-nth-frame, image-animate-timeout):
7 Use image-multi-frame-p.
8 (image-animate-timeout): If no delay, use image-default-frame-delay.
9 * image-mode.el (image-mode, image-toggle-animation):
10 Use image-multi-frame-p. (Bug#763, bug#10739)
11 (image-mode): Adjust startup message for a multi-frame image.
12
13 * image-mode.el (image-mode-map): Give it a menu.
14
152013-02-16 Michael Albinus <michael.albinus@gmx.de>
16
17 * net/tramp-cache.el (tramp-connection-properties): New customer
18 option.
19 (tramp-get-connection-property): Use it.
20
21 * net/tramp-compat.el (top): Require 'trampver.
22
23 * net/tramp-sh.el (tramp-remote-process-environment): Set
24 tramp-autoload cookie.
25
262013-02-16 Kevin Ryde <user42@zip.com.au>
27
28 * info-look.el (info-lookup-select-mode): If major-mode has no
29 info-lookup-alist entry then search up derived-mode-parent (bug#8660).
30
312013-02-16 Jambunathan K <kjambunathan@gmail.com>
32
33 * replace.el (read-regexp): Tighten the regexp that matches tag.
34 When tag is retrieved with `find-tag-default', use regexp that
35 matches tag at point. Also update docstring (Bug#13687).
36
372013-02-16 Eli Zaretskii <eliz@gnu.org>
38
39 * autorevert.el (auto-revert-notify-add-watch): With 'w32notify',
40 add watch for the file, not its parent directory, since w32notify
41 sets up the watch for the directory internally. (Bug#13725)
42
432013-02-16 Glenn Morris <rgm@gnu.org>
44
45 * image.el (image-default-frame-delay): New variable.
46 (image-animated-p): Use image-default-frame-delay.
47 (image-minimum-frame-delay): New constant.
48 (image-animate-timeout): Use image-minimum-frame-delay.
49
50 * image.el (image-nth-frame): New, split from image-animate-timeout.
51 (image-animate-timeout): Use image-nth-frame.
52 * image-mode.el (image-goto-frame, image-next-frame)
53 (image-previous-frame): New commands.
54 (image-mode-map): Add new frame commands.
55
562013-02-16 Jonas Bernoulli <jonas@bernoul.li>
57
58 * emacs-lisp/tabulated-list.el (tabulated-list-print-col):
59 If col-desc already has help-echo, use it. (Bug#13563)
60
612013-02-16 Glenn Morris <rgm@gnu.org>
62
63 * image.el (image-current-frame): New variable.
64 (image-animate-timeout): Set image-current-frame.
65 * image-mode.el (image-mode): For animated images,
66 display a frame counter via mode-line-process.
67
68 * font-lock.el (lisp-font-lock-keywords-1): Add defvar-local.
69
702013-02-15 Stefan Monnier <monnier@iro.umontreal.ca>
71
72 * simple.el (eval-expression): Let `exp' set the mark (bug#13724).
73
12013-02-15 Alan Mackenzie <acm@muc.de> 742013-02-15 Alan Mackenzie <acm@muc.de>
2 75
3 * emacs-lisp/easy-mmode.el (define-globalized-minor-mode): When a 76 * emacs-lisp/easy-mmode.el (define-globalized-minor-mode): When a
4 global minor mode has been enabled, call the minor mode function 77 global minor mode has been enabled, call the minor mode function
5 for a new buffer once only, after the major mode hook, whilst 78 for a new buffer once only, after the major mode hook, whilst
6 allowing that hook explicitly to disable the minor mode. 79 allowing that hook explicitly to disable the minor mode.
7 (MODE-disable-in-buffer): new (generated) function. 80 (MODE-disable-in-buffer): New (generated) function.
8 (disable-MODE): new (generated) buffer local variable. 81 (disable-MODE): New (generated) buffer local variable.
9 82
102013-02-15 Jambunathan K <kjambunathan@gmail.com> 832013-02-15 Jambunathan K <kjambunathan@gmail.com>
11 84
12 * iswitchb.el (iswitchb-read-buffer): Bind `C-.' and `C-,' to 85 * iswitchb.el (iswitchb-read-buffer): Bind `C-.' and `C-,' to
13 `iswitchb-next-match' and `iswitchb-prev-match' resply. 86 `iswitchb-next-match' and `iswitchb-prev-match' resply.
14
15 * ido.el (ido-init-completion-maps): Bind `C-.' and `C-,' to 87 * ido.el (ido-init-completion-maps): Bind `C-.' and `C-,' to
16 `ido-next-match' and `ido-prev-match' resply. 88 `ido-next-match' and `ido-prev-match' resply.
17
18 * icomplete.el (icomplete-minibuffer-map): Unbind `C-s' and `C-r'. 89 * icomplete.el (icomplete-minibuffer-map): Unbind `C-s' and `C-r'.
19 Bind `C-.' and `C-,' to `icomplete-forward-completions' and 90 Bind `C-.' and `C-,' to `icomplete-forward-completions' and
20 `icomplete-backward-completions' (Bug#13708). 91 `icomplete-backward-completions' (Bug#13708).
21 92
222013-02-15 Michael Albinus <michael.albinus@gmx.de> 932013-02-15 Glenn Morris <rgm@gnu.org>
23 94
24 * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix. 95 * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix.
25 96
@@ -52,8 +123,8 @@
52 123
532013-02-14 Michael Albinus <michael.albinus@gmx.de> 1242013-02-14 Michael Albinus <michael.albinus@gmx.de>
54 125
55 * net/tramp.el (tramp-debug-message): Add 126 * net/tramp.el (tramp-debug-message):
56 `tramp-condition-case-unless-debug'. 127 Add `tramp-condition-case-unless-debug'.
57 (tramp-debug-on-error): New defvar. 128 (tramp-debug-on-error): New defvar.
58 (tramp-condition-case-unless-debug): New defun. 129 (tramp-condition-case-unless-debug): New defun.
59 (tramp-file-name-handler): Use it. 130 (tramp-file-name-handler): Use it.
@@ -207,8 +278,8 @@
207 * net/tramp-compat.el (top): Declare `remote-file-name-inhibit-cache' 278 * net/tramp-compat.el (top): Declare `remote-file-name-inhibit-cache'
208 only if it doesn't exist. 279 only if it doesn't exist.
209 280
210 * net/tramp-sh.el (tramp-sh-handle-start-file-process): Set 281 * net/tramp-sh.el (tramp-sh-handle-start-file-process):
211 process marker. 282 Set process marker.
212 283
2132013-02-12 Tassilo Horn <tsdh@gnu.org> 2842013-02-12 Tassilo Horn <tsdh@gnu.org>
214 285
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index fe6cf216363..a2d70c37762 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -519,12 +519,13 @@ will use an up-to-date value of `auto-revert-interval'"
519 (let ((func (if (fboundp 'inotify-add-watch) 519 (let ((func (if (fboundp 'inotify-add-watch)
520 'inotify-add-watch 'w32notify-add-watch)) 520 'inotify-add-watch 'w32notify-add-watch))
521 (aspect (if (fboundp 'inotify-add-watch) 521 (aspect (if (fboundp 'inotify-add-watch)
522 '(create modify moved-to) '(size last-write-time)))) 522 '(create modify moved-to) '(size last-write-time)))
523 (file (if (fboundp 'inotify-add-watch)
524 (directory-file-name (expand-file-name default-directory))
525 (buffer-file-name))))
523 (setq auto-revert-notify-watch-descriptor 526 (setq auto-revert-notify-watch-descriptor
524 (ignore-errors 527 (ignore-errors
525 (funcall 528 (funcall func file aspect 'auto-revert-notify-handler)))
526 func (directory-file-name (expand-file-name default-directory))
527 aspect 'auto-revert-notify-handler)))
528 (if auto-revert-notify-watch-descriptor 529 (if auto-revert-notify-watch-descriptor
529 (progn 530 (progn
530 (puthash 531 (puthash
diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el
index 94b3c1553e5..da487e463e2 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -379,7 +379,9 @@ Return the column number after insertion."
379 (setq width (- width shift)) 379 (setq width (- width shift))
380 (setq x (+ x shift)))) 380 (setq x (+ x shift))))
381 (if (stringp col-desc) 381 (if (stringp col-desc)
382 (insert (propertize label 'help-echo help-echo)) 382 (insert (if (get-text-property 0 'help-echo label)
383 label
384 (propertize label 'help-echo help-echo)))
383 (apply 'insert-text-button label (cdr col-desc))) 385 (apply 'insert-text-button label (cdr col-desc)))
384 (let ((next-x (+ x pad-right width))) 386 (let ((next-x (+ x pad-right width)))
385 ;; No need to append any spaces if this is the last column. 387 ;; No need to append any spaces if this is the last column.
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index f714eaab233..6e3476ac9a5 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -2256,7 +2256,7 @@ in which C preprocessor directives are used. e.g. `asm-mode' and
2256 "method-combination\\|setf-expander\\|skeleton\\|widget\\|" 2256 "method-combination\\|setf-expander\\|skeleton\\|widget\\|"
2257 "function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|" 2257 "function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|"
2258 ;; Variable declarations. 2258 ;; Variable declarations.
2259 "\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\)\\|" 2259 "\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\(?:-local\\)?\\)\\|"
2260 ;; Structure declarations. 2260 ;; Structure declarations.
2261 "\\(class\\|group\\|theme\\|package\\|struct\\|type\\)" 2261 "\\(class\\|group\\|theme\\|package\\|struct\\|type\\)"
2262 "\\)\\)\\>" 2262 "\\)\\)\\>"
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index b6e8fd976d3..5030da87672 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,8 @@
12013-02-16 Glenn Morris <rgm@gnu.org>
2
3 * shr.el (shr-put-image): Only animate images that specify a delay.
4 This is consistent with the old image-animated-p behavior.
5
12013-02-14 Katsumi Yamaoka <yamaoka@jpl.org> 62013-02-14 Katsumi Yamaoka <yamaoka@jpl.org>
2 7
3 * gnus-util.el (gnus-define-keys): Convert [?\S-\ ] to [(shift space)] 8 * gnus-util.el (gnus-define-keys): Convert [?\S-\ ] to [(shift space)]
diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el
index c9bf324b4fa..1294ca7cd69 100644
--- a/lisp/gnus/shr.el
+++ b/lisp/gnus/shr.el
@@ -615,7 +615,8 @@ size, and full-buffer size."
615 (overlay-put overlay 'face 'default))) 615 (overlay-put overlay 'face 'default)))
616 (insert-image image (or alt "*"))) 616 (insert-image image (or alt "*")))
617 (put-text-property start (point) 'image-size size) 617 (put-text-property start (point) 'image-size size)
618 (when (image-animated-p image) 618 ;; Only animate multi-frame things that specify a delay. FIXME?
619 (when (cdr (image-animated-p image))
619 (image-animate image nil 60))) 620 (image-animate image nil 60)))
620 image) 621 image)
621 (insert alt))) 622 (insert alt)))
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 196336717db..52367811341 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -340,6 +340,9 @@ call."
340 (define-key map (kbd "S-SPC") 'image-scroll-down) 340 (define-key map (kbd "S-SPC") 'image-scroll-down)
341 (define-key map (kbd "DEL") 'image-scroll-down) 341 (define-key map (kbd "DEL") 'image-scroll-down)
342 (define-key map (kbd "RET") 'image-toggle-animation) 342 (define-key map (kbd "RET") 'image-toggle-animation)
343 (define-key map "F" 'image-goto-frame)
344 (define-key map "f" 'image-next-frame)
345 (define-key map "b" 'image-previous-frame)
343 (define-key map "n" 'image-next-file) 346 (define-key map "n" 'image-next-file)
344 (define-key map "p" 'image-previous-file) 347 (define-key map "p" 'image-previous-file)
345 (define-key map [remap forward-char] 'image-forward-hscroll) 348 (define-key map [remap forward-char] 'image-forward-hscroll)
@@ -356,6 +359,53 @@ call."
356 (define-key map [remap move-end-of-line] 'image-eol) 359 (define-key map [remap move-end-of-line] 'image-eol)
357 (define-key map [remap beginning-of-buffer] 'image-bob) 360 (define-key map [remap beginning-of-buffer] 'image-bob)
358 (define-key map [remap end-of-buffer] 'image-eob) 361 (define-key map [remap end-of-buffer] 'image-eob)
362 (easy-menu-define image-mode-menu map "Menu for Image mode."
363 '("Image"
364 ["Show as Text" image-toggle-display :active t
365 :help "Show image as text"]
366 "--"
367 ["Fit Frame to Image" image-mode-fit-frame :active t
368 :help "Resize frame to match image"]
369 ["Fit to Window Height" image-transform-fit-to-height
370 :visible (eq image-type 'imagemagick)
371 :help "Resize image to match the window height"]
372 ["Fit to Window Width" image-transform-fit-to-width
373 :visible (eq image-type 'imagemagick)
374 :help "Resize image to match the window width"]
375 ["Rotate Image..." image-transform-set-rotation
376 :visible (eq image-type 'imagemagick)
377 :help "Rotate the image"]
378 "--"
379 ["Next Image" image-next-file :active t
380 :help "Move to next image in this directory"]
381 ["Previous Image" image-previous-file :active t
382 :help "Move to previous image in this directory"]
383 "--"
384 ["Animate Image" image-toggle-animation :style toggle
385 :selected (let ((image (image-get-display-property)))
386 (and image (image-animate-timer image)))
387 :active image-current-frame
388 :help "Toggle image animation"]
389 ["Loop Animation"
390 (lambda () (interactive)
391;;; (make-variable-buffer-local 'image-animate-loop)
392 (setq image-animate-loop (not image-animate-loop))
393 ;; FIXME this is a hacky way to make it affect a currently
394 ;; animating image.
395 (when (let ((image (image-get-display-property)))
396 (and image (image-animate-timer image)))
397 (image-toggle-animation)
398 (image-toggle-animation)))
399 :style toggle :selected image-animate-loop
400 :active image-current-frame
401 :help "Animate images once, or forever?"]
402 ["Next Frame" image-next-frame :active image-current-frame
403 :help "Show the next frame of this image"]
404 ["Previous Frame" image-previous-frame :active image-current-frame
405 :help "Show the previous frame of this image"]
406 ["Goto Frame..." image-goto-frame :active image-current-frame
407 :help "Show a specific frame of this image"]
408 ))
359 map) 409 map)
360 "Mode keymap for `image-mode'.") 410 "Mode keymap for `image-mode'.")
361 411
@@ -409,15 +459,22 @@ to toggle between display as an image and display as text."
409 (run-mode-hooks 'image-mode-hook) 459 (run-mode-hooks 'image-mode-hook)
410 (let ((image (image-get-display-property)) 460 (let ((image (image-get-display-property))
411 (msg1 (substitute-command-keys 461 (msg1 (substitute-command-keys
412 "Type \\[image-toggle-display] to view the image as "))) 462 "Type \\[image-toggle-display] to view the image as "))
463 animated)
413 (cond 464 (cond
414 ((null image) 465 ((null image)
415 (message "%s" (concat msg1 "an image."))) 466 (message "%s" (concat msg1 "an image.")))
416 ((image-animated-p image) 467 ((setq animated (image-multi-frame-p image))
468 (setq image-current-frame (or (plist-get (cdr image) :index) 0)
469 mode-line-process
470 `(:eval (propertize (format " [%s/%s]"
471 (1+ image-current-frame)
472 ,(car animated))
473 'help-echo "Frame number")))
417 (message "%s" 474 (message "%s"
418 (concat msg1 "text, or " 475 (concat msg1 "text. This image has multiple frames.")))
419 (substitute-command-keys 476;;; (substitute-command-keys
420 "\\[image-toggle-animation] to animate.")))) 477;;; "\\[image-toggle-animation] to animate."))))
421 (t 478 (t
422 (message "%s" (concat msg1 "text.")))))) 479 (message "%s" (concat msg1 "text."))))))
423 480
@@ -606,7 +663,7 @@ Otherwise it plays once, then stops."
606 (cond 663 (cond
607 ((null image) 664 ((null image)
608 (error "No image is present")) 665 (error "No image is present"))
609 ((null (setq animation (image-animated-p image))) 666 ((null (setq animation (image-multi-frame-p image)))
610 (message "No image animation.")) 667 (message "No image animation."))
611 (t 668 (t
612 (let ((timer (image-animate-timer image))) 669 (let ((timer (image-animate-timer image)))
@@ -620,6 +677,36 @@ Otherwise it plays once, then stops."
620 (image-animate image index 677 (image-animate image index
621 (if image-animate-loop t))))))))) 678 (if image-animate-loop t)))))))))
622 679
680(defun image-goto-frame (n &optional relative)
681 "Show frame N of a multi-frame image.
682Optional argument OFFSET non-nil means interpret N as relative to the
683current frame. Frames are indexed from 1."
684 (interactive
685 (list (or current-prefix-arg
686 (read-number "Show frame number: "))))
687 (let ((image (image-get-display-property)))
688 (cond
689 ((null image)
690 (error "No image is present"))
691 ((null image-current-frame)
692 (message "No image animation."))
693 (t
694 (image-nth-frame image (if relative (+ n image-current-frame) (1- n)))))))
695
696(defun image-next-frame (&optional n)
697 "Switch to the next frame of a multi-frame image.
698With optional argument N, switch to the Nth frame after the current one.
699If N is negative, switch to the Nth frame before the current one."
700 (interactive "p")
701 (image-goto-frame n t))
702
703(defun image-previous-frame (&optional n)
704 "Switch to the previous frame of a multi-frame image.
705With optional argument N, switch to the Nth frame before the current one.
706If N is negative, switch to the Nth frame after the current one."
707 (interactive "p")
708 (image-next-frame (- n)))
709
623 710
624;;; Switching to the next/previous image 711;;; Switching to the next/previous image
625 712
diff --git a/lisp/image.el b/lisp/image.el
index 73b25f6da67..b91d136443d 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -606,25 +606,25 @@ Example:
606 606
607;;; Animated image API 607;;; Animated image API
608 608
609(defconst image-animated-types '(gif) 609(defvar image-default-frame-delay 0.1
610 "List of supported animated image types.") 610 "Default interval in seconds between frames of a multi-frame image.
611 611Only used if the image does not specify a value.")
612(defun image-animated-p (image) 612
613 "Return non-nil if IMAGE can be animated. 613(defun image-multi-frame-p (image)
614To be capable of being animated, an image must be of a type 614 "Return non-nil if IMAGE contains more than one frame.
615listed in `image-animated-types', and contain more than one 615The actual return value is a cons (NIMAGES . DELAY), where NIMAGES is
616sub-image, with a specified animation delay. The actual return 616the number of frames (or sub-images) in the image and DELAY is the delay
617value is a cons (NIMAGES . DELAY), where NIMAGES is the number 617in seconds that the image specifies between each frame. DELAY may be nil,
618of sub-images in the animated image and DELAY is the delay in 618in which case you might want to use `image-default-frame-delay'."
619seconds until the next sub-image should be displayed." 619 (let* ((metadata (image-metadata image))
620 (cond 620 (images (plist-get metadata 'count))
621 ((memq (plist-get (cdr image) :type) image-animated-types) 621 (delay (plist-get metadata 'delay)))
622 (let* ((metadata (image-metadata image)) 622 (when (and images (> images 1))
623 (images (plist-get metadata 'count)) 623 (if (or (not (numberp delay)) (< delay 0))
624 (delay (plist-get metadata 'delay))) 624 (setq delay image-default-frame-delay))
625 (when (and images (> images 1) (numberp delay)) 625 (cons images delay))))
626 (if (< delay 0) (setq delay 0.1)) 626
627 (cons images delay)))))) 627(define-obsolete-function-alias 'image-animated-p 'image-multi-frame-p "24.4")
628 628
629;; "Destructively"? 629;; "Destructively"?
630(defun image-animate (image &optional index limit) 630(defun image-animate (image &optional index limit)
@@ -635,7 +635,7 @@ With optional INDEX, begin animating from that animation frame.
635LIMIT specifies how long to animate the image. If omitted or 635LIMIT specifies how long to animate the image. If omitted or
636nil, play the animation until the end. If t, loop forever. If a 636nil, play the animation until the end. If t, loop forever. If a
637number, play until that number of seconds has elapsed." 637number, play until that number of seconds has elapsed."
638 (let ((animation (image-animated-p image)) 638 (let ((animation (image-multi-frame-p image))
639 timer) 639 timer)
640 (when animation 640 (when animation
641 (if (setq timer (image-animate-timer image)) 641 (if (setq timer (image-animate-timer image))
@@ -657,8 +657,25 @@ number, play until that number of seconds has elapsed."
657 (setq timer nil))) 657 (setq timer nil)))
658 timer)) 658 timer))
659 659
660(defconst image-minimum-frame-delay 0.01
661 "Minimum interval in seconds between frames of an animated image.")
662
663(defvar-local image-current-frame nil
664 "The frame index of the current animated image.")
665
666(defun image-nth-frame (image n &optional nocheck)
667 "Show frame N of IMAGE.
668Frames are indexed from 0. Optional argument NOCHECK non-nil means
669do not check N is within the range of frames present in the image."
670 (unless nocheck
671 (if (< n 0) (setq n 0)
672 (setq n (min n (1- (car (image-multi-frame-p image)))))))
673 (plist-put (cdr image) :index n)
674 (setq image-current-frame n)
675 (force-window-update))
676
660;; FIXME? The delay may not be the same for different sub-images, 677;; FIXME? The delay may not be the same for different sub-images,
661;; hence we need to call image-animated-p to return it. 678;; hence we need to call image-multi-frame-p to return it.
662;; But it also returns count, so why do we bother passing that as an 679;; But it also returns count, so why do we bother passing that as an
663;; argument? 680;; argument?
664(defun image-animate-timeout (image n count time-elapsed limit) 681(defun image-animate-timeout (image n count time-elapsed limit)
@@ -670,16 +687,16 @@ TIME-ELAPSED is the total time that has elapsed since
670LIMIT determines when to stop. If t, loop forever. If nil, stop 687LIMIT determines when to stop. If t, loop forever. If nil, stop
671 after displaying the last animation frame. Otherwise, stop 688 after displaying the last animation frame. Otherwise, stop
672 after LIMIT seconds have elapsed. 689 after LIMIT seconds have elapsed.
673The minimum delay between successive frames is 0.01s." 690The minimum delay between successive frames is `image-minimum-frame-delay'."
674 (plist-put (cdr image) :index n) 691 (image-nth-frame image n t)
675 (force-window-update)
676 (setq n (1+ n)) 692 (setq n (1+ n))
677 (let* ((time (float-time)) 693 (let* ((time (float-time))
678 (animation (image-animated-p image)) 694 (animation (image-multi-frame-p image))
679 ;; Subtract off the time we took to load the image from the 695 ;; Subtract off the time we took to load the image from the
680 ;; stated delay time. 696 ;; stated delay time.
681 (delay (max (+ (cdr animation) time (- (float-time))) 697 (delay (max (+ (or (cdr animation) image-default-frame-delay)
682 0.01)) 698 time (- (float-time)))
699 image-minimum-frame-delay))
683 done) 700 done)
684 (if (>= n count) 701 (if (>= n count)
685 (if limit 702 (if limit
diff --git a/lisp/info-look.el b/lisp/info-look.el
index a67fabc5a88..0b33dd51faf 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -298,6 +298,21 @@ If optional argument QUERY is non-nil, query for the help mode."
298 (when (string-match (caar file-name-alist) file-name) 298 (when (string-match (caar file-name-alist) file-name)
299 (setq info-lookup-mode (cdar file-name-alist))) 299 (setq info-lookup-mode (cdar file-name-alist)))
300 (setq file-name-alist (cdr file-name-alist))))) 300 (setq file-name-alist (cdr file-name-alist)))))
301
302 ;; If major-mode has no setups in info-lookup-alist, under any topic, then
303 ;; search up through derived-mode-parent to find a parent mode which does
304 ;; have some setups. This means that a `define-derived-mode' with no
305 ;; setups of its own will select its parent mode for lookups, if one of
306 ;; its parents has some setups. Good for example on `makefile-gmake-mode'
307 ;; and similar derivatives of `makefile-mode'.
308 ;;
309 (let ((mode major-mode)) ;; Look for `mode' with some setups.
310 (while (and mode (not info-lookup-mode))
311 (dolist (topic-cell info-lookup-alist) ;; Usually only two topics here.
312 (if (info-lookup->mode-value (car topic-cell) mode)
313 (setq info-lookup-mode mode)))
314 (setq mode (get mode 'derived-mode-parent))))
315
301 (or info-lookup-mode (setq info-lookup-mode major-mode))) 316 (or info-lookup-mode (setq info-lookup-mode major-mode)))
302 317
303(defun info-lookup-change-mode (topic) 318(defun info-lookup-change-mode (topic)
diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el
index d1ef1739bf7..dc45a57b7c6 100644
--- a/lisp/net/tramp-cache.el
+++ b/lisp/net/tramp-cache.el
@@ -58,6 +58,19 @@
58(defvar tramp-cache-data (make-hash-table :test 'equal) 58(defvar tramp-cache-data (make-hash-table :test 'equal)
59 "Hash table for remote files properties.") 59 "Hash table for remote files properties.")
60 60
61;;;###tramp-autoload
62(defcustom tramp-connection-properties nil
63 "List of static connection properties.
64Every entry has the form (REGEXP PROPERTY VALUE). The regexp
65matches remote file names. It can be nil. PROPERTY is a string,
66and VALUE the corresponding value. They are used, if there is no
67matching entry in for PROPERTY in `tramp-cache-data'."
68 :group 'tramp
69 :version "24.4"
70 :type '(repeat (list (choice :tag "File Name regexp" regexp (const nil))
71 (choice :tag " Property" string)
72 (choice :tag " Value" sexp))))
73
61(defcustom tramp-persistency-file-name 74(defcustom tramp-persistency-file-name
62 (cond 75 (cond
63 ;; GNU Emacs. 76 ;; GNU Emacs.
@@ -204,9 +217,27 @@ If the value is not set for the connection, returns DEFAULT."
204 (setq key (copy-sequence key)) 217 (setq key (copy-sequence key))
205 (aset key 3 nil)) 218 (aset key 3 nil))
206 (let* ((hash (gethash key tramp-cache-data)) 219 (let* ((hash (gethash key tramp-cache-data))
207 (value (if (hash-table-p hash) 220 (value
208 (gethash property hash default) 221 (catch 'result
209 default))) 222 (or
223 ;; Check for dynamic properties.
224 (and
225 (hash-table-p hash)
226 (maphash
227 (lambda (x y) (when (equal x property) (throw 'result y)))
228 hash))
229 ;; Check for static properties.
230 (and
231 (vectorp key)
232 (dolist (elt tramp-connection-properties)
233 (when (and (string-match
234 (or (nth 0 elt) "")
235 (tramp-make-tramp-file-name
236 (aref key 0) (aref key 1) (aref key 2) nil))
237 (string-equal (or (nth 1 elt) "") (or property "")))
238 (throw 'result (nth 2 elt)))))
239 ;; The default value.
240 default))))
210 (tramp-message key 7 "%s %s" property value) 241 (tramp-message key 7 "%s %s" property value)
211 value)) 242 value))
212 243
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
index 12510bf7fab..81c4d5ccced 100644
--- a/lisp/net/tramp-compat.el
+++ b/lisp/net/tramp-compat.el
@@ -52,6 +52,7 @@
52 (require 'format-spec) 52 (require 'format-spec)
53 (require 'shell) 53 (require 'shell)
54 54
55 (require 'trampver)
55 (require 'tramp-loaddefs) 56 (require 'tramp-loaddefs)
56 57
57 ;; As long as password.el is not part of (X)Emacs, it shouldn't be 58 ;; As long as password.el is not part of (X)Emacs, it shouldn't be
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 001a27f3b2e..9be22352b23 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -512,6 +512,7 @@ as given in your `~/.profile'."
512 (const :tag "Private Directories" tramp-own-remote-path) 512 (const :tag "Private Directories" tramp-own-remote-path)
513 (string :tag "Directory")))) 513 (string :tag "Directory"))))
514 514
515;;;###tramp-autoload
515(defcustom tramp-remote-process-environment 516(defcustom tramp-remote-process-environment
516 `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_ALL=C" 517 `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_ALL=C"
517 ,(format "TERM=%s" tramp-terminal-type) 518 ,(format "TERM=%s" tramp-terminal-type)
diff --git a/lisp/replace.el b/lisp/replace.el
index 7757426cf95..0b8aaa7d349 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -585,27 +585,32 @@ of `history-length', which see.")
585When PROMPT doesn't end with a colon and space, it adds a final \": \". 585When PROMPT doesn't end with a colon and space, it adds a final \": \".
586If DEFAULTS is non-nil, it displays the first default in the prompt. 586If DEFAULTS is non-nil, it displays the first default in the prompt.
587 587
588Non-nil optional arg DEFAULTS is a string or a list of strings that 588Optional arg DEFAULTS is a string or a list of strings that are
589are prepended to a list of standard default values, which include the 589prepended to a list of standard default values, which include the
590string at point, the last isearch regexp, the last isearch string, and 590tag at point, the last isearch regexp, the last isearch string,
591the last replacement regexp. 591and the last replacement regexp.
592 592
593Non-nil HISTORY is a symbol to use for the history list. 593Non-nil HISTORY is a symbol to use for the history list.
594If HISTORY is nil, `regexp-history' is used." 594If HISTORY is nil, `regexp-history' is used."
595 (let* ((default (if (consp defaults) (car defaults) defaults)) 595 (let* ((defaults
596 (defaults
597 (append 596 (append
598 (if (listp defaults) defaults (list defaults)) 597 (if (listp defaults) defaults (list defaults))
599 (list (regexp-quote 598 (list
600 (or (funcall (or find-tag-default-function 599 ;; Regexp for tag at point.
600 (let* ((tagf (or find-tag-default-function
601 (get major-mode 'find-tag-default-function) 601 (get major-mode 'find-tag-default-function)
602 'find-tag-default)) 602 'find-tag-default))
603 "")) 603 (tag (funcall tagf)))
604 (cond ((not tag) "")
605 ((eq tagf 'find-tag-default)
606 (format "\\_<%s\\_>" (regexp-quote tag)))
607 (t (regexp-quote tag))))
604 (car regexp-search-ring) 608 (car regexp-search-ring)
605 (regexp-quote (or (car search-ring) "")) 609 (regexp-quote (or (car search-ring) ""))
606 (car (symbol-value 610 (car (symbol-value
607 query-replace-from-history-variable))))) 611 query-replace-from-history-variable)))))
608 (defaults (delete-dups (delq nil (delete "" defaults)))) 612 (defaults (delete-dups (delq nil (delete "" defaults))))
613 (default (car defaults))
609 ;; Do not automatically add default to the history for empty input. 614 ;; Do not automatically add default to the history for empty input.
610 (history-add-new-input nil) 615 (history-add-new-input nil)
611 (input (read-from-minibuffer 616 (input (read-from-minibuffer
diff --git a/lisp/simple.el b/lisp/simple.el
index 849f7dac55c..138c2420309 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1293,13 +1293,12 @@ display the result of expression evaluation."
1293 1293
1294;; We define this, rather than making `eval' interactive, 1294;; We define this, rather than making `eval' interactive,
1295;; for the sake of completion of names like eval-region, eval-buffer. 1295;; for the sake of completion of names like eval-region, eval-buffer.
1296(defun eval-expression (eval-expression-arg 1296(defun eval-expression (exp &optional insert-value)
1297 &optional eval-expression-insert-value) 1297 "Evaluate EXP and print value in the echo area.
1298 "Evaluate EVAL-EXPRESSION-ARG and print value in the echo area.
1299When called interactively, read an Emacs Lisp expression and 1298When called interactively, read an Emacs Lisp expression and
1300evaluate it. 1299evaluate it.
1301Value is also consed on to front of the variable `values'. 1300Value is also consed on to front of the variable `values'.
1302Optional argument EVAL-EXPRESSION-INSERT-VALUE non-nil (interactively, 1301Optional argument INSERT-VALUE non-nil (interactively,
1303with prefix argument) means insert the result into the current buffer 1302with prefix argument) means insert the result into the current buffer
1304instead of printing it in the echo area. Truncates long output 1303instead of printing it in the echo area. Truncates long output
1305according to the value of the variables `eval-expression-print-length' 1304according to the value of the variables `eval-expression-print-length'
@@ -1315,12 +1314,12 @@ this command arranges for all errors to enter the debugger."
1315 current-prefix-arg)) 1314 current-prefix-arg))
1316 1315
1317 (if (null eval-expression-debug-on-error) 1316 (if (null eval-expression-debug-on-error)
1318 (push (eval eval-expression-arg lexical-binding) values) 1317 (push (eval exp lexical-binding) values)
1319 (let ((old-value (make-symbol "t")) new-value) 1318 (let ((old-value (make-symbol "t")) new-value)
1320 ;; Bind debug-on-error to something unique so that we can 1319 ;; Bind debug-on-error to something unique so that we can
1321 ;; detect when evalled code changes it. 1320 ;; detect when evalled code changes it.
1322 (let ((debug-on-error old-value)) 1321 (let ((debug-on-error old-value))
1323 (push (eval eval-expression-arg lexical-binding) values) 1322 (push (eval exp lexical-binding) values)
1324 (setq new-value debug-on-error)) 1323 (setq new-value debug-on-error))
1325 ;; If evalled code has changed the value of debug-on-error, 1324 ;; If evalled code has changed the value of debug-on-error,
1326 ;; propagate that change to the global binding. 1325 ;; propagate that change to the global binding.
@@ -1328,8 +1327,9 @@ this command arranges for all errors to enter the debugger."
1328 (setq debug-on-error new-value)))) 1327 (setq debug-on-error new-value))))
1329 1328
1330 (let ((print-length eval-expression-print-length) 1329 (let ((print-length eval-expression-print-length)
1331 (print-level eval-expression-print-level)) 1330 (print-level eval-expression-print-level)
1332 (if eval-expression-insert-value 1331 (deactivate-mark))
1332 (if insert-value
1333 (with-no-warnings 1333 (with-no-warnings
1334 (let ((standard-output (current-buffer))) 1334 (let ((standard-output (current-buffer)))
1335 (prin1 (car values)))) 1335 (prin1 (car values))))
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 72842ad188d..f8f24de6b68 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,9 @@
12013-02-16 Glenn Morris <rgm@gnu.org>
2
3 * url-http.el (url-http-wait-for-headers-change-function):
4 Avoid prematurely finding the end of headers when they arrive
5 line-by-line. (Bug#13598)
6
12013-02-03 Stefan Monnier <monnier@iro.umontreal.ca> 72013-02-03 Stefan Monnier <monnier@iro.umontreal.ca>
2 8
3 * url-cache.el (url-cache-create-filename-using-md5): Don't waste your 9 * url-cache.el (url-cache-create-filename-using-md5): Don't waste your
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index 5dd3a751702..33fc5722759 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -1040,7 +1040,9 @@ the end of the document."
1040 (setq end-of-headers t 1040 (setq end-of-headers t
1041 url-http-end-of-headers 0 1041 url-http-end-of-headers 0
1042 old-http t) 1042 old-http t)
1043 (when (re-search-forward "^\r*$" nil t) 1043 ;; Blank line at end of headers.
1044 (when (re-search-forward "^\r?\n" nil t)
1045 (backward-char 1)
1044 ;; Saw the end of the headers 1046 ;; Saw the end of the headers
1045 (url-http-debug "Saw end of headers... (%s)" (buffer-name)) 1047 (url-http-debug "Saw end of headers... (%s)" (buffer-name))
1046 (setq url-http-end-of-headers (set-marker (make-marker) 1048 (setq url-http-end-of-headers (set-marker (make-marker)