Mercurial > hg > xemacs-beta
diff lisp/x11/x-init.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | ac2d302a0011 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/x11/x-init.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,204 @@ +;;; x-init.el --- initialization code for X windows +;; Copyright (C) 1990, 1993, 1994 Free Software Foundation, Inc. +;; Copyright (C) 1995 Board of Trustees, University of Illinois. +;; Copyright (C) 1995, 1996 Ben Wing. + +;; Author: various +;; Keywords: terminals + +;; 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, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Commentary: + +;;; 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") + +;;; 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. + +(defun x-activate-region-as-selection () + (if (marker-buffer (mark-marker t)) + (x-own-selection (cons (point-marker t) (mark-marker t))))) + +;;; 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 adding +;;; the to different keys, or putting them on menus.) + +(defvar ow-find-last-string nil) +(defvar ow-find-last-clipboard nil) + +(defun ow-find (&optional backward-p) + "Search forward the next occurrence of the text of the selection." + (interactive) + (let ((sel (condition-case () (x-get-selection) (error nil))) + (clip (condition-case () (x-get-clipboard) (error nil))) + text) + (setq text (cond + (sel) + ((not (equal clip ow-find-last-clipboard)) + (setq ow-find-last-clipboard clip)) + (ow-find-last-string) + (t (error "No selection available")))) + (setq ow-find-last-string text) + (cond (backward-p + (search-backward text) + (set-mark (+ (point) (length text)))) + (t + (search-forward text) + (set-mark (- (point) (length text))))) + (zmacs-activate-region))) + +(defun ow-find-backward () + "Search backward the previous occurence of the text of the selection." + (interactive) + (ow-find t)) + +;;; 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. + +(defun x-initialize-keyboard () + "Don't call this." + (cond (;; 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))) + (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. + ;; + (or (load "x-win-sun" t t) + (warn "Unable to load term file x-win-sun")) + ) + ((string-match "XFree86" (x-server-vendor)) + ;; Those XFree86 people do some weird keysym stuff, too. + (or (load "x-win-xfree86" t t) + (warn "Unable to load term file x-win-xfree86"))) + )) + + +(defvar pre-x-win-initted nil) + +(defun init-pre-x-win () + "Initialize X Windows at startup (pre). Don't call this." + (if (not pre-x-win-initted) + (progn + (require 'x-iso8859-1) + (setq character-set-property 'x-iso8859/1) ; see x-iso8859-1.el + + (setq initial-frame-plist (if initial-frame-unmapped-p + '(initially-unmapped t) + nil)) + (setq pre-x-win-initted t)))) + +(defvar x-win-initted nil) + +(defun init-x-win () + "Initialize X Windows at startup. Don't call this." + (if (not x-win-initted) + (progn + (init-pre-x-win) + + ;; Open the X display when this file is loaded + ;; (Note that the first frame is created later.) + (setq x-initial-argv-list (cons (car command-line-args) + command-line-args-left)) + (make-x-device nil) + (setq command-line-args-left (cdr x-initial-argv-list)) + (setq x-win-initted t)))) + +(defvar post-x-win-initted nil) + +(defun init-post-x-win () + "Initialize X Windows at startup (post). Don't call this." + (if (not post-x-win-initted) + (progn + ;; 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 (featurep 'toolbar) + (init-x-toolbar)) + ;; these are only ever called if zmacs-regions is true. + (add-hook 'zmacs-deactivate-region-hook 'x-disown-selection) + (add-hook 'zmacs-activate-region-hook 'x-activate-region-as-selection) + (add-hook 'zmacs-update-region-hook '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-key global-map '(shift insert) 'x-yank-clipboard-selection) + (define-key global-map '(control insert) 'x-copy-primary-selection) + ;; (Are these Sunisms?) + (define-key global-map 'copy 'x-copy-primary-selection) + (define-key global-map 'paste 'x-yank-clipboard-selection) + (define-key global-map 'cut 'x-kill-primary-selection) + + (define-key global-map 'menu 'popup-mode-menu) + ;;(define-key global-map '(shift menu) 'x-goto-menubar) ;NYI + + ;; This runs after the first frame has been created (we can't + ;; talk to the X server before that) but before the + ;; site-start-file or .emacs file, so sites and users have a + ;; chance to override it. + (add-hook 'before-init-hook 'x-initialize-keyboard) + + (setq post-x-win-initted t)))) + +(defun make-frame-on-display (display &optional parms) + "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 the +DISPLAY environment variable. + +PROPS should be an plist of properties, as in the call to `make-frame'. + +This function opens a connection to the display or reuses an existing +connection. + +This function is a trivial wrapper around `make-frame-on-device'." + (interactive "sMake frame on display: ") + (if (equal display "") (setq display nil)) + (make-frame-on-device 'x display parms)) + +;;; x-init.el ends here