[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/gnus/gnus-topic.el [emacs-unicode-2]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/gnus/gnus-topic.el [emacs-unicode-2] |
Date: |
Thu, 09 Sep 2004 06:03:33 -0400 |
Index: emacs/lisp/gnus/gnus-topic.el
diff -c emacs/lisp/gnus/gnus-topic.el:1.11.6.1
emacs/lisp/gnus/gnus-topic.el:1.11.6.2
*** emacs/lisp/gnus/gnus-topic.el:1.11.6.1 Fri Mar 12 00:02:58 2004
--- emacs/lisp/gnus/gnus-topic.el Thu Sep 9 09:36:26 2004
***************
*** 1,5 ****
;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
! ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
;; Free Software Foundation, Inc.
;; Author: Ilja Weis <address@hidden>
--- 1,5 ----
;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
! ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
;; Free Software Foundation, Inc.
;; Author: Ilja Weis <address@hidden>
***************
*** 46,51 ****
--- 46,54 ----
:type 'hook
:group 'gnus-topic)
+ (when (featurep 'xemacs)
+ (add-hook 'gnus-topic-mode-hook 'gnus-xmas-topic-menu-add))
+
(defcustom gnus-topic-line-format "%i[ %(%{%n%}%) -- %A ]%v\n"
"Format of topic lines.
It works along the same lines as a normal formatting string,
***************
*** 57,63 ****
%g Number of groups in the topic.
%a Number of unread articles in the groups in the topic.
%A Number of unread articles in the groups in the topic and its subtopics.
! "
:type 'string
:group 'gnus-topic)
--- 60,69 ----
%g Number of groups in the topic.
%a Number of unread articles in the groups in the topic.
%A Number of unread articles in the groups in the topic and its subtopics.
!
! General format specifiers can also be used.
! See Info node `(gnus)Formatting Variables'."
! :link '(custom-manual "(gnus)Formatting Variables")
:type 'string
:group 'gnus-topic)
***************
*** 161,166 ****
--- 167,173 ----
(mapcar 'list (gnus-topic-list))
nil t)))
(dolist (topic (gnus-current-topics topic))
+ (gnus-topic-goto-topic topic)
(gnus-topic-fold t))
(gnus-topic-goto-topic topic))
***************
*** 196,202 ****
"Return entries for all visible groups in TOPIC.
If RECURSIVE is t, return groups in its subtopics too."
(let ((groups (cdr (assoc topic gnus-topic-alist)))
! info clevel unread group params visible-groups entry active)
(setq lowest (or lowest 1))
(setq level (or level gnus-level-unsubscribed))
;; We go through the newsrc to look for matches.
--- 203,209 ----
"Return entries for all visible groups in TOPIC.
If RECURSIVE is t, return groups in its subtopics too."
(let ((groups (cdr (assoc topic gnus-topic-alist)))
! info clevel unread group params visible-groups entry active)
(setq lowest (or lowest 1))
(setq level (or level gnus-level-unsubscribed))
;; We go through the newsrc to look for matches.
***************
*** 245,250 ****
--- 252,279 ----
(cdr recursive)))
visible-groups))
+ (defun gnus-topic-goto-previous-topic (n)
+ "Go to the N'th previous topic."
+ (interactive "p")
+ (gnus-topic-goto-next-topic (- n)))
+
+ (defun gnus-topic-goto-next-topic (n)
+ "Go to the N'th next topic."
+ (interactive "p")
+ (let ((backward (< n 0))
+ (n (abs n))
+ (topic (gnus-current-topic)))
+ (while (and (> n 0)
+ (setq topic
+ (if backward
+ (gnus-topic-previous-topic topic)
+ (gnus-topic-next-topic topic))))
+ (gnus-topic-goto-topic topic)
+ (setq n (1- n)))
+ (when (/= 0 n)
+ (gnus-message 7 "No more topics"))
+ n))
+
(defun gnus-topic-previous-topic (topic)
"Return the previous topic on the same level as TOPIC."
(let ((top (cddr (gnus-topic-find-topology
***************
*** 351,359 ****
"Compute the group parameters for GROUP taking into account inheritance
from topics."
(let ((params-list (copy-sequence (gnus-group-get-parameter group))))
(save-excursion
- (gnus-group-goto-group group)
(nconc params-list
! (gnus-topic-hierarchical-parameters (gnus-current-topic))))))
(defun gnus-topic-hierarchical-parameters (topic)
"Return a topic list computed for TOPIC."
--- 380,396 ----
"Compute the group parameters for GROUP taking into account inheritance
from topics."
(let ((params-list (copy-sequence (gnus-group-get-parameter group))))
(save-excursion
(nconc params-list
! (gnus-topic-hierarchical-parameters
! ;; First we try to go to the group within the group
! ;; buffer and find the topic for the group that way.
! ;; This hopefully copes well with groups that are in
! ;; more than one topic. Failing that (i.e. when the
! ;; group isn't visible in the group buffer) we find a
! ;; topic for the group via gnus-group-topic.
! (or (and (gnus-group-goto-group group)
! (gnus-current-topic))
! (gnus-group-topic group)))))))
(defun gnus-topic-hierarchical-parameters (topic)
"Return a topic list computed for TOPIC."
***************
*** 384,399 ****
;;; Generating group buffers
! (defun gnus-group-prepare-topics (level &optional all lowest
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 ALL is non-nil, 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)
! (lowest (or lowest 1)))
(when (or (not gnus-topic-alist)
(not gnus-topology-checked-p))
(gnus-topic-check-topology))
--- 421,442 ----
;;; Generating group buffers
! (defun gnus-group-prepare-topics (level &optional predicate lowest
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 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)
! (lowest (or lowest 1))
! (not-in-list
! (and gnus-group-listed-groups
! (copy-sequence gnus-group-listed-groups))))
+ (gnus-update-format-specifications nil 'topic)
+
(when (or (not gnus-topic-alist)
(not gnus-topology-checked-p))
(gnus-topic-check-topology))
***************
*** 402,449 ****
(erase-buffer))
;; List dead groups?
! (when (and (>= level gnus-level-zombie)
! (<= lowest gnus-level-zombie))
(gnus-group-prepare-flat-list-dead
(setq gnus-zombie-list (sort gnus-zombie-list 'string<))
gnus-level-zombie ?Z
regexp))
! (when (and (>= level gnus-level-killed) (<= lowest gnus-level-killed))
(gnus-group-prepare-flat-list-dead
(setq gnus-killed-list (sort gnus-killed-list 'string<))
! gnus-level-killed ?K
! regexp))
;; Use topics.
(prog1
! (when (< lowest gnus-level-zombie)
(if list-topic
(let ((top (gnus-topic-find-topology list-topic)))
(gnus-topic-prepare-topic (cdr top) (car top)
! (or topic-level level) all
! nil lowest))
(gnus-topic-prepare-topic gnus-topic-topology 0
! (or topic-level level) all
! nil lowest)))
!
(gnus-group-set-mode-line)
! (setq gnus-group-list-mode (cons level all))
(gnus-run-hooks 'gnus-group-prepare-hook))))
! (defun gnus-topic-prepare-topic (topicl level &optional list-level all silent
! lowest)
"Insert TOPIC into the group buffer.
If SILENT, don't insert anything. Return the number of unread
articles in the topic and its subtopics."
(let* ((type (pop topicl))
(entries (gnus-topic-find-groups
! (car type) list-level
! (or all
(cdr (assq 'visible
(gnus-topic-hierarchical-parameters
(car type)))))
! lowest))
(visiblep (and (eq (nth 1 type) 'visible) (not silent)))
(gnus-group-indentation
(make-string (* gnus-topic-indent-level level) ? ))
--- 445,507 ----
(erase-buffer))
;; List dead groups?
! (when (or gnus-group-listed-groups
! (and (>= level gnus-level-zombie)
! (<= lowest gnus-level-zombie)))
(gnus-group-prepare-flat-list-dead
(setq gnus-zombie-list (sort gnus-zombie-list 'string<))
gnus-level-zombie ?Z
regexp))
! (when (or gnus-group-listed-groups
! (and (>= level gnus-level-killed)
! (<= lowest gnus-level-killed)))
(gnus-group-prepare-flat-list-dead
(setq gnus-killed-list (sort gnus-killed-list 'string<))
! gnus-level-killed ?K regexp)
! (when not-in-list
! (unless gnus-killed-hashtb
! (gnus-make-hashtable-from-killed))
! (gnus-group-prepare-flat-list-dead
! (gnus-remove-if (lambda (group)
! (or (gnus-gethash group gnus-newsrc-hashtb)
! (gnus-gethash group gnus-killed-hashtb)))
! not-in-list)
! gnus-level-killed ?K regexp)))
;; Use topics.
(prog1
! (when (or (< lowest gnus-level-zombie)
! gnus-group-listed-groups)
(if list-topic
(let ((top (gnus-topic-find-topology list-topic)))
(gnus-topic-prepare-topic (cdr top) (car top)
! (or topic-level level) predicate
! nil lowest regexp))
(gnus-topic-prepare-topic gnus-topic-topology 0
! (or topic-level level) predicate
! nil lowest regexp)))
(gnus-group-set-mode-line)
! (setq gnus-group-list-mode (cons level predicate))
(gnus-run-hooks 'gnus-group-prepare-hook))))
! (defun gnus-topic-prepare-topic (topicl level &optional list-level
! predicate silent
! lowest regexp)
"Insert TOPIC into the group buffer.
If SILENT, don't insert anything. Return the number of unread
articles in the topic and its subtopics."
(let* ((type (pop topicl))
(entries (gnus-topic-find-groups
! (car type)
! (if gnus-group-listed-groups
! gnus-level-killed
! list-level)
! (or predicate gnus-group-listed-groups
(cdr (assq 'visible
(gnus-topic-hierarchical-parameters
(car type)))))
! (if gnus-group-listed-groups 0 lowest)))
(visiblep (and (eq (nth 1 type) 'visible) (not silent)))
(gnus-group-indentation
(make-string (* gnus-topic-indent-level level) ? ))
***************
*** 458,489 ****
(while topicl
(incf unread
(gnus-topic-prepare-topic
! (pop topicl) (1+ level) list-level all
! (not visiblep) lowest)))
(setq end (point))
(goto-char beg)
;; Insert all the groups that belong in this topic.
(while (setq entry (pop entries))
! (when visiblep
! (if (stringp entry)
! ;; Dead groups.
! (gnus-group-insert-group-line
! entry (if (member entry gnus-zombie-list)
! gnus-level-zombie gnus-level-killed)
! nil (- (1+ (cdr (setq active (gnus-active entry))))
! (car active))
! nil)
! ;; Living groups.
! (when (setq info (nth 2 entry))
! (gnus-group-insert-group-line
! (gnus-info-group info)
! (gnus-info-level info) (gnus-info-marks info)
! (car entry) (gnus-info-method info)))))
! (when (and (listp entry)
! (numberp (car entry)))
! (incf unread (car entry)))
! (when (listp entry)
! (setq tick t)))
(goto-char beg)
;; Insert the topic line.
(when (and (not silent)
--- 516,576 ----
(while topicl
(incf unread
(gnus-topic-prepare-topic
! (pop topicl) (1+ level) list-level predicate
! (not visiblep) lowest regexp)))
(setq end (point))
(goto-char beg)
;; Insert all the groups that belong in this topic.
(while (setq entry (pop entries))
! (when (if (stringp entry)
! (gnus-group-prepare-logic
! entry
! (and
! (or (not gnus-group-listed-groups)
! (if (< list-level gnus-level-zombie) nil
! (let ((entry-level
! (if (member entry gnus-zombie-list)
! gnus-level-zombie gnus-level-killed)))
! (and (<= entry-level list-level)
! (>= entry-level lowest)))))
! (cond
! ((stringp regexp)
! (string-match regexp entry))
! ((functionp regexp)
! (funcall regexp entry))
! ((null regexp) t)
! (t nil))))
! (setq info (nth 2 entry))
! (gnus-group-prepare-logic
! (gnus-info-group info)
! (and (or (not gnus-group-listed-groups)
! (let ((entry-level (gnus-info-level info)))
! (and (<= entry-level list-level)
! (>= entry-level lowest))))
! (or (not (functionp predicate))
! (funcall predicate info))
! (or (not (stringp regexp))
! (string-match regexp (gnus-info-group info))))))
! (when visiblep
! (if (stringp entry)
! ;; Dead groups.
! (gnus-group-insert-group-line
! entry (if (member entry gnus-zombie-list)
! gnus-level-zombie gnus-level-killed)
! nil (- (1+ (cdr (setq active (gnus-active entry))))
! (car active))
! nil)
! ;; Living groups.
! (when (setq info (nth 2 entry))
! (gnus-group-insert-group-line
! (gnus-info-group info)
! (gnus-info-level info) (gnus-info-marks info)
! (car entry) (gnus-info-method info)))))
! (when (and (listp entry)
! (numberp (car entry)))
! (incf unread (car entry)))
! (when (listp entry)
! (setq tick t))))
(goto-char beg)
;; Insert the topic line.
(when (and (not silent)
***************
*** 593,599 ****
(when (and (eq major-mode 'gnus-group-mode)
gnus-topic-mode)
(let ((group (gnus-group-group-name))
! (m (point-marker))
(buffer-read-only nil))
(when (and group
(gnus-get-info group)
--- 680,686 ----
(when (and (eq major-mode 'gnus-group-mode)
gnus-topic-mode)
(let ((group (gnus-group-group-name))
! (m (point-marker))
(buffer-read-only nil))
(when (and group
(gnus-get-info group)
***************
*** 611,617 ****
(unfound t)
entry)
;; Try to jump to a visible group.
! (while (and g (not (gnus-group-goto-group (car g) t)))
(pop g))
;; It wasn't visible, so we try to see where to insert it.
(when (not g)
--- 698,705 ----
(unfound t)
entry)
;; Try to jump to a visible group.
! (while (and g
! (not (gnus-group-goto-group (car g) t)))
(pop g))
;; It wasn't visible, so we try to see where to insert it.
(when (not g)
***************
*** 623,642 ****
(when (and unfound
topic
(not (gnus-topic-goto-missing-topic topic)))
! (let* ((top (gnus-topic-find-topology topic))
! (children (cddr top))
! (type (cadr top))
! (unread 0)
! (entries (gnus-topic-find-groups
! (car type) (car gnus-group-list-mode)
! (cdr gnus-group-list-mode))))
! (while children
! (incf unread (gnus-topic-unread (caar (pop children)))))
! (while (setq entry (pop entries))
! (when (numberp (car entry))
! (incf unread (car entry))))
! (gnus-topic-insert-topic-line
! topic t t (car (gnus-topic-find-topology topic)) nil unread))))))
(defun gnus-topic-goto-missing-topic (topic)
(if (gnus-topic-goto-topic topic)
--- 711,741 ----
(when (and unfound
topic
(not (gnus-topic-goto-missing-topic topic)))
! (gnus-topic-display-missing-topic topic)))))
!
! (defun gnus-topic-display-missing-topic (topic)
! "Insert topic lines recursively for missing topics."
! (let ((parent (gnus-topic-find-topology
! (gnus-topic-parent-topic topic))))
! (when (and parent
! (not (gnus-topic-goto-missing-topic (caadr parent))))
! (gnus-topic-display-missing-topic (caadr parent))))
! (gnus-topic-goto-missing-topic topic)
! (let* ((top (gnus-topic-find-topology topic))
! (children (cddr top))
! (type (cadr top))
! (unread 0)
! (entries (gnus-topic-find-groups
! (car type) (car gnus-group-list-mode)
! (cdr gnus-group-list-mode)))
! entry)
! (while children
! (incf unread (gnus-topic-unread (caar (pop children)))))
! (while (setq entry (pop entries))
! (when (numberp (car entry))
! (incf unread (car entry))))
! (gnus-topic-insert-topic-line
! topic t t (car (gnus-topic-find-topology topic)) nil unread)))
(defun gnus-topic-goto-missing-topic (topic)
(if (gnus-topic-goto-topic topic)
***************
*** 830,837 ****
? ))
(yanked (list group))
alist talist end)
! ;; Then we enter the yanked groups into the topics they belong
! ;; to.
(when (setq alist (assoc (save-excursion
(forward-line -1)
(or
--- 929,936 ----
? ))
(yanked (list group))
alist talist end)
! ;; Then we enter the yanked groups into the topics
! ;; they belong to.
(when (setq alist (assoc (save-excursion
(forward-line -1)
(or
***************
*** 949,954 ****
--- 1048,1054 ----
"\r" gnus-topic-select-group
" " gnus-topic-read-group
"\C-c\C-x" gnus-topic-expire-articles
+ "c" gnus-topic-catchup-articles
"\C-k" gnus-topic-kill-group
"\C-y" gnus-topic-yank-group
"\M-g" gnus-topic-get-new-news-this-topic
***************
*** 975,980 ****
--- 1075,1082 ----
"j" gnus-topic-jump-to-topic
"M" gnus-topic-move-matching
"C" gnus-topic-copy-matching
+ "\M-p" gnus-topic-goto-previous-topic
+ "\M-n" gnus-topic-goto-next-topic
"\C-i" gnus-topic-indent
[tab] gnus-topic-indent
"r" gnus-topic-rename
***************
*** 987,992 ****
--- 1089,1095 ----
"a" gnus-topic-sort-groups-by-alphabet
"u" gnus-topic-sort-groups-by-unread
"l" gnus-topic-sort-groups-by-level
+ "e" gnus-topic-sort-groups-by-server
"v" gnus-topic-sort-groups-by-score
"r" gnus-topic-sort-groups-by-rank
"m" gnus-topic-sort-groups-by-method))
***************
*** 998,1018 ****
'("Topics"
["Toggle topics" gnus-topic-mode t]
("Groups"
! ["Copy" gnus-topic-copy-group t]
! ["Move" gnus-topic-move-group t]
["Remove" gnus-topic-remove-group t]
! ["Copy matching" gnus-topic-copy-matching t]
! ["Move matching" gnus-topic-move-matching t])
("Topics"
! ["Goto" gnus-topic-jump-to-topic t]
["Show" gnus-topic-show-topic t]
["Hide" gnus-topic-hide-topic t]
["Delete" gnus-topic-delete t]
! ["Rename" gnus-topic-rename t]
! ["Create" gnus-topic-create-topic t]
["Mark" gnus-topic-mark-topic t]
["Indent" gnus-topic-indent t]
["Sort" gnus-topic-sort-topics t]
["Toggle hide empty" gnus-topic-toggle-display-empty-topics t]
["Edit parameters" gnus-topic-edit-parameters t])
["List active" gnus-topic-list-active t]))))
--- 1101,1123 ----
'("Topics"
["Toggle topics" gnus-topic-mode t]
("Groups"
! ["Copy..." gnus-topic-copy-group t]
! ["Move..." gnus-topic-move-group t]
["Remove" gnus-topic-remove-group t]
! ["Copy matching..." gnus-topic-copy-matching t]
! ["Move matching..." gnus-topic-move-matching t])
("Topics"
! ["Goto..." gnus-topic-jump-to-topic t]
["Show" gnus-topic-show-topic t]
["Hide" gnus-topic-hide-topic t]
["Delete" gnus-topic-delete t]
! ["Rename..." gnus-topic-rename t]
! ["Create..." gnus-topic-create-topic t]
["Mark" gnus-topic-mark-topic t]
["Indent" gnus-topic-indent t]
["Sort" gnus-topic-sort-topics t]
+ ["Previous topic" gnus-topic-goto-previous-topic t]
+ ["Next topic" gnus-topic-goto-next-topic t]
["Toggle hide empty" gnus-topic-toggle-display-empty-topics t]
["Edit parameters" gnus-topic-edit-parameters t])
["List active" gnus-topic-list-active t]))))
***************
*** 1027,1033 ****
(> (prefix-numeric-value arg) 0)))
;; 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)
--- 1132,1138 ----
(> (prefix-numeric-value arg) 0)))
;; 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)
***************
*** 1050,1057 ****
'gnus-group-sort-topic)
(setq gnus-group-change-level-function 'gnus-topic-change-level)
(setq gnus-goto-missing-group-function 'gnus-topic-goto-missing-group)
! (make-local-hook 'gnus-check-bogus-groups-hook)
! (add-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist)
(setq gnus-topology-checked-p nil)
;; We check the topology.
(when gnus-newsrc-alist
--- 1155,1163 ----
'gnus-group-sort-topic)
(setq gnus-group-change-level-function 'gnus-topic-change-level)
(setq gnus-goto-missing-group-function 'gnus-topic-goto-missing-group)
! (gnus-make-local-hook 'gnus-check-bogus-groups-hook)
! (add-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist
! nil 'local)
(setq gnus-topology-checked-p nil)
;; We check the topology.
(when gnus-newsrc-alist
***************
*** 1070,1080 ****
--- 1176,1189 ----
(defun gnus-topic-select-group (&optional all)
"Select this newsgroup.
No article is selected automatically.
+ If the group is opened, just switch the summary buffer.
If ALL is non-nil, already read articles become readable.
If ALL is a number, fetch this number of articles.
If performed over a topic line, toggle folding the topic."
(interactive "P")
+ (when (and (eobp) (not (gnus-group-group-name)))
+ (forward-line -1))
(if (gnus-group-topic-p)
(let ((gnus-group-list-mode
(if all (cons (if (numberp all) all 7) t) gnus-group-list-mode)))
***************
*** 1097,1106 ****
(gnus-message 5 "Expiring groups in %s..." topic)
(let ((gnus-group-marked
(mapcar (lambda (entry) (car (nth 2 entry)))
! (gnus-topic-find-groups topic gnus-level-killed t))))
(gnus-group-expire-articles nil))
(gnus-message 5 "Expiring groups in %s...done" topic))))
(defun gnus-topic-read-group (&optional all no-article group)
"Read news in this newsgroup.
If the prefix argument ALL is non-nil, already read articles become
--- 1206,1232 ----
(gnus-message 5 "Expiring groups in %s..." topic)
(let ((gnus-group-marked
(mapcar (lambda (entry) (car (nth 2 entry)))
! (gnus-topic-find-groups topic gnus-level-killed t
! nil t))))
(gnus-group-expire-articles nil))
(gnus-message 5 "Expiring groups in %s...done" topic))))
+ (defun gnus-topic-catchup-articles (topic)
+ "Catchup this topic or group.
+ Also see `gnus-group-catchup'."
+ (interactive (list (gnus-group-topic-name)))
+ (if (not topic)
+ (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)
+ (gnus-group-marked groups))
+ (gnus-group-catchup-current)
+ (mapcar 'gnus-topic-update-topics-containing-group groups)))))
+
(defun gnus-topic-read-group (&optional all no-article group)
"Read news in this newsgroup.
If the prefix argument ALL is non-nil, already read articles become
***************
*** 1157,1163 ****
If COPYP, copy the groups instead."
(interactive
(list current-prefix-arg
! (completing-read "Move to topic: " gnus-topic-alist nil t)))
(let ((use-marked (and (not n) (not (gnus-region-active-p))
gnus-group-marked t))
(groups (gnus-group-process-prefix n))
--- 1283,1290 ----
If COPYP, copy the groups instead."
(interactive
(list current-prefix-arg
! (gnus-completing-read "Move to topic" gnus-topic-alist nil t
! 'gnus-topic-history)))
(let ((use-marked (and (not n) (not (gnus-region-active-p))
gnus-group-marked t))
(groups (gnus-group-process-prefix n))
***************
*** 1303,1311 ****
(setcar (cdr (cadr topic)) 'visible)
(gnus-group-list-groups)))))
! (defun gnus-topic-mark-topic (topic &optional unmark recursive)
"Mark all groups in the TOPIC with the process mark.
! If RECURSIVE is t, mark its subtopics too."
(interactive (list (gnus-group-topic-name)
nil
(and current-prefix-arg t)))
--- 1430,1438 ----
(setcar (cdr (cadr topic)) 'visible)
(gnus-group-list-groups)))))
! (defun gnus-topic-mark-topic (topic &optional unmark non-recursive)
"Mark all groups in the TOPIC with the process mark.
! If NON-RECURSIVE (which is the prefix) is t, don't mark its subtopics."
(interactive (list (gnus-group-topic-name)
nil
(and current-prefix-arg t)))
***************
*** 1313,1340 ****
(call-interactively 'gnus-group-mark-group)
(save-excursion
(let ((groups (gnus-topic-find-groups topic gnus-level-killed t nil
! recursive)))
(while 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 recursive)
"Remove the process mark from all groups in the TOPIC.
! If RECURSIVE is t, unmark its subtopics too."
(interactive (list (gnus-group-topic-name)
nil
(and current-prefix-arg t)))
(if (not topic)
(call-interactively 'gnus-group-unmark-group)
! (gnus-topic-mark-topic topic t recursive)))
(defun gnus-topic-get-new-news-this-topic (&optional n)
"Check for new news in the current topic."
(interactive "P")
(if (not (gnus-group-topic-p))
(gnus-group-get-new-news-this-group n)
! (gnus-topic-mark-topic (gnus-group-topic-name) nil (and n t))
! (gnus-group-get-new-news-this-group)))
(defun gnus-topic-move-matching (regexp topic &optional copyp)
"Move all groups that match REGEXP to some topic."
--- 1440,1471 ----
(call-interactively 'gnus-group-mark-group)
(save-excursion
(let ((groups (gnus-topic-find-groups topic gnus-level-killed t nil
! (not non-recursive))))
(while 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)
"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)
nil
(and current-prefix-arg t)))
(if (not topic)
(call-interactively 'gnus-group-unmark-group)
! (gnus-topic-mark-topic topic t non-recursive)))
(defun gnus-topic-get-new-news-this-topic (&optional n)
"Check for new news in the current topic."
(interactive "P")
(if (not (gnus-group-topic-p))
(gnus-group-get-new-news-this-group n)
! (let* ((topic (gnus-group-topic-name))
! (data (cadr (gnus-topic-find-topology topic))))
! (save-excursion
! (gnus-topic-mark-topic topic nil (and n t))
! (gnus-group-get-new-news-this-group))
! (gnus-topic-remove-topic (eq 'visible (cadr data))))))
(defun gnus-topic-move-matching (regexp topic &optional copyp)
"Move all groups that match REGEXP to some topic."
***************
*** 1380,1386 ****
(interactive
(let ((topic (gnus-current-topic)))
(list topic
! (read-string (format "Rename %s to: " topic)))))
;; Check whether the new name exists.
(when (gnus-topic-find-topology new-name)
(error "Topic '%s' already exists" new-name))
--- 1511,1517 ----
(interactive
(let ((topic (gnus-current-topic)))
(list topic
! (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))
***************
*** 1552,1565 ****
(interactive "P")
(gnus-topic-sort-groups 'gnus-group-sort-by-method reverse))
(defun gnus-topic-sort-topics-1 (top reverse)
(if (cdr top)
(let ((subtop
! (mapcar `(lambda (top)
! (gnus-topic-sort-topics-1 top ,reverse))
(sort (cdr top)
! '(lambda (t1 t2)
! (string-lessp (caar t1) (caar t2)))))))
(setcdr top (if reverse (reverse subtop) subtop))))
top)
--- 1683,1703 ----
(interactive "P")
(gnus-topic-sort-groups 'gnus-group-sort-by-method reverse))
+ (defun gnus-topic-sort-groups-by-server (&optional reverse)
+ "Sort the current topic alphabetically by server name.
+ If REVERSE, sort in reverse order."
+ (interactive "P")
+ (gnus-topic-sort-groups 'gnus-group-sort-by-server reverse))
+
(defun gnus-topic-sort-topics-1 (top reverse)
(if (cdr top)
(let ((subtop
! (mapcar (gnus-byte-compile
! `(lambda (top)
! (gnus-topic-sort-topics-1 top ,reverse)))
(sort (cdr top)
! (lambda (t1 t2)
! (string-lessp (caar t1) (caar t2)))))))
(setcdr top (if reverse (reverse subtop) subtop))))
top)
***************
*** 1612,1618 ****
(gnus-subscribe-alphabetically newsgroup)
;; Add the group to the topic.
(nconc (assoc topic gnus-topic-alist) (list newsgroup))
! (throw 'end t))))))
(provide 'gnus-topic)
--- 1750,1763 ----
(gnus-subscribe-alphabetically newsgroup)
;; Add the group to the topic.
(nconc (assoc topic gnus-topic-alist) (list newsgroup))
! ;; if this topic specifies a default level, use it
! (let ((subscribe-level (cdr (assq 'subscribe-level
! (gnus-topic-parameters topic)))))
! (when subscribe-level
! (gnus-group-change-level newsgroup subscribe-level
! gnus-level-default-subscribed)))
! (throw 'end t)))
! nil)))
(provide 'gnus-topic)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/gnus/gnus-topic.el [emacs-unicode-2],
Miles Bader <=