-;;; iso-insert.el --- insert functions for ISO 8859/1.
-
-;; Copyright (C) 1987 Free Software Foundation, Inc.
-
-;; Author: Howard Gayle
-;; Maintainer: FSF
-;; Keywords: i18n
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs 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.
-
-;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;;; Commentary:
-
-;; Written by Howard Gayle. See case-table.el for details.
-
-;;; Code:
-
-(defun insert-no-break-space ()
- (interactive "*")
- (insert 160)
-)
-
-(defun insert-inverted-exclamation-mark ()
- (interactive "*")
- (insert 161)
-)
-
-(defun insert-cent-sign ()
- (interactive "*")
- (insert 162)
-)
-
-(defun insert-pound-sign ()
- (interactive "*")
- (insert 163)
-)
-
-(defun insert-general-currency-sign ()
- (interactive "*")
- (insert 164)
-)
-
-(defun insert-yen-sign ()
- (interactive "*")
- (insert 165)
-)
-
-(defun insert-broken-vertical-line ()
- (interactive "*")
- (insert 166)
-)
-
-(defun insert-section-sign ()
- (interactive "*")
- (insert 167)
-)
-
-(defun insert-diaeresis ()
- (interactive "*")
- (insert 168)
-)
-
-(defun insert-copyright-sign ()
- (interactive "*")
- (insert 169)
-)
-
-(defun insert-ordinal-indicator-feminine ()
- (interactive "*")
- (insert 170)
-)
-
-(defun insert-angle-quotation-mark-left ()
- (interactive "*")
- (insert 171)
-)
-
-(defun insert-not-sign ()
- (interactive "*")
- (insert 172)
-)
-
-(defun insert-soft-hyphen ()
- (interactive "*")
- (insert 173)
-)
-
-(defun insert-registered-sign ()
- (interactive "*")
- (insert 174)
-)
-
-(defun insert-macron ()
- (interactive "*")
- (insert 175)
-)
-
-(defun insert-degree-sign ()
- (interactive "*")
- (insert 176)
-)
-
-(defun insert-plus-or-minus-sign ()
- (interactive "*")
- (insert 177)
-)
-
-(defun insert-superscript-two ()
- (interactive "*")
- (insert 178)
-)
-
-(defun insert-superscript-three ()
- (interactive "*")
- (insert 179)
-)
-
-(defun insert-acute-accent ()
- (interactive "*")
- (insert 180)
-)
-
-(defun insert-micro-sign ()
- (interactive "*")
- (insert 181)
-)
-
-(defun insert-pilcrow ()
- (interactive "*")
- (insert 182)
-)
-
-(defun insert-middle-dot ()
- (interactive "*")
- (insert 183)
-)
-
-(defun insert-cedilla ()
- (interactive "*")
- (insert 184)
-)
-
-(defun insert-superscript-one ()
- (interactive "*")
- (insert 185)
-)
-
-(defun insert-ordinal-indicator-masculine ()
- (interactive "*")
- (insert 186)
-)
-
-(defun insert-angle-quotation-mark-right ()
- (interactive "*")
- (insert 187)
-)
-
-(defun insert-fraction-one-quarter ()
- (interactive "*")
- (insert 188)
-)
-
-(defun insert-fraction-one-half ()
- (interactive "*")
- (insert 189)
-)
-
-(defun insert-fraction-three-quarters ()
- (interactive "*")
- (insert 190)
-)
-
-(defun insert-inverted-question-mark ()
- (interactive "*")
- (insert 191)
-)
-
-(defun insert-A-grave ()
- (interactive "*")
- (insert 192)
-)
-
-(defun insert-A-acute ()
- (interactive "*")
- (insert 193)
-)
-
-(defun insert-A-circumflex ()
- (interactive "*")
- (insert 194)
-)
-
-(defun insert-A-tilde ()
- (interactive "*")
- (insert 195)
-)
-
-(defun insert-A-umlaut ()
- (interactive "*")
- (insert 196)
-)
-
-(defun insert-A-ring ()
- (interactive "*")
- (insert 197)
-)
-
-(defun insert-AE ()
- (interactive "*")
- (insert 198)
-)
-
-(defun insert-C-cedilla ()
- (interactive "*")
- (insert 199)
-)
-
-(defun insert-E-grave ()
- (interactive "*")
- (insert 200)
-)
-
-(defun insert-E-acute ()
- (interactive "*")
- (insert 201)
-)
-
-(defun insert-E-circumflex ()
- (interactive "*")
- (insert 202)
-)
-
-(defun insert-E-umlaut ()
- (interactive "*")
- (insert 203)
-)
-
-(defun insert-I-grave ()
- (interactive "*")
- (insert 204)
-)
-
-(defun insert-I-acute ()
- (interactive "*")
- (insert 205)
-)
-
-(defun insert-I-circumflex ()
- (interactive "*")
- (insert 206)
-)
-
-(defun insert-I-umlaut ()
- (interactive "*")
- (insert 207)
-)
-
-(defun insert-D-stroke ()
- (interactive "*")
- (insert 208)
-)
-
-(defun insert-N-tilde ()
- (interactive "*")
- (insert 209)
-)
-
-(defun insert-O-grave ()
- (interactive "*")
- (insert 210)
-)
-
-(defun insert-O-acute ()
- (interactive "*")
- (insert 211)
-)
-
-(defun insert-O-circumflex ()
- (interactive "*")
- (insert 212)
-)
-
-(defun insert-O-tilde ()
- (interactive "*")
- (insert 213)
-)
-
-(defun insert-O-umlaut ()
- (interactive "*")
- (insert 214)
-)
-
-(defun insert-multiplication-sign ()
- (interactive "*")
- (insert 215)
-)
-
-(defun insert-O-slash ()
- (interactive "*")
- (insert 216)
-)
-
-(defun insert-U-grave ()
- (interactive "*")
- (insert 217)
-)
-
-(defun insert-U-acute ()
- (interactive "*")
- (insert 218)
-)
-
-(defun insert-U-circumflex ()
- (interactive "*")
- (insert 219)
-)
-
-(defun insert-U-umlaut ()
- (interactive "*")
- (insert 220)
-)
-
-(defun insert-Y-acute ()
- (interactive "*")
- (insert 221)
-)
-
-(defun insert-THORN ()
- (interactive "*")
- (insert 222)
-)
-
-(defun insert-ss ()
- (interactive "*")
- (insert 223)
-)
-
-(defun insert-a-grave ()
- (interactive "*")
- (insert 224)
-)
-
-(defun insert-a-acute ()
- (interactive "*")
- (insert 225)
-)
-
-(defun insert-a-circumflex ()
- (interactive "*")
- (insert 226)
-)
-
-(defun insert-a-tilde ()
- (interactive "*")
- (insert 227)
-)
-
-(defun insert-a-umlaut ()
- (interactive "*")
- (insert 228)
-)
-
-(defun insert-a-ring ()
- (interactive "*")
- (insert 229)
-)
-
-(defun insert-ae ()
- (interactive "*")
- (insert 230)
-)
-
-(defun insert-c-cedilla ()
- (interactive "*")
- (insert 231)
-)
-
-(defun insert-e-grave ()
- (interactive "*")
- (insert 232)
-)
-
-(defun insert-e-acute ()
- (interactive "*")
- (insert 233)
-)
-
-(defun insert-e-circumflex ()
- (interactive "*")
- (insert 234)
-)
-
-(defun insert-e-umlaut ()
- (interactive "*")
- (insert 235)
-)
-
-(defun insert-i-grave ()
- (interactive "*")
- (insert 236)
-)
-
-(defun insert-i-acute ()
- (interactive "*")
- (insert 237)
-)
-
-(defun insert-i-circumflex ()
- (interactive "*")
- (insert 238)
-)
-
-(defun insert-i-umlaut ()
- (interactive "*")
- (insert 239)
-)
-
-(defun insert-d-stroke ()
- (interactive "*")
- (insert 240)
-)
-
-(defun insert-n-tilde ()
- (interactive "*")
- (insert 241)
-)
-
-(defun insert-o-grave ()
- (interactive "*")
- (insert 242)
-)
-
-(defun insert-o-acute ()
- (interactive "*")
- (insert 243)
-)
-
-(defun insert-o-circumflex ()
- (interactive "*")
- (insert 244)
-)
-
-(defun insert-o-tilde ()
- (interactive "*")
- (insert 245)
-)
-
-(defun insert-o-umlaut ()
- (interactive "*")
- (insert 246)
-)
-
-(defun insert-division-sign ()
- (interactive "*")
- (insert 247)
-)
-
-(defun insert-o-slash ()
- (interactive "*")
- (insert 248)
-)
-
-(defun insert-u-grave ()
- (interactive "*")
- (insert 249)
-)
-
-(defun insert-u-acute ()
- (interactive "*")
- (insert 250)
-)
-
-(defun insert-u-circumflex ()
- (interactive "*")
- (insert 251)
-)
-
-(defun insert-u-umlaut ()
- (interactive "*")
- (insert 252)
-)
-
-(defun insert-y-acute ()
- (interactive "*")
- (insert 253)
-)
-
-(defun insert-thorn ()
- (interactive "*")
- (insert 254)
-)
-
-(defun insert-y-umlaut ()
- (interactive "*")
- (insert 255)
-)
-
-(defvar 8859-1-map nil "Keymap for ISO 8859/1 character insertion.")
-(if 8859-1-map nil
- (setq 8859-1-map (make-keymap))
- (define-key 8859-1-map " " 'insert-no-break-space)
- (define-key 8859-1-map "!" 'insert-inverted-exclamation-mark)
- (define-key 8859-1-map "\"" (make-sparse-keymap))
- (define-key 8859-1-map "\"\"" 'insert-diaeresis)
- (define-key 8859-1-map "\"A" 'insert-A-umlaut)
- (define-key 8859-1-map "\"E" 'insert-E-umlaut)
- (define-key 8859-1-map "\"I" 'insert-I-umlaut)
- (define-key 8859-1-map "\"O" 'insert-O-umlaut)
- (define-key 8859-1-map "\"U" 'insert-U-umlaut)
- (define-key 8859-1-map "\"a" 'insert-a-umlaut)
- (define-key 8859-1-map "\"e" 'insert-e-umlaut)
- (define-key 8859-1-map "\"i" 'insert-i-umlaut)
- (define-key 8859-1-map "\"o" 'insert-o-umlaut)
- (define-key 8859-1-map "\"u" 'insert-u-umlaut)
- (define-key 8859-1-map "\"y" 'insert-y-umlaut)
- (define-key 8859-1-map "'" (make-sparse-keymap))
- (define-key 8859-1-map "''" 'insert-acute-accent)
- (define-key 8859-1-map "'A" 'insert-A-acute)
- (define-key 8859-1-map "'E" 'insert-E-acute)
- (define-key 8859-1-map "'I" 'insert-I-acute)
- (define-key 8859-1-map "'O" 'insert-O-acute)
- (define-key 8859-1-map "'U" 'insert-U-acute)
- (define-key 8859-1-map "'Y" 'insert-Y-acute)
- (define-key 8859-1-map "'a" 'insert-a-acute)
- (define-key 8859-1-map "'e" 'insert-e-acute)
- (define-key 8859-1-map "'i" 'insert-i-acute)
- (define-key 8859-1-map "'o" 'insert-o-acute)
- (define-key 8859-1-map "'u" 'insert-u-acute)
- (define-key 8859-1-map "'y" 'insert-y-acute)
- (define-key 8859-1-map "$" 'insert-general-currency-sign)
- (define-key 8859-1-map "+" 'insert-plus-or-minus-sign)
- (define-key 8859-1-map "," (make-sparse-keymap))
- (define-key 8859-1-map ",," 'insert-cedilla)
- (define-key 8859-1-map ",C" 'insert-C-cedilla)
- (define-key 8859-1-map ",c" 'insert-c-cedilla)
- (define-key 8859-1-map "-" 'insert-soft-hyphen)
- (define-key 8859-1-map "." 'insert-middle-dot)
- (define-key 8859-1-map "/" (make-sparse-keymap))
- (define-key 8859-1-map "//" 'insert-division-sign)
- (define-key 8859-1-map "/O" 'insert-O-slash)
- (define-key 8859-1-map "/o" 'insert-o-slash)
- (define-key 8859-1-map "1" (make-sparse-keymap))
- (define-key 8859-1-map "1/" (make-sparse-keymap))
- (define-key 8859-1-map "1/2" 'insert-fraction-one-half)
- (define-key 8859-1-map "1/4" 'insert-fraction-one-quarter)
- (define-key 8859-1-map "3" (make-sparse-keymap))
- (define-key 8859-1-map "3/" (make-sparse-keymap))
- (define-key 8859-1-map "3/4" 'insert-fraction-three-quarters)
- (define-key 8859-1-map "<" 'insert-angle-quotation-mark-left)
- (define-key 8859-1-map "=" 'insert-macron)
- (define-key 8859-1-map ">" 'insert-angle-quotation-mark-right)
- (define-key 8859-1-map "?" 'insert-inverted-question-mark)
- (define-key 8859-1-map "A" (make-sparse-keymap))
- (define-key 8859-1-map "AA" 'insert-A-ring)
- (define-key 8859-1-map "AE" 'insert-AE)
- (define-key 8859-1-map "C" 'insert-copyright-sign)
- (define-key 8859-1-map "D" 'insert-D-stroke)
- (define-key 8859-1-map "L" 'insert-pound-sign)
- (define-key 8859-1-map "P" 'insert-pilcrow)
- (define-key 8859-1-map "R" 'insert-registered-sign)
- (define-key 8859-1-map "S" 'insert-section-sign)
- (define-key 8859-1-map "T" 'insert-THORN)
- (define-key 8859-1-map "Y" 'insert-yen-sign)
- (define-key 8859-1-map "^" (make-sparse-keymap))
- (define-key 8859-1-map "^1" 'insert-superscript-one)
- (define-key 8859-1-map "^2" 'insert-superscript-two)
- (define-key 8859-1-map "^3" 'insert-superscript-three)
- (define-key 8859-1-map "^A" 'insert-A-circumflex)
- (define-key 8859-1-map "^E" 'insert-E-circumflex)
- (define-key 8859-1-map "^I" 'insert-I-circumflex)
- (define-key 8859-1-map "^O" 'insert-O-circumflex)
- (define-key 8859-1-map "^U" 'insert-U-circumflex)
- (define-key 8859-1-map "^a" 'insert-a-circumflex)
- (define-key 8859-1-map "^e" 'insert-e-circumflex)
- (define-key 8859-1-map "^i" 'insert-i-circumflex)
- (define-key 8859-1-map "^o" 'insert-o-circumflex)
- (define-key 8859-1-map "^u" 'insert-u-circumflex)
- (define-key 8859-1-map "_" (make-sparse-keymap))
- (define-key 8859-1-map "_a" 'insert-ordinal-indicator-feminine)
- (define-key 8859-1-map "_o" 'insert-ordinal-indicator-masculine)
- (define-key 8859-1-map "`" (make-sparse-keymap))
- (define-key 8859-1-map "`A" 'insert-A-grave)
- (define-key 8859-1-map "`E" 'insert-E-grave)
- (define-key 8859-1-map "`I" 'insert-I-grave)
- (define-key 8859-1-map "`O" 'insert-O-grave)
- (define-key 8859-1-map "`U" 'insert-U-grave)
- (define-key 8859-1-map "`a" 'insert-a-grave)
- (define-key 8859-1-map "`e" 'insert-e-grave)
- (define-key 8859-1-map "`i" 'insert-i-grave)
- (define-key 8859-1-map "`o" 'insert-o-grave)
- (define-key 8859-1-map "`u" 'insert-u-grave)
- (define-key 8859-1-map "a" (make-sparse-keymap))
- (define-key 8859-1-map "aa" 'insert-a-ring)
- (define-key 8859-1-map "ae" 'insert-ae)
- (define-key 8859-1-map "c" 'insert-cent-sign)
- (define-key 8859-1-map "d" 'insert-d-stroke)
- (define-key 8859-1-map "o" 'insert-degree-sign)
- (define-key 8859-1-map "s" 'insert-ss)
- (define-key 8859-1-map "t" 'insert-thorn)
- (define-key 8859-1-map "u" 'insert-micro-sign)
- (define-key 8859-1-map "x" 'insert-multiplication-sign)
- (define-key 8859-1-map "|" 'insert-broken-vertical-line)
- (define-key 8859-1-map "~" (make-sparse-keymap))
- (define-key 8859-1-map "~A" 'insert-A-tilde)
- (define-key 8859-1-map "~N" 'insert-N-tilde)
- (define-key 8859-1-map "~O" 'insert-O-tilde)
- (define-key 8859-1-map "~a" 'insert-a-tilde)
- (define-key 8859-1-map "~n" 'insert-n-tilde)
- (define-key 8859-1-map "~o" 'insert-o-tilde)
- (define-key 8859-1-map "~~" 'insert-not-sign)
- (if (not (lookup-key global-map "\C-x8"))
- (define-key global-map "\C-x8" 8859-1-map))
-)
-
-(provide 'iso-insert)
-
-;;; iso-insert.el ends here
+;;; iso-transl.el --- keyboard input definitions for ISO 8859-1 -*- coding: iso-8859-1 -*-
+
+;; Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001
+;; Free Software Foundation, Inc.
+
+;; Author: Howard Gayle
+;; Maintainer: FSF
+;; Keywords: i18n
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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.
+
+;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Loading this package defines three ways of entering the non-ASCII
+;; printable characters with codes above 127: the prefix C-x 8, or the
+;; Alt key, or a dead accent key. For example, you can enter uppercase
+;; A-umlaut as `C-x 8 " A' or `Alt-" A' (if you have an Alt key) or
+;; `umlaut A' (if you have an umlaut/diaeresis key).
+
+;; C-x 8 is set up to autoload this package,
+;; but Alt keys and dead accent keys are only defined
+;; once you have loaded the package. It is nontrivial
+;; to make all of the Alt keys autoload, and it is not clear
+;; that the dead accent keys SHOULD autoload this package.
+
+;;; Code:
+
+;;; Provide some binding for startup:
+;;;###autoload (or key-translation-map (setq key-translation-map (make-sparse-keymap)))
+;;;###autoload (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
+;;;###autoload (autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap)
+
+(defvar iso-transl-dead-key-alist
+ '((?\' . mute-acute)
+ (?\` . mute-grave)
+ (?\" . mute-diaeresis)
+ (?^ . mute-asciicircum)
+ (?\~ . mute-asciitilde)
+ (?\' . dead-acute)
+ (?\` . dead-grave)
+ (?\" . dead-diaeresis)
+ (?^ . dead-asciicircum)
+ (?\~ . dead-asciitilde)
+ (?^ . dead-circum)
+ (?^ . dead-circumflex)
+ (?\~ . dead-tilde)
+ ;; Someone reports that these keys don't work if shifted.
+ ;; This might fix it--no word yet.
+ (?\' . S-dead-acute)
+ (?\` . S-dead-grave)
+ (?\" . S-dead-diaeresis)
+ (?^ . S-dead-asciicircum)
+ (?\~ . S-dead-asciitilde)
+ (?^ . S-dead-circum)
+ (?^ . S-dead-circumflex)
+ (?\~ . S-dead-tilde))
+ "Mapping of ASCII characters to their corresponding dead-key symbols.")
+
+;; The two-character mnemonics are intended to be available in all languages.
+;; The ones beginning with `*' have one-character synonyms, but a
+;; language-specific table might override the short form for its own use.
+
+(defvar iso-transl-char-map
+ '(("* " . [? ])
+ (" " . [? ])
+ ("*!" . [?¡])
+ ("!" . [?¡])
+ ("\"\"" . [?¨])
+ ("\"A" . [?Ä])
+ ("\"E" . [?Ë])
+ ("\"I" . [?Ï])
+ ("\"O" . [?Ö])
+ ("\"U" . [?Ü])
+ ("\"a" . [?ä])
+ ("\"e" . [?ë])
+ ("\"i" . [?ï])
+ ("\"o" . [?ö])
+ ("\"s" . [?ß])
+ ("\"u" . [?ü])
+ ("\"y" . [?ÿ])
+ ("''" . [?´])
+ ("'A" . [?Á])
+ ("'E" . [?É])
+ ("'I" . [?Í])
+ ("'O" . [?Ó])
+ ("'U" . [?Ú])
+ ("'Y" . [?Ý])
+ ("'a" . [?á])
+ ("'e" . [?é])
+ ("'i" . [?í])
+ ("'o" . [?ó])
+ ("'u" . [?ú])
+ ("'y" . [?ý])
+ ("*$" . [?¤])
+ ("$" . [?¤])
+ ("*+" . [?±])
+ ("+" . [?±])
+ (",," . [?¸])
+ (",C" . [?Ç])
+ (",c" . [?ç])
+ ("*-" . [?])
+ ("-" . [?])
+ ("*." . [?·])
+ ("." . [?·])
+ ("//" . [?÷])
+ ("/A" . [?Å])
+ ("/E" . [?Æ])
+ ("/O" . [?Ø])
+ ("/a" . [?å])
+ ("/e" . [?æ])
+ ("/o" . [?ø])
+ ("1/2" . [?½])
+ ("1/4" . [?¼])
+ ("3/4" . [?¾])
+ ("*<" . [?«])
+ ("<" . [?«])
+ ("*=" . [?¯])
+ ("=" . [?¯])
+ ("*>" . [?»])
+ (">" . [?»])
+ ("*?" . [?¿])
+ ("?" . [?¿])
+ ("*C" . [?©])
+ ("C" . [?©])
+ ("*L" . [?£])
+ ("L" . [?£])
+ ("*P" . [?¶])
+ ("P" . [?¶])
+ ("*R" . [?®])
+ ("R" . [?®])
+ ("*S" . [?§])
+ ("S" . [?§])
+ ("*Y" . [?¥])
+ ("Y" . [?¥])
+ ("^1" . [?¹])
+ ("^2" . [?²])
+ ("^3" . [?³])
+ ("^A" . [?Â])
+ ("^E" . [?Ê])
+ ("^I" . [?Î])
+ ("^O" . [?Ô])
+ ("^U" . [?Û])
+ ("^a" . [?â])
+ ("^e" . [?ê])
+ ("^i" . [?î])
+ ("^o" . [?ô])
+ ("^u" . [?û])
+ ("_a" . [?ª])
+ ("_o" . [?º])
+ ("`A" . [?À])
+ ("`E" . [?È])
+ ("`I" . [?Ì])
+ ("`O" . [?Ò])
+ ("`U" . [?Ù])
+ ("`a" . [?à])
+ ("`e" . [?è])
+ ("`i" . [?ì])
+ ("`o" . [?ò])
+ ("`u" . [?ù])
+ ("*c" . [?¢])
+ ("c" . [?¢])
+ ("*o" . [?°])
+ ("o" . [?°])
+ ("*u" . [?µ])
+ ("u" . [?µ])
+ ("*m" . [?µ])
+ ("m" . [?µ])
+ ("*x" . [?×])
+ ("x" . [?×])
+ ("*|" . [?¦])
+ ("|" . [?¦])
+ ("~A" . [?Ã])
+ ("~D" . [?Ð])
+ ("~N" . [?Ñ])
+ ("~O" . [?Õ])
+ ("~T" . [?Þ])
+ ("~a" . [?ã])
+ ("~d" . [?ð])
+ ("~n" . [?ñ])
+ ("~o" . [?õ])
+ ("~t" . [?þ])
+ ("~~" . [?¬])
+ ("' " . "'")
+ ("` " . "`")
+ ("\" " . "\"")
+ ("^ " . "^")
+ ("~ " . "~"))
+ "Alist of character translations for entering ISO characters.
+Each element has the form (STRING . VECTOR).
+The sequence STRING of ASCII chars translates into the
+sequence VECTOR. (VECTOR is normally one character long.)")
+
+;; Language-specific translation lists.
+(defvar iso-transl-language-alist
+ '(("Esperanto"
+ ("C" . [?Æ])
+ ("G" . [?Ø])
+ ("H" . [?¦])
+ ("J" . [?¬])
+ ("S" . [?Þ])
+ ("U" . [?Ý])
+ ("c" . [?æ])
+ ("g" . [?ø])
+ ("h" . [?¶])
+ ("j" . [?¼])
+ ("s" . [?þ])
+ ("u" . [?ý]))
+ ("French"
+ ("C" . [?Ç])
+ ("c" . [?ç]))
+ ("German"
+ ("A" . [?Ä])
+ ("O" . [?Ö])
+ ("U" . [?Ü])
+ ("a" . [?ä])
+ ("o" . [?ö])
+ ("s" . [?ß])
+ ("u" . [?ü]))
+ ("Portuguese"
+ ("C" . [?Ç])
+ ("c" . [?ç]))
+ ("Spanish"
+ ("!" . [?¡])
+ ("?" . [?¿])
+ ("N" . [?Ñ])
+ ("n" . [?ñ]))))
+
+(defvar iso-transl-ctl-x-8-map nil
+ "Keymap for C-x 8 prefix.")
+(or iso-transl-ctl-x-8-map
+ (fset 'iso-transl-ctl-x-8-map
+ (setq iso-transl-ctl-x-8-map (make-sparse-keymap))))
+(or key-translation-map
+ (setq key-translation-map (make-sparse-keymap)))
+(define-key key-translation-map "\C-x8" iso-transl-ctl-x-8-map)
+
+;; For each entry in the alist, we'll make up to three ways to generate
+;; the character in question: the prefix `C-x 8'; the ALT modifier on
+;; the first key of the sequence; and (if applicable) replacing the first
+;; key of the sequence with the corresponding dead key. For example, a
+;; character associated with the string "~n" can be input with `C-x 8 ~ n'
+;; or `Alt-~ n' or `mute-asciitilde n'.
+(defun iso-transl-define-keys (alist)
+ (while alist
+ (let ((translated-vec (cdr (car alist))))
+ (define-key iso-transl-ctl-x-8-map (car (car alist)) translated-vec)
+ (let ((inchar (aref (car (car alist)) 0))
+ (vec (vconcat (car (car alist))))
+ (tail iso-transl-dead-key-alist))
+ (aset vec 0 (logior (aref vec 0) ?\A-\^@))
+ (define-key key-translation-map vec translated-vec)
+ (define-key isearch-mode-map (vector (aref vec 0)) nil)
+ (while tail
+ (if (eq (car (car tail)) inchar)
+ (let ((deadvec (copy-sequence vec))
+ (deadkey (cdr (car tail))))
+ (aset deadvec 0 deadkey)
+ (define-key isearch-mode-map (vector deadkey) nil)
+ (define-key key-translation-map deadvec translated-vec)))
+ (setq tail (cdr tail)))))
+ (setq alist (cdr alist))))
+
+(defun iso-transl-set-language (lang)
+ (interactive (list (let ((completion-ignore-case t))
+ (completing-read "Set which language? "
+ iso-transl-language-alist nil t))))
+ (iso-transl-define-keys (cdr (assoc lang iso-transl-language-alist))))
+
+
+;; The standard mapping comes automatically. You can partially overlay it
+;; with a language-specific mapping by using `M-x iso-transl-set-language'.
+(iso-transl-define-keys iso-transl-char-map)
+
+(define-key isearch-mode-map "\C-x" nil)
+(define-key isearch-mode-map [?\C-x t] 'isearch-other-control-char)
+(define-key isearch-mode-map "\C-x8" nil)
+
+
+(provide 'iso-transl)
+
+;;; arch-tag: 034cfedf-7ebd-461d-bcd0-5c79e6dc0b61
+;;; iso-transl.el ends here