;;; gnus-sum.el --- summary mode commands for Gnus
-;; Copyright (C) 1996-2011 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2012 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news
(?c (or (mail-header-chars gnus-tmp-header) 0) ?d)
(?k (gnus-summary-line-message-size gnus-tmp-header) ?s)
(?L gnus-tmp-lines ?s)
- (?Z (or ,(gnus-macroexpand-all
- '(nnir-article-rsv (mail-header-number gnus-tmp-header)))
+ (?Z (or (nnir-article-rsv (mail-header-number gnus-tmp-header))
0) ?d)
- (?G (or ,(gnus-macroexpand-all
- '(nnir-article-group (mail-header-number gnus-tmp-header)))
+ (?G (or (nnir-article-group (mail-header-number gnus-tmp-header))
"") ?s)
- (?g (or ,(gnus-macroexpand-all
- '(gnus-group-short-name
- (nnir-article-group (mail-header-number gnus-tmp-header))))
+ (?g (or (gnus-group-short-name
+ (nnir-article-group (mail-header-number gnus-tmp-header)))
"") ?s)
(?O gnus-tmp-downloaded ?c)
(?I gnus-tmp-indentation ?s)
"x" gnus-summary-limit-to-unread
"s" gnus-summary-isearch-article
[tab] gnus-summary-widget-forward
+ [backtab] gnus-summary-widget-backward
"t" gnus-summary-toggle-header
"g" gnus-summary-show-article
"l" gnus-summary-goto-last-article
"g" gnus-summary-show-article
"s" gnus-summary-isearch-article
[tab] gnus-summary-widget-forward
+ [backtab] gnus-summary-widget-forward
"P" gnus-summary-print-article
"S" gnus-sticky-article
"M" gnus-mailing-list-insinuate
'gnus-summary-tool-bar-retro)
"Specifies the Gnus summary tool bar.
-It can be either a list or a symbol refering to a list. See
+It can be either a list or a symbol referring to a list. See
`gmm-tool-bar-from-list' for the format of the list. The
default key map is `gnus-summary-mode-map'.
'gnus-summary-mode-map)))
(when map
;; Need to set `gnus-summary-tool-bar-map' because `gnus-article-mode'
- ;; uses it's value.
+ ;; uses its value.
(setq gnus-summary-tool-bar-map map))))
(set (make-local-variable 'tool-bar-map) gnus-summary-tool-bar-map))
(declare-function turn-on-gnus-mailing-list-mode "gnus-ml" ())
(defvar bookmark-make-record-function)
\f
+(defvar bidi-paragraph-direction)
(defun gnus-summary-mode (&optional group)
"Major mode for reading articles.
(setq buffer-read-only t ;Disable modification
show-trailing-whitespace nil)
(setq truncate-lines t)
+ ;; Force paragraph direction to be left-to-right. Don't make it
+ ;; bound globally in old Emacsen and XEmacsen.
+ (set (make-local-variable 'bidi-paragraph-direction) 'left-to-right)
(add-to-invisibility-spec '(gnus-sum . t))
(gnus-summary-set-display-table)
(gnus-set-default-directory)
(current-buffer))))))
(defun gnus-summary-setup-buffer (group)
- "Initialize summary buffer."
+ "Initialize summary buffer.
+If the setup was successful, non-nil is returned."
(let ((buffer (gnus-summary-buffer-name group))
(dead-name (concat "*Dead Summary "
(gnus-group-decoded-name group) "*")))
"Start reading news in newsgroup GROUP.
If SHOW-ALL is non-nil, already read articles are also listed.
If NO-ARTICLE is non-nil, no article is selected initially.
-If NO-DISPLAY, don't generate a summary buffer."
+If NO-DISPLAY, don't generate the summary buffer contents.
+If KILL-BUFFER, it should be a buffer that's killed once the new
+summary buffer has been generated.
+If BACKWARD, move point to the previous group in the group buffer
+If SELECT-ARTICLES, only select those articles from GROUP."
(let (result)
(while (and group
(null (setq result
result))
(defun gnus-sort-gathered-threads (threads)
- "Sort subtreads inside each gathered thread by `gnus-sort-gathered-threads-function'."
+ "Sort subthreads inside each gathered thread by `gnus-sort-gathered-threads-function'."
(let ((result threads))
(while threads
(when (stringp (caar threads))
(entry (gnus-group-entry group))
(info (nth 2 entry))
(active (gnus-active group))
+ (set-marks
+ (or gnus-propagate-marks
+ (gnus-method-option-p
+ (gnus-find-method-for-group group)
+ 'server-marks)))
range)
(if (not entry)
;; Group that Gnus doesn't know exists, but still allow the
;; backend to set marks.
- (gnus-request-set-mark
- group (list (list (gnus-compress-sequence (sort articles #'<))
- 'add '(read))))
+ (when set-marks
+ (gnus-request-set-mark
+ group (list (list (gnus-compress-sequence (sort articles #'<))
+ 'add '(read)))))
;; Normal, subscribed groups.
(setq range (gnus-compute-read-articles group articles))
(with-current-buffer gnus-group-buffer
(gnus-info-set-marks ',info ',(gnus-info-marks info) t)
(gnus-info-set-read ',info ',(gnus-info-read info))
(gnus-get-unread-articles-in-group ',info (gnus-active ,group))
- (gnus-request-set-mark ,group (list (list ',range 'del '(read))))
+ (when ,set-marks
+ (gnus-request-set-mark
+ ,group (list (list ',range 'del '(read)))))
(gnus-group-update-group ,group t))))
;; Add the read articles to the range.
(gnus-info-set-read info range)
- (gnus-request-set-mark group (list (list range 'add '(read))))
+ (when set-marks
+ (gnus-request-set-mark group (list (list range 'add '(read)))))
;; Then we have to re-compute how many unread
;; articles there are in this group.
(when active
'gnus-article-sort-by-number)))
(setq gnus-newsgroup-articles
(gnus-sorted-nunion gnus-newsgroup-articles (nreverse article-ids)))
- (gnus-summary-limit-include-thread id))))
+ (gnus-summary-limit-include-thread id)))
+ (gnus-summary-show-thread))
(defun gnus-summary-refer-article (message-id)
"Fetch an article specified by MESSAGE-ID."
(select-window (gnus-get-buffer-window gnus-article-buffer))
(widget-forward arg))
+(defun gnus-summary-widget-backward (arg)
+ "Move point to the previous field or button in the article.
+With optional ARG, move across that many fields."
+ (interactive "p")
+ (gnus-summary-select-article)
+ (gnus-configure-windows 'article)
+ (select-window (gnus-get-buffer-window gnus-article-buffer))
+ (unless (widget-at (point))
+ (goto-char (point-max)))
+ (widget-backward arg))
+
(defun gnus-summary-isearch-article (&optional regexp-p)
"Do incremental search forward on the current article.
If REGEXP-P (the prefix) is non-nil, do regexp isearch."
(when (gnus-summary-goto-subject (cdr gnus-article-current) nil t)
(gnus-summary-update-secondary-mark (cdr gnus-article-current))))))
((not arg)
- (require 'shr)
- (let ((shr-ignore-cache t))
- ;; Select the article the normal way.
+ ;; Select the article the normal way.
+ (if (eq mm-text-html-renderer 'shr)
+ (progn
+ (require 'shr)
+ (let ((shr-ignore-cache t))
+ (gnus-summary-select-article nil 'force)))
(gnus-summary-select-article nil 'force)))
((equal arg '(16))
;; C-u C-u g
(gnus-add-marked-articles
to-group 'expire (list to-article) info))
- (when to-marks
+ (when (and to-marks
+ (or gnus-propagate-marks
+ (gnus-method-option-p
+ (gnus-find-method-for-group to-group)
+ 'server-marks)))
(gnus-request-set-mark
to-group (list (list (list to-article) 'add to-marks)))))
(setq gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant))
(setq gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable))
(setq gnus-newsgroup-reads (delq article gnus-newsgroup-reads))
+ (setq gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads))
(cond ((= mark gnus-ticked-mark)
(setq gnus-newsgroup-marked
(gnus-add-to-sorted-list gnus-newsgroup-marked