Merge changes made in Gnus trunk.

gnus-gravatar.el (gnus-art): Required.
shr.el (shr-tag-img): Add align attribute support for <img>.
gnus-gravatar.el (gnus-gravatar-insert): Check if buffer is alive.
shr.el (shr-tag-img): Encode URL properly when retrieving.
shr.el (shr-get-image-data): Encode URL properly when fetching from cache.
shr.el (shr-tag-img): Use aligned-to spaces to align correctly images.
nnimap.el (nnimap-request-rename-group): Unselect by selecting a mailbox that doesn't exist.
rfc2231.el (rfc2231-parse-string): Ignore repeated parts.
gnus-gravatar.el (gnus-gravatar-too-ugly): Don't test if gnus-article-x-face-too-ugly is bound.
This commit is contained in:
Gnus developers 2010-10-12 22:18:24 +00:00 committed by Katsumi Yamaoka
parent fe239e8e52
commit ab67634f9d
6 changed files with 104 additions and 45 deletions

View file

@ -1,5 +1,30 @@
2010-10-12 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-gravatar.el (gnus-gravatar-too-ugly): Don't test if
gnus-article-x-face-too-ugly is bound.
2010-10-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
* rfc2231.el (rfc2231-parse-string): Ignore repeated parts.
* nnimap.el (nnimap-request-rename-group): Unselect by selecting a
mailbox that doesn't exist.
2010-10-12 Julien Danjou <julien@danjou.info>
* shr.el (shr-tag-img): Encode URL properly when retrieving.
(shr-get-image-data): Encode URL properly when fetching from cache.
(shr-tag-img): Use aligned-to spaces to align correctly images.
* gnus-gravatar.el (gnus-gravatar-insert): Check if buffer is alive
before inserting the Gravatar.
* shr.el (shr-tag-img): Add align attribute support for <img>.
2010-10-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-gravatar.el (gnus-art): Required.
* gnus-sum.el (gnus-summary-mark-as-unread-forward)
(gnus-summary-mark-as-unread-backward, gnus-summary-mark-as-unread):
Remove long obsoleted functions.

View file

@ -147,7 +147,7 @@
(save-restriction
(narrow-to-region (point) (point-at-eol))
(while (not (eobp))
;; Put the 'region face on any charactes on this line that
;; Put the 'region face on any characters on this line that
;; aren't already highlighted.
(unless (get-text-property (point) 'face)
(put-text-property (point) (1+ (point)) 'face 'highlight))

View file

@ -25,6 +25,7 @@
;;; Code:
(require 'gravatar)
(require 'gnus-art)
(defgroup gnus-gravatar nil
"Gnus Gravatar."
@ -42,8 +43,7 @@
:version "24.1"
:group 'gnus-gravatar)
(defcustom gnus-gravatar-too-ugly (if (boundp 'gnus-article-x-face-too-ugly)
gnus-article-x-face-too-ugly)
(defcustom gnus-gravatar-too-ugly gnus-article-x-face-too-ugly
"Regexp matching posters whose avatar shouldn't be shown automatically."
:type '(choice regexp (const nil))
:version "24.1"
@ -79,32 +79,34 @@
Set image category to CATEGORY."
(unless (eq gravatar 'error)
(gnus-with-article-headers
(gnus-article-goto-header header)
(mail-header-narrow-to-field)
(let ((real-name (cdr address))
(mail-address (car address)))
(when (if real-name ; have a realname, go for it!
(and (search-forward real-name nil t)
(search-backward real-name nil t))
(and (search-forward mail-address nil t)
(search-backward mail-address nil t)))
(goto-char (1- (point)))
;; If we're on the " quoting the name, go backward
(when (looking-at "[\"<]")
(goto-char (1- (point))))
;; Do not do anything if there's already a gravatar. This can
;; happens if the buffer has been regenerated in the mean time, for
;; example we were fetching someaddress, and then we change to
;; another mail with the same someaddress.
(unless (memq 'gnus-gravatar (text-properties-at (point)))
(let ((inhibit-read-only t)
(point (point)))
(unless (featurep 'xemacs)
(setq gravatar (append gravatar gnus-gravatar-properties)))
(gnus-put-image gravatar nil category)
(put-text-property point (point) 'gnus-gravatar address)
(gnus-add-wash-type category)
(gnus-add-image category gravatar))))))))
;; The buffer can be gone at this time
(when (buffer-live-p (current-buffer))
(gnus-article-goto-header header)
(mail-header-narrow-to-field)
(let ((real-name (cdr address))
(mail-address (car address)))
(when (if real-name ; have a realname, go for it!
(and (search-forward real-name nil t)
(search-backward real-name nil t))
(and (search-forward mail-address nil t)
(search-backward mail-address nil t)))
(goto-char (1- (point)))
;; If we're on the " quoting the name, go backward
(when (looking-at "[\"<]")
(goto-char (1- (point))))
;; Do not do anything if there's already a gravatar. This can
;; happens if the buffer has been regenerated in the mean time, for
;; example we were fetching someaddress, and then we change to
;; another mail with the same someaddress.
(unless (memq 'gnus-gravatar (text-properties-at (point)))
(let ((inhibit-read-only t)
(point (point)))
(unless (featurep 'xemacs)
(setq gravatar (append gravatar gnus-gravatar-properties)))
(gnus-put-image gravatar nil category)
(put-text-property point (point) 'gnus-gravatar address)
(gnus-add-wash-type category)
(gnus-add-image category gravatar)))))))))
;;;###autoload
(defun gnus-treat-from-gravatar ()

View file

@ -673,8 +673,11 @@ textual parts.")
(deffoo nnimap-request-rename-group (group new-name &optional server)
(when (nnimap-possibly-change-group nil server)
(with-current-buffer (nnimap-buffer)
;; Make sure we don't have this group open read/write.
(nnimap-command "EXAMINE %S" (utf7-encode group 7))
;; Make sure we don't have this group open read/write by asking
;; to examine a mailbox that doesn't exist. This seems to be
;; the only way that allows us to reliably go back to unselected
;; state on Courier.
(nnimap-command "EXAMINE DOES.NOT.EXIST")
(setf (nnimap-group nnimap-object) nil)
(car (nnimap-command "RENAME %S %S"
(utf7-encode group t) (utf7-encode new-name t))))))

View file

@ -185,11 +185,19 @@ must never cause a Lisp error."
in (sort parameters (lambda (e1 e2)
(< (or (caddr e1) 0)
(or (caddr e2) 0))))
do (if (or (not (setq elem (assq attribute cparams)))
(and (numberp part)
(zerop part)))
(push (list attribute value encoded) cparams)
(setcar (cdr elem) (concat (cadr elem) value))))
do (cond
;; First part.
((or (not (setq elem (assq attribute cparams)))
(and (numberp part)
(zerop part)))
(push (list attribute value encoded) cparams))
;; Repetition of a part; do nothing.
((and elem
(null number))
)
;; Concatenate continuation parts.
(t
(setcar (cdr elem) (concat (cadr elem) value)))))
;; Finally decode encoded values.
(cons type (mapcar
(lambda (elem)

View file

@ -344,7 +344,7 @@ Return a string with image data."
(with-temp-buffer
(mm-disable-multibyte)
(when (ignore-errors
(url-cache-extract (url-cache-create-filename url))
(url-cache-extract (url-cache-create-filename (shr-encode-url url)))
t)
(when (or (search-forward "\n\n" nil t)
(search-forward "\r\n\r\n" nil t))
@ -389,19 +389,40 @@ Return a string with image data."
(put-text-property (or shr-start start) (point) 'keymap shr-map)
(put-text-property (or shr-start start) (point) 'shr-url url)))
(defun shr-encode-url (url)
"Encode URL."
(browse-url-url-encode-chars url "[)$ ]"))
(defun shr-tag-img (cont)
(when (and (> (current-column) 0)
(not (eq shr-state 'image)))
(insert "\n"))
(let ((start (point-marker)))
(let ((alt (cdr (assq :alt cont)))
(url (cdr (assq :src cont))))
(let ((alt (cdr (assq :alt cont)))
(url (cdr (assq :src cont)))
(width (cdr (assq :width cont))))
;; Only respect align if width specified.
(when width
;; Check that width is not larger than max width, otherwise ignore
;; align
(let ((max-width (* fill-column (frame-char-width)))
(width (string-to-number width)))
(when (< width max-width)
(let ((align (cdr (assq :align cont))))
(cond ((string= align "right")
(insert (propertize
" " 'display
`(space . (:align-to ,(list (- max-width width)))))))
((string= align "center")
(insert (propertize
" " 'display
`(space . (:balign-to ,(list (- (/ max-width 2) width))))))))))))
(let ((start (point-marker)))
(when (zerop (length alt))
(setq alt "[img]"))
(setq alt "[img]"))
(cond
((and (not shr-inhibit-images)
(string-match "\\`cid:" url))
(let ((url (substring url (match-end 0)))
(string-match "\\`cid:" url))
(let ((url (substring url (match-end 0)))
image)
(if (or (not shr-content-function)
(not (setq image (funcall shr-content-function url))))
@ -415,12 +436,12 @@ Return a string with image data."
(if (> (length alt) 8)
(shr-insert (substring alt 0 8))
(shr-insert alt))))
((url-is-cached (browse-url-url-encode-chars url "[&)$ ]"))
((url-is-cached (shr-encode-url url))
(shr-put-image (shr-get-image-data url) (point) alt))
(t
(insert alt)
(ignore-errors
(url-retrieve url 'shr-image-fetched
(url-retrieve (shr-encode-url url) 'shr-image-fetched
(list (current-buffer) start (point-marker))
t))))
(insert " ")