主要是就是在 meow 中根据 meow-insert-mode-hook 写了个进入和离开 insert-mode 的 hook,参考
然后加了
(add-to-list 'sis-context-hooks 'meow-entering-insert-mode-hook)
(add-hook meow-leaving-insert-mode-hook #'sis-set-english)
这样退出 insert-mode 就可以了。
另外从其他应用切换回来时,有时候也会带过来中文输入法。加了下面 focus 的时候触发
(defun lucius/meow-focus-change-function ()
(if (frame-focus-state)
(sis-set-english)
(meow-insert-exit)))
(add-function :after after-focus-change-function 'lucius/meow-focus-change-function)
goumao
1141
after-focus-change-function
代码中处理了的。
但是有时候还是不行??
goumao
1142
macOS系统里有个设置,不知道你有没有设:
系统设置》键盘》文字输入》输入法:编辑》自动切换到文稿的输入法。
goumao
1144
对,从最开始就有。
这个是GUI的focus处理,
1066行还有对terminal的focus的处理。
我想起来了,我的这个加在这里主要是为了离开 Emacs 的时候统一退出到 normal mode,至于为什么这么做,好像是以前从其他 app 回来会有点问题,我从 macsim 换成了 im-select,就不会有之前 macsim 切换输入法错误的问题了,有空我把这些 hack 去掉再试试。
一切都正常,除了在中文环境中输入不了中文,其他功能都可以,这一点怎么回事。
我的emacs现在使用的是emacs-mac 29版本的(Mac系统),之前在emacs plus 29上还是可以正常使用的。对应的配置基本上就是包说明文档中的默认配置。mac系统权限也给其权限了。

请教各位大佬,按照github的配置,发现按ESC退出insert模式,进入normal模式,输入法不会自动切换为英文,怎么解决?
使用test.e测试:emacs -Q -l .emacs.d/test.el
(require 'package)
(setq package-archives '(("gnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
("nongnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/nongnu/")
("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))
;; (setq package-archives '(("myelpa" . "~/myelpa/")))
(package-initialize) ;; You might already have this line
(use-package evil
:ensure t
:defer 2
:init
(setq evil-want-C-i-jump nil)
:config
(evil-mode 1)
)
(use-package sis
:ensure t
:config
(sis-ism-lazyman-config "1" "2" 'fcitx5)
;; enable the /cursor color/ mode
(sis-global-cursor-color-mode t)
;; enable the /respect/ mode
(sis-global-respect-mode t)
;; enable the /context/ mode for all buffers
(sis-global-context-mode t)
;; enable the /inline english/ mode for all buffers
(sis-global-inline-mode t)
)
感谢,已经解决了。
(use-package evil
:ensure t
:defer 2
:init
(setq evil-want-C-i-jump nil)
:config
(evil-mode 1)
)
(use-package sis
:ensure t
:after evil
:config
(sis-ism-lazyman-config "1" "2" 'fcitx5)
;; enable the /cursor color/ mode
(sis-global-cursor-color-mode t)
;; enable the /respect/ mode
(sis-global-respect-mode t)
;; enable the /context/ mode for all buffers
(sis-global-context-mode t)
;; enable the /inline english/ mode for all buffers
(sis-global-inline-mode t)
)
leo
1152
@DogLooksGood 狗哥的这个仓库都看不到了,你现在还在用 sis 吗,可以分享下配置吗?
K-gihu
1153
分享一下我的配置,sis 与 meow 相关的配置我只用这两句:
(add-hook 'meow-insert-exit-hook #'sis-set-english)
(add-to-list 'sis-context-hooks 'meow-insert-enter-hook)
3 个赞
这个问题还有坛友遇到过吗?我最近频繁触发,然后 debug-on-quit
也没看出什么名堂,想问问有没有什么解决办法 
vinurs
1155
我在 minibuf 下面有时候需要输入中文
(dolist (trigger '(aider-code-change aider-region-refactor aider-ask-question
aider-architect-discussion
aider-general-command aider-help))
(add-to-list 'sis-respect-minibuffer-triggers
(cons trigger (lambda () 'other))))
我配置了一下,一开始进入 minibuffer 下面是自动切换成了中文,但是一旦我输入一个词语结束以后,就又自动切换成了英文,然后我想继续输入 中文 还得手动切换一下输入法,然后输入完了以后又自动切换会英文,有办法让这种情况下不要自动切换回 英文 吗?
Deeson
1158
首先再次感谢作者如此杰出的包,在 Mac 下配合 Emacs-mac-port 使用非常舒服! 
同时,我发现,开启 sis-global-respect-mode
后,由于 sis--prefix-override-map-enable
直接被设置为了 t
,所以无论当前输入法是不是中文,emulation-mode-map-alists
中的 keymap 都会生效(往往是覆盖掉了 "C-c" "C-x" "C-h"
这些按键,被绑定到 sis--prefix-override-handler
)。
但是只有在中文模式下,我们才需要这些键绑定(从而在我们输入按键序列时,提前恢复英文输入状态),英文状态下是不需要的。
大多数情况这并没有什么问题,但是如果你在录制宏,那么如果键入上面的快捷键,那么,这个按键会被记录两次(比如我键入 C-c C-l
,但实际宏却记录了 C-c C-c C-l
),这就在执行这个键盘宏时出现问题。不知道有没有什么优美的解法?
而目前我通过:
(define-advice sis--auto-refresh-timer-function
(:around (orig) toggle-override-map)
(funcall orig)
(pcase sis--current
('english
(setq sis--prefix-override-map-enable nil))
('other
(setq sis--prefix-override-map-enable t))))
来绕过这个问题。因为我目前开启了 sis-auto-refresh-mode
,所以利用它的 timer 来检测当前输入法状态,并开关 sis--prefix-override-map-enable
,从而只在中文输入法时才绑定这些按键。
goumao
1159
只有在中文模式下,我们才需要这些键绑定(从而在我们输入按键序列时,提前恢复英文输入状态)
这个key insight非常好,可以做到sis里面去。
1 个赞