Download
(require 'cl)
(defvar usr:*en/ru-table* '((?q . ?й) (?w . ?ц) (?e . ?у) (?r . ?к)
(?t . ?е) (?y . ?н) (?u . ?г) (?i . ?ш)
(?o . ?щ) (?p . ?з) (?\[ . ?х) (?\] . ?ъ)
(?a . ?ф) (?s . ?ы) (?d . ?в) (?f . ?а)
(?g . ?п) (?h . ?р) (?j . ?о) (?k . ?л)
(?l . ?д) (?\
(?x . ?ч) (?c . ?с) (?v . ?м) (?b . ?и)
(?n . ?т) (?m . ?ь) (?, . ?б) (?. . ?ю)
(?Q . ?Й) (?W . ?Ц) (?E . ?У) (?R . ?К)
(?T . ?Е) (?Y . ?Н) (?U . ?Г) (?I . ?Ш)
(?O . ?Щ) (?P . ?З) (?{ . ?Х) (?} . ?Ъ)
(?A . ?Ф) (?S . ?Ы) (?D . ?В) (?F . ?А)
(?G . ?П) (?H . ?Р) (?J . ?О) (?K . ?Л)
(?L . ?Д) (?: . ?Ж) (?\" . ?Э) (?Z . ?Я)
(?X . ?Ч) (?C . ?С) (?V . ?М) (?B. ?И)
(?N . ?Т) (?M . ?Ь) (?< . ?Б) (?> . ?Ю)
(?`. ?ё) (?~ . ?Ё) (?@ . ?\") (?# . ?\')
(?$ . ?*) (?% . ?:) (?^ . ?,) (?& . ?.)
(?* . ?\;)))
(defun lat<->rus (beg end &optional arg)
"Recode region that contains russain text typed in english into russian. With
ARG given recode region in the other direction."
(interactive "*r\nP")
(save-excursion
(goto-char beg)
(do () ((>= (point) end))
(let* ((en-char (char-after (point)))
(ru-char (if arg
(car (rassoc en-char usr:*en/ru-table*))
(cdr (assoc en-char usr:*en/ru-table*)))))
(delete-char 1)
(insert (if ru-char ru-char en-char))))))
(defun rus<->lat (beg end &optional arg)
"Recode region that contains russain text typed in russian into enflish. With
ARG given recode region in the other direction."
(interactive "*r\nP")
(save-excursion
(goto-char beg)
(do () ((>= (point) end))
(let* ((en-char (char-after (point)))
(ru-char (if arg
(cdr (assoc en-char usr:*en/ru-table*))
(car (rassoc en-char usr:*en/ru-table*)))))
(delete-char 1)
(insert (if ru-char ru-char en-char))))))