*«»*«»
(defun compose-pair (pair) (interactive "sTwo-character code: ")
(let ((sublist (member pair composes-all)))
(if sublist (insert (nth 1 sublist))
(error "Pair \"%s\" not in composes-all" pair))))
(defun compose-two-keys () (interactive)
(compose-pair (format "%c%c"
(read-event "Compose key 1: " t)
(read-event "Compose key 2: " t))))
(if window-system
(global-set-key [?\C-,] 'compose-two-keys))
(global-set-key [?\M-,] 'compose-two-keys)
(defvar composes-accents '(
"`A" ?À "`E" ?È "`I" ?Ì "`O" ?Ò "`U" ?Ù
"`a" ?à "`e" ?è "`i" ?ì "`o" ?ò "`u" ?ù
"'A" ?Á "'E" ?É "'I" ?Í "'O" ?Ó "'U" ?Ú
"'a" ?á "'e" ?é "'i" ?í "'o" ?ó "'u" ?ú
"^A" ? "^E" ?Ê "^I" ?Î "^O" ?Ô "^U" ?Û
"^a" ?â "^e" ?ê "^i" ?î "^o" ?ô "^u" ?û
"~A" ?Ã "~O" ?Õ
"~a" ?ã "~o" ?õ
"\"A" ?Ä "\"E" ?Ë "\"I" ?Ï "\"O" ?Ö "\"U" ?Ü
"\"a" ?ä "\"e" ?ë "\"i" ?ï "\"o" ?ö "\"u" ?ü
"'C" ?Ç "CC" ?Ç "~N" ?Ñ
"'c" ?ç "cc" ?ç "~n" ?ñ
))
(defvar composes-otheriso '(
"_a" ?ª "_o" ?º "AE" ?Æ "ae" ?æ "ss" ?ß
"!!" ?¡ "??" ?¿ "SS" ?§ "<<" ?« ">>" ?»
"00" ?° "11" ?¹ "22" ?² "33" ?³
"14" ?¼ "12" ?½ "34" ?¾
"+-" ?± ":-" ?÷ "cd" ?· "xx" ?×
))
(defvar composes-globalmath nil)
(defvar composes-localmath nil)
(defvar composes-all nil)
(defun composes-update ()
(setq composes-all (append composes-localmath composes-globalmath
composes-accents composes-otheriso)))
(composes-update)
«»