Mercurial > hg > xemacs-beta
comparison lisp/x-compose.el @ 2828:a25c824ed558
[xemacs-hg @ 2005-06-26 18:04:49 by aidan]
Rename the ascii-character property, support more keysyms.
author | aidan |
---|---|
date | Sun, 26 Jun 2005 18:05:05 +0000 |
parents | 3ecd8885ac67 |
children | 8f07ad760f0f |
comparison
equal
deleted
inserted
replaced
2827:936a6576c655 | 2828:a25c824ed558 |
---|---|
1 ;;; x-compose.el --- Compose-key processing in XEmacs | 1 ;;; x-compose.el --- Compose-key processing in XEmacs |
2 | 2 |
3 ;; Copyright (C) 1992, 1993, 1997 Free Software Foundation, Inc. | 3 ;; Copyright (C) 1992, 1993, 1997, 2005 Free Software Foundation, Inc. |
4 | 4 |
5 ;; Author: Jamie Zawinski <jwz@jwz.org> | 5 ;; Author: Jamie Zawinski <jwz@jwz.org> |
6 ;; Maintainer: XEmacs Development Team | 6 ;; Maintainer: XEmacs Development Team |
7 ;; Rewritten by Martin Buchholz far too many times. | 7 ;; Rewritten by Martin Buchholz far too many times. |
8 ;; | 8 ;; |
98 | 98 |
99 ;; This code has one feature that a more "builtin" Compose mechanism could | 99 ;; This code has one feature that a more "builtin" Compose mechanism could |
100 ;; not have: at any point you can type C-h to get a list of the possible | 100 ;; not have: at any point you can type C-h to get a list of the possible |
101 ;; completions of what you have typed so far. | 101 ;; completions of what you have typed so far. |
102 | 102 |
103 ;; Giacomo Boffi's problem of | |
104 ;; 20050324103919.8D22E4901@boffi95.stru.polimi.it is caused by Xlib doing | |
105 ;; the compose processing. To turn that off, I'm not certain what's | |
106 | |
103 ;;; Code: | 107 ;;; Code: |
104 | |
105 (require 'x-iso8859-1) | |
106 | 108 |
107 (macrolet | 109 (macrolet |
108 ((define-compose-map (keymap-symbol) | 110 ((define-compose-map (keymap-symbol) |
109 `(progn | 111 `(progn |
110 (defconst ,keymap-symbol (make-sparse-keymap ',keymap-symbol)) | 112 (defconst ,keymap-symbol (make-sparse-keymap ',keymap-symbol)) |
155 | 157 |
156 | 158 |
157 ;;; The contents of the "dead key" maps. These are shared by the | 159 ;;; The contents of the "dead key" maps. These are shared by the |
158 ;;; compose-map. | 160 ;;; compose-map. |
159 | 161 |
162 ;;; These used to all have nice readable X11-oriented keysym names as the | |
163 ;;; macro definition in the third argument, but I moved the interpretation | |
164 ;;; of those mappings (that is, Aacute to \301, &c.) to runtime in the X11 | |
165 ;;; code on first sight of the symbols--which is the more general solution, | |
166 ;;; what with Unicode keysyms, publishing, technical and so on, there's no | |
167 ;;; need to have them hanging around as symbols all the time--so they're no | |
168 ;;; longer available to Lisp before X11 sees them, something this relied on. | |
169 | |
170 ;;; The transformation was done like so; | |
171 | |
172 ;;; (while (re-search-forward "\\[\\([a-zA-Z]+\\)\\])$" nil t) | |
173 ;;; (replace-match (format "(?\\%o)" | |
174 ;;; (get (intern (match-string 1)) 'character-of-keysym)) | |
175 ;;; t t nil 1)) | |
176 | |
177 ;;; with a lot of repeated calling of setxkbmap to esoteric keymaps--so | |
178 ;;; x_reset_key_mapping gets called for all the keys on the keyboard--yacute | |
179 ;;; getting picked up from the Czech keymap, idiaeresis from the Dutch one, | |
180 ;;; and many more (al, ca, cz, de, dvorak, ee, es, fi, fr, hu, | |
181 ;;; ie(UnicodeExpert), it, nl, pt, ro, tr, us, vn, if it interests you.) | |
182 | |
183 ;;; The parentheses inside the vector are because otherwise the macro gets | |
184 ;;; interpreted as a meta character, the Latin-1 codes being in exactly that | |
185 ;;; range. Perhaps that bears documenting somewhere. Also, why is help | |
186 ;;; turned off for these (x-compose) sequences by default? | |
187 | |
188 ;;; (Aidan Kehoe, 2005-05-18) | |
189 | |
160 (define-key compose-acute-map [space] "'") | 190 (define-key compose-acute-map [space] "'") |
161 (define-key compose-acute-map [?'] [acute]) | 191 (define-key compose-acute-map [?'] [(?\264)]) |
162 (define-key compose-acute-map [?A] [Aacute]) | 192 (define-key compose-acute-map [?A] [(?\301)]) |
163 (define-key compose-acute-map [E] [Eacute]) | 193 (define-key compose-acute-map [E] [(?\311)]) |
164 (define-key compose-acute-map [I] [Iacute]) | 194 (define-key compose-acute-map [I] [(?\315)]) |
165 (define-key compose-acute-map [O] [Oacute]) | 195 (define-key compose-acute-map [O] [(?\323)]) |
166 (define-key compose-acute-map [U] [Uacute]) | 196 (define-key compose-acute-map [U] [(?\332)]) |
167 (define-key compose-acute-map [Y] [Yacute]) | 197 (define-key compose-acute-map [Y] [(?\335)]) |
168 (define-key compose-acute-map [a] [aacute]) | 198 (define-key compose-acute-map [a] [(?\341)]) |
169 (define-key compose-acute-map [e] [eacute]) | 199 (define-key compose-acute-map [e] [(?\351)]) |
170 (define-key compose-acute-map [i] [iacute]) | 200 (define-key compose-acute-map [i] [(?\355)]) |
171 (define-key compose-acute-map [o] [oacute]) | 201 (define-key compose-acute-map [o] [(?\363)]) |
172 (define-key compose-acute-map [u] [uacute]) | 202 (define-key compose-acute-map [u] [(?\372)]) |
173 (define-key compose-acute-map [y] [yacute]) | 203 (define-key compose-acute-map [y] [(?\375)]) |
174 | 204 |
175 (define-key compose-grave-map [space] "`") | 205 (define-key compose-grave-map [space] "`") |
176 (define-key compose-grave-map [?`] [grave]) | 206 (define-key compose-grave-map [?`] [(?\140)]) |
177 (define-key compose-grave-map [A] [Agrave]) | 207 (define-key compose-grave-map [A] [(?\300)]) |
178 (define-key compose-grave-map [E] [Egrave]) | 208 (define-key compose-grave-map [E] [(?\310)]) |
179 (define-key compose-grave-map [I] [Igrave]) | 209 (define-key compose-grave-map [I] [(?\314)]) |
180 (define-key compose-grave-map [O] [Ograve]) | 210 (define-key compose-grave-map [O] [(?\322)]) |
181 (define-key compose-grave-map [U] [Ugrave]) | 211 (define-key compose-grave-map [U] [(?\331)]) |
182 (define-key compose-grave-map [a] [agrave]) | 212 (define-key compose-grave-map [a] [(?\340)]) |
183 (define-key compose-grave-map [e] [egrave]) | 213 (define-key compose-grave-map [e] [(?\350)]) |
184 (define-key compose-grave-map [i] [igrave]) | 214 (define-key compose-grave-map [i] [(?\354)]) |
185 (define-key compose-grave-map [o] [ograve]) | 215 (define-key compose-grave-map [o] [(?\362)]) |
186 (define-key compose-grave-map [u] [ugrave]) | 216 (define-key compose-grave-map [u] [(?\371)]) |
187 | 217 |
188 (define-key compose-cedilla-map [space] ",") | 218 (define-key compose-cedilla-map [space] ",") |
189 (define-key compose-cedilla-map [?,] [cedilla]) | 219 (define-key compose-cedilla-map [?,] [(?\270)]) |
190 (define-key compose-cedilla-map [C] [Ccedilla]) | 220 (define-key compose-cedilla-map [C] [(?\307)]) |
191 (define-key compose-cedilla-map [c] [ccedilla]) | 221 (define-key compose-cedilla-map [c] [(?\347)]) |
192 | 222 |
193 (define-key compose-diaeresis-map [space] [diaeresis]) | 223 (define-key compose-diaeresis-map [space] [(?\250)]) |
194 (define-key compose-diaeresis-map [?\"] [diaeresis]) | 224 (define-key compose-diaeresis-map [?\"] [(?\250)]) |
195 (define-key compose-diaeresis-map [A] [Adiaeresis]) | 225 (define-key compose-diaeresis-map [A] [(?\304)]) |
196 (define-key compose-diaeresis-map [E] [Ediaeresis]) | 226 (define-key compose-diaeresis-map [E] [(?\313)]) |
197 (define-key compose-diaeresis-map [I] [Idiaeresis]) | 227 (define-key compose-diaeresis-map [I] [(?\317)]) |
198 (define-key compose-diaeresis-map [O] [Odiaeresis]) | 228 (define-key compose-diaeresis-map [O] [(?\326)]) |
199 (define-key compose-diaeresis-map [U] [Udiaeresis]) | 229 (define-key compose-diaeresis-map [U] [(?\334)]) |
200 (define-key compose-diaeresis-map [a] [adiaeresis]) | 230 (define-key compose-diaeresis-map [a] [(?\344)]) |
201 (define-key compose-diaeresis-map [e] [ediaeresis]) | 231 (define-key compose-diaeresis-map [e] [(?\353)]) |
202 (define-key compose-diaeresis-map [i] [idiaeresis]) | 232 (define-key compose-diaeresis-map [i] [(?\357)]) |
203 (define-key compose-diaeresis-map [o] [odiaeresis]) | 233 (define-key compose-diaeresis-map [o] [(?\366)]) |
204 (define-key compose-diaeresis-map [u] [udiaeresis]) | 234 (define-key compose-diaeresis-map [u] [(?\374)]) |
205 (define-key compose-diaeresis-map [y] [ydiaeresis]) | 235 (define-key compose-diaeresis-map [y] [(?\377)]) |
206 | 236 |
207 (define-key compose-circumflex-map [space] "^") | 237 (define-key compose-circumflex-map [space] "^") |
208 (define-key compose-circumflex-map [?/] "|") | 238 (define-key compose-circumflex-map [?/] "|") |
209 (define-key compose-circumflex-map [?!] [brokenbar]) | 239 (define-key compose-circumflex-map [?!] [(?\246)]) |
210 (define-key compose-circumflex-map [?-] [macron]) | 240 (define-key compose-circumflex-map [?-] [(?\257)]) |
211 (define-key compose-circumflex-map [?_] [macron]) | 241 (define-key compose-circumflex-map [?_] [(?\257)]) |
212 (define-key compose-circumflex-map [?0] [degree]) | 242 (define-key compose-circumflex-map [?0] [(?\260)]) |
213 (define-key compose-circumflex-map [?1] [onesuperior]) | 243 (define-key compose-circumflex-map [?1] [(?\271)]) |
214 (define-key compose-circumflex-map [?2] [twosuperior]) | 244 (define-key compose-circumflex-map [?2] [(?\262)]) |
215 (define-key compose-circumflex-map [?3] [threesuperior]) | 245 (define-key compose-circumflex-map [?3] [(?\263)]) |
216 (define-key compose-circumflex-map [?.] [periodcentered]) | 246 (define-key compose-circumflex-map [?.] [(?\267)]) |
217 (define-key compose-circumflex-map [A] [Acircumflex]) | 247 (define-key compose-circumflex-map [A] [(?\302)]) |
218 (define-key compose-circumflex-map [E] [Ecircumflex]) | 248 (define-key compose-circumflex-map [E] [(?\312)]) |
219 (define-key compose-circumflex-map [I] [Icircumflex]) | 249 (define-key compose-circumflex-map [I] [(?\316)]) |
220 (define-key compose-circumflex-map [O] [Ocircumflex]) | 250 (define-key compose-circumflex-map [O] [(?\324)]) |
221 (define-key compose-circumflex-map [U] [Ucircumflex]) | 251 (define-key compose-circumflex-map [U] [(?\333)]) |
222 (define-key compose-circumflex-map [a] [acircumflex]) | 252 (define-key compose-circumflex-map [a] [(?\342)]) |
223 (define-key compose-circumflex-map [e] [ecircumflex]) | 253 (define-key compose-circumflex-map [e] [(?\352)]) |
224 (define-key compose-circumflex-map [i] [icircumflex]) | 254 (define-key compose-circumflex-map [i] [(?\356)]) |
225 (define-key compose-circumflex-map [o] [ocircumflex]) | 255 (define-key compose-circumflex-map [o] [(?\364)]) |
226 (define-key compose-circumflex-map [u] [ucircumflex]) | 256 (define-key compose-circumflex-map [u] [(?\373)]) |
227 | 257 |
228 (define-key compose-tilde-map [space] "~") | 258 (define-key compose-tilde-map [space] "~") |
229 (define-key compose-tilde-map [A] [Atilde]) | 259 (define-key compose-tilde-map [A] [(?\303)]) |
230 (define-key compose-tilde-map [N] [Ntilde]) | 260 (define-key compose-tilde-map [N] [(?\321)]) |
231 (define-key compose-tilde-map [O] [Otilde]) | 261 (define-key compose-tilde-map [O] [(?\325)]) |
232 (define-key compose-tilde-map [a] [atilde]) | 262 (define-key compose-tilde-map [a] [(?\343)]) |
233 (define-key compose-tilde-map [n] [ntilde]) | 263 (define-key compose-tilde-map [n] [(?\361)]) |
234 (define-key compose-tilde-map [o] [otilde]) | 264 (define-key compose-tilde-map [o] [(?\365)]) |
235 | 265 |
236 (define-key compose-ring-map [space] [degree]) | 266 (define-key compose-ring-map [space] [(?\260)]) |
237 (define-key compose-ring-map [A] [Aring]) | 267 (define-key compose-ring-map [A] [(?\305)]) |
238 (define-key compose-ring-map [a] [aring]) | 268 (define-key compose-ring-map [a] [(?\345)]) |
239 | 269 |
240 | 270 |
241 ;;; The rest of the compose-map. These are the composed characters | 271 ;;; The rest of the compose-map. These are the composed characters |
242 ;;; that are not accessible via "dead" keys. | 272 ;;; that are not accessible via "dead" keys. |
243 | 273 |
244 (define-key compose-map " '" "'") | 274 (define-key compose-map " '" "'") |
245 (define-key compose-map " ^" "^") | 275 (define-key compose-map " ^" "^") |
246 (define-key compose-map " `" "`") | 276 (define-key compose-map " `" "`") |
247 (define-key compose-map " ~" "~") | 277 (define-key compose-map " ~" "~") |
248 (define-key compose-map " " [nobreakspace]) | 278 (define-key compose-map " " [(?\240)]) |
249 (define-key compose-map " \"" [diaeresis]) | 279 (define-key compose-map " \"" [(?\250)]) |
250 (define-key compose-map " :" [diaeresis]) | 280 (define-key compose-map " :" [(?\250)]) |
251 (define-key compose-map " *" [degree]) | 281 (define-key compose-map " *" [(?\260)]) |
252 | 282 |
253 (define-key compose-map "!!" [exclamdown]) | 283 (define-key compose-map "!!" [(?\241)]) |
254 (define-key compose-map "!^" [brokenbar]) | 284 (define-key compose-map "!^" [(?\246)]) |
255 (define-key compose-map "!S" [section]) | 285 (define-key compose-map "!S" [(?\247)]) |
256 (define-key compose-map "!s" [section]) | 286 (define-key compose-map "!s" [(?\247)]) |
257 (define-key compose-map "!P" [paragraph]) | 287 (define-key compose-map "!P" [(?\266)]) |
258 (define-key compose-map "!p" [paragraph]) | 288 (define-key compose-map "!p" [(?\266)]) |
259 | 289 |
260 (define-key compose-map "((" "[") | 290 (define-key compose-map "((" "[") |
261 (define-key compose-map "(-" "{") | 291 (define-key compose-map "(-" "{") |
262 | 292 |
263 (define-key compose-map "))" "]") | 293 (define-key compose-map "))" "]") |
264 (define-key compose-map ")-" "}") | 294 (define-key compose-map ")-" "}") |
265 | 295 |
266 (define-key compose-map "++" "#") | 296 (define-key compose-map "++" "#") |
267 (define-key compose-map "+-" [plusminus]) | 297 (define-key compose-map "+-" [(?\261)]) |
268 | 298 |
269 (define-key compose-map "-(" "{") | 299 (define-key compose-map "-(" "{") |
270 (define-key compose-map "-)" "}") | 300 (define-key compose-map "-)" "}") |
271 (define-key compose-map "--" "-") | 301 (define-key compose-map "--" "-") |
272 (define-key compose-map "-L" [sterling]) | 302 (define-key compose-map "-L" [(?\243)]) |
273 (define-key compose-map "-l" [sterling]) | 303 (define-key compose-map "-l" [(?\243)]) |
274 (define-key compose-map "-Y" [yen]) | 304 (define-key compose-map "-Y" [(?\245)]) |
275 (define-key compose-map "-y" [yen]) | 305 (define-key compose-map "-y" [(?\245)]) |
276 (define-key compose-map "-," [notsign]) | 306 (define-key compose-map "-," [(?\254)]) |
277 (define-key compose-map "-|" [notsign]) | 307 (define-key compose-map "-|" [(?\254)]) |
278 (define-key compose-map "-^" [macron]) | 308 (define-key compose-map "-^" [(?\257)]) |
279 (define-key compose-map "-+" [plusminus]) | 309 (define-key compose-map "-+" [(?\261)]) |
280 (define-key compose-map "-:" [division]) | 310 (define-key compose-map "-:" [(?\367)]) |
281 (define-key compose-map "-D" [ETH]) | 311 (define-key compose-map "-D" [(?\320)]) |
282 (define-key compose-map "-d" [eth]) | 312 (define-key compose-map "-d" [(?\360)]) |
283 (define-key compose-map "-a" [ordfeminine]) | 313 (define-key compose-map "-a" [(?\252)]) |
284 | 314 |
285 (define-key compose-map ".^" [periodcentered]) | 315 (define-key compose-map ".^" [(?\267)]) |
286 | 316 |
287 (define-key compose-map "//" "\\") | 317 (define-key compose-map "//" "\\") |
288 (define-key compose-map "/<" "\\") | 318 (define-key compose-map "/<" "\\") |
289 (define-key compose-map "/^" "|") | 319 (define-key compose-map "/^" "|") |
290 (define-key compose-map "/C" [cent]) | 320 (define-key compose-map "/C" [(?\242)]) |
291 (define-key compose-map "/c" [cent]) | 321 (define-key compose-map "/c" [(?\242)]) |
292 (define-key compose-map "/U" [mu]) | 322 (define-key compose-map "/U" [(?\265)]) |
293 (define-key compose-map "/u" [mu]) | 323 (define-key compose-map "/u" [(?\265)]) |
294 (define-key compose-map "/O" [Ooblique]) | 324 (define-key compose-map "/O" [(?\330)]) |
295 (define-key compose-map "/o" [oslash]) | 325 (define-key compose-map "/o" [(?\370)]) |
296 | 326 |
297 (define-key compose-map "0X" [currency]) | 327 (define-key compose-map "0X" [(?\244)]) |
298 (define-key compose-map "0x" [currency]) | 328 (define-key compose-map "0x" [(?\244)]) |
299 (define-key compose-map "0S" [section]) | 329 (define-key compose-map "0S" [(?\247)]) |
300 (define-key compose-map "0s" [section]) | 330 (define-key compose-map "0s" [(?\247)]) |
301 (define-key compose-map "0C" [copyright]) | 331 (define-key compose-map "0C" [(?\251)]) |
302 (define-key compose-map "0c" [copyright]) | 332 (define-key compose-map "0c" [(?\251)]) |
303 (define-key compose-map "0R" [registered]) | 333 (define-key compose-map "0R" [(?\256)]) |
304 (define-key compose-map "0r" [registered]) | 334 (define-key compose-map "0r" [(?\256)]) |
305 (define-key compose-map "0^" [degree]) | 335 (define-key compose-map "0^" [(?\260)]) |
306 | 336 |
307 (define-key compose-map "1^" [onesuperior]) | 337 (define-key compose-map "1^" [(?\271)]) |
308 (define-key compose-map "14" [onequarter]) | 338 (define-key compose-map "14" [(?\274)]) |
309 (define-key compose-map "12" [onehalf]) | 339 (define-key compose-map "12" [(?\275)]) |
310 | 340 |
311 (define-key compose-map "2^" [twosuperior]) | 341 (define-key compose-map "2^" [(?\262)]) |
312 | 342 |
313 (define-key compose-map "3^" [threesuperior]) | 343 (define-key compose-map "3^" [(?\263)]) |
314 (define-key compose-map "34" [threequarters]) | 344 (define-key compose-map "34" [(?\276)]) |
315 | 345 |
316 (define-key compose-map ":-" [division]) | 346 (define-key compose-map ":-" [(?\367)]) |
317 | 347 |
318 (define-key compose-map "</" "\\") | 348 (define-key compose-map "</" "\\") |
319 (define-key compose-map "<<" [guillemotleft]) | 349 (define-key compose-map "<<" [(?\253)]) |
320 | 350 |
321 (define-key compose-map "=L" [sterling]) | 351 (define-key compose-map "=L" [(?\243)]) |
322 (define-key compose-map "=l" [sterling]) | 352 (define-key compose-map "=l" [(?\243)]) |
323 (define-key compose-map "=Y" [yen]) | 353 (define-key compose-map "=Y" [(?\245)]) |
324 (define-key compose-map "=y" [yen]) | 354 (define-key compose-map "=y" [(?\245)]) |
325 | 355 |
326 (define-key compose-map ">>" [guillemotright]) | 356 (define-key compose-map ">>" [(?\273)]) |
327 | 357 |
328 (define-key compose-map "??" [questiondown]) | 358 (define-key compose-map "??" [(?\277)]) |
329 | 359 |
330 (define-key compose-map "AA" "@") | 360 (define-key compose-map "AA" "@") |
331 (define-key compose-map "Aa" "@") | 361 (define-key compose-map "Aa" "@") |
332 (define-key compose-map "A_" [ordfeminine]) | 362 (define-key compose-map "A_" [(?\252)]) |
333 (define-key compose-map "A`" [Agrave]) | 363 (define-key compose-map "A`" [(?\300)]) |
334 (define-key compose-map "A'" [Aacute]) | 364 (define-key compose-map "A'" [(?\301)]) |
335 (define-key compose-map "A^" [Acircumflex]) | 365 (define-key compose-map "A^" [(?\302)]) |
336 (define-key compose-map "A~" [Atilde]) | 366 (define-key compose-map "A~" [(?\303)]) |
337 (define-key compose-map "A\"" [Adiaeresis]) | 367 (define-key compose-map "A\"" [(?\304)]) |
338 (define-key compose-map "A*" [Aring]) | 368 (define-key compose-map "A*" [(?\305)]) |
339 (define-key compose-map "AE" [AE]) | 369 (define-key compose-map "AE" [(?\306)]) |
340 | 370 |
341 (define-key compose-map "C/" [cent]) | 371 (define-key compose-map "C/" [(?\242)]) |
342 (define-key compose-map "C|" [cent]) | 372 (define-key compose-map "C|" [(?\242)]) |
343 (define-key compose-map "C0" [copyright]) | 373 (define-key compose-map "C0" [(?\251)]) |
344 (define-key compose-map "CO" [copyright]) | 374 (define-key compose-map "CO" [(?\251)]) |
345 (define-key compose-map "Co" [copyright]) | 375 (define-key compose-map "Co" [(?\251)]) |
346 (define-key compose-map "C," [Ccedilla]) | 376 (define-key compose-map "C," [(?\307)]) |
347 | 377 |
348 (define-key compose-map "D-" [ETH]) | 378 (define-key compose-map "D-" [(?\320)]) |
349 | 379 |
350 (define-key compose-map "E`" [Egrave]) | 380 (define-key compose-map "E`" [(?\310)]) |
351 (define-key compose-map "E'" [Eacute]) | 381 (define-key compose-map "E'" [(?\311)]) |
352 (define-key compose-map "E^" [Ecircumflex]) | 382 (define-key compose-map "E^" [(?\312)]) |
353 (define-key compose-map "E\"" [Ediaeresis]) | 383 (define-key compose-map "E\"" [(?\313)]) |
354 | 384 |
355 (define-key compose-map "I`" [Igrave]) | 385 (define-key compose-map "I`" [(?\314)]) |
356 (define-key compose-map "I'" [Iacute]) | 386 (define-key compose-map "I'" [(?\315)]) |
357 (define-key compose-map "I^" [Icircumflex]) | 387 (define-key compose-map "I^" [(?\316)]) |
358 (define-key compose-map "I\"" [Idiaeresis]) | 388 (define-key compose-map "I\"" [(?\317)]) |
359 | 389 |
360 (define-key compose-map "L-" [sterling]) | 390 (define-key compose-map "L-" [(?\243)]) |
361 (define-key compose-map "L=" [sterling]) | 391 (define-key compose-map "L=" [(?\243)]) |
362 | 392 |
363 (define-key compose-map "N~" [Ntilde]) | 393 (define-key compose-map "N~" [(?\321)]) |
364 | 394 |
365 (define-key compose-map "OX" [currency]) | 395 (define-key compose-map "OX" [(?\244)]) |
366 (define-key compose-map "Ox" [currency]) | 396 (define-key compose-map "Ox" [(?\244)]) |
367 (define-key compose-map "OS" [section]) | 397 (define-key compose-map "OS" [(?\247)]) |
368 (define-key compose-map "Os" [section]) | 398 (define-key compose-map "Os" [(?\247)]) |
369 (define-key compose-map "OC" [copyright]) | 399 (define-key compose-map "OC" [(?\251)]) |
370 (define-key compose-map "Oc" [copyright]) | 400 (define-key compose-map "Oc" [(?\251)]) |
371 (define-key compose-map "OR" [registered]) | 401 (define-key compose-map "OR" [(?\256)]) |
372 (define-key compose-map "Or" [registered]) | 402 (define-key compose-map "Or" [(?\256)]) |
373 (define-key compose-map "O_" [masculine]) | 403 (define-key compose-map "O_" [(?\272)]) |
374 (define-key compose-map "O`" [Ograve]) | 404 (define-key compose-map "O`" [(?\322)]) |
375 (define-key compose-map "O'" [Oacute]) | 405 (define-key compose-map "O'" [(?\323)]) |
376 (define-key compose-map "O^" [Ocircumflex]) | 406 (define-key compose-map "O^" [(?\324)]) |
377 (define-key compose-map "O~" [Otilde]) | 407 (define-key compose-map "O~" [(?\325)]) |
378 (define-key compose-map "O\"" [Odiaeresis]) | 408 (define-key compose-map "O\"" [(?\326)]) |
379 (define-key compose-map "O/" [Ooblique]) | 409 (define-key compose-map "O/" [(?\330)]) |
380 | 410 |
381 (define-key compose-map "P!" [paragraph]) | 411 (define-key compose-map "P!" [(?\266)]) |
382 | 412 |
383 (define-key compose-map "R0" [registered]) | 413 (define-key compose-map "R0" [(?\256)]) |
384 (define-key compose-map "RO" [registered]) | 414 (define-key compose-map "RO" [(?\256)]) |
385 (define-key compose-map "Ro" [registered]) | 415 (define-key compose-map "Ro" [(?\256)]) |
386 | 416 |
387 (define-key compose-map "S!" [section]) | 417 (define-key compose-map "S!" [(?\247)]) |
388 (define-key compose-map "S0" [section]) | 418 (define-key compose-map "S0" [(?\247)]) |
389 (define-key compose-map "SO" [section]) | 419 (define-key compose-map "SO" [(?\247)]) |
390 (define-key compose-map "So" [section]) | 420 (define-key compose-map "So" [(?\247)]) |
391 (define-key compose-map "SS" [ssharp]) | 421 (define-key compose-map "SS" [(?\337)]) |
392 | 422 |
393 (define-key compose-map "TH" [THORN]) | 423 (define-key compose-map "TH" [(?\336)]) |
394 | 424 |
395 (define-key compose-map "U`" [Ugrave]) | 425 (define-key compose-map "U`" [(?\331)]) |
396 (define-key compose-map "U'" [Uacute]) | 426 (define-key compose-map "U'" [(?\332)]) |
397 (define-key compose-map "U^" [Ucircumflex]) | 427 (define-key compose-map "U^" [(?\333)]) |
398 (define-key compose-map "U\"" [Udiaeresis]) | 428 (define-key compose-map "U\"" [(?\334)]) |
399 | 429 |
400 (define-key compose-map "X0" [currency]) | 430 (define-key compose-map "X0" [(?\244)]) |
401 (define-key compose-map "XO" [currency]) | 431 (define-key compose-map "XO" [(?\244)]) |
402 (define-key compose-map "Xo" [currency]) | 432 (define-key compose-map "Xo" [(?\244)]) |
403 | 433 |
404 (define-key compose-map "Y-" [yen]) | 434 (define-key compose-map "Y-" [(?\245)]) |
405 (define-key compose-map "Y=" [yen]) | 435 (define-key compose-map "Y=" [(?\245)]) |
406 (define-key compose-map "Y'" [Yacute]) | 436 (define-key compose-map "Y'" [(?\335)]) |
407 | 437 |
408 (define-key compose-map "_A" [ordfeminine]) | 438 (define-key compose-map "_A" [(?\252)]) |
409 (define-key compose-map "_a" [ordfeminine]) | 439 (define-key compose-map "_a" [(?\252)]) |
410 (define-key compose-map "_^" [macron]) | 440 (define-key compose-map "_^" [(?\257)]) |
411 (define-key compose-map "_O" [masculine]) | 441 (define-key compose-map "_O" [(?\272)]) |
412 (define-key compose-map "_o" [masculine]) | 442 (define-key compose-map "_o" [(?\272)]) |
413 | 443 |
414 (define-key compose-map "aA" "@") | 444 (define-key compose-map "aA" "@") |
415 (define-key compose-map "aa" "@") | 445 (define-key compose-map "aa" "@") |
416 (define-key compose-map "a_" [ordfeminine]) | 446 (define-key compose-map "a_" [(?\252)]) |
417 (define-key compose-map "a-" [ordfeminine]) | 447 (define-key compose-map "a-" [(?\252)]) |
418 (define-key compose-map "a`" [agrave]) | 448 (define-key compose-map "a`" [(?\340)]) |
419 (define-key compose-map "a'" [aacute]) | 449 (define-key compose-map "a'" [(?\341)]) |
420 (define-key compose-map "a^" [acircumflex]) | 450 (define-key compose-map "a^" [(?\342)]) |
421 (define-key compose-map "a~" [atilde]) | 451 (define-key compose-map "a~" [(?\343)]) |
422 (define-key compose-map "a\"" [adiaeresis]) | 452 (define-key compose-map "a\"" [(?\344)]) |
423 (define-key compose-map "a*" [aring]) | 453 (define-key compose-map "a*" [(?\345)]) |
424 (define-key compose-map "ae" [ae]) | 454 (define-key compose-map "ae" [(?\346)]) |
425 | 455 |
426 (define-key compose-map "c/" [cent]) | 456 (define-key compose-map "c/" [(?\242)]) |
427 (define-key compose-map "c|" [cent]) | 457 (define-key compose-map "c|" [(?\242)]) |
428 (define-key compose-map "c0" [copyright]) | 458 (define-key compose-map "c0" [(?\251)]) |
429 (define-key compose-map "cO" [copyright]) | 459 (define-key compose-map "cO" [(?\251)]) |
430 (define-key compose-map "co" [copyright]) | 460 (define-key compose-map "co" [(?\251)]) |
431 (define-key compose-map "c," [ccedilla]) | 461 (define-key compose-map "c," [(?\347)]) |
432 | 462 |
433 (define-key compose-map "d-" [eth]) | 463 (define-key compose-map "d-" [(?\360)]) |
434 | 464 |
435 (define-key compose-map "e`" [egrave]) | 465 (define-key compose-map "e`" [(?\350)]) |
436 (define-key compose-map "e'" [eacute]) | 466 (define-key compose-map "e'" [(?\351)]) |
437 (define-key compose-map "e^" [ecircumflex]) | 467 (define-key compose-map "e^" [(?\352)]) |
438 (define-key compose-map "e\"" [ediaeresis]) | 468 (define-key compose-map "e\"" [(?\353)]) |
439 | 469 |
440 (define-key compose-map "i`" [igrave]) | 470 (define-key compose-map "i`" [(?\354)]) |
441 (define-key compose-map "i'" [iacute]) | 471 (define-key compose-map "i'" [(?\355)]) |
442 (define-key compose-map "i^" [icircumflex]) | 472 (define-key compose-map "i^" [(?\356)]) |
443 (define-key compose-map "i\"" [idiaeresis]) | 473 (define-key compose-map "i\"" [(?\357)]) |
444 (define-key compose-map "i:" [idiaeresis]) | 474 (define-key compose-map "i:" [(?\357)]) |
445 | 475 |
446 (define-key compose-map "l-" [sterling]) | 476 (define-key compose-map "l-" [(?\243)]) |
447 (define-key compose-map "l=" [sterling]) | 477 (define-key compose-map "l=" [(?\243)]) |
448 | 478 |
449 (define-key compose-map "n~" [ntilde]) | 479 (define-key compose-map "n~" [(?\361)]) |
450 | 480 |
451 (define-key compose-map "oX" [currency]) | 481 (define-key compose-map "oX" [(?\244)]) |
452 (define-key compose-map "ox" [currency]) | 482 (define-key compose-map "ox" [(?\244)]) |
453 (define-key compose-map "oC" [copyright]) | 483 (define-key compose-map "oC" [(?\251)]) |
454 (define-key compose-map "oc" [copyright]) | 484 (define-key compose-map "oc" [(?\251)]) |
455 (define-key compose-map "oR" [registered]) | 485 (define-key compose-map "oR" [(?\256)]) |
456 (define-key compose-map "or" [registered]) | 486 (define-key compose-map "or" [(?\256)]) |
457 (define-key compose-map "oS" [section]) | 487 (define-key compose-map "oS" [(?\247)]) |
458 (define-key compose-map "os" [section]) | 488 (define-key compose-map "os" [(?\247)]) |
459 (define-key compose-map "o_" [masculine]) | 489 (define-key compose-map "o_" [(?\272)]) |
460 (define-key compose-map "o`" [ograve]) | 490 (define-key compose-map "o`" [(?\362)]) |
461 (define-key compose-map "o'" [oacute]) | 491 (define-key compose-map "o'" [(?\363)]) |
462 (define-key compose-map "o^" [ocircumflex]) | 492 (define-key compose-map "o^" [(?\364)]) |
463 (define-key compose-map "o~" [otilde]) | 493 (define-key compose-map "o~" [(?\365)]) |
464 (define-key compose-map "o\"" [odiaeresis]) | 494 (define-key compose-map "o\"" [(?\366)]) |
465 (define-key compose-map "o/" [oslash]) | 495 (define-key compose-map "o/" [(?\370)]) |
466 | 496 |
467 (define-key compose-map "p!" [paragraph]) | 497 (define-key compose-map "p!" [(?\266)]) |
468 | 498 |
469 (define-key compose-map "r0" [registered]) | 499 (define-key compose-map "r0" [(?\256)]) |
470 (define-key compose-map "rO" [registered]) | 500 (define-key compose-map "rO" [(?\256)]) |
471 (define-key compose-map "ro" [registered]) | 501 (define-key compose-map "ro" [(?\256)]) |
472 | 502 |
473 (define-key compose-map "s!" [section]) | 503 (define-key compose-map "s!" [(?\247)]) |
474 (define-key compose-map "s0" [section]) | 504 (define-key compose-map "s0" [(?\247)]) |
475 (define-key compose-map "sO" [section]) | 505 (define-key compose-map "sO" [(?\247)]) |
476 (define-key compose-map "so" [section]) | 506 (define-key compose-map "so" [(?\247)]) |
477 (define-key compose-map "ss" [ssharp]) | 507 (define-key compose-map "ss" [(?\337)]) |
478 | 508 |
479 (define-key compose-map "th" [thorn]) | 509 (define-key compose-map "th" [(?\376)]) |
480 | 510 |
481 (define-key compose-map "u`" [ugrave]) | 511 (define-key compose-map "u`" [(?\371)]) |
482 (define-key compose-map "u'" [uacute]) | 512 (define-key compose-map "u'" [(?\372)]) |
483 (define-key compose-map "u^" [ucircumflex]) | 513 (define-key compose-map "u^" [(?\373)]) |
484 (define-key compose-map "u\"" [udiaeresis]) | 514 (define-key compose-map "u\"" [(?\374)]) |
485 (define-key compose-map "u/" [mu]) | 515 (define-key compose-map "u/" [(?\265)]) |
486 | 516 |
487 (define-key compose-map "x0" [currency]) | 517 (define-key compose-map "x0" [(?\244)]) |
488 (define-key compose-map "xO" [currency]) | 518 (define-key compose-map "xO" [(?\244)]) |
489 (define-key compose-map "xo" [currency]) | 519 (define-key compose-map "xo" [(?\244)]) |
490 (define-key compose-map "xx" [multiply]) | 520 (define-key compose-map "xx" [(?\327)]) |
491 | 521 |
492 (define-key compose-map "y-" [yen]) | 522 (define-key compose-map "y-" [(?\245)]) |
493 (define-key compose-map "y=" [yen]) | 523 (define-key compose-map "y=" [(?\245)]) |
494 (define-key compose-map "y'" [yacute]) | 524 (define-key compose-map "y'" [(?\375)]) |
495 (define-key compose-map "y\"" [ydiaeresis]) | 525 (define-key compose-map "y\"" [(?\377)]) |
496 | 526 |
497 (define-key compose-map "|C" [cent]) | 527 (define-key compose-map "|C" [(?\242)]) |
498 (define-key compose-map "|c" [cent]) | 528 (define-key compose-map "|c" [(?\242)]) |
499 (define-key compose-map "||" [brokenbar]) | 529 (define-key compose-map "||" [(?\246)]) |
500 | 530 |
501 | 531 |
502 ;; Suppose we type these three physical keys: [Multi_key " a] | 532 ;; [[ Suppose we type these three physical keys: [Multi_key " a] |
503 ;; Xlib can deliver these keys as the following sequences of keysyms: | 533 ;; Xlib can deliver these keys as the following sequences of keysyms: |
504 ;; | 534 ;; |
505 ;; - [Multi_key " a] (no surprise here) | 535 ;; - [Multi_key " a] (no surprise here) |
506 ;; - [adiaeresis] (OK, Xlib is doing compose processing for us) | 536 ;; - [adiaeresis] (OK, Xlib is doing compose processing for us) |
507 ;; - [Multi_key " adiaeresis] (Huh?) | 537 ;; - [Multi_key " adiaeresis] (Huh?) |
508 ;; | 538 ;; |
509 ;; It is the last possibility that is arguably a bug. Xlib can't | 539 ;; It is the last possibility that is arguably a bug. Xlib can't |
510 ;; decide whether it's really doing compose processing or not (or | 540 ;; decide whether it's really doing compose processing or not (or |
511 ;; actually, different parts of Xlib disagree). | 541 ;; actually, different parts of Xlib disagree). |
512 ;; | 542 ;; |
513 ;; So we'll just convert [Multi_key " adiaeresis] to [adiaeresis] | 543 ;; So we'll just convert [Multi_key " adiaeresis] to [adiaeresis] ]] |
514 (defun xlib-input-method-bug-workaround (keymap) | 544 |
515 (map-keymap | 545 (eval-when-compile |
516 (lambda (key value) | 546 (when nil ;; Commenting out. |
517 (cond | 547 |
518 ((keymapp value) | 548 ;; This _used_ to work with our X11-oriented keysyms above. With them |
519 (xlib-input-method-bug-workaround value)) | 549 ;; gone, it won't. The X11 bug it works around should be long dead. (Ha! |
520 ((and (sequencep value) | 550 ;; Wasn't it cockroaches that would have ruled the planet after World |
521 (eq 1 (length value)) | 551 ;; War III?) |
522 (null (lookup-key keymap value))) | 552 |
523 (define-key keymap value value)))) | 553 (defun xlib-input-method-bug-workaround (keymap) |
524 keymap)) | 554 (map-keymap |
525 (xlib-input-method-bug-workaround compose-map) | 555 (lambda (key value) |
526 (unintern 'xlib-input-method-bug-workaround) | 556 (cond |
557 ((keymapp value) | |
558 (xlib-input-method-bug-workaround value)) | |
559 ((and (sequencep value) | |
560 (eq 1 (length value)) | |
561 (null (lookup-key keymap value))) | |
562 (define-key keymap value value)))) | |
563 keymap)) | |
564 (xlib-input-method-bug-workaround compose-map) | |
565 (unintern 'xlib-input-method-bug-workaround))) | |
527 | 566 |
528 ;; While we're at it, a similar mechanism will make colon equivalent | 567 ;; While we're at it, a similar mechanism will make colon equivalent |
529 ;; to doublequote for diaeresis processing. Some Xlibs do this. | 568 ;; to doublequote for diaeresis processing. Some Xlibs do this. |
530 (defun alias-colon-to-doublequote (keymap) | 569 (defun alias-colon-to-doublequote (keymap) |
531 (map-keymap | 570 (map-keymap |
580 (<= (downcase base-char) ?z) | 619 (<= (downcase base-char) ?z) |
581 (lookup-key map (make-string 1 base-char))))) | 620 (lookup-key map (make-string 1 base-char))))) |
582 (if (and (vectorp mod-char) (= (length mod-char) 1)) | 621 (if (and (vectorp mod-char) (= (length mod-char) 1)) |
583 (setq mod-char (aref mod-char 0))) | 622 (setq mod-char (aref mod-char 0))) |
584 (if (and mod-char (symbolp mod-char)) | 623 (if (and mod-char (symbolp mod-char)) |
585 (setq mod-char (or (get mod-char character-set-property) mod-char))) | 624 (setq mod-char (or (get mod-char 'character-of-keysym) mod-char))) |
586 (if (and mod-char (> count 0)) | 625 (if (and mod-char (> count 0)) |
587 (delete-char -1) | 626 (delete-char -1) |
588 (setq mod-char c)) | 627 (setq mod-char c)) |
589 (while (> count 0) | 628 (while (> count 0) |
590 (insert mod-char) | 629 (insert mod-char) |
653 | 692 |
654 (put 'compose-help 'isearch-command t) ; so that it doesn't terminate isearch | 693 (put 'compose-help 'isearch-command t) ; so that it doesn't terminate isearch |
655 | 694 |
656 (defun compose-help-mapper (key binding) | 695 (defun compose-help-mapper (key binding) |
657 (if (and (symbolp key) | 696 (if (and (symbolp key) |
658 (get key character-set-property)) | 697 (get key 'character-of-keysym)) |
659 (setq key (get key character-set-property))) | 698 (setq key (get key 'character-of-keysym))) |
660 (if (eq binding 'compose-help) ; suppress that... | 699 (if (eq binding 'compose-help) ; suppress that... |
661 nil | 700 nil |
662 (if (keymapp binding) | 701 (if (keymapp binding) |
663 (let ((p (point))) | 702 (let ((p (point))) |
664 (map-keymap 'compose-help-mapper binding t) | 703 (map-keymap 'compose-help-mapper binding t) |
673 (insert (make-string 1 key)) | 712 (insert (make-string 1 key)) |
674 (insert (single-key-description key))) | 713 (insert (single-key-description key))) |
675 (indent-to 16) | 714 (indent-to 16) |
676 (let ((code (and (vectorp binding) | 715 (let ((code (and (vectorp binding) |
677 (= 1 (length binding)) | 716 (= 1 (length binding)) |
678 (get (aref binding 0) character-set-property)))) | 717 (get (aref binding 0) 'character-of-keysym)))) |
679 (if code | 718 (if code |
680 (insert (make-string 1 code)) | 719 (insert (make-string 1 code)) |
681 (if (stringp binding) | 720 (if (stringp binding) |
682 (insert binding) | 721 (insert binding) |
683 (insert (prin1-to-string binding))))) | 722 (insert (prin1-to-string binding))))) |