Native & OS 输入法管理包『sis』使用交流

About:在emacs中输入中文时,sis可以减少手工切换。

在坛友的不断使用反馈下,sis 特性和用户接口已稳定。
原帖因为过程中变动太大,甚至包名称都更改过,如今已没有参考价值。
因此,新开一贴,期望作为一个具有参考价值的知识库。

10 个赞

win7 + emacs 26.3 (原生非evil),使用非常方便,再次感谢大佬 :+1: :+1: :+1:

可惜github只能打一颗星

配置如下:

(use-package sis
  :init
  ;; `C-s/r' 默认优先使用英文 必须在 sis-global-respect-mode 前配置
  (setq sis-respect-go-english-triggers
	(list 'isearch-forward 'isearch-backward) ; isearch-forward 命令时默认进入en
	sis-respect-restore-triggers
	(list 'isearch-exit 'isearch-abort)) ; isearch-forward 恢复, isearch-exit `<Enter>', isearch-abor `C-g'
  :config
  (sis-ism-lazyman-config "1033" "2052" 'im-select) ; 输入码 1033/英文,2052/中文小狼毫
  ;; enable the /cursor color/ mode 中英文光标颜色模式
  (sis-global-cursor-color-mode t)
  ;; enable the /respect/ mode buffer 输入法状态记忆模式
  (sis-global-respect-mode t)
  ;; enable the /follow context/ mode for all buffers
  (sis-global-follow-context-mode t)
  ;; enable the /inline english/ mode for all buffers
  (sis-global-inline-mode t) ; 中文输入法状态下,中文后<spc>自动切换英文,结束后自动切回中文
  ;; (global-set-key (kbd "<f9>") 'sis-log-mode) ; 开启日志
  ;; 特殊定制
  (setq sis-default-cursor-color "green yellow" ; 英文光标色
   	sis-other-cursor-color "#FF2121" ; 中文光标色
  	;; sis-inline-tighten-head-rule 'all ; 删除头部空格,默认1,删除一个空格,1/0/'all
	sis-inline-tighten-tail-rule 'all ; 删除尾部空格,默认1,删除一个空格,1/0/'all
	sis-inline-with-english t ; 默认是t, 中文context下输入<spc>进入内联英文
	sis-inline-with-other t) ; 默认是nil,而且prog-mode不建议开启, 英文context下输入<spc><spc>进行内联中文
  ;; 特殊buffer禁用sis前缀,使用Emacs原生快捷键  setqsis-prefix-override-buffer-disable-predicates
  (setq sis-prefix-override-buffer-disable-predicates
	(list 'minibufferp
	      (lambda (buffer) ; magit revision magit的keymap是基于text property的,优先级比sis更高。进入 magit 后,disable sis的映射
		(sis--string-match-p "^magit-revision:" (buffer-name buffer)))
	      (lambda (buffer) ; special buffer,所有*打头的buffer,但是不包括*Scratch* *New, *About GNU等buffer
		(and (sis--string-match-p "^\*" (buffer-name buffer))
		     (not (sis--string-match-p "^\*About GNU Emacs" (buffer-name buffer))) ; *About GNU Emacs" 仍可使用 C-h/C-x/C-c 前缀
		     (not (sis--string-match-p "^\*New" (buffer-name buffer)))
		     (not (sis--string-match-p "^\*Scratch" (buffer-name buffer))))))) ; *Scratch*  仍可使用 C-h/C-x/C-c 前缀
  )
5 个赞

感谢大佬的配置,及时雨… :heart_eyes:

请教下1033和2052这两个数字是固定的吗?我安装了不会切换输入法。DOOM+evil

配置就使用你的这个

如果功能稳定了,最好再维护一份中文文档。。。。

3 个赞

我手动执行了这两个函数,切换到中文输入法成功,切回english不起作用。

(sis--set-other)
(sis--set-english)

Windows应该是固定的,你可以使用 git-bash.exe 来测试 ,切换输入法,后使用 im-select.exe 命令测试 im

The im-select.exe is command line program, but it can’t work in cmd or powershell. It’s microsoft’s fault, the keyboard API doesn’t support in cmd and powershell. I recommend you git-bash.

Note: The git-bash is not required. It’s only used to get current input method key, which needed in VSCodeVim’s configuration.

Windows 系统下只能保留一个英文和一个中文输入法,不能再多。

多谢,这两个函数正常了。我这不是1033,是2057

(sis-ism-lazyman-config "2057" "2052" 'im-select) 

我用的是Cygwin64

建议那个类似输入法状态转换图能配点文字说明,直接看图不是太明白。图上有些文字是不是选定的

:grinning: 同感,我看了几次那个图都没看懂。

我建议直接上视频或者动图,这样更直接更简单,理解起来更容易。

在Evil insert模式下,按M-f,M-b移动光标时,反馈不是太及时,按键后大概要0.5秒左右才会移动。另一台机器没装sis,没有这一问题。Profile了下,没看出哪的问题,就这样用吧。很好的package,不用换输入法就能流畅地用evil啦,谢谢。

晕了,我另一台window 7机器上, im-select中英文输入法输出的数字都是一样的。

我在windows上试了下用im-select.exe切换日语输入法和英语。 切换可以正常工作,但是日语(全角状态,日语输入状态)–> 英语 --> 日语切换后, 日语输入法变为半角输入状态(英语输入状态),能让切换回日语后还保持日语输入状态吗? 谁有这方面的经验?

报个bug

这个bug很奇怪. 和evil-mode有联动. 可能单独使用两者, 都不会出现这个问题.

sis的配置:

(use-package sis
  :ensure nil ; sis.el  存放在site-lisp
  :hook (evil-local-mode . sis-global-respect-mode)
  :config
  ; windows平台需要命令行程序im-select 1033 英文2052 中文
  ; lazyman-config语句应在第一行
  (if *is-windows* (sis-ism-lazyman-config "1033" "2052" 'im-select))
  (if *is-linux* (sis-ism-lazyman-config nil "pyim" 'native))
  (sis-global-respect-mode t)
  ;; (sis-global-inline-mode t)
  ;; (sis-global-follow-context-mode t)
  (sis-global-cursor-color-mode t)
  )

一开始注释掉 evil的配置, 不会出问题, 以为是 evil 的 bug. 后来写 issues 时, 单独加载了 evil , 没有问题.

一个个测试, 发现 evil 和 sis 同时加载时, 会有这个问题.

启动emacs后, M-x sis-global-respect-mode 临时关掉 sis-global-respect-mode , 打开 outline-minor-mode, 快捷键显示正常:

M-x sis-global-respect-mode 打开 sis-global-respect-mode , 快捷键就不显示了:

这个不是bug,是预期的行为。

因为C-c和C-x被respect-mode截取了。
(这个叫prefix key,sis支持用户自己配置)
快捷键还是能调用相关的功能
但是,
respect-mode会先拿过去做一些预处理:
比如:你在中文状态下C-c b a,
如果没有respect mode
那么输入法会输入ba的汉字,让你选。
但repsect mode会在你C-c之后,
自动切到英文输入法,
完了再调用原本的C-c快捷键。

原来如此。那为什么有的菜单,还是有部分快捷键能显示出来,不受respect-mode 影响呢?比如 C-c C-r

Snipaste_2020-08-31_11-25-23