From 447ffa6ad675242d12a60926c574d80227f8fd94 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Tue, 11 Feb 1992 19:01:23 +0000 Subject: [PATCH] Change screen, window, and buffer selection to make it hard to select something on a screen that isn't visible. --- v7/src/edwin/curren.scm | 35 ++++++++++++++++++----------------- v7/src/edwin/wincom.scm | 14 +++++++------- v7/src/edwin/xterm.scm | 6 +++--- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/v7/src/edwin/curren.scm b/v7/src/edwin/curren.scm index 5e4c7d38a..7702ea9f6 100644 --- a/v7/src/edwin/curren.scm +++ b/v7/src/edwin/curren.scm @@ -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 ;;; @@ -80,10 +80,10 @@ (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 @@ -155,18 +155,15 @@ (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*)))))) ;;;; Windows @@ -199,6 +196,10 @@ (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))) diff --git a/v7/src/edwin/wincom.scm b/v7/src/edwin/wincom.scm index c0daee2ce..31dec81c3 100644 --- a/v7/src/edwin/wincom.scm +++ b/v7/src/edwin/wincom.scm @@ -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) diff --git a/v7/src/edwin/xterm.scm b/v7/src/edwin/xterm.scm index 048872b3a..cc38fddf4 100644 --- a/v7/src/edwin/xterm.scm +++ b/v7/src/edwin/xterm.scm @@ -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 ;;; @@ -506,7 +506,7 @@ (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) @@ -529,7 +529,7 @@ (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)))))))) -- 2.25.1