home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD1.bin
/
new
/
util
/
edit
/
jade
/
lisp
/
windows.jl
< prev
next >
Wrap
Lisp/Scheme
|
1994-08-31
|
4KB
|
119 lines
;;;; windows.jl -- Window handling
;;; Copyright (C) 1993, 1994 John Harper <jsh@ukc.ac.uk>
;;; This file is part of Jade.
;;; Jade is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 2, or (at your option)
;;; any later version.
;;; Jade is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;; You should have received a copy of the GNU General Public License
;;; along with Jade; see the file COPYING. If not, write to
;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
(defvar window-list (cons (current-window) nil)
"List of all opened windows.")
(defvar window-closed-hook '(close-window)
"Hook called when an input event saying that a window should be closed
is received.")
(defun open-window (&optional buffer x y w h)
"Creates a new window display BUFFER or the buffer that the current window is
showing."
(interactive)
(let
((old-buf-list buffer-list)
win)
(unless buffer
(setq buffer (current-buffer)))
(when (setq win (make-window x y w h))
(setq window-list (cons win window-list))
(with-window win
(setq buffer-list (cons buffer (delq buffer
(copy-sequence old-buf-list))))
(set-current-buffer buffer win))
win)))
(defun close-window (&optional win)
"Close window WIN, or the current window."
(interactive)
(unless win
(setq win (current-window)))
(if (= (window-count) 1)
(save-and-quit)
(setq window-list (delq win window-list))
(destroy-window win)))
(defun close-other-windows (&optional win)
"Close all windows except for WIN, or the current one."
(interactive)
(unless win
(setq win (current-window)))
(setq window-list (delq win window-list))
(while window-list
(destroy-window (car window-list))
(setq window-list (cdr window-list)))
(setq window-list (cons win nil)))
(defun add-buffer (buffer)
"Make sure that BUFFER is in the `buffer-list' of all open windows. It gets
put at the end of the list."
(let
((win-list window-list))
(while (consp win-list)
(with-window (car win-list)
(setq buffer-list (nconc (delq buffer buffer-list) (cons buffer nil))))
(setq win-list (cdr win-list)))))
(defun remove-buffer (buffer)
"Delete all references to BUFFER in any of the windows' `buffer-list'"
(let
((win-list window-list))
(while (consp win-list)
(with-window (car win-list)
(setq buffer-list (delq buffer buffer-list))
(when (eq (current-buffer (car win-list)) buffer)
(set-current-buffer (car buffer-list) (car win-list))))
(setq win-list (cdr win-list)))))
(defun in-other-window (command)
"Switches to the `other' window then calls the command COMMAND in it."
(goto-other-window)
(call-command command))
(defun goto-other-window ()
"Switch to the `other' window."
(interactive)
(set-current-window (other-window) t))
(defun in-new-window (command)
(goto-new-window)
(call-command command))
(defun goto-new-window ()
(interactive)
(set-current-window (open-window) t))
(defun other-window ()
"(other-window)
Return the `other' window."
(if (= 1 (window-count))
(open-window)
(if (eq (car window-list) (current-window))
(car (cdr window-list))
(car window-list))))
(defun toggle-iconic ()
"Toggle the current window between iconified and normal states."
(interactive)
(if (window-asleep-p)
(unsleep-window)
(sleep-window)))