Tuesday, October 23, 2018

Emacs multi language - Korean, Chinese-Pyin, Russian

;; Emacs-Ubuntu Linux Mint 에서 4개 언어(한,영,중,러)를  입력할 때,
;; fcitx + ielm (emacs 내장 언어입력) 을 사용한다.
;; 
;; fcitx 가 시스템 키 이벤트를 최초로 처리하므로,
;; 한글,중국어,러시아 를 추가하고, Ctrl+Shift 로 언어전환(기본설정)을 매핑한다.
;;
;; emacs 에서 입력에서 fcitx 는 중국어 입력상태에서 먼저 처리하므로
;; fcitx 에서는 중국어 입력상태로 두고 중국어를 입력하면 돼고,
;; emacs ielm 에서는 한글,러시아,영어를 입력 한다.
;; 영문은 ielm 에서 한글,Russian 상태에서 같은키로 toggle 로 바꿔서 입력한다.

;; -- russian start here
;(global-set-key (kbd "C-\\")  'toggle-russian-input-method)

;; -- v.1 colflict with korean dired
;;(set-language-environment "Cyrillic-CP1251")
;(defun my-russian-setup ()
;  "Set up my private Russian environment."
;  (if (equal current-language-environment "English")
;      (setq default-input-method "Cyrillic-CP1251")))
;(add-hook 'set-language-environment-hook 'my-russian-setup)

;; -- already unsetted in upper section - (hangul-to-hanja-conversion)
;; (global-set-key (kbd "<Hangul_Hanja>")) ;<Hangul_Hanja> <- quail/hangul.elc
;; (global-unset-key [(f9)])

;; -- v.2
;; https://frageit.de/questions/12032231/is-it-possible-to-alternate-two-input-methods-in-emacs
;; Input method and key binding configuration.
(setq alternative-input-methods '(
     ("russian-computer" . [?\C-\\])
     ("chinese-py-punct" . [?\C-|])
     ("korean-hangul" . [?\C-']) ; ("korean-hangul" . [?\C-=])
     ("english" . [?\C-.])
   ; ("english-dvorak" . [?\C-.])
   ; ("korean-hangul" . "Hangul_Hanja")
   ; ("korean-hangul" . [?\C-m])
   ; ("german-postfix"   . [?\C-\M-|])
))

(setq default-input-method
      (caar alternative-input-methods))

(defun toggle-alternative-input-method (method &optional arg interactive)
  (if arg
      (toggle-input-method arg interactive)
    (let ((previous-input-method current-input-method))
      (when current-input-method
        (deactivate-input-method))
      (unless (and previous-input-method
                   (string= previous-input-method method))
        (activate-input-method method)))))

(defun reload-alternative-input-methods ()
  (dolist (config alternative-input-methods)
    (let ((method (car config)))
      (global-set-key (cdr config)
                      `(lambda (&optional arg interactive)
                         ,(concat "Behaves similar to `toggle-input-method', but uses \""
                                  method "\" instead of `default-input-method'")
                         (interactive "P\np")
                         (toggle-alternative-input-method ,method arg interactive))))))

(reload-alternative-input-methods)
;; -- russian ends here

No comments:

Pranten

 Pranten