diff lisp/x11/x-iso8859-1.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children 56c54cf7c5b6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/x11/x-iso8859-1.el	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,256 @@
+;; Mapping between X keysym names and ISO 8859-1 (aka Latin1) character codes.
+;; Copyright (C) 1992, 1993 Free Software Foundation, Inc.
+
+;; 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.
+
+;; created by jwz, 13-jun-92.
+
+;; Under X, when the user types a character that is ISO-8859/1 but not ASCII,
+;; it comes in as a symbol instead of as a character code.  This keeps things
+;; nice and character-set independent.  This file takes all of those symbols
+;; (the symbols that are the X names for the 8859/1 characters) and puts a
+;; property on them which holds the character code that should be inserted in
+;; the buffer when they are typed.  The self-insert-command function will look
+;; at this.  It also binds them all to self-insert-command.
+
+;; It puts the same property on the keypad keys, so that (read-char) will
+;; think that they are the same as the digit characters.  However, those
+;; keys are bound to one-character keyboard macros, so that `kp_9' will, by
+;; default, do the same thing that `9' does, in whatever the current mode is.
+
+;; The standard case and syntax tables are set in prim/iso8859-1.el, since
+;; that is not X-specific.
+
+(require 'iso8859-1)
+
+(defconst iso8859/1-code-to-x-keysym-table nil
+  "Maps iso8859/1 to an X keysym name which corresponds to it.
+There may be more than one X name for this keycode; this returns the first one.
+Note that this is X specific; one should avoid using this table whenever 
+possible, in the interest of portability.")
+
+;; (This esoteric little construct is how you do MACROLET in elisp.  It
+;; generates the most efficient code for the .elc file by unwinding the
+;; loop at compile-time.)
+
+((macro
+  . (lambda (&rest syms-and-iso8859/1-codes)
+      (cons
+       'progn
+       (nconc
+	;;
+	;; First emit code that puts the `x-iso8859/1' property on all of
+	;; the keysym symbols.
+	;; 
+	(mapcar '(lambda (sym-and-code)
+		   (list 'put (list 'quote (car sym-and-code))
+			 ''x-iso8859/1 (car (cdr sym-and-code))))
+		syms-and-iso8859/1-codes)
+	;;
+	;; Then emit code that binds all of those keysym symbols to
+	;; `self-insert-command'.
+	;; 
+	(mapcar '(lambda (sym-and-code)
+		   (list 'global-set-key (list 'quote (car sym-and-code))
+			 ''self-insert-command))
+		syms-and-iso8859/1-codes)
+	;;
+	;; Then emit the value of iso8859/1-code-to-x-keysym-table.
+	;;
+	(let ((v (make-vector 256 nil)))
+	  ;; the printing ASCII chars have 1-char names.
+	  (let ((i 33))
+	    (while (< i 127)
+	      (aset v i (intern (make-string 1 i)))
+	      (setq i (1+ i))))
+	  ;; these are from the keyboard character set.
+	  (mapcar '(lambda (x) (aset v (car x) (car (cdr x))))
+		  '((8 backspace) (9 tab) (10 linefeed) (13 return)
+		    (27 escape) (32 space) (127 delete)))
+	  (mapcar '(lambda (sym-and-code)
+		     (or (aref v (car (cdr sym-and-code)))
+			 (aset v (car (cdr sym-and-code)) (car sym-and-code))))
+		  syms-and-iso8859/1-codes)
+	  (list (list 'setq 'iso8859/1-code-to-x-keysym-table v)))
+	))))
+
+ ;; The names and capitalization here are as per the MIT X11R4 and X11R5
+ ;; distributions.  If a vendor varies from this, adjustments will need
+ ;; to be made...
+
+ (nobreakspace		?\240)
+ (exclamdown		?\241)
+ (cent			?\242)
+ (sterling		?\243)
+ (currency		?\244)
+ (yen			?\245)
+ (brokenbar		?\246)
+ (section 		?\247)
+ (diaeresis		?\250)
+ (copyright		?\251)
+ (ordfeminine		?\252)
+ (guillemotleft		?\253)
+ (notsign		?\254)
+ (hyphen		?\255)
+ (registered		?\256)
+ (macron		?\257)
+ (degree		?\260)
+ (plusminus		?\261)
+ (twosuperior		?\262)
+ (threesuperior		?\263)
+ (acute			?\264)	; Why is there an acute keysym that is 
+ (mu			?\265)	; distinct from apostrophe/quote, but 
+ (paragraph		?\266)	; no grave keysym that is distinct from
+ (periodcentered	?\267)	; backquote?
+ (cedilla		?\270)
+ (onesuperior		?\271)
+ (masculine		?\272)
+ (guillemotright	?\273)
+ (onequarter		?\274)
+ (onehalf		?\275)
+ (threequarters		?\276)
+ (questiondown		?\277)
+
+ (Agrave		?\300)
+ (Aacute		?\301)
+ (Acircumflex		?\302)
+ (Atilde		?\303)
+ (Adiaeresis		?\304)
+ (Aring			?\305)
+ (AE			?\306)
+ (Ccedilla		?\307)
+ (Egrave		?\310)
+ (Eacute		?\311)
+ (Ecircumflex		?\312)
+ (Ediaeresis		?\313)
+ (Igrave		?\314)
+ (Iacute		?\315)
+ (Icircumflex		?\316)
+ (Idiaeresis		?\317)
+ (ETH			?\320)
+ (Ntilde		?\321)
+ (Ograve		?\322)
+ (Oacute		?\323)
+ (Ocircumflex		?\324)
+ (Otilde		?\325)
+ (Odiaeresis		?\326)
+ (multiply		?\327)
+ (Ooblique		?\330)
+ (Ugrave		?\331)
+ (Uacute		?\332)
+ (Ucircumflex		?\333)
+ (Udiaeresis		?\334)
+ (Yacute		?\335)
+ (THORN			?\336)
+ (ssharp		?\337)
+
+ (agrave		?\340)
+ (aacute		?\341)
+ (acircumflex		?\342)
+ (atilde		?\343)
+ (adiaeresis		?\344)
+ (aring			?\345)
+ (ae			?\346)
+ (ccedilla		?\347)
+ (egrave		?\350)
+ (eacute		?\351)
+ (ecircumflex		?\352)
+ (ediaeresis		?\353)
+ (igrave		?\354)
+ (iacute		?\355)
+ (icircumflex		?\356)
+ (idiaeresis		?\357)
+ (eth			?\360)
+ (ntilde		?\361)
+ (ograve		?\362)
+ (oacute		?\363)
+ (ocircumflex		?\364)
+ (otilde		?\365)
+ (odiaeresis		?\366)
+ (division		?\367)
+ (oslash		?\370)
+ (ugrave		?\371)
+ (uacute		?\372)
+ (ucircumflex		?\373)
+ (udiaeresis		?\374)
+ (yacute		?\375)
+ (thorn			?\376)
+ (ydiaeresis		?\377)
+
+ )
+
+((macro . (lambda (&rest syms-and-iso8859/1-codes)
+	    (cons 'progn
+		  (mapcar '(lambda (sym-and-code)
+			     (list 'put (list 'quote (car sym-and-code))
+				   ''x-iso8859/1 (car (cdr sym-and-code))))
+			  syms-and-iso8859/1-codes))))
+ ;;
+ ;; Let's do the appropriate thing for some vendor-specific keysyms too...
+ ;; Apparently nobody agrees on what the names of these keysyms are.
+ ;;
+ (SunFA_Acute		?\264)
+ (SunXK_FA_Acute	?\264)
+ (Dacute_accent		?\264)
+ (DXK_acute_accent	?\264)
+ (hpmute_acute		?\264)
+ (hpXK_mute_acute	?\264)
+ (XK_mute_acute		?\264)
+
+ (SunFA_Grave		 ?`)
+ (Dead_Grave		 ?`)
+ (SunXK_FA_Grave	 ?`)
+ (Dgrave_accent		 ?`)
+ (DXK_grave_accent	 ?`)
+ (hpmute_grave		 ?`)
+ (hpXK_mute_grave	 ?`)
+ (XK_mute_grave		 ?`)
+
+ (SunFA_Cedilla		?\270)
+ (SunXK_FA_Cedilla	?\270)
+ (Dcedilla_accent	?\270)
+ (DXK_cedilla_accent	?\270)
+
+ (SunFA_Diaeresis	?\250)
+ (SunXK_FA_Diaeresis	?\250)
+ (hpmute_diaeresis	?\250)
+ (hpXK_mute_diaeresis	?\250)
+ (XK_mute_diaeresis	?\250)
+
+ (SunFA_Circum		 ?^)
+ (Dead_Circum		 ?^)
+ (SunXK_FA_Circum	 ?^)
+ (Dcircumflex_accent	 ?^)
+ (DXK_circumflex_accent	 ?^)
+ (hpmute_asciicircum	 ?^)
+ (hpXK_mute_asciicircum	 ?^)
+ (XK_mute_asciicircum	 ?^)
+
+ (SunFA_Tilde		 ?~)
+ (Dead_Tilde		 ?~)
+ (SunXK_FA_Tilde	 ?~)
+ (Dtilde		 ?~)
+ (DXK_tilde		 ?~)
+ (hpmute_asciitilde	 ?~)
+ (hpXK_mute_asciitilde	 ?~)
+ (XK_mute_asciitilde	 ?~)
+
+ (Dring_accent		?\260)
+ (DXK_ring_accent	?\260)
+ )
+
+(provide 'x-iso8859-1)