summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2019-11-29 12:26:31 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2019-11-29 12:26:31 -0500
commitb1a69505843c593a3a757a614dea16e2a7185579 (patch)
tree043919f98b2980e39924c5a52858da57f8cbb7bf
parent7fff418edf56244a1fcf54718523aa9b5cb3a854 (diff)
downloademacs-b1a69505843c593a3a757a614dea16e2a7185579.tar.gz
* lisp/gnus/gnus.el (gnus-info): Define with `cl-defstruct`
This makes the accessors into (inlined) functions (instead of macros), which simplifies some uses, and it makes the gnus-info-set-<foo> macros redundant since we can use `setf` instead. Remove them and update all users. (gnus-info-group, gnus-info-rank, gnus-info-read, gnus-info-marks) (gnus-info-method, gnus-info-params): Auto-defined by defstruct. (gnus-info-level, gnus-info-score): Define as a function. Add gv-setter. (gnus-info-set-group, gnus-info-set-rank, gnus-info-set-read): Remove, use `setf` instead. (gnus-info-set-marks, gnus-info-set-method, gnus-info-set-params): Define as a function. (gnus-info-set-entry): Delete function. (gnus-info--grow-entry): New function, extracted from it. (gnus-info--set-level, gnus-info--set-score): New functions, extracted from the `gnus-info-set-level` and `gnus-info-set-score` which they replace. (gnus-get-info): Define as a function. * lisp/gnus/gnus-group.el (gnus-group-edit-group-done): Use the `extend` arg of `gnus-info-set-method`. (gnus-group-sort-selected-flat): eta-reduce.
-rw-r--r--lisp/gnus/gnus-agent.el40
-rw-r--r--lisp/gnus/gnus-group.el18
-rw-r--r--lisp/gnus/gnus-int.el2
-rw-r--r--lisp/gnus/gnus-sieve.el2
-rw-r--r--lisp/gnus/gnus-start.el35
-rw-r--r--lisp/gnus/gnus-sum.el12
-rw-r--r--lisp/gnus/gnus.el105
-rw-r--r--lisp/gnus/nndiary.el6
-rw-r--r--lisp/gnus/nndraft.el8
-rw-r--r--lisp/gnus/nnimap.el17
-rw-r--r--lisp/gnus/nnir.el22
-rw-r--r--lisp/gnus/nnmaildir.el4
-rw-r--r--lisp/gnus/nnmairix.el40
-rw-r--r--lisp/gnus/nnml.el4
-rw-r--r--lisp/gnus/nnvirtual.el9
15 files changed, 148 insertions, 176 deletions
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 1f252552784..afe1997378d 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -1212,26 +1212,24 @@ This can be added to `gnus-select-article-hook' or
(marks (nth 2 action)))
(dolist (mark marks)
(cond ((eq mark 'read)
- (gnus-info-set-read
- info
- (funcall (if (eq what 'add)
- 'gnus-range-add
- 'gnus-remove-from-range)
- (gnus-info-read info)
- range))
+ (setf (gnus-info-read info)
+ (funcall (if (eq what 'add)
+ #'gnus-range-add
+ #'gnus-remove-from-range)
+ (gnus-info-read info)
+ range))
(gnus-get-unread-articles-in-group
info
(gnus-active (gnus-info-group info))))
((memq mark '(tick))
(let ((info-marks (assoc mark (gnus-info-marks info))))
(unless info-marks
- (gnus-info-set-marks
- info (cons (setq info-marks (list mark))
- (gnus-info-marks info))))
+ (push (setq info-marks (list mark))
+ (gnus-info-marks info)))
(setcdr info-marks
(funcall (if (eq what 'add)
- 'gnus-range-add
- 'gnus-remove-from-range)
+ #'gnus-range-add
+ #'gnus-remove-from-range)
(cdr info-marks)
range))))))))
@@ -1303,12 +1301,11 @@ downloaded into the agent."
;; file.
(let ((read (gnus-info-read info)))
- (gnus-info-set-read
- info
- (gnus-range-add
- read
- (list (cons (1+ agent-max)
- (1- active-min))))))
+ (setf (gnus-info-read info)
+ (gnus-range-add
+ read
+ (list (cons (1+ agent-max)
+ (1- active-min))))))
;; Lie about the agent's local range for this group to
;; disable the set read each time this server is opened.
@@ -2533,13 +2530,14 @@ modified) original contents, they are first saved to their own file."
(assq mark (gnus-info-marks
(setq info (gnus-get-info group))))))
(when (cdr marked-arts)
+ ;; FIXME: Use `cl-callf'?
(setq marks
(delq marked-arts (gnus-info-marks info)))
- (gnus-info-set-marks info marks)))))
+ (setf (gnus-info-marks info) marks)))))
(let ((read (gnus-info-read
(or info (setq info (gnus-get-info group))))))
- (gnus-info-set-read
- info (gnus-add-to-range read unfetched-articles)))
+ (setf (gnus-info-read info)
+ (gnus-add-to-range read unfetched-articles)))
(gnus-group-update-group group t)
(sit-for 0)
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 742f8f4be56..5d68163ff39 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -2973,11 +2973,7 @@ and NEW-NAME will be prompted for."
(setq info (copy-tree info))
(setcar info new-group)
(unless (gnus-server-equal method "native")
- (unless (nthcdr 3 info)
- (nconc info (list nil nil)))
- (unless (nthcdr 4 info)
- (nconc info (list nil)))
- (gnus-info-set-method info method))
+ (gnus-info-set-method info method t))
(gnus-group-set-info info))
(gnus-group-update-group (or new-group group))
(gnus-group-position-point)))
@@ -3374,14 +3370,12 @@ If REVERSE, sort in reverse order."
"Sort only the selected GROUPS, using FUNC.
If REVERSE is non-nil, reverse the sorting."
(let ((infos (sort
- (mapcar (lambda (g)
- (gnus-get-info g))
- groups)
+ (mapcar #'gnus-get-info groups)
func))
sorted-groups)
(when reverse
(setq infos (nreverse infos)))
- (setq sorted-groups (mapcar (lambda (i) (gnus-info-group i)) infos))
+ (setq sorted-groups (mapcar #'gnus-info-group infos))
;; Find the original locations of GROUPS in `gnus-group-list', and
;; replace each one, in order, with a group from SORTED-GROUPS.
@@ -3532,16 +3526,16 @@ Obeys the process/prefix convention."
`(progn
(gnus-request-set-mark ,group ',action)
(gnus-info-set-marks ',info ',(gnus-info-marks info) t)
- (gnus-info-set-read ',info ',(gnus-info-read info))
+ (setf (gnus-info-read ',info) ',(gnus-info-read info))
(when (gnus-group-jump-to-group ,group)
(gnus-get-unread-articles-in-group ',info ',(gnus-active group) t)
(gnus-group-update-group-line))))
(setq action (mapcar (lambda (el) (list (nth 0 el) 'del (nth 2 el)))
action))
(gnus-request-set-mark group action)
- (gnus-info-set-read info nil)
+ (setf (gnus-info-read info) nil)
(when (gnus-info-marks info)
- (gnus-info-set-marks info nil))))
+ (setf (gnus-info-marks info) nil))))
;; Group catching up.
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 0abbfe6720b..a21bc258403 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -727,7 +727,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
(let* ((range (if (= min 2) 1 (cons 1 (1- min))))
(read (gnus-info-read info))
(new-read (gnus-range-add read (list range))))
- (gnus-info-set-read info new-read)))
+ (setf (gnus-info-read info) new-read)))
info)))))
(defun gnus-request-expire-articles (articles group &optional force)
diff --git a/lisp/gnus/gnus-sieve.el b/lisp/gnus/gnus-sieve.el
index fc0bf3098b1..5edd6f5f7ae 100644
--- a/lisp/gnus/gnus-sieve.el
+++ b/lisp/gnus/gnus-sieve.el
@@ -128,7 +128,7 @@ Return nil if no rule could be guessed."
(info (gnus-get-info gnus-newsgroup-name)))
(if (null rule)
(error "Could not guess rule for article")
- (gnus-info-set-params info (cons rule (gnus-info-params info)))
+ (push rule (gnus-info-params info))
(message "Added rule in group %s for article: %s" gnus-newsgroup-name
rule)))))
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index e142c438ee0..b90229e6f57 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -1828,7 +1828,7 @@ The info element is shared with the same element of
;; Make the same select-methods identical Lisp objects.
(when (setq method (gnus-info-method info))
(if (setq rest (member method methods))
- (gnus-info-set-method info (car rest))
+ (setf (gnus-info-method info) (car rest))
(push method methods)))
;; Check for encoded group names and decode them.
(when (string-match-p "[^[:ascii:]]" (setq gname (car info)))
@@ -1890,8 +1890,8 @@ The info element is shared with the same element of
(push article news)))
(when news
;; Enter this list into the group info.
- (gnus-info-set-read
- info (gnus-remove-from-range (gnus-info-read info) (nreverse news)))
+ (setf (gnus-info-read info)
+ (gnus-remove-from-range (gnus-info-read info) (nreverse news)))
;; Set the number of unread articles in gnus-newsrc-hashtb.
(gnus-get-unread-articles-in-group info (gnus-active group))
@@ -1958,7 +1958,7 @@ The info element is shared with the same element of
(when (eq modified 'remove-null)
(setq r (delq nil r)))
;; Enter this list into the group info.
- (gnus-info-set-read info r)
+ (setf (gnus-info-read info) r)
;; Set the number of unread articles in gnus-newsrc-hashtb.
(gnus-get-unread-articles-in-group info (gnus-active group))
@@ -2362,12 +2362,11 @@ If FORCE is non-nil, the .newsrc file is read."
(setq dormant (cdr (assq 'dormant marks))
ticked (cdr (assq 'tick marks)))
(when (or dormant ticked)
- (gnus-info-set-read
- info
- (gnus-add-to-range
- (gnus-info-read info)
- (nconc (gnus-uncompress-range dormant)
- (gnus-uncompress-range ticked)))))))))
+ (setf (gnus-info-read info)
+ (gnus-add-to-range
+ (gnus-info-read info)
+ (nconc (gnus-uncompress-range dormant)
+ (gnus-uncompress-range ticked)))))))))
(defun gnus-load (file)
"Load FILE, but in such a way that read errors can be reported."
@@ -2438,9 +2437,9 @@ If FORCE is non-nil, the .newsrc file is read."
(while (setq group (pop newsrc))
(if (setq info (gnus-get-info (car group)))
(progn
- (gnus-info-set-read info (cddr group))
- (gnus-info-set-level
- info (if (nth 1 group) gnus-level-default-subscribed
+ (setf (gnus-info-read info) (cddr group))
+ (setf (gnus-info-level info)
+ (if (nth 1 group) gnus-level-default-subscribed
gnus-level-default-unsubscribed))
(push info gnus-newsrc-alist))
(push (setq info
@@ -2453,9 +2452,9 @@ If FORCE is non-nil, the .newsrc file is read."
(when (setq m (assoc (car group) marked))
(unless (nthcdr 3 info)
(nconc info (list nil)))
- (gnus-info-set-marks
- info (list (cons 'tick (gnus-compress-sequence
- (sort (cdr m) '<) t))))))
+ (setf (gnus-info-marks info)
+ (list (cons 'tick (gnus-compress-sequence
+ (sort (cdr m) #'<) t))))))
(setq newsrc killed)
(while newsrc
(setcar newsrc (caar newsrc))
@@ -2609,7 +2608,7 @@ If FORCE is non-nil, the .newsrc file is read."
;; There is an entry for this file in
;; `gnus-newsrc-hashtb'.
(progn
- (gnus-info-set-read info (nreverse reads))
+ (setf (gnus-info-read info) (nreverse reads))
;; We update the level very gently. In fact, we
;; only change it if there's been a status change
;; from subscribed to unsubscribed, or vice versa.
@@ -2621,7 +2620,7 @@ If FORCE is non-nil, the .newsrc file is read."
(1+ gnus-level-default-unsubscribed))))
((and (> level gnus-level-subscribed) subscribed)
(setq level gnus-level-default-subscribed)))
- (gnus-info-set-level info level))
+ (setf (gnus-info-level info) level))
;; This is a new group.
(setq info (list group
(if subscribed
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 4a51d2c80b6..d62c0634367 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -6367,7 +6367,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(gnus-undo-register
`(progn
(gnus-info-set-marks ',info ',(gnus-info-marks info) t)
- (gnus-info-set-read ',info ',(gnus-info-read info))
+ (setf (gnus-info-read ',info) ',(gnus-info-read info))
(gnus-get-unread-articles-in-group ',info (gnus-active ,group))
(when ,set-marks
(gnus-request-set-mark
@@ -6375,7 +6375,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(gnus-group-jump-to-group ,group)
(gnus-group-update-group ,group t))))
;; Add the read articles to the range.
- (gnus-info-set-read info range)
+ (setf (gnus-info-read info) range)
(when set-marks
(gnus-request-set-mark group (list (list range 'add '(read)))))
;; Then we have to re-compute how many unread
@@ -10283,8 +10283,8 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(when (and (not (memq article gnus-newsgroup-unreads))
(cdr art-group))
(push 'read to-marks)
- (gnus-info-set-read
- info (gnus-add-to-range (gnus-info-read info)
+ (setf (gnus-info-read info)
+ (gnus-add-to-range (gnus-info-read info)
(list (cdr art-group)))))
;; See whether the article is to be put in the cache.
@@ -12891,14 +12891,14 @@ UNREAD is a sorted list."
(gnus-undo-register
`(progn
(gnus-info-set-marks ',info ',(gnus-info-marks info) t)
- (gnus-info-set-read ',info ',(gnus-info-read info))
+ (setf (gnus-info-read ',info) ',(gnus-info-read info))
(gnus-group-jump-to-group ,group)
(gnus-get-unread-articles-in-group ',info
(gnus-active ,group))
(gnus-group-update-group ,group t)
,setmarkundo))))
;; Enter this list into the group info.
- (gnus-info-set-read info read)
+ (setf (gnus-info-read info) read)
;; Set the number of unread articles in gnus-newsrc-hashtb.
(gnus-get-unread-articles-in-group info (gnus-active group))
t))))
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 0673ac15f60..23643cc6c79 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -2817,67 +2817,50 @@ See Info node `(gnus)Formatting Variables'."
;; Info access macros.
-(defmacro gnus-info-group (info)
- `(nth 0 ,info))
-(defmacro gnus-info-rank (info)
- `(nth 1 ,info))
-(defmacro gnus-info-read (info)
- `(nth 2 ,info))
-(defmacro gnus-info-marks (info)
- `(nth 3 ,info))
-(defmacro gnus-info-method (info)
- `(nth 4 ,info))
-(defmacro gnus-info-params (info)
- `(nth 5 ,info))
-
-(defmacro gnus-info-level (info)
- `(let ((rank (gnus-info-rank ,info)))
- (if (consp rank)
- (car rank)
- rank)))
-(defmacro gnus-info-score (info)
- `(let ((rank (gnus-info-rank ,info)))
- (or (and (consp rank) (cdr rank)) 0)))
-
-(defmacro gnus-info-set-group (info group)
- `(setcar ,info ,group))
-(defmacro gnus-info-set-rank (info rank)
- `(setcar (nthcdr 1 ,info) ,rank))
-(defmacro gnus-info-set-read (info read)
- `(setcar (nthcdr 2 ,info) ,read))
-(defmacro gnus-info-set-marks (info marks &optional extend)
- (if extend
- `(gnus-info-set-entry ,info ,marks 3)
- `(setcar (nthcdr 3 ,info) ,marks)))
-(defmacro gnus-info-set-method (info method &optional extend)
- (if extend
- `(gnus-info-set-entry ,info ,method 4)
- `(setcar (nthcdr 4 ,info) ,method)))
-(defmacro gnus-info-set-params (info params &optional extend)
- (if extend
- `(gnus-info-set-entry ,info ,params 5)
- `(setcar (nthcdr 5 ,info) ,params)))
-
-(defun gnus-info-set-entry (info entry number)
+(cl-defstruct (gnus-info
+ (:constructor nil)
+ (:type list))
+ group rank read marks method params)
+
+(defsubst gnus-info-level (info)
+ (declare (gv-setter gnus-info--set-level))
+ (let ((rank (gnus-info-rank info)))
+ (if (consp rank)
+ (car rank)
+ rank)))
+(defsubst gnus-info-score (info)
+ (declare (gv-setter gnus-info--set-score))
+ (let ((rank (gnus-info-rank info)))
+ (or (and (consp rank) (cdr rank)) 0)))
+
+(defsubst gnus-info-set-marks (info marks &optional extend)
+ (if extend (gnus-info--grow-entry info 3))
+ (setf (gnus-info-marks info) marks))
+(defsubst gnus-info-set-method (info method &optional extend)
+ (if extend (gnus-info--grow-entry info 4))
+ (setf (gnus-info-method info) method))
+(defsubst gnus-info-set-params (info params &optional extend)
+ (if extend (gnus-info--grow-entry info 5))
+ (setf (gnus-info-params info) params))
+
+(defun gnus-info--grow-entry (info number)
;; Extend the info until we have enough elements.
(while (<= (length info) number)
- (nconc info (list nil)))
- ;; Set the entry.
- (setcar (nthcdr number info) entry))
-
-(defmacro gnus-info-set-level (info level)
- `(let ((rank (cdr ,info)))
- (if (consp (car rank))
- (setcar (car rank) ,level)
- (setcar rank ,level))))
-(defmacro gnus-info-set-score (info score)
- `(let ((rank (cdr ,info)))
- (if (consp (car rank))
- (setcdr (car rank) ,score)
- (setcar rank (cons (car rank) ,score)))))
-
-(defmacro gnus-get-info (group)
- `(nth 1 (gethash ,group gnus-newsrc-hashtb)))
+ (nconc info (list nil))))
+
+(defsubst gnus-info--set-level (info level)
+ (let ((rank (gnus-info-rank info)))
+ (if (consp rank)
+ (setcar rank level)
+ (setf (gnus-info-rank info) level))))
+(defsubst gnus-info--set-score (info score)
+ (let ((rank (gnus-info-rank info)))
+ (if (consp rank)
+ (setcdr rank score)
+ (setf (gnus-info-rank info) (cons rank score)))))
+
+(defsubst gnus-get-info (group)
+ (nth 1 (gethash group gnus-newsrc-hashtb)))
(defun gnus-set-info (group info)
(setcdr (gethash group gnus-newsrc-hashtb)
@@ -3704,14 +3687,14 @@ GROUP can also be an INFO structure."
(setq params (delq name params))
(while (assq name params)
(gnus-alist-pull name params))
- (gnus-info-set-params info params))))))
+ (setf (gnus-info-params info) params))))))
(defun gnus-group-add-score (group &optional score)
"Add SCORE to the GROUP score.
If SCORE is nil, add 1 to the score of GROUP."
(let ((info (gnus-get-info group)))
(when info
- (gnus-info-set-score info (+ (gnus-info-score info) (or score 1))))))
+ (setf (gnus-info-score info) (+ (gnus-info-score info) (or score 1))))))
(defun gnus-short-group-name (group &optional levels)
"Collapse GROUP name LEVELS.
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index a340804064f..94ea259a335 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -793,10 +793,10 @@ all. This may very well take some time.")
;;(message "unread: %s" unread)
(sit-for 1)
(kill-buffer buf))
- (setq unread (sort unread '<))
+ (setq unread (sort unread #'<))
(and unread
- (gnus-info-set-read info (gnus-update-read-articles
- (gnus-info-group info) unread t)))
+ (setf (gnus-info-read info)
+ (gnus-update-read-articles (gnus-info-group info) unread t)))
))
(run-hook-with-args 'nndiary-request-update-info-functions
(gnus-info-group info))
diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el
index bc475ee2951..a178f1f1194 100644
--- a/lisp/gnus/nndraft.el
+++ b/lisp/gnus/nndraft.el
@@ -147,10 +147,10 @@ are generated if and only if they are also in `message-draft-headers'."
(deffoo nndraft-request-update-info (group info &optional server)
(nndraft-possibly-change-group group)
- (gnus-info-set-read
- info
- (gnus-update-read-articles (gnus-group-prefixed-name group '(nndraft ""))
- (nndraft-articles) t))
+ (setf (gnus-info-read info)
+ (gnus-update-read-articles
+ (gnus-group-prefixed-name group '(nndraft ""))
+ (nndraft-articles) t))
(let ((marks (nth 3 info)))
(when marks
;; Nix out all marks except the `unsend'-able article marks.
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 800ec3b9597..bbbca8f4193 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -1620,7 +1620,7 @@ If LIMIT, first try to limit the search to the N last articles."
read)))
(when (or (not (listp permanent-flags))
(memq '%Seen permanent-flags))
- (gnus-info-set-read info read))
+ (setf (gnus-info-read info) read))
;; Update the marks.
(setq marks (gnus-info-marks info))
(dolist (type (cdr nnimap-mark-alist))
@@ -1680,14 +1680,13 @@ If LIMIT, first try to limit the search to the N last articles."
(defun nnimap-update-qresync-info (info existing vanished flags)
;; Add all the vanished articles to the list of read articles.
- (gnus-info-set-read
- info
- (gnus-add-to-range
- (gnus-add-to-range
- (gnus-range-add (gnus-info-read info)
- vanished)
- (cdr (assq '%Flagged flags)))
- (cdr (assq '%Seen flags))))
+ (setf (gnus-info-read info)
+ (gnus-add-to-range
+ (gnus-add-to-range
+ (gnus-range-add (gnus-info-read info)
+ vanished)
+ (cdr (assq '%Flagged flags)))
+ (cdr (assq '%Seen flags))))
(let ((marks (gnus-info-marks info)))
(dolist (type (cdr nnimap-mark-alist))
(let ((ticks (assoc (car type) marks))
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index 3b6b8255f71..bf441ee3595 100644
--- a/lisp/gnus/nnir.el
+++ b/lisp/gnus/nnir.el
@@ -874,8 +874,8 @@ A non-nil `specs' arg must be an alist with `nnir-query-spec' and
(deffoo nnir-request-update-info (group info &optional server)
(nnir-possibly-change-group group server)
;; clear out all existing marks.
- (gnus-info-set-marks info nil)
- (gnus-info-set-read info nil)
+ (setf (gnus-info-marks info) nil)
+ (setf (gnus-info-read info) nil)
(let ((group (gnus-group-guess-full-name-from-command-method group))
(articles-by-group
(nnir-categorize
@@ -889,15 +889,15 @@ A non-nil `specs' arg must be an alist with `nnir-query-spec' and
(group-info (gnus-get-info (car group-articles)))
(marks (gnus-info-marks group-info))
(read (gnus-info-read group-info)))
- (gnus-info-set-read
- info
- (gnus-add-to-range
- (gnus-info-read info)
- (delq nil
- (mapcar
- #'(lambda (art)
- (when (gnus-member-of-range (cdr art) read) (car art)))
- articleids))))
+ (setf (gnus-info-read info)
+ (gnus-add-to-range
+ (gnus-info-read info)
+ (delq nil
+ (mapcar
+ #'(lambda (art)
+ (when (gnus-member-of-range (cdr art) read)
+ (car art)))
+ articleids))))
(dolist (mark marks)
(cl-destructuring-bind (type . range) mark
(gnus-add-marked-articles
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el
index 0133fc6ce2b..b0e79d4f238 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -1000,7 +1000,7 @@ This variable is set by `nnmaildir-request-article'.")
pgname (nnmaildir--pgname nnmaildir--cur-server gname)
flist (nnmaildir--grp-flist group))
(when (zerop (nnmaildir--grp-count group))
- (gnus-info-set-read info nil)
+ (setf (gnus-info-read info) nil)
(gnus-info-set-marks info nil 'extend)
(throw 'return info))
(setq old-marks (cons 'read (gnus-info-read info))
@@ -1083,7 +1083,7 @@ This variable is set by `nnmaildir-request-article'.")
(setq ranges (gnus-add-to-range ranges (sort article-list '<)))))
(if (eq mark 'read) (setq read ranges)
(if ranges (setq marks (cons (cons mark ranges) marks)))))
- (gnus-info-set-read info (gnus-range-add read missing))
+ (setf (gnus-info-read info) (gnus-range-add read missing))
(gnus-info-set-marks info marks 'extend)
(setf (nnmaildir--grp-mmth group) new-mmth)
info)))
diff --git a/lisp/gnus/nnmairix.el b/lisp/gnus/nnmairix.el
index 6e527a5a7af..a4a1caac953 100644
--- a/lisp/gnus/nnmairix.el
+++ b/lisp/gnus/nnmairix.el
@@ -711,29 +711,29 @@ Other back ends might or might not work.")
(nnimap-request-update-info-internal folder folderinfo nnmairix-backend-server)
(nnmairix-call-backend "request-update-info" folder folderinfo nnmairix-backend-server))
;; set range of read articles
- (gnus-info-set-read
- info
- (if docorr
- (nnmairix-map-range
- `(lambda (x) (+ x ,(cadr corr)))
- (gnus-info-read folderinfo))
- (gnus-info-read folderinfo)))
+ (setf (gnus-info-read info)
+ (if docorr
+ (nnmairix-map-range
+ ;; FIXME: Use lexical-binding.
+ `(lambda (x) (+ x ,(cadr corr)))
+ (gnus-info-read folderinfo))
+ (gnus-info-read folderinfo)))
;; set other marks
- (gnus-info-set-marks
- info
- (if docorr
- (mapcar (lambda (cur)
- (cons
- (car cur)
- (nnmairix-map-range
- `(lambda (x) (+ x ,(cadr corr)))
- (list (cadr cur)))))
- (gnus-info-marks folderinfo))
- (gnus-info-marks folderinfo))))
+ (setf (gnus-info-marks info)
+ (if docorr
+ (mapcar (lambda (cur)
+ (cons
+ (car cur)
+ (nnmairix-map-range
+ ;; FIXME: Use lexical-binding.
+ `(lambda (x) (+ x ,(cadr corr)))
+ (list (cadr cur)))))
+ (gnus-info-marks folderinfo))
+ (gnus-info-marks folderinfo))))
(when (eq readmarks 'unread)
- (gnus-info-set-read info nil))
+ (setf (gnus-info-read info) nil))
(when (eq readmarks 'read)
- (gnus-info-set-read info (gnus-active qualgroup))))
+ (setf (gnus-info-read info) (gnus-active qualgroup))))
t)
(nnoo-define-skeleton nnmairix)
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index 302589bd6d7..8d8d5ae83a1 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -1067,7 +1067,7 @@ Use the nov database for the current group if available."
(when (gnus-member-of-range old-number read)
(setq read (gnus-remove-from-range read (list old-number)))
(setq read (gnus-add-to-range read (list new-number))))
- (gnus-info-set-read info read))
+ (setf (gnus-info-read info) read))
;; 2 b/ marked articles:
(let ((oldmarks (gnus-info-marks info))
mark newmarks)
@@ -1080,7 +1080,7 @@ Use the nov database for the current group if available."
(setcdr mark (gnus-add-to-range (cdr mark)
(list new-number))))
(push mark newmarks))
- (gnus-info-set-marks info newmarks))
+ (setf (gnus-info-marks info) newmarks))
;; 3/ Update the NOV entry for this article:
(unless nnml-nov-is-evil
(with-current-buffer (nnml-open-nov group)
diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el
index 25f3413fcd5..b4a23766622 100644
--- a/lisp/gnus/nnvirtual.el
+++ b/lisp/gnus/nnvirtual.el
@@ -463,11 +463,10 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
(dolist (group nnvirtual-component-groups)
(when (and (setq info (gnus-get-info group))
(gnus-info-marks info))
- (gnus-info-set-marks
- info
- (if (assq 'score (gnus-info-marks info))
- (list (assq 'score (gnus-info-marks info)))
- nil))))
+ (setf (gnus-info-marks info)
+ (if (assq 'score (gnus-info-marks info))
+ (list (assq 'score (gnus-info-marks info)))
+ nil))))
;; Ok, currently type-marks is an assq list with keys of a mark type,
;; with data of an assq list with keys of component group names