是否可以在Emacs中交替使用两种输入方法?

时间:2012-08-20 04:18:31

标签: emacs

我知道有“C- \”来切换输入法,但是只允许一个额外的输入法 - 例如,默认情况下我有英文qwerty布局,我可以在它和dvorak之间交替。

但是有没有办法在两种其他语言之间进行交替同样轻松?例如,如果我想替换english-dvorak和我的母语布局?

2 个答案:

答案 0 :(得分:6)

要快速切换两种或更多替代输入法,我已将以下代码添加到init.el

;; Input method and key binding configuration.
(setq alternative-input-methods
      '(("russian-computer" . [?\C-\\])
        ("chinese-py-punct" . [?\C-|])
        ("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)

因此,为了切换到俄语,中文或德语IME,我相应地使用 C - \ C- | C-M- | 。要切换回英语,我使用与当前IME相同的密钥(即如果我有中文IME激活,我将使用 C- | 切换回来。)

配置使用alternative-input-methods变量。它是输入法名称和键绑定的汇总列表。

注意!如果通过调用M-x toggle-input-method Cu C - \ 激活IME,请按 C - \ 将根据alternative-input-methods变量切换到输入方法(在默认配置中,Emacs会记住新的IME并将其用于 C - \ )。

答案 1 :(得分:3)

如果我键入C-u C-\来选择一个输入法,再次选择另一个输入法,我发现每个后续调用都使用前一个输入法作为默认输入,因此切换到另一个输入法归结为C-u C-\ RET