(重新设计)中英文混打:OS输入法管理包 smart-input-source

@goumao 请教个问题, 在Macos Emacs Mac Port 使用smart-input-source, 切换到中文之后, 光标闪烁一下之后就切换回英文, 想请问下怎么解决. Emacs version: GNU Emacs 27.2 配置

(use-package sis
  :ensure t
  ;; :hook
  ;; enable the /follow context/ and /inline region/ mode for specific buffers
  ;; (((text-mode prog-mode) . sis-context-mode)
  ;;  ((text-mode prog-mode) . sis-inline-mode))

  :config
  ;; For Linux
  (when  (ramsay/linux-p)
    (sis-ism-lazyman-config "1" "2" 'fcitx5))
  ;; For MacOS
  (when (ramsay/mac-os-p)
    (sis-ism-lazyman-config
     
     ;; English input source may be: "ABC", "US" or another one.
     ;; "com.apple.keylayout.ABC"
     "com.apple.keylayout.US"

     ;; Other language input source: "rime", "sogou" or another one.
     ;; "im.rime.inputmethod.Squirrel.Rime"
     "com.sogou.inputmethod.sogou.wubi"))

  ;; enable the /cursor color/ mode
  (sis-global-cursor-color-mode t)
  ;; enable the /respect/ mode
  (sis-global-respect-mode t)
  ;; enable the /context/ mode for all buffers
  (sis-global-context-mode t)
  ;; enable the /inline english/ mode for all buffers
  (sis-global-inline-mode t)
  )

截图: 2021-05-19 18.41.04

PS: 我的INPUT_SOURCE_ID不对导致的, 使用正确的INPUT_SOURCE_ID即可

大佬们可不可以让我白嫖一个fcitx5-rime的设置瞅瞅(

要直接用 fcitx5 的话,fcitx5 只设置有一个 Rime 是不行的,还需要再添加一个默认键盘放上面……(从 tg 群看到,楼层有点高了,便在这里回复

@goumao 大哥,我现在有一个问题: 在Lean和Agda这些语言里需要输入unicode,所以这些语言的mode有自己的输入法用来输入unicode,比如agda-mode下我可以设置输入法为Agda,就可以用“\”加上一些记号输入unicode符号

现在有个问题是,配合sis使用evil后,在agda-mode下,切换evil的normal模式和edit模式后,原本输入法是Agda被sis设置成原生的英语,就无法输入unicode了,只好手动重新设置输入法为Agda 这样就很麻烦。请问怎么能解决这个问题呢?

把 agda-mode 下 sis-english-source 设置成 agda-mode?

sis-english-source不该是一个input method switcher返回的值吗?我先试试

打错了抱歉 设置成你想要的输入法

在配置里加了这么一句:

(add-hook 'lean-mode-hook
   (lambda () (setq-default sis-english-source "Lean")))

但是没有效果,在lean-mode里sis-english-source被设置成了Lean,但切换evil的模式时输入法不会切到Lean,而且有时会奇怪地切到fcitx5中文输入法(我的外界输入法是fcitx5)。 sis的全部配置是:

(use-package sis
  ;;:hook
  ;; enable the /follow context/ and /inline region/ mode for specific buffers
  ;;(((text-mode prog-mode) . sis-context-mode)
  ;; ((text-mode prog-mode) . sis-inline-mode))


  :config
  (sis-ism-lazyman-config "1" "2" 'fcitx5)
  ;; enable the /cursor color/ mode
  (sis-global-cursor-color-mode t)
  ;; enable the /respect/ mode
  (sis-global-respect-mode t)
  ;; enable the /follow context/ mode for all buffers
  (sis-global-context-mode t)
  ;; enable the /inline english/ mode for all buffers
  (sis-global-inline-mode t)
  )

如何解决呢…

我没用过 Lean,你说的输入法是包为这些语言提供的(Emacs)内置输入法还是?然后你用的外部输入法,可能还要改 sis-do-set/get 这些函数,比较麻烦。不如考虑在这几个 mode 中禁用 sis-respect-mode,因为 evil 默认也有处理。

出现一个小问题,就是使用pyim的时候,当使用两个空格退出inline-mode时,作者说的删除两边的空格,后面的空格并没有删除。kongge

摸索了一下,WSL里面由于可以直接调用Windows PATH里面的exe,可以先把im-select.exe放到PATH路径,如SYSTEM32文件夹下,然后这样写:

(setq sis-english-source "1033")
(setq sis-other-source "2052")
(setq sis-do-get (lambda ()
                   (sis--ensure-dir
                     (string-trim (shell-command-to-string "im-select.exe")))))
(setq sis-do-set (lambda(source)
                   (sis--ensure-dir
                    (call-process "/bin/bash" nil t nil "-c" (concat "im-select.exe " source)))))

(setq sis-external-ism "im-select.exe")

请问 sis能不能实现在一种输入法中切换中英文状态?现在linux的中文输入法按 shift 切换输入法的中英文状态!感谢大佬的关注与工作!

linux上用rime就可以啊,你用的啥输入法?

linux系统自带的输入法,ibus 智能拼音。如果用rime,emacs还需要什么设置吗?

请问这是啥主题配色?

忘了…我现在不用这个主题了

楼主大大啊,我是用的 Doom,macOS 原生的 ABC、Pinying - Simplified 输入法,一直没效果,退出 evil 的 insert mode 并没有自动切换输入法,不知道哪里出了问题,说一下我的流程。

在 packages.el 里加上 (package! sis)

在 config.el 里加上

(use-package sis
  ;; :hook
  ;; enable the /follow context/ and /inline region/ mode for specific buffers
  ;; (((text-mode prog-mode) . sis-context-mode)
  ;;  ((text-mode prog-mode) . sis-inline-mode))

  :config
  ;; For MacOS
  (sis-ism-lazyman-config

   ;; English input source may be: "ABC", "US" or another one.
   "com.apple.keylayout.ABC"
   ;; "com.apple.keylayout.US"
   "com.apple.keylayout.Pinyin - simplified"

   ;; Other language input source: "rime", "sogou" or another one.
   ;; "im.rime.inputmethod.Squirrel.Rime"
   ;; "com.sogou.inputmethod.sogou.pinyin"
   )

  ;; enable the /cursor color/ mode
  (sis-global-cursor-color-mode t)
  ;; enable the /respect/ mode
  (sis-global-respect-mode t)
  ;; enable the /context/ mode for all buffers
  (sis-global-context-mode t)
  ;; enable the /inline english/ mode for all buffers
  (sis-global-inline-mode t)
  )

退出,然后 doom sync 。

进入 Emacs.app , M-x doom/reload

运行 sis-get 没有任何输出,运行 sis-global-respect-mode 倒是有反应,输出 Sis-Global-Respect mode enable/disable 。

1、 检查一下插件的运行条件是否具备

2、拼音的 ID 应该不对,你是如何获得的,我记得是 com.apple.inputmethod.SCIM.ITABC

1 个赞

检查 macOS 启用的输入法:

defaults read /Library/Preferences/com.apple.HIToolbox.plist  AppleEnabledInputSources
3 个赞

确实,macOS 下面要安装 macism,但是行为还是怪怪的,中英文切换是反的,按 ESC 切中文 :neutral_face:

PS: 按照 macism 后,命令行运行 macism ,获得英文输入法为 com.apple.keylayout.ABC ,中文输入法为 com.apple.inputmethod.SCIM.ITABC ,问题解决!谢谢老哥们的回复(都怪我自己,文档没看仔细)