;;; frame.el --- multi-frame management independent of window systems
;; Copyright (C) 1993, 1994, 1996, 1997, 2000, 2001, 2002, 2003,
-;; 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: internal
:group 'frames)
(defcustom minibuffer-frame-alist '((width . 80) (height . 2))
- "Alist of parameters for initial minibuffer frame.
+ "Alist of parameters for the initial minibuffer frame.
+This is the minibuffer frame created if `initial-frame-alist'
+calls for a frame without a minibuffer. The parameters specified
+here supersede those given in `default-frame-alist', for the
+initial minibuffer frame.
+
You can set this in your init file; for example,
(setq minibuffer-frame-alist
'((top . 1) (left . 1) (width . 80) (height . 2)))
-Parameters specified here supersede the values given in
-`default-frame-alist', for a minibuffer frame."
+It is not necessary to include (minibuffer . only); that is
+appended when the minibuffer frame is created."
:type '(repeat (cons :format "%v"
(symbol :tag "Parameter")
(sexp :tag "Value")))
`pop-up-frame-function' for the creation of new frames.
Since `pop-up-frame-function' is used by `display-buffer' for
-making new frames, any value specified here, by default affects
+making new frames, any value specified here by default affects
the automatic generation of new frames via `display-buffer' and
all functions based on it. The behavior of `make-frame' is not
affected by this variable."
This function is called with no arguments and should return a new
frame. The default value calls `make-frame' with the argument
`pop-up-frame-alist'."
- :type '(choice (const nil) (function :tag "function"))
+ :type 'function
:group 'frames)
(defcustom special-display-frame-alist
'((height . 14) (width . 80) (unsplittable . t))
"Alist of parameters for special frames.
-Special frames are used for buffers whose names are in
+Special frames are used for buffers whose names are listed in
`special-display-buffer-names' and for buffers whose names match
one of the regular expressions in `special-display-regexps'.
:group 'frames)
(defun special-display-popup-frame (buffer &optional args)
- "Display BUFFER in its own frame, reusing an existing window if any.
-Return the window chosen.
-Currently we do not insist on selecting the window within its frame.
-If ARGS is an alist, use it as a list of frame parameter specs.
-If ARGS is a list whose car is a symbol,
-use (car ARGS) as a function to do the work.
-Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
+ "Display BUFFER and return the window chosen.
+If BUFFER is already displayed in a visible or iconified frame,
+raise that frame. Otherwise, display BUFFER in a new frame.
+
+Optional argument ARGS is a list specifying additional
+information.
+
+If ARGS is an alist, use it as a list of frame parameters. If
+these parameters contain \(same-window . t), display BUFFER in
+the selected window. If they contain \(same-frame . t), display
+BUFFER in a window of the selected frame.
+
+If ARGS is a list whose car is a symbol, use (car ARGS) as a
+function to do the work. Pass it BUFFER as first argument,
+and (cdr ARGS) as second."
(if (and args (symbolp (car args)))
(apply (car args) buffer (cdr args))
(let ((window (get-buffer-window buffer 0)))
(error nil)))
;; Stay on the same frame if requested.
(when (or (cdr (assq 'same-frame args)) (cdr (assq 'same-window args)))
- (let* ((pop-up-frames nil) (pop-up-windows t)
- special-display-regexps special-display-buffer-names
- (window (display-buffer buffer)))
- ;; Only do it if this is a new window:
- ;; (set-window-dedicated-p window t)
- window))
+ (let* ((pop-up-windows t)
+ pop-up-frames
+ special-display-buffer-names special-display-regexps)
+ (display-buffer buffer)))
;; If no window yet, make one in a new frame.
(let ((frame
(with-current-buffer buffer
(make-frame `((window-system . x)
(display . ,display) . ,parameters)))))
-(defun make-frame-on-tty (tty type &optional parameters)
- "Make a frame on terminal device TTY.
-TTY should be the file name of the tty device to use. TYPE
-should be the terminal type string of TTY, for example \"xterm\"
-or \"vt100\". The optional third argument PARAMETERS specifies
-additional frame parameters."
- ;; Use "F" rather than "f", in case the device does not exist, as
- ;; far as the filesystem is concerned.
- (interactive "FOpen frame on tty device: \nsTerminal type of %s: ")
- (unless tty
- (error "Invalid terminal device"))
- (unless type
- (error "Invalid terminal type"))
- (if (eq window-system 'pc)
- (make-frame `((window-system . pc) (tty . ,tty) (tty-type . ,type) . ,parameters))
- (make-frame `((window-system . nil) (tty . ,tty) (tty-type . ,type) . ,parameters))))
-
(declare-function x-close-connection "xfns.c" (terminal))
(defun close-display-connection (display)
(window-system . nil) The frame should be displayed on a terminal device.
(window-system . x) The frame should be displayed in an X window.
- (terminal . ID) The frame should use the terminal identified by ID.
+ (terminal . TERMINAL) The frame should use the terminal object TERMINAL.
Before the frame is created (via `frame-creation-function-alist'), functions on the
hook `before-make-frame-hook' are run. After the frame is created, functions
(defun select-frame-set-input-focus (frame)
"Select FRAME, raise it, and set input focus, if possible.
-If `mouse-autoselect-window' is non-nil, also move mouse cursor
+If `mouse-autoselect-window' is non-nil, also move mouse pointer
to FRAME's selected window. Otherwise, if `focus-follows-mouse'
is non-nil, move mouse cursor to FRAME."
(select-frame frame)
(defun frame-height (&optional frame)
"Return number of lines available for display on FRAME.
-If FRAME is omitted, describe the currently selected frame."
+If FRAME is omitted, describe the currently selected frame.
+Exactly what is included in the return value depends on the
+window-system and toolkit in use - see `frame-pixel-height' for
+more details. The lines are in units of the default font height.
+
+The result is roughly related to the frame pixel height via
+height in pixels = height in lines * `frame-char-height'.
+However, this is only approximate, and is complicated e.g. by the
+fact that individual window lines and menu bar lines can have
+differing font heights."
(cdr (assq 'height (frame-parameters frame))))
(defun frame-width (&optional frame)
(setq frame (selected-frame)))
(let* ((mini-frame (window-frame (minibuffer-window frame)))
(frames (delq mini-frame (delq frame (frame-list)))))
+ ;; Only consider frames on the same terminal.
+ (dolist (frame (prog1 frames (setq frames nil)))
+ (if (eq (frame-terminal) (frame-terminal frame))
+ (push frame frames)))
;; Delete mon-minibuffer-only frames first, because `delete-frame'
;; signals an error when trying to delete a mini-frame that's
;; still in use by another frame.
no-blinking-cursor
(eq system-type 'ms-dos)
(not (memq window-system '(x w32)))))
- :initialize 'custom-initialize-safe-default
+ :initialize 'custom-initialize-delay
:group 'cursor
:global t
(if blink-cursor-idle-timer (cancel-timer blink-cursor-idle-timer))