同感,我看了几次那个图都没看懂。
我建议直接上视频或者动图,这样更直接更简单,理解起来更容易。
在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
快捷键映射表有优先级。
可能他这个放在比较高的优先级上。
在win7 GUI下,emacs --daemon运行,DOOM中用SPC q K退出时,会出现“device 1 is not a termcap terminal device”的问题,导致无法退出emacs。非daemon可以退出。请问大佬知道什么原因吗?我用二分法排查跟sis包有关,配置如下:
(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'
(setq sis-prefix-override-keys '("C-c" "C-x" "C-h" "M-SPC"))
: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)))
(not (sis--string-match-p "^\*doom:scra" (buffer-name buffer))))))) ; *Scratch* 仍可使用 C-h/C-x/C-c 前缀
)
我把TUI相关的那两句注释,可以正常关闭了。能不能麻烦看下当在daemon下使用GUI时,判断条件怎么写。
;; for TUI
(unless (display-graphic-p)
(pcase sis--current
('english
(send-string-to-terminal
(format "\e]12;%s\a" sis-default-cursor-color)))
('other
(send-string-to-terminal
(format "\e]12;%s\a" sis-other-cursor-color)))))
;;;;;;;;;;;;;;;
;; enable terminal focus event
(unless (display-graphic-p)
(require 'terminal-focus-reporting)
(terminal-focus-reporting-mode t))
Mac默认的拼音输入法是什么?
找到了,是 "com.apple.inputmethod.SCIM.ITABC"
Hi, 请问能把sis-external-ism设成某个快捷键吗?我现在考虑在rime中将Control+Alt+F2映射到切换英文,Control+Alt+F3映射到切换中文,有没有办法在sis中设成类似(sis-ism-lazyman-config F2 F3 Ctrl+Alt) ?
定制 sis-do-get和sis-do-set函数,
lazyman-config实际上最终落脚也是实现这两个函数。
我在windows 10上使用sis时,会使一些别的程序也被切换成英文输入法了,比如notepad3。搞了快一天可算解决了,有遇到同样问题的可以参考下我的方案。
推测原因:im-select每次切换输入法时,调用GetForegroundWindow函数来确定当前窗口,似乎会将当前活动窗口当作当前窗口,所以切到别的程序时sis如果活动了,就有可能改掉那个程序的输入法。
所以修改了下原im-select,改成3个功能:无参数时获取当前窗口ID;一个参数时输入ID,判断该窗口的输入法,相当于原im-select的无参数情况;同理2个参数时相当于原im-select的1个参数情况。有需要的可至https://gitee.com/retaw/im-select-win下载。
搭配该im-select时,sis可如此设置:
(use-package sis
:config
(defun sis--set-winID ()
(interactive)
(setq sis-winID (shell-command-to-string sis--ism))
)
(setq sis-external-ism "im-select.exe")
(setq sis--ism (executable-find sis-external-ism))
(sis--set-winID)
(setq sis-do-get
(lambda()
(sis--ensure-dir
(string-trim (shell-command-to-string (concat sis--ism " " sis-winID))))))
(setq sis-do-set
(lambda(source)
(sis--ensure-dir
(start-process "set-input-source" nil sis--ism sis-winID source))))
(sis-ism-lazyman-config "1033" "2052")
...
)
需要emacs在启动时保持活动状态以使im-select获取窗口ID。如果窗口ID有误,可M-x sis–set-winID重新获取。
代码比较渣,不过我这测试似乎是没问题的
现在的版本怎么关闭空格后inline的特性啊?我在配置里设了(sis-global-inline-mode nil)
,但是C-h v
查询时发现是t了
感谢大佬。evil-mode用户,装sis之前需要频繁切换,烦死。装了sis后,极端好用。
告诉你一个你----一定—要掌握的基础知识:
在emacs中,对于所有的mode来说:
(sis-global-inline-mode nil)
和 (sis-global-inline-mode t)
是一样的。
你要想关闭的话,可以这样 (sis-global-inline-mode -1)
你把这行删掉也可以啊。
sis中所有的mode,默认都是关闭的。
你不显式启用,就不会起作用。
可以试试 evil-pinyin,你会爱上的。
GitHub - laishulu/evil-pinyin: Evil search Chinese characters by pinyin
可以直接用拼音首字母搜索汉字~~~
多少emacs native键位用户,
哭着喊着让我移植到原生的emacs上。。
但是我没有去做