changeset 72408:7b77bbd3e40c

(compare-windows): Factor compare-ignore-whitespace into ignore-whitespace. Check each buffer for its skip-function. Handle compare-windows-skip-whitespace special-case test by returning t from default skip function.
author Richard M. Stallman <rms@gnu.org>
date Wed, 16 Aug 2006 05:04:16 +0000
parents 4f77449f79f2
children 4130a8f38950
files lisp/compare-w.el
diffstat 1 files changed, 21 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/compare-w.el	Wed Aug 16 04:57:08 2006 +0000
+++ b/lisp/compare-w.el	Wed Aug 16 05:04:16 2006 +0000
@@ -167,16 +167,14 @@
 on second call it synchronizes points by skipping the difference,
 on third call it again advances points to the next difference and so on."
   (interactive "P")
+  (if compare-ignore-whitespace
+      (setq ignore-whitespace (not ignore-whitespace)))
   (let* (p1 p2 maxp1 maxp2 b1 b2 w2
 	    (progress 1)
 	    (opoint1 (point))
 	    opoint2
-	    (skip-func (if (if ignore-whitespace ; XOR
-                               (not compare-ignore-whitespace)
-                             compare-ignore-whitespace)
-                           (if (stringp compare-windows-whitespace)
-                               'compare-windows-skip-whitespace
-                             compare-windows-whitespace)))
+	    skip-func-1
+	    skip-func-2
 	    (sync-func (if (stringp compare-windows-sync)
                            'compare-windows-sync-regexp
                          compare-windows-sync)))
@@ -190,8 +188,19 @@
 	  b2 (window-buffer w2))
     (setq opoint2 p2)
     (setq maxp1 (point-max))
-    (save-excursion
-      (set-buffer b2)
+
+    (setq skip-func-1 (if ignore-whitespace
+			  (if (stringp compare-windows-whitespace)
+			      (lambda () (compare-windows-skip-whitespace)
+				t)
+			    compare-windows-whitespace)))
+
+    (with-current-buffer b2
+      (setq skip-func-2 (if ignore-whitespace
+			    (if (stringp compare-windows-whitespace)
+			      (lambda () (compare-windows-skip-whitespace)
+				t)
+			      compare-windows-whitespace)))
       (push-mark p2 t)
       (setq maxp2 (point-max)))
     (push-mark)
@@ -199,17 +208,16 @@
     (while (> progress 0)
       ;; If both windows have whitespace next to point,
       ;; optionally skip over it.
-      (and skip-func
+      (and skip-func-1
 	   (save-excursion
 	     (let (p1a p2a w1 w2 result1 result2)
-	       (setq result1 (funcall skip-func opoint1))
+	       (setq result1 (funcall skip-func-1 opoint1))
 	       (setq p1a (point))
 	       (set-buffer b2)
 	       (goto-char p2)
-	       (setq result2 (funcall skip-func opoint2))
+	       (setq result2 (funcall skip-func-2 opoint2))
 	       (setq p2a (point))
-	       (if (or (stringp compare-windows-whitespace)
-		       (and result1 result2 (eq result1 result2)))
+	       (if (and result1 result2 (eq result1 result2))
 		   (setq p1 p1a
 			 p2 p2a)))))