;;; x-init.el --- initialization code for X windows;; Copyright (C) 1990, 1993, 1994, 1997 Free Software Foundation, Inc.;; Copyright (C) 1995 Board of Trustees, University of Illinois.;; Copyright (C) 1995, 1996 Ben Wing.;; Maintainer: XEmacs Development Team;; Keywords: terminals, dumped;; This file is part of XEmacs.;; XEmacs is free software; you can redistribute it and/or modify it;; under the terms of the GNU General Public License as published by;; the Free Software Foundation; either version 2, or (at your option);; any later version.;; XEmacs is distributed in the hope that it will be useful, but;; WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU;; General Public License for more details.;; You should have received a copy of the GNU General Public License;; along with XEmacs; see the file COPYING. If not, write to the;; Free Software Foundation, 59 Temple Place - Suite 330,;; Boston, MA 02111-1307, USA.;;; Synched up with: Not synched.;;; Commentary:;; This file is dumped with XEmacs (when X support is compiled in).;;; Code:;; If you want to change this variable, this is the place you must do it.;; Do not set it to a string containing periods. X doesn't like that.;(setq x-emacs-application-class "Emacs")(defgroupxnil"The X Window system.":group'environment);; selections and active regions;; If and only if zmacs-regions is true:;; When a mark is pushed and the region goes into the "active" state, we;; assert it as the Primary selection. This causes it to be hilighted.;; When the region goes into the "inactive" state, we disown the Primary;; selection, causing the region to be dehilighted.;; Note that it is possible for the region to be in the "active" state;; and not be hilighted, if it is in the active state and then some other;; application asserts the selection. This is probably not a big deal.(defunx-activate-region-as-selection()(if(marker-buffer(mark-markert))(x-own-selection(cons(point-markert)(mark-markert)))));; OpenWindows-like "find" processing. These functions are really Sunisms,;; but we put them here instead of in x-win-sun.el in case someone wants;; to use them when not running on a Sun console (presumably after binding;; them to different keys, or putting them on menus.)(defvarow-find-last-stringnil)(defvarow-find-last-clipboardnil)(defunow-find(&optionalbackward-p)"Search forward the next occurrence of the text of the selection."(interactive)(let((sel(condition-case()(x-get-selection)(errornil)))(clip(condition-case()(x-get-clipboard)(errornil)))text)(setqtext(cond(sel)((not(equalclipow-find-last-clipboard))(setqow-find-last-clipboardclip))(ow-find-last-string)(t(error"No selection available"))))(setqow-find-last-stringtext)(cond(backward-p(search-backwardtext)(set-mark(+(point)(lengthtext))))(t(search-forwardtext)(set-mark(-(point)(lengthtext)))))(zmacs-activate-region)))(defunow-find-backward()"Search backward for the previous occurrence of the text of the selection."(interactive)(ow-findt));; Load X-server specific code.;; Specifically, load some code to repair the grievous damage that MIT and;; Sun have done to the default keymap for the Sun keyboards.(eval-when-compile(defmacrox-define-dead-key(keymap)`(when(x-keysym-on-keyboard-p',key)(define-keyfunction-key-map[,key]',map))))(defunx-initialize-compose()"Enable compose processing"(autoload'compose-map"x-compose"nilt'keymap)(autoload'compose-acute-map"x-compose"nilt'keymap)(autoload'compose-grave-map"x-compose"nilt'keymap)(autoload'compose-cedilla-map"x-compose"nilt'keymap)(autoload'compose-diaeresis-map"x-compose"nilt'keymap)(autoload'compose-circumflex-map"x-compose"nilt'keymap)(autoload'compose-tilde-map"x-compose"nilt'keymap)(when(x-keysym-on-keyboard-p'multi-key)(define-keyfunction-key-map[multi-key]'compose-map));; The dead keys might really be called just about anything, depending;; on the vendor. MIT thinks that the prefixes are "SunFA_", "D", and;; "hpmute_" for Sun, DEC, and HP respectively. However, OpenWindows 3;; thinks that the prefixes are "SunXK_FA_", "DXK_", and "hpXK_mute_".;; And HP (who don't mention Sun and DEC at all) use "XK_mute_".;; Go figure.;; Presumably if someone is running OpenWindows, they won't be using;; the DEC or HP keysyms, but if they are defined then that is possible,;; so in that case we accept them all.;; If things seem not to be working, you might want to check your;; /usr/lib/X11/XKeysymDB file to see if your vendor has an equally;; mixed up view of what these keys should be called.;; Canonical names:(x-define-dead-keyacutecompose-acute-map)(x-define-dead-keygravecompose-grave-map)(x-define-dead-keycedillacompose-cedilla-map)(x-define-dead-keydiaeresiscompose-diaeresis-map)(x-define-dead-keycircumflexcompose-circumflex-map)(x-define-dead-keytildecompose-tilde-map)(x-define-dead-keydegreecompose-ring-map);; Sun according to MIT:(x-define-dead-keySunFA_Acutecompose-acute-map)(x-define-dead-keySunFA_Gravecompose-grave-map)(x-define-dead-keySunFA_Cedillacompose-cedilla-map)(x-define-dead-keySunFA_Diaeresiscompose-diaeresis-map)(x-define-dead-keySunFA_Circumcompose-circumflex-map)(x-define-dead-keySunFA_Tildecompose-tilde-map);; Sun according to OpenWindows 2:(x-define-dead-keyDead_Gravecompose-grave-map)(x-define-dead-keyDead_Circumcompose-circumflex-map)(x-define-dead-keyDead_Tildecompose-tilde-map);; Sun according to OpenWindows 3:(x-define-dead-keySunXK_FA_Acutecompose-acute-map)(x-define-dead-keySunXK_FA_Gravecompose-grave-map)(x-define-dead-keySunXK_FA_Cedillacompose-cedilla-map)(x-define-dead-keySunXK_FA_Diaeresiscompose-diaeresis-map)(x-define-dead-keySunXK_FA_Circumcompose-circumflex-map)(x-define-dead-keySunXK_FA_Tildecompose-tilde-map);; DEC according to MIT:(x-define-dead-keyDacute_accentcompose-acute-map)(x-define-dead-keyDgrave_accentcompose-grave-map)(x-define-dead-keyDcedilla_accentcompose-cedilla-map)(x-define-dead-keyDcircumflex_accentcompose-circumflex-map)(x-define-dead-keyDtildecompose-tilde-map)(x-define-dead-keyDring_accentcompose-ring-map);; DEC according to OpenWindows 3:(x-define-dead-keyDXK_acute_accentcompose-acute-map)(x-define-dead-keyDXK_grave_accentcompose-grave-map)(x-define-dead-keyDXK_cedilla_accentcompose-cedilla-map)(x-define-dead-keyDXK_circumflex_accentcompose-circumflex-map)(x-define-dead-keyDXK_tildecompose-tilde-map)(x-define-dead-keyDXK_ring_accentcompose-ring-map);; HP according to MIT:(x-define-dead-keyhpmute_acutecompose-acute-map)(x-define-dead-keyhpmute_gravecompose-grave-map)(x-define-dead-keyhpmute_diaeresiscompose-diaeresis-map)(x-define-dead-keyhpmute_asciicircumcompose-circumflex-map)(x-define-dead-keyhpmute_asciitildecompose-tilde-map);; Empirically discovered on Linux XFree86 MetroX:(x-define-dead-keyusldead_acutecompose-acute-map)(x-define-dead-keyusldead_gravecompose-grave-map)(x-define-dead-keyusldead_diaeresiscompose-diaeresis-map)(x-define-dead-keyusldead_asciicircumcompose-circumflex-map)(x-define-dead-keyusldead_asciitildecompose-tilde-map);; HP according to OpenWindows 3:(x-define-dead-keyhpXK_mute_acutecompose-acute-map)(x-define-dead-keyhpXK_mute_gravecompose-grave-map)(x-define-dead-keyhpXK_mute_diaeresiscompose-diaeresis-map)(x-define-dead-keyhpXK_mute_asciicircumcompose-circumflex-map)(x-define-dead-keyhpXK_mute_asciitildecompose-tilde-map);; HP according to HP-UX 8.0:(x-define-dead-keyXK_mute_acutecompose-acute-map)(x-define-dead-keyXK_mute_gravecompose-grave-map)(x-define-dead-keyXK_mute_diaeresiscompose-diaeresis-map)(x-define-dead-keyXK_mute_asciicircumcompose-circumflex-map)(x-define-dead-keyXK_mute_asciitildecompose-tilde-map);; Xfree86 seems to use lower case and a hyphen(x-define-dead-keydead-acutecompose-acute-map)(x-define-dead-keydead-gravecompose-grave-map)(x-define-dead-keydead-cedillacompose-cedilla-map)(x-define-dead-keydead-diaeresiscompose-diaeresis-map)(x-define-dead-keydead-circumcompose-circumflex-map)(x-define-dead-keydead-tildecompose-tilde-map))(defunx-initialize-keyboard()"Perform X-Server-specific initializations. Don't call this.";; This is some heuristic junk that tries to guess whether this is;; a Sun keyboard.;;;; One way of implementing this (which would require C support) would;; be to examine the X keymap itself and see if the layout looks even;; remotely like a Sun - check for the Find key on a particular;; keycode, for example. It'd be nice to have a table of this to;; recognize various keyboards; see also xkeycaps.(let((vendor(x-server-vendor)))(cond((or(string-match"Sun Microsystems"vendor);; MIT losingly fails to tell us what hardware the X server;; is managing, so assume all MIT displays are Suns... HA HA!(string-equal"MIT X Consortium"vendor)(string-equal"X Consortium"vendor));; Ok, we think this could be a Sun keyboard. Load the Sun code.;; (load "x-win-sun"))(x-win-init-sun))((string-match"XFree86"vendor);; Those XFree86 people do some weird keysym stuff, too.;; (load "x-win-xfree86")))))(x-win-init-xfree86)))));; Moved from x-toolbar.el, since InfoDock doesn't dump a x-toolbar.el.(defunx-init-toolbar-from-resources(locale)(x-init-specifier-from-resourcestop-toolbar-height'natnumlocale'("topToolBarHeight"."TopToolBarHeight"))(x-init-specifier-from-resourcesbottom-toolbar-height'natnumlocale'("bottomToolBarHeight"."BottomToolBarHeight"))(x-init-specifier-from-resourcesleft-toolbar-width'natnumlocale'("leftToolBarWidth"."LeftToolBarWidth"))(x-init-specifier-from-resourcesright-toolbar-width'natnumlocale'("rightToolBarWidth"."RightToolBarWidth"))(x-init-specifier-from-resourcestop-toolbar-border-width'natnumlocale'("topToolBarBorderWidth"."TopToolBarBorderWidth"))(x-init-specifier-from-resourcesbottom-toolbar-border-width'natnumlocale'("bottomToolBarBorderWidth"."BottomToolBarBorderWidth"))(x-init-specifier-from-resourcesleft-toolbar-border-width'natnumlocale'("leftToolBarBorderWidth"."LeftToolBarBorderWidth"))(x-init-specifier-from-resourcesright-toolbar-border-width'natnumlocale'("rightToolBarBorderWidth"."RightToolBarBorderWidth")))(defvarpre-x-win-inittednil)(defuninit-pre-x-win()"Initialize X Windows at startup (pre). Don't call this."(when(notpre-x-win-initted)(require'x-iso8859-1)(setqcharacter-set-property'x-iso8859/1); see x-iso8859-1.el(setqinitial-frame-plist(ifinitial-frame-unmapped-p'(initially-unmappedt)nil))(setqpre-x-win-inittedt)))(defvarx-win-inittednil)(defuninit-x-win()"Initialize X Windows at startup. Don't call this."(when(notx-win-initted)(init-pre-x-win);; Open the X display when this file is loaded;; (Note that the first frame is created later.)(setqx-initial-argv-list(cons(carcommand-line-args)command-line-args-left));; Locate the app-defaults directory(when(and(boundp'x-app-defaults-directory)(nullx-app-defaults-directory))(setqx-app-defaults-directory(locate-data-directory"app-defaults")))(make-x-devicenil)(setqcommand-line-args-left(cdrx-initial-argv-list))(setqx-win-inittedt)))(defvarpost-x-win-inittednil)(defuninit-post-x-win()"Initialize X Windows at startup (post). Don't call this."(when(notpost-x-win-initted);; We can't load this until after the initial X device is created;; because the icon initialization needs to access the display to get;; any toolbar-related color resources.(if(and(not(featurep'infodock))(featurep'toolbar))(init-x-toolbar))(if(and(featurep'infodock)(featurep'toolbar))(require'id-x-toolbar))(if(featurep'mule)(init-mule-x-win));; these are only ever called if zmacs-regions is true.(add-hook'zmacs-deactivate-region-hook(lambda()(if(console-on-window-system-p)(x-disown-selection))))(add-hook'zmacs-activate-region-hook(lambda()(if(console-on-window-system-p)(x-activate-region-as-selection))))(add-hook'zmacs-update-region-hook(lambda()(if(console-on-window-system-p)(x-activate-region-as-selection))));; Motif-ish bindings;; The following two were generally unliked.;;(define-key global-map '(shift delete) 'x-kill-primary-selection);;(define-key global-map '(control delete) 'x-delete-primary-selection)(define-keyglobal-map'(shiftinsert)'x-yank-clipboard-selection)(define-keyglobal-map'(controlinsert)'x-copy-primary-selection);; These are Sun-isms.(define-keyglobal-map'copy'x-copy-primary-selection)(define-keyglobal-map'paste'x-yank-clipboard-selection)(define-keyglobal-map'cut'x-kill-primary-selection)(define-keyglobal-map'menu'popup-mode-menu);;(define-key global-map '(shift menu) 'x-goto-menubar) ;NYI(setqpost-x-win-inittedt)));;; Keyboard initialization needs to be done differently for each X;;; console, so use create-console-hook.(when(featurep'x)(add-hook'create-console-hook(lambda(console)(letf(((selected-console)console))(when(eq'x(console-typeconsole))(x-initialize-keyboard)(x-initialize-compose))))))(defunmake-frame-on-display(display&optionalprops)"Create a frame on the X display named DISPLAY.DISPLAY should be a standard display string such as \"unix:0\",or nil for the display specified on the command line or in theDISPLAY environment variable.PROPS should be a plist of properties, as in the call to `make-frame'.This function opens a connection to the display or reuses an existingconnection.This function is a trivial wrapper around `make-frame-on-device'."(interactive"sMake frame on display: ")(if(equaldisplay"")(setqdisplaynil))(make-frame-on-device'xdisplayprops));;; x-init.el ends here