原生输入法切换:smart-input-source ,配合evil使用更佳。

@bin99 下列哪种情况呢?

  • Terminal.app里面跑emacs,然后在emacs里面不能切换。
  • Emacs.app里面跑term,然后在这个term里面不能切换?

Terminal.app里面跑emacs的话,需要把Terminal.app加到Security & Privacy / Accessibility 里面。
直接运行Emacs.app,在那里面执行macism的话,需要把Emacs.app本身要加到Security & Privacy / Accessibility里。
反正就是把最外层的程序加到Accessibility里面去。

当然,如果你用的是GUI的Emacs Mac Port(安装方式见readme),那都不需要,因为它是调用原生api,不是调用外部工具 macism。

是Emacs.app里面跑term,已完美解决。切换体验很棒!

  • 添加 Emacs.app 到 Security & Privacy / Accessibility
  • 添加 ruby 到 Security & Privacy / Accessibility :ballot_box_with_check:
    Screen Shot 2020-04-26 at 17.41.39

引自上面链接:Note that some Emacs “distributions” package together a number of Emacs binaries for various macOS versions in a single folder, and dynamically at runtime chooses the right one for your system. This means that the icon you click to start the program is really a “placeholder” that is not Emacs itself, but rather just starts up Emacs. This “placeholder” often takes the form of a Ruby script. If this is the case, you’ll need to drag the Ruby program on to the list.

@bin99 长知识了,谢谢反馈。 我把这个给加到README中。

@bin99 macism 升级了一下,可以自动请求 Accessibility权限。 请帮我测试一下,按如下步骤:

  • brew upgrade macism
  • 取消ruby的权限
  • 通过macism切换输入法

看是否弹出关于ruby的权限请求。

自动请求权限了

brew tap railwaycat/emacsmacport
brew install emacs-mac --with-modules --with-rsvg --with-imagemagick --with-natural-title-bar

1、按照上面的这个方法安装完 emacs-mac 和 doom

2、在doom 的package.el 里,安装好 emacs-smart-input-source,

3、在.doom.d/config.el 文件中如果这么设置是没问题的

(use-package smart-input-source)

如果用下面的配置就会报错。

(use-package smart-input-source
  :config
  (setq smart-input-source-english-input-source
        "com.apple.keylayout.US")
  (setq smart-input-source-other-input-source
        "com.sogou.inputmethod.sogou.pinyin")
  (add-hook text-mode-hook #'smart-input-source-mode)
  (add-hook prog-mode-hook #'smart-input-source-mode))

报错的信息是:

! Attempt to load DOOM failed

(config.el (wrong-type-argument symbolp (yas-minor-mode-on visual-line-mode display-line-numbers-mode hl-line-mode goto-address-mode vi-tilde-fringe-mode text-mode-hook-identify)))

配置完package.el之后,你运行过doom sync了么?

当然。 每次修改过config.el 、init.el 或者 packages.el 我都会运行 doom sync (以前是 doom refresh)

@montychen doom的话,我是这样配置的

(use-package! smart-input-source
  :config
  (add-hook! '(text-mode-hook prog-mode-hook)
             #'smart-input-source-mode))

按理说,不用doom的宏(带感叹号的那些),也是没问题的。

哦,我想起来了,应该加引用

(add-hook 'text-mode-hook #'smart-input-source-mode)
(add-hook 'prog-mode-hook #'smart-input-source-mode))

@montychen add-hook 加引用,没问题了吧?

:+1:

加引用就可以了。

@goumao 我想进入insert状态就切换成中文输入法,能否设置啊?

@Jousimies

这个要求,不符合这个package的设计初衷了。 因为这个package设计目标,就是上下文是英文的时候,这个mode不会干扰正常使用。

自己fork可以。

下面这一段改一下:

(add-hook 'evil-insert-state-entry-hook
	                      #'smart-input-source-do)

改成

(add-hook 'evil-insert-state-entry-hook
	                      #'smart-input-source-set-input-source-other)

相应的 remove-hook部分也改一下。

谢谢哈。主要我不是搞编程的,我用org-mode写latex。所以才有上面的想法。 :+1: :+1: :+1:

@goumao 改完了,可以的。真棒。 :+1: :+1: :+1:

@Jousimies 我有个疑问啊。。。

我觉得。。。。即使你不魔改
在你的使用场景下,
以前的mode很多时候进入insert模式也不需要你切换输入法啊。

比如说:这是测试^字符串, 其中^是你进入insert模式时的光标位置,
这种情况下,是会自动切换到中文的。

而你的魔改,因为进入insert状态就是中文输入法,会导致很多情况下,你需要手工从中文切换成英文。比方说你修改latex命令的时候。

是的。绝大多数情况下是这样的,中文后进入insert模式自动切换到中文。

org-mode转latex后换行是要空一行。所以我常常在新的一行(不紧靠上一行中文)中进入insert模式,此时输入法不会自动切换成中文的,而是保持成英文的状态。我就需要手动切换成中文输入法。

win10上面输入法切换有问题,在Emacs中切换后不认我默认的设置:中文输入法的中文状态。所以我要再按一次shift切换输入法到中文状态。

上面的模式搞的我常常混乱,所以索性设置成只要进入insert模式就是中文输入法,我再按一次shift就是中文输入法的中文状态。

btw.我之前设置了使用rime输入法,避开系统输入法的问题。用不习惯,所以又回到了系统输入法上面。

@Jousimies

我本来就对这块的规则有点犹豫,既然你也有这个需求,可见我之前的犹豫是个普遍的问题。 我计划:把空行之后是否respect上文的状态这块配置成可选的。完了这个问题就可解决了。

这个看个人习惯了,我个人用的是搜狗拼音,是把shift切换输入法关闭的。 图片

只切换不同的输入法,不切换同意输入法的不同状态。

1 个赞

mac下用brew安装失败了

➜  workspace brew install macism
Updating Homebrew...
==> Installing macism from laishulu/macism
==> Downloading https://github.com/laishulu/macism/archive/v1.1.0.tar.gz
==> Downloading from https://codeload.github.com/laishulu/macism/tar.gz/v1.1.0
######################################################################## 100.0%
==> swiftc macism.swift
Last 15 lines from /Users/jiya/Library/Logs/Homebrew/macism/01.swiftc:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/swift/Dispatch.swiftmodule/x86_64.swiftinterface:5:19: error: could not build Objective-C module 'Dispatch'
@_exported import Dispatch
                  ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libxml2/libxml/module.modulemap:1:8: error: redefinition of module 'libxml2'
module libxml2 [system] [extern_c] {
       ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libxml2/module.modulemap:1:8: note: previously defined here
module libxml2 [system] [extern_c] {
       ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libxml2/libxml/module.modulemap:1:8: error: redefinition of module 'libxml2'
module libxml2 [system] [extern_c] {
       ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libxml2/module.modulemap:1:8: note: previously defined here
module libxml2 [system] [extern_c] {
       ^

If reporting this issue please do so at (not Homebrew/brew or Homebrew/core):
  https://github.com/laishulu/homebrew-macism/issues

@shuxiao9058 我没在低版本的MacOS下测试过。 我用的是最新的MacOS版本,最新的xcode

还有,我之前用的是command line tools, 但是前几天升级command line tools之后,就出现了这个问题。 然后我装了xcode,然后把编译工具切到xcode上去,就OK了。 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer 就OK了。