MacOS下输入法自动切换为英文

elisp

#1

最近几天从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)))

#2

我之前用shell command转换输入法,有点延迟。你觉得用applescript转换有延迟吗


#3

Emacs Mac Port 有提供 mac-select-input-source


#4

目前来看没有延迟


#5

这个之前我也搜到过,不过我用的是GNU Emacs,没有相关的函数


#6

个人觉得vim更需要这个根据模式自动切换输入法的功能


#7

macOS 上有很多小工具有这功能,推荐“自动切换输入法”。其实,搜狗输入法本身就可以设置。


#8

切换输入法是作为hook,所以希望它越快越好。以前用的一个shell 工具「issw」,能实现功能,但是esc切换到normal state时候有明显延迟。


#9

另外推荐一个 Hammerspoon,用 lua 写的一些 macOS 插件,输入法的话,我目前检测 iTerm,Emacs,微信,自动切换英文或者中文输入法


#10

mac要把 Ctrl + Space 换掉,避免和系统输入法切换冲突,操作习惯变了。纯Linux用emacs最好。


#11

相较于应用间切换,如果一直在emacs下工作,有没有办法在emacs两次输入间隔超过设定时间时自动切换输入法为英文,感觉这个还蛮实用的。或者有更好的方案?


#12

上文已经有切换输入法的逻辑了,配合 run with idle timer 就能实现你说的效果

不过更推荐 pyim


#13

@seagle0128 @hek14 @zwPapEr 可能是个人习惯不同,我倒是不希望安装其它外部的工具来实现,能内部实现最好,免得各种小工具东一个西一个


#14

只在 Emacs 里用的当然用 elisp 解决最好,但是像输入法这种,很多软件都有类似配置就只能上外部工具了

输入法这个我用 hammerspoon 会改 微信 iterm Emacs Alfred


#15

像我这种专门为这类软件付费(很早就买了GhostSKB)的,是不是有点儿犯傻:relieved:


#16

是的是的。我之前用evil-xkbswitch,依赖一个外部工具issw,切换输入法有延迟。现在用emacs-mac,内置的「mac-select-input-source」没有任何延迟