-;;; iso-transl.el --- keyboard input definitions for ISO 8859/1.
-
-;; Copyright (C) 1987, 1993, 1994, 1995 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).
-
-;;; 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.
-
-;; When a translation is non-ASCII, we use a symbol name
-;; whose "function definition" is a translation, rather than
-;; writing the translation directly here.
-;; That is for the sake of C-x 8 C-h.
-(defvar iso-transl-char-map
- '(("* " . iso-transl-no-break-space)
- (" " . iso-transl-no-break-space)
- ("*!" . iso-transl-inverted-exclamation-mark)
- ("!" . iso-transl-inverted-exclamation-mark)
- ("\"\"" . iso-transl-diaeresis)
- ("\"A" . iso-transl-A-umlaut)
- ("\"E" . iso-transl-E-umlaut)
- ("\"I" . iso-transl-I-umlaut)
- ("\"O" . iso-transl-O-umlaut)
- ("\"U" . iso-transl-U-umlaut)
- ("\"a" . iso-transl-a-umlaut)
- ("\"e" . iso-transl-e-umlaut)
- ("\"i" . iso-transl-i-umlaut)
- ("\"o" . iso-transl-o-umlaut)
- ("\"s" . iso-transl-ss)
- ("\"u" . iso-transl-u-umlaut)
- ("\"y" . iso-transl-y-umlaut)
- ("''" . iso-transl-acute-accent)
- ("'A" . iso-transl-A-acute)
- ("'E" . iso-transl-E-acute)
- ("'I" . iso-transl-I-acute)
- ("'O" . iso-transl-O-acute)
- ("'U" . iso-transl-U-acute)
- ("'Y" . iso-transl-Y-acute)
- ("'a" . iso-transl-a-acute)
- ("'e" . iso-transl-e-acute)
- ("'i" . iso-transl-i-acute)
- ("'o" . iso-transl-o-acute)
- ("'u" . iso-transl-u-acute)
- ("'y" . iso-transl-y-acute)
- ("*$" . iso-transl-general-currency-sign)
- ("$" . iso-transl-general-currency-sign)
- ("*+" . iso-transl-plus-or-minus-sign)
- ("+" . iso-transl-plus-or-minus-sign)
- (",," . iso-transl-cedilla)
- (",C" . iso-transl-C-cedilla)
- (",c" . iso-transl-c-cedilla)
- ("*-" . iso-transl-soft-hyphen)
- ("-" . iso-transl-soft-hyphen)
- ("*." . iso-transl-middle-dot)
- ("." . iso-transl-middle-dot)
- ("//" . iso-transl-division-sign)
- ("/A" . iso-transl-A-ring)
- ("/E" . iso-transl-AE)
- ("/O" . iso-transl-O-slash)
- ("/a" . iso-transl-a-ring)
- ("/e" . iso-transl-ae)
- ("/o" . iso-transl-o-slash)
- ("1/2" . iso-transl-one-half)
- ("1/4" . iso-transl-one-quarter)
- ("3/4" . iso-transl-three-quarters)
- ("*<" . iso-transl-angle-left)
- ("<" . iso-transl-angle-left)
- ("*=" . iso-transl-macron)
- ("=" . iso-transl-macron)
- ("*>" . iso-transl-angle-right)
- (">" . iso-transl-angle-right)
- ("*?" . iso-transl-inverted-question-mark)
- ("?" . iso-transl-inverted-question-mark)
- ("*C" . iso-transl-copyright-sign)
- ("C" . iso-transl-copyright-sign)
- ("*L" . iso-transl-pound-sign)
- ("L" . iso-transl-pound-sign)
- ("*P" . iso-transl-pilcrow)
- ("P" . iso-transl-pilcrow)
- ("*R" . iso-transl-registered-sign)
- ("R" . iso-transl-registered-sign)
- ("*S" . iso-transl-section-sign)
- ("S" . iso-transl-section-sign)
- ("*Y" . iso-transl-yen-sign)
- ("Y" . iso-transl-yen-sign)
- ("^1" . iso-transl-superscript-1)
- ("^2" . iso-transl-superscript-2)
- ("^3" . iso-transl-superscript-3)
- ("^A" . iso-transl-A-caret)
- ("^E" . iso-transl-E-caret)
- ("^I" . iso-transl-I-caret)
- ("^O" . iso-transl-O-caret)
- ("^U" . iso-transl-U-caret)
- ("^a" . iso-transl-a-caret)
- ("^e" . iso-transl-E-caret)
- ("^i" . iso-transl-I-caret)
- ("^o" . iso-transl-O-caret)
- ("^u" . iso-transl-U-caret)
- ("_a" . iso-transl-ordinal-indicator-feminine)
- ("_o" . iso-transl-ordinal-indicator-masculine)
- ("`A" . iso-transl-A-grave)
- ("`E" . iso-transl-E-grave)
- ("`I" . iso-transl-I-grave)
- ("`O" . iso-transl-O-grave)
- ("`U" . iso-transl-U-grave)
- ("`a" . iso-transl-a-grave)
- ("`e" . iso-transl-e-grave)
- ("`i" . iso-transl-i-grave)
- ("`o" . iso-transl-o-grave)
- ("`u" . iso-transl-u-grave)
- ("*c" . iso-transl-cent-sign)
- ("c" . iso-transl-cent-sign)
- ("*o" . iso-transl-degree-sign)
- ("o" . iso-transl-degree-sign)
- ("*u" . iso-transl-micro-sign)
- ("u" . iso-transl-micro-sign)
- ("*m" . iso-transl-micro-sign)
- ("m" . iso-transl-micro-sign)
- ("*x" . iso-transl-multiplication-sign)
- ("x" . iso-transl-multiplication-sign)
- ("*|" . iso-transl-broken-vertical-line)
- ("|" . iso-transl-broken-vertical-line)
- ("~A" . iso-transl-A-tilde)
- ("~D" . iso-transl-D-stroke)
- ("~N" . iso-transl-N-tilde)
- ("~O" . iso-transl-O-tilde)
- ("~T" . iso-transl-THORN)
- ("~a" . iso-transl-a-tilde)
- ("~d" . iso-transl-d-stroke)
- ("~n" . iso-transl-n-tilde)
- ("~o" . iso-transl-o-tilde)
- ("~t" . iso-transl-thorn)
- ("~~" . iso-transl-not-sign)
- ("' " . "'")
- ("` " . "`")
- ("\" " . "\"")
- ("^ " . "^")
- ("~ " . "~"))
- "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.)")
-
-(defalias 'iso-transl-no-break-space [160])
-(defalias 'iso-transl-inverted-exclamation-mark [161])
-(defalias 'iso-transl-cent-sign [162])
-(defalias 'iso-transl-pound-sign [163])
-(defalias 'iso-transl-general-currency-sign [164])
-(defalias 'iso-transl-yen-sign [165])
-(defalias 'iso-transl-broken-vertical-line [166])
-(defalias 'iso-transl-section-sign [167])
-(defalias 'iso-transl-diaeresis [168])
-(defalias 'iso-transl-copyright-sign [169])
-(defalias 'iso-transl-ordinal-indicator-feminine [170])
-(defalias 'iso-transl-angle-left [171])
-(defalias 'iso-transl-not-sign [172])
-(defalias 'iso-transl-soft-hyphen [173])
-(defalias 'iso-transl-registered-sign [174])
-(defalias 'iso-transl-macron [175])
-(defalias 'iso-transl-degree-sign [176])
-(defalias 'iso-transl-plus-or-minus-sign [177])
-(defalias 'iso-transl-superscript-2 [178])
-(defalias 'iso-transl-superscript-3 [179])
-(defalias 'iso-transl-acute-accent [180])
-(defalias 'iso-transl-micro-sign [181])
-(defalias 'iso-transl-pilcrow [182])
-(defalias 'iso-transl-middle-dot [183])
-(defalias 'iso-transl-cedilla [184])
-(defalias 'iso-transl-superscript-1 [185])
-(defalias 'iso-transl-ordinal-indicator-masculine [186])
-(defalias 'iso-transl-angle-right [187])
-(defalias 'iso-transl-one-quarter [188])
-(defalias 'iso-transl-one-half [189])
-(defalias 'iso-transl-three-quarters [190])
-(defalias 'iso-transl-inverted-question-mark [191])
-(defalias 'iso-transl-A-grave [192])
-(defalias 'iso-transl-A-acute [193])
-(defalias 'iso-transl-A-caret [194])
-(defalias 'iso-transl-A-tilde [195])
-(defalias 'iso-transl-A-umlaut [196])
-(defalias 'iso-transl-A-ring [197])
-(defalias 'iso-transl-AE [198])
-(defalias 'iso-transl-C-cedilla [199])
-(defalias 'iso-transl-E-grave [200])
-(defalias 'iso-transl-E-acute [201])
-(defalias 'iso-transl-E-caret [202])
-(defalias 'iso-transl-E-umlaut [203])
-(defalias 'iso-transl-I-grave [204])
-(defalias 'iso-transl-I-acute [205])
-(defalias 'iso-transl-I-caret [206])
-(defalias 'iso-transl-I-umlaut [207])
-(defalias 'iso-transl-D-stroke [208])
-(defalias 'iso-transl-N-tilde [209])
-(defalias 'iso-transl-O-grave [210])
-(defalias 'iso-transl-O-acute [211])
-(defalias 'iso-transl-O-caret [212])
-(defalias 'iso-transl-O-tilde [213])
-(defalias 'iso-transl-O-umlaut [214])
-(defalias 'iso-transl-multiplication-sign [215])
-(defalias 'iso-transl-O-slash [216])
-(defalias 'iso-transl-U-grave [217])
-(defalias 'iso-transl-U-acute [218])
-(defalias 'iso-transl-U-caret [219])
-(defalias 'iso-transl-U-umlaut [220])
-(defalias 'iso-transl-Y-acute [221])
-(defalias 'iso-transl-THORN [222])
-(defalias 'iso-transl-ss [223])
-(defalias 'iso-transl-a-grave [224])
-(defalias 'iso-transl-a-acute [225])
-(defalias 'iso-transl-a-caret [226])
-(defalias 'iso-transl-a-tilde [227])
-(defalias 'iso-transl-a-umlaut [228])
-(defalias 'iso-transl-a-ring [229])
-(defalias 'iso-transl-ae [230])
-(defalias 'iso-transl-c-cedilla [231])
-(defalias 'iso-transl-e-grave [232])
-(defalias 'iso-transl-e-acute [233])
-(defalias 'iso-transl-E-caret [234])
-(defalias 'iso-transl-e-umlaut [235])
-(defalias 'iso-transl-i-grave [236])
-(defalias 'iso-transl-i-acute [237])
-(defalias 'iso-transl-I-caret [238])
-(defalias 'iso-transl-i-umlaut [239])
-(defalias 'iso-transl-d-stroke [240])
-(defalias 'iso-transl-n-tilde [241])
-(defalias 'iso-transl-o-grave [242])
-(defalias 'iso-transl-o-acute [243])
-(defalias 'iso-transl-O-caret [244])
-(defalias 'iso-transl-o-tilde [245])
-(defalias 'iso-transl-o-umlaut [246])
-(defalias 'iso-transl-division-sign [247])
-(defalias 'iso-transl-o-slash [248])
-(defalias 'iso-transl-u-grave [249])
-(defalias 'iso-transl-u-acute [250])
-(defalias 'iso-transl-U-caret [251])
-(defalias 'iso-transl-u-umlaut [252])
-(defalias 'iso-transl-y-acute [253])
-(defalias 'iso-transl-thorn [254])
-(defalias 'iso-transl-y-umlaut [255])
-
-;; Language-specific translation lists.
-(defvar iso-transl-language-alist
- '(("Esperanto"
- ("C" . [198])
- ("G" . [216])
- ("H" . [166])
- ("J" . [172])
- ("S" . [222])
- ("U" . [221])
- ("c" . [230])
- ("g" . [248])
- ("h" . [182])
- ("j" . [188])
- ("s" . [254])
- ("u" . [253]))
- ("French"
- ("C" . [199])
- ("c" . [231]))
- ("German"
- ("A" . [196])
- ("O" . [214])
- ("U" . [220])
- ("a" . [228])
- ("o" . [246])
- ("s" . [223])
- ("u" . [252]))
- ("Portuguese"
- ("C" . [199])
- ("c" . [231]))
- ("Spanish"
- ("!" . [161])
- ("?" . [191])
- ("N" . [241])
- ("n" . [209]))))
-
-(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)
-
-;;; iso-transl.el ends here
+;;; iso-transl.el --- keyboard input definitions for ISO 8859-1 -*- coding: iso-8859-1 -*-
+
+;; Copyright (C) 1987, 1993, 1994, 1995, 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