X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/430d2ee2919b2d4693780f2474ba40148442d206..0afb6242c77237cd2cc1f0e623b08e20488c5b74:/lisp/frame.el diff --git a/lisp/frame.el b/lisp/frame.el index 64e504d1c0..99f7a26d27 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1,17 +1,17 @@ ;;; frame.el --- multi-frame management independent of window systems ;; Copyright (C) 1993, 1994, 1996, 1997, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: internal ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs 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 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,9 +19,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -40,33 +38,39 @@ as its argument.") (defvar window-system-default-frame-alist nil "Alist of window-system dependent default frame parameters. -You can set this in your `.emacs' file; for example, +You can set this in your init file; for example, - ;; Disable menubar and toolbar on the console, but enable them under X. - (setq window-system-default-frame-alist - '((x (menu-bar-lines . 1) (tool-bar-lines . 1)) - (nil (menu-bar-lines . 0) (tool-bar-lines . 0)))) + ;; Disable menubar and toolbar on the console, but enable them under X. + (setq window-system-default-frame-alist + '((x (menu-bar-lines . 1) (tool-bar-lines . 1)) + (nil (menu-bar-lines . 0) (tool-bar-lines . 0)))) -Parameters specified here supersede the values given in `default-frame-alist'.") +Parameters specified here supersede the values given in +`default-frame-alist'.") ;; The initial value given here used to ask for a minibuffer. ;; But that's not necessary, because the default is to have one. ;; By not specifying it here, we let an X resource specify it. (defcustom initial-frame-alist nil - "*Alist of frame parameters for creating the initial X window frame. -You can set this in your `.emacs' file; for example, - (setq initial-frame-alist '((top . 1) (left . 1) (width . 80) (height . 55))) -Parameters specified here supersede the values given in `default-frame-alist'. - -If the value calls for a frame without a minibuffer, and you have not created -a minibuffer frame on your own, one is created according to -`minibuffer-frame-alist'. - -You can specify geometry-related options for just the initial frame -by setting this variable in your `.emacs' file; however, they won't -take effect until Emacs reads `.emacs', which happens after first creating -the frame. If you want the frame to have the proper geometry as soon -as it appears, you need to use this three-step process: + "Alist of parameters for the initial X window frame. +You can set this in your init file; for example, + + (setq initial-frame-alist + '((top . 1) (left . 1) (width . 80) (height . 55))) + +Parameters specified here supersede the values given in +`default-frame-alist'. + +If the value calls for a frame without a minibuffer, and you have +not created a minibuffer frame on your own, a minibuffer frame is +created according to `minibuffer-frame-alist'. + +You can specify geometry-related options for just the initial +frame by setting this variable in your init file; however, they +won't take effect until Emacs reads your init file, which happens +after creating the initial frame. If you want the initial frame +to have the proper geometry as soon as it appears, you need to +use this three-step process: * Specify X resources to give the geometry you want. * Set `default-frame-alist' to override these options so that they don't affect subsequent frames. @@ -78,42 +82,63 @@ as it appears, you need to use this three-step process: :group 'frames) (defcustom minibuffer-frame-alist '((width . 80) (height . 2)) - "*Alist of frame parameters for initially creating a minibuffer frame. -You can set this in your `.emacs' file; for example, + "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." + '((top . 1) (left . 1) (width . 80) (height . 2))) + +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"))) :group 'frames) (defcustom pop-up-frame-alist nil - "*Alist of frame parameters used when creating pop-up frames. -Pop-up frames are used for completions, help, and the like. -This variable can be set in your init file, like this: + "Alist of parameters for automatically generated new frames. +You can set this in your init file; for example, + (setq pop-up-frame-alist '((width . 80) (height . 20))) -These supersede the values given in `default-frame-alist', -for pop-up frames." + +If non-nil, the value you specify here is used by the default +`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 +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." :type '(repeat (cons :format "%v" (symbol :tag "Parameter") (sexp :tag "Value"))) :group 'frames) -(setq pop-up-frame-function - ;; Using `function' here caused some sort of problem. - '(lambda () - (make-frame pop-up-frame-alist))) +(defcustom pop-up-frame-function + (lambda () (make-frame pop-up-frame-alist)) + "Function used by `display-buffer' for creating a new frame. +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 'function + :group 'frames) (defcustom special-display-frame-alist '((height . 14) (width . 80) (unsplittable . t)) - "*Alist of frame parameters used when creating special frames. -Special frames are used for buffers whose names are in + "Alist of parameters for special frames. +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'. + This variable can be set in your init file, like this: + (setq special-display-frame-alist '((width . 80) (height . 20))) + These supersede the values given in `default-frame-alist'." :type '(repeat (cons :format "%v" (symbol :tag "Parameter") @@ -121,13 +146,21 @@ These supersede the values given in `default-frame-alist'." :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))) @@ -145,12 +178,10 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args." (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 @@ -210,9 +241,6 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args." (not noninteractive) (not (eq initial-window-system 'pc))) (progn - ;; Turn on special-display processing only if there's a window system. - (setq special-display-function 'special-display-popup-frame) - ;; If there is no frame with a minibuffer besides the terminal ;; frame, then we need to create the opening frame. Make sure ;; it has a minibuffer, but let initial-frame-alist omit the @@ -248,6 +276,8 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args." (defvar frame-notice-user-settings t "Non-nil means function `frame-notice-user-settings' wasn't run yet.") +(declare-function tool-bar-mode "tool-bar" (&optional arg)) + ;; startup.el calls this function after loading the user's init ;; file. Now default-frame-alist and initial-frame-alist contain ;; information to which we must react; do what needs to be done. @@ -417,6 +447,9 @@ there (in decreasing order of priority)." ;; Get rid of `name' unless it was specified explicitly before. (or (assq 'name frame-initial-frame-alist) (setq parms (delq (assq 'name parms) parms))) + ;; An explicit parent-id is a request to XEmbed the frame. + (or (assq 'parent-id frame-initial-frame-alist) + (setq parms (delq (assq 'parent-id parms) parms))) (setq parms (append initial-frame-alist window-system-frame-alist @@ -601,30 +634,32 @@ is not considered (see `next-frame')." (select-frame-set-input-focus (selected-frame))) (declare-function x-initialize-window-system "term/x-win" ()) +(declare-function ns-initialize-window-system "term/ns-win" ()) +(defvar x-display-name) ; term/x-win (defun make-frame-on-display (display &optional parameters) - "Make a frame on X display DISPLAY. -The optional second argument PARAMETERS specifies additional frame parameters." + "Make a frame on display DISPLAY. +The optional argument PARAMETERS specifies additional frame parameters." (interactive "sMake frame on display: ") - (or (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display) - (error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN")) - (when (and (boundp 'x-initialized) (not x-initialized)) - (setq x-display-name display) - (x-initialize-window-system)) - (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." - (interactive "fOpen frame on tty device: \nsTerminal type of %s: ") - (unless tty - (error "Invalid terminal device")) - (unless type - (error "Invalid terminal type")) - (make-frame `((window-system . nil) (tty . ,tty) (tty-type . ,type) . ,parameters))) + (cond ((featurep 'ns) + (when (and (boundp 'ns-initialized) (not ns-initialized)) + (setq x-display-name display) + (ns-initialize-window-system)) + (make-frame `((window-system . ns) + (display . ,display) . ,parameters))) + ((eq system-type 'windows-nt) + ;; On Windows, ignore DISPLAY. + (make-frame parameters)) + (t + (unless (string-match-p "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display) + (error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN")) + (when (and (boundp 'x-initialized) (not x-initialized)) + (setq x-display-name display) + (x-initialize-window-system)) + (make-frame `((window-system . x) + (display . ,display) . ,parameters))))) + +(declare-function x-close-connection "xfns.c" (terminal)) (defun close-display-connection (display) "Close the connection to a display, deleting all its associated frames. @@ -657,9 +692,11 @@ If DISPLAY is nil, that stands for the selected frame's display." (x-close-connection display)))) (defun make-frame-command () - "Make a new frame, and select it if the terminal displays only one frame." + "Make a new frame, on the same terminal as the selected frame. +If the terminal is a text-only terminal, this also selects the +new frame." (interactive) - (if (and window-system (not (eq window-system 'pc))) + (if (display-graphic-p) (make-frame) (select-frame (make-frame)))) @@ -700,7 +737,7 @@ You cannot specify either `width' or `height', you must use neither or both. (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 @@ -822,15 +859,29 @@ the user during startup." (nreverse frame-initial-geometry-arguments)) (cdr param-list)) +(declare-function x-focus-frame "xfns.c" (frame)) + (defun select-frame-set-input-focus (frame) - "Select FRAME, raise it, and set input focus, if possible." - (select-frame frame) - (raise-frame frame) - ;; Ensure, if possible, that frame gets input focus. - (when (memq (window-system frame) '(x mac w32)) - (x-focus-frame frame)) - (when focus-follows-mouse - (set-mouse-position (selected-frame) (1- (frame-width)) 0))) + "Select FRAME, raise it, and set input focus, if possible. +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) + (raise-frame frame) + ;; Ensure, if possible, that FRAME gets input focus. + (when (memq (window-system frame) '(x w32 ns)) + (x-focus-frame frame)) + ;; Move mouse cursor if necessary. + (cond + (mouse-autoselect-window + (let ((edges (window-inside-edges (frame-selected-window frame)))) + ;; Move mouse cursor into FRAME's selected window to avoid that + ;; Emacs mouse-autoselects another window. + (set-mouse-position frame (nth 2 edges) (nth 1 edges)))) + (focus-follows-mouse + ;; Move mouse cursor into FRAME to avoid that another frame gets + ;; selected by the window manager. + (set-mouse-position frame (1- (frame-width frame)) 0)))) (defun other-frame (arg) "Select the ARGth different visible frame on current display, and raise it. @@ -872,7 +923,7 @@ Calls `suspend-emacs' if invoked from the controlling tty device, (interactive) (let ((type (framep (selected-frame)))) (cond - ((memq type '(x w32)) (iconify-or-deiconify-frame)) + ((memq type '(x ns w32)) (iconify-or-deiconify-frame)) ((eq type t) (if (controlling-tty-p) (suspend-emacs) @@ -906,16 +957,9 @@ If there is no frame by that name, signal an error." (list input)))) (let* ((frame-names-alist (make-frame-names-alist)) (frame (cdr (assoc name frame-names-alist)))) - (or frame - (error "There is no frame named `%s'" name)) - (make-frame-visible frame) - (raise-frame frame) - (select-frame frame) - ;; Ensure, if possible, that frame gets input focus. - (cond ((memq (window-system frame) '(x w32)) - (x-focus-frame frame))) - (when focus-follows-mouse - (set-mouse-position frame (1- (frame-width frame)) 0)))) + (if frame + (select-frame-set-input-focus frame) + (error "There is no frame named `%s'" name)))) ;;;; Frame configurations @@ -983,7 +1027,16 @@ is given and non-nil, the unwanted frames are iconified instead." (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) @@ -991,7 +1044,10 @@ If FRAME is omitted, describe the currently selected frame." If FRAME is omitted, describe the currently selected frame." (cdr (assq 'width (frame-parameters frame)))) -(defalias 'set-default-font 'set-frame-font) +(declare-function x-list-fonts "xfaces.c" + (pattern &optional face frame maximum width)) + +(define-obsolete-function-alias 'set-default-font 'set-frame-font "23.1") (defun set-frame-font (font-name &optional keep-size) "Set the font of the selected frame to FONT-NAME. When called interactively, prompt for the name of the font to use. @@ -1078,7 +1134,7 @@ To get the frame's current border color, use `frame-parameters'." (defun auto-raise-mode (arg) "Toggle whether or not the selected frame should auto-raise. -With arg, turn auto-raise mode on if and only if arg is positive. +With ARG, turn auto-raise mode on if and only if ARG is positive. Note that this controls Emacs's own auto-raise feature. Some window managers allow you to enable auto-raise for certain windows. You can use that for Emacs windows if you wish, but if you do, @@ -1095,7 +1151,7 @@ that is beyond the control of Emacs and this command has no effect on it." (defun auto-lower-mode (arg) "Toggle whether or not the selected frame should auto-lower. -With arg, turn auto-lower mode on if and only if arg is positive. +With ARG, turn auto-lower mode on if and only if ARG is positive. Note that this controls Emacs's own auto-lower feature. Some window managers allow you to enable auto-lower for certain windows. You can use that for Emacs windows if you wish, but if you do, @@ -1146,8 +1202,8 @@ frame's display)." ((eq system-type 'windows-nt) (with-no-warnings (> w32-num-mouse-buttons 0))) - ((memq frame-type '(x mac)) - t) ;; We assume X and Mac *always* have a pointing device + ((memq frame-type '(x ns)) + t) ;; We assume X and NeXTstep *always* have a pointing device (t (or (and (featurep 'xt-mouse) xterm-mouse-mode) @@ -1162,7 +1218,7 @@ frame's display). Support for popup menus requires that the mouse be available." (and (let ((frame-type (framep-on-display display))) - (memq frame-type '(x w32 pc mac))) + (memq frame-type '(x w32 pc ns))) (display-mouse-p display))) (defun display-graphic-p (&optional display) @@ -1172,7 +1228,7 @@ frames and several different fonts at once. This is true for displays that use a window system such as X, and false for text-only terminals. DISPLAY can be a display name, a frame, or nil (meaning the selected frame's display)." - (not (null (memq (framep-on-display display) '(x w32 mac))))) + (not (null (memq (framep-on-display display) '(x w32 ns))))) (defun display-images-p (&optional display) "Return non-nil if DISPLAY can display images. @@ -1200,36 +1256,42 @@ frame's display)." ;; the Windows' DOS Box. (with-no-warnings (not (null dos-windows-version)))) - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) t) ;; FIXME? (t nil)))) +(declare-function x-display-screens "xfns.c" (&optional terminal)) + (defun display-screens (&optional display) "Return the number of screens associated with DISPLAY." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-screens display)) (t 1)))) +(declare-function x-display-pixel-height "xfns.c" (&optional terminal)) + (defun display-pixel-height (&optional display) "Return the height of DISPLAY's screen in pixels. For character terminals, each character counts as a single pixel." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-pixel-height display)) (t (frame-height (if (framep display) display (selected-frame))))))) +(declare-function x-display-pixel-width "xfns.c" (&optional terminal)) + (defun display-pixel-width (&optional display) "Return the width of DISPLAY's screen in pixels. For character terminals, each character counts as a single pixel." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-pixel-width display)) (t (frame-width (if (framep display) display (selected-frame))))))) @@ -1252,75 +1314,89 @@ displays not explicitely specified." (integer :tag "Height"))) :group 'frames) +(declare-function x-display-mm-height "xfns.c" (&optional terminal)) + (defun display-mm-height (&optional display) "Return the height of DISPLAY's screen in millimeters. -System values can be overriden by `display-mm-dimensions-alist'. +System values can be overridden by `display-mm-dimensions-alist'. If the information is unavailable, value is nil." - (and (memq (framep-on-display display) '(x w32 mac)) + (and (memq (framep-on-display display) '(x w32 ns)) (or (cddr (assoc (or display (frame-parameter nil 'display)) display-mm-dimensions-alist)) (cddr (assoc t display-mm-dimensions-alist)) (x-display-mm-height display)))) +(declare-function x-display-mm-width "xfns.c" (&optional terminal)) + (defun display-mm-width (&optional display) "Return the width of DISPLAY's screen in millimeters. -System values can be overriden by `display-mm-dimensions-alist'. +System values can be overridden by `display-mm-dimensions-alist'. If the information is unavailable, value is nil." - (and (memq (framep-on-display display) '(x w32 mac)) + (and (memq (framep-on-display display) '(x w32 ns)) (or (cadr (assoc (or display (frame-parameter nil 'display)) display-mm-dimensions-alist)) (cadr (assoc t display-mm-dimensions-alist)) (x-display-mm-width display)))) +(declare-function x-display-backing-store "xfns.c" (&optional terminal)) + (defun display-backing-store (&optional display) "Return the backing store capability of DISPLAY's screen. The value may be `always', `when-mapped', `not-useful', or nil if the question is inapplicable to a certain kind of display." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-backing-store display)) (t 'not-useful)))) +(declare-function x-display-save-under "xfns.c" (&optional terminal)) + (defun display-save-under (&optional display) "Return non-nil if DISPLAY's screen supports the SaveUnder feature." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-save-under display)) (t 'not-useful)))) +(declare-function x-display-planes "xfns.c" (&optional terminal)) + (defun display-planes (&optional display) "Return the number of planes supported by DISPLAY." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-planes display)) ((eq frame-type 'pc) 4) (t (truncate (log (length (tty-color-alist)) 2)))))) +(declare-function x-display-color-cells "xfns.c" (&optional terminal)) + (defun display-color-cells (&optional display) "Return the number of color cells supported by DISPLAY." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-color-cells display)) ((eq frame-type 'pc) 16) (t (tty-display-color-cells display))))) +(declare-function x-display-visual-class "xfns.c" (&optional terminal)) + (defun display-visual-class (&optional display) - "Returns the visual class of DISPLAY. + "Return the visual class of DISPLAY. The value is one of the symbols `static-gray', `gray-scale', `static-color', `pseudo-color', `true-color', or `direct-color'." (let ((frame-type (framep-on-display display))) (cond - ((memq frame-type '(x w32 mac)) + ((memq frame-type '(x w32 ns)) (x-display-visual-class display)) ((and (memq frame-type '(pc t)) (tty-display-color-p display)) @@ -1392,8 +1468,8 @@ the opposite frame edge from the edge indicated in the input spec." (cons (car spec) (frame-geom-value-cons (car spec) (cdr spec)))) ;;;; Aliases for backward compatibility with Emacs 18. -(define-obsolete-function-alias 'screen-height 'frame-height) ;before 19.15 -(define-obsolete-function-alias 'screen-width 'frame-width) ;before 19.15 +(define-obsolete-function-alias 'screen-height 'frame-height "19.7") +(define-obsolete-function-alias 'screen-width 'frame-width "19.7") (defun set-screen-width (cols &optional pretend) "Change the size of the screen to COLS columns. @@ -1418,6 +1494,10 @@ left untouched. FRAME nil or omitted means use the selected 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. @@ -1429,8 +1509,8 @@ left untouched. FRAME nil or omitted means use the selected frame." (when (eq (frame-parameter frame 'minibuffer) 'only) (delete-frame frame))))) -(make-obsolete 'set-screen-width 'set-frame-width) ;before 19.15 -(make-obsolete 'set-screen-height 'set-frame-height) ;before 19.15 +(make-obsolete 'set-screen-width 'set-frame-width "19.7") +(make-obsolete 'set-screen-height 'set-frame-height "19.7") ;; miscellaneous obsolescence declarations (define-obsolete-variable-alias 'delete-frame-hook @@ -1442,9 +1522,10 @@ left untouched. FRAME nil or omitted means use the selected frame." (make-variable-buffer-local 'show-trailing-whitespace) (defcustom show-trailing-whitespace nil - "*Non-nil means highlight trailing whitespace. + "Non-nil means highlight trailing whitespace. This is done in the face `trailing-whitespace'." :type 'boolean + :safe 'booleanp :group 'whitespace-faces) @@ -1457,7 +1538,7 @@ This is done in the face `trailing-whitespace'." :group 'frames) (defcustom auto-hscroll-mode t - "*Allow or disallow automatic scrolling windows horizontally. + "Allow or disallow automatic scrolling windows horizontally. If non-nil, windows are automatically scrolled horizontally to make point visible." :version "21.1" @@ -1474,12 +1555,12 @@ point visible." :group 'frames) (defcustom blink-cursor-delay 0.5 - "*Seconds of idle time after which cursor starts to blink." + "Seconds of idle time after which cursor starts to blink." :type 'number :group 'cursor) (defcustom blink-cursor-interval 0.5 - "*Length of cursor blink interval in seconds." + "Length of cursor blink interval in seconds." :type 'number :group 'cursor) @@ -1533,8 +1614,8 @@ cursor display. On a text-only terminal, this is not implemented." :init-value (not (or noninteractive no-blinking-cursor (eq system-type 'ms-dos) - (not (memq window-system '(x w32 mac))))) - :initialize 'custom-initialize-safe-default + (not (memq window-system '(x w32 ns))))) + :initialize 'custom-initialize-delay :group 'cursor :global t (if blink-cursor-idle-timer (cancel-timer blink-cursor-idle-timer)) @@ -1553,20 +1634,20 @@ cursor display. On a text-only terminal, this is not implemented." ;; Hourglass pointer (defcustom display-hourglass t - "*Non-nil means show an hourglass pointer, when Emacs is busy. + "Non-nil means show an hourglass pointer, when Emacs is busy. This feature only works when on a window system that can change cursor shapes." :type 'boolean :group 'cursor) (defcustom hourglass-delay 1 - "*Seconds to wait before displaying an hourglass pointer when Emacs is busy." + "Seconds to wait before displaying an hourglass pointer when Emacs is busy." :type 'number :group 'cursor) (defcustom cursor-in-non-selected-windows t - "*Non-nil means show a hollow box cursor in non-selected windows. + "Non-nil means show a hollow box cursor in non-selected windows. If nil, don't show a cursor except in the selected window. If t, display a cursor related to the usual cursor type \(a solid box becomes hollow, a bar becomes a narrower bar).