X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-sum.el;h=cd836dd338e36743e2386d7cbc5123c8a3120331;hb=f6234873d0f9a0ee9b26beab123cf4e9d77099c8;hp=423de35245367f7ff14205fb4daa8c0f93caed2a;hpb=bd6155afa395f1c8879128367ea0d7eb8c7d110c;p=gnus diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 423de3524..cd836dd33 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1,6 +1,6 @@ ;;; 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 ;; Keywords: news @@ -364,7 +364,7 @@ newsgroups, set the variable to nil in `gnus-select-group-hook'." This variable can either be the symbols `first' (place point on the first subject), `unread' (place point on the subject line of the first unread article), `best' (place point on the subject line of the -higest-scored article), `unseen' (place point on the subject line of +highest-scored article), `unseen' (place point on the subject line of the first unseen article), `unseen-or-unread' (place point on the subject line of the first unseen article or, if all articles have been seen, on the subject line of the first unread article), or a function to be called to @@ -1371,15 +1371,12 @@ the normal Gnus MIME machinery." (?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) @@ -1657,7 +1654,7 @@ For example: This variable is a list of FUNCTION or (REGEXP . FUNCTION). If item is FUNCTION, FUNCTION will be apply to all newsgroups. If item is a -\(REGEXP . FUNCTION), FUNCTION will be only apply to thes newsgroups +\(REGEXP . FUNCTION), FUNCTION will be applied only to the newsgroups whose names match REGEXP. For example: @@ -1920,6 +1917,7 @@ increase the score of each group you read." "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 @@ -2084,6 +2082,7 @@ increase the score of each group you read." "g" gnus-summary-show-article "s" gnus-summary-isearch-article [tab] gnus-summary-widget-forward + [backtab] gnus-summary-widget-backward "P" gnus-summary-print-article "S" gnus-sticky-article "M" gnus-mailing-list-insinuate @@ -2529,7 +2528,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ["Unshar and save" gnus-uu-decode-unshar-and-save t] ["Save" gnus-uu-decode-save t] ["Binhex" gnus-uu-decode-binhex t] - ["Postscript" gnus-uu-decode-postscript t] + ["PostScript" gnus-uu-decode-postscript t] ["All MIME parts" gnus-summary-save-parts t]) ("Cache" ["Enter article" gnus-cache-enter-article t] @@ -2835,7 +2834,7 @@ Setter function for custom variables." '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'. @@ -2969,7 +2968,7 @@ When FORCE, rebuild the tool bar." '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)) @@ -3062,6 +3061,7 @@ When FORCE, rebuild the tool bar." (declare-function turn-on-gnus-mailing-list-mode "gnus-ml" ()) (defvar bookmark-make-record-function) +(defvar bidi-paragraph-direction) (defun gnus-summary-mode (&optional group) "Major mode for reading articles. @@ -3101,6 +3101,9 @@ The following commands are available: (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) @@ -3503,7 +3506,8 @@ display only a single character." (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) "*"))) @@ -3931,7 +3935,11 @@ Input should look like this: \"Sun, 14 Oct 2001 13:34:39 +0200\"." "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 @@ -4257,7 +4265,7 @@ If NO-DISPLAY, don't generate a summary buffer." 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)) @@ -4727,7 +4735,7 @@ If LINE, insert the rebuilt thread starting on line LINE." (car headers)))) (defun gnus-parent-headers (in-headers &optional generation) - "Return the headers of the GENERATIONeth parent of HEADERS." + "Return the headers of the GENERATIONth parent of HEADERS." (unless generation (setq generation 1)) (let ((parent t) @@ -5859,15 +5867,15 @@ If SELECT-ARTICLES, only select those articles from GROUP." (read-string (if only-read-p (format - "How many articles from %s (available %d, default %d): " - (gnus-group-decoded-name - (gnus-group-real-name gnus-newsgroup-name)) - number default) - (format - "How many articles from %s (%d available): " + "How many articles from %s (available %d, default %d): " (gnus-group-decoded-name (gnus-group-real-name gnus-newsgroup-name)) - default)) + number default) + (format + "How many articles from %s (%d default): " + (gnus-group-decoded-name + (gnus-group-real-name gnus-newsgroup-name)) + default)) nil nil (number-to-string default)))) @@ -6277,13 +6285,19 @@ The resulting hash table is returned, or nil if no Xrefs were found." (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 @@ -6292,11 +6306,14 @@ The resulting hash table is returned, or nil if no Xrefs were found." (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 @@ -7087,7 +7104,7 @@ With ARG, turn line truncation on if ARG is positive." (defun gnus-summary-find-for-reselect () "Return the number of an article to stay on across a reselect. The current article is considered, then following articles, then previous -articles. An article is sought which is not cancelled and isn't a temporary +articles. An article is sought which is not canceled and isn't a temporary insertion from another group. If there's no such then return a dummy 0." (let (found) (dolist (rev '(nil t)) @@ -7313,9 +7330,11 @@ If FORCE (the prefix), also save the .newsrc file(s)." (gnus-kill-buffer gnus-original-article-buffer) (setq gnus-article-current nil)) ;; Return to the group buffer. - (gnus-configure-windows 'group 'force) (if (not gnus-kill-summary-on-exit) - (gnus-deaden-summary) + (progn + (gnus-deaden-summary) + (gnus-configure-windows 'group 'force)) + (gnus-configure-windows 'group 'force) (gnus-close-group group) (gnus-kill-buffer gnus-summary-buffer)) (unless gnus-single-article-buffer @@ -7337,7 +7356,7 @@ If FORCE (the prefix), also save the .newsrc file(s)." (defun gnus-handle-ephemeral-exit (quit-config) "Handle movement when leaving an ephemeral group. The state which existed when entering the ephemeral is reset." - (if (not (buffer-name (car quit-config))) + (if (not (buffer-live-p (car quit-config))) (gnus-configure-windows 'group 'force) (set-buffer (car quit-config)) (unless (eq (cdr quit-config) 'group) @@ -9032,7 +9051,8 @@ non-numeric or nil fetch the number specified by the '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." @@ -9246,6 +9266,17 @@ With optional ARG, move across that many fields." (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." @@ -9612,7 +9643,12 @@ C-u g', show the raw article." (gnus-summary-update-secondary-mark (cdr gnus-article-current)))))) ((not arg) ;; Select the article the normal way. - (gnus-summary-select-article nil 'force)) + (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 (let ((gnus-inhibit-article-treatments t)) @@ -10049,7 +10085,11 @@ ACTION can be either `move' (the default), `crosspost' or `copy'." (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))))) @@ -10881,6 +10921,7 @@ If NO-EXPIRE, auto-expiry will be inhibited." (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 @@ -11553,8 +11594,10 @@ Returns nil if no thread was there to be shown." (beg (progn (beginning-of-line) (if (bobp) (point) (1- (point))))) (eoi (when end (if (fboundp 'next-single-char-property-change) - (or (next-single-char-property-change end 'invisible) - (point-max)) + (if (featurep 'xemacs) + (or (next-single-char-property-change end 'invisible) + (point-max)) + (next-single-char-property-change end 'invisible)) (while (progn (end-of-line 2) (and (not (eobp)) @@ -11911,7 +11954,7 @@ will not be marked as saved." ;; This is a pseudo-article. (if (assq 'name header) (gnus-copy-file (cdr (assq 'name header))) - (gnus-message 1 "Article %d is unsaveable" article)) + (gnus-message 1 "Article %d is unsavable" article)) ;; This is a real article. (save-window-excursion (gnus-summary-select-article decode decode nil article)