]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow accessing the image commands via shr
authorLars Ingebrigtsen <larsi@gnus.org>
Wed, 10 Feb 2016 01:56:21 +0000 (12:56 +1100)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 10 Feb 2016 01:56:21 +0000 (12:56 +1100)
* lisp/gnus/mm-decode.el (mm-convert-shr-links): Allow
accessing the image commands.

* lisp/net/shr.el (shr-image-map): New map used for images.
(shr-urlify): Don't overwrite image maps when applying URL maps.

lisp/gnus/mm-decode.el
lisp/net/eww.el
lisp/net/shr.el

index c45258e987cf9e6a88951c1bde41020c3c27860c..598ae948d99bf605e6882db5c793c9622641c0ec 100644 (file)
@@ -1906,7 +1906,8 @@ If RECURSIVE, search recursively."
        (widget-convert-button
         'url-link start end
         :help-echo (get-text-property start 'help-echo)
-        :keymap shr-map
+        ;;; FIXME Should only use the image map on images.
+        :keymap shr-image-map
         (get-text-property start 'shr-url))
        (put-text-property start end 'local-map nil)
        (dolist (overlay (overlays-at start))
index fdac46483c7af7fa4e6c0ea719fdc497a38ab329..7f9f4fad4142229dd84ae67bdc714d8eb848f2bf 100644 (file)
@@ -223,7 +223,7 @@ See also `eww-form-checkbox-selected-symbol'."
   "When this regex is found in the URL, it's not a keyword but an address.")
 
 (defvar eww-link-keymap
-  (let ((map (copy-keymap shr-map)))
+  (let ((map (copy-keymap shr-image-map)))
     (define-key map "\r" 'eww-follow-link)
     map))
 
index 9064b9668f4edcb2ed5acbbe0af095bf843e5fe0..339f877beffa561b6eb816ff13f1bfd7e8fc97fe 100644 (file)
@@ -189,6 +189,11 @@ and other things:
     (define-key map "\r" 'shr-browse-url)
     map))
 
+(defvar shr-image-map
+  (let ((map (copy-keymap shr-map)))
+    (set-keymap-parent map image-map)
+    map))
+
 ;; Public functions and commands.
 (declare-function libxml-parse-html-region "xml.c"
                  (start end &optional base-url discard-comments))
@@ -1076,8 +1081,15 @@ START, and END.  Note that START and END should be markers."
                                   url)))
                      (if title (format "%s (%s)" iri title) iri))
         'follow-link t
-        'mouse-face 'highlight
-        'keymap shr-map)))
+        'mouse-face 'highlight))
+  ;; Don't overwrite any keymaps that are already in the buffer (i.e.,
+  ;; image keymaps).
+  (while (and start
+              (< start (point)))
+    (let ((next (next-single-property-change start 'keymap nil (point))))
+      (if (get-text-property start 'keymap)
+          (setq start next)
+        (put-text-property start (or next (point)) 'keymap shr-map)))))
 
 (defun shr-encode-url (url)
   "Encode URL."
@@ -1457,7 +1469,7 @@ The preference is a float determined from `shr-prefer-media-type'."
           (list (current-buffer) start (set-marker (make-marker) (1- (point))))
           t t)))
        (when (zerop shr-table-depth) ;; We are not in a table.
-         (put-text-property start (point) 'keymap shr-map)
+         (put-text-property start (point) 'keymap shr-image-map)
          (put-text-property start (point) 'shr-alt alt)
          (put-text-property start (point) 'image-url url)
          (put-text-property start (point) 'image-displayer