Change screen, window, and buffer selection to make it hard to select
authorChris Hanson <org/chris-hanson/cph>
Tue, 11 Feb 1992 19:01:23 +0000 (19:01 +0000)
committerChris Hanson <org/chris-hanson/cph>
Tue, 11 Feb 1992 19:01:23 +0000 (19:01 +0000)
something on a screen that isn't visible.

v7/src/edwin/curren.scm
v7/src/edwin/wincom.scm
v7/src/edwin/xterm.scm

index 5e4c7d38ad0afde21842935650ec1839e855d3f3..7702ea9f6aa878ddd98c274b8acfc39467a0ca73 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/curren.scm,v 1.95 1992/02/08 15:23:26 cph Exp $
+;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/curren.scm,v 1.96 1992/02/11 19:01:11 cph Exp $
 ;;;
 ;;;    Copyright (c) 1986, 1989-92 Massachusetts Institute of Technology
 ;;;
   (without-interrupts
    (lambda ()
      (if (selected-screen? screen)
-        (let ((screen* (other-screen screen)))
-          (if (not screen*)
-              (error "can't delete only screen" screen))
-          (select-screen screen*)))
+        (select-screen
+         (or (other-screen screen false)
+             (other-screen screen true)
+             (error "Can't delete only screen:" screen))))
      (screen-discard! screen)
      (set-editor-screens! current-editor
                          (delq! screen
        (else
         screen)))
 
-(define (other-screen screen)
-  (let ((screen*
-        (let loop ((screen* screen))
-          (let ((screen* (screen1+ screen*)))
-            (cond ((eq? screen* screen)
-                   (screen1+ screen*))
-                  ((screen-visible? screen*)
-                   screen*)
-                  (else
-                   (loop screen*)))))))
-    (and (not (eq? screen screen*))
-        screen*)))
+(define (other-screen screen invisible-ok?)
+  (let loop ((screen* screen))
+    (let ((screen* (screen1+ screen*)))
+      (cond ((eq? screen* screen)
+            false)
+           ((or invisible-ok? (screen-visible? screen*))
+            screen*)
+           (else
+            (loop screen*))))))
 \f
 ;;;; Windows
 
   (screen-select-cursor! (window-screen window) window))
 
 (define (window-visible? window)
+  (and (window-live? window)
+       (screen-visible? (window-screen window))))
+
+(define (window-live? window)
   (or (typein-window? window)
       (let ((window0 (window0)))
        (let loop ((window* (window1+ window0)))
index c0daee2ce0b9319e39c90182117a85720fe1a793..31dec81c3c77af320b6c91915973e330a02b8ff6 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/wincom.scm,v 1.109 1992/02/04 04:04:41 cph Exp $
+;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/wincom.scm,v 1.110 1992/02/11 19:01:15 cph Exp $
 ;;;
 ;;;    Copyright (c) 1987, 1989-92 Massachusetts Institute of Technology
 ;;;
@@ -336,7 +336,7 @@ ARG lines.  No arg means split equally."
     (let ((window (current-window)))
       (if (and (window-has-no-neighbors? window)
               (use-multiple-screens?)
-              (other-screen (selected-screen)))
+              (other-screen (selected-screen) false))
          (delete-screen! (selected-screen))
          (window-delete! window)))))
 
@@ -357,7 +357,7 @@ ARG lines.  No arg means split equally."
         (let ((window (other-window n)))
           (if (current-window? window)
               (and (use-multiple-screens?)
-                   (let ((screen (other-screen (selected-screen))))
+                   (let ((screen (other-screen (selected-screen) false)))
                      (and screen
                           (screen-selected-window screen))))
               window))))
@@ -395,7 +395,7 @@ ARG lines.  No arg means split equally."
 (define (select-buffer-other-screen buffer)
   (if (multiple-screens?)
       (select-screen
-       (let ((screen (other-screen (selected-screen))))
+       (let ((screen (other-screen (selected-screen) false)))
         (if screen
             (begin
               (select-buffer-in-window buffer (screen-selected-window screen))
@@ -425,7 +425,7 @@ Also kills any pop up window it may have created."
     (if window
        (begin
          (set! *previous-popped-up-window* (object-hash false))
-         (if (and (window-visible? window)
+         (if (and (window-live? window)
                   (not (window-has-no-neighbors? window)))
              (window-delete! window)))))
   (let ((buffer (object-unhash *previous-popped-up-buffer*)))
@@ -471,7 +471,7 @@ Also kills any pop up window it may have created."
                   (if (< (ref-variable split-height-threshold) limit)
                       (set-variable! split-height-threshold limit))
                   (cond ((and (use-multiple-screens?)
-                              (other-screen (selected-screen)))
+                              (other-screen (selected-screen) false))
                          =>
                          (lambda (screen)
                            (pop-into-window (screen-selected-window screen))))
@@ -513,7 +513,7 @@ Also kills any pop up window it may have created."
                       window
                       (loop (window1+ window)))))))
       (and (use-multiple-screens?)
-          (or (let ((screen (other-screen (selected-screen))))
+          (or (let ((screen (other-screen (selected-screen) false)))
                 (and screen
                      (list-search-positive (screen-window-list screen)
                        (lambda (window)
index 048872b3af05dafc6dc50cbb8ba8b62971c9a4cd..cc38fddf455dffe6d513d173a8a7efde8f60687a 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/xterm.scm,v 1.26 1992/02/08 15:23:45 cph Exp $
+;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/xterm.scm,v 1.27 1992/02/11 19:01:23 cph Exp $
 ;;;
 ;;;    Copyright (c) 1989-92 Massachusetts Institute of Technology
 ;;;
   (lambda (screen event)
     event
     (if (not (screen-deleted? screen))
-       (if (other-screen screen)
+       (if (other-screen screen true)
            (delete-screen! screen)
            (begin
              (save-buffers-kill-edwin)
        (begin
          (set-screen-visibility! screen 'INVISIBLE)
          (if (selected-screen? screen)
-             (let ((screen (other-screen screen)))
+             (let ((screen (other-screen screen false)))
                (if screen
                    (select-screen screen))))))))