Native & OS 输入法管理包『sis』使用交流

暫時的解決方案是:勾選「自動切換到文稿的輸入法」。

如果不勾選這個,那麼切換到emacs之前的程序的輸入法,會帶到emacs中,造成nomal狀態的中文狀態。

@goumao 在LaTeX里面输入$就自动切换到英文我应该怎么配置?

你自己可以写一个minor mode,
在latex中启用这个mode
在这个mode中,
加一个post-command-hook,
当检测到输入的字符是$后,调用 sis-set-english

但是,其中有一个小坑。
在中文输入法中,你输入 $,实际上得到的应该是,
所以,更为正确的做法是:
当检测到输入的字符是后,
改成$,并调用 sis-set-english

谢谢。我去试试。

环境

系统:macos 11.1

emacs: gccemacs@28 原生按键

使用心得

平时使用没有主动切换中英文 (指 中文后面两个空格 不会切换英文 , 英文后面两个空格不会切换中文 ) sis-switch 偶尔不起作用

(sis-global-respect-mode t) 开启后 上下文<spc><spc> 无作用 不会主动切换中英文

配置如下

(use-package sis
  :init
  ;; `C-s/r' 默认优先使用英文 必须在 sis-global-respect-mode 前配置
  (setq sis-respect-go-english-triggers
        (list 'isearch-forward 'isearch-backward) ; isearch-forward 命令时默认进入en
        sis-respect-restore-triggers
        (list 'isearch-exit 'isearch-abort)) ; isearch-forward 恢复, isearch-exit `<Enter>', isearch-abor `C-g'
  :config
  (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.pinyin")

  ;; enable the /cursor color/ mode 中英文光标颜色模式
  (sis-global-cursor-color-mode t)
  ;; enable the /respect/ mode buffer 输入法状态记忆模式
  ;; (sis-global-respect-mode t)
  ;; enable the /follow context/ mode for all buffers  
  (sis-global-follow-context-mode )
  ;; enable the /inline english/ mode for all buffers
  (sis-global-inline-mode t) ; 中文输入法状态下,中文后<spc>自动切换英文,结束后自动切回中文
  ;; (global-set-key (kbd "<f9>") 'sis-log-mode) ; 开启日志

  ;; 特殊定制
  (setq sis-do-set
        (lambda(source) (start-process "set-input-source" nil "macism" source "50000")))
  (setq sis-default-cursor-color "green yellow" ; 英文光标色
        sis-other-cursor-color "#FF2121" ; 中文光标色
        ;; sis-inline-tighten-head-rule 'all ; 删除头部空格,默认1,删除一个空格,1/0/'all
        sis-inline-tighten-tail-rule 'all ; 删除尾部空格,默认1,删除一个空格,1/0/'all
        sis-inline-with-english t ; 默认是t, 中文context下输入<spc>进入内联英文
        sis-inline-with-other t) ; 默认是nil,而且prog-mode不建议开启, 英文context下输入<spc><spc>进行内联中文
  ;; 特殊 buffer 禁用 sis 前缀,使用 Emacs 原生快捷键  setqsis-prefix-override-buffer-disable-predicates
  (setq sis-prefix-override-buffer-disable-predicates
        (list 'minibufferp
              (lambda (buffer) ; magit revision magit的keymap是基于text property的,优先级比sis更高。进入 magit 后,disable sis的映射
                (sis--string-match-p "^magit-revision:" (buffer-name buffer)))
              (lambda (buffer) ; special buffer,所有*打头的buffer,但是不包括*Scratch* *New, *About GNU等buffer
                (and (sis--string-match-p "^\*" (buffer-name buffer))
                     (not (sis--string-match-p "^\*About GNU Emacs" (buffer-name buffer))) ; *About GNU Emacs" 仍可使用 C-h/C-x/C-c 前缀
                     (not (sis--string-match-p "^\*New" (buffer-name buffer)))
                     (not (sis--string-match-p "^\*Scratch" (buffer-name buffer))))))) ; *Scratch*  仍可使用 C-h/C-x/C-c 前缀
  )
  1. sis-global-follow-context-mode已经改名了,
    见这个不兼容更新:
    Native & OS 输入法管理包『sis』使用交流 - #57,来自 goumao
  2. 中文后面两个空格切换英文,
    那个是inline-mode控制的,和respect-mode无关
    理论上来讲,respect-mode不会影响inline-mode

你是升级emacs到gccemacs@28之后才有这个问题的么?
emacs下,普通的emacs-plus有这个现象么?

brew tap d12frosted/emacs-plus
brew install emacs-plus

谢谢您的即时回复 , 我还没有在非gcc版本尝试,刚接触sis ,觉得很不错的一个设计 , 工作不忙的情况下可以试试 ,

@goumao 大佬,请教一个关于 sis 更新光标颜色的问题。

在 emacs buffer 中一切都正常。但是如果切换到其他应用再切回来时,光标颜色的更新会有延迟,这时会造成误判,本来是英文输入法,会让用户以为是其他输入法。

我希望 Emacs 焦点激活时,立即更新光标颜色,应该怎么设置?

这个。。。。

之前不是这样的么?

失策失策,

就一行代码的事~~~

我看看

之前已经有了相关的代码,
在当前输入法发生变化的时候,
自动改变光标颜色。

但是如果切换到其他应用再切回来时,光标颜色的更新会有延迟

我有点印象,
这块是因为emacs自带的after-focus-change-function这个函数,
emacs检测到focus change时没有那么快,有一定的delay
你是不是操作太快了?

等等。。。。

发现一个逻辑上的漏洞。

在外边切换输入法之后。
最后这个when 不成立,
但是实际上已经发生变化了。

我知道怎么fix了。

等我更新提交,你再看看。

1 个赞

我也遇到了这个问题。中文输入后,切到Normal mode,再切回到insert mode时,rime会是英文输入,要多按下SHIFT才能切成中文。用搜狗作为中文输入就没有这个问题。看上去是rime配置的问题,但没找到地方。

@driftcrow 你是怎么解决这个问题的?

没解决,现在没有用SIS,直接用emacs-rime了,但也有问题不好弄

如果是 macOS 上面的 Rime ,可以看一下这个 issue :

@driftcrow 我搞定这个问题了。方法是编辑~/Library/Rime/squirrel.custom.yaml 文件: 增加如下内容:

patch:
  app_options:
    org.gnu.Emacs:
      ascii_mode: false

这样sis切回中文时RIME就正常了。

可以rime只输入中文,直接把rime的英文模式去掉,用系统自带的。如何删除 鼠须管 的英文模式? · Issue #221 · rime/squirrel · GitHub

感谢告知。因为有Windows 上使用WSL运行emacs 的GUI版,不能使用系统输入法,目前多平台直接使用emacs-rime,感觉 很流畅,和evil配合很舒适。

嗯。我只用mac,所以感觉sis比emacs-rime要好用些。主要是不会和系统的RIME输入法混淆。emacs-rime时我经常会搞错目前是用哪个输入法在输入(emacs-rime还是鼠须管)。而用sis时,就很简单,切换的是同一个输入法。

sis也可以挂emacs内置输入法(当然含emacs-rime),
不过好像没什么人这么用。