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

主要是就是在 meow 中根据 meow-insert-mode-hook 写了个进入和离开 insert-mode 的 hook,参考

然后加了

(add-to-list 'sis-context-hooks 'meow-entering-insert-mode-hook)
(add-hook meow-leaving-insert-mode-hook #'sis-set-english)

这样退出 insert-mode 就可以了。

另外从其他应用切换回来时,有时候也会带过来中文输入法。加了下面 focus 的时候触发

(defun lucius/meow-focus-change-function ()
    (if (frame-focus-state)
        (sis-set-english)
      (meow-insert-exit)))

  (add-function :after after-focus-change-function 'lucius/meow-focus-change-function)

好, 感谢。

after-focus-change-function 代码中处理了的。

但是有时候还是不行??

macOS系统里有个设置,不知道你有没有设:

系统设置》键盘》文字输入》输入法:编辑》自动切换到文稿的输入法。

很早以前就有么?

对,从最开始就有。

这个是GUI的focus处理, 1066行还有对terminal的focus的处理。

我想起来了,我的这个加在这里主要是为了离开 Emacs 的时候统一退出到 normal mode,至于为什么这么做,好像是以前从其他 app 回来会有点问题,我从 macsim 换成了 im-select,就不会有之前 macsim 切换输入法错误的问题了,有空我把这些 hack 去掉再试试。

一切都正常,除了在中文环境中输入不了中文,其他功能都可以,这一点怎么回事。 我的emacs现在使用的是emacs-mac 29版本的(Mac系统),之前在emacs plus 29上还是可以正常使用的。对应的配置基本上就是包说明文档中的默认配置。mac系统权限也给其权限了。 emacs

emacs-mac安装包从这里下载:Releases · railwaycat/homebrew-emacsmacport · GitHub 难道不支持?

请教各位大佬,按照github的配置,发现按ESC退出insert模式,进入normal模式,输入法不会自动切换为英文,怎么解决?

使用test.e测试:emacs -Q -l .emacs.d/test.el

 (require 'package)
  (setq package-archives '(("gnu"    . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
    		   ("nongnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/nongnu/")
    		   ("melpa"  . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))

;; (setq package-archives '(("myelpa" . "~/myelpa/")))
  (package-initialize) ;; You might already have this line  

  (use-package evil
    :ensure t
    :defer 2
    :init
    (setq evil-want-C-i-jump nil)
    :config
    (evil-mode 1)
    )

(use-package sis
  :ensure t
  :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 /context/ mode for all buffers
  (sis-global-context-mode t)
  ;; enable the /inline english/ mode for all buffers
  (sis-global-inline-mode t)
  )

让 sis 在 evil 之后加载尼

感谢,已经解决了。

  (use-package evil
    :ensure t
    :defer 2
    :init
    (setq evil-want-C-i-jump nil)
    :config
    (evil-mode 1)
    )

(use-package sis
  :ensure t
  :after evil
  :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 /context/ mode for all buffers
  (sis-global-context-mode t)
  ;; enable the /inline english/ mode for all buffers
  (sis-global-inline-mode t)
  )

@DogLooksGood 狗哥的这个仓库都看不到了,你现在还在用 sis 吗,可以分享下配置吗?

分享一下我的配置,sis 与 meow 相关的配置我只用这两句:

  (add-hook 'meow-insert-exit-hook #'sis-set-english)
  (add-to-list 'sis-context-hooks 'meow-insert-enter-hook)
3 个赞

这个问题还有坛友遇到过吗?我最近频繁触发,然后 debug-on-quit 也没看出什么名堂,想问问有没有什么解决办法 :joy:

我在 minibuf 下面有时候需要输入中文

(dolist (trigger '(aider-code-change aider-region-refactor aider-ask-question
				       aider-architect-discussion
				       aider-general-command aider-help))
    (add-to-list 'sis-respect-minibuffer-triggers
                 (cons trigger (lambda () 'other))))

我配置了一下,一开始进入 minibuffer 下面是自动切换成了中文,但是一旦我输入一个词语结束以后,就又自动切换成了英文,然后我想继续输入 中文 还得手动切换一下输入法,然后输入完了以后又自动切换会英文,有办法让这种情况下不要自动切换回 英文 吗?

有空我给加到README中

有空我研究一下,好久没碰了