projects
/
gnus
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Synch with the emacs-25 branch; the changes will be merged to the trunk (soon?)
[gnus]
/
lisp
/
gnus-topic.el
diff --git
a/lisp/gnus-topic.el
b/lisp/gnus-topic.el
index
e4afc7c
..
b989783
100644
(file)
--- a/
lisp/gnus-topic.el
+++ b/
lisp/gnus-topic.el
@@
-1,7
+1,6
@@
;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
;; Author: Ilja Weis <kult@uni-paderborn.de>
;; Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Author: Ilja Weis <kult@uni-paderborn.de>
;; Lars Magne Ingebrigtsen <larsi@gnus.org>
@@
-146,13
+145,6
@@
See Info node `(gnus)Formatting Variables'."
(setq alist (cdr alist)))
out))
(setq alist (cdr alist)))
out))
-(defun gnus-group-parent-topic (group)
- "Return the topic GROUP is member of by looking at the group buffer."
- (with-current-buffer gnus-group-buffer
- (if (gnus-group-goto-group group)
- (gnus-current-topic)
- (gnus-group-topic group))))
-
(defun gnus-topic-goto-topic (topic)
(when topic
(gnus-goto-char (text-property-any (point-min) (point-max)
(defun gnus-topic-goto-topic (topic)
(when topic
(gnus-goto-char (text-property-any (point-min) (point-max)
@@
-162,7
+154,7
@@
See Info node `(gnus)Formatting Variables'."
"Go to TOPIC."
(interactive
(list (gnus-completing-read "Go to topic" (gnus-topic-list) t)))
"Go to TOPIC."
(interactive
(list (gnus-completing-read "Go to topic" (gnus-topic-list) t)))
- (let ((
buffer-read-only nil
))
+ (let ((
inhibit-read-only t
))
(dolist (topic (gnus-current-topics topic))
(unless (gnus-topic-goto-topic topic)
(gnus-topic-goto-missing-topic topic)
(dolist (topic (gnus-current-topics topic))
(unless (gnus-topic-goto-topic topic)
(gnus-topic-goto-missing-topic topic)
@@
-431,11
+423,11
@@
inheritance."
regexp list-topic topic-level)
"List all newsgroups with unread articles of level LEVEL or lower.
Use the `gnus-group-topics' to sort the groups.
regexp list-topic topic-level)
"List all newsgroups with unread articles of level LEVEL or lower.
Use the `gnus-group-topics' to sort the groups.
-If PREDICTE is a function, list groups that the function returns non-nil;
+If PREDIC
A
TE is a function, list groups that the function returns non-nil;
if it is t, list groups that have no unread articles.
If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
(set-buffer gnus-group-buffer)
if it is t, list groups that have no unread articles.
If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
(set-buffer gnus-group-buffer)
- (let ((
buffer-read-only nil
)
+ (let ((
inhibit-read-only t
)
(lowest (or lowest 1))
(not-in-list
(and gnus-group-listed-groups
(lowest (or lowest 1))
(not-in-list
(and gnus-group-listed-groups
@@
-516,7
+508,6
@@
articles in the topic and its subtopics."
(all-entries entries)
(point-max (point-max))
(unread 0)
(all-entries entries)
(point-max (point-max))
(unread 0)
- (topic (car type))
info entry end active tick)
;; Insert any sub-topics.
(while topicl
info entry end active tick)
;; Insert any sub-topics.
(while topicl
@@
-583,22
+574,18
@@
articles in the topic and its subtopics."
(or gnus-topic-display-empty-topics ;We want empty topics
(not (zerop unread)) ;Non-empty
tick ;Ticked articles
(or gnus-topic-display-empty-topics ;We want empty topics
(not (zerop unread)) ;Non-empty
tick ;Ticked articles
- (/= point-max (point-max)))) ;
Unactivated
groups
+ (/= point-max (point-max)))) ;
Inactive
groups
(gnus-extent-start-open (point))
(gnus-topic-insert-topic-line
(car type) visiblep
(not (eq (nth 2 type) 'hidden))
level all-entries unread))
(gnus-topic-update-unreads (car type) unread)
(gnus-extent-start-open (point))
(gnus-topic-insert-topic-line
(car type) visiblep
(not (eq (nth 2 type) 'hidden))
level all-entries unread))
(gnus-topic-update-unreads (car type) unread)
- (when gnus-group-update-tool-bar
- (gnus-put-text-property beg end 'point-entered
- 'gnus-tool-bar-update)
- (gnus-put-text-property beg end 'point-left
- 'gnus-tool-bar-update))
+ (gnus-group--setup-tool-bar-update beg end)
(goto-char end)
unread))
(goto-char end)
unread))
-(defun gnus-topic-remove-topic (&optional insert total-remove hide in-level)
+(defun gnus-topic-remove-topic (&optional insert total-remove
_
hide in-level)
"Remove the current topic."
(let ((topic (gnus-group-topic-name))
(level (gnus-group-topic-level))
"Remove the current topic."
(let ((topic (gnus-group-topic-name))
(level (gnus-group-topic-level))
@@
-643,6
+630,8
@@
articles in the topic and its subtopics."
(or insert (not (gnus-topic-visible-p))) nil nil 9)
(gnus-topic-enter-dribble)))))))
(or insert (not (gnus-topic-visible-p))) nil nil 9)
(gnus-topic-enter-dribble)))))))
+(defvar gnus-tmp-header)
+
(defun gnus-topic-insert-topic-line (name visiblep shownp level entries
&optional unread)
(let* ((visible (if visiblep "" "..."))
(defun gnus-topic-insert-topic-line (name visiblep shownp level entries
&optional unread)
(let* ((visible (if visiblep "" "..."))
@@
-692,7
+681,7
@@
articles in the topic and its subtopics."
gnus-topic-mode)
(let ((group (gnus-group-group-name))
(m (point-marker))
gnus-topic-mode)
(let ((group (gnus-group-group-name))
(m (point-marker))
- (
buffer-read-only nil
))
+ (
inhibit-read-only t
))
(when (and group
(gnus-get-info group)
(gnus-topic-goto-topic (gnus-current-topic)))
(when (and group
(gnus-get-info group)
(gnus-topic-goto-topic (gnus-current-topic)))
@@
-706,8
+695,7
@@
articles in the topic and its subtopics."
(let* ((topic (gnus-group-topic group))
(groups (cdr (assoc topic gnus-topic-alist)))
(g (cdr (member group groups)))
(let* ((topic (gnus-group-topic group))
(groups (cdr (assoc topic gnus-topic-alist)))
(g (cdr (member group groups)))
- (unfound t)
- entry)
+ (unfound t))
;; Try to jump to a visible group.
(while (and g
(not (gnus-group-goto-group (car g) t)))
;; Try to jump to a visible group.
(while (and g
(not (gnus-group-goto-group (car g) t)))
@@
-910,7
+898,7
@@
articles in the topic and its subtopics."
(defun gnus-topic-change-level (group level oldlevel &optional previous)
"Run when changing levels to enter/remove groups from topics."
(with-current-buffer gnus-group-buffer
(defun gnus-topic-change-level (group level oldlevel &optional previous)
"Run when changing levels to enter/remove groups from topics."
(with-current-buffer gnus-group-buffer
- (let ((
buffer-read-only nil
))
+ (let ((
inhibit-read-only t
))
(unless gnus-topic-inhibit-change-level
(gnus-group-goto-group (or (car (nth 2 previous)) group))
(when (and gnus-topic-mode
(unless gnus-topic-inhibit-change-level
(gnus-group-goto-group (or (car (nth 2 previous)) group))
(when (and gnus-topic-mode
@@
-970,12
+958,15
@@
articles in the topic and its subtopics."
(if (not group)
(if (not (memq 'gnus-topic props))
(goto-char (point-max))
(if (not group)
(if (not (memq 'gnus-topic props))
(goto-char (point-max))
- (gnus-topic-goto-topic (symbol-name (cadr (memq 'gnus-topic props)))))
+ (let ((topic (symbol-name (cadr (memq 'gnus-topic props)))))
+ (or (gnus-topic-goto-topic topic)
+ (gnus-topic-goto-topic (gnus-topic-next-topic topic)))))
(if (gnus-group-goto-group group)
t
;; The group is no longer visible.
(let* ((list (assoc (gnus-group-topic group) gnus-topic-alist))
(if (gnus-group-goto-group group)
t
;; The group is no longer visible.
(let* ((list (assoc (gnus-group-topic group) gnus-topic-alist))
- (after (cdr (member group (cdr list)))))
+ (topic-visible (save-excursion (gnus-topic-goto-topic (car list))))
+ (after (and topic-visible (cdr (member group (cdr list))))))
;; First try to put point on a group after the current one.
(while (and after
(not (gnus-group-goto-group (car after))))
;; First try to put point on a group after the current one.
(while (and after
(not (gnus-group-goto-group (car after))))
@@
-990,7
+981,9
@@
articles in the topic and its subtopics."
(if (not (car list))
(goto-char (point-min))
(unless after
(if (not (car list))
(goto-char (point-min))
(unless after
- (gnus-topic-goto-topic (car list))
+ (if topic-visible
+ (gnus-goto-char topic-visible)
+ (gnus-topic-goto-topic (gnus-topic-next-topic (car list))))
(setq after nil)))
t))))
(setq after nil)))
t))))
@@
-1134,22
+1127,17
@@
articles in the topic and its subtopics."
["Edit parameters" gnus-topic-edit-parameters t])
["List active" gnus-topic-list-active t]))))
["Edit parameters" gnus-topic-edit-parameters t])
["List active" gnus-topic-list-active t]))))
-(def
un gnus-topic-mode (&optional arg redisplay)
+(def
ine-minor-mode gnus-topic-mode
"Minor mode for topicsifying Gnus group buffers."
"Minor mode for topicsifying Gnus group buffers."
- ;; FIXME: Use define-minor-mode.
- (interactive (list current-prefix-arg t))
- (when (eq major-mode 'gnus-group-mode)
- (make-local-variable 'gnus-topic-mode)
- (setq gnus-topic-mode
- (if (null arg) (not gnus-topic-mode)
- (> (prefix-numeric-value arg) 0)))
+ :lighter " Topic" :keymap gnus-topic-mode-map
+ (if (not (derived-mode-p 'gnus-group-mode))
+ (setq gnus-topic-mode nil)
;; Infest Gnus with topics.
(if (not gnus-topic-mode)
(setq gnus-goto-missing-group-function nil)
(when (gnus-visual-p 'topic-menu 'menu)
(gnus-topic-make-menu-bar))
(gnus-set-format 'topic t)
;; Infest Gnus with topics.
(if (not gnus-topic-mode)
(setq gnus-goto-missing-group-function nil)
(when (gnus-visual-p 'topic-menu 'menu)
(gnus-topic-make-menu-bar))
(gnus-set-format 'topic t)
- (add-minor-mode 'gnus-topic-mode " Topic" gnus-topic-mode-map)
(add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
(set (make-local-variable 'gnus-group-prepare-function)
'gnus-group-prepare-topics)
(add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
(set (make-local-variable 'gnus-group-prepare-function)
'gnus-group-prepare-topics)
@@
-1171,8
+1159,7
@@
articles in the topic and its subtopics."
(setq gnus-topology-checked-p nil)
;; We check the topology.
(when gnus-newsrc-alist
(setq gnus-topology-checked-p nil)
;; We check the topology.
(when gnus-newsrc-alist
- (gnus-topic-check-topology))
- (gnus-run-hooks 'gnus-topic-mode-hook))
+ (gnus-topic-check-topology)))
;; Remove topic infestation.
(unless gnus-topic-mode
(remove-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
;; Remove topic infestation.
(unless gnus-topic-mode
(remove-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
@@
-1180,7
+1167,7
@@
articles in the topic and its subtopics."
(remove-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist)
(setq gnus-group-prepare-function 'gnus-group-prepare-flat)
(setq gnus-group-sort-alist-function 'gnus-group-sort-flat))
(remove-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist)
(setq gnus-group-prepare-function 'gnus-group-prepare-flat)
(setq gnus-group-sort-alist-function 'gnus-group-sort-flat))
- (when
redisplay
+ (when
(gmm-called-interactively-p 'any)
(gnus-group-list-groups))))
(defun gnus-topic-select-group (&optional all)
(gnus-group-list-groups))))
(defun gnus-topic-select-group (&optional all)
@@
-1232,10
+1219,10
@@
Also see `gnus-group-catchup'."
(call-interactively 'gnus-group-catchup-current)
(save-excursion
(let* ((groups
(call-interactively 'gnus-group-catchup-current)
(save-excursion
(let* ((groups
- (mapcar (lambda (entry) (car (nth 2 entry)))
- (gnus-topic-find-groups topic gnus-level-killed t
- nil t)))
- (
buffer-read-only nil
)
+
(mapcar (lambda (entry) (car (nth 2 entry)))
+
(gnus-topic-find-groups topic gnus-level-killed t
+
nil t)))
+ (
inhibit-read-only t
)
(gnus-group-marked groups))
(gnus-group-catchup-current)
(mapcar 'gnus-topic-update-topics-containing-group groups)))))
(gnus-group-marked groups))
(gnus-group-catchup-current)
(mapcar 'gnus-topic-update-topics-containing-group groups)))))
@@
-1298,6
+1285,8
@@
When used interactively, PARENT will be the topic under point."
;; 2. Can't process on several marked groups with a same name,
;; because gnus-group-marked only keeps one copy.
;; 2. Can't process on several marked groups with a same name,
;; because gnus-group-marked only keeps one copy.
+(defvar gnus-topic-history nil)
+
(defun gnus-topic-move-group (n topic &optional copyp)
"Move the next N groups to TOPIC.
If COPYP, copy the groups instead."
(defun gnus-topic-move-group (n topic &optional copyp)
"Move the next N groups to TOPIC.
If COPYP, copy the groups instead."
@@
-1337,7
+1326,7
@@
If COPYP, copy the groups instead."
(lambda (group)
(gnus-group-remove-mark group use-marked)
(let ((topicl (assoc (gnus-current-topic) gnus-topic-alist))
(lambda (group)
(gnus-group-remove-mark group use-marked)
(let ((topicl (assoc (gnus-current-topic) gnus-topic-alist))
- (
buffer-read-only nil
))
+ (
inhibit-read-only t
))
(when (and topicl group)
(gnus-delete-line)
(gnus-delete-first group topicl))
(when (and topicl group)
(gnus-delete-line)
(gnus-delete-first group topicl))
@@
-1465,7
+1454,7
@@
If NON-RECURSIVE (which is the prefix) is t, don't mark its subtopics."
(funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark)
(gnus-info-group (nth 2 (pop groups)))))))))
(funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark)
(gnus-info-group (nth 2 (pop groups)))))))))
-(defun gnus-topic-unmark-topic (topic &optional dummy non-recursive)
+(defun gnus-topic-unmark-topic (topic &optional
_
dummy non-recursive)
"Remove the process mark from all groups in the TOPIC.
If NON-RECURSIVE (which is the prefix) is t, don't unmark its subtopics."
(interactive (list (gnus-group-topic-name)
"Remove the process mark from all groups in the TOPIC.
If NON-RECURSIVE (which is the prefix) is t, don't unmark its subtopics."
(interactive (list (gnus-group-topic-name)
@@
-1499,15
+1488,14
@@
If NON-RECURSIVE (which is the prefix) is t, don't unmark its subtopics."
(gnus-group-mark-regexp regexp)
(gnus-topic-move-group nil topic copyp))
(gnus-group-mark-regexp regexp)
(gnus-topic-move-group nil topic copyp))
-(defun gnus-topic-copy-matching (regexp topic &optional copyp)
+(defun gnus-topic-copy-matching (regexp topic &optional
_
copyp)
"Copy all groups that match REGEXP to some topic."
(interactive
"Copy all groups that match REGEXP to some topic."
(interactive
- (let (topic)
+ (let ((topic (gnus-completing-read "Copy to topic"
+ (mapcar #'car gnus-topic-alist) t)))
(nreverse
(nreverse
- (list
- (setq topic (gnus-completing-read "Copy to topic"
- (mapcar 'car gnus-topic-alist) t))
- (read-string (format "Copy to %s (regexp): " topic))))))
+ (list topic
+ (read-string (format "Copy to %s (regexp): " topic))))))
(gnus-topic-move-matching regexp topic t))
(defun gnus-topic-delete (topic)
(gnus-topic-move-matching regexp topic t))
(defun gnus-topic-delete (topic)
@@
-1516,7
+1504,7
@@
If NON-RECURSIVE (which is the prefix) is t, don't unmark its subtopics."
(unless topic
(error "No topic to be deleted"))
(let ((entry (assoc topic gnus-topic-alist))
(unless topic
(error "No topic to be deleted"))
(let ((entry (assoc topic gnus-topic-alist))
- (
buffer-read-only nil
))
+ (
inhibit-read-only t
))
(when (cdr entry)
(error "Topic not empty"))
;; Delete if visible.
(when (cdr entry)
(error "Topic not empty"))
;; Delete if visible.
@@
-1536,7
+1524,7
@@
If NON-RECURSIVE (which is the prefix) is t, don't unmark its subtopics."
(read-string (format "Rename %s to: " topic) topic))))
;; Check whether the new name exists.
(when (gnus-topic-find-topology new-name)
(read-string (format "Rename %s to: " topic) topic))))
;; Check whether the new name exists.
(when (gnus-topic-find-topology new-name)
- (error "Topic
'
%s' already exists" new-name))
+ (error "Topic
`
%s' already exists" new-name))
;; "nil" is an invalid name, for reasons I'd rather not go
;; into here. Trust me.
(when (equal new-name "nil")
;; "nil" is an invalid name, for reasons I'd rather not go
;; into here. Trust me.
(when (equal new-name "nil")
@@
-1561,7
+1549,7
@@
If UNINDENT, remove an indentation."
(gnus-topic-unindent)
(let* ((topic (gnus-current-topic))
(parent (gnus-topic-previous-topic topic))
(gnus-topic-unindent)
(let* ((topic (gnus-current-topic))
(parent (gnus-topic-previous-topic topic))
- (
buffer-read-only nil
))
+ (
inhibit-read-only t
))
(unless parent
(error "Nothing to indent %s into" topic))
(when topic
(unless parent
(error "Nothing to indent %s into" topic))
(when topic
@@
-1627,8
+1615,8
@@
If performed on a topic, edit the topic parameters instead."
(let ((topic (gnus-group-topic-name)))
(gnus-edit-form
(gnus-topic-parameters topic)
(let ((topic (gnus-group-topic-name)))
(gnus-edit-form
(gnus-topic-parameters topic)
- (
format
"Editing the topic parameters for `%s'."
- (or group topic))
+ (
gnus-format-message
"Editing the topic parameters for `%s'."
+
(or group topic))
`(lambda (form)
(gnus-topic-set-parameters ,topic form)))))))
`(lambda (form)
(gnus-topic-set-parameters ,topic form)))))))