Mercurial > hg > xemacs-beta
view lisp/x-init.el @ 4792:95b04754ea8c
Make #'equalp more compatible with CL; add a compiler macro, test & doc it.
lisp/ChangeLog addition:
2009-11-08 Aidan Kehoe <kehoea@parhasard.net>
* cl-extra.el (cl-string-vector-equalp)
(cl-bit-vector-vector-equalp, cl-vector-array-equalp)
(cl-hash-table-contents-equalp): New functions, to implement
equalp treating arrays with identical contents as equivalent, as
specified by Common Lisp.
(equalp): Revise this function to implement array equivalence,
and the hash-table equalp behaviour specified by CL.
* cl-macs.el (equalp): Add a compiler macro for this function,
used when one of the arguments is constant, and as such, its type
is known at compile time.
man/ChangeLog addition:
2009-11-08 Aidan Kehoe <kehoea@parhasard.net>
* lispref/objects.texi (Equality Predicates):
Document #'equalp here, as well as #'equal and #'eq.
tests/ChangeLog addition:
2009-12-31 Aidan Kehoe <kehoea@parhasard.net>
* automated/lisp-tests.el:
Test much of the functionality of equalp; add a pointer to Paul
Dietz' ANSI test suite for this function, converted to Emacs
Lisp. Not including the tests themselves in XEmacs because who
owns the copyright on the files is unclear and the GCL people
didn't respond to my queries.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Thu, 31 Dec 2009 15:09:41 +0000 |
parents | fdc76fec36d3 |
children | dceee3855f15 |
line wrap: on
line source
;;; 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: (globally-declare-fboundp '(x-keysym-on-keyboard-p x-server-vendor x-init-specifier-from-resources init-mule-x-win)) (globally-declare-boundp '(x-initial-argv-list x-app-defaults-directory)) ;; 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") (defgroup x nil "The X Window system." :group 'environment) ;; 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.) (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 (ignore-errors (get-selection))) (clip (ignore-errors (get-clipboard))) 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 for the previous occurrence 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-compose (device) "Enable compose key and dead key processing on DEVICE." (loop for map in '(compose-map compose-acute-map compose-grave-map compose-cedilla-map compose-diaeresis-map compose-circumflex-map compose-tilde-map compose-ring-map compose-caron-map compose-macron-map compose-breve-map compose-dot-map compose-doubleacute-map compose-ogonek-map compose-hook-map compose-horn-map) do (autoload map "x-compose" nil t 'keymap)) (loop for (key 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: in '((acute compose-acute-map) (grave compose-grave-map) (cedilla compose-cedilla-map) (diaeresis compose-diaeresis-map) (circumflex compose-circumflex-map) (tilde compose-tilde-map) (degree compose-ring-map) (multi-key compose-map) ;; Sun according to MIT: (SunFA_Acute compose-acute-map) (SunFA_Grave compose-grave-map) (SunFA_Cedilla compose-cedilla-map) (SunFA_Diaeresis compose-diaeresis-map) (SunFA_Circum compose-circumflex-map) (SunFA_Tilde compose-tilde-map) ;; Sun according to OpenWindows 2: (Dead_Grave compose-grave-map) (Dead_Circum compose-circumflex-map) (Dead_Tilde compose-tilde-map) ;; Sun according to OpenWindows 3: (SunXK_FA_Acute compose-acute-map) (SunXK_FA_Grave compose-grave-map) (SunXK_FA_Cedilla compose-cedilla-map) (SunXK_FA_Diaeresis compose-diaeresis-map) (SunXK_FA_Circum compose-circumflex-map) (SunXK_FA_Tilde compose-tilde-map) ;; DEC according to MIT: (Dacute_accent compose-acute-map) (Dgrave_accent compose-grave-map) (Dcedilla_accent compose-cedilla-map) (Dcircumflex_accent compose-circumflex-map) (Dtilde compose-tilde-map) (Dring_accent compose-ring-map) ;; DEC according to OpenWindows 3: (DXK_acute_accent compose-acute-map) (DXK_grave_accent compose-grave-map) (DXK_cedilla_accent compose-cedilla-map) (DXK_circumflex_accent compose-circumflex-map) (DXK_tilde compose-tilde-map) (DXK_ring_accent compose-ring-map) ;; HP according to MIT: (hpmute_acute compose-acute-map) (hpmute_grave compose-grave-map) (hpmute_diaeresis compose-diaeresis-map) (hpmute_asciicircum compose-circumflex-map) (hpmute_asciitilde compose-tilde-map) ;; Empirically discovered on Linux XFree86 MetroX: (usldead_acute compose-acute-map) (usldead_grave compose-grave-map) (usldead_diaeresis compose-diaeresis-map) (usldead_asciicircum compose-circumflex-map) (usldead_asciitilde compose-tilde-map) ;; HP according to OpenWindows 3: (hpXK_mute_acute compose-acute-map) (hpXK_mute_grave compose-grave-map) (hpXK_mute_diaeresis compose-diaeresis-map) (hpXK_mute_asciicircum compose-circumflex-map) (hpXK_mute_asciitilde compose-tilde-map) ;; HP according to HP-UX 8.0: (XK_mute_acute compose-acute-map) (XK_mute_grave compose-grave-map) (XK_mute_diaeresis compose-diaeresis-map) (XK_mute_asciicircum compose-circumflex-map) (XK_mute_asciitilde compose-tilde-map) ;; [[ XFree86 seems to use lower case and a hyphen ]] Not true; ;; they use lower case and an underscore. XEmacs converts the ;; underscore to a hyphen in x_keysym_to_emacs_keysym because the ;; keysym is in the "Keyboard" character set, which is just totally ;; fucking random, considering it doesn't happen for any other ;; character sets. (dead-acute compose-acute-map) (dead-grave compose-grave-map) (dead-cedilla compose-cedilla-map) (dead-diaeresis compose-diaeresis-map) (dead-circum compose-circumflex-map) (dead-circumflex compose-circumflex-map) (dead-tilde compose-tilde-map) (dead-abovering compose-ring-map) (dead-caron compose-caron-map) (dead-macron compose-macron-map) (dead-breve compose-breve-map) (dead-abovedot compose-dot-map) (dead-doubleacute compose-doubleacute-map) (dead-ogonek compose-ogonek-map) (dead-hook compose-hook-map) (dead-horn compose-horn-map)) ;; Get the correct value for function-key-map with function-key-map = (symbol-value-in-console 'function-key-map (device-console device) function-key-map) do (when (x-keysym-on-keyboard-p key device) (define-key function-key-map (vector key) map)))) (eval-when-compile (load "x-win-sun" nil t) (load "x-win-xfree86" nil t)) (defun x-initialize-keyboard (device) "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. ;; ;; Note that we cannot use most vendor-provided proprietary keyboard ;; APIs to identify the keyboard - those only work on the console. ;; xkeycaps has the same problem when running `remotely'. (let ((vendor (x-server-vendor device))) (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. Run the Sun code. (x-win-init-sun device)) ((string-match #r"XFree86\|Cygwin/X\|The X\.Org Foundation" vendor) ;; Those XFree86 people do some weird keysym stuff, too. (x-win-init-xfree86 device))))) ;; Moved from x-toolbar.el, since InfoDock doesn't dump x-toolbar.el. (defun x-init-toolbar-from-resources (locale) (loop for (specifier . resname) in `(( ,top-toolbar-height . "topToolBarHeight") (,bottom-toolbar-height . "bottomToolBarHeight") ( ,left-toolbar-width . "leftToolBarWidth") ( ,right-toolbar-width . "rightToolBarWidth") ( ,top-toolbar-border-width . "topToolBarBorderWidth") (,bottom-toolbar-border-width . "bottomToolBarBorderWidth") ( ,left-toolbar-border-width . "leftToolBarBorderWidth") ( ,right-toolbar-border-width . "rightToolBarBorderWidth")) do (x-init-specifier-from-resources specifier 'natnum locale (cons resname (upcase-initials resname))))) (defvar make-device-early-x-entry-point-called-p nil "Whether `make-device-early-x-entry-point' has been called, at least once. Much of the X11-specific Lisp init code should only be called the first time an X11 device is created; this variable allows for that.") (defvar make-device-late-x-entry-point-called-p nil "Whether `make-device-late-x-entry-point' has been called, at least once. Much of the X11-specific Lisp init code should only be called the first time an X11 device is created; this variable allows for that.") (defun make-device-early-x-entry-point () "Entry point to set up the Lisp environment for X device creation." (unless make-device-early-x-entry-point-called-p (setq initial-frame-plist (and initial-frame-unmapped-p '(initially-unmapped t)) ;; Save the argv value. x-initial-argv-list (cons (car command-line-args) command-line-args-left) ;; Locate the app-defaults directory x-app-defaults-directory (or x-app-defaults-directory (locate-data-directory "app-defaults")) make-device-early-x-entry-point-called-p t))) (defun make-device-late-x-entry-point (device) "Entry point to do any Lisp-level X device-specific initialization." ;; General code, called on every X device created: (x-initialize-keyboard device) (x-initialize-compose device) ;; And the following code is to be called once, the first time an X11 ;; device is created: (unless make-device-late-x-entry-point-called-p (setq command-line-args-left (cdr x-initial-argv-list)) ;; Motif-ish bindings (define-key global-map '(shift insert) 'yank-clipboard-selection) (define-key global-map '(control insert) 'copy-primary-selection) ;; These are Sun-isms. (define-key global-map 'copy 'copy-primary-selection) (define-key global-map 'paste 'yank-clipboard-selection) (define-key global-map 'cut 'kill-primary-selection) (setq make-device-late-x-entry-point-called-p t))) (defun make-frame-on-display (display &optional props) "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 a 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 props)) ;;; x-init.el ends here