Commit dc6d9681 authored by Jim Blandy's avatar Jim Blandy
Browse files

*** empty log message ***

parent e6dd9901
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
abbrev-table) abbrev-table)
(setq abbrev-list (sort abbrev-list 'string-lessp)) (setq abbrev-list (sort abbrev-list 'string-lessp))
(while abbrev-list (while abbrev-list
(if (> (+ first-column 40) (screen-width)) (if (> (+ first-column 40) (frame-width))
(progn (progn
(insert "\n") (insert "\n")
(setq first-column 0))) (setq first-column 0)))
......
...@@ -61,7 +61,7 @@ Letters do not insert themselves; instead, they are commands. ...@@ -61,7 +61,7 @@ Letters do not insert themselves; instead, they are commands.
\\[Buffer-menu-mark] -- mark buffer to be displayed. \\[Buffer-menu-mark] -- mark buffer to be displayed.
\\[Buffer-menu-select] -- select buffer of line point is on. \\[Buffer-menu-select] -- select buffer of line point is on.
Also show buffers marked with m in other windows. Also show buffers marked with m in other windows.
\\[Buffer-menu-1-window] -- select that buffer in full-screen window. \\[Buffer-menu-1-window] -- select that buffer in full-frame window.
\\[Buffer-menu-2-window] -- select that buffer in one window, \\[Buffer-menu-2-window] -- select that buffer in one window,
together with buffer selected before this one in another window. together with buffer selected before this one in another window.
\\[Buffer-menu-this-window] -- select that buffer in place of the buffer menu buffer. \\[Buffer-menu-this-window] -- select that buffer in place of the buffer menu buffer.
...@@ -239,7 +239,7 @@ You can mark buffers with the \\<Buffer-menu-mode-map>\\[Buffer-menu-mark] comma ...@@ -239,7 +239,7 @@ You can mark buffers with the \\<Buffer-menu-mode-map>\\[Buffer-menu-mark] comma
(insert ?\ )) (insert ?\ ))
(or (eq tem buff) (memq tem others) (setq others (cons tem others)))) (or (eq tem buff) (memq tem others) (setq others (cons tem others))))
(setq others (nreverse others) (setq others (nreverse others)
tem (/ (1- (screen-height)) (1+ (length others)))) tem (/ (1- (frame-height)) (1+ (length others))))
(delete-other-windows) (delete-other-windows)
(switch-to-buffer buff) (switch-to-buffer buff)
(or (eq menu buff) (or (eq menu buff)
...@@ -260,7 +260,7 @@ You can mark buffers with the \\<Buffer-menu-mode-map>\\[Buffer-menu-mark] comma ...@@ -260,7 +260,7 @@ You can mark buffers with the \\<Buffer-menu-mode-map>\\[Buffer-menu-mark] comma
(error "Specified buffer has no file")))) (error "Specified buffer has no file"))))
(defun Buffer-menu-1-window () (defun Buffer-menu-1-window ()
"Select this line's buffer, alone, in full screen." "Select this line's buffer, alone, in full frame."
(interactive) (interactive)
(switch-to-buffer (Buffer-menu-buffer t)) (switch-to-buffer (Buffer-menu-buffer t))
(bury-buffer (other-buffer)) (bury-buffer (other-buffer))
......
...@@ -291,7 +291,7 @@ Therefore, you need to have `(display-time)' in your .emacs file." ...@@ -291,7 +291,7 @@ Therefore, you need to have `(display-time)' in your .emacs file."
;; Make sure we're not in the minibuffer ;; Make sure we're not in the minibuffer
;; before splitting the window. ;; before splitting the window.
(if (= (screen-height) (if (= (frame-height)
(nth 3 (window-edges (selected-window)))) (nth 3 (window-edges (selected-window))))
nil nil
(appt-select-lowest-window) (appt-select-lowest-window)
...@@ -313,7 +313,7 @@ Therefore, you need to have `(display-time)' in your .emacs file." ...@@ -313,7 +313,7 @@ Therefore, you need to have `(display-time)' in your .emacs file."
(beep 1)) (beep 1))
(kill-buffer appt-disp-buf)))) (kill-buffer appt-disp-buf))))
;; Select the lowest window on the screen. ;; Select the lowest window on the frame.
(defun appt-select-lowest-window () (defun appt-select-lowest-window ()
(setq lowest-window (selected-window)) (setq lowest-window (selected-window))
(let* ((bottom-edge (car (cdr (cdr (cdr (window-edges)))))) (let* ((bottom-edge (car (cdr (cdr (cdr (window-edges))))))
......
;;; screen.el --- multi-screen management independent of window systems. ;;; frame.el --- multi-frame management independent of window systems.
;;;; Copyright (C) 1990, 1992 Free Software Foundation, Inc. ;;;; Copyright (C) 1990, 1992 Free Software Foundation, Inc.
...@@ -18,292 +18,310 @@ ...@@ -18,292 +18,310 @@
;;; along with GNU Emacs; see the file COPYING. If not, write to ;;; along with GNU Emacs; see the file COPYING. If not, write to
;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
(defvar screen-creation-function nil (defvar frame-creation-function nil
"Window-system dependent function to call to create a new screen. "Window-system dependent function to call to create a new frame.
The window system startup file should set this to its screen creation The window system startup file should set this to its frame creation
function, which should take an alist of parameters as its argument.") function, which should take an alist of parameters as its argument.")
;;; The default value for this must ask for a minibuffer. There must ;;; The default value for this must ask for a minibuffer. There must
;;; always exist a screen with a minibuffer, and after we delete the ;;; always exist a frame with a minibuffer, and after we delete the
;;; terminal screen, this will be the only screen. ;;; terminal frame, this will be the only frame.
(defvar initial-screen-alist '((minibuffer . nil)) (defvar initial-frame-alist '((minibuffer . nil))
"Alist of values used when creating the initial emacs text screen. "Alist of values used when creating the initial emacs text frame.
These may be set in your init file, like this: These may be set in your init file, like this:
(setq initial-screen-alist '((top . 1) (left . 1) (width . 80) (height . 55))) (setq initial-frame-alist '((top . 1) (left . 1) (width . 80) (height . 55)))
These supercede the values given in screen-default-alist.") These supercede the values given in frame-default-alist.")
(defvar minibuffer-screen-alist nil (defvar minibuffer-frame-alist nil
"Alist of values to apply to a minibuffer screen. "Alist of values to apply to a minibuffer frame.
These may be set in your init file, like this: These may be set in your init file, like this:
(setq minibuffer-screen-alist (setq minibuffer-frame-alist
'((top . 1) (left . 1) (width . 80) (height . 1))) '((top . 1) (left . 1) (width . 80) (height . 1)))
These supercede the values given in default-screen-alist.") These supercede the values given in default-frame-alist.")
(defvar pop-up-screen-alist nil (defvar pop-up-frame-alist nil
"Alist of values used when creating pop-up screens. "Alist of values used when creating pop-up frames.
Pop-up screens are used for completions, help, and the like. Pop-up frames are used for completions, help, and the like.
This variable can be set in your init file, like this: This variable can be set in your init file, like this:
(setq pop-up-screen-alist '((width . 80) (height . 20))) (setq pop-up-frame-alist '((width . 80) (height . 20)))
These supercede the values given in default-screen-alist.") These supercede the values given in default-frame-alist.")
(setq pop-up-screen-function (setq pop-up-frame-function
(function (lambda () (function (lambda ()
(new-screen pop-up-screen-alist)))) (new-frame pop-up-frame-alist))))
;;;; Arrangement of screens at startup ;;;; Arrangement of frames at startup
;;; 1) Load the window system startup file from the lisp library and read the ;;; 1) Load the window system startup file from the lisp library and read the
;;; high-priority arguments (-q and the like). The window system startup ;;; high-priority arguments (-q and the like). The window system startup
;;; file should create any screens specified in the window system defaults. ;;; file should create any frames specified in the window system defaults.
;;; ;;;
;;; 2) If no screens have been opened, we open an initial text screen. ;;; 2) If no frames have been opened, we open an initial text frame.
;;; ;;;
;;; 3) Once the init file is done, we apply any newly set parameters ;;; 3) Once the init file is done, we apply any newly set parameters
;;; in initial-screen-alist to the screen. ;;; in initial-frame-alist to the frame.
(add-hook 'before-init-hook 'screen-initialize) (add-hook 'before-init-hook 'frame-initialize)
(add-hook 'window-setup-hook 'screen-notice-user-settings) (add-hook 'window-setup-hook 'frame-notice-user-settings)
;;; If we create the initial screen, this is it. ;;; If we create the initial frame, this is it.
(defvar screen-initial-screen nil) (defvar frame-initial-frame nil)
;;; startup.el calls this function before loading the user's init ;;; startup.el calls this function before loading the user's init
;;; file - if there is no screen with a minibuffer open now, create ;;; file - if there is no frame with a minibuffer open now, create
;;; one to display messages while loading the init file. ;;; one to display messages while loading the init file.
(defun screen-initialize () (defun frame-initialize ()
;; Are we actually running under a window system at all? ;; Are we actually running under a window system at all?
(if (and window-system (not noninteractive)) (if (and window-system (not noninteractive))
(let ((screens (screen-list))) (let ((frames (frame-list)))
;; Look for a screen that has a minibuffer. ;; Look for a frame that has a minibuffer.
(while (and screens (while (and frames
(or (eq (car screens) terminal-screen) (or (eq (car frames) terminal-frame)
(not (cdr (assq 'minibuffer (not (cdr (assq 'minibuffer
(screen-parameters (frame-parameters
(car screens))))))) (car frames)))))))
(setq screens (cdr screens))) (setq frames (cdr frames)))
;; If there was none, then we need to create the opening screen. ;; If there was none, then we need to create the opening frame.
(or screens (or frames
(setq default-minibuffer-screen (setq default-minibuffer-frame
(setq screen-initial-screen (setq frame-initial-frame
(new-screen initial-screen-alist)))) (new-frame initial-frame-alist))))
;; At this point, we know that we have a screen open, so we ;; At this point, we know that we have a frame open, so we
;; can delete the terminal screen. ;; can delete the terminal frame.
(delete-screen terminal-screen) (delete-frame terminal-frame)
(setq terminal-screen nil)) (setq terminal-frame nil))
;; No, we're not running a window system. Arrange to cause errors. ;; No, we're not running a window system. Arrange to cause errors.
(setq screen-creation-function (setq frame-creation-function
(function (function
(lambda (parameters) (lambda (parameters)
(error (error
"Can't create multiple screens without a window system.")))))) "Can't create multiple frames without a window system."))))))
;;; startup.el calls this function after loading the user's init file. ;;; startup.el calls this function after loading the user's init file.
;;; If we created a minibuffer before knowing if we had permission, we ;;; If we created a minibuffer before knowing if we had permission, we
;;; need to see if it should go away or change. Create a text screen ;;; need to see if it should go away or change. Create a text frame
;;; here. ;;; here.
(defun screen-notice-user-settings () (defun frame-notice-user-settings ()
(if screen-initial-screen (if frame-initial-frame
(progn (progn
;; If the user wants a minibuffer-only screen, we'll have to ;; If the user wants a minibuffer-only frame, we'll have to
;; make a new one; you can't remove or add a root window to/from ;; make a new one; you can't remove or add a root window to/from
;; an existing screen. ;; an existing frame.
(if (eq (cdr (or (assq 'minibuffer initial-screen-alist) (if (eq (cdr (or (assq 'minibuffer initial-frame-alist)
'(minibuffer . t))) '(minibuffer . t)))
'only) 'only)
(progn (progn
(setq default-minibuffer-screen (setq default-minibuffer-frame
(new-screen (new-frame
(append initial-screen-alist (append initial-frame-alist
(screen-parameters screen-initial-screen)))) (frame-parameters frame-initial-frame))))
(delete-screen screen-initial-screen)) (delete-frame frame-initial-frame))
(modify-screen-parameters screen-initial-screen (modify-frame-parameters frame-initial-frame
initial-screen-alist)))) initial-frame-alist))))
;; Make sure the initial screen can be GC'd if it is ever deleted. ;; Make sure the initial frame can be GC'd if it is ever deleted.
(makunbound 'screen-initial-screen)) (makunbound 'frame-initial-frame))
;;;; Creation of additional screens ;;;; Creation of additional frames
;;; Return some screen other than the current screen, ;;; Return some frame other than the current frame,
;;; creating one if neccessary. Note that the minibuffer screen, if ;;; creating one if neccessary. Note that the minibuffer frame, if
;;; separate, is not considered (see next-screen). ;;; separate, is not considered (see next-frame).
(defun get-screen () (defun get-frame ()
(let ((s (if (equal (next-screen (selected-screen)) (selected-screen)) (let ((s (if (equal (next-frame (selected-frame)) (selected-frame))
(new-screen) (new-frame)
(next-screen (selected-screen))))) (next-frame (selected-frame)))))
s)) s))
(defun next-multiscreen-window () (defun next-multiframe-window ()
"Select the next window, regardless of which screen it is on." "Select the next window, regardless of which frame it is on."
(interactive) (interactive)
(select-window (next-window (selected-window) (select-window (next-window (selected-window)
(> (minibuffer-depth) 0) (> (minibuffer-depth) 0)
t))) t)))
(defun previous-multiscreen-window () (defun previous-multiframe-window ()
"Select the previous window, regardless of which screen it is on." "Select the previous window, regardless of which frame it is on."
(interactive) (interactive)
(select-window (previous-window (selected-window) (select-window (previous-window (selected-window)
(> (minibuffer-depth) 0) (> (minibuffer-depth) 0)
t))) t)))
(defun new-screen (&optional parameters) (defun new-frame (&optional parameters)
"Create a new screen, displaying the current buffer. "Create a new frame, displaying the current buffer.
Optional argument PARAMETERS is an alist of parameters for the new Optional argument PARAMETERS is an alist of parameters for the new
screen. Specifically, PARAMETERS is a list of pairs, each having one frame. Specifically, PARAMETERS is a list of pairs, each having one
of the following forms: of the following forms:
(name . STRING) - The screen should be named STRING. (name . STRING) - The frame should be named STRING.
(height . NUMBER) - The screen should be NUMBER text lines high. If (height . NUMBER) - The frame should be NUMBER text lines high. If
this parameter is present, the width parameter must also be this parameter is present, the width parameter must also be
given. given.
(width . NUMBER) - The screen should be NUMBER characters in width. (width . NUMBER) - The frame should be NUMBER characters in width.
If this parameter is present, the height parameter must also If this parameter is present, the height parameter must also
be given. be given.
(minibuffer . t) - the screen should have a minibuffer (minibuffer . t) - the frame should have a minibuffer
(minibuffer . none) - the screen should have no minibuffer (minibuffer . none) - the frame should have no minibuffer
(minibuffer . only) - the screen should contain only a minibuffer (minibuffer . only) - the frame should contain only a minibuffer
(minibuffer . WINDOW) - the screen should use WINDOW as its minibuffer window. (minibuffer . WINDOW) - the frame should use WINDOW as its minibuffer window.
(NAME . VALUE), specifying the parameter and the value it should have. (NAME . VALUE), specifying the parameter and the value it should have.
NAME should be one of the following symbols: NAME should be one of the following symbols:
name VALUE name VALUE
The documentation for the function x-create-screen describes The documentation for the function x-create-frame describes
additional screen parameters that Emacs will recognize when running additional frame parameters that Emacs will recognize when running
under the X Window System." under the X Window System."
(interactive) (interactive)
(funcall screen-creation-function parameters)) (funcall frame-creation-function parameters))
;;;; Iconification ;;;; Iconification
;;; A possible enhancement for the below: if you iconify a surrogate ;;; A possible enhancement for the below: if you iconify a surrogate
;;; minibuffer screen, iconify all of its minibuffer's users too; ;;; minibuffer frame, iconify all of its minibuffer's users too;
;;; de-iconify them as a group. This will need to wait until screens ;;; de-iconify them as a group. This will need to wait until frames
;;; have mapping and unmapping hooks. ;;; have mapping and unmapping hooks.
(defun iconify () (defun iconify ()
"Iconify or deiconify the selected screen." "Iconify or deiconify the selected frame."
(interactive) (interactive)
(let ((screen (selected-screen))) (let ((frame (selected-frame)))
(if (eq (screen-visible-p screen) t) (if (eq (frame-visible-p frame) t)
(iconify-screen screen) (iconify-frame frame)
(make-screen-visible screen)))) (make-frame-visible frame))))
;;;; Screen configurations ;;;; Frame configurations
(defun current-screen-configuration () (defun current-frame-configuration ()
"Return a list describing the positions and states of all screens. "Return a list describing the positions and states of all frames.
Each element is a list of the form (SCREEN ALIST WINDOW-CONFIG), where Each element is a list of the form (FRAME ALIST WINDOW-CONFIG), where
SCREEN is a screen object, ALIST is an association list specifying FRAME is a frame object, ALIST is an association list specifying
some of SCREEN's parameters, and WINDOW-CONFIG is a window some of FRAME's parameters, and WINDOW-CONFIG is a window
configuration object for SCREEN." configuration object for FRAME."
(mapcar (function (mapcar (function
(lambda (screen) (lambda (frame)
(list screen (list frame
(screen-parameters screen) (frame-parameters frame)
(current-window-configuration screen)))) (current-window-configuration frame))))
(screen-list))) (frame-list)))
(defun set-screen-configuration (configuration) (defun set-frame-configuration (configuration)
"Restore the screens to the state described by CONFIGURATION. "Restore the frames to the state described by CONFIGURATION.
Each screen listed in CONFIGURATION has its position, size, window Each frame listed in CONFIGURATION has its position, size, window
configuration, and other parameters set as specified in CONFIGURATION." configuration, and other parameters set as specified in CONFIGURATION."
(let (screens-to-delete) (let (frames-to-delete)
(mapcar (function (mapcar (function
(lambda (screen) (lambda (frame)
(let ((parameters (assq screen configuration))) (let ((parameters (assq frame configuration)))
(if parameters (if parameters
(progn (progn
(modify-screen-parameters screen (nth 1 parameters)) (modify-frame-parameters frame (nth 1 parameters))
(set-window-configuration (nth 2 parameters))) (set-window-configuration (nth 2 parameters)))
(setq screens-to-delete (cons screen screens-to-delete)))))) (setq frames-to-delete (cons frame frames-to-delete))))))
(screen-list)) (frame-list))
(mapcar 'delete-screen screens-to-delete))) (mapcar 'delete-frame frames-to-delete)))
;;;; Convenience functions for dynamically changing screen parameters ;;;; Convenience functions for accessing and interactively changing
;;;; frame parameters.
(defun set-screen-height (h) (defun frame-width (&optional frame)
"Return number of lines available for display on FRAME.
If FRAME is omitted, describe the currently selected frame."
(cdr (assq 'width (frame-parameters frame))))
(defun frame-width (&optional frame)
"Return number of columns available for display on FRAME.
If FRAME is omitted, describe the currently selected frame."
(cdr (assq 'height (frame-parameters frame))))
(defun set-frame-height (h)
(interactive "NHeight: ") (interactive "NHeight: ")
(let* ((screen (selected-screen)) (let* ((frame (selected-frame))
(width (cdr (assoc 'width (screen-parameters (selected-screen)))))) (width (cdr (assoc 'width (frame-parameters (selected-frame))))))
(set-screen-size (selected-screen) width h))) (set-frame-size (selected-frame) width h)))
(defun set-screen-width (w) (defun set-frame-width (w)
(interactive "NWidth: ") (interactive "NWidth: ")
(let* ((screen (selected-screen)) (let* ((frame (selected-frame))
(height (cdr (assoc 'height (screen-parameters (selected-screen)))))) (height (cdr (assoc 'height (frame-parameters (selected-frame))))))
(set-screen-size (selected-screen) w height))) (set-frame-size (selected-frame) w height)))
(defun set-default-font (font-name) (defun set-default-font (font-name)
(interactive "sFont name: ") (interactive "sFont name: ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'font font-name)))) (list (cons 'font font-name))))
(defun set-screen-background (color-name) (defun set-frame-background (color-name)
(interactive "sColor: ") (interactive "sColor: ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'background-color color-name)))) (list (cons 'background-color color-name))))
(defun set-screen-foreground (color-name) (defun set-frame-foreground (color-name)
(interactive "sColor: ") (interactive "sColor: ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'foreground-color color-name)))) (list (cons 'foreground-color color-name))))
(defun set-cursor-color (color-name) (defun set-cursor-color (color-name)
(interactive "sColor: ") (interactive "sColor: ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'cursor-color color-name)))) (list (cons 'cursor-color color-name))))
(defun set-pointer-color (color-name) (defun set-pointer-color (color-name)
(interactive "sColor: ") (interactive "sColor: ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'mouse-color color-name)))) (list (cons 'mouse-color color-name))))
(defun set-auto-raise (toggle) (defun set-auto-raise (toggle)
(interactive "xt or nil? ") (interactive "xt or nil? ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'auto-raise toggle)))) (list (cons 'auto-raise toggle))))
(defun set-auto-lower (toggle) (defun set-auto-lower (toggle)
(interactive "xt or nil? ") (interactive "xt or nil? ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'auto-lower toggle)))) (list (cons 'auto-lower toggle))))
(defun set-vertical-bar (toggle) (defun set-vertical-bar (toggle)
(interactive "xt or nil? ") (interactive "xt or nil? ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'vertical-scroll-bar toggle)))) (list (cons 'vertical-scroll-bar toggle))))
(defun set-horizontal-bar (toggle) (defun set-horizontal-bar (toggle)
(interactive "xt or nil? ") (interactive "xt or nil? ")
(modify-screen-parameters (selected-screen) (modify-frame-parameters (selected-frame)
(list (cons 'horizontal-scroll-bar toggle)))) (list (cons 'horizontal-scroll-bar toggle))))
;;;; Aliases for backward compatibility with Emacs 18.
(fset 'screen-height 'frame-height)
(fset 'screen-width 'frame-width)
(fset 'set-screen-width 'set-frame-width)
(fset 'set-screen-height 'set-frame-height)
;;;; Key bindings ;;;; Key bindings
(defvar ctl-x-5-map (make-sparse-keymap) (defvar ctl-x-5-map (make-sparse-keymap)
"Keymap for screen commands.") "Keymap for frame commands.")
(fset 'ctl-x-5-prefix ctl-x-5-map) (fset 'ctl-x-5-prefix ctl-x-5-map)
(define-key ctl-x-map "5" 'ctl-x-5-prefix) (define-key ctl-x-map "5" 'ctl-x-5-prefix)