;; ;; ru-keys.el -- support for russian keys for XEmacs. ;; ;; Version: 0.1 ;; ;; Written by Andrew W. Nosenko ;; ;; Credits: ;; This file based on hint from Alexey Vyskubov ;; ;; TODO: ;; Is possible handle `C-q ' key-pressing sequences ;; properly? ;; ;; Changes 0.0 -> 0.1: ;; Honor universal argument (C-u) and `overwrite-mode' variable. ;; ;; (defun ru-keys-insert-char (ch &optional cnt) "Insert character ch into current buffer honor `overwrite-mode' variable. Optional cnt parameter is count characters for insert (default 1)" (or cnt (setq cnt 1)) (setq i 0) (while (< i cnt) (setq next-char (char-after)) ;; If next char is EOF then just insert character ;; or doing "delete next character or not?" dance around ;; `overwrite-mode' and `next-char' otherwise. (if (not next-char) () ; delete nothing at EOF even if ; overwrite-mode is active ;-) (cond ; next-char is not EOF -- ; need analyze `overwrite-mode' ; and next-character itself ((eq overwrite-mode 'overwrite-mode-binary) (delete-char 1)) ((eq overwrite-mode 'overwrite-mode-textual) (cond ((eq next-char ?\n) ; next char is new-line ; do nothing, just insert ) ((eq next-char ?\t) (if (= (% (1+ (current-column)) tab-width) 0) (delete-char 1)) ) (t (delete-char 1)) ) ) ; end of overwrite-mode-textual ((not overwrite-mode) ; insert-mode ; do nothing ) (t (error "unknown overwrite mode: %s" overwrite-mode)) ) ) (insert-char ch 1) (setq i (1+ i)) ) ) (defmacro ru-keys-insert-char-m (ch) "Used internally by ru-keys module" `(lambda (&optional cnt) (interactive "p") (ru-keys-insert-char ,ch cnt) ) ) (modify-syntax-entry ?£ "w") (modify-syntax-entry ?Ê "w") (modify-syntax-entry ?à "w") (modify-syntax-entry ?Õ "w") (modify-syntax-entry ?Ë "w") (modify-syntax-entry ?Å "w") (modify-syntax-entry ?Î "w") (modify-syntax-entry ?Ç "w") (modify-syntax-entry ?Û "w") (modify-syntax-entry ?Ý "w") (modify-syntax-entry ?Ú "w") (modify-syntax-entry ?È "w") (modify-syntax-entry ?ß "w") (modify-syntax-entry ?Æ "w") (modify-syntax-entry ?Ù "w") (modify-syntax-entry ?× "w") (modify-syntax-entry ?Á "w") (modify-syntax-entry ?Ð "w") (modify-syntax-entry ?Ò "w") (modify-syntax-entry ?Ï "w") (modify-syntax-entry ?Ì "w") (modify-syntax-entry ?Ä "w") (modify-syntax-entry ?Ö "w") (modify-syntax-entry ?Ü "w") (modify-syntax-entry ?Ñ "w") (modify-syntax-entry ?Þ "w") (modify-syntax-entry ?Ó "w") (modify-syntax-entry ?Í "w") (modify-syntax-entry ?É "w") (modify-syntax-entry ?Ô "w") (modify-syntax-entry ?Ø "w") (modify-syntax-entry ? "w") (modify-syntax-entry ?À "w") (modify-syntax-entry ?³ "w") (modify-syntax-entry ?ê "w") (modify-syntax-entry ?ã "w") (modify-syntax-entry ?õ "w") (modify-syntax-entry ?ë "w") (modify-syntax-entry ?å "w") (modify-syntax-entry ?î "w") (modify-syntax-entry ?ç "w") (modify-syntax-entry ?û "w") (modify-syntax-entry ?ý "w") (modify-syntax-entry ?ú "w") (modify-syntax-entry ?è "w") (modify-syntax-entry ?ÿ "w") (modify-syntax-entry ?æ "w") (modify-syntax-entry ?ù "w") (modify-syntax-entry ?÷ "w") (modify-syntax-entry ?á "w") (modify-syntax-entry ?ð "w") (modify-syntax-entry ?ò "w") (modify-syntax-entry ?ï "w") (modify-syntax-entry ?ì "w") (modify-syntax-entry ?ä "w") (modify-syntax-entry ?ö "w") (modify-syntax-entry ?ü "w") (modify-syntax-entry ?ñ "w") (modify-syntax-entry ?þ "w") (modify-syntax-entry ?ó "w") (modify-syntax-entry ?í "w") (modify-syntax-entry ?é "w") (modify-syntax-entry ?ô "w") (modify-syntax-entry ?ø "w") (modify-syntax-entry ?â "w") (modify-syntax-entry ?à "w") (global-set-key [Cyrillic_io] (ru-keys-insert-char-m ?£)) (global-set-key [Cyrillic_IO] (ru-keys-insert-char-m ?³)) (global-set-key [Cyrillic_shorti] (ru-keys-insert-char-m ?Ê)) (global-set-key [Cyrillic_tse] (ru-keys-insert-char-m ?Ã)) (global-set-key [Cyrillic_u] (ru-keys-insert-char-m ?Õ)) (global-set-key [Cyrillic_ka] (ru-keys-insert-char-m ?Ë)) (global-set-key [Cyrillic_ie] (ru-keys-insert-char-m ?Å)) (global-set-key [Cyrillic_en] (ru-keys-insert-char-m ?Î)) (global-set-key [Cyrillic_ghe] (ru-keys-insert-char-m ?Ç)) (global-set-key [Cyrillic_sha] (ru-keys-insert-char-m ?Û)) (global-set-key [Cyrillic_shcha] (ru-keys-insert-char-m ?Ý)) (global-set-key [Cyrillic_ze] (ru-keys-insert-char-m ?Ú)) (global-set-key [Cyrillic_ha] (ru-keys-insert-char-m ?È)) (global-set-key [Cyrillic_hardsign] (ru-keys-insert-char-m ?ß)) (global-set-key [Cyrillic_SHORTI] (ru-keys-insert-char-m ?ê)) (global-set-key [Cyrillic_TSE] (ru-keys-insert-char-m ?ã)) (global-set-key [Cyrillic_U] (ru-keys-insert-char-m ?õ)) (global-set-key [Cyrillic_KA] (ru-keys-insert-char-m ?ë)) (global-set-key [Cyrillic_IE] (ru-keys-insert-char-m ?å)) (global-set-key [Cyrillic_EN] (ru-keys-insert-char-m ?î)) (global-set-key [Cyrillic_GHE] (ru-keys-insert-char-m ?ç)) (global-set-key [Cyrillic_SHA] (ru-keys-insert-char-m ?û)) (global-set-key [Cyrillic_SHCHA] (ru-keys-insert-char-m ?ý)) (global-set-key [Cyrillic_ZE] (ru-keys-insert-char-m ?ú)) (global-set-key [Cyrillic_HA] (ru-keys-insert-char-m ?è)) (global-set-key [Cyrillic_HARDSIGN] (ru-keys-insert-char-m ?ÿ)) (global-set-key [Cyrillic_ef] (ru-keys-insert-char-m ?Æ)) (global-set-key [Cyrillic_yeru] (ru-keys-insert-char-m ?Ù)) (global-set-key [Cyrillic_ve] (ru-keys-insert-char-m ?×)) (global-set-key [Cyrillic_a] (ru-keys-insert-char-m ?Á)) (global-set-key [Cyrillic_pe] (ru-keys-insert-char-m ?Ð)) (global-set-key [Cyrillic_er] (ru-keys-insert-char-m ?Ò)) (global-set-key [Cyrillic_o] (ru-keys-insert-char-m ?Ï)) (global-set-key [Cyrillic_el] (ru-keys-insert-char-m ?Ì)) (global-set-key [Cyrillic_de] (ru-keys-insert-char-m ?Ä)) (global-set-key [Cyrillic_zhe] (ru-keys-insert-char-m ?Ö)) (global-set-key [Cyrillic_e] (ru-keys-insert-char-m ?Ü)) (global-set-key [Cyrillic_EF] (ru-keys-insert-char-m ?æ)) (global-set-key [Cyrillic_YERU] (ru-keys-insert-char-m ?ù)) (global-set-key [Cyrillic_VE] (ru-keys-insert-char-m ?÷)) (global-set-key [Cyrillic_A] (ru-keys-insert-char-m ?á)) (global-set-key [Cyrillic_PE] (ru-keys-insert-char-m ?ð)) (global-set-key [Cyrillic_ER] (ru-keys-insert-char-m ?ò)) (global-set-key [Cyrillic_O] (ru-keys-insert-char-m ?ï)) (global-set-key [Cyrillic_EL] (ru-keys-insert-char-m ?ì)) (global-set-key [Cyrillic_DE] (ru-keys-insert-char-m ?ä)) (global-set-key [Cyrillic_ZHE] (ru-keys-insert-char-m ?ö)) (global-set-key [Cyrillic_E] (ru-keys-insert-char-m ?ü)) (global-set-key [Cyrillic_ya] (ru-keys-insert-char-m ?Ñ)) (global-set-key [Cyrillic_che] (ru-keys-insert-char-m ?Þ)) (global-set-key [Cyrillic_es] (ru-keys-insert-char-m ?Ó)) (global-set-key [Cyrillic_em] (ru-keys-insert-char-m ?Í)) (global-set-key [Cyrillic_i] (ru-keys-insert-char-m ?É)) (global-set-key [Cyrillic_te] (ru-keys-insert-char-m ?Ô)) (global-set-key [Cyrillic_softsign] (ru-keys-insert-char-m ?Ø)) (global-set-key [Cyrillic_be] (ru-keys-insert-char-m ?Â)) (global-set-key [Cyrillic_yu] (ru-keys-insert-char-m ?À)) (global-set-key [Cyrillic_YA] (ru-keys-insert-char-m ?ñ)) (global-set-key [Cyrillic_CHE] (ru-keys-insert-char-m ?þ)) (global-set-key [Cyrillic_ES] (ru-keys-insert-char-m ?ó)) (global-set-key [Cyrillic_EM] (ru-keys-insert-char-m ?í)) (global-set-key [Cyrillic_I] (ru-keys-insert-char-m ?é)) (global-set-key [Cyrillic_TE] (ru-keys-insert-char-m ?ô)) (global-set-key [Cyrillic_SOFTSIGN] (ru-keys-insert-char-m ?ø)) (global-set-key [Cyrillic_BE] (ru-keys-insert-char-m ?â)) (global-set-key [Cyrillic_YU] (ru-keys-insert-char-m ?à)) (provide 'ru-keys)