From 79aee8b798c9b51e7de6b7385e7843dc8d2a455c Mon Sep 17 00:00:00 2001
From: Chris Hanson <org/chris-hanson/cph>
Date: Thu, 8 Sep 1994 01:28:53 +0000
Subject: [PATCH] Guarantee that buffer-local variables are cached in the
 window before any redisplay can happen.

---
 v7/src/edwin/bufwin.scm | 21 +++++++++++++++------
 v7/src/edwin/bufwiu.scm |  7 +++----
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/v7/src/edwin/bufwin.scm b/v7/src/edwin/bufwin.scm
index a6849e78d..ffa6a0534 100644
--- a/v7/src/edwin/bufwin.scm
+++ b/v7/src/edwin/bufwin.scm
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;	$Id: bufwin.scm,v 1.301 1993/08/18 23:57:38 cph Exp $
+;;;	$Id: bufwin.scm,v 1.302 1994/09/08 01:28:47 cph Exp $
 ;;;
 ;;;	Copyright (c) 1986, 1989-93 Massachusetts Institute of Technology
 ;;;
@@ -829,16 +829,25 @@
 			      (group-modified-tick (%window-group window))))
 
 (define (%recache-window-buffer-local-variables! window)
-  (let ((buffer (%window-buffer window)))
-    (%set-window-truncate-lines?!
-     window
+  (let ((maybe-recache
+	 (lambda (read write value)
+	   (let ((value* (read window)))
+	     (if (not (eqv? value value*))
+		 (begin
+		   (%set-window-force-redraw?! window #t)
+		   (write window value))))))
+	(buffer (%window-buffer window)))
+    (maybe-recache
+     %window-truncate-lines?
+     %set-window-truncate-lines?!
      (or (variable-local-value buffer (ref-variable-object truncate-lines))
 	 (and (variable-local-value
 	       buffer
 	       (ref-variable-object truncate-partial-width-windows))
 	      (window-has-horizontal-neighbor? (window-superior window)))))
-    (%set-window-tab-width!
-     window
+    (maybe-recache
+     %window-tab-width
+     %set-window-tab-width!
      (variable-local-value buffer (ref-variable-object tab-width)))))
 
 ;;;; Buffer and Point
diff --git a/v7/src/edwin/bufwiu.scm b/v7/src/edwin/bufwiu.scm
index 75ee6ee19..9200ede91 100644
--- a/v7/src/edwin/bufwiu.scm
+++ b/v7/src/edwin/bufwiu.scm
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;	$Id: bufwiu.scm,v 1.27 1994/08/25 00:59:18 cph Exp $
+;;;	$Id: bufwiu.scm,v 1.28 1994/09/08 01:28:53 cph Exp $
 ;;;
 ;;;	Copyright (c) 1986, 1989-94 Massachusetts Institute of Technology
 ;;;
@@ -139,12 +139,11 @@
 
 (define (update-outlines! window)
   (%guarantee-start-mark! window)
+  ;; This procedure sets FORCE-REDRAW? if any cached variable has changed.
+  (%recache-window-buffer-local-variables! window)
   (if (%window-force-redraw? window)
       (begin
 	(%set-window-force-redraw?! window false)
-	;; When one of the cached buffer-local variables is set, it
-	;; sets the FORCE-REDRAW bit so that this code will run.
-	(%recache-window-buffer-local-variables! window)
 	(preserve-nothing! window))
       (let ((start (%window-current-start-index window))
 	    (end (%window-current-end-index window)))
-- 
2.25.1