首先我拥有两个模式,中文模式和英文模式(使用 M-m c
切换)
-
中文模式中,每行开始默认是中文,中文后面跟中文,英文后面跟英文,空格切换语言.
-
英文模式中,每行开始默认是英文,中文后面跟中文,英文后面跟英文,空格后面是英文.
但是这样会有一个问题,就是如何英文模式中使用中文, 用的作者提供的 rime-force-enable
可以解决.
后来我发现这样还是不够灵活,如何在中文后面输入一个英文字母呢?
临时切换
使用 M-c
临时切换语言, 通过判断当前应该的输入断言,取反,即如果该输入中文,那么就改成输入英文.再按,再次取反.
代码如下
(setq rime-disable-predicates
'(rime-english-mode))
(defun rime-after-change-function (beg end len)
(let ((inhibit-modification-hooks nil))
(makunbound 'rime-manual-lang)))
(defun rime-start ()
(interactive)
(unless (member 'rime-after-change-function after-change-functions)
(add-hook 'after-change-functions 'rime-after-change-function))
(unless (string= current-input-method "rime")
(activate-input-method 'rime)))
(defun rime-stop ()
(interactive)
(when (member 'rime-after-change-function after-change-functions)
(remove-hook 'after-change-functions 'rime-after-change-function))
(when (string= current-input-method "rime")
(rime-mode -1)))
(defun rime-english-mode ()
(cond
((boundp 'rime-manual-lang) rime-manual-lang)
(t (not (looking-back "\\cc" 1)))))
(defun rime-chinese-mode ()
(cond
((boundp 'rime-manual-lang) rime-manual-lang)
((and (org-in-src-block-p) (not (looking-back "\\cc" 1))) t)
((> (point) (save-excursion (back-to-indentation) (point)))
(if (looking-back " +" 1)
(looking-back "\\cc +" 2)
(not (looking-back "\\cc" 1))))))
(defun rime-switch-mode ()
(interactive)
(rime-start)
(when (boundp 'rime-manual-lang) (makunbound 'rime-manual-lang))
(if (member 'rime-chinese-mode rime-disable-predicates)
(progn (setq rime-disable-predicates '(rime-english-mode)
rime-input-mode "English Mode")
(flycheck-mode 1))
(progn (setq rime-disable-predicates '(rime-chinese-mode)
rime-input-mode "中文模式")
(flycheck-mode -1)))
(if (string= current-input-method "rime")
(message "%s" rime-input-mode)))
(defun rime-change-state-manually ()
(interactive)
(rime-start)
(setq rime-manual-lang
(if (boundp 'rime-manual-lang)
(not rime-manual-lang)
(not (seq-find 'funcall rime-disable-predicates))))
(if rime-manual-lang
(message "临时英文")
(message "临时中文")))
Elisp 萌新, 希望大佬们提建议