annotate lisp/frame.el @ 5104:868a5349acee

add documentation to frame.c, rearrange some functions to consolidate in related areas -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-03-05 Ben Wing <ben@xemacs.org> * frame.c: * frame.c (frame_live_p): * frame.c (Fframep): * frame.c (Fdisable_frame): * frame.c (Fenable_frame): * frame.c (Fraise_frame): * frame.c (Fframe_name): * frame.c (Fset_frame_height): * frame.c (internal_set_frame_size): * frame.c (adjust_frame_size): Add documentation on the different types of units used to measure frame size. Add section headers to the various sections. Rearrange the location of some functions in the file to keep related functions together. This especially goes for frame-sizing functions (internal_set_frame_size() and adjust_frame_size()), which have been moved so that they form a group with change_frame_size() and change_frame_size_1(). No functionality should change.
author Ben Wing <ben@xemacs.org>
date Fri, 05 Mar 2010 22:50:27 -0600
parents 5502045ec510
children 0d43872986b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;;; frame.el --- multi-frame management independent of window systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
3 ;; Copyright (C) 1993, 1994, 1996, 1997, 2000, 2001, 2003
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
4 ;; Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 ;; Copyright (C) 1995, 1996 Ben Wing.
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
6 ;; Copyright (C) 2010 Didier Verna
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; Maintainer: XEmacs Development Team
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; Keywords: internal, dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ;; XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 ;; any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 ;; General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;; along with XEmacs; see the file COPYING. If not, write to the
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 ;; Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
28 ;;; Synched up with: FSF 21.3.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
36 ;; XEmacs addition
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 (defgroup frames nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 "Support for Emacs frames and window systems."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 :group 'environment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
41 ;; XEmacs change: No need for `frame-creation-function'.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
43 ;; XEmacs change: Emacs no longer specifies the minibuffer property here.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 ;;; The initial value given here for this must ask for a minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 ;;; There must always exist a frame with a minibuffer, and after we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 ;;; delete the terminal frame, this will be the only frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 (defcustom initial-frame-plist '(minibuffer t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 "Plist of frame properties for creating the initial X window frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 You can set this in your `.emacs' file; for example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 (setq initial-frame-plist '(top 1 left 1 width 80 height 55))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Properties specified here supersede the values given in `default-frame-plist'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 The format of this can also be an alist for backward compatibility.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 If the value calls for a frame without a minibuffer, and you have not created
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 a minibuffer frame on your own, one is created according to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 `minibuffer-frame-plist'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 You can specify geometry-related options for just the initial frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 by setting this variable in your `.emacs' file; however, they won't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 take effect until Emacs reads `.emacs', which happens after first creating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 the frame. If you want the frame to have the proper geometry as soon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 as it appears, you need to use this three-step process:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 * Specify X resources to give the geometry you want.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 * Set `default-frame-plist' to override these options so that they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 don't affect subsequent frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 * Set `initial-frame-plist' in a way that matches the X resources,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 to override what you put in `default-frame-plist'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 :type 'plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 (defcustom minibuffer-frame-plist '(width 80 height 2 menubar-visible-p nil
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
72 default-toolbar-visible-p nil)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 "Plist of frame properties for initially creating a minibuffer frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 You can set this in your `.emacs' file; for example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 (setq minibuffer-frame-plist '(top 1 left 1 width 80 height 2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 Properties specified here supersede the values given in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 `default-frame-plist'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 The format of this can also be an alist for backward compatibility."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 :type 'plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 (defcustom pop-up-frame-plist nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 "Plist of frame properties used when creating pop-up frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 Pop-up frames are used for completions, help, and the like.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 This variable can be set in your init file, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 (setq pop-up-frame-plist '(width 80 height 20))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
87 These supersede the values given in `default-frame-plist', for pop-up frames.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 The format of this can also be an alist for backward compatibility."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 :type 'plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 (setq pop-up-frame-function
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
93 #'(lambda ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
94 (make-frame pop-up-frame-plist)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 (defcustom special-display-frame-plist '(height 14 width 80 unsplittable t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 "*Plist of frame properties used when creating special frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 Special frames are used for buffers whose names are in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 `special-display-buffer-names' and for buffers whose names match
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 one of the regular expressions in `special-display-regexps'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 This variable can be set in your init file, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 (setq special-display-frame-plist '(width 80 height 20))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 These supersede the values given in `default-frame-plist'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 The format of this can also be an alist for backward compatibility."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 :type 'plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
108 ;; XEmacs addition
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 (defun safe-alist-to-plist (cruftiness)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 (if (consp (car cruftiness))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 (alist-to-plist cruftiness)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 cruftiness))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
114 ;; XEmacs change: require args to be a plist instead of an alist.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 (defun special-display-popup-frame (buffer &optional args)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
116 "Display BUFFER in its own frame, reusing an existing window if any.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
117 Return the window chosen.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
118 Currently we do not insist on selecting the window within its frame.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
119 If ARGS is a plist, use it as a list of frame property specs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
120 If ARGS is a list whose car is t,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
121 use (cadr ARGS) as a function to do the work.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
122 Pass it BUFFER as first arg, and (cddr ARGS) gives the rest of the args."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 ;; if we can't display simultaneous multiple frames, just return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 ;; nil and let the normal behavior take over.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 (and (device-on-window-system-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 (if (and args (eq t (car args)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 (apply (cadr args) buffer (cddr args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 (let ((window (get-buffer-window buffer t)))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
129 (setq args (safe-alist-to-plist args))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
130 (or
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
131 ;; If we have a window already, make it visible.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
132 (when window
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
133 (let ((frame (window-frame window)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
134 (make-frame-visible frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
135 (raise-frame frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
136 window))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
137 ;; Reuse the current window if the user requested it.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
138 (when (lax-plist-get args 'same-window)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
139 (condition-case nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
140 (progn (switch-to-buffer buffer) (selected-window))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
141 (error nil)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
142 ;; Stay on the same frame if requested.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
143 (when (or (lax-plist-get args 'same-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
144 (lax-plist-get args 'same-window))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
145 (let* ((pop-up-frames nil) (pop-up-windows t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
146 special-display-regexps special-display-buffer-names
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
147 (window (display-buffer buffer)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
148 ;; (set-window-dedicated-p window t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
149 window))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
150 ;; If no window yet, make one in a new frame.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
151 (let ((frame (make-frame (append args
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
152 (safe-alist-to-plist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
153 special-display-frame-plist)))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
154 (set-window-buffer (frame-selected-window frame) buffer)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
155 (set-window-dedicated-p (frame-selected-window frame) t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
156 (frame-selected-window frame)))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
158 ;; XEmacs change: comment out
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 ;(defun handle-delete-frame (event)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
160 ; "Handle delete-frame events from the X server."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 ; (interactive "e")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 ; (let ((frame (posn-window (event-start event)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 ; (i 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 ; (tail (frame-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 ; (while tail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 ; (and (frame-visible-p (car tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 ; (not (eq (car tail) frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 ; (setq i (1+ i)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 ; (setq tail (cdr tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 ; (if (> i 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 ; (delete-frame frame t)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
172 ; ;; Gildea@x.org says it is ok to ask questions before terminating.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
173 ; (save-buffers-kill-emacs))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 ;;;; Arrangement of frames at startup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
177 ;; 1) Load the window system startup file from the lisp library and read the
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
178 ;; high-priority arguments (-q and the like). The window system startup
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
179 ;; file should create any frames specified in the window system defaults.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
180 ;;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
181 ;; 2) If no frames have been opened, we open an initial text frame.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
182 ;;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
183 ;; 3) Once the init file is done, we apply any newly set properties
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
184 ;; in initial-frame-plist to the frame.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
186 ;; These are now called explicitly at the proper times,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
187 ;; since that is easier to understand.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
188 ;; Actually using hooks within Emacs is bad for future maintenance. --rms.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
189 ;; (add-hook 'before-init-hook 'frame-initialize)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
190 ;; (add-hook 'window-setup-hook 'frame-notice-user-settings)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
191
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
192 ;; If we create the initial frame, this is it.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 (defvar frame-initial-frame nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 ;; Record the properties used in frame-initialize to make the initial frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 (defvar frame-initial-frame-plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 (defvar frame-initial-geometry-arguments nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
200 ;; XEmacs addition
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 (defun canonicalize-frame-plists ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 (setq initial-frame-plist (safe-alist-to-plist initial-frame-plist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 (setq default-frame-plist (safe-alist-to-plist default-frame-plist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
205 ;; startup.el calls this function before loading the user's init
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
206 ;; file - if there is no frame with a minibuffer open now, create
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
207 ;; one to display messages while loading the init file.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 (defun frame-initialize ()
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
209 "Create an initial frame if necessary."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 ;; In batch mode, we actually use the initial terminal device for output.
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
211 ;; XEmacs addition
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 (canonicalize-frame-plists)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
213
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 (if (not (noninteractive))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 (progn
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
216 ;; Turn on special-display processing only if there's a window system.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
217 (setq special-display-function 'special-display-popup-frame)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 ;; If there is no frame with a minibuffer besides the terminal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 ;; frame, then we need to create the opening frame. Make sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 ;; it has a minibuffer, but let initial-frame-plist omit the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 ;; minibuffer spec.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 (or (delq terminal-frame (minibuffer-frame-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 (setq frame-initial-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 (append initial-frame-plist default-frame-plist))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
227 ;; XEmacs change: omit the scrollbar settings
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
228 ; (or (assq 'horizontal-scroll-bars frame-initial-frame-alist)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
229 ; (setq frame-initial-frame-alist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
230 ; (cons '(horizontal-scroll-bars . t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
231 ; frame-initial-frame-alist)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 (setq default-minibuffer-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 (setq frame-initial-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 (make-frame initial-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 (car (delq terminal-device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 (device-list))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 ;; Delete any specifications for window geometry properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 ;; so that we won't reapply them in frame-notice-user-settings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 ;; It would be wrong to reapply them then,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 ;; because that would override explicit user resizing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 (setq initial-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 (frame-remove-geometry-props initial-frame-plist))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 ;; At this point, we know that we have a frame open, so we
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
244 ;; can delete the terminal frame.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
245 ;; XEmacs change: Do it the same way Fkill_emacs does it. -slb
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 (delete-console terminal-console)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
247 (setq terminal-frame nil))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
249 ;; XEmacs change: omit the pc window-system stuff.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
250 ; ;; No, we're not running a window system. Use make-terminal-frame if
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
251 ; ;; we support that feature, otherwise arrange to cause errors.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
252 ; (or (eq window-system 'pc)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
253 ; (setq frame-creation-function
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
254 ; (if (fboundp 'tty-create-frame-with-faces)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
255 ; 'tty-create-frame-with-faces
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
256 ; (function
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
257 ; (lambda (parameters)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
258 ; (error
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
259 ; "Can't create multiple frames without a window system"))))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
260 ))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
261
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
262 (defvar frame-notice-user-settings t
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
263 "Non-nil means function `frame-notice-user-settings' wasn't run yet.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
265 ;; startup.el calls this function after loading the user's init
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
266 ;; file. Now default-frame-plist and initial-frame-plist contain
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
267 ;; information to which we must react; do what needs to be done.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 (defun frame-notice-user-settings ()
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
269 "Act on user's init file settings of frame parameters.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
270 React to settings of `default-frame-plist', `initial-frame-plist' there."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
271 ;; XEmacs addition
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
272 (canonicalize-frame-plists)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
274 ;; XEmacs change: omit menu-bar manipulations.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
275 ; ;; Make menu-bar-mode and default-frame-alist consistent.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
276 ; (when (boundp 'menu-bar-mode)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
277 ; (let ((default (assq 'menu-bar-lines default-frame-alist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
278 ; (if default
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
279 ; (setq menu-bar-mode (not (eq (cdr default) 0)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
280 ; (setq default-frame-alist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
281 ; (cons (cons 'menu-bar-lines (if menu-bar-mode 1 0))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
282 ; default-frame-alist)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
284 ;; XEmacs change: omit tool-bar manipulations.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
285 ; ;; Make tool-bar-mode and default-frame-alist consistent. Don't do
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
286 ; ;; it in batch mode since that would leave a tool-bar-lines
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
287 ; ;; parameter in default-frame-alist in a dumped Emacs, which is not
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
288 ; ;; what we want.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
289 ; (when (and (boundp 'tool-bar-mode)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
290 ; (not noninteractive))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
291 ; (let ((default (assq 'tool-bar-lines default-frame-alist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
292 ; (if default
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
293 ; (setq tool-bar-mode (not (eq (cdr default) 0)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
294 ; (setq default-frame-alist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
295 ; (cons (cons 'tool-bar-lines (if tool-bar-mode 1 0))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
296 ; default-frame-alist)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 ;; Creating and deleting frames may shift the selected frame around,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 ;; and thus the current buffer. Protect against that. We don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 ;; want to use save-excursion here, because that may also try to set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 ;; the buffer of the selected window, which fails when the selected
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 ;; window is the minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 (let ((old-buffer (current-buffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
305 ;; XEmacs change: omit special handling for MS-DOS
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
306 ; (when (and frame-notice-user-settings
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
307 ; (null frame-initial-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
308 ; ;; This case happens when we don't have a window system, and
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
309 ; ;; also for MS-DOS frames.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
310 ; (let ((parms (frame-parameters frame-initial-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
311 ; ;; Don't change the frame names.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
312 ; (setq parms (delq (assq 'name parms) parms))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
313 ; ;; Can't modify the minibuffer parameter, so don't try.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
314 ; (setq parms (delq (assq 'minibuffer parms) parms))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
315 ; (modify-frame-parameters nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
316 ; (if (null window-system)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
317 ; (append initial-frame-alist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
318 ; default-frame-alist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
319 ; parms
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
320 ; nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
321 ; ;; initial-frame-alist and
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
322 ; ;; default-frame-alist were already
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
323 ; ;; applied in pc-win.el.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
324 ; parms))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
325 ; (if (null window-system) ;; MS-DOS does this differently in pc-win.el
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
326 ; (let ((newparms (frame-parameters))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
327 ; (frame (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
328 ; (tty-handle-reverse-video frame newparms)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
329 ; ;; If we changed the background color, we need to update
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
330 ; ;; the background-mode parameter, and maybe some faces,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
331 ; ;; too.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
332 ; (when (assq 'background-color newparms)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
333 ; (unless (or (assq 'background-mode initial-frame-alist)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
334 ; (assq 'background-mode default-frame-alist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
335 ; (frame-set-background-mode frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
336 ; (face-set-after-frame-default frame))))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
337
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 ;; If the initial frame is still around, apply initial-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 ;; and default-frame-plist to it.
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
340 (when (frame-live-p frame-initial-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
341
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
342 ;; XEmacs change: omit the tool-bar manipulations
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
343 ; ;; When tool-bar has been switched off, correct the frame size
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
344 ; ;; by the lines added in x-create-frame for the tool-bar and
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
345 ; ;; switch `tool-bar-mode' off.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
346 ; (when (display-graphic-p)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
347 ; (let ((tool-bar-lines (or (assq 'tool-bar-lines initial-frame-alist)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
348 ; (assq 'tool-bar-lines default-frame-alist))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
349 ; (when (and tool-bar-originally-present
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
350 ; (or (null tool-bar-lines)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
351 ; (null (cdr tool-bar-lines))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
352 ; (eq 0 (cdr tool-bar-lines))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
353 ; (let* ((char-height (frame-char-height frame-initial-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
354 ; (image-height tool-bar-images-pixel-height)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
355 ; (margin (cond ((and (consp tool-bar-button-margin)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
356 ; (integerp (cdr tool-bar-button-margin))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
357 ; (> tool-bar-button-margin 0))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
358 ; (cdr tool-bar-button-margin))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
359 ; ((and (integerp tool-bar-button-margin)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
360 ; (> tool-bar-button-margin 0))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
361 ; tool-bar-button-margin)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
362 ; (t 0)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
363 ; (relief (if (and (integerp tool-bar-button-relief)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
364 ; (> tool-bar-button-relief 0))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
365 ; tool-bar-button-relief 3))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
366 ; (lines (/ (+ image-height
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
367 ; (* 2 margin)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
368 ; (* 2 relief)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
369 ; (1- char-height))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
370 ; char-height))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
371 ; (height (frame-parameter frame-initial-frame 'height))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
372 ; (newparms (list (cons 'height (- height lines))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
373 ; (initial-top (cdr (assq 'top
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
374 ; frame-initial-geometry-arguments)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
375 ; (top (frame-parameter frame-initial-frame 'top)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
376 ; (when (and (consp initial-top) (eq '- (car initial-top)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
377 ; (let ((adjusted-top
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
378 ; (cond ((and (consp top)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
379 ; (eq '+ (car top)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
380 ; (list '+
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
381 ; (+ (cadr top)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
382 ; (* lines char-height))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
383 ; ((and (consp top)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
384 ; (eq '- (car top)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
385 ; (list '-
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
386 ; (- (cadr top)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
387 ; (* lines char-height))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
388 ; (t (+ top (* lines char-height))))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
389 ; (setq newparms
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
390 ; (append newparms
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
391 ; `((top . ,adjusted-top))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
392 ; nil))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
393 ; (modify-frame-parameters frame-initial-frame newparms)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
394 ; (tool-bar-mode -1)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 ;; The initial frame we create above always has a minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 ;; If the user wants to remove it, or make it a minibuffer-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 ;; frame, then we'll have to delete the selected frame and make a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 ;; new one; you can't remove or add a root window to/from an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 ;; existing frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 ;; NOTE: default-frame-plist was nil when we created the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 ;; existing frame. We need to explicitly include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 ;; default-frame-plist in the properties of the screen we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 ;; create here, so that its new value, gleaned from the user's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 ;; .emacs file, will be applied to the existing screen.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 (if (not (eq (car
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 (or (and (lax-plist-member
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 initial-frame-plist 'minibuffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 (list (lax-plist-get initial-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 'minibuffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 (and (lax-plist-member default-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 'minibuffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 (list (lax-plist-get default-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 'minibuffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 '(t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 ;; Create the new frame.
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
419 (let (props ;new
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
420 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 ;; If the frame isn't visible yet, wait till it is.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 ;; If the user has to position the window,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 ;; Emacs doesn't know its real position until
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 ;; the frame is seen to be visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
426 ;; XEmacs change: check the initially-unmapped property
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 (if (frame-property frame-initial-frame 'initially-unmapped)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 (while (not (frame-visible-p frame-initial-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 (sleep-for 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 (setq props (frame-properties frame-initial-frame))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
432
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 ;; Get rid of `name' unless it was specified explicitly before.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 (or (lax-plist-member frame-initial-frame-plist 'name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 (setq props (lax-plist-remprop props 'name)))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
436
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
437 (setq props (append initial-frame-plist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
438 default-frame-plist
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 props
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 nil))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
441
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 ;; Get rid of `reverse', because that was handled
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 ;; when we first made the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 (laxputf props 'reverse nil)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
445
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
446 ;; XEmacs addition: Get rid of `window-id', otherwise make-frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
447 ;; will think we're trying to setup an external widget.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 (laxremf props 'window-id)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
449
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 (if (lax-plist-member frame-initial-geometry-arguments 'height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 (laxremf props 'height))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 (if (lax-plist-member frame-initial-geometry-arguments 'width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 (laxremf props 'width))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 (if (lax-plist-member frame-initial-geometry-arguments 'left)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 (laxremf props 'left))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 (if (lax-plist-member frame-initial-geometry-arguments 'top)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 (laxremf props 'top))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 ;; Now create the replacement initial frame.
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
459 ;(setq new
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
460 (make-frame
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
461 ;; Use the geometry args that created the existing
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
462 ;; frame, rather than the props we get for it.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
463 (append '(user-size t user-position t)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
464 frame-initial-geometry-arguments
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
465 props))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
466 ;)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 ;; The initial frame, which we are about to delete, may be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 ;; the only frame with a minibuffer. If it is, create a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 ;; new one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 (or (delq frame-initial-frame (minibuffer-frame-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 (make-initial-minibuffer-frame nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 ;; If the initial frame is serving as a surrogate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 ;; minibuffer frame for any frames, we need to wean them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 ;; onto a new frame. The default-minibuffer-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 ;; variable must be handled similarly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 (let ((users-of-initial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 (filtered-frame-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 #'(lambda (frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 (and (not (eq frame frame-initial-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 (eq (window-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 (minibuffer-window frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 frame-initial-frame))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 (if (or users-of-initial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 (eq default-minibuffer-frame frame-initial-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 ;; Choose an appropriate frame. Prefer frames which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 ;; are only minibuffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 (let* ((new-surrogate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 (car
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 (or (filtered-frame-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 #'(lambda (frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 (eq 'only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 (frame-property frame 'minibuffer))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 (minibuffer-frame-list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 (new-minibuffer (minibuffer-window new-surrogate)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 (if (eq default-minibuffer-frame frame-initial-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 (setq default-minibuffer-frame new-surrogate))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 ;; Wean the frames using frame-initial-frame as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 ;; their minibuffer frame.
4783
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
503 (mapc
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
504 #'(lambda (frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
505 (set-frame-property frame 'minibuffer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
506 new-minibuffer))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
507 users-of-initial))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 ;; Redirect events enqueued at this frame to the new frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 ;; Is this a good idea?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 ;; Probably not, since this whole redirect-frame-focus
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 ;; stuff is a load of trash, and so is this function we're in.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 ;; --ben
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 ;(redirect-frame-focus frame-initial-frame new)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 ;; Finally, get rid of the old frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 (delete-frame frame-initial-frame t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 ;; Otherwise, we don't need all that rigamarole; just apply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 ;; the new properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 (let (newprops allprops tail)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 (setq allprops (append initial-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 default-frame-plist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 (if (lax-plist-member frame-initial-geometry-arguments 'height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 (laxremf allprops 'height))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 (if (lax-plist-member frame-initial-geometry-arguments 'width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 (remf allprops 'width))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 (if (lax-plist-member frame-initial-geometry-arguments 'left)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 (laxremf allprops 'left))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 (if (lax-plist-member frame-initial-geometry-arguments 'top)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 (laxremf allprops 'top))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 (setq tail allprops)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 ;; Find just the props that have changed since we first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 ;; made this frame. Those are the ones actually set by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 ;; the init file. For those props whose values we already knew
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 ;; (such as those spec'd by command line options)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 ;; it is undesirable to specify the parm again
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 ;; once the user has seen the frame and been able to alter it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 ;; manually.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 (while tail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 (let (newval oldval)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 (setq oldval (lax-plist-get frame-initial-frame-plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 (car tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 (setq newval (lax-plist-get allprops (car tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 (or (eq oldval newval)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 (laxputf newprops (car tail) newval)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 (setq tail (cddr tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 (set-frame-properties frame-initial-frame newprops)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
549 ;; XEmacs change: omit the background manipulation
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
550 ; ;; If we changed the background color,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
551 ; ;; we need to update the background-mode parameter
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
552 ; ;; and maybe some faces too.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
553 ; (when (assq 'background-color newparms)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
554 ; (unless (assq 'background-mode newparms)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
555 ; (frame-set-background-mode frame-initial-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
556 ; (face-set-after-frame-default frame-initial-frame)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 )))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 ;; Restore the original buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 (set-buffer old-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 ;; Make sure the initial frame can be GC'd if it is ever deleted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 ;; Make sure frame-notice-user-settings does nothing if called twice.
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
564 (setq frame-notice-user-settings nil)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 (setq frame-initial-frame nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 (defun make-initial-minibuffer-frame (device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 (let ((props (append '(minibuffer only)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 (safe-alist-to-plist minibuffer-frame-plist))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 (make-frame props device)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 ;;;; Creation of additional frames, and other frame miscellanea
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
575 (defun modify-all-frames-properties (plist)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
576 "Modify all current and future frames' parameters according to PLIST.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
577 This changes `default-frame-plist' and possibly `initial-frame-plist'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
578 See `set-frame-properties' for more information."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
579 (dolist (frame (frame-list))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
580 (set-frame-properties frame plist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
581
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
582 ;; XEmacs change: iterate over plists instead of alists
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
583 (map-plist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
584 #'(lambda (prop val)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
585 ;; initial-frame-plist needs setting only when
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
586 ;; frame-notice-user-settings is true
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
587 (and frame-notice-user-settings
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
588 (lax-plist-remprop initial-frame-plist prop))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
589 (lax-plist-remprop default-frame-plist prop))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
590 plist)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
591
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
592 (and frame-notice-user-settings
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
593 (setq initial-frame-plist (append initial-frame-plist plist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
594 (setq default-frame-plist (append default-frame-plist plist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
595
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 (defun get-other-frame ()
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
597 "Return some frame other than the current frame.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
598 Create one if necessary. Note that the minibuffer frame, if separate,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
599 is not considered (see `next-frame')."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 (let* ((this (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 ;; search visible frames first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 (next (next-frame this 'visible-nomini)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 ;; then search iconified frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 (if (eq this next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 (setq next (next-frame 'visible-iconic-nomini)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 (if (eq this next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 ;; otherwise, make a new frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 (make-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 next)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 (defun next-multiframe-window ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 "Select the next window, regardless of which frame it is on."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 (select-window (next-window (selected-window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 (> (minibuffer-depth) 0)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
616 t))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
617 ;; XEmacs change: select-window already selects the containing frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
618 ;(select-frame-set-input-focus (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
619 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 (defun previous-multiframe-window ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 "Select the previous window, regardless of which frame it is on."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 (select-window (previous-window (selected-window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 (> (minibuffer-depth) 0)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
626 t))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
627 ;; XEmacs change: select-window already selects the containing frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
628 ;(select-frame-set-input-focus (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
629 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
631 ;; XEmacs change: Emacs has make-frame-on-display
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 (defun make-frame-on-device (type connection &optional props)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 "Create a frame of type TYPE on CONNECTION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 TYPE should be a symbol naming the device type, i.e. one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 x An X display. CONNECTION should be a standard display string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 such as \"unix:0\", or nil for the display specified on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 command line or in the DISPLAY environment variable. Only if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 support for X was compiled into XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 tty A standard TTY connection or terminal. CONNECTION should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 a TTY device name such as \"/dev/ttyp2\" (as determined by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 the Unix command `tty') or nil for XEmacs' standard input
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 and output (usually the TTY in which XEmacs started). Only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 if support for TTY's was compiled into XEmacs.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
645 gtk A GTK device.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 mswindows A connection to a machine running Microsoft Windows NT or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 Windows 95/97.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 pc A direct-write MS-DOS frame. Not currently implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 PROPS should be a plist of properties, as in the call to `make-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 If a connection to CONNECTION already exists, it is reused; otherwise,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 a new connection is opened."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 (make-frame props (make-device type connection props)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
656 ;; XEmacs omission: Emacs has make-frame-command here, but it reduces to
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
657 ;; make-frame for us.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
658
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
659 ;; XEmacs omission: the following 2 variables are not yet implemented.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
660 ;(defvar before-make-frame-hook nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
661 ; "Functions to run before a frame is created.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
662 ;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
663 ;(defvar after-make-frame-functions nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
664 ; "Functions to run after a frame is created.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
665 ;The functions are run with one arg, the newly created frame.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
666 ;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
667 (defvar after-setting-font-hook nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
668 "Functions to run after a frame's font has been changed.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
669
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 ;; Alias, kept temporarily.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 (defalias 'new-frame 'make-frame)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
672 (make-obsolete 'new-frame 'make-frame)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
674 ;; XEmacs change: Emacs has make-frame here. We have it in C, so no need for
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
675 ;; frame-creation-function.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
677 ;; XEmacs addition: support optional DEVICE argument.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 (defun filtered-frame-list (predicate &optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 "Return a list of all live frames which satisfy PREDICATE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 If optional second arg DEVICE is non-nil, restrict the frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 returned to that device."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 (let ((frames (if device (device-frame-list device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 (frame-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 good-frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 (while (consp frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 (if (funcall predicate (car frames))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 (setq good-frames (cons (car frames) good-frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 (setq frames (cdr frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 good-frames))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
691 ;; XEmacs addition: support optional DEVICE argument.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 (defun minibuffer-frame-list (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 "Return a list of all frames with their own minibuffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 If optional second arg DEVICE is non-nil, restrict the frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 returned to that device."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 (filtered-frame-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 #'(lambda (frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 (eq frame (window-frame (minibuffer-window frame))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
701 ;; XEmacs omission: Emacs has frames-on-display-list here, but that is
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
702 ;; essentially equivalent to supplying the optional DEVICE argument to
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
703 ;; filtered-frame-list.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
704
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
705 ;; XEmacs addition: the following two functions make life a lot simpler below.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
706 (defsubst display-frame (display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
707 "Return the active frame for DISPLAY.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
708 DISPLAY may be a frame, a device, or a console. If it is omitted or nil,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
709 it defaults to the selected frame."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
710 (cond
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
711 ((null display) (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
712 ((framep display) display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
713 ((devicep display) (selected-frame display))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
714 ((consolep display) (selected-frame (car (console-device-list display))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
715 (t (error 'wrong-type-argument "Not a frame, device, or console" display))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
716
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
717 (defsubst display-device (display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
718 "Return the device for DISPLAY.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
719 DISPLAY may be a frame, a device, or a console. If it is omitted or nil,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
720 it defaults to the selected frame."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
721 (cond
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
722 ((null display) (selected-device))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
723 ((framep display) (frame-device display))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
724 ((devicep display) display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
725 ((consolep display) (car (console-device-list display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
726 (t (error 'wrong-type-argument "Not a frame, device, or console" display))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
727
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
728 ;; Emacs compatibility function. We do not allow display names of the type
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
729 ;; HOST:SERVER.SCREEN as Emacs does, but we do handle devices and consoles.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
730 (defun framep-on-display (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
731 "Return the type of frames on DISPLAY.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
732 DISPLAY may be a frame, a device, or a console. If it is a frame, its type
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
733 is returned. If DISPLAY is omitted or nil, it defaults to the selected
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
734 frame. All frames on a given device or console are of the same type."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
735 (cond
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
736 ((null display) (frame-type (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
737 ((framep display) (frame-type display))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
738 ((devicep display) (device-type display))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
739 ((consolep display) (console-type display))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
740 (t (error 'wrong-type-argument "Not a frame, device, or console" display))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
741
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
742 ;; XEmacs addition: Emacs does not have this function.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 (defun frame-minibuffer-only-p (frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 "Return non-nil if FRAME is a minibuffer-only frame."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 (eq (frame-root-window frame) (minibuffer-window frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 (defun frame-remove-geometry-props (plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 "Return the property list PLIST, but with geometry specs removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 This deletes all bindings in PLIST for `top', `left', `width',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 `height', `user-size' and `user-position' properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 Emacs uses this to avoid overriding explicit moves and resizings from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 the user during startup."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 (setq plist (canonicalize-lax-plist (copy-sequence plist)))
4783
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
754 (mapc #'(lambda (property)
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
755 (if (lax-plist-member plist property)
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
756 (progn
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
757 (setq frame-initial-geometry-arguments
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
758 (cons property
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
759 (cons (lax-plist-get plist property)
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
760 frame-initial-geometry-arguments)))
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
761 (setq plist (lax-plist-remprop plist property)))))
e29fcfd8df5f Eliminate most core code byte-compile warnings.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4759
diff changeset
762 '(height width top left user-size user-position))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
765 ;; XEmacs change: Emacs has focus-follows-mouse here, which lets them
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
766 ;; Customize it. XEmacs has it builtin. Should that change?
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
767
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
768 ;; XEmacs change: we have focus-frame instead of multiple foo-focus-frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
769 ;; functions.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
770 (defun select-frame-set-input-focus (frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
771 "Select FRAME, raise it, and set input focus, if possible."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
772 (raise-frame frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
773 (focus-frame frame) ;; This also selects FRAME
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
774 ;; XEmacs change: This is a bad idea; you should in general never warp the
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
775 ;; pointer unless the user asks for it.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
776 ;;(if focus-follows-mouse
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
777 ;; (set-mouse-position (selected-window) (1- (frame-width frame)) 0)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
778 )
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
779
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 (defun other-frame (arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 "Select the ARG'th different visible frame, and raise it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 All frames are arranged in a cyclic order.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 This command selects the frame ARG steps away in that order.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 A negative ARG moves in the opposite order.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
786 To make this command work properly, you must tell Emacs
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
787 how the system (or the window manager) generally handles
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
788 focus-switching between windows. If moving the mouse onto a window
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
789 selects it (gives it focus), set `focus-follows-mouse' to t.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
790 Otherwise, that variable should be nil."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 (interactive "p")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 (let ((frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 (while (> arg 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 (setq frame (next-frame frame 'visible-nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 (setq arg (1- arg)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 (while (< arg 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 (setq frame (previous-frame frame 'visible-nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 (setq arg (1+ arg)))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
799 (select-frame-set-input-focus frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
800
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
801 (defun iconify-or-deiconify-frame ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
802 "Iconify the selected frame, or deiconify if it's currently an icon."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
803 (interactive)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
804 (if (lax-plist-get (frame-properties) 'visibility)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
805 (iconify-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
806 (make-frame-visible)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
807
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
808 (defun make-frame-names-alist ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
809 (let* ((current-frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
810 (falist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
811 (cons
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
812 (cons (frame-property current-frame 'name) current-frame) nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
813 (frame (next-frame current-frame t)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
814 (while (not (eq frame current-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
815 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
816 (setq falist (cons (cons (frame-property frame 'name) frame) falist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
817 (setq frame (next-frame frame t))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
818 falist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
819
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
820 (defvar frame-name-history nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
821 (defun select-frame-by-name (name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
822 "Select the frame on the current terminal whose name is NAME and raise it.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
823 If there is no frame by that name, signal an error."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
824 (interactive
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
825 (let* ((frame-names-alist (make-frame-names-alist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
826 (default (car (car frame-names-alist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
827 (input (completing-read
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
828 (format "Select Frame (default %s): " default)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
829 frame-names-alist nil t nil 'frame-name-history default)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
830 ;; XEmacs change: use the last param of completing-read to simplify.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
831 (list input)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
832 (let* ((frame-names-alist (make-frame-names-alist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
833 (frame (cdr (assoc name frame-names-alist))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
834 (or frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
835 (error "There is no frame named `%s'" name))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
836 (make-frame-visible frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
837 ;; XEmacs change: make-frame-visible implies (raise-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
838 ;; (raise-frame frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
839 ;; XEmacs change: we defined this function, might as well use it.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
840 (select-frame-set-input-focus frame)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 ;; XEmacs-added utility functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 (defmacro save-selected-frame (&rest body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 "Execute forms in BODY, then restore the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 The value returned is the value of the last form in BODY."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 (let ((old-frame (gensym "ssf")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 `(let ((,old-frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 (progn ,@body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 (select-frame ,old-frame)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 (defmacro with-selected-frame (frame &rest body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 "Execute forms in BODY with FRAME as the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 The value returned is the value of the last form in BODY."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 `(save-selected-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 (select-frame ,frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 ,@body))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
860 ; This is in C in Emacs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 (defun frame-list ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 "Return a list of all frames on all devices/consoles."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 ;; Lists are copies, so nconc is safe here.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 (apply 'nconc (mapcar 'device-frame-list (device-list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 (defun frame-type (&optional frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 "Return the type of the specified frame (e.g. `x' or `tty').
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 This is equivalent to the type of the frame's device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 Value is `tty' for a tty frame (a character-only terminal),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 `x' for a frame that is an X window,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
871 `mswindows' for a frame that is a MS Windows desktop window,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
872 `msprinter' for a frame that is a MS Windows print job,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 `stream' for a stream frame (which acts like a stdio stream), and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 `dead' for a deleted frame."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 (or frame (setq frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 (if (not (frame-live-p frame)) 'dead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 (device-type (frame-device frame))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 (defun device-or-frame-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 "Return non-nil if OBJECT is a device or frame."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 (or (devicep object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 (framep object)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 (defun device-or-frame-type (device-or-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 "Return the type (e.g. `x' or `tty') of DEVICE-OR-FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 DEVICE-OR-FRAME should be a device or a frame object. See `device-type'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 for a description of the possible types."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 (if (devicep device-or-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 (device-type device-or-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 (frame-type device-or-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 (defun fw-frame (obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 "Given a frame or window, return the associated frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 Return nil otherwise."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 (cond ((windowp obj) (window-frame obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 ((framep obj) obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 (t nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 ;;;; Frame configurations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 (defun current-frame-configuration ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 "Return a list describing the positions and states of all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 Its car is `frame-configuration'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 Each element of the cdr is a list of the form (FRAME PLIST WINDOW-CONFIG),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 FRAME is a frame object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 PLIST is a property list specifying some of FRAME's properties, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 WINDOW-CONFIG is a window configuration object for FRAME."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 (cons 'frame-configuration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 (mapcar (function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 (lambda (frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 (list frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 (frame-properties frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 (current-window-configuration frame))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 (frame-list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 (defun set-frame-configuration (configuration &optional nodelete)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 "Restore the frames to the state described by CONFIGURATION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 Each frame listed in CONFIGURATION has its position, size, window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 configuration, and other properties set as specified in CONFIGURATION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 Ordinarily, this function deletes all existing frames not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 listed in CONFIGURATION. But if optional second argument NODELETE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 is given and non-nil, the unwanted frames are iconified instead."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 (or (frame-configuration-p configuration)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 (signal 'wrong-type-argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 (list 'frame-configuration-p configuration)))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
928 (let ((config-alist (cdr configuration))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 frames-to-delete)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
930 (mapc #'(lambda (frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
931 (let ((properties (assq frame config-alist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
932 (if properties
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
933 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
934 (set-frame-properties
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
935 frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
936 ;; Since we can't set a frame's minibuffer status,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
937 ;; we might as well omit the parameter altogether.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
938 (lax-plist-remprop (nth 1 properties) 'minibuffer))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
939 (set-window-configuration (nth 2 properties)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
940 (setq frames-to-delete (cons frame frames-to-delete)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 (frame-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 (if nodelete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 ;; Note: making frames invisible here was tried
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 ;; but led to some strange behavior--each time the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 ;; was made visible again, the window manager asked afresh
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 ;; for where to put it.
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
947 (mapc #'iconify-frame frames-to-delete)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
948 (mapc #'delete-frame frames-to-delete))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
950 ; XEmacs change: this function is in subr.el in Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
951 ; That's because they don't always include frame.el, while we do.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 (defun frame-configuration-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 "Return non-nil if OBJECT seems to be a frame configuration.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 Any list whose car is `frame-configuration' is assumed to be a frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 configuration."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 (and (consp object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 (eq (car object) 'frame-configuration)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
961 ;;;; Convenience functions for accessing and interactively changing
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
962 ;;;; frame parameters.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
963
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
964 (defun frame-height (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
965 "Return number of lines available for display on FRAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
966 If FRAME is omitted, describe the currently selected frame."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
967 (frame-property frame 'height))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
968
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
969 (defun frame-width (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
970 "Return number of columns available for display on FRAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
971 If FRAME is omitted, describe the currently selected frame."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
972 (frame-property frame 'width))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
973
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
974 (defalias 'set-default-font 'set-frame-font)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
975
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
976 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
977 (defun set-frame-font (font-name &optional keep-size)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
978 "Set the font of the selected frame to FONT-NAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
979 When called interactively, prompt for the name of the font to use.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
980 To get the frame's current default font, use `(face-font-name 'default)'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
981
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
982 The default behavior is to keep the numbers of lines and columns in
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
983 the frame, thus may change its pixel size. If optional KEEP-SIZE is
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
984 non-nil (interactively, prefix argument) the current frame size (in
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
985 pixels) is kept by adjusting the numbers of the lines and columns."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
986 (interactive
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
987 (let* ((frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
988 (completion-ignore-case t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
989 (font (completing-read "Font name: "
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
990 (mapcar #'list
2527
491f8cf78a9c [xemacs-hg @ 2005-01-28 02:58:38 by ben]
ben
parents: 2509
diff changeset
991 (font-list "*" frame))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
992 nil nil nil nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
993 (face-font-name 'default frame))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
994 (list font current-prefix-arg)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
995 (let* ((frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
996 (fht (frame-pixel-height frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
997 (fwd (frame-pixel-width frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
998 (face-list-to-change (face-list)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
999 (when (eq (device-type) 'mswindows)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1000 (setq face-list-to-change
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1001 (delq 'border-glyph face-list-to-change)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1002 ;; FIXME: Is it sufficient to just change the default face, due to
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1003 ;; face inheritance?
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1004 (dolist (face face-list-to-change)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1005 (when (face-font-instance face)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1006 (condition-case c
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1007 (set-face-font face font-name frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1008 (error
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1009 (display-error c nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1010 (sit-for 1)))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1011 (if keep-size
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1012 (set-frame-pixel-size frame fwd fht)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1013 (run-hooks 'after-setting-font-hook))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1014
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1015 (defun set-frame-property (frame prop val)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1016 "Set property PROP of FRAME to VAL. See `set-frame-properties'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1017 (set-frame-properties frame (list prop val)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1018
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1019 (defun set-frame-background-placement (placement)
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1020 "Set the background placement of the selected frame to PLACEMENT.
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1021 When called interactively, prompt for the placement to use."
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1022 (interactive (list (intern (completing-read "Placement: "
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1023 '(("absolute" absolute)
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1024 ("relative" relative))
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1025 nil t))))
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1026 (set-face-background-placement 'default placement (selected-frame)))
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1027
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1028 (defun frame-background-placement ()
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1029 "Retrieve the selected frame's background placement."
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1030 (interactive)
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1031 (face-background-placement 'default (selected-frame)))
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1032
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1033 (defun frame-background-placement-instance ()
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1034 "Retrieve the selected frame's background placement instance."
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1035 (interactive)
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1036 (face-background-placement-instance 'default (selected-frame)))
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1037
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1038 ;; #### FIXME: misnomers ! The functions below should be called
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1039 ;; set-frame-<blabla> -- dvl.
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4783
diff changeset
1040
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1041 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1042 (defun set-background-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1043 "Set the background color of the selected frame to COLOR-NAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1044 When called interactively, prompt for the name of the color to use.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1045 To get the frame's current background color, use
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1046 `(face-background-name 'default)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1047 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1048 ;; (set-face-foreground 'text-cursor color-name (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1049 (set-face-background 'default color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1050
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1051 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1052 (defun set-foreground-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1053 "Set the foreground color of the selected frame to COLOR-NAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1054 When called interactively, prompt for the name of the color to use.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1055 To get the frame's current foreground color, use
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1056 `(face-foreground-name 'default)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1057 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1058 (set-face-foreground 'default color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1059
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1060 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1061 (defun set-cursor-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1062 "Set the text cursor color of the selected frame to COLOR-NAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1063 When called interactively, prompt for the name of the color to use.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1064 To get the frame's current cursor color, use
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1065 '(face-background-name 'text-cursor)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1066 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1067 (set-face-background 'text-cursor color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1068
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1069 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1070 (defun set-mouse-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1071 "Set the color of the mouse pointer of the selected frame to COLOR-NAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1072 When called interactively, prompt for the name of the color to use.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1073 To get the frame's current mouse color, use
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1074 `(face-foreground-name 'pointer)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1075 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1076 (set-face-foreground 'pointer color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1077
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1078 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1079 (defun set-border-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1080 "Set the color of the border of the selected frame to COLOR-NAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1081 When called interactively, prompt for the name of the color to use.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1082 To get the frame's current border color, use
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1083 `(face-foreground-name 'border-glyph)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1084 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1085 (set-face-foreground 'border-glyph color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1086
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1087 ;;; BEGIN XEmacs addition
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1088 ;;; This is the traditional XEmacs auto-raise and auto-lower, which applies
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1089 ;;; to all frames.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1090
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1091 (defcustom auto-raise-frame nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1092 "*If true, frames will be raised to the top when selected.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1093 Under X, most ICCCM-compliant window managers will have an option to do this
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1094 for you, but this variable is provided in case you're using a broken WM."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1095 :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1096 :group 'frames)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1097
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1098 (defcustom auto-lower-frame nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1099 "*If true, frames will be lowered to the bottom when no longer selected.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1100 Under X, most ICCCM-compliant window managers will have an option to do this
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1101 for you, but this variable is provided in case you're using a broken WM."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1102 :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1103 :group 'frames)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1104
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1105 (defun default-select-frame-hook ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1106 "Implement the `auto-raise-frame' variable.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1107 For use as the value of `select-frame-hook'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1108 (if auto-raise-frame (raise-frame (selected-frame))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1110 (defun default-deselect-frame-hook ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1111 "Implement the `auto-lower-frame' variable.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1112 For use as the value of `deselect-frame-hook'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1113 (if auto-lower-frame (lower-frame (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1114 (highlight-extent nil nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1115
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1116 (or select-frame-hook
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1117 (add-hook 'select-frame-hook 'default-select-frame-hook))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1118
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1119 (or deselect-frame-hook
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1120 (add-hook 'deselect-frame-hook 'default-deselect-frame-hook))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1121
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1122 ;;; END XEmacs addition
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1123 ;;; Following is the Emacs auto-raise/auto-lower interface, which lets the
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1124 ;;; user select individual frames to auto-raise and auto-lower
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1125
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1126 ;; XEmacs addition: the next two variables do not appear in Emacs
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1127 (defvar auto-raise-specifier (make-boolean-specifier auto-raise-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1128 "Specifier that determines which frames should auto-raise.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1129 A value of `t' means that a frame auto-raises; `nil' means it does not.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1130
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1131 (defvar auto-lower-specifier (make-boolean-specifier auto-lower-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1132 "Specifier that determines which frames should auto-lower.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1133 A value of `t' means that a frame auto-lowers; `nil' means it does not.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1134
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1135 ;; XEmacs change: use specifiers instead of frame-parameters
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1136 (defun auto-raise-mode (arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1137 "Toggle whether or not the selected frame should auto-raise.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1138 With arg, turn auto-raise mode on if and only if arg is positive.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1139 Note that this controls Emacs's own auto-raise feature.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1140 Some window managers allow you to enable auto-raise for certain windows.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1141 You can use that for Emacs windows if you wish, but if you do,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1142 that is beyond the control of Emacs and this command has no effect on it."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1143 (interactive "P")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1144 (if (null arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1145 (setq arg
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1146 (if (specifier-instance auto-raise-specifier (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1147 -1 1)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1148 (if (> arg 0)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1149 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1150 (raise-frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1151 (add-hook 'select-frame-hook 'default-select-frame-hook))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1152 (set-specifier auto-raise-specifier (> arg 0) (selected-frame))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1153
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1154 ;; XEmacs change: use specifiers instead of frame-parameters
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1155 (defun auto-lower-mode (arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1156 "Toggle whether or not the selected frame should auto-lower.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1157 With arg, turn auto-lower mode on if and only if arg is positive.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1158 Note that this controls Emacs's own auto-lower feature.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1159 Some window managers allow you to enable auto-lower for certain windows.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1160 You can use that for Emacs windows if you wish, but if you do,
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1161 that is beyond the control of Emacs and this command has no effect on it."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1162 (interactive "P")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1163 (if (null arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1164 (setq arg
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1165 (if (specifier-instance auto-lower-specifier (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1166 -1 1)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1167 (if (> arg 0)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1168 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1169 (lower-frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1170 (add-hook 'deselect-frame-hook 'default-deselect-frame-hook))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1171 (set-specifier auto-lower-specifier (> arg 0) (selected-frame))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1173 ;; XEmacs omission: XEmacs does not support changing the frame name
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1174 ;(defun set-frame-name (name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1175 ; "Set the name of the selected frame to NAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1176 ;When called interactively, prompt for the name of the frame.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1177 ;The frame name is displayed on the modeline if the terminal displays only
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1178 ;one frame, otherwise the name is displayed on the frame's caption bar."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1179 ; (interactive "sFrame name: ")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1180 ; (modify-frame-parameters (selected-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1181 ; (list (cons 'name name))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1182
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1183 ;; XEmacs omission: XEmacs attaches scrollbars to windows, not frames.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1184 ;; See window-hscroll and ... what? window-start?
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1185 ;(defun frame-current-scroll-bars (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1186 ; "Return the current scroll-bar settings in frame FRAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1187 ;Value is a cons (VERTICAL . HORISONTAL) where VERTICAL specifies the
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1188 ;current location of the vertical scroll-bars (left, right, or nil),
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1189 ;and HORISONTAL specifies the current location of the horisontal scroll
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1190 ;bars (top, bottom, or nil)."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1191 ; (let ((vert (frame-parameter frame 'vertical-scroll-bars))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1192 ; (hor nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1193 ; (unless (memq vert '(left right nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1194 ; (setq vert default-frame-scroll-bars))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1195 ; (cons vert hor)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1196
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1197 ;;;; Frame/display capabilities.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1198 (defun display-mouse-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1199 "Return non-nil if DISPLAY has a mouse available.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1200 DISPLAY can be a frame, a device, a console, or nil (meaning the
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1201 selected frame)."
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1202 (let (type)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1203 (setq display (display-device display)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1204 type (device-type display))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1205 (cond
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1206 ((eq 'mswindows type)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1207 (> (declare-boundp mswindows-num-mouse-buttons) 0))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1208 ((device-on-window-system-p display)
4759
aa5ed11f473b Remove support for obsolete systems. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 4689
diff changeset
1209 ;; We assume X, GTK and the rest always have a pointing device.
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1210 t)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1211 ((eq 'tty type)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
1212 (and-fboundp 'gpm-is-supported-p
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1213 (gpm-is-supported-p display)))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1214 (t nil))))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1215
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1216 (defun display-popup-menus-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1217 "Return non-nil if popup menus are supported on DISPLAY.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1218 DISPLAY can be a frame, a device, a console, or nil (meaning the selected
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1219 frame). Support for popup menus requires that the mouse be available."
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1220 (setq display (display-device display))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1221 (and
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1222 (featurep 'menubar)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1223 (device-on-window-system-p display)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1224 (display-mouse-p display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1225
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1226 (defun display-graphic-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1227 "Return non-nil if DISPLAY is a graphic display.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1228 Graphical displays are those which are capable of displaying several
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1229 frames and several different fonts at once. This is true for displays
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1230 that use a window system such as X, and false for text-only terminals.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1231 DISPLAY can be a frame, a device, a console, or nil (meaning the selected
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1232 frame)."
4586
732e3243f2e4 Correct a bug in #'display-graphic-p.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4546
diff changeset
1233 (device-on-window-system-p (display-device display)))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1234
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1235 (defun display-images-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1236 "Return non-nil if DISPLAY can display images.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1237 DISPLAY can be a frame, a device, a console, or nil (meaning the selected
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1238 frame)."
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1239 (and (memq (image-instance-type (specifier-instance
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1240 (glyph-image xemacs-logo)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1241 display))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1242 '(color-pixmap mono-pixmap))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1243 t))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1244
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1245 (defalias 'display-multi-frame-p 'display-graphic-p)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1246 (defalias 'display-multi-font-p 'display-graphic-p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1248 (defun display-selections-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1249 "Return non-nil if DISPLAY supports selections.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1250 A selection is a way to transfer text or other data between programs
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1251 via special system buffers called `selection' or `cut buffer' or
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1252 `clipboard'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1253 DISPLAY can be a frame, a device, a console, or nil (meaning the selected
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1254 frame)."
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1255 (or
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1256 (device-on-window-system-p display)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1257 ;; GPM supports #'get-selection-foreign, but not #'own-selection.
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1258 (and-fboundp 'gpm-is-supported-p
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1259 (gpm-is-supported-p display))))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1260
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1261 (defun display-screens (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1262 "Return the number of screens associated with DISPLAY."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1263 (device-num-screens (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1264
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1265 (defun display-pixel-height (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1266 "Return the height of DISPLAY's screen in pixels.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1267 For character terminals, each character counts as a single pixel."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1268 (device-pixel-height (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1269
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1270 (defun display-pixel-width (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1271 "Return the width of DISPLAY's screen in pixels.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1272 For character terminals, each character counts as a single pixel."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1273 (device-pixel-width (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1274
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1275 (defun display-mm-height (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1276 "Return the height of DISPLAY's screen in millimeters.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1277 If the information is unavailable, value is nil."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1278 (device-mm-height (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1279
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1280 (defun display-mm-width (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1281 "Return the width of DISPLAY's screen in millimeters.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1282 If the information is unavailable, value is nil."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1283 (device-mm-width (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1284
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1285 (defun display-backing-store (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1286 "Return the backing store capability of DISPLAY's screen.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1287 The value may be `always', `when-mapped', `not-useful', or nil if
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1288 the question is inapplicable to a certain kind of display."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1289 (device-backing-store (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1290
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1291 (defun display-save-under (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1292 "Return non-nil if DISPLAY's screen supports the SaveUnder feature."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1293 (device-save-under (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1294
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1295 (defun display-planes (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1296 "Return the number of planes supported by DISPLAY."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1297 (device-bitplanes (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1298
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1299 (defun display-color-cells (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1300 "Return the number of color cells supported by DISPLAY."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1301 (device-color-cells (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1302
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1303 (defun display-visual-class (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1304 "Returns the visual class of DISPLAY.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1305 The value is one of the symbols `static-gray', `gray-scale',
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1306 `static-color', `pseudo-color', `true-color', or `direct-color'."
4546
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1307 (let (type planes)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1308 (setq display (display-device display)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1309 type (device-type display))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1310 (cond
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1311 ((eq 'x type)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1312 (declare-fboundp (x-display-visual-class display)))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1313 ((eq 'gtk type)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1314 (declare-fboundp (gtk-display-visual-class display)))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1315 ((device-on-window-system-p display)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1316 (setq planes (display-planes display))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1317 (cond ((eq planes 1) 'static-gray)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1318 ((eq planes 4) 'static-color)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1319 ((> planes 8) 'true-color)
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1320 (t 'pseudo-color)))
44129f301385 Make functions in frame.el more general.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4506
diff changeset
1321 (t 'static-gray))))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1322
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1323
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1324 ;; XEmacs change: omit the Emacs 18 compatibility functions:
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1325 ;; screen-height, screen-width, set-screen-height, and set-screen-width.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1326
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1327 (defun delete-other-frames (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1328 "Delete all frames except FRAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1329 If FRAME uses another frame's minibuffer, the minibuffer frame is
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1330 left untouched. FRAME nil or omitted means use the selected frame."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1331 (interactive)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1332 (unless frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1333 (setq frame (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1334 (let* ((mini-frame (window-frame (minibuffer-window frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1335 (frames (delq mini-frame (delq frame (frame-list)))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1336 (mapc 'delete-frame frames)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1337
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1338 ;; XEmacs change: we still use delete-frame-hook
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1339 ;; miscellaneous obsolescence declarations
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1340 ;(defvaralias 'delete-frame-hook 'delete-frame-functions)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1341 ;(make-obsolete-variable 'delete-frame-hook 'delete-frame-functions "21.4")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1342
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1343
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1344 ;; Highlighting trailing whitespace.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1345 ;; XEmacs omission: this functionality is provided by whitespace-mode in the
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1346 ;; text-modes package.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1347
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1348 ;(make-variable-buffer-local 'show-trailing-whitespace)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1349
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1350 ;(defcustom show-trailing-whitespace nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1351 ; "*Non-nil means highlight trailing whitespace in face `trailing-whitespace'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1352 ;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1353 ;Setting this variable makes it local to the current buffer."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1354 ; :tag "Highlight trailing whitespace."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1355 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1356 ; :group 'font-lock)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1357
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1358
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1359 ;; Scrolling
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1360 ;; XEmacs omission: This functionality is always enabled on XEmacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1361
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1362 ;(defgroup scrolling nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1363 ; "Scrolling windows."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1364 ; :version "21.1"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1365 ; :group 'frames)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1366
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1367 ;(defcustom auto-hscroll-mode t
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1368 ; "*Allow or disallow automatic scrolling windows horizontally.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1369 ;If non-nil, windows are automatically scrolled horizontally to make
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1370 ;point visible."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1371 ; :version "21.1"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1372 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1373 ; :group 'scrolling)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1374 ;(defvaralias 'automatic-hscrolling 'auto-hscroll-mode)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1375
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1376
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1377 ;; Blinking cursor
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1378 ;; XEmacs omission: this functionality is provided by blink-cursor in the
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1379 ;; edit-utils package.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1380
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1381 ; (defgroup cursor nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1382 ; "Displaying text cursors."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1383 ; :version "21.1"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1384 ; :group 'frames)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1386 ; (defcustom blink-cursor-delay 0.5
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1387 ; "*Seconds of idle time after which cursor starts to blink."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1388 ; :tag "Delay in seconds."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1389 ; :type 'number
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1390 ; :group 'cursor)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1391
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1392 ; (defcustom blink-cursor-interval 0.5
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1393 ; "*Length of cursor blink interval in seconds."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1394 ; :tag "Blink interval in seconds."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1395 ; :type 'number
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1396 ; :group 'cursor)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1397
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1398 ; (defvar blink-cursor-idle-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1399 ; "Timer started after `blink-cursor-delay' seconds of Emacs idle time.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1400 ; The function `blink-cursor-start' is called when the timer fires.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1401
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1402 ; (defvar blink-cursor-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1403 ; "Timer started from `blink-cursor-start'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1404 ; This timer calls `blink-cursor' every `blink-cursor-interval' seconds.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1405
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1406 ; (defvar blink-cursor-mode nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1407 ; "Non-nil means blinking cursor is active.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1408
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1409 ; (defun blink-cursor-mode (arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1410 ; "Toggle blinking cursor mode.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1411 ; With a numeric argument, turn blinking cursor mode on iff ARG is positive.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1412 ; When blinking cursor mode is enabled, the cursor of the selected
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1413 ; window blinks.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1414
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1415 ; Note that this command is effective only when Emacs
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1416 ; displays through a window system, because then Emacs does its own
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1417 ; cursor display. On a text-only terminal, this is not implemented."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1418 ; (interactive "P")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1419 ; (let ((on-p (if (null arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1420 ; (not blink-cursor-mode)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1421 ; (> (prefix-numeric-value arg) 0))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1422 ; (if blink-cursor-idle-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1423 ; (cancel-timer blink-cursor-idle-timer))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1424 ; (if blink-cursor-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1425 ; (cancel-timer blink-cursor-timer))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1426 ; (setq blink-cursor-idle-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1427 ; blink-cursor-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1428 ; blink-cursor-mode nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1429 ; (if on-p
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1430 ; (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1431 ; ;; Hide the cursor.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1432 ; ;(internal-show-cursor nil nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1433 ; (setq blink-cursor-idle-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1434 ; (run-with-idle-timer blink-cursor-delay
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1435 ; blink-cursor-delay
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1436 ; 'blink-cursor-start))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1437 ; (setq blink-cursor-mode t))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1438 ; (internal-show-cursor nil t))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1439
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1440 ; ;; Note that this is really initialized from startup.el before
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1441 ; ;; the init-file is read.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1442
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1443 ; (defcustom blink-cursor nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1444 ; "*Non-nil means blinking cursor mode is active."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1445 ; :group 'cursor
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1446 ; :tag "Blinking cursor"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1447 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1448 ; :set #'(lambda (symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1449 ; (set-default symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1450 ; (blink-cursor-mode (or value 0))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1452 ; (defun blink-cursor-start ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1453 ; "Timer function called from the timer `blink-cursor-idle-timer'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1454 ; This starts the timer `blink-cursor-timer', which makes the cursor blink
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1455 ; if appropriate. It also arranges to cancel that timer when the next
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1456 ; command starts, by installing a pre-command hook."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1457 ; (when (null blink-cursor-timer)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1458 ; (add-hook 'pre-command-hook 'blink-cursor-end)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1459 ; (setq blink-cursor-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1460 ; (run-with-timer blink-cursor-interval blink-cursor-interval
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1461 ; 'blink-cursor-timer-function))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1462
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1463 ; (defun blink-cursor-timer-function ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1464 ; "Timer function of timer `blink-cursor-timer'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1465 ; (internal-show-cursor nil (not (internal-show-cursor-p))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1466
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1467 ; (defun blink-cursor-end ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1468 ; "Stop cursor blinking.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1469 ; This is installed as a pre-command hook by `blink-cursor-start'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1470 ; When run, it cancels the timer `blink-cursor-timer' and removes
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1471 ; itself as a pre-command hook."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1472 ; (remove-hook 'pre-command-hook 'blink-cursor-end)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1473 ; (internal-show-cursor nil t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1474 ; (cancel-timer blink-cursor-timer)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1475 ; (setq blink-cursor-timer nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1476
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1478 ;; Hourglass pointer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1479 ;; XEmacs omission: this functionality is provided elsewhere.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1480
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1481 ; (defcustom display-hourglass t
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1482 ; "*Non-nil means show an hourglass pointer when running under a window system."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1483 ; :tag "Hourglass pointer"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1484 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1485 ; :group 'cursor)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1486
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1487 ; (defcustom hourglass-delay 1
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1488 ; "*Seconds to wait before displaying an hourglass pointer."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1489 ; :tag "Hourglass delay"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1490 ; :type 'number
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1491 ; :group 'cursor)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1492
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1493 ;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1494 ; (defcustom cursor-in-non-selected-windows t
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1495 ; "*Non-nil means show a hollow box cursor in non-selected-windows.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1496 ; If nil, don't show a cursor except in the selected window.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1497 ; Use Custom to set this variable to get the display updated."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1498 ; :tag "Cursor in non-selected windows"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1499 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1500 ; :group 'cursor
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1501 ; :set #'(lambda (symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1502 ; (set-default symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1503 ; (force-mode-line-update t)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1504
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1505
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1506 ;;;; Key bindings
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1507 ;; XEmacs change: these keybindings are in keydef.el.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1508
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1509 ;(define-key ctl-x-5-map "2" 'make-frame-command)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1510 ;(define-key ctl-x-5-map "1" 'delete-other-frames)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1511 ;(define-key ctl-x-5-map "0" 'delete-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1512 ;(define-key ctl-x-5-map "o" 'other-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1513
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1514
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1515 ;;; XEmacs addition: nothing below this point appears in the Emacs version.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1516
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 ;;; Iconifying emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 ;;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 ;;; The function iconify-emacs replaces every non-iconified emacs window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 ;;; with a *single* icon. Iconified emacs windows are left alone. When
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 ;;; emacs is in this globally-iconified state, de-iconifying any emacs icon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 ;;; will uniconify all frames that were visible, and iconify all frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 ;;; that were not. This is done by temporarily changing the value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 ;;; `map-frame-hook' to `deiconify-emacs' (which should never be called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 ;;; except from the map-frame-hook while emacs is iconified).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 ;;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 ;;; The title of the icon representing all emacs frames is controlled by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 ;;; the variable `icon-name'. This is done by temporarily changing the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 ;;; value of `frame-icon-title-format'. Unfortunately, this changes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 ;;; titles of all emacs icons, not just the "big" icon.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 ;;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 ;;; It would be nice if existing icons were removed and restored by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 ;;; iconifying the emacs process, but I couldn't make that work yet.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 (defvar icon-name nil) ; set this at run time, not load time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 (defvar iconification-data nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 (defun iconify-emacs ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 "Replace every non-iconified FRAME with a *single* icon.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 Iconified frames are left alone. When XEmacs is in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 globally-iconified state, de-iconifying any emacs icon will uniconify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 all frames that were visible, and iconify all frames that were not."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 (if iconification-data (error "already iconified?"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 (let* ((frames (frame-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 (rest frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 (me (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 (while rest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 (setq frame (car rest))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 (setcar rest (cons frame (frame-visible-p frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 ; (if (memq (cdr (car rest)) '(icon nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 ; (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 ; (make-frame-visible frame) ; deiconify, and process the X event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 ; (sleep-for 500 t) ; process X events; I really want to XSync() here
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 ; ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 (or (eq frame me) (make-frame-invisible frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 (setq rest (cdr rest)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 (or (boundp 'map-frame-hook) (setq map-frame-hook nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 (or icon-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 (setq icon-name (concat invocation-name " @ " (system-name))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 (setq iconification-data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 (list frame-icon-title-format map-frame-hook frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 frame-icon-title-format icon-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 map-frame-hook 'deiconify-emacs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 (iconify-frame me)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 (defun deiconify-emacs (&optional ignore)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 (or iconification-data (error "not iconified?"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 (setq frame-icon-title-format (car iconification-data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 map-frame-hook (car (cdr iconification-data))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 iconification-data (car (cdr (cdr iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 (while iconification-data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 (let ((visibility (cdr (car iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 (cond (visibility ;; JV (Note non-nil means visible in XEmacs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 (make-frame-visible (car (car iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 ; (t ;; (eq visibility 'icon) ;; JV Not in XEmacs!!!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 ; (make-frame-visible (car (car iconification-data)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 ; (sleep-for 500 t) ; process X events; I really want to XSync() here
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 ; (iconify-frame (car (car iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 ;; (t nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 (setq iconification-data (cdr iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 (defun suspend-or-iconify-emacs ()
3547
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1588 "Call iconify-emacs if using a window system, otherwise suspend.
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1589
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1590 `suspend' here can mean different things; if the current TTY console was
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1591 created by gnuclient, that console is suspended, and the related devices and
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1592 frames are removed from the display. Otherwise the Emacs process as a whole
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1593 is suspended--that is, the traditional Unix suspend takes place. "
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 (cond ((device-on-window-system-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 (iconify-emacs))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 ((and (eq (device-type) 'tty)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1598 (declare-fboundp (console-tty-controlling-process
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1599 (selected-console))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 (suspend-console (selected-console)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 (suspend-emacs))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 ;; This is quite a mouthful, but it should be descriptive, as it's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 ;; bound to C-z. FSF takes the easy way out by binding C-z to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 ;; different things depending on window-system. We can't do the same,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 ;; because we allow simultaneous X and TTY consoles.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 (defun suspend-emacs-or-iconify-frame ()
3547
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1609 "Iconify the selected frame if using a window system, otherwise suspend.
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1610
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1611 `suspend' here can mean different things; if the current TTY console was
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1612 created by gnuclient, the console is suspended, and the related devices and
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1613 frames are removed from the display. Otherwise the Emacs process as a whole
dd935ef485d2 [xemacs-hg @ 2006-08-06 22:14:08 by aidan]
aidan
parents: 3061
diff changeset
1614 is suspended--that is, the traditional Unix suspend takes place. "
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 (cond ((device-on-window-system-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 (iconify-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618 ((and (eq (frame-type) 'tty)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1619 (declare-fboundp (console-tty-controlling-process
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1620 (selected-console))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 (suspend-console (selected-console)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 (suspend-emacs))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 ;;; Application-specific frame-management
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 (defcustom get-frame-for-buffer-default-frame-name nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 "*The default frame to select; see doc of `get-frame-for-buffer'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 :type 'string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 (defcustom get-frame-for-buffer-default-instance-limit nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 "*The default instance limit for creating new frames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 see doc of `get-frame-for-buffer'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 :type 'integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 (defun get-frame-name-for-buffer (buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 (let ((mode (and (get-buffer buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 (save-excursion (set-buffer buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 major-mode))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 (or (get mode 'frame-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 get-frame-for-buffer-default-frame-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 (defun get-frame-for-buffer-make-new-frame (buffer &optional frame-name plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 (let* ((fr (make-frame plist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 (w (frame-root-window fr)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 ;; Make the one buffer being displayed in this newly created
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 ;; frame be the buffer of interest, instead of something
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 ;; random, so that it won't be shown in two-window mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 ;; Avoid calling switch-to-buffer here, since that's something
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 ;; people might want to call this routine from.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 ;; (If the root window doesn't have a buffer, then that means
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 ;; there is more than one window on the frame, which can only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 ;; happen if the user has done something funny on the frame-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 ;; creation-hook. If that's the case, leave it alone.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 (if (window-buffer w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 (set-window-buffer w buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 fr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 (defcustom get-frame-for-buffer-default-to-current nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 "*When non-nil, `get-frame-for-buffer' will default to the selected frame."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 (defun get-frame-for-buffer-noselect (buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 &optional not-this-window-p on-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 "Return a frame in which to display BUFFER.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 This is a subroutine of `get-frame-for-buffer' (which see)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 (let (name limit)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 (cond
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 ((or on-frame (eq (selected-window) (minibuffer-window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 ;; don't switch frames if a frame was specified, or to list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 ;; completions from the minibuffer, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 ((setq name (get-frame-name-for-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 ;; This buffer's mode expressed a preference for a frame of a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 ;; name. That always takes priority.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 (let ((limit (get name 'instance-limit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 (defaults (get name 'frame-defaults))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 (matching-frames '())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 frames frame already-visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 ;; Sort the list so that iconic frames will be found last. They
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 ;; will be used too, but mapped frames take precedence. And
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 ;; fully visible frames come before occluded frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 ;; Hidden frames come after really visible ones
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 (setq frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 (sort (frame-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 #'(lambda (s1 s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 (cond ((frame-totally-visible-p s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 ((not (frame-visible-p s2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 (frame-visible-p s1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 ((eq (frame-visible-p s2) 'hidden)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 (eq (frame-visible-p s1) t ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 ((not (frame-totally-visible-p s2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 (and (frame-visible-p s1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 (frame-totally-visible-p s1)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 ;; but the selected frame should come first, even if it's occluded,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 ;; to minimize thrashing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 (setq frames (cons (selected-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 (delq (selected-frame) frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 (setq name (symbol-name name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 (while frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 (setq frame (car frames))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 (if (equal name (frame-name frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 (if (get-buffer-window buffer frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 (setq already-visible frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 frames nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 (setq matching-frames (cons frame matching-frames))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 (setq frames (cdr frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 (cond (already-visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 already-visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 ((or (null matching-frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 (eq limit 0) ; means create with reckless abandon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 (and limit (< (length matching-frames) limit)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 (get-frame-for-buffer-make-new-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 (alist-to-plist (acons 'name name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 (plist-to-alist defaults)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 ;; do not switch any of the window/buffer associations in an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 ;; existing frame; this function only picks a frame; the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 ;; determination of which windows on it get reused is up to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 ;; display-buffer itself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 ;; (or (window-dedicated-p (selected-window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 ;; (switch-to-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 (car matching-frames)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 ((setq limit get-frame-for-buffer-default-instance-limit)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 ;; This buffer's mode did not express a preference for a frame of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 ;; particular name, but the user wants a new frame rather than
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 ;; reusing the existing one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 (let* ((defname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 (or (plist-get default-frame-plist 'name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 default-frame-name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 (frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 (sort (filtered-frame-list #'(lambda (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 (or (frame-visible-p x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 (frame-iconified-p x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 #'(lambda (s1 s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 (cond ((and (frame-visible-p s1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 (not (frame-visible-p s2))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 ((and (eq (frame-visible-p s1) t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 (eq (frame-visible-p s2) 'hidden)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 ((and (frame-visible-p s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 (not (frame-visible-p s1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 ((and (equal (frame-name s1) defname)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 (not (equal (frame-name s2) defname))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 ((and (equal (frame-name s2) defname)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 (not (equal (frame-name s1) defname)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 ((frame-totally-visible-p s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 (t))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 ;; put the selected frame last. The user wants a new frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 ;; so don't reuse the existing one unless forced to.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 (setq frames (append (delq (selected-frame) frames) (list frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 (if (or (eq limit 0) ; means create with reckless abandon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 (< (length frames) limit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 (get-frame-for-buffer-make-new-frame buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773 (car frames))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 (not-this-window-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 (let ((w-list (windows-of-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 f w
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 (first-choice nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 (second-choice (if get-frame-for-buffer-default-to-current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 (selected-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 (last-resort nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 (while (and w-list (null first-choice))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 (setq w (car w-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785 f (window-frame w))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 (cond ((eq w (selected-window)) nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 ((not (frame-visible-p f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 (if (null last-resort)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 (setq last-resort f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 ((eq f (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 (setq first-choice f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 ((null second-choice)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 (setq second-choice f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 (setq w-list (cdr w-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 (or first-choice second-choice last-resort)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 (get-frame-for-buffer-default-to-current (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 ;; This buffer's mode did not express a preference for a frame of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 ;; particular name. So try to find a frame already displaying this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 ;; buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 (let ((w (or (get-buffer-window buffer nil) ; check current first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 (get-buffer-window buffer 'visible) ; then visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 (get-buffer-window buffer 0)))) ; then iconic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 (cond ((null w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 ;; It's not in any window - return nil, meaning no frame has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 ;; preference.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 ;; Otherwise, return the frame of the buffer's window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 (window-frame w))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817 ;; The pre-display-buffer-function is called for effect, so this needs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 ;; actually select the frame it wants. Fdisplay_buffer() takes notice of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 ;; changes to the selected frame.
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 771
diff changeset
1820 (defun get-frame-for-buffer (buffer &optional not-this-window-p on-frame
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 771
diff changeset
1821 shrink-to-fit)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 "Select and return a frame in which to display BUFFER.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823 Normally, the buffer will simply be displayed in the selected frame.
3061
fd1acd2f457a [xemacs-hg @ 2005-11-13 07:39:26 by ben]
ben
parents: 2527
diff changeset
1824 But if the symbol naming the major-mode of the buffer has a `frame-name'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 property (which should be a symbol), then the buffer will be displayed in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 a frame of that name. If there is no frame of that name, then one is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828
3061
fd1acd2f457a [xemacs-hg @ 2005-11-13 07:39:26 by ben]
ben
parents: 2527
diff changeset
1829 If the major-mode doesn't have a `frame-name' property, then the frame
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 named by `get-frame-for-buffer-default-frame-name' will be used. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 that is nil (the default) then the currently selected frame will used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832
3061
fd1acd2f457a [xemacs-hg @ 2005-11-13 07:39:26 by ben]
ben
parents: 2527
diff changeset
1833 If the frame-name symbol has an `instance-limit' property (an integer)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 then each time a buffer of the mode in question is displayed, a new frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 with that name will be created, until there are `instance-limit' of them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 If instance-limit is 0, then a new frame will be created each time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 If a buffer is already displayed in a frame, then `instance-limit' is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 ignored, and that frame is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840
3061
fd1acd2f457a [xemacs-hg @ 2005-11-13 07:39:26 by ben]
ben
parents: 2527
diff changeset
1841 If the frame-name symbol has a `frame-defaults' property, then that is
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 prepended to the `default-frame-plist' when creating a frame for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843 first time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 This function may be used as the value of `pre-display-buffer-function',
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1846 to cause the `display-buffer' function and its callers to exhibit the
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1847 above behavior."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 (let ((frame (get-frame-for-buffer-noselect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 buffer not-this-window-p on-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 (if (not (eq frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 (select-frame frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 (or (frame-visible-p frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 ;; If the frame was already visible, just focus on it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 ;; If it wasn't visible (it was just created, or it used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 ;; to be iconified) then uniconify, raise, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 (make-frame-visible frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858 frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 (defun frames-of-buffer (&optional buffer visible-only)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 "Return list of frames that BUFFER is currently being displayed on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 If the buffer is being displayed on the currently selected frame, that frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 is first in the list. VISIBLE-ONLY will only list non-iconified frames."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 (let ((list (windows-of-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 (cur-frame (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 next-frame frames save-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 (while list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 (if (memq (setq next-frame (window-frame (car list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 (if (eq cur-frame next-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 (setq save-frame next-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 (and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 (or (not visible-only)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 (frame-visible-p next-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 (setq frames (append frames (list next-frame))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 (setq list (cdr list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 (if save-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 (append (list save-frame) frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882 frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 (defcustom temp-buffer-shrink-to-fit nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885 "*When non-nil resize temporary output buffers to minimize blank lines."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 (defcustom temp-buffer-max-height .5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890 "*Proportion of frame to use for temp windows."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 :type 'number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893
4506
bd28481bb0e1 Port #'window-buffer-height, #'fit-window-to-buffer, & window, buf, functions.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4044
diff changeset
1894 ;; See also #'temp-buffer-resize-mode in help.el.
bd28481bb0e1 Port #'window-buffer-height, #'fit-window-to-buffer, & window, buf, functions.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4044
diff changeset
1895
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 (defun show-temp-buffer-in-current-frame (buffer)
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1897 "For use as the value of `temp-buffer-show-function':
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 always displays the buffer in the selected frame, regardless of the behavior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 that would otherwise be introduced by the `pre-display-buffer-function', which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 is normally set to `get-frame-for-buffer' (which see)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 (let ((pre-display-buffer-function nil)) ; turn it off, whatever it is
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 771
diff changeset
1902 (let ((window (display-buffer buffer nil nil temp-buffer-shrink-to-fit)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 (if (not (eq (last-nonminibuf-frame) (window-frame window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 ;; only the pre-display-buffer-function should ever do this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 (error "display-buffer switched frames on its own!!"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906 (setq minibuffer-scroll-window window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 (set-window-start window 1) ; obeys narrowing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 (set-window-point window 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 (setq temp-buffer-show-function 'show-temp-buffer-in-current-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 ;; from Bob Weiner <bweiner@pts.mot.com>, modified by Ben Wing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 ;; By adding primitives to directly access the window hierarchy,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 ;; we can move many functions into Lisp. We do it this way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 ;; because the implementations are simpler in Lisp, and because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 ;; new functions like this can be added without requiring C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 ;; additions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 (defun frame-utmost-window-2 (window position left-right-p major-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 minor-end-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 ;; LEFT-RIGHT-P means we're looking for the leftmost or rightmost
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 ;; window, instead of the highest or lowest. In this case, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926 ;; say that the "major axis" goes left-to-right instead of top-to-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 ;; bottom. The "minor axis" always goes perpendicularly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 ;; If MAJOR-END-P is t, we're looking for a windows that abut the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 ;; end (i.e. right or bottom) of the major axis, instead of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 ;; start.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 ;; If MINOR-END-P is t, then we want to start counting from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 ;; end of the minor axis instead of the beginning.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936 ;; Here's the general idea: Imagine we're trying to count the number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 ;; of windows that abut the top; call this function foo(). So, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 ;; start with the root window. If this is a vertical combination
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 ;; window, then foo() applied to the root window is the same as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 ;; foo() applied to the first child. If the root is a horizontal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 ;; combination window, then foo() applied to the root is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 ;; same as the sum of foo() applied to each of the children.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 ;; Otherwise, the root window is a leaf window, and foo() is 1.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 ;; Now it's clear that, each time foo() encounters a leaf window,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945 ;; it's encountering a different window that abuts the top.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 ;; With a little examining, you can see that foo encounters the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 ;; top-abutting windows in order from left to right. We can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 ;; modify foo() to return the nth top-abutting window by simply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 ;; keeping a global variable that is decremented each time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 ;; foo() encounters a leaf window and would return 1. If the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 ;; global counter gets to zero, we've encountered the window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 ;; we were looking for, so we exit right away using a `throw'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 ;; Otherwise, we make sure that all normal paths return nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 (let (child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 (cond ((setq child (if left-right-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 (window-first-hchild window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 (window-first-vchild window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 (if major-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 (while (window-next-child child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 (setq child (window-next-child child))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 (frame-utmost-window-2 child position left-right-p major-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 minor-end-p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 ((setq child (if left-right-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 (window-first-vchild window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 (window-first-hchild window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 (if minor-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 (while (window-next-child child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969 (setq child (window-next-child child))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 (while child
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 (frame-utmost-window-2 child position left-right-p major-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 minor-end-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 (setq child (if minor-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 (window-previous-child child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 (window-next-child child))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 (setcar position (1- (car position)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 (if (= (car position) 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 (throw 'fhw-exit window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 nil)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 (defun frame-utmost-window-1 (frame position left-right-p major-end-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 (let (minor-end-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 (or frame (setq frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 (or position (setq position 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 (if (>= position 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 (setq position (1+ position))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 (setq minor-end-p t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 (setq position (- position)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 (catch 'fhw-exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992 ;; we use a cons here as a simple form of call-by-reference.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 ;; scheme has "boxes" for the same purpose.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 (frame-utmost-window-2 (frame-root-window frame) (list position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 left-right-p major-end-p minor-end-p))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 (defun frame-highest-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 "Return the highest window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 the top of the frame: 0 means the leftmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 top of the frame, 1 the next-leftmost, etc. POSITION can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 be less than zero: -1 means the rightmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 top of the frame, -2 the next-rightmost, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 If omitted, POSITION defaults to 0, i.e. the leftmost highest window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 (frame-utmost-window-1 frame position nil nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 (defun frame-lowest-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011 "Return the lowest window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 the bottom of the frame: 0 means the leftmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 bottom of the frame, 1 the next-leftmost, etc. POSITION can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 be less than zero: -1 means the rightmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017 bottom of the frame, -2 the next-rightmost, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 If omitted, POSITION defaults to 0, i.e. the leftmost lowest window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020 (frame-utmost-window-1 frame position nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 (defun frame-leftmost-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023 "Return the leftmost window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026 the left edge of the frame: 0 means the highest window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027 left edge of the frame, 1 the next-highest, etc. POSITION can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028 be less than zero: -1 means the lowest window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029 left edge of the frame, -2 the next-lowest, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 If omitted, POSITION defaults to 0, i.e. the highest leftmost window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032 (frame-utmost-window-1 frame position t nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 (defun frame-rightmost-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 "Return the rightmost window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038 the right edge of the frame: 0 means the highest window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 right edge of the frame, 1 the next-highest, etc. POSITION can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 be less than zero: -1 means the lowest window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041 right edge of the frame, -2 the next-lowest, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 If omitted, POSITION defaults to 0, i.e. the highest rightmost window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 (frame-utmost-window-1 frame position t t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 ;; frame properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 (put 'cursor-color 'frame-property-alias [text-cursor background])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 (put 'modeline 'frame-property-alias 'has-modeline-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 (provide 'frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056 ;;; frame.el ends here