Changes committed gnus/lisp (ChangeLog gnus-sum.el)

"Reiner Steib" <[email protected]> Wed, 14 Oct 2009 21:00:33 +0200
Newsgroups gmane.emacs.gnus.commits
Message-ID <[email protected]>
Modified: ChangeLog gnus-sum.el

2009-10-14  Reiner Steib  <[email protected]>

	* gnus-sum.el (gnus-remove-overlays): Add doc string and alias.

2009-10-14  Dan Nicolaescu  <[email protected]>

	* gnus-sum.el (gnus-remove-overlays): Compatibility code for Emacs 21
	and XEmacs that don't have `remove-overlays'.

2009-10-14  Stefan Monnier  <[email protected]>

	* 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.


Index: ChangeLog
diff -u gnus/lisp/ChangeLog:7.2027 gnus/lisp/ChangeLog:7.2028
--- ChangeLog:7.2027	Tue Oct  6 02:27:02 2009
+++ ChangeLog	Wed Oct 14 21:00:32 2009
@@ -1,3 +1,18 @@
+2009-10-14  Reiner Steib  <[email protected]>
+
+	* gnus-sum.el (gnus-remove-overlays): Add doc string and alias.
+
+2009-10-14  Dan Nicolaescu  <[email protected]>
+
+	* gnus-sum.el (gnus-remove-overlays): Compatibility code for Emacs 21
+	and XEmacs that don't have `remove-overlays'.
+
+2009-10-14  Stefan Monnier  <[email protected]>
+
+	* 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  <[email protected]>
 
 	* spam-stat.el (spam-stat-strip-xref): Fix typo in docstring.
Index: gnus-sum.el
diff -u gnus/lisp/gnus-sum.el:7.240 gnus/lisp/gnus-sum.el:7.241
--- gnus-sum.el:7.240	Wed Sep  9 11:31:35 2009
+++ gnus-sum.el	Wed Oct 14 21:00:32 2009
@@ -3069,8 +3069,7 @@
   (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,37 @@
     (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 (overlays-in beg end))
+      (when (overlay-get ov val)
+	(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))
+  (let* ((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)
+         (beg (progn (beginning-of-line) (if (bobp) (point) (1- (point)))))
+         (eoi (when (eq (get-char-property end 'invisible) 'gnus-sum)
+                (or (next-single-char-property-change end 'invisible)
+                    (point-max)))))
+    (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 +11356,26 @@
 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)
+               ;; FIXME: this should actually search for a non-invisible \n.
 		   (search-backward "\n" start t))
 	      (progn
-		(subst-char-in-region start (point) ?\n ?\^M)
+            (when (> (point) starteol)
+              (gnus-remove-overlays starteol (point) 'invisible 'gnus-sum)
+              (let ((ol (make-overlay starteol (point) nil t nil)))
+                (overlay-put ol 'invisible 'gnus-sum)
+                (overlay-put ol 'evaporate t)))
 		(gnus-summary-goto-subject article))
 	    (goto-char start)
-	    nil)))))
+        nil))))
 
 (defun gnus-summary-go-to-next-thread (&optional previous)
   "Go to the same level (or less) next thread.