annotate lisp/frame.el @ 2367:ecf1ebac70d8

[xemacs-hg @ 2004-11-04 23:05:23 by ben] commit mega-patch configure.in: Turn off -Winline and -Wchar-subscripts. Use the right set of cflags when compiling modules. Rewrite ldap configuration to separate the inclusion of lber (needed in recent Cygwin) from the basic checks for the needed libraries. add a function for MAKE_JUNK_C; initially code was added to generate xemacs.def using this, but it will need to be rewritten. add an rm -f for junk.c to avoid weird Cygwin bug with cp -f onto an existing file. Sort list of auto-detected functions and eliminate unused checks for stpcpy, setlocale and getwd. Add autodetection of Cygwin scanf problems BETA: Rewrite section on configure to indicate what flags are important and what not. digest-doc.c, make-dump-id.c, profile.c, sorted-doc.c: Add proper decls for main(). make-msgfile.c: Document that this is old junk. Move proposal to text.c. make-msgfile.lex: Move proposal to text.c. make-mswin-unicode.pl: Convert error-generating code so that the entire message will be seen as a single unrecognized token. mule/mule-ccl.el: Update docs. lispref/mule.texi: Update CCL docs. ldap/eldap.c: Mule-ize. Use EXTERNAL_LIST_LOOP_2 instead of deleted EXTERNAL_LIST_LOOP. * XEmacs 21.5.18 "chestnut" is released. --------------------------------------------------------------- MULE-RELATED WORK: --------------------------------------------------------------- --------------------------- byte-char conversion --------------------------- buffer.c, buffer.h, insdel.c, text.c: Port FSF algorithm for byte-char conversion, replacing broken previous version. Track the char position of the gap. Add functions to do char-byte conversion downwards as well as upwards. Move comments about algorithm workings to internals manual. --------------------------- work on types --------------------------- alloc.c, console-x-impl.h, dump-data.c, dump-data.h, dumper.c, dialog-msw.c, dired-msw.c, doc.c, editfns.c, esd.c, event-gtk.h, event-msw.c, events.c, file-coding.c, file-coding.h, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-x.c, glyphs.c, glyphs.h, gui.c, hpplay.c, imgproc.c, intl-win32.c, lrecord.h, lstream.c, keymap.c, lisp.h, libsst.c, linuxplay.c, miscplay.c, miscplay.h, mule-coding.c, nas.c, nt.c, ntheap.c, ntplay.c, objects-msw.c, objects-tty.c, objects-x.c, print.c, process-nt.c, process.c, redisplay.h, select-common.h, select-gtk.c, select-x.c, sgiplay.c, sound.c, sound.h, sunplay.c, sysfile.h, sysdep.c, syswindows.h, text.c, unexnt.c, win32.c, xgccache.c: Further work on types. This creates a full set of types for all the basic semantics of `char' that I have so far identified, so that its semantics can always be identified for the purposes of proper Mule-safe code, and the raw use of `char' always avoided. (1) More type renaming, for consistency of naming. Char_ASCII -> Ascbyte UChar_ASCII -> UAscbyte Char_Binary -> CBinbyte UChar_Binary -> Binbyte SChar_Binary -> SBinbyte (2) Introduce Rawbyte, CRawbyte, Boolbyte, Chbyte, UChbyte, and Bitbyte and use them. (3) New types Itext, Wexttext and Textcount for separating out the concepts of bytes and textual units (different under UTF-16 and UTF-32, which are potential internal encodings). (4) qxestr*_c -> qxestr*_ascii. lisp.h: New; goes with other qxe() functions. #### Maybe goes in a different section. lisp.h: Group generic int-type defs together with EMACS_INT defs. lisp.h: * lisp.h (WEXTTEXT_IS_WIDE) New defns. lisp.h: New type to replace places where int occurs as a boolean. It's signed because occasionally people may want to use -1 as an error value, and because unsigned ints are viral -- see comments in the internals manual against using them. dynarr.c: int -> Bytecount. --------------------------- Mule-izing --------------------------- device-x.c: Partially Mule-ize. dumper.c, dumper.h: Mule-ize. Use Rawbyte. Use stderr_out not printf. Use wext_*(). sysdep.c, syswindows.h, text.c: New Wexttext API for manipulation of external text that may be Unicode (e.g. startup code under Windows). emacs.c: Mule-ize. Properly deal with argv in external encoding. Use wext_*() and Wexttext. Use Rawbyte. #if 0 some old junk on SCO that is unlikely to be correct. Rewrite allocation code in run-temacs. emacs.c, symsinit.h, win32.c: Rename win32 init function and call it even earlier, to initialize mswindows_9x_p even earlier, for use in startup code (XEUNICODE_P). process.c: Use _wenviron not environ under Windows, to get Unicode environment variables. event-Xt.c: Mule-ize drag-n-drop related stuff. dragdrop.c, dragdrop.h, frame-x.c: Mule-ize. text.h: Add some more stand-in defines for particular kinds of conversion; use in Mule-ization work in frame-x.c etc. --------------------------- Freshening --------------------------- intl-auto-encap-win32.c, intl-auto-encap-win32.h: Regenerate. --------------------------- Unicode-work --------------------------- intl-win32.c, syswindows.h: Factor out common options to MultiByteToWideChar and WideCharToMultiByte. Add convert_unicode_to_multibyte_malloc() and convert_unicode_to_multibyte_dynarr() and use. Add stuff for alloca() conversion of multibyte/unicode. alloc.c: Use dfc_external_data_len() in case of unicode coding system. alloc.c, mule-charset.c: Don't zero out and reinit charset Unicode tables. This fucks up dump-time loading. Anyway, either we load them at dump time or run time, never both. unicode.c: Dump the blank tables as well. --------------------------------------------------------------- DOCUMENTATION, MOSTLY MULE-RELATED: --------------------------------------------------------------- EmacsFrame.c, emodules.c, event-Xt.c, fileio.c, input-method-xlib.c, mule-wnnfns.c, redisplay-gtk.c, redisplay-tty.c, redisplay-x.c, regex.c, sysdep.c: Add comment about Mule work needed. text.h: Add more documentation describing why DFC routines were not written to return their value. Add some other DFC documentation. console-msw.c, console-msw.h: Add pointer to docs in win32.c. emacs.c: Add comments on sources of doc info. text.c, charset.h, unicode.c, intl-win32.c, intl-encap-win32.c, text.h, file-coding.c, mule-coding.c: Collect background comments and related to text matters and internationalization, and proposals for work to be done, in text.c or Internals manual, stuff related to specific textual API's in text.h, and stuff related to internal implementation of Unicode conversion in unicode.c. Put lots of pointers to the comments to make them easier to find. s/mingw32.h, s/win32-common.h, s/win32-native.h, s/windowsnt.h, win32.c: Add bunches of new documentation on the different kinds of builds and environments under Windows and how they work. Collect this info in win32.c. Add pointers to these docs in the relevant s/* files. emacs.c: Document places with long comments. Remove comment about exiting, move to internals manual, put in pointer. event-stream.c: Move docs about event queues and focus to internals manual, put in pointer. events.h: Move docs about event stream callbacks to internals manual, put in pointer. profile.c, redisplay.c, signal.c: Move documentation to the Internals manual. process-nt.c: Add pointer to comment in win32-native.el. lisp.h: Add comments about some comment conventions. lisp.h: Add comment about the second argument. device-msw.c, redisplay-msw.c: @@#### comments are out-of-date. --------------------------------------------------------------- PDUMP WORK (MOTIVATED BY UNICODE CHANGES) --------------------------------------------------------------- alloc.c, buffer.c, bytecode.c, console-impl.h, console.c, device.c, dumper.c, lrecord.h, elhash.c, emodules.h, events.c, extents.c, frame.c, glyphs.c, glyphs.h, mule-charset.c, mule-coding.c, objects.c, profile.c, rangetab.c, redisplay.c, specifier.c, specifier.h, window.c, lstream.c, file-coding.h, file-coding.c: PDUMP: Properly implement dump_add_root_block(), which never worked before, and is necessary for dumping Unicode tables. Pdump name changes for accuracy: XD_STRUCT_PTR -> XD_BLOCK_PTR. XD_STRUCT_ARRAY -> XD_BLOCK_ARRAY. XD_C_STRING -> XD_ASCII_STRING. *_structure_* -> *_block_*. lrecord.h: some comments added about dump_add_root_block() vs dump_add_root_block_ptr(). extents.c: remove incorrect comment about pdump problems with gap array. --------------------------------------------------------------- ALLOCATION --------------------------------------------------------------- abbrev.c, alloc.c, bytecode.c, casefiddle.c, device-msw.c, device-x.c, dired-msw.c, doc.c, doprnt.c, dragdrop.c, editfns.c, emodules.c, file-coding.c, fileio.c, filelock.c, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, gui-msw.c, gui-x.c, imgproc.c, intl-win32.c, lread.c, menubar-gtk.c, menubar.c, nt.c, objects-msw.c, objects-x.c, print.c, process-nt.c, process-unix.c, process.c, realpath.c, redisplay.c, search.c, select-common.c, symbols.c, sysdep.c, syswindows.h, text.c, text.h, ui-byhand.c: New macros {alloca,xnew}_{itext,{i,ext,raw,bin,asc}bytes} for more convenient allocation of these commonly requested items. Modify functions to use alloca_ibytes, alloca_array, alloca_extbytes, xnew_ibytes, etc. also XREALLOC_ARRAY, xnew. alloc.c: Rewrite the allocation functions to factor out repeated code. Add assertions for freeing dumped data. lisp.h: Moved down and consolidated with other allocation stuff. lisp.h, dynarr.c: New functions for allocation that's very efficient when mostly in LIFO order. lisp.h, text.c, text.h: Factor out some stuff for general use by alloca()-conversion funs. text.h, lisp.h: Fill out convenience routines for allocating various kinds of bytes and put them in lisp.h. Use them in place of xmalloc(), ALLOCA(). text.h: Fill out the convenience functions so the _MALLOC() kinds match the alloca() kinds. --------------------------------------------------------------- ERROR-CHECKING --------------------------------------------------------------- text.h: Create ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN() from similar Eistring checkers and change the Eistring checkers to use them instead. --------------------------------------------------------------- MACROS IN LISP.H --------------------------------------------------------------- lisp.h: Redo GCPRO declarations. Create a "base" set of functions that can be used to generate any kind of gcpro sets -- regular, ngcpro, nngcpro, private ones used in GC_EXTERNAL_LIST_LOOP_2. buffer.c, callint.c, chartab.c, console-msw.c, device-x.c, dialog-msw.c, dired.c, extents.c, ui-gtk.c, rangetab.c, nt.c, mule-coding.c, minibuf.c, menubar-msw.c, menubar.c, menubar-gtk.c, lread.c, lisp.h, gutter.c, glyphs.c, glyphs-widget.c, fns.c, fileio.c, file-coding.c, specifier.c: Eliminate EXTERNAL_LIST_LOOP, which does not check for circularities. Use EXTERNAL_LIST_LOOP_2 instead or EXTERNAL_LIST_LOOP_3 or EXTERNAL_PROPERTY_LIST_LOOP_3 or GC_EXTERNAL_LIST_LOOP_2 (new macro). Removed/redid comments on EXTERNAL_LIST_LOOP. --------------------------------------------------------------- SPACING FIXES --------------------------------------------------------------- callint.c, hftctl.c, number-gmp.c, process-unix.c: Spacing fixes. --------------------------------------------------------------- FIX FOR GEOMETRY PROBLEM IN FIRST FRAME --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. toolbar.c: bug fix for problem of initial frame being 77 chars wide on Windows. will be overridden by my other ws. --------------------------------------------------------------- FIX FOR LEAKING PROCESS HANDLES: --------------------------------------------------------------- process-nt.c: Fixes for leaking handles. Inspired by work done by Adrian Aichner <adrian@xemacs.org>. --------------------------------------------------------------- FIX FOR CYGWIN BUG (Unicode-related): --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. --------------------------------------------------------------- WARNING FIXES: --------------------------------------------------------------- console-stream.c: `reinit' is unused. compiler.h, event-msw.c, frame-msw.c, intl-encap-win32.c, text.h: Add stuff to deal with ANSI-aliasing warnings I got. regex.c: Gather includes together to avoid warning. --------------------------------------------------------------- CHANGES TO INITIALIZATION ROUTINES: --------------------------------------------------------------- buffer.c, emacs.c, console.c, debug.c, device-x.c, device.c, dragdrop.c, emodules.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, font-lock.c, frame-msw.c, glyphs-widget.c, glyphs.c, gui-x.c, insdel.c, lread.c, lstream.c, menubar-gtk.c, menubar-x.c, minibuf.c, mule-wnnfns.c, objects-msw.c, objects.c, print.c, scrollbar-x.c, search.c, select-x.c, text.c, undo.c, unicode.c, window.c, symsinit.h: Call reinit_*() functions directly from emacs.c, for clarity. Factor out some redundant init code. Move disallowed stuff that had crept into vars_of_glyphs() into complex_vars_of_glyphs(). Call init_eval_semi_early() from eval.c not in the middle of vars_of_() in emacs.c since there should be no order dependency in the latter calls. --------------------------------------------------------------- ARMAGEDDON: --------------------------------------------------------------- alloc.c, emacs.c, lisp.h, print.c: Rename inhibit_non_essential_printing_operations to inhibit_non_essential_conversion_operations. text.c: Assert on !inhibit_non_essential_conversion_operations. console-msw.c, print.c: Don't do conversion in SetConsoleTitle or FindWindow to avoid problems during armageddon. Put #errors for NON_ASCII_INTERNAL_FORMAT in places where problems would arise. --------------------------------------------------------------- CHANGES TO THE BUILD PROCEDURE: --------------------------------------------------------------- config.h.in, s/cxux.h, s/usg5-4-2.h, m/powerpc.h: Add comment about correct ordering of this file. Rearrange everything to follow this -- put all #undefs together and before the s&m files. Add undefs for HAVE_ALLOCA, C_ALLOCA, BROKEN_ALLOCA_IN_FUNCTION_CALLS, STACK_DIRECTION. Remove unused HAVE_STPCPY, HAVE_GETWD, HAVE_SETLOCALE. m/gec63.h: Deleted; totally broken, not used at all, not in FSF. m/7300.h, m/acorn.h, m/alliant-2800.h, m/alliant.h, m/altos.h, m/amdahl.h, m/apollo.h, m/att3b.h, m/aviion.h, m/celerity.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h, m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/ews4800r.h, m/gould.h, m/hp300bsd.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h, m/intel386.h, m/iris4d.h, m/iris5d.h, m/iris6d.h, m/irist.h, m/isi-ov.h, m/luna88k.h, m/m68k.h, m/masscomp.h, m/mg1.h, m/mips-nec.h, m/mips-siemens.h, m/mips.h, m/news.h, m/nh3000.h, m/nh4000.h, m/ns32000.h, m/orion105.h, m/pfa50.h, m/plexus.h, m/pmax.h, m/powerpc.h, m/pyrmips.h, m/sequent-ptx.h, m/sequent.h, m/sgi-challenge.h, m/symmetry.h, m/tad68k.h, m/tahoe.h, m/targon31.h, m/tekxd88.h, m/template.h, m/tower32.h, m/tower32v3.h, m/ustation.h, m/vax.h, m/wicat.h, m/xps100.h: Delete C_ALLOCA, HAVE_ALLOCA, STACK_DIRECTION, BROKEN_ALLOCA_IN_FUNCTION_CALLS. All of this is auto-detected. When in doubt, I followed recent FSF sources, which also have these things deleted.
author ben
date Thu, 04 Nov 2004 23:08:28 +0000
parents da8cdcec6dff
children 6a9afa282c8e
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))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
796 (while (not (eq (frame-visible-p frame) t))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
797 (setq frame (next-frame frame 'visible-nomini)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 (setq arg (1- arg)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 (while (< arg 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 (setq frame (previous-frame frame 'visible-nomini))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
801 (while (not (eq (frame-visible-p frame) t))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
802 (setq frame (previous-frame frame 'visible-nomini)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 (setq arg (1+ arg)))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
804 (select-frame-set-input-focus frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
805
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
806 (defun iconify-or-deiconify-frame ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
807 "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
808 (interactive)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
809 (if (lax-plist-get (frame-properties) 'visibility)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
810 (iconify-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
811 (make-frame-visible)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
812
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
813 (defun make-frame-names-alist ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
814 (let* ((current-frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
815 (falist
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
816 (cons
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
817 (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
818 (frame (next-frame current-frame t)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
819 (while (not (eq frame current-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
820 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
821 (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
822 (setq frame (next-frame frame t))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
823 falist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
824
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
825 (defvar frame-name-history nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
826 (defun select-frame-by-name (name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
827 "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
828 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
829 (interactive
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
830 (let* ((frame-names-alist (make-frame-names-alist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
831 (default (car (car frame-names-alist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
832 (input (completing-read
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
833 (format "Select Frame (default %s): " default)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
834 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
835 ;; 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
836 (list input)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
837 (let* ((frame-names-alist (make-frame-names-alist))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
838 (frame (cdr (assoc name frame-names-alist))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
839 (or frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
840 (error "There is no frame named `%s'" name))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
841 (make-frame-visible frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
842 ;; XEmacs change: make-frame-visible implies (raise-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
843 ;; (raise-frame frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
844 ;; 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
845 (select-frame-set-input-focus frame)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 ;; XEmacs-added utility functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 (defmacro save-selected-frame (&rest body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 "Execute forms in BODY, then restore the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 The value returned is the value of the last form in BODY."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 (let ((old-frame (gensym "ssf")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 `(let ((,old-frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 (progn ,@body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 (select-frame ,old-frame)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 (defmacro with-selected-frame (frame &rest body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 "Execute forms in BODY with FRAME as the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 The value returned is the value of the last form in BODY."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 `(save-selected-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 (select-frame ,frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 ,@body))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
865 ; This is in C in Emacs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 (defun frame-list ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 "Return a list of all frames on all devices/consoles."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 ;; Lists are copies, so nconc is safe here.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 (apply 'nconc (mapcar 'device-frame-list (device-list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 (defun frame-type (&optional frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 "Return the type of the specified frame (e.g. `x' or `tty').
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 This is equivalent to the type of the frame's device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 Value is `tty' for a tty frame (a character-only terminal),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 `x' for a frame that is an X window,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 `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
877 `mswindows' for a frame that is a MS Windows desktop window,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
878 `msprinter' for a frame that is a MS Windows print job,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 `stream' for a stream frame (which acts like a stdio stream), and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 `dead' for a deleted frame."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 (or frame (setq frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 (if (not (frame-live-p frame)) 'dead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 (device-type (frame-device frame))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 (defun device-or-frame-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 "Return non-nil if OBJECT is a device or frame."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 (or (devicep object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 (framep object)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 (defun device-or-frame-type (device-or-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 "Return the type (e.g. `x' or `tty') of DEVICE-OR-FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 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
893 for a description of the possible types."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 (if (devicep device-or-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 (device-type device-or-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 (frame-type device-or-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 (defun fw-frame (obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 "Given a frame or window, return the associated frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 Return nil otherwise."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 (cond ((windowp obj) (window-frame obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 ((framep obj) obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 (t nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 ;;;; Frame configurations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 (defun current-frame-configuration ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 "Return a list describing the positions and states of all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 Its car is `frame-configuration'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 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
912 where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 FRAME is a frame object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 PLIST is a property list specifying some of FRAME's properties, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 WINDOW-CONFIG is a window configuration object for FRAME."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 (cons 'frame-configuration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 (mapcar (function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 (lambda (frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 (list frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 (frame-properties frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 (current-window-configuration frame))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 (frame-list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 (defun set-frame-configuration (configuration &optional nodelete)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 "Restore the frames to the state described by CONFIGURATION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 Each frame listed in CONFIGURATION has its position, size, window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 configuration, and other properties set as specified in CONFIGURATION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 Ordinarily, this function deletes all existing frames not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 listed in CONFIGURATION. But if optional second argument NODELETE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 is given and non-nil, the unwanted frames are iconified instead."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 (or (frame-configuration-p configuration)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 (signal 'wrong-type-argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 (list 'frame-configuration-p configuration)))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
934 (let ((config-alist (cdr configuration))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 frames-to-delete)
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
936 (mapc #'(lambda (frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
937 (let ((properties (assq frame config-alist)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
938 (if properties
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
939 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
940 (set-frame-properties
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
941 frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
942 ;; 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
943 ;; we might as well omit the parameter altogether.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
944 (lax-plist-remprop (nth 1 properties) 'minibuffer))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
945 (set-window-configuration (nth 2 properties)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
946 (setq frames-to-delete (cons frame frames-to-delete)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 (frame-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 (if nodelete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 ;; Note: making frames invisible here was tried
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 ;; but led to some strange behavior--each time the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 ;; was made visible again, the window manager asked afresh
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 ;; for where to put it.
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
953 (mapc #'iconify-frame frames-to-delete)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
954 (mapc #'delete-frame frames-to-delete))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
956 ; 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
957 ; 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
958
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 (defun frame-configuration-p (object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 "Return non-nil if OBJECT seems to be a frame configuration.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 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
962 configuration."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 (and (consp object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 (eq (car object) 'frame-configuration)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
967 ;;;; Convenience functions for accessing and interactively changing
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
968 ;;;; frame parameters.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
969
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
970 (defun frame-height (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
971 "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
972 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
973 (frame-property frame 'height))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
974
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
975 (defun frame-width (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
976 "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
977 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
978 (frame-property frame 'width))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
979
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
980 (defalias 'set-default-font 'set-frame-font)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
981
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
982 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
983 (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
984 "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
985 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
986 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
987
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
988 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
989 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
990 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
991 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
992 (interactive
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
993 (let* ((frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
994 (completion-ignore-case t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
995 (font (completing-read "Font name: "
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
996 (mapcar #'list
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
997 (list-fonts "*" frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
998 nil nil nil nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
999 (face-font-name 'default frame))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1000 (list font current-prefix-arg)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1001 (let* ((frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1002 (fht (frame-pixel-height frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1003 (fwd (frame-pixel-width frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1004 (face-list-to-change (face-list)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1005 (when (eq (device-type) 'mswindows)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1006 (setq face-list-to-change
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1007 (delq 'border-glyph face-list-to-change)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1008 ;; 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
1009 ;; face inheritance?
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1010 (dolist (face face-list-to-change)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1011 (when (face-font-instance face)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1012 (condition-case c
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1013 (set-face-font face font-name frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1014 (error
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1015 (display-error c nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1016 (sit-for 1)))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1017 (if keep-size
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1018 (set-frame-pixel-size frame fwd fht)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1019 (run-hooks 'after-setting-font-hook))
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 (defun set-frame-property (frame prop val)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1022 "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
1023 (set-frame-properties frame (list prop val)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1024
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1025 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1026 (defun set-background-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1027 "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
1028 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
1029 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
1030 `(face-background-name 'default)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1031 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1032 ;; (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
1033 (set-face-background 'default color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1034
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1035 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1036 (defun set-foreground-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1037 "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
1038 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
1039 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
1040 `(face-foreground-name 'default)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1041 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1042 (set-face-foreground 'default color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1043
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1044 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1045 (defun set-cursor-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1046 "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
1047 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
1048 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
1049 '(face-background-name 'text-cursor)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1050 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1051 (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
1052
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1053 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1054 (defun set-mouse-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1055 "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
1056 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
1057 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
1058 `(face-foreground-name 'pointer)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1059 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1060 (set-face-foreground 'pointer color-name (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1061
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1062 ;; XEmacs change: this function differs significantly from Emacs.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1063 (defun set-border-color (color-name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1064 "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
1065 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
1066 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
1067 `(face-foreground-name 'border-glyph)'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1068 (interactive (list (read-color "Color: ")))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1069 (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
1070
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1071 ;;; BEGIN XEmacs addition
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1072 ;;; 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
1073 ;;; to all frames.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1074
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1075 (defcustom auto-raise-frame nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1076 "*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
1077 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
1078 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
1079 :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1080 :group 'frames)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1081
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1082 (defcustom auto-lower-frame nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1083 "*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
1084 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
1085 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
1086 :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1087 :group 'frames)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1088
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1089 (defun default-select-frame-hook ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1090 "Implement the `auto-raise-frame' variable.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1091 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
1092 (if auto-raise-frame (raise-frame (selected-frame))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1094 (defun default-deselect-frame-hook ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1095 "Implement the `auto-lower-frame' variable.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1096 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
1097 (if auto-lower-frame (lower-frame (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1098 (highlight-extent nil nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1099
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1100 (or select-frame-hook
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1101 (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
1102
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1103 (or deselect-frame-hook
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1104 (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
1105
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1106 ;;; END XEmacs addition
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1107 ;;; 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
1108 ;;; 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
1109
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1110 ;; 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
1111 (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
1112 "Specifier that determines which frames should auto-raise.
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-raises; `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 (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
1116 "Specifier that determines which frames should auto-lower.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1117 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
1118
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1119 ;; XEmacs change: use specifiers instead of frame-parameters
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1120 (defun auto-raise-mode (arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1121 "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
1122 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
1123 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
1124 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
1125 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
1126 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
1127 (interactive "P")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1128 (if (null arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1129 (setq arg
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1130 (if (specifier-instance auto-raise-specifier (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1131 -1 1)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1132 (if (> arg 0)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1133 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1134 (raise-frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1135 (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
1136 (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
1137
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1138 ;; XEmacs change: use specifiers instead of frame-parameters
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1139 (defun auto-lower-mode (arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1140 "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
1141 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
1142 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
1143 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
1144 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
1145 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
1146 (interactive "P")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1147 (if (null arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1148 (setq arg
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1149 (if (specifier-instance auto-lower-specifier (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1150 -1 1)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1151 (if (> arg 0)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1152 (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1153 (lower-frame (selected-frame))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1154 (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
1155 (set-specifier auto-lower-specifier (> arg 0) (selected-frame))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1157 ;; 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
1158 ;(defun set-frame-name (name)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1159 ; "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
1160 ;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
1161 ;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
1162 ;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
1163 ; (interactive "sFrame name: ")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1164 ; (modify-frame-parameters (selected-frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1165 ; (list (cons 'name name))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1166
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1167 ;; 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
1168 ;; See window-hscroll and ... what? window-start?
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1169 ;(defun frame-current-scroll-bars (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1170 ; "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
1171 ;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
1172 ;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
1173 ;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
1174 ;bars (top, bottom, or nil)."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1175 ; (let ((vert (frame-parameter frame 'vertical-scroll-bars))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1176 ; (hor nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1177 ; (unless (memq vert '(left right nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1178 ; (setq vert default-frame-scroll-bars))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1179 ; (cons vert hor)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1180
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1181 ;;;; Frame/display capabilities.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1182 (defun display-mouse-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1183 "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
1184 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
1185 selected frame)."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1186 (case (framep-on-display display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1187 ;; 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
1188 ((x ns gtk) t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1189 (mswindows (> mswindows-num-mouse-buttons 0))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1190 (tty
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
1191 (and-fboundp 'gpm-is-supported-p
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
1192 (gpm-is-supported-p (display-device display))))
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1193 (t nil)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1194
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1195 (defun display-popup-menus-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1196 "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
1197 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
1198 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
1199 (and
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1200 (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
1201 (display-mouse-p display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1202
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1203 (defun display-graphic-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1204 "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
1205 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
1206 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
1207 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
1208 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
1209 frame)."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1210 (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
1211
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1212 (defun display-images-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1213 "Return non-nil if DISPLAY can display images.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1214 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
1215 frame)."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1216 (display-graphic-p display))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1217
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1218 (defalias 'display-multi-frame-p 'display-graphic-p)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1219 (defalias 'display-multi-font-p 'display-graphic-p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1221 (defun display-selections-p (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1222 "Return non-nil if DISPLAY supports selections.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1223 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
1224 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
1225 `clipboard'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1226 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
1227 frame)."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1228 (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
1229
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1230 (defun display-screens (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1231 "Return the number of screens associated with DISPLAY."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1232 (device-num-screens (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1233
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1234 (defun display-pixel-height (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1235 "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
1236 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
1237 (device-pixel-height (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1238
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1239 (defun display-pixel-width (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1240 "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
1241 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
1242 (device-pixel-width (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1243
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1244 (defun display-mm-height (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1245 "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
1246 If the information is unavailable, value is nil."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1247 (device-mm-height (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1248
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1249 (defun display-mm-width (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1250 "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
1251 If the information is unavailable, value is nil."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1252 (device-mm-width (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1253
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1254 (defun display-backing-store (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1255 "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
1256 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
1257 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
1258 (device-backing-store (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-save-under (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1261 "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
1262 (device-save-under (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-planes (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1265 "Return the number of planes supported by DISPLAY."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1266 (device-bitplanes (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-color-cells (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1269 "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
1270 (device-color-cells (display-device display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1271
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1272 (defun display-visual-class (&optional display)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1273 "Returns the visual class of DISPLAY.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1274 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
1275 `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
1276 (case (framep-on-display display)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1942
diff changeset
1277 (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
1278 (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
1279 (mswindows (let ((planes (display-planes display)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1280 (cond ((eq planes 1) 'static-gray)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1281 ((eq planes 4) 'static-color)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1282 ((> planes 8) 'true-color)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1283 (t 'pseudo-color))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1284 (t 'static-gray)))
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
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1287 ;; XEmacs change: omit the Emacs 18 compatibility functions:
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1288 ;; 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
1289
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1290 (defun delete-other-frames (&optional frame)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1291 "Delete all frames except FRAME.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1292 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
1293 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
1294 (interactive)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1295 (unless frame
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1296 (setq frame (selected-frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1297 (let* ((mini-frame (window-frame (minibuffer-window frame)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1298 (frames (delq mini-frame (delq frame (frame-list)))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1299 (mapc 'delete-frame frames)))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1300
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1301 ;; XEmacs change: we still use delete-frame-hook
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1302 ;; miscellaneous obsolescence declarations
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1303 ;(defvaralias 'delete-frame-hook 'delete-frame-functions)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1304 ;(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
1305
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 ;; Highlighting trailing whitespace.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1308 ;; 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
1309 ;; text-modes package.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1310
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1311 ;(make-variable-buffer-local 'show-trailing-whitespace)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1312
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1313 ;(defcustom show-trailing-whitespace nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1314 ; "*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
1315 ;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1316 ;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
1317 ; :tag "Highlight trailing whitespace."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1318 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1319 ; :group 'font-lock)
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
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1322 ;; Scrolling
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1323 ;; 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
1324
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1325 ;(defgroup scrolling nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1326 ; "Scrolling windows."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1327 ; :version "21.1"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1328 ; :group 'frames)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1329
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1330 ;(defcustom auto-hscroll-mode t
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1331 ; "*Allow or disallow automatic scrolling windows horizontally.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1332 ;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
1333 ;point visible."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1334 ; :version "21.1"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1335 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1336 ; :group 'scrolling)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1337 ;(defvaralias 'automatic-hscrolling 'auto-hscroll-mode)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1338
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 ;; Blinking cursor
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1341 ;; 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
1342 ;; edit-utils package.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1343
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1344 ; (defgroup cursor nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1345 ; "Displaying text cursors."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1346 ; :version "21.1"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1347 ; :group 'frames)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1349 ; (defcustom blink-cursor-delay 0.5
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1350 ; "*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
1351 ; :tag "Delay in seconds."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1352 ; :type 'number
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1353 ; :group 'cursor)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1354
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1355 ; (defcustom blink-cursor-interval 0.5
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1356 ; "*Length of cursor blink interval in seconds."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1357 ; :tag "Blink interval in seconds."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1358 ; :type 'number
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1359 ; :group 'cursor)
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-idle-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1362 ; "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
1363 ; 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
1364
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1365 ; (defvar blink-cursor-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1366 ; "Timer started from `blink-cursor-start'.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1367 ; 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
1368
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1369 ; (defvar blink-cursor-mode nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1370 ; "Non-nil means blinking cursor is active.")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1371
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1372 ; (defun blink-cursor-mode (arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1373 ; "Toggle blinking cursor mode.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1374 ; 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
1375 ; 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
1376 ; window blinks.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1377
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1378 ; 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
1379 ; 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
1380 ; 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
1381 ; (interactive "P")
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1382 ; (let ((on-p (if (null arg)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1383 ; (not blink-cursor-mode)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1384 ; (> (prefix-numeric-value arg) 0))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1385 ; (if blink-cursor-idle-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1386 ; (cancel-timer blink-cursor-idle-timer))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1387 ; (if blink-cursor-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1388 ; (cancel-timer blink-cursor-timer))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1389 ; (setq blink-cursor-idle-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1390 ; blink-cursor-timer nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1391 ; blink-cursor-mode nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1392 ; (if on-p
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1393 ; (progn
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1394 ; ;; Hide the cursor.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1395 ; ;(internal-show-cursor nil nil)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1396 ; (setq blink-cursor-idle-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1397 ; (run-with-idle-timer blink-cursor-delay
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1398 ; blink-cursor-delay
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1399 ; 'blink-cursor-start))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1400 ; (setq blink-cursor-mode t))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1401 ; (internal-show-cursor nil t))))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1402
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1403 ; ;; 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
1404 ; ;; the init-file is read.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1405
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1406 ; (defcustom blink-cursor nil
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1407 ; "*Non-nil means blinking cursor mode is active."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1408 ; :group 'cursor
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1409 ; :tag "Blinking cursor"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1410 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1411 ; :set #'(lambda (symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1412 ; (set-default symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1413 ; (blink-cursor-mode (or value 0))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1415 ; (defun blink-cursor-start ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1416 ; "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
1417 ; 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
1418 ; 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
1419 ; command starts, by installing a pre-command hook."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1420 ; (when (null blink-cursor-timer)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1421 ; (add-hook 'pre-command-hook 'blink-cursor-end)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1422 ; (setq blink-cursor-timer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1423 ; (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
1424 ; 'blink-cursor-timer-function))))
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-timer-function ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1427 ; "Timer function of timer `blink-cursor-timer'."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1428 ; (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
1429
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1430 ; (defun blink-cursor-end ()
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1431 ; "Stop cursor blinking.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1432 ; 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
1433 ; 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
1434 ; itself as a pre-command hook."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1435 ; (remove-hook 'pre-command-hook 'blink-cursor-end)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1436 ; (internal-show-cursor nil t)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1437 ; (cancel-timer blink-cursor-timer)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1438 ; (setq blink-cursor-timer nil))
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1439
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440
1942
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1441 ;; Hourglass pointer
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1442 ;; XEmacs omission: this functionality is provided elsewhere.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1443
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1444 ; (defcustom display-hourglass t
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1445 ; "*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
1446 ; :tag "Hourglass pointer"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1447 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1448 ; :group 'cursor)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1449
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1450 ; (defcustom hourglass-delay 1
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1451 ; "*Seconds to wait before displaying an hourglass pointer."
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1452 ; :tag "Hourglass delay"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1453 ; :type 'number
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1454 ; :group 'cursor)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1455
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1456 ;
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1457 ; (defcustom cursor-in-non-selected-windows t
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1458 ; "*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
1459 ; 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
1460 ; 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
1461 ; :tag "Cursor in non-selected windows"
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1462 ; :type 'boolean
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1463 ; :group 'cursor
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1464 ; :set #'(lambda (symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1465 ; (set-default symbol value)
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1466 ; (force-mode-line-update t)))
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
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1469 ;;;; Key bindings
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1470 ;; XEmacs change: these keybindings are in keydef.el.
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1471
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1472 ;(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
1473 ;(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
1474 ;(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
1475 ;(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
1476
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1477
da8cdcec6dff [xemacs-hg @ 2004-03-08 15:22:44 by james]
james
parents: 903
diff changeset
1478 ;;; 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
1479
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 ;;; Iconifying emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 ;;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 ;;; The function iconify-emacs replaces every non-iconified emacs window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 ;;; with a *single* icon. Iconified emacs windows are left alone. When
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 ;;; emacs is in this globally-iconified state, de-iconifying any emacs icon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 ;;; will uniconify all frames that were visible, and iconify all frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 ;;; that were not. This is done by temporarily changing the value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 ;;; `map-frame-hook' to `deiconify-emacs' (which should never be called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 ;;; except from the map-frame-hook while emacs is iconified).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 ;;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 ;;; The title of the icon representing all emacs frames is controlled by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 ;;; the variable `icon-name'. This is done by temporarily changing the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 ;;; value of `frame-icon-title-format'. Unfortunately, this changes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 ;;; titles of all emacs icons, not just the "big" icon.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 ;;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 ;;; It would be nice if existing icons were removed and restored by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 ;;; iconifying the emacs process, but I couldn't make that work yet.
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 (defvar icon-name nil) ; set this at run time, not load time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 (defvar iconification-data nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 (defun iconify-emacs ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 "Replace every non-iconified FRAME with a *single* icon.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 Iconified frames are left alone. When XEmacs is in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 globally-iconified state, de-iconifying any emacs icon will uniconify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 all frames that were visible, and iconify all frames that were not."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 (if iconification-data (error "already iconified?"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 (let* ((frames (frame-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 (rest frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 (me (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 (while rest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 (setq frame (car rest))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 (setcar rest (cons frame (frame-visible-p frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 ; (if (memq (cdr (car rest)) '(icon nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 ; (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 ; (make-frame-visible frame) ; deiconify, and process the X event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 ; (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
1520 ; ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 (or (eq frame me) (make-frame-invisible frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 (setq rest (cdr rest)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 (or (boundp 'map-frame-hook) (setq map-frame-hook nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 (or icon-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 (setq icon-name (concat invocation-name " @ " (system-name))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 (setq iconification-data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 (list frame-icon-title-format map-frame-hook frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 frame-icon-title-format icon-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 map-frame-hook 'deiconify-emacs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 (iconify-frame me)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 (defun deiconify-emacs (&optional ignore)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 (or iconification-data (error "not iconified?"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 (setq frame-icon-title-format (car iconification-data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 map-frame-hook (car (cdr iconification-data))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 iconification-data (car (cdr (cdr iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 (while iconification-data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 (let ((visibility (cdr (car iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 (cond (visibility ;; JV (Note non-nil means visible in XEmacs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 (make-frame-visible (car (car iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 ; (t ;; (eq visibility 'icon) ;; JV Not in XEmacs!!!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 ; (make-frame-visible (car (car iconification-data)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 ; (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
1545 ; (iconify-frame (car (car iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 ;; (t nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 (setq iconification-data (cdr iconification-data))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 (defun suspend-or-iconify-emacs ()
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1551 "Call iconify-emacs if using a window system, otherwise suspend Emacs."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 (cond ((device-on-window-system-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 (iconify-emacs))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 ((and (eq (device-type) 'tty)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1556 (declare-fboundp (console-tty-controlling-process
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1557 (selected-console))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 (suspend-console (selected-console)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 (suspend-emacs))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 ;; 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
1563 ;; 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
1564 ;; different things depending on window-system. We can't do the same,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 ;; because we allow simultaneous X and TTY consoles.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 (defun suspend-emacs-or-iconify-frame ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 "Iconify the selected frame if using a window system, otherwise suspend Emacs."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 (cond ((device-on-window-system-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 (iconify-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 ((and (eq (frame-type) 'tty)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1572 (declare-fboundp (console-tty-controlling-process
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
1573 (selected-console))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 (suspend-console (selected-console)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 (suspend-emacs))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 ;;; Application-specific frame-management
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 (defcustom get-frame-for-buffer-default-frame-name nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 "*The default frame to select; see doc of `get-frame-for-buffer'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 :type 'string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 (defcustom get-frame-for-buffer-default-instance-limit nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 "*The default instance limit for creating new frames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 see doc of `get-frame-for-buffer'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 :type 'integer
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 (defun get-frame-name-for-buffer (buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 (let ((mode (and (get-buffer buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 (save-excursion (set-buffer buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 major-mode))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 (or (get mode 'frame-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 get-frame-for-buffer-default-frame-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 (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
1600 (let* ((fr (make-frame plist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 (w (frame-root-window fr)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 ;; Make the one buffer being displayed in this newly created
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 ;; frame be the buffer of interest, instead of something
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 ;; random, so that it won't be shown in two-window mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 ;; Avoid calling switch-to-buffer here, since that's something
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 ;; people might want to call this routine from.
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 ;; (If the root window doesn't have a buffer, then that means
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 ;; there is more than one window on the frame, which can only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 ;; happen if the user has done something funny on the frame-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 ;; creation-hook. If that's the case, leave it alone.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 (if (window-buffer w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 (set-window-buffer w buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 fr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618 (defcustom get-frame-for-buffer-default-to-current nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 "*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
1620 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 (defun get-frame-for-buffer-noselect (buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 &optional not-this-window-p on-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 "Return a frame in which to display BUFFER.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 This is a subroutine of `get-frame-for-buffer' (which see)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 (let (name limit)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 (cond
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 ((or on-frame (eq (selected-window) (minibuffer-window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 ;; don't switch frames if a frame was specified, or to list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 ;; completions from the minibuffer, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 ((setq name (get-frame-name-for-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 ;; 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
1637 ;; name. That always takes priority.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 (let ((limit (get name 'instance-limit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 (defaults (get name 'frame-defaults))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 (matching-frames '())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 frames frame already-visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 ;; Sort the list so that iconic frames will be found last. They
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 ;; will be used too, but mapped frames take precedence. And
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 ;; fully visible frames come before occluded frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 ;; Hidden frames come after really visible ones
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 (setq frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 (sort (frame-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 #'(lambda (s1 s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 (cond ((frame-totally-visible-p s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 ((not (frame-visible-p s2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 (frame-visible-p s1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 ((eq (frame-visible-p s2) 'hidden)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 (eq (frame-visible-p s1) t ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 ((not (frame-totally-visible-p s2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 (and (frame-visible-p s1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 (frame-totally-visible-p s1)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 ;; but the selected frame should come first, even if it's occluded,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 ;; to minimize thrashing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 (setq frames (cons (selected-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 (delq (selected-frame) frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 (setq name (symbol-name name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 (while frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 (setq frame (car frames))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 (if (equal name (frame-name frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 (if (get-buffer-window buffer frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 (setq already-visible frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 frames nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 (setq matching-frames (cons frame matching-frames))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 (setq frames (cdr frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 (cond (already-visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 already-visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 ((or (null matching-frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 (eq limit 0) ; means create with reckless abandon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 (and limit (< (length matching-frames) limit)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 (get-frame-for-buffer-make-new-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 (alist-to-plist (acons 'name name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 (plist-to-alist defaults)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 ;; do not switch any of the window/buffer associations in an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 ;; existing frame; this function only picks a frame; the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 ;; determination of which windows on it get reused is up to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 ;; display-buffer itself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 ;; (or (window-dedicated-p (selected-window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 ;; (switch-to-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 (car matching-frames)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 ((setq limit get-frame-for-buffer-default-instance-limit)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 ;; 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
1695 ;; particular name, but the user wants a new frame rather than
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 ;; reusing the existing one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 (let* ((defname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 (or (plist-get default-frame-plist 'name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 default-frame-name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 (frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 (sort (filtered-frame-list #'(lambda (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 (or (frame-visible-p x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 (frame-iconified-p x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 #'(lambda (s1 s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 (cond ((and (frame-visible-p s1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 (not (frame-visible-p s2))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 ((and (eq (frame-visible-p s1) t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 (eq (frame-visible-p s2) 'hidden)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 ((and (frame-visible-p s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 (not (frame-visible-p s1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 ((and (equal (frame-name s1) defname)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 (not (equal (frame-name s2) defname))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 ((and (equal (frame-name s2) defname)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 (not (equal (frame-name s1) defname)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 ((frame-totally-visible-p s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 (t))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 ;; put the selected frame last. The user wants a new frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 ;; so don't reuse the existing one unless forced to.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 (setq frames (append (delq (selected-frame) frames) (list frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 (if (or (eq limit 0) ; means create with reckless abandon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 (< (length frames) limit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 (get-frame-for-buffer-make-new-frame buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 (car frames))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 (not-this-window-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 (let ((w-list (windows-of-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 f w
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 (first-choice nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 (second-choice (if get-frame-for-buffer-default-to-current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 (selected-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 (last-resort nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 (while (and w-list (null first-choice))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 (setq w (car w-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 f (window-frame w))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 (cond ((eq w (selected-window)) nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 ((not (frame-visible-p f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 (if (null last-resort)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 (setq last-resort f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 ((eq f (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 (setq first-choice f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 ((null second-choice)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 (setq second-choice f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 (setq w-list (cdr w-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 (or first-choice second-choice last-resort)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 (get-frame-for-buffer-default-to-current (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 ;; 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
1755 ;; particular name. So try to find a frame already displaying this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 ;; buffer.
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 (let ((w (or (get-buffer-window buffer nil) ; check current first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 (get-buffer-window buffer 'visible) ; then visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 (get-buffer-window buffer 0)))) ; then iconic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 (cond ((null w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 ;; It's not in any window - return nil, meaning no frame has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 ;; preference.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 ;; Otherwise, return the frame of the buffer's window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 (window-frame w))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 ;; 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
1771 ;; actually select the frame it wants. Fdisplay_buffer() takes notice of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 ;; changes to the selected frame.
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 771
diff changeset
1773 (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
1774 shrink-to-fit)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 "Select and return a frame in which to display BUFFER.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 Normally, the buffer will simply be displayed in the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 But if the symbol naming the major-mode of the buffer has a 'frame-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 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
1779 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
1780 created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 If the major-mode doesn't have a 'frame-name property, then the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 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
1784 that is nil (the default) then the currently selected frame will used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 If the frame-name symbol has an 'instance-limit property (an integer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 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
1788 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
1789 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
1790
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 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
1792 ignored, and that frame is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 If the frame-name symbol has a 'frame-defaults property, then that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 prepended to the `default-frame-plist' when creating a frame for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 first time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 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
1799 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
1800 above behavior."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 (let ((frame (get-frame-for-buffer-noselect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 buffer not-this-window-p on-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 (if (not (eq frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 (select-frame frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 (or (frame-visible-p frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 ;; If the frame was already visible, just focus on it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 ;; If it wasn't visible (it was just created, or it used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 ;; to be iconified) then uniconify, raise, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 (make-frame-visible frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811 frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 (defun frames-of-buffer (&optional buffer visible-only)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 "Return list of frames that BUFFER is currently being displayed on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 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
1816 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
1817 (let ((list (windows-of-buffer buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 (cur-frame (selected-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 next-frame frames save-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 (while list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 (if (memq (setq next-frame (window-frame (car list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823 frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824 nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 (if (eq cur-frame next-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 (setq save-frame next-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 (and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 (or (not visible-only)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 (frame-visible-p next-frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 (setq frames (append frames (list next-frame))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 (setq list (cdr list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833 (if save-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 (append (list save-frame) frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 frames)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 (defcustom temp-buffer-shrink-to-fit nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 "*When non-nil resize temporary output buffers to minimize blank lines."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 (defcustom temp-buffer-max-height .5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843 "*Proportion of frame to use for temp windows."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 :type 'number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 :group 'frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 (defun show-temp-buffer-in-current-frame (buffer)
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1848 "For use as the value of `temp-buffer-show-function':
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 always displays the buffer in the selected frame, regardless of the behavior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 that would otherwise be introduced by the `pre-display-buffer-function', which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 is normally set to `get-frame-for-buffer' (which see)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 (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
1853 (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
1854 (if (not (eq (last-nonminibuf-frame) (window-frame window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 ;; only the pre-display-buffer-function should ever do this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 (error "display-buffer switched frames on its own!!"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 (setq minibuffer-scroll-window window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858 (set-window-start window 1) ; obeys narrowing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 (set-window-point window 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 (setq pre-display-buffer-function 'get-frame-for-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 (setq temp-buffer-show-function 'show-temp-buffer-in-current-frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 ;; from Bob Weiner <bweiner@pts.mot.com>, modified by Ben Wing
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 ;; By adding primitives to directly access the window hierarchy,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 ;; we can move many functions into Lisp. We do it this way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 ;; because the implementations are simpler in Lisp, and because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 ;; new functions like this can be added without requiring C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 ;; additions.
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 (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
1875 minor-end-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 ;; LEFT-RIGHT-P means we're looking for the leftmost or rightmost
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 ;; window, instead of the highest or lowest. In this case, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 ;; 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
1879 ;; bottom. The "minor axis" always goes perpendicularly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 ;; 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
1882 ;; 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
1883 ;; start.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885 ;; 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
1886 ;; end of the minor axis instead of the beginning.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 ;; 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
1889 ;; of windows that abut the top; call this function foo(). So, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890 ;; start with the root window. If this is a vertical combination
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 ;; window, then foo() applied to the root window is the same as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 ;; foo() applied to the first child. If the root is a horizontal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 ;; combination window, then foo() applied to the root is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 ;; same as the sum of foo() applied to each of the children.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 ;; Otherwise, the root window is a leaf window, and foo() is 1.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 ;; Now it's clear that, each time foo() encounters a leaf window,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897 ;; it's encountering a different window that abuts the top.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 ;; With a little examining, you can see that foo encounters the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 ;; top-abutting windows in order from left to right. We can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 ;; modify foo() to return the nth top-abutting window by simply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 ;; keeping a global variable that is decremented each time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 ;; foo() encounters a leaf window and would return 1. If the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 ;; global counter gets to zero, we've encountered the window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 ;; we were looking for, so we exit right away using a `throw'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 ;; Otherwise, we make sure that all normal paths return nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 (let (child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 (cond ((setq child (if left-right-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 (window-first-hchild window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 (window-first-vchild window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 (if major-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 (while (window-next-child child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 (setq child (window-next-child child))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 (frame-utmost-window-2 child position left-right-p major-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 minor-end-p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 ((setq child (if left-right-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 (window-first-vchild window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 (window-first-hchild window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 (if minor-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 (while (window-next-child child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 (setq child (window-next-child child))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 (while child
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 (frame-utmost-window-2 child position left-right-p major-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 minor-end-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 (setq child (if minor-end-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926 (window-previous-child child)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 (window-next-child child))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 (setcar position (1- (car position)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 (if (= (car position) 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 (throw 'fhw-exit window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 nil)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 (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
1936 (let (minor-end-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 (or frame (setq frame (selected-frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 (or position (setq position 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 (if (>= position 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 (setq position (1+ position))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 (setq minor-end-p t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 (setq position (- position)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 (catch 'fhw-exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 ;; 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
1945 ;; scheme has "boxes" for the same purpose.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 (frame-utmost-window-2 (frame-root-window frame) (list position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 left-right-p major-end-p minor-end-p))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 (defun frame-highest-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 "Return the highest window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954 the top of the frame: 0 means the leftmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 top of the frame, 1 the next-leftmost, etc. POSITION can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 be less than zero: -1 means the rightmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 top of the frame, -2 the next-rightmost, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 If omitted, POSITION defaults to 0, i.e. the leftmost highest window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 (frame-utmost-window-1 frame position nil nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 (defun frame-lowest-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 "Return the lowest window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 the bottom of the frame: 0 means the leftmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 bottom of the frame, 1 the next-leftmost, etc. POSITION can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 be less than zero: -1 means the rightmost window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969 bottom of the frame, -2 the next-rightmost, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 If omitted, POSITION defaults to 0, i.e. the leftmost lowest window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 (frame-utmost-window-1 frame position nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 (defun frame-leftmost-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 "Return the leftmost window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 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
1979 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
1980 be less than zero: -1 means the lowest window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 left edge of the frame, -2 the next-lowest, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 If omitted, POSITION defaults to 0, i.e. the highest leftmost window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 (frame-utmost-window-1 frame position t nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 (defun frame-rightmost-window (&optional frame position)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 "Return the rightmost window on FRAME which is at POSITION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 POSITION is used to distinguish between multiple windows that abut
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 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
1991 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
1992 be less than zero: -1 means the lowest window abutting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 right edge of the frame, -2 the next-lowest, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 If omitted, POSITION defaults to 0, i.e. the highest rightmost window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 If there is no window at the given POSITION, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 (frame-utmost-window-1 frame position t t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 ;; frame properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 (put 'cursor-color 'frame-property-alias [text-cursor background])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 (put 'modeline 'frame-property-alias 'has-modeline-p)
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 (provide 'frame)
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 ;;; frame.el ends here