--- gnus-sum.el.~6.233.~ 2002-11-18 06:06:19.000000000 +1000 +++ gnus-sum.el 2002-11-18 08:18:14.000000000 +1000 @@ -6151,13 +6151,28 @@ (> (prefix-numeric-value arg) 0))) (redraw-display)) +(defun gnus-summary-find-uncancelled () + "Return the number of an uncancelled article. +The current article is considered, then following articles, then previous +articles. If all articles are cancelled then return a dummy 0." + (let (found) + (dolist (rev '(nil t)) + (unless found ; don't demand the reverse list if we don't need it + (let ((data (gnus-data-find-list + (gnus-summary-article-number) (gnus-data-list rev)))) + (while (and data (not found)) + (if (not (eq gnus-canceled-mark (gnus-data-mark (car data)))) + (setq found (gnus-data-number (car data)))) + (setq data (cdr data)))))) + (or found 0))) + (defun gnus-summary-reselect-current-group (&optional all rescan) "Exit and then reselect the current newsgroup. The prefix argument ALL means to select all articles." (interactive "P") (when (gnus-ephemeral-group-p gnus-newsgroup-name) (error "Ephemeral groups can't be reselected")) - (let ((current-subject (gnus-summary-article-number)) + (let ((current-subject (gnus-summary-find-uncancelled)) (group gnus-newsgroup-name)) (setq gnus-newsgroup-begin nil) (gnus-summary-exit)