你M-S-RET
和 C-S-RET
分别映射到了什么函数?
C-S-<return> runs the command
org-insert-todo-heading-respect-content (found in
org-mode-map), which is an interactive byte-compiled Lisp
function in ‘org.el’.
It is bound to C-S-<return>.
M-S-<return> runs the command org-insert-todo-heading (found
in org-mode-map), which is an interactive byte-compiled Lisp
function in ‘org.el’.
It is bound to M-S-<return> and M-S-RET.
我观察到按M-S-RET的时候执行的是切换而不是切换至英文,可能和输入法的shift切换有关。
你要有需求的话,就自定义 sis-context-triggers
这个变量。
('+org/insert-item-below 'sis--context-line nil)
意思是,在'+org/insert-item-below
函数执行前后,分别用你指定的函数来检测上下文,nil的话让检测链上后面的函数去决定,非nil的话就确定你想切换到什么输入法。本例中,在函数'+org/insert-item-below
执行前用'sis--context-line
检测上下文,'+org/insert-item-below
执行后不检测。
找到问题所在了,可能是输入法为了适配C-S-<tab>
的快捷键,对于C-S
一律忽略掉其中的Shift
,而没有对M-S
进行同样的处理,导致当我按下M-S-<return>
的时候,先触发emacs内置函数,松开Shift
之后输入法识别为一次长按Shift
的过程,触发输入法内置的中英文状态切换快捷键。
解决方法也很简单,关掉输入法内置的Shift
,改用Windows内置的Ctrl+Space
切换中英文状态。
更新了新版的 Squirrel 也就是 Mac 上的 rime,现在有个问题必现,在我设定的 mode 中进入 meow 的 insert-mode 自动切换到中文,在一个 buffer 中,第一次切换是成功的,然后退出到 meow 的 normal-mode 再次进入 insert-mode 后就会还是英文输入法,但是 menu-bar 上的图标是 Squirrel。
macism 偶尔切换失败的问题,就是 menu bar 上输入法 icon 在中英文间反复横跳的问题。我改了一个版本,感觉没啥问题了。
func select() {
let currentSource = InputSourceManager.getCurrentSource()
if currentSource.id == self.id {
return
}
TISSelectInputSource(tisInputSource)
usleep(InputSourceManager.uSeconds)
if self.isCJKV {
if let nonCJKV = InputSourceManager.nonCJKVSource() {
TISSelectInputSource(nonCJKV.tisInputSource)
usleep(InputSourceManager.uSeconds)
let newCurrentSource = InputSourceManager.getCurrentSource()
if newCurrentSource.id == nonCJKV.id {
InputSourceManager.selectPrevious()
} else {
TISSelectInputSource(tisInputSource)
}
}
}
}
我也提了 pr 了 Fix issue where the intended switch to Chinese input method defaults to English after multiple toggles by LuciusChen · Pull Request #17 · laishulu/macism · GitHub 用了两天没有失误的情况出现。
merge 了
[update]
brew也更新了,可以直接装。
很奇怪,我装了 sis 之后重启 emacs,返回报错:
Debugger entered–Lisp error: (void-function sis-ism-lazyman-config) (sis-ism-lazyman-config “com.apple.keylayout.ABC” “im.rime.inputmethod.Squirrel.Hans”)
但是我通过 C-h a 查询,是能找到 sis-ism-lazyman-config 的
是不是你调用sis-ism-lazyman-config
函数的语句,放置的位置不对?就是说,package载入之前你就调用了?
没事,解决了,群组里的 taka 提示我,配置要这么写:
(use-package sis :ensure t
:init
(sis-ism-lazyman-config
"com.apple.keylayout.ABC"
"im.rime.inputmethod.Squirrel.Hans")
:config
(setq sis-default-cursor-color "#cf7fa7"
sis-other-cursor-color "orange")
;; 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)
)
又发现一个小问题想请教:
sis 我设置这里差不多成功了,有一个问题是,evil-mode 模式下,按下 i 或 o,切换到 insert 状态时,输入法没法跳回中文。我看了一下配置,就是按照官方的方式配的。没改动
(use-package sis :ensure t
:config
(sis-ism-lazyman-config
"com.apple.keylayout.ABC"
"im.rime.inputmethod.Squirrel.Hans")
(setq sis-default-cursor-color "#cf7fa7"
sis-other-cursor-color "orange")
;; 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)
)
跳英文没问题,跳中文不行是吧?
这种一般是你的输入法切换工具有问题。
你是苹果系统,并且emcas不是用的emacs mac port的话,
你要安装macism,并且注意在macos弹窗中授权辅助功能。
可能第一次用,一开始配置好 sis 之后,还需要 sis-swtich 来切换一下在不懂模式下的输入法,这样子就能保证 sis 记得在什么模式下用什么输入法。
另外一个导致这个现象的原因是输入法本身的设置:经过我的观察,输入法实际上可以对应 evil 的不同模式进行切换,但问题是在 Insert 模式下,Rime 会自己切换到英文输入法。然后我发现这锅不应该让 sis 背,在 Rime 的设置里,发现开发者为它设计了一个特别的模式,检测到当前光标在 Emacs,会自动切换成英文。
我把这个设置注释掉之后,就正常了。
这个是不需要的。sis默认是在进入insert模式时,检测光标位置的上下文,自动切换输入法。比如: 在中文句子中,切到中文输入法;在英文句子中,切到英文输入法。
不过你已经解决了就好。
对,第一次用不熟悉,不小心执行了命令 sis-set 之类的,导致之前在不同模式下的输入法乱套了。
我用的 port install emacs-app ,29.4,今天装了 sis 后,按照提示授权后,通过 gui 启动 emacs (在 Application 目录点击 emacs 图标启动),sis 似乎不生生效,执行 M-x sis-get
返回为空,sis-switch 也没有切换输入法。但是我切换到 /Applications/MacPorts/Emacs.app/Contents/MacOS 目录下,在终端启动 ./Emacs,就没有问题,sis 都正常。
困扰好久了,有没朋友清楚这个问题是啥原因,怎么解决。
问题找到了,是 mac 上 emacs 的环境变量的原因,macsim 所在的目录是在我加载 sis 后再加入到 PATH 和 exec-path 里的,结果就出现我上面描述的现象了。这个 sis 能否做一个提示,第一时间没从这方面想,胡乱定位了好久。
想到一个问题啊:可能99%的人,都是用brew来安装macism,完了是装在/usr/local/bin下,应该是不存在这个问题的。
你用port的话,macism是手工下载到本地,才有这个问题。这也是从没有人遇到过这个的原因。不过我还是加到注意事项里为好。
不过既然用了 port,应该也不需要 macism 吧,port 那边的 emacs-mac 本来也不需要。
port那边的emacs-mac是emacs mac port (EMP)?