搜狗输入法 for Mac 有办法一切换到 Emacs 就切换到英文状态吗?

mac

#1

最近想同步手机上的输入历史,遂想试试在电脑上也使用搜狗输入法,设置里貌似没这功能,不知道大家有没有经验。


#2

这个?


#3

可能是一个办法,可惜我没有在用 HammerSpoon。


#4

还好,本身挺小巧的,多装个也不占资源


#5

噢,很久之前试过,没怎么弄明白就放弃了,感觉也没太大需求。


#6

这是目前最好的方法,不仅仅是emacs, 你切换 chrome 和其他应用都可以控制输入法的初始状态. 多个应用切换的时候很方便.


#7

我的方法:

  1. 自制一个切换输入法的命令行工具( applescript 也能做到,但是…太慢了)
  2. 每次切换到 emacs 时,保存当前输入法名字,将输入法换成ABC输入法
  3. 每次切出emacs时,将输入法切换回之前保存的

输入法切换工具

工具源代码见 text_input_source

以及编译安装脚本 compile.sh

emacs lisp

(defvar memacs-autoescape-english-layout-name "ABC"
    "English layout name in your macOS system")

(setq memacs-autoescape--origin-outside-layout-name "ABC")

(defun memacs/autoescape-use-english-layout()
  "Change input source to english layout while emacs frame focused."
  (unless (evil-hybrid-state-p)
    (setq memacs-autoescape--origin-outside-layout-name (shell-command-to-string "textinputsource"))
    (unless (string= memacs-autoescape--origin-outside-layout-name
                     memacs-autoescape-english-layout-name)
      (start-process-shell-command "changeInputSource" nil
                                   (concat "textinputsource -s "
                                           memacs-autoescape-english-layout-name))
      ))
  )

(defun memacs/autoescape-recover-outside-layout()
  "Recover input source to origin layout while emacs frame unfocused."
  (unless (string=
           (shell-command-to-string "textinputsource")
           memacs-autoescape--origin-outside-layout-name)
    (call-process-shell-command (concat "textinputsource -s "
                                        memacs-autoescape--origin-outside-layout-name)))
  )

;; 切入到 emacs
(add-hook 'focus-in-hook 'memacs/autoescape-use-english-layout)
;; 切出到 emacs
(add-hook 'focus-out-hook 'memacs/autoescape-recover-outside-layout)
;; 关闭 emacs
(add-hook 'kill-emacs-hook 'memacs/autoescape-recover-outside-layout)

详情见


#8

对比了一下大佬的方式,还是 HammerSpoon 方便 ,我的通用性太差了


#9

你是想同步输入词库?


#10

#12

可以试试Rime,开箱自带切换Emacs时切换英文


#13

为什么搜狗啊?其实现在本身自带的输入法就很好用了,可以一键切换。


#14

我用的Rime,它有一个ascii_mode,默认在iterm2,Alfred,Terminal,Quicksilver这些里面都是英文。

楼主的这个需求,我觉得Mac自带有这个功能?

在设置->键盘->输入法 里有一个自动切换到文稿的输入法。勾选后,我理解就是不同应用程序的输入法是可以不同的。比如chrome里面我用的中文。切到emacs后,就是英文。我自己就是使用的这程办法。最多就是第一次切到emacs时可能需要关闭一下输入法。以后切到emacs都是英文了。


#15

简单试了下是这样的


#16

搜狗for mac设置里有的


#17

的确有,之前没发现。