* lisp/gnus/gnus-agent.el (gnus-category-mode): Use define-derived-mode.
(gnus-agent-mode): Use derived-mode-p. (gnus-agent-rename-group, gnus-agent-delete-group): Don't bind gnus-command-method and *-command-method to nil, but bind gnus-command-method to *-command-method instead! (gnus-agent-fetch-articles): Remove unused var `id'. (gnus-agent-fetch-headers): Remove unused arg `force'. (gnus-agent-braid-nov): Remove unused arg `group'. Adjust callers. (gnus-agent-save-alist, gnus-agent-save-local): Remove unused `item'. (gnus-agent-short-article, gnus-agent-long-article) (gnus-agent-low-score, gnus-agent-high-score): Move declaration before first use. (gnus-agent-fetch-group-1): Remove unused vars `arts', `category', `score-param'. (gnus-tmp-name, gnus-tmp-groups): Defvar them. (gnus-get-predicate): Push in front of the cache, rather than end. (gnus-agent-expire-current-dirs, gnus-agent-expire-stats): Defvar them. (gnus-agent-expire-group-1): Use push. Don't abuse dyn-binding. (gnus-agent-expire-unagentized-dirs): Don't rebind gnus-agent-expire-current-dirs since the defvar silences the warning. (gnus-agent-retrieve-headers): Remove unused var `cached-articles'. (gnus-agent-regenerate-group): Remove unused vars `point' and `dl'. (gnus-agent-regenerate): Simplify interactive spec and doc. * lisp/gnus/gnus-eform.el (gnus-edit-form-mode): Use define-derived-mode. * lisp/gnus/gnus-salt.el (gnus-tree-mode): Use define-derived-mode. Use save-current-buffer. (gnus-tree-mode-map): Initialize in the declaration. (gnus-pick-mouse-pick-region): Remove unused var `fun'. (scroll-in-place): Defvar it. (gnus-tmp-*): Defvar them. (gnus-get-tree-buffer): Use derived-mode-p. (gnus--let-eval): New macro. (gnus-tree-highlight-node): Use it to avoid dynamic binding of non-prefixed variables. (gnus-tree-open, gnus-tree-close): Remove unused arg `group'. * lisp/gnus/gnus-sum.el (gnus-summary-highlight): Remove `below' from the list of vars since it doesn't seem to be available. (gnus-set-global-variables, gnus-summary-read-group-1) (gnus-select-newsgroup, gnus-handle-ephemeral-exit) (gnus-summary-display-article, gnus-summary-select-article) (gnus-summary-next-article, gnus-offer-save-summaries) (gnus-summary-generic-mark): Use derived-mode-p. (gnus-summary-read-group-1, gnus-summary-exit) (gnus-summary-exit-no-update, gnus-kill-or-deaden-summary): Adjust calls to gnus-tree-close and gnus-tree-open.
This commit is contained in:
parent
0791d107ed
commit
c2e9e9ef6f
5 changed files with 204 additions and 157 deletions
|
|
@ -1,3 +1,54 @@
|
|||
2013-09-17 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* gnus-salt.el (gnus-tree-mode): Use define-derived-mode.
|
||||
Use save-current-buffer.
|
||||
(gnus-tree-mode-map): Initialize in the declaration.
|
||||
(gnus-pick-mouse-pick-region): Remove unused var `fun'.
|
||||
(scroll-in-place): Defvar it.
|
||||
(gnus-tmp-*): Defvar them.
|
||||
(gnus-get-tree-buffer): Use derived-mode-p.
|
||||
(gnus--let-eval): New macro.
|
||||
(gnus-tree-highlight-node): Use it to avoid dynamic binding of
|
||||
non-prefixed variables.
|
||||
(gnus-tree-open, gnus-tree-close): Remove unused arg `group'.
|
||||
|
||||
* gnus-sum.el (gnus-summary-highlight): Remove `below' from the list of
|
||||
vars since it doesn't seem to be available.
|
||||
(gnus-set-global-variables, gnus-summary-read-group-1)
|
||||
(gnus-select-newsgroup, gnus-handle-ephemeral-exit)
|
||||
(gnus-summary-display-article, gnus-summary-select-article)
|
||||
(gnus-summary-next-article, gnus-offer-save-summaries)
|
||||
(gnus-summary-generic-mark): Use derived-mode-p.
|
||||
(gnus-summary-read-group-1, gnus-summary-exit)
|
||||
(gnus-summary-exit-no-update, gnus-kill-or-deaden-summary):
|
||||
Adjust calls to gnus-tree-close and gnus-tree-open.
|
||||
|
||||
* gnus-eform.el (gnus-edit-form-mode): Use define-derived-mode.
|
||||
|
||||
* gnus-agent.el (gnus-category-mode): Use define-derived-mode.
|
||||
(gnus-agent-mode): Use derived-mode-p.
|
||||
(gnus-agent-rename-group, gnus-agent-delete-group): Don't bind
|
||||
gnus-command-method and *-command-method to nil, but bind
|
||||
gnus-command-method to *-command-method instead!
|
||||
(gnus-agent-fetch-articles): Remove unused var `id'.
|
||||
(gnus-agent-fetch-headers): Remove unused arg `force'.
|
||||
(gnus-agent-braid-nov): Remove unused arg `group'. Adjust callers.
|
||||
(gnus-agent-save-alist, gnus-agent-save-local): Remove unused `item'.
|
||||
(gnus-agent-short-article, gnus-agent-long-article)
|
||||
(gnus-agent-low-score, gnus-agent-high-score): Move declaration before
|
||||
first use.
|
||||
(gnus-agent-fetch-group-1): Remove unused vars `arts', `category',
|
||||
`score-param'.
|
||||
(gnus-tmp-name, gnus-tmp-groups): Defvar them.
|
||||
(gnus-get-predicate): Push in front of the cache, rather than end.
|
||||
(gnus-agent-expire-current-dirs, gnus-agent-expire-stats): Defvar them.
|
||||
(gnus-agent-expire-group-1): Use push. Don't abuse dyn-binding.
|
||||
(gnus-agent-expire-unagentized-dirs): Don't rebind
|
||||
gnus-agent-expire-current-dirs since the defvar silences the warning.
|
||||
(gnus-agent-retrieve-headers): Remove unused var `cached-articles'.
|
||||
(gnus-agent-regenerate-group): Remove unused vars `point' and `dl'.
|
||||
(gnus-agent-regenerate): Simplify interactive spec and doc.
|
||||
|
||||
2013-09-17 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus-int.el (gnus-open-server): Silence compiler.
|
||||
|
|
|
|||
|
|
@ -492,7 +492,7 @@ manipulated as follows:
|
|||
(push (cons mode (symbol-value (intern (format "gnus-agent-%s-mode-map"
|
||||
buffer))))
|
||||
minor-mode-map-alist))
|
||||
(when (eq major-mode 'gnus-group-mode)
|
||||
(when (derived-mode-p 'gnus-group-mode)
|
||||
(let ((init-plugged gnus-plugged)
|
||||
(gnus-agent-go-online nil))
|
||||
;; g-a-t-p does nothing when gnus-plugged isn't changed.
|
||||
|
|
@ -881,11 +881,11 @@ Depends upon the caller to determine whether group renaming is
|
|||
supported."
|
||||
(let* ((old-command-method (gnus-find-method-for-group old-group))
|
||||
(old-path (directory-file-name
|
||||
(let (gnus-command-method old-command-method)
|
||||
(let ((gnus-command-method old-command-method))
|
||||
(gnus-agent-group-pathname old-group))))
|
||||
(new-command-method (gnus-find-method-for-group new-group))
|
||||
(new-path (directory-file-name
|
||||
(let (gnus-command-method new-command-method)
|
||||
(let ((gnus-command-method new-command-method))
|
||||
(gnus-agent-group-pathname new-group))))
|
||||
(file-name-coding-system nnmail-pathname-coding-system))
|
||||
(gnus-rename-file old-path new-path t)
|
||||
|
|
@ -914,19 +914,18 @@ Depends upon the caller to determine whether group deletion is
|
|||
supported."
|
||||
(let* ((command-method (gnus-find-method-for-group group))
|
||||
(path (directory-file-name
|
||||
(let (gnus-command-method command-method)
|
||||
(let ((gnus-command-method command-method))
|
||||
(gnus-agent-group-pathname group))))
|
||||
(file-name-coding-system nnmail-pathname-coding-system))
|
||||
(gnus-delete-directory path)
|
||||
|
||||
(let* ((real-group (gnus-group-real-name group)))
|
||||
(gnus-agent-save-group-info command-method real-group nil)
|
||||
|
||||
(let ((local (gnus-agent-get-local group
|
||||
real-group command-method)))
|
||||
(gnus-agent-set-local group
|
||||
nil nil
|
||||
real-group command-method)))))
|
||||
;; FIXME: Does gnus-agent-get-local have any useful side-effect?
|
||||
(gnus-agent-get-local group real-group command-method)
|
||||
(gnus-agent-set-local group
|
||||
nil nil
|
||||
real-group command-method))))
|
||||
|
||||
;;;
|
||||
;;; Server mode commands
|
||||
|
|
@ -1549,7 +1548,7 @@ downloaded into the agent."
|
|||
(dir (gnus-agent-group-pathname group))
|
||||
(date (time-to-days (current-time)))
|
||||
(case-fold-search t)
|
||||
pos crosses id
|
||||
pos crosses
|
||||
(file-name-coding-system nnmail-pathname-coding-system))
|
||||
|
||||
(setcar selected-sets (nreverse (car selected-sets)))
|
||||
|
|
@ -1603,11 +1602,6 @@ downloaded into the agent."
|
|||
(goto-char (match-end 0)))
|
||||
(gnus-agent-crosspost crosses (caar pos) date)))
|
||||
(goto-char (point-min))
|
||||
(if (not (re-search-forward
|
||||
"^Message-ID: *<\\([^>\n]+\\)>" nil t))
|
||||
(setq id "No-Message-ID-in-article")
|
||||
(setq id (buffer-substring
|
||||
(match-beginning 1) (match-end 1))))
|
||||
(let ((coding-system-for-write
|
||||
gnus-agent-file-coding-system))
|
||||
(write-region (point-min) (point-max)
|
||||
|
|
@ -1832,7 +1826,7 @@ variables. Returns the first non-nil value found."
|
|||
. gnus-agent-enable-expiration)
|
||||
(agent-predicate . gnus-agent-predicate)))))))
|
||||
|
||||
(defun gnus-agent-fetch-headers (group &optional force)
|
||||
(defun gnus-agent-fetch-headers (group)
|
||||
"Fetch interesting headers into the agent. The group's overview
|
||||
file will be updated to include the headers while a list of available
|
||||
article numbers will be returned."
|
||||
|
|
@ -1931,7 +1925,7 @@ article numbers will be returned."
|
|||
;; NOTE: Call g-a-brand-nov even when the file does not
|
||||
;; exist. As a minimum, it will validate the article
|
||||
;; numbers already in the buffer.
|
||||
(gnus-agent-braid-nov group articles file)
|
||||
(gnus-agent-braid-nov articles file)
|
||||
(let ((coding-system-for-write
|
||||
gnus-agent-file-coding-system))
|
||||
(gnus-agent-check-overview-buffer)
|
||||
|
|
@ -1980,7 +1974,7 @@ article numbers will be returned."
|
|||
(set-buffer nntp-server-buffer)
|
||||
(insert-buffer-substring gnus-agent-overview-buffer b e))))
|
||||
|
||||
(defun gnus-agent-braid-nov (group articles file)
|
||||
(defun gnus-agent-braid-nov (articles file)
|
||||
"Merge agent overview data with given file.
|
||||
Takes unvalidated headers for ARTICLES from
|
||||
`gnus-agent-overview-buffer' and validated headers from the given
|
||||
|
|
@ -2154,7 +2148,7 @@ doesn't exist, to valid the overview buffer."
|
|||
(let* ((file-name-coding-system nnmail-pathname-coding-system)
|
||||
(prev (cons nil gnus-agent-article-alist))
|
||||
(all prev)
|
||||
print-level print-length item article)
|
||||
print-level print-length article)
|
||||
(while (setq article (pop articles))
|
||||
(while (and (cdr prev)
|
||||
(< (caadr prev) article))
|
||||
|
|
@ -2288,7 +2282,7 @@ modified) original contents, they are first saved to their own file."
|
|||
(file-name-coding-system nnmail-pathname-coding-system))
|
||||
(with-temp-file dest
|
||||
(let ((gnus-command-method (symbol-value (intern "+method" my-obarray)))
|
||||
print-level print-length item article
|
||||
print-level print-length
|
||||
(standard-output (current-buffer)))
|
||||
(mapatoms (lambda (symbol)
|
||||
(cond ((not (boundp symbol))
|
||||
|
|
@ -2411,6 +2405,18 @@ modified) original contents, they are first saved to their own file."
|
|||
(gnus-run-hooks 'gnus-agent-fetched-hook)
|
||||
(gnus-message 6 "Finished fetching articles into the Gnus agent"))))
|
||||
|
||||
(defvar gnus-agent-short-article 500
|
||||
"Articles that have fewer lines than this are short.")
|
||||
|
||||
(defvar gnus-agent-long-article 1000
|
||||
"Articles that have more lines than this are long.")
|
||||
|
||||
(defvar gnus-agent-low-score 0
|
||||
"Articles that have a score lower than this have a low score.")
|
||||
|
||||
(defvar gnus-agent-high-score 0
|
||||
"Articles that have a score higher than this have a high score.")
|
||||
|
||||
(defun gnus-agent-fetch-group-1 (group method)
|
||||
"Fetch GROUP."
|
||||
(let ((gnus-command-method method)
|
||||
|
|
@ -2427,8 +2433,8 @@ modified) original contents, they are first saved to their own file."
|
|||
|
||||
gnus-headers
|
||||
gnus-score
|
||||
articles arts
|
||||
category predicate info marks score-param
|
||||
articles
|
||||
predicate info marks
|
||||
)
|
||||
(unless (gnus-check-group group)
|
||||
(error "Can't open server for %s" group))
|
||||
|
|
@ -2471,9 +2477,6 @@ modified) original contents, they are first saved to their own file."
|
|||
;; timeout reason. If so, recreate it.
|
||||
(gnus-agent-create-buffer)
|
||||
|
||||
;; Figure out how to select articles in this group
|
||||
(setq category (gnus-group-category group))
|
||||
|
||||
(setq predicate
|
||||
(gnus-get-predicate
|
||||
(gnus-agent-find-parameter group 'agent-predicate)))
|
||||
|
|
@ -2624,23 +2627,14 @@ General format specifiers can also be used. See Info node
|
|||
(defvar gnus-agent-predicate 'false
|
||||
"The selection predicate used when no other source is available.")
|
||||
|
||||
(defvar gnus-agent-short-article 500
|
||||
"Articles that have fewer lines than this are short.")
|
||||
|
||||
(defvar gnus-agent-long-article 1000
|
||||
"Articles that have more lines than this are long.")
|
||||
|
||||
(defvar gnus-agent-low-score 0
|
||||
"Articles that have a score lower than this have a low score.")
|
||||
|
||||
(defvar gnus-agent-high-score 0
|
||||
"Articles that have a score higher than this have a high score.")
|
||||
|
||||
|
||||
;;; Internal variables.
|
||||
|
||||
(defvar gnus-category-buffer "*Agent Category*")
|
||||
|
||||
(defvar gnus-tmp-name)
|
||||
(defvar gnus-tmp-groups)
|
||||
|
||||
(defvar gnus-category-line-format-alist
|
||||
`((?c gnus-tmp-name ?s)
|
||||
(?g gnus-tmp-groups ?d)))
|
||||
|
|
@ -2692,7 +2686,7 @@ General format specifiers can also be used. See Info node
|
|||
|
||||
(gnus-run-hooks 'gnus-category-menu-hook)))
|
||||
|
||||
(defun gnus-category-mode ()
|
||||
(define-derived-mode gnus-category-mode fundamental-mode "Category"
|
||||
"Major mode for listing and editing agent categories.
|
||||
|
||||
All normal editing commands are switched off.
|
||||
|
|
@ -2703,20 +2697,14 @@ For more in-depth information on this mode, read the manual
|
|||
The following commands are available:
|
||||
|
||||
\\{gnus-category-mode-map}"
|
||||
(interactive)
|
||||
(when (gnus-visual-p 'category-menu 'menu)
|
||||
(gnus-category-make-menu-bar))
|
||||
(kill-all-local-variables)
|
||||
(gnus-simplify-mode-line)
|
||||
(setq major-mode 'gnus-category-mode)
|
||||
(setq mode-name "Category")
|
||||
(gnus-set-default-directory)
|
||||
(setq mode-line-process nil)
|
||||
(use-local-map gnus-category-mode-map)
|
||||
(buffer-disable-undo)
|
||||
(setq truncate-lines t)
|
||||
(setq buffer-read-only t)
|
||||
(gnus-run-mode-hooks 'gnus-category-mode-hook))
|
||||
(setq buffer-read-only t))
|
||||
|
||||
(defalias 'gnus-category-position-point 'gnus-goto-colon)
|
||||
|
||||
|
|
@ -2992,9 +2980,7 @@ The following commands are available:
|
|||
"Return the function implementing PREDICATE."
|
||||
(or (cdr (assoc predicate gnus-category-predicate-cache))
|
||||
(let ((func (gnus-category-make-function predicate)))
|
||||
(setq gnus-category-predicate-cache
|
||||
(nconc gnus-category-predicate-cache
|
||||
(list (cons predicate func))))
|
||||
(push (cons predicate func) gnus-category-predicate-cache)
|
||||
func)))
|
||||
|
||||
(defun gnus-predicate-implies-unread (predicate)
|
||||
|
|
@ -3066,6 +3052,9 @@ articles."
|
|||
(or (gnus-gethash group gnus-category-group-cache)
|
||||
(assq 'default gnus-category-alist)))
|
||||
|
||||
(defvar gnus-agent-expire-current-dirs)
|
||||
(defvar gnus-agent-expire-stats)
|
||||
|
||||
(defun gnus-agent-expire-group (group &optional articles force)
|
||||
"Expire all old articles in GROUP.
|
||||
If you want to force expiring of certain articles, this function can
|
||||
|
|
@ -3080,7 +3069,7 @@ FORCE is equivalent to setting the expiration predicates to true."
|
|||
|
||||
(if (not group)
|
||||
(gnus-agent-expire articles group force)
|
||||
(let ( ;; Bind gnus-agent-expire-stats to enable tracking of
|
||||
(let (;; Bind gnus-agent-expire-stats to enable tracking of
|
||||
;; expiration statistics of this single group
|
||||
(gnus-agent-expire-stats (list 0 0 0.0)))
|
||||
(if (or (not (eq articles t))
|
||||
|
|
@ -3117,9 +3106,7 @@ FORCE is equivalent to setting the expiration predicates to true."
|
|||
(gnus-agent-with-refreshed-group
|
||||
group
|
||||
(when (boundp 'gnus-agent-expire-current-dirs)
|
||||
(set 'gnus-agent-expire-current-dirs
|
||||
(cons dir
|
||||
(symbol-value 'gnus-agent-expire-current-dirs))))
|
||||
(push dir gnus-agent-expire-current-dirs))
|
||||
|
||||
(if (and (not force)
|
||||
(eq 'DISABLE (gnus-agent-find-parameter group
|
||||
|
|
@ -3263,24 +3250,24 @@ line." (point) nov-file)))
|
|||
;; only problem is that much of it is spread across multiple
|
||||
;; entries. Sort then MERGE!!
|
||||
(gnus-message 7 "gnus-agent-expire: Sorting entries... ")
|
||||
;; If two entries have the same article-number then sort by
|
||||
;; ascending keep_flag.
|
||||
(let ((special 0)
|
||||
(marked 1)
|
||||
(unread 2))
|
||||
(setq dlist
|
||||
(sort dlist
|
||||
(lambda (a b)
|
||||
(cond ((< (nth 0 a) (nth 0 b))
|
||||
t)
|
||||
((> (nth 0 a) (nth 0 b))
|
||||
nil)
|
||||
(t
|
||||
(let ((a (or (symbol-value (nth 2 a))
|
||||
3))
|
||||
(b (or (symbol-value (nth 2 b))
|
||||
3)))
|
||||
(<= a b))))))))
|
||||
(setq dlist
|
||||
(sort dlist
|
||||
(lambda (a b)
|
||||
(cond ((< (nth 0 a) (nth 0 b))
|
||||
t)
|
||||
((> (nth 0 a) (nth 0 b))
|
||||
nil)
|
||||
(t
|
||||
;; If two entries have the same article-number
|
||||
;; then sort by ascending keep_flag.
|
||||
(let* ((kf-score '((special . 0)
|
||||
(marked . 1)
|
||||
(unread . 2)))
|
||||
(a (or (cdr (assq (nth 2 a) kf-score))
|
||||
3))
|
||||
(b (or (cdr (assq (nth 2 b) kf-score))
|
||||
3)))
|
||||
(<= a b)))))))
|
||||
(gnus-message 7 "gnus-agent-expire: Sorting entries... Done")
|
||||
(gnus-message 7 "gnus-agent-expire: Merging entries... ")
|
||||
(let ((dlist dlist))
|
||||
|
|
@ -3474,7 +3461,7 @@ expiration tests failed." decoded article-number)
|
|||
(gnus-summary-update-info))))
|
||||
|
||||
(when (boundp 'gnus-agent-expire-stats)
|
||||
(let ((stats (symbol-value 'gnus-agent-expire-stats)))
|
||||
(let ((stats gnus-agent-expire-stats))
|
||||
(incf (nth 2 stats) bytes-freed)
|
||||
(incf (nth 1 stats) files-deleted)
|
||||
(incf (nth 0 stats) nov-entries-deleted)))
|
||||
|
|
@ -3534,7 +3521,7 @@ articles in every agentized group? "))
|
|||
(defun gnus-agent-expire-done-message ()
|
||||
(if (and (> gnus-verbose 4)
|
||||
(boundp 'gnus-agent-expire-stats))
|
||||
(let* ((stats (symbol-value 'gnus-agent-expire-stats))
|
||||
(let* ((stats gnus-agent-expire-stats)
|
||||
(size (nth 2 stats))
|
||||
(units '(B KB MB GB)))
|
||||
(while (and (> size 1024.0)
|
||||
|
|
@ -3553,16 +3540,10 @@ articles in every agentized group? "))
|
|||
(when (and gnus-agent-expire-unagentized-dirs
|
||||
(boundp 'gnus-agent-expire-current-dirs))
|
||||
(let* ((keep (gnus-make-hashtable))
|
||||
;; Formally bind gnus-agent-expire-current-dirs so that the
|
||||
;; compiler will not complain about free references.
|
||||
(gnus-agent-expire-current-dirs
|
||||
(symbol-value 'gnus-agent-expire-current-dirs))
|
||||
dir
|
||||
(file-name-coding-system nnmail-pathname-coding-system))
|
||||
|
||||
(gnus-sethash gnus-agent-directory t keep)
|
||||
(while gnus-agent-expire-current-dirs
|
||||
(setq dir (pop gnus-agent-expire-current-dirs))
|
||||
(dolist (dir gnus-agent-expire-current-dirs)
|
||||
(when (and (stringp dir)
|
||||
(file-directory-p dir))
|
||||
(while (not (gnus-gethash dir keep))
|
||||
|
|
@ -3715,7 +3696,7 @@ has been fetched."
|
|||
(let ((gnus-decode-encoded-word-function 'identity)
|
||||
(gnus-decode-encoded-address-function 'identity)
|
||||
(file (gnus-agent-article-name ".overview" group))
|
||||
cached-articles uncached-articles
|
||||
uncached-articles
|
||||
(file-name-coding-system nnmail-pathname-coding-system))
|
||||
(gnus-make-directory (nnheader-translate-file-chars
|
||||
(file-name-directory file) t))
|
||||
|
|
@ -3812,7 +3793,7 @@ has been fetched."
|
|||
;; Merge the temp buffer with the known headers (found on
|
||||
;; disk in FILE) into the nntp-server-buffer
|
||||
(when uncached-articles
|
||||
(gnus-agent-braid-nov group uncached-articles file))
|
||||
(gnus-agent-braid-nov uncached-articles file))
|
||||
|
||||
;; Save the new set of known headers to FILE
|
||||
(set-buffer nntp-server-buffer)
|
||||
|
|
@ -3907,7 +3888,6 @@ If REREAD is not nil, downloaded articles are marked as unread."
|
|||
(gnus-find-method-for-group group)))
|
||||
(file (gnus-agent-article-name ".overview" group))
|
||||
(dir (file-name-directory file))
|
||||
point
|
||||
(file-name-coding-system nnmail-pathname-coding-system)
|
||||
(downloaded (if (file-exists-p dir)
|
||||
(sort (delq nil (mapcar (lambda (name)
|
||||
|
|
@ -3916,7 +3896,7 @@ If REREAD is not nil, downloaded articles are marked as unread."
|
|||
(directory-files dir nil "^[0-9]+$" t)))
|
||||
'>)
|
||||
(progn (gnus-make-directory dir) nil)))
|
||||
dl nov-arts
|
||||
nov-arts
|
||||
alist header
|
||||
regenerated)
|
||||
|
||||
|
|
@ -4099,16 +4079,16 @@ If REREAD is not nil, downloaded articles are marked as unread."
|
|||
regenerated)))
|
||||
|
||||
;;;###autoload
|
||||
(defun gnus-agent-regenerate (&optional clean reread)
|
||||
(defun gnus-agent-regenerate (&optional _clean reread)
|
||||
"Regenerate all agent covered files.
|
||||
If CLEAN, obsolete (ignore)."
|
||||
(interactive "P")
|
||||
CLEAN is obsolete and ignored."
|
||||
(interactive)
|
||||
(let (regenerated)
|
||||
(gnus-message 4 "Regenerating Gnus agent files...")
|
||||
(dolist (gnus-command-method (gnus-agent-covered-methods))
|
||||
(dolist (group (gnus-groups-from-server gnus-command-method))
|
||||
(setq regenerated (or (gnus-agent-regenerate-group group reread)
|
||||
regenerated))))
|
||||
(dolist (group (gnus-groups-from-server gnus-command-method))
|
||||
(setq regenerated (or (gnus-agent-regenerate-group group reread)
|
||||
regenerated))))
|
||||
(gnus-message 4 "Regenerating Gnus agent files...done")
|
||||
|
||||
regenerated))
|
||||
|
|
|
|||
|
|
@ -67,21 +67,15 @@
|
|||
["Exit" gnus-edit-form-exit t]))
|
||||
(gnus-run-hooks 'gnus-edit-form-menu-hook)))
|
||||
|
||||
(defun gnus-edit-form-mode ()
|
||||
(define-derived-mode gnus-edit-form-mode fundamental-mode "Edit Form"
|
||||
"Major mode for editing forms.
|
||||
It is a slightly enhanced emacs-lisp-mode.
|
||||
|
||||
\\{gnus-edit-form-mode-map}"
|
||||
(interactive)
|
||||
(when (gnus-visual-p 'group-menu 'menu)
|
||||
(gnus-edit-form-make-menu-bar))
|
||||
(kill-all-local-variables)
|
||||
(setq major-mode 'gnus-edit-form-mode)
|
||||
(setq mode-name "Edit Form")
|
||||
(use-local-map gnus-edit-form-mode-map)
|
||||
(make-local-variable 'gnus-edit-form-done-function)
|
||||
(make-local-variable 'gnus-prev-winconf)
|
||||
(gnus-run-mode-hooks 'gnus-edit-form-mode-hook))
|
||||
(make-local-variable 'gnus-prev-winconf))
|
||||
|
||||
(defun gnus-edit-form (form documentation exit-func &optional layout)
|
||||
"Edit FORM in a new buffer.
|
||||
|
|
|
|||
|
|
@ -292,22 +292,25 @@ This must be bound to a button-down mouse event."
|
|||
(mouse-scroll-subr start-window
|
||||
(1+ (- mouse-row bottom)))))))))))
|
||||
(when (consp event)
|
||||
(let ((fun (key-binding (vector (car event)))))
|
||||
(let (;; (fun (key-binding (vector (car event))))
|
||||
)
|
||||
;; Run the binding of the terminating up-event, if possible.
|
||||
;; In the case of a multiple click, it gives the wrong results,
|
||||
;; In the case of a multiple click, it gives the wrong results,
|
||||
;; because it would fail to set up a region.
|
||||
(when nil
|
||||
;; (and (= (mod mouse-selection-click-count 3) 0) (fboundp fun))
|
||||
;; In this case, we can just let the up-event execute normally.
|
||||
;; (and (= (mod mouse-selection-click-count 3) 0) (fboundp fun))
|
||||
;; In this case, we can just let the up-event execute normally.
|
||||
(let ((end (event-end event)))
|
||||
;; Set the position in the event before we replay it,
|
||||
;; because otherwise it may have a position in the wrong
|
||||
;; buffer.
|
||||
(setcar (cdr end) end-of-range)
|
||||
;; Delete the overlay before calling the function,
|
||||
;; because delete-overlay increases buffer-modified-tick.
|
||||
;; because delete-overlay increases buffer-modified-tick.
|
||||
(push event unread-command-events))))))))
|
||||
|
||||
(defvar scroll-in-place)
|
||||
|
||||
(defun gnus-pick-next-page ()
|
||||
"Go to the next page. If at the end of the buffer, start reading articles."
|
||||
(interactive)
|
||||
|
|
@ -356,7 +359,7 @@ This must be bound to a button-down mouse event."
|
|||
(when (gnus-visual-p 'binary-menu 'menu)
|
||||
(gnus-binary-make-menu-bar)))))
|
||||
|
||||
(defun gnus-binary-display-article (article &optional all-header)
|
||||
(defun gnus-binary-display-article (article &optional _all-header)
|
||||
"Run ARTICLE through the binary decode functions."
|
||||
(when (gnus-summary-goto-subject article)
|
||||
(let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic)))
|
||||
|
|
@ -423,6 +426,13 @@ Two predefined functions are available:
|
|||
|
||||
;;; Internal variables.
|
||||
|
||||
(defvar gnus-tmp-name)
|
||||
(defvar gnus-tmp-from)
|
||||
(defvar gnus-tmp-number)
|
||||
(defvar gnus-tmp-open-bracket)
|
||||
(defvar gnus-tmp-close-bracket)
|
||||
(defvar gnus-tmp-subject)
|
||||
|
||||
(defvar gnus-tree-line-format-alist
|
||||
`((?n gnus-tmp-name ?s)
|
||||
(?f gnus-tmp-from ?s)
|
||||
|
|
@ -442,24 +452,24 @@ Two predefined functions are available:
|
|||
(defvar gnus-tree-displayed-thread nil)
|
||||
(defvar gnus-tree-inhibit nil)
|
||||
|
||||
(defvar gnus-tree-mode-map nil)
|
||||
(defvar gnus-tree-mode-map
|
||||
(let ((map (make-keymap)))
|
||||
(suppress-keymap map)
|
||||
(gnus-define-keys
|
||||
map
|
||||
"\r" gnus-tree-select-article
|
||||
gnus-mouse-2 gnus-tree-pick-article
|
||||
"\C-?" gnus-tree-read-summary-keys
|
||||
"h" gnus-tree-show-summary
|
||||
|
||||
"\C-c\C-i" gnus-info-find-node)
|
||||
|
||||
(substitute-key-definition
|
||||
'undefined 'gnus-tree-read-summary-keys map)
|
||||
map))
|
||||
|
||||
(put 'gnus-tree-mode 'mode-class 'special)
|
||||
|
||||
(unless gnus-tree-mode-map
|
||||
(setq gnus-tree-mode-map (make-keymap))
|
||||
(suppress-keymap gnus-tree-mode-map)
|
||||
(gnus-define-keys
|
||||
gnus-tree-mode-map
|
||||
"\r" gnus-tree-select-article
|
||||
gnus-mouse-2 gnus-tree-pick-article
|
||||
"\C-?" gnus-tree-read-summary-keys
|
||||
"h" gnus-tree-show-summary
|
||||
|
||||
"\C-c\C-i" gnus-info-find-node)
|
||||
|
||||
(substitute-key-definition
|
||||
'undefined 'gnus-tree-read-summary-keys gnus-tree-mode-map))
|
||||
|
||||
(defun gnus-tree-make-menu-bar ()
|
||||
(unless (boundp 'gnus-tree-menu)
|
||||
(easy-menu-define
|
||||
|
|
@ -467,26 +477,20 @@ Two predefined functions are available:
|
|||
'("Tree"
|
||||
["Select article" gnus-tree-select-article t]))))
|
||||
|
||||
(defun gnus-tree-mode ()
|
||||
(define-derived-mode gnus-tree-mode fundamental-mode "Tree"
|
||||
"Major mode for displaying thread trees."
|
||||
(interactive)
|
||||
(gnus-set-format 'tree-mode)
|
||||
(gnus-set-format 'tree t)
|
||||
(when (gnus-visual-p 'tree-menu 'menu)
|
||||
(gnus-tree-make-menu-bar))
|
||||
(kill-all-local-variables)
|
||||
(gnus-simplify-mode-line)
|
||||
(setq mode-name "Tree")
|
||||
(setq major-mode 'gnus-tree-mode)
|
||||
(use-local-map gnus-tree-mode-map)
|
||||
(buffer-disable-undo)
|
||||
(setq buffer-read-only t)
|
||||
(setq truncate-lines t)
|
||||
(save-excursion
|
||||
(save-current-buffer
|
||||
(gnus-set-work-buffer)
|
||||
(gnus-tree-node-insert (make-mail-header "") nil)
|
||||
(setq gnus-tree-node-length (1- (point))))
|
||||
(gnus-run-mode-hooks 'gnus-tree-mode-hook))
|
||||
(setq gnus-tree-node-length (1- (point)))))
|
||||
|
||||
(defun gnus-tree-read-summary-keys (&optional arg)
|
||||
"Read a summary buffer key sequence and execute it."
|
||||
|
|
@ -562,7 +566,7 @@ Two predefined functions are available:
|
|||
(defun gnus-get-tree-buffer ()
|
||||
"Return the tree buffer properly initialized."
|
||||
(with-current-buffer (gnus-get-buffer-create gnus-tree-buffer)
|
||||
(unless (eq major-mode 'gnus-tree-mode)
|
||||
(unless (derived-mode-p 'gnus-tree-mode)
|
||||
(gnus-tree-mode))
|
||||
(current-buffer)))
|
||||
|
||||
|
|
@ -571,7 +575,7 @@ Two predefined functions are available:
|
|||
(not (one-window-p)))
|
||||
(let ((windows 0)
|
||||
tot-win-height)
|
||||
(walk-windows (lambda (window) (incf windows)))
|
||||
(walk-windows (lambda (_window) (incf windows)))
|
||||
(setq tot-win-height
|
||||
(- (frame-height)
|
||||
(* window-min-height (1- windows))
|
||||
|
|
@ -642,23 +646,41 @@ Two predefined functions are available:
|
|||
(when (or t (gnus-visual-p 'tree-highlight 'highlight))
|
||||
(gnus-tree-highlight-node gnus-tmp-number beg end))))
|
||||
|
||||
(defmacro gnus--let-eval (bindings evalsym &rest body)
|
||||
"Build an environment in which to evaluate expressions.
|
||||
BINDINGS is a `let'-style list of bindings to use for the environment.
|
||||
EVALSYM is then bound in BODY to a function that takes a sexp and evaluates
|
||||
it in the environment specified by BINDINGS."
|
||||
(declare (indent 2) (debug ((&rest (sym form)) sym body)))
|
||||
(if (ignore-errors (let ((x 3)) (eq (eval '(- x 1) '((x . 4))) x)))
|
||||
;; Use lexical vars if possible.
|
||||
`(let* ((env (list ,@(mapcar (lambda (binding)
|
||||
`(cons ',(car binding) ,(cadr binding)))
|
||||
bindings)))
|
||||
(,evalsym (lambda (exp) (eval exp env))))
|
||||
,@body)
|
||||
`(let (,@bindings (,evalsym #'eval)) ,@body)))
|
||||
|
||||
(defun gnus-tree-highlight-node (article beg end)
|
||||
"Highlight current line according to `gnus-summary-highlight'."
|
||||
(let ((list gnus-summary-highlight)
|
||||
face)
|
||||
(with-current-buffer gnus-summary-buffer
|
||||
(let* ((score (or (cdr (assq article gnus-newsgroup-scored))
|
||||
(let ((uncached (memq article gnus-newsgroup-undownloaded)))
|
||||
(gnus--let-eval
|
||||
((score (or (cdr (assq article gnus-newsgroup-scored))
|
||||
gnus-summary-default-score 0))
|
||||
(default gnus-summary-default-score)
|
||||
(default-high gnus-summary-default-high-score)
|
||||
(default-low gnus-summary-default-low-score)
|
||||
(uncached (memq article gnus-newsgroup-undownloaded))
|
||||
(uncached uncached)
|
||||
(downloaded (not uncached))
|
||||
(mark (or (gnus-summary-article-mark article) gnus-unread-mark)))
|
||||
;; Eval the cars of the lists until we find a match.
|
||||
(while (and list
|
||||
(not (eval (caar list))))
|
||||
(setq list (cdr list)))))
|
||||
evalfun
|
||||
;; Eval the cars of the lists until we find a match.
|
||||
(while (and list
|
||||
(not (funcall evalfun (caar list))))
|
||||
(setq list (cdr list))))))
|
||||
(unless (eq (setq face (cdar list)) (gnus-get-text-property-excluding-characters-with-faces beg 'face))
|
||||
(gnus-put-text-property-excluding-characters-with-faces
|
||||
beg end 'face
|
||||
|
|
@ -814,10 +836,10 @@ Two predefined functions are available:
|
|||
(gnus-generate-tree top)
|
||||
(setq gnus-tree-displayed-thread top))))))
|
||||
|
||||
(defun gnus-tree-open (group)
|
||||
(defun gnus-tree-open ()
|
||||
(gnus-get-tree-buffer))
|
||||
|
||||
(defun gnus-tree-close (group)
|
||||
(defun gnus-tree-close ()
|
||||
(gnus-kill-buffer gnus-tree-buffer))
|
||||
|
||||
(defun gnus-tree-perhaps-minimize ()
|
||||
|
|
|
|||
|
|
@ -1140,7 +1140,6 @@ score: The article's score.
|
|||
default: The default article score.
|
||||
default-high: The default score for high scored articles.
|
||||
default-low: The default score for low scored articles.
|
||||
below: The score below which articles are automatically marked as read.
|
||||
mark: The article's mark.
|
||||
uncached: Non-nil if the article is uncached."
|
||||
:group 'gnus-summary-visual
|
||||
|
|
@ -3104,6 +3103,7 @@ buffer; read the info pages for more information (`\\[gnus-info-find-node]').
|
|||
The following commands are available:
|
||||
|
||||
\\{gnus-summary-mode-map}"
|
||||
;; FIXME: Use define-derived-mode.
|
||||
(interactive)
|
||||
(kill-all-local-variables)
|
||||
(let ((gnus-summary-local-variables gnus-newsgroup-variables))
|
||||
|
|
@ -3542,7 +3542,7 @@ If the setup was successful, non-nil is returned."
|
|||
"Set the global equivalents of the buffer-local variables.
|
||||
They are set to the latest values they had. These reflect the summary
|
||||
buffer that was in action when the last article was fetched."
|
||||
(when (eq major-mode 'gnus-summary-mode)
|
||||
(when (derived-mode-p 'gnus-summary-mode)
|
||||
(setq gnus-summary-buffer (current-buffer))
|
||||
(let ((name gnus-newsgroup-name)
|
||||
(marked gnus-newsgroup-marked)
|
||||
|
|
@ -3990,7 +3990,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
t)
|
||||
;; We couldn't select this group.
|
||||
((null did-select)
|
||||
(when (and (eq major-mode 'gnus-summary-mode)
|
||||
(when (and (derived-mode-p 'gnus-summary-mode)
|
||||
(not (equal (current-buffer) kill-buffer)))
|
||||
(kill-buffer (current-buffer))
|
||||
(if (not quit-config)
|
||||
|
|
@ -4009,7 +4009,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
;; The user did a `C-g' while prompting for number of articles,
|
||||
;; so we exit this group.
|
||||
((eq did-select 'quit)
|
||||
(and (eq major-mode 'gnus-summary-mode)
|
||||
(and (derived-mode-p 'gnus-summary-mode)
|
||||
(not (equal (current-buffer) kill-buffer))
|
||||
(kill-buffer (current-buffer)))
|
||||
(when kill-buffer
|
||||
|
|
@ -4052,7 +4052,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
(unless no-display
|
||||
(gnus-summary-prepare))
|
||||
(when gnus-use-trees
|
||||
(gnus-tree-open group)
|
||||
(gnus-tree-open)
|
||||
(setq gnus-summary-highlight-line-function
|
||||
'gnus-tree-highlight-article))
|
||||
;; If the summary buffer is empty, but there are some low-scored
|
||||
|
|
@ -5612,7 +5612,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
(or (and entry (not (eq (car entry) t))) ; Either it's active...
|
||||
(gnus-activate-group group) ; Or we can activate it...
|
||||
(progn ; Or we bug out.
|
||||
(when (equal major-mode 'gnus-summary-mode)
|
||||
(when (derived-mode-p 'gnus-summary-mode)
|
||||
(gnus-kill-buffer (current-buffer)))
|
||||
(error
|
||||
"Couldn't activate group %s: %s"
|
||||
|
|
@ -5620,7 +5620,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
|
|||
(mm-decode-coding-string (gnus-status-message group) charset))))
|
||||
|
||||
(unless (gnus-request-group group t)
|
||||
(when (equal major-mode 'gnus-summary-mode)
|
||||
(when (derived-mode-p 'gnus-summary-mode)
|
||||
(gnus-kill-buffer (current-buffer)))
|
||||
(error "Couldn't request group %s: %s"
|
||||
(mm-decode-coding-string group charset)
|
||||
|
|
@ -7257,7 +7257,7 @@ If FORCE (the prefix), also save the .newsrc file(s)."
|
|||
(when gnus-suppress-duplicates
|
||||
(gnus-dup-enter-articles))
|
||||
(when gnus-use-trees
|
||||
(gnus-tree-close group))
|
||||
(gnus-tree-close))
|
||||
(when gnus-use-cache
|
||||
(gnus-cache-write-active))
|
||||
;; Remove entries for this group.
|
||||
|
|
@ -7360,7 +7360,7 @@ If FORCE (the prefix), also save the .newsrc file(s)."
|
|||
(unless gnus-single-article-buffer
|
||||
(setq gnus-article-current nil))
|
||||
(when gnus-use-trees
|
||||
(gnus-tree-close group))
|
||||
(gnus-tree-close))
|
||||
(gnus-async-prefetch-remove-group group)
|
||||
(when (get-buffer gnus-article-buffer)
|
||||
(bury-buffer gnus-article-buffer))
|
||||
|
|
@ -7383,9 +7383,9 @@ The state which existed when entering the ephemeral is reset."
|
|||
(unless (eq (cdr quit-config) 'group)
|
||||
(setq gnus-current-select-method
|
||||
(gnus-find-method-for-group gnus-newsgroup-name)))
|
||||
(cond ((eq major-mode 'gnus-summary-mode)
|
||||
(cond ((derived-mode-p 'gnus-summary-mode)
|
||||
(gnus-set-global-variables))
|
||||
((eq major-mode 'gnus-article-mode)
|
||||
((derived-mode-p 'gnus-article-mode)
|
||||
(save-current-buffer
|
||||
;; The `gnus-summary-buffer' variable may point
|
||||
;; to the old summary buffer when using a single
|
||||
|
|
@ -7400,7 +7400,7 @@ The state which existed when entering the ephemeral is reset."
|
|||
(gnus-configure-windows 'pick 'force)
|
||||
(gnus-configure-windows (cdr quit-config) 'force))
|
||||
(gnus-configure-windows (cdr quit-config) 'force))
|
||||
(when (eq major-mode 'gnus-summary-mode)
|
||||
(when (derived-mode-p 'gnus-summary-mode)
|
||||
(if (memq gnus-auto-select-on-ephemeral-exit '(next-noselect
|
||||
next-unread-noselect))
|
||||
(when (zerop (cond ((eq gnus-auto-select-on-ephemeral-exit
|
||||
|
|
@ -7470,7 +7470,7 @@ The state which existed when entering the ephemeral is reset."
|
|||
(when (and gnus-use-trees
|
||||
(gnus-buffer-exists-p buffer))
|
||||
(with-current-buffer buffer
|
||||
(gnus-tree-close gnus-newsgroup-name)))
|
||||
(gnus-tree-close)))
|
||||
(gnus-kill-buffer buffer))
|
||||
;; Deaden the buffer.
|
||||
((gnus-buffer-exists-p buffer)
|
||||
|
|
@ -7699,7 +7699,7 @@ Given a prefix, will force an `article' buffer configuration."
|
|||
"Display ARTICLE in article buffer."
|
||||
(unless (and (gnus-buffer-live-p gnus-article-buffer)
|
||||
(with-current-buffer gnus-article-buffer
|
||||
(eq major-mode 'gnus-article-mode)))
|
||||
(derived-mode-p 'gnus-article-mode)))
|
||||
(gnus-article-setup-buffer))
|
||||
(gnus-set-global-variables)
|
||||
(with-current-buffer gnus-article-buffer
|
||||
|
|
@ -7731,7 +7731,7 @@ non-nil, the article will be re-fetched even if it already present in
|
|||
the article buffer. If PSEUDO is non-nil, pseudo-articles will also
|
||||
be displayed."
|
||||
;; Make sure we are in the summary buffer to work around bbdb bug.
|
||||
(unless (eq major-mode 'gnus-summary-mode)
|
||||
(unless (derived-mode-p 'gnus-summary-mode)
|
||||
(set-buffer gnus-summary-buffer))
|
||||
(let ((article (or article (gnus-summary-article-number)))
|
||||
(all-headers (not (not all-headers))) ;Must be t or nil.
|
||||
|
|
@ -7783,7 +7783,7 @@ If SUBJECT, only articles with SUBJECT are selected.
|
|||
If BACKWARD, the previous article is selected instead of the next."
|
||||
(interactive "P")
|
||||
;; Make sure we are in the summary buffer.
|
||||
(unless (eq major-mode 'gnus-summary-mode)
|
||||
(unless (derived-mode-p 'gnus-summary-mode)
|
||||
(set-buffer gnus-summary-buffer))
|
||||
(cond
|
||||
;; Is there such an article?
|
||||
|
|
@ -12680,7 +12680,7 @@ UNREAD is a sorted list."
|
|||
(string-match "Summary" buffer)
|
||||
(with-current-buffer buffer
|
||||
;; We check that this is, indeed, a summary buffer.
|
||||
(and (eq major-mode 'gnus-summary-mode)
|
||||
(and (derived-mode-p 'gnus-summary-mode)
|
||||
;; Also make sure this isn't bogus.
|
||||
gnus-newsgroup-prepared
|
||||
;; Also make sure that this isn't a
|
||||
|
|
@ -12815,7 +12815,7 @@ returned."
|
|||
|
||||
(defun gnus-summary-generic-mark (n mark move unread)
|
||||
"Mark N articles with MARK."
|
||||
(unless (eq major-mode 'gnus-summary-mode)
|
||||
(unless (derived-mode-p 'gnus-summary-mode)
|
||||
(error "This command can only be used in the summary buffer"))
|
||||
(gnus-summary-show-thread)
|
||||
(let ((nummove
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue