From 9bfd9a76b69f3c037506e8a300a28524705be05d Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Mon, 19 Oct 2009 23:21:04 +0000 Subject: [PATCH] Synch with Gnus trunk: 2009-10-19 Katsumi Yamaoka * gnus-sum.el (gnus-summary-show-thread): Remove useless goto-char. (gnus-summary-show-thread, gnus-summary-hide-thread): Indent. 2009-10-16 Katsumi Yamaoka * gnus.el (gnus-overlay-get): New alias to overlay-get. (gnus-overlays-in): New alias to overlays-in. * gnus-sum.el (gnus-remove-overlays): Use gnus-overlays-in, gnus-overlay-get, and gnus-delete-overlay. (gnus-summary-show-thread): Make it work as well for systems in which next-single-char-property-change is not available. (gnus-summary-hide-thread): Use gnus-make-overlay and gnus-overlay-put. 2009-10-14 Reiner Steib * gnus-sum.el (gnus-remove-overlays): Add doc string and alias. 2009-10-14 Dan Nicolaescu * gnus-sum.el (gnus-remove-overlays): Compatibility code for Emacs 21 and XEmacs that don't have `remove-overlays'. 2009-10-14 Stefan Monnier * gnus-sum.el (gnus-summary-mode, gnus-summary-show-all-threads) (gnus-summary-show-thread, gnus-summary-hide-thread): Get rid of selective display. Use overlays instead. --- lisp/gnus/ChangeLog | 31 ++++++++++++++++++++ lisp/gnus/gnus-sum.el | 68 +++++++++++++++++++++++++++---------------- lisp/gnus/gnus.el | 2 ++ 3 files changed, 76 insertions(+), 25 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 5cbf88ba51b..b98b9c99540 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,34 @@ +2009-10-19 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-show-thread): Remove useless goto-char. + (gnus-summary-show-thread, gnus-summary-hide-thread): Indent. + +2009-10-16 Katsumi Yamaoka + + * gnus.el (gnus-overlay-get): New alias to overlay-get. + (gnus-overlays-in): New alias to overlays-in. + + * gnus-sum.el (gnus-remove-overlays): Use gnus-overlays-in, + gnus-overlay-get, and gnus-delete-overlay. + (gnus-summary-show-thread): Make it work as well for systems in which + next-single-char-property-change is not available. + (gnus-summary-hide-thread): Use gnus-make-overlay and gnus-overlay-put. + +2009-10-14 Reiner Steib + + * gnus-sum.el (gnus-remove-overlays): Add doc string and alias. + +2009-10-14 Dan Nicolaescu + + * gnus-sum.el (gnus-remove-overlays): Compatibility code for Emacs 21 + and XEmacs that don't have `remove-overlays'. + +2009-10-14 Stefan Monnier + + * gnus-sum.el (gnus-summary-mode, gnus-summary-show-all-threads) + (gnus-summary-show-thread, gnus-summary-hide-thread): Get rid of + selective display. Use overlays instead. + 2009-10-04 Juanma Barranquero * spam-stat.el (spam-stat-strip-xref): Fix typo in docstring. diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index b1fa5254bdc..fb80d605308 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -3069,8 +3069,7 @@ The following commands are available: (setq buffer-read-only t ;Disable modification show-trailing-whitespace nil) (setq truncate-lines t) - (setq selective-display t) - (setq selective-display-ellipses t) ;Display `...' + (add-to-invisibility-spec '(gnus-sum . t)) (gnus-summary-set-display-table) (gnus-set-default-directory) (make-local-variable 'gnus-summary-line-format) @@ -11278,29 +11277,44 @@ If ARG is positive number, turn showing conversation threads on." (gnus-message 6 "Threading is now %s" (if gnus-show-threads "on" "off")) (gnus-summary-position-point))) +(if (fboundp 'remove-overlays) + (defalias 'gnus-remove-overlays 'remove-overlays) + (defun gnus-remove-overlays (beg end name val) + "Clear BEG and END of overlays whose property NAME has value VAL. +For compatibility with Emacs 21 and XEmacs." + (dolist (ov (gnus-overlays-in beg end)) + (when (eq (gnus-overlay-get ov name) val) + (gnus-delete-overlay ov))))) + (defun gnus-summary-show-all-threads () "Show all threads." (interactive) - (save-excursion - (let ((buffer-read-only nil)) - (subst-char-in-region (point-min) (point-max) ?\^M ?\n t))) + (gnus-remove-overlays (point-min) (point-max) 'invisible 'gnus-sum) (gnus-summary-position-point)) (defun gnus-summary-show-thread () "Show thread subtrees. Returns nil if no thread was there to be shown." (interactive) - (let ((buffer-read-only nil) - (orig (point)) - (end (point-at-eol)) - ;; Leave point at bol - (beg (progn (beginning-of-line) (point)))) - (prog1 - ;; Any hidden lines here? - (search-forward "\r" end t) - (subst-char-in-region beg end ?\^M ?\n t) + (let* ((orig (point)) + (end (point-at-eol)) + ;; Leave point at bol + (beg (progn (beginning-of-line) (if (bobp) (point) (1- (point))))) + (eoi (when (eq (get-char-property end 'invisible) 'gnus-sum) + (if (fboundp 'next-single-char-property-change) + (or (next-single-char-property-change end 'invisible) + (point-max)) + (while (progn + (end-of-line 2) + (and (not (eobp)) + (eq (get-char-property (point) 'invisible) + 'gnus-sum)))) + (point))))) + (when eoi + (gnus-remove-overlays beg eoi 'invisible 'gnus-sum) (goto-char orig) - (gnus-summary-position-point)))) + (gnus-summary-position-point) + eoi))) (defun gnus-summary-maybe-hide-threads () "If requested, hide the threads that should be hidden." @@ -11349,22 +11363,26 @@ If PREDICATE is supplied, threads that satisfy this predicate will not be hidden. Returns nil if no threads were there to be hidden." (interactive) - (let ((buffer-read-only nil) - (start (point)) + (let ((start (point)) + (starteol (line-end-position)) (article (gnus-summary-article-number))) (goto-char start) ;; Go forward until either the buffer ends or the subthread ends. (when (and (not (eobp)) (or (zerop (gnus-summary-next-thread 1 t)) (goto-char (point-max)))) - (prog1 - (if (and (> (point) start) - (search-backward "\n" start t)) - (progn - (subst-char-in-region start (point) ?\n ?\^M) - (gnus-summary-goto-subject article)) - (goto-char start) - nil))))) + (if (and (> (point) start) + ;; FIXME: this should actually search for a non-invisible \n. + (search-backward "\n" start t)) + (progn + (when (> (point) starteol) + (gnus-remove-overlays starteol (point) 'invisible 'gnus-sum) + (let ((ol (gnus-make-overlay starteol (point) nil t nil))) + (gnus-overlay-put ol 'invisible 'gnus-sum) + (gnus-overlay-put ol 'evaporate t))) + (gnus-summary-goto-subject article)) + (goto-char start) + nil)))) (defun gnus-summary-go-to-next-thread (&optional previous) "Go to the same level (or less) next thread. diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 85baa71f2a3..ef77e595890 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -318,11 +318,13 @@ be set in `.emacs' instead." (unless (featurep 'gnus-xmas) (defalias 'gnus-make-overlay 'make-overlay) (defalias 'gnus-delete-overlay 'delete-overlay) + (defalias 'gnus-overlay-get 'overlay-get) (defalias 'gnus-overlay-put 'overlay-put) (defalias 'gnus-move-overlay 'move-overlay) (defalias 'gnus-overlay-buffer 'overlay-buffer) (defalias 'gnus-overlay-start 'overlay-start) (defalias 'gnus-overlay-end 'overlay-end) + (defalias 'gnus-overlays-in 'overlays-in) (defalias 'gnus-extent-detached-p 'ignore) (defalias 'gnus-extent-start-open 'ignore) (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names) -- 2.39.5