annotate lisp/frame.el @ 4465:732b87cfabf2

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