;;; frame.el --- multi-frame management independent of window systems.
-;;;; Copyright (C) 1993 Free Software Foundation, Inc.
+;;;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: internal
(setq pop-up-frame-function
(function (lambda ()
- (new-frame pop-up-frame-alist))))
+ (make-frame pop-up-frame-alist))))
(defvar special-display-frame-alist
'((height . 14) (width . 80) (unsplittable . t))
(raise-frame frame)
window)
;; If no window yet, make one in a new frame.
- (let ((frame (new-frame special-display-frame-alist)))
+ (let ((frame (make-frame special-display-frame-alist)))
(set-window-buffer (frame-selected-window frame) buffer)
(set-window-dedicated-p (frame-selected-window frame) t)
(frame-selected-window frame)))))
;; Record the parameters used in frame-initialize to make the initial frame.
(defvar frame-initial-frame-alist)
+(defvar frame-initial-geometry-arguments nil)
+
;;; startup.el calls this function before loading the user's init
;;; file - if there is no frame with a minibuffer open now, create
;;; one to display messages while loading the init file.
(append initial-frame-alist default-frame-alist))
(setq default-minibuffer-frame
(setq frame-initial-frame
- (new-frame initial-frame-alist)))
+ (make-frame initial-frame-alist)))
;; Delete any specifications for window geometry parameters
;; so that we won't reapply them in frame-notice-user-settings.
;; It would be wrong to reapply them then,
;; because that would override explicit user resizing.
(setq initial-frame-alist
- (frame-remove-geometry-params initial-frame-alist))
- ;; Handle `reverse' as a parameter.
- (if (cdr (or (assq 'reverse initial-frame-alist)
- (assq 'reverse default-frame-alist)
- (cons nil
- (member (x-get-resource "reverseVideo" "ReverseVideo")
- '("on" "true")))))
- (let ((params (frame-parameters frame-initial-frame)))
- (modify-frame-parameters
- frame-initial-frame
- ;; Must set cursor-color after background color.
- ;; So put it first.
- (list (cons 'cursor-color
- (cdr (assq 'background-color params)))
- (cons 'foreground-color
- (cdr (assq 'background-color params)))
- (cons 'background-color
- (cdr (assq 'foreground-color params)))
- (cons 'mouse-color
- (cdr (assq 'background-color params)))
- (cons 'border-color
- (cdr (assq 'background-color params)))))))))
-
+ (frame-remove-geometry-params initial-frame-alist))))
;; At this point, we know that we have a frame open, so we
;; can delete the terminal frame.
(delete-frame terminal-frame)
'(minibuffer . t)))
t))
;; Create the new frame.
- (let ((new
- (new-frame
- (append initial-frame-alist
- default-frame-alist
- (frame-parameters frame-initial-frame)))))
-
+ (let* ((parms (append initial-frame-alist
+ default-frame-alist
+ (frame-parameters frame-initial-frame)
+ nil))
+ new)
+ ;; Get rid of `reverse', because that was handled
+ ;; when we first made the frame.
+ (setq parms (cons '(reverse) (delq (assq 'reverse parms) parms)))
+ (if (assq 'height frame-initial-geometry-arguments)
+ (setq parms (delq (assq 'height parms) parms)))
+ (if (assq 'width frame-initial-geometry-arguments)
+ (setq parms (delq (assq 'width parms) parms)))
+ (if (assq 'left frame-initial-geometry-arguments)
+ (setq parms (delq (assq 'left parms) parms)))
+ (if (assq 'top frame-initial-geometry-arguments)
+ (setq parms (delq (assq 'top parms) parms)))
+ (setq new
+ (make-frame
+ ;; Use the geometry args that created the existing
+ ;; frame, rather than the parms we get for it.
+ (append frame-initial-geometry-arguments parms)))
;; The initial frame, which we are about to delete, may be
;; the only frame with a minibuffer. If it is, create a
;; new one.
(or (delq frame-initial-frame (minibuffer-frame-list))
- (new-frame (append minibuffer-frame-alist
+ (make-frame (append minibuffer-frame-alist
'((minibuffer . only)))))
;; If the initial frame is serving as a surrogate
;;; considered (see next-frame).
(defun get-other-frame ()
(let ((s (if (equal (next-frame (selected-frame)) (selected-frame))
- (new-frame)
+ (make-frame)
(next-frame (selected-frame)))))
s))
(defun frame-remove-geometry-params (param-list)
"Return the parameter list PARAM-LIST, but with geometry specs removed.
This deletes all bindings in PARAM-LIST for `top', `left', `width',
-and `height' parameters.
+`height', `user-size' and `user-position' parameters.
Emacs uses this to avoid overriding explicit moves and resizings from
the user during startup."
(setq param-list (cons nil param-list))
(let ((tail param-list))
(while (consp (cdr tail))
(if (and (consp (car (cdr tail)))
- (memq (car (car (cdr tail))) '(height width top left)))
- (setcdr tail (cdr (cdr tail)))
+ (memq (car (car (cdr tail)))
+ '(height width top left user-position user-size)))
+ (progn
+ (setq frame-initial-geometry-arguments
+ (cons (car (cdr tail)) frame-initial-geometry-arguments))
+ (setcdr tail (cdr (cdr tail))))
(setq tail (cdr tail)))))
(cdr param-list))
(defalias 'ctl-x-5-prefix ctl-x-5-map)
(define-key ctl-x-map "5" 'ctl-x-5-prefix)
-(define-key ctl-x-5-map "2" 'new-frame)
+(define-key ctl-x-5-map "2" 'make-frame)
(define-key ctl-x-5-map "0" 'delete-frame)
(define-key ctl-x-5-map "o" 'other-frame)