# HG changeset patch # User Katsumi Yamaoka # Date 1282873981 0 # Node ID 6c405a2a9f8ebffb8a4a0d2a88c437916fdd6fe7 # Parent 670be26d955da87e6720c1de6a8f7462d8dabf5f gnus-summary-(move,delete)-article: Save excursion while copying, moving, and deleting articles in order to prevent the cursor from jumping to unforeseen place. diff -r 670be26d955d -r 6c405a2a9f8e lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Thu Aug 26 22:46:08 2010 +0000 +++ b/lisp/gnus/ChangeLog Fri Aug 27 01:53:01 2010 +0000 @@ -1,3 +1,9 @@ +2010-08-27 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-move-article, gnus-summary-delete-article): + Save excursion while copying, moving, and deleting articles in order to + prevent the cursor from jumping to unforeseen place. + 2010-08-17 Glenn Morris * gnus-sync.el: Require gnus components whose functions are used. diff -r 670be26d955d -r 6c405a2a9f8e lisp/gnus/gnus-sum.el --- a/lisp/gnus/gnus-sum.el Thu Aug 26 22:46:08 2010 +0000 +++ b/lisp/gnus/gnus-sum.el Fri Aug 27 01:53:01 2010 +0000 @@ -9848,12 +9848,14 @@ ;;;!!!Why is this necessary? (set-buffer gnus-summary-buffer) - (gnus-summary-goto-subject article) (when (eq action 'move) - (gnus-summary-mark-article article gnus-canceled-mark)))) + (save-excursion + (gnus-summary-goto-subject article) + (gnus-summary-mark-article article gnus-canceled-mark))))) (push article articles-to-update-marks)) - (apply 'gnus-summary-remove-process-mark articles-to-update-marks) + (save-excursion + (apply 'gnus-summary-remove-process-mark articles-to-update-marks)) ;; Re-activate all groups that have been moved to. (with-current-buffer gnus-group-buffer (let ((gnus-group-marked to-groups)) @@ -10109,19 +10111,20 @@ ;; Delete the articles. (setq not-deleted (gnus-request-expire-articles articles gnus-newsgroup-name 'force)) - (while articles - (gnus-summary-remove-process-mark (car articles)) - ;; The backend might not have been able to delete the article - ;; after all. - (unless (memq (car articles) not-deleted) - (gnus-summary-mark-article (car articles) gnus-canceled-mark)) - (let* ((article (car articles)) - (ghead (gnus-data-header - (assoc article (gnus-data-list nil))))) - (run-hook-with-args 'gnus-summary-article-delete-hook - 'delete ghead gnus-newsgroup-name nil - nil)) - (setq articles (cdr articles))) + (save-excursion + (while articles + (gnus-summary-remove-process-mark (car articles)) + ;; The backend might not have been able to delete the article + ;; after all. + (unless (memq (car articles) not-deleted) + (gnus-summary-mark-article (car articles) gnus-canceled-mark)) + (let* ((article (car articles)) + (ghead (gnus-data-header + (assoc article (gnus-data-list nil))))) + (run-hook-with-args 'gnus-summary-article-delete-hook + 'delete ghead gnus-newsgroup-name nil + nil)) + (setq articles (cdr articles)))) (when not-deleted (gnus-message 4 "Couldn't delete articles %s" not-deleted))) (gnus-summary-position-point)