41877
|
1 ;;; iso-transl.el --- keyboard input definitions for ISO 8859-1 -*- coding: iso-8859-1 -*-
|
4884
|
2
|
62274
|
3 ;; Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001
|
75347
|
4 ;; 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
4884
|
5
|
|
6 ;; Author: Howard Gayle
|
|
7 ;; Maintainer: FSF
|
|
8 ;; Keywords: i18n
|
|
9
|
|
10 ;; This file is part of GNU Emacs.
|
|
11
|
|
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
|
|
13 ;; it under the terms of the GNU General Public License as published by
|
|
14 ;; the Free Software Foundation; either version 2, or (at your option)
|
|
15 ;; any later version.
|
|
16
|
|
17 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
20 ;; GNU General Public License for more details.
|
|
21
|
|
22 ;; You should have received a copy of the GNU General Public License
|
14169
|
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
|
64085
|
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
25 ;; Boston, MA 02110-1301, USA.
|
4884
|
26
|
5926
|
27 ;;; Commentary:
|
|
28
|
10535
|
29 ;; Loading this package defines three ways of entering the non-ASCII
|
|
30 ;; printable characters with codes above 127: the prefix C-x 8, or the
|
|
31 ;; Alt key, or a dead accent key. For example, you can enter uppercase
|
|
32 ;; A-umlaut as `C-x 8 " A' or `Alt-" A' (if you have an Alt key) or
|
|
33 ;; `umlaut A' (if you have an umlaut/diaeresis key).
|
5926
|
34
|
24802
|
35 ;; C-x 8 is set up to autoload this package,
|
|
36 ;; but Alt keys and dead accent keys are only defined
|
|
37 ;; once you have loaded the package. It is nontrivial
|
|
38 ;; to make all of the Alt keys autoload, and it is not clear
|
|
39 ;; that the dead accent keys SHOULD autoload this package.
|
|
40
|
4884
|
41 ;;; Code:
|
|
42
|
23672
|
43 ;;; Provide some binding for startup:
|
|
44 ;;;###autoload (or key-translation-map (setq key-translation-map (make-sparse-keymap)))
|
23794
|
45 ;;;###autoload (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
|
23672
|
46 ;;;###autoload (autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap)
|
49598
|
47
|
10535
|
48 (defvar iso-transl-dead-key-alist
|
|
49 '((?\' . mute-acute)
|
|
50 (?\` . mute-grave)
|
|
51 (?\" . mute-diaeresis)
|
16142
|
52 (?^ . mute-asciicircum)
|
|
53 (?\~ . mute-asciitilde)
|
|
54 (?\' . dead-acute)
|
|
55 (?\` . dead-grave)
|
|
56 (?\" . dead-diaeresis)
|
|
57 (?^ . dead-asciicircum)
|
|
58 (?\~ . dead-asciitilde)
|
|
59 (?^ . dead-circum)
|
|
60 (?^ . dead-circumflex)
|
|
61 (?\~ . dead-tilde)
|
|
62 ;; Someone reports that these keys don't work if shifted.
|
|
63 ;; This might fix it--no word yet.
|
|
64 (?\' . S-dead-acute)
|
|
65 (?\` . S-dead-grave)
|
|
66 (?\" . S-dead-diaeresis)
|
|
67 (?^ . S-dead-asciicircum)
|
|
68 (?\~ . S-dead-asciitilde)
|
|
69 (?^ . S-dead-circum)
|
|
70 (?^ . S-dead-circumflex)
|
|
71 (?\~ . S-dead-tilde))
|
10535
|
72 "Mapping of ASCII characters to their corresponding dead-key symbols.")
|
|
73
|
|
74 ;; The two-character mnemonics are intended to be available in all languages.
|
|
75 ;; The ones beginning with `*' have one-character synonyms, but a
|
|
76 ;; language-specific table might override the short form for its own use.
|
24029
71731a549704
Define a "function name" for each translation that isn't ASCII. Use
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
77
|
5926
|
78 (defvar iso-transl-char-map
|
42391
|
79 '(("* " . [?�])
|
|
80 (" " . [?�])
|
|
81 ("*!" . [?�])
|
|
82 ("!" . [?�])
|
|
83 ("\"\"" . [?�])
|
|
84 ("\"A" . [?�])
|
|
85 ("\"E" . [?�])
|
|
86 ("\"I" . [?�])
|
|
87 ("\"O" . [?�])
|
|
88 ("\"U" . [?�])
|
|
89 ("\"a" . [?�])
|
|
90 ("\"e" . [?�])
|
|
91 ("\"i" . [?�])
|
|
92 ("\"o" . [?�])
|
|
93 ("\"s" . [?�])
|
|
94 ("\"u" . [?�])
|
|
95 ("\"y" . [?�])
|
|
96 ("''" . [?�])
|
|
97 ("'A" . [?�])
|
|
98 ("'E" . [?�])
|
|
99 ("'I" . [?�])
|
|
100 ("'O" . [?�])
|
|
101 ("'U" . [?�])
|
|
102 ("'Y" . [?�])
|
|
103 ("'a" . [?�])
|
|
104 ("'e" . [?�])
|
|
105 ("'i" . [?�])
|
|
106 ("'o" . [?�])
|
|
107 ("'u" . [?�])
|
|
108 ("'y" . [?�])
|
|
109 ("*$" . [?�])
|
|
110 ("$" . [?�])
|
|
111 ("*+" . [?�])
|
|
112 ("+" . [?�])
|
|
113 (",," . [?�])
|
|
114 (",C" . [?�])
|
|
115 (",c" . [?�])
|
|
116 ("*-" . [?�])
|
|
117 ("-" . [?�])
|
|
118 ("*." . [?�])
|
|
119 ("." . [?�])
|
|
120 ("//" . [?�])
|
|
121 ("/A" . [?�])
|
|
122 ("/E" . [?�])
|
|
123 ("/O" . [?�])
|
|
124 ("/a" . [?�])
|
|
125 ("/e" . [?�])
|
|
126 ("/o" . [?�])
|
|
127 ("1/2" . [?�])
|
|
128 ("1/4" . [?�])
|
|
129 ("3/4" . [?�])
|
|
130 ("*<" . [?�])
|
|
131 ("<" . [?�])
|
|
132 ("*=" . [?�])
|
|
133 ("=" . [?�])
|
|
134 ("*>" . [?�])
|
|
135 (">" . [?�])
|
|
136 ("*?" . [?�])
|
|
137 ("?" . [?�])
|
|
138 ("*C" . [?�])
|
|
139 ("C" . [?�])
|
|
140 ("*L" . [?�])
|
|
141 ("L" . [?�])
|
|
142 ("*P" . [?�])
|
|
143 ("P" . [?�])
|
|
144 ("*R" . [?�])
|
|
145 ("R" . [?�])
|
|
146 ("*S" . [?�])
|
|
147 ("S" . [?�])
|
|
148 ("*Y" . [?�])
|
|
149 ("Y" . [?�])
|
|
150 ("^1" . [?�])
|
|
151 ("^2" . [?�])
|
|
152 ("^3" . [?�])
|
|
153 ("^A" . [?�])
|
|
154 ("^E" . [?�])
|
|
155 ("^I" . [?�])
|
|
156 ("^O" . [?�])
|
|
157 ("^U" . [?�])
|
|
158 ("^a" . [?�])
|
|
159 ("^e" . [?�])
|
|
160 ("^i" . [?�])
|
|
161 ("^o" . [?�])
|
|
162 ("^u" . [?�])
|
|
163 ("_a" . [?�])
|
|
164 ("_o" . [?�])
|
|
165 ("`A" . [?�])
|
|
166 ("`E" . [?�])
|
|
167 ("`I" . [?�])
|
|
168 ("`O" . [?�])
|
|
169 ("`U" . [?�])
|
|
170 ("`a" . [?�])
|
|
171 ("`e" . [?�])
|
|
172 ("`i" . [?�])
|
|
173 ("`o" . [?�])
|
|
174 ("`u" . [?�])
|
|
175 ("*c" . [?�])
|
|
176 ("c" . [?�])
|
|
177 ("*o" . [?�])
|
|
178 ("o" . [?�])
|
|
179 ("*u" . [?�])
|
|
180 ("u" . [?�])
|
|
181 ("*m" . [?�])
|
|
182 ("m" . [?�])
|
|
183 ("*x" . [?�])
|
|
184 ("x" . [?�])
|
|
185 ("*|" . [?�])
|
|
186 ("|" . [?�])
|
|
187 ("~A" . [?�])
|
|
188 ("~D" . [?�])
|
|
189 ("~N" . [?�])
|
|
190 ("~O" . [?�])
|
|
191 ("~T" . [?�])
|
|
192 ("~a" . [?�])
|
|
193 ("~d" . [?�])
|
|
194 ("~n" . [?�])
|
|
195 ("~o" . [?�])
|
|
196 ("~t" . [?�])
|
|
197 ("~~" . [?�])
|
16175
|
198 ("' " . "'")
|
|
199 ("` " . "`")
|
|
200 ("\" " . "\"")
|
|
201 ("^ " . "^")
|
|
202 ("~ " . "~"))
|
5926
|
203 "Alist of character translations for entering ISO characters.
|
|
204 Each element has the form (STRING . VECTOR).
|
|
205 The sequence STRING of ASCII chars translates into the
|
|
206 sequence VECTOR. (VECTOR is normally one character long.)")
|
|
207
|
10535
|
208 ;; Language-specific translation lists.
|
|
209 (defvar iso-transl-language-alist
|
10600
|
210 '(("Esperanto"
|
41877
|
211 ("C" . [?�])
|
|
212 ("G" . [?�])
|
|
213 ("H" . [?�])
|
|
214 ("J" . [?�])
|
|
215 ("S" . [?�])
|
|
216 ("U" . [?�])
|
|
217 ("c" . [?�])
|
|
218 ("g" . [?�])
|
|
219 ("h" . [?�])
|
|
220 ("j" . [?�])
|
|
221 ("s" . [?�])
|
|
222 ("u" . [?�]))
|
10600
|
223 ("French"
|
41877
|
224 ("C" . [?�])
|
|
225 ("c" . [?�]))
|
10600
|
226 ("German"
|
41877
|
227 ("A" . [?�])
|
49598
|
228 ("O" . [?�])
|
41877
|
229 ("U" . [?�])
|
|
230 ("a" . [?�])
|
|
231 ("o" . [?�])
|
|
232 ("s" . [?�])
|
|
233 ("u" . [?�]))
|
10600
|
234 ("Portuguese"
|
41877
|
235 ("C" . [?�])
|
|
236 ("c" . [?�]))
|
10600
|
237 ("Spanish"
|
41877
|
238 ("!" . [?�])
|
|
239 ("?" . [?�])
|
|
240 ("N" . [?�])
|
|
241 ("n" . [?�]))))
|
5926
|
242
|
10535
|
243 (defvar iso-transl-ctl-x-8-map nil
|
|
244 "Keymap for C-x 8 prefix.")
|
|
245 (or iso-transl-ctl-x-8-map
|
23794
|
246 (fset 'iso-transl-ctl-x-8-map
|
|
247 (setq iso-transl-ctl-x-8-map (make-sparse-keymap))))
|
10535
|
248 (or key-translation-map
|
|
249 (setq key-translation-map (make-sparse-keymap)))
|
|
250 (define-key key-translation-map "\C-x8" iso-transl-ctl-x-8-map)
|
5926
|
251
|
10535
|
252 ;; For each entry in the alist, we'll make up to three ways to generate
|
|
253 ;; the character in question: the prefix `C-x 8'; the ALT modifier on
|
|
254 ;; the first key of the sequence; and (if applicable) replacing the first
|
|
255 ;; key of the sequence with the corresponding dead key. For example, a
|
|
256 ;; character associated with the string "~n" can be input with `C-x 8 ~ n'
|
10600
|
257 ;; or `Alt-~ n' or `mute-asciitilde n'.
|
10535
|
258 (defun iso-transl-define-keys (alist)
|
16142
|
259 (while alist
|
22842
2398b380208e
(iso-transl-define-keys): Don't test enable-multibyte-characters; use
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
260 (let ((translated-vec (cdr (car alist))))
|
17792
|
261 (define-key iso-transl-ctl-x-8-map (car (car alist)) translated-vec)
|
|
262 (let ((inchar (aref (car (car alist)) 0))
|
|
263 (vec (vconcat (car (car alist))))
|
|
264 (tail iso-transl-dead-key-alist))
|
|
265 (aset vec 0 (logior (aref vec 0) ?\A-\^@))
|
|
266 (define-key key-translation-map vec translated-vec)
|
|
267 (define-key isearch-mode-map (vector (aref vec 0)) nil)
|
|
268 (while tail
|
|
269 (if (eq (car (car tail)) inchar)
|
|
270 (let ((deadvec (copy-sequence vec))
|
|
271 (deadkey (cdr (car tail))))
|
|
272 (aset deadvec 0 deadkey)
|
|
273 (define-key isearch-mode-map (vector deadkey) nil)
|
|
274 (define-key key-translation-map deadvec translated-vec)))
|
|
275 (setq tail (cdr tail)))))
|
16145
|
276 (setq alist (cdr alist))))
|
5926
|
277
|
10535
|
278 (defun iso-transl-set-language (lang)
|
|
279 (interactive (list (let ((completion-ignore-case t))
|
|
280 (completing-read "Set which language? "
|
|
281 iso-transl-language-alist nil t))))
|
|
282 (iso-transl-define-keys (cdr (assoc lang iso-transl-language-alist))))
|
|
283
|
10523
|
284
|
10535
|
285 ;; The standard mapping comes automatically. You can partially overlay it
|
|
286 ;; with a language-specific mapping by using `M-x iso-transl-set-language'.
|
|
287 (iso-transl-define-keys iso-transl-char-map)
|
|
288
|
|
289 (define-key isearch-mode-map "\C-x" nil)
|
|
290 (define-key isearch-mode-map [?\C-x t] 'isearch-other-control-char)
|
|
291 (define-key isearch-mode-map "\C-x8" nil)
|
|
292
|
4884
|
293
|
4885
|
294 (provide 'iso-transl)
|
4884
|
295
|
52401
|
296 ;;; arch-tag: 034cfedf-7ebd-461d-bcd0-5c79e6dc0b61
|
4885
|
297 ;;; iso-transl.el ends here
|