我是使用了鼠须管,emacsmacport与emacs-rime, 本来想使用几一个快捷键实现emacs之外的鼠标管的中英文切换以及emacs之内的emacs-rime的切换。
我尝试使用 https://www.hammerspoon.org/ 来拦截 cmd+space ,分别触发鼠须管的切换以及emacs中的 ctrl+\ 切换,但实际使用中发现鼠须管的切换有bug, 经常输入法切过去了,但仍只能输入英文,也尝试过使用三方工具如 https://github.com/laishulu/macism, 后来查这是 macOS TISSelectInputSource 一个多年未修复的bug。像 macism 里也尝试过不同的trick, 但都不是很稳定。
我现在恢复到自己习惯在emacs与其它应用中分别记忆不同的快捷键,并且配置鼠段管在 emacs 中默认英文状态,这样即使错误的使用了切鼠段管输入法的快捷键也不会影响emacs之内的。
但这样用起来肯定不是那么流畅,发个帖子看看大家有没有其它各舒适的用法。
请问系统自带输入法有什么场景是覆盖不到的呢?内置输入法是不是有什么黑魔法提高生产力呀?大佬分享一下
emacs-rime 可以通过正则断言,实现一些场景的自动切换中英之类的。不过我用的上面2楼提到的方案。
2 个赞
没用 Karabiner Elements 吗?用它拦截 Emacs 内外的快捷键,指向不同的功能,比如我用 Shift 在 Emacs 里映射 C-\ ,在 Emacs 外映射 C-S-z 切换系统输入法。另外还用 hammerspoon 把 Emacs 的系统输入法强制设置为英文。
1 个赞
现在用 smart-input-source + patch鼠须管,MacOS Emacs输入法切换 ,这个方案目前用的很舒适
另外这是之前用 emacs-rime 时候碰到的问题以及一些解决方案:
在 Emacs 内部和外部一样使用 Shift 切换中英文状态。解决办法:使用 Karabiner-Elements 映射了快捷键
在切换到 Emacs 时,需要保证它是英文输入法(这里并不是指中文输入法的英文状态)。解决办法: Input Source Pro 设置 Emacs 的规则
isearch 中无法使用 emacs-rime 。解决办法: isearch-mb 包,或者 Swiper, consult-line 等。但我目前是只想用 isearch ,碰到需要中文的情况也只是将就用,或者临时使用 consult-line
内外的词库不统一。解决办法:手动同步词库。需求不大,所以没有想办法定时去同步,偶尔会碰到
字体中不包含的字符,出现之后会卡顿一会。解决办法: (setq inhibit-compacting-font-caches t), 这样就只会卡第一次了
1 个赞
可参考下 @ringawho 回复中的博文的第一小节
如果已经开始给 Squirrel 打私有patch了,是不是可以尝试拉 Squirrel 与 emacs-rime 两位作者帮忙一起看看有没有更方便的通信的机制。看最近 居戎氏 也在给 emacs-rime 提 PR, 不过是为了他新搓的双击输入方案的支持。feat: support chorded input by lotem · Pull Request #246 · DogLooksGood/emacs-rime · GitHub
前提:操作系统使用鼠须管+emacs使用rimelib,二者用同一个配置
emacs 中配置快捷键 C-, 来切换 rime 输入法
(global-set-key (kbd "C-," ) 'toggle-input-method )
操作系统中将 配置输入法快捷键为 C-z
使用hammerspoon做按键映射,主要的目的是
让emacs聚焦时将 C-; 映射为 C-,
其余情况将 C-; 映射为 C-z
~/.hammerspoon/init.lua
-- 设置emacs 在系统级仅用英文输入法
set_app_input_method('Emacs' , English)
hs.hotkey.bind({"ctrl"}, ";", function()
local win = hs.window.frontmostWindow()
if win then
local appName = win:application():name()
if appName == "Emacs" then
hs.eventtap.keyStroke({"ctrl"}, ",")
else
hs.eventtap.keyStroke({"ctrl"}, "z")
end
end
end)
如此就可以实现使用 C-; 既在emacs 中切换输入法,也在操作系统中切换输入法了
1 个赞
lou
2025 年10 月 4 日 18:08
11
MacOS存在一个功能在keyboard的All Input Sources中,可以实现使用CapsLock切换输入法,长按CapsLock切换大小写。利用Karabiner达到单击Ctrl实现ESC,组合则正常组合键。将CapsLock映射到原ESC键位,Ctrl放到原CapsLock键位。最终效果键盘上的CapsLock实现Ctrl和ESC效果,ESC实现切换输入法和大小写效果,解放Ctrl+空格这类常用的切换输入法,emacs中就随意设置切换输入法快捷键了。
1 个赞