最近几天从Linux切换到MacOS,经常会遇到切换到Emacs界面还是中文输入法,导致无法正常使用emacs,今天研究了一下,可以使用applescript 自动切换到英文
(defun maple/mac-switch-input-source ()
(shell-command
"osascript -e 'tell application \"System Events\" to tell process \"SystemUIServer\"
set currentLayout to get the value of the first menu bar item of menu bar 1 whose description is \"text input\"
if currentLayout is not \"ABC\" then
tell (1st menu bar item of menu bar 1 whose description is \"text input\") to {click, click (menu 1'\"'\"'s menu item \"ABC\")}
end if
end tell' &>/dev/null"))
(add-hook 'focus-in-hook 'maple/mac-switch-input-source)
另外,谁能分享一下Mac下还有什么区别于Linux的特殊配置 ,我目前只加了
(use-package ns-win
:if (eq system-type 'darwin)
:ensure nil
:config
(setq mac-option-modifier 'super
mac-command-modifier 'meta
mac-function-modifier 'hyper)
:bind (("s-v" . yank)
("s-c" . copy-region-as-kill)
("s-z" . undo)
("s-x" . kill-region)))
hek14
2019 年8 月 10 日 09:25
2
我之前用shell command转换输入法,有点延迟。你觉得用applescript转换有延迟吗
Emacs Mac Port 有提供 mac-select-input-source
之前没注意到 Emacs Mac Port 文档:(info "(emacs) Mac Functions"),其中介绍了很多有用和有趣的信息,比如:环境变量、默认语言、按键、字体、颜色、执行脚本、获得偏好、切屏动画、输入法、标签栏。
一些关于输入法的 API:
(mac-input-source-list) 获得所有的输入法;
(mac-input-source) 获得选中的输入法;
(mac-select-input-source "com.apple.keylayout.US") 选中特定输入法(以「美国」为例)。
我在 Mac 键盘设置中设置了 C-SPC 切换中英文,下面是对应的 Emacs Lisp 实现:
(defun chunyang-switch-input-source ()
"在「简体拼音」和「美国」之间切换."
(interactive)
(let ((US "com.apple.keylayout.US")
(CN "com.apple.inputmethod.SCIM.ITABC"))
(pcase (ma…
这个之前我也搜到过,不过我用的是GNU Emacs,没有相关的函数
个人觉得vim更需要这个根据模式自动切换输入法的功能
macOS 上有很多小工具有这功能,推荐“自动切换输入法”。其实,搜狗输入法本身就可以设置。
hek14
2019 年8 月 11 日 00:27
8
切换输入法是作为hook,所以希望它越快越好。以前用的一个shell 工具「issw」,能实现功能,但是esc切换到normal state时候有明显延迟。
另外推荐一个 Hammerspoon
,用 lua 写的一些 macOS 插件,输入法的话,我目前检测 iTerm,Emacs,微信,自动切换英文或者中文输入法
mac要把 Ctrl + Space 换掉,避免和系统输入法切换冲突,操作习惯变了。纯Linux用emacs最好。
Kinney
2019 年8 月 12 日 09:35
11
相较于应用间切换,如果一直在emacs下工作,有没有办法在emacs两次输入间隔超过设定时间时自动切换输入法为英文,感觉这个还蛮实用的。或者有更好的方案?
上文已经有切换输入法的逻辑了,配合 run with idle timer 就能实现你说的效果
不过更推荐 pyim
1 个赞
xiyang
2019 年8 月 14 日 09:29
13
@seagle0128 @hek14 @zwPapEr 可能是个人习惯不同,我倒是不希望安装其它外部的工具来实现,能内部实现最好,免得各种小工具东一个西一个
只在 Emacs 里用的当然用 elisp 解决最好,但是像输入法这种,很多软件都有类似配置就只能上外部工具了
输入法这个我用 hammerspoon 会改 微信 iterm Emacs Alfred
像我这种专门为这类软件付费(很早就买了GhostSKB)的,是不是有点儿犯傻:relieved:
hek14
2019 年8 月 14 日 11:54
16
是的是的。我之前用evil-xkbswitch,依赖一个外部工具issw,切换输入法有延迟。现在用emacs-mac,内置的「mac-select-input-source」没有任何延迟
goumao
2020 年3 月 30 日 10:01
17
(帖子被作者删除,如无标记将在 24 小时后自动删除)
1 个赞