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

我的关于sis-context-triggers的配置

(setq sis-context-triggers '(('org-insert-heading-respect-content 'sis--context-line nil)
                                 ('evil-org-org-insert-heading-respect-content-below 'sis--context-line nil)))

evil insert模式C-RET会调用org-insert-heading-respect-content, 可以正确切换

evil normal模式C-RET会调用evil-org-org-insert-heading-respect-content-below, 不能正确切换

insert模式下,因为输入法一直是中文,是不需要trigger的,这一行去掉。

我下次自用用spacemacs测一下。我现在没有这个环境。得专门装一个。

1 个赞

我有这样一个需求:使用某些命令打开 minibuffer 之后,不是切换为英文,而是切换为中文。

应用场景:

  • 使用 org-roam 搜索笔记的时候,因为一般笔记都是中文名。
  • 使用 counsel-rg 搜索文本的时候
  • 其他一些搜索场景

在文档中没有找到可以改的变量什么的,我就在配置里把代码中的 sis--minibuffer-setup-handler 重定义了。原本是:

(defun sis--minibuffer-setup-handler ()
  "Handler for `minibuffer-setup-hook'."
  (when sis-log-mode
    (message "enter minibuffer: [%s]@current [%s]@last [%s]@command"
             (current-buffer)
             sis--buffer-before-command
             this-command))
  (sis--set-english))

重定义为:

(defun sis--minibuffer-setup-handler ()
  "Handler for `minibuffer-setup-hook'."
  (when sis-log-mode
    (message "enter minibuffer: [%s]@current [%s]@last [%s]@command"
             (current-buffer)
             sis--buffer-before-command
             this-command))
  (if (or (string-equal "org-roam-find-file" (symbol-name this-command))
          (string-equal "org-roam-insert" (symbol-name this-command))
          (string-equal "org-roam-capture" (symbol-name this-command))
          (string-equal "counsel-rg" (symbol-name this-command)))
      (sis--set-other)
    (sis--set-english))
  )

我现在使用这个代码解决了需求。不知道还有没有更好的方法?想和大家交流一下

1 个赞

很棒啊,这是最佳做法,

如果需要改这一块的用户很多,
我可以把这块提出来,弄成可配置的predicate,

加了一个变量:sis-respect-minibuffer-triggers
你直接升级到github版,或等melpa几个小时候自动更新版本。

然后,你这么配置就行了:

(add-to-list sis-respect-minibuffer-triggers
                      (cons 'org-roam-find-file (lambda () 'other))))
(add-to-list sis-respect-minibuffer-triggers
                      (cons 'org-roam-insert (lambda () 'other))))
(add-to-list sis-respect-minibuffer-triggers
                      (cons 'org-roam-capture (lambda () 'other))))
(add-to-list sis-respect-minibuffer-triggers
                      (cons 'counsel-rg (lambda () 'other))))
2 个赞

macos系统总是莫名其妙的更改emacs的输入法,经常出现在切换程序的时候,切换到emacs时会出现nomal模式改成中文模式的情况,用各种切换输入法的小软件都会出现例外。烦不胜烦。

再次恳请开放一个硬切换的功能,即:

if emacs获得焦点 and evil处在nomal模式

then 输入法切换为英文

请大佬们帮忙和指点,谢谢!

刚找到一个出现问题的情况:

已经打开emacs阅读一个文件,这时在macos的Finder目录下,鼠标打开一个org文件,然后用buffer kill掉这个文件,则原来的文件变成nomal模式中文状态。

当然,由于macos的输入法的不稳定性,还有其他例外情况。

表示并没有遇到这样的问题

不會只有我有這種情況吧?

經常在chrome和emacs之間切換,切換的時候,偶爾出現emacs的nomal模式中文狀態,如圖。

更麻煩的是:原因找不到,還難以復現。

看样子像鼠须管?这个不是你在 Chrome 中是啥输入法切换过去就是啥输入法么,如果想要设置打开某 app 始终是英文模式,可以参考 https://github.com/rime/squirrel/issues/164, 或者我记得有个应用专门做这个的

厲害!一眼就看出問題了。

試了幾次,chrome中文狀態,然後切換emacs也改為中文了。可能是鼠鬚管搞的鬼。謝謝指點,有方向了。

也不算它搞得鬼吧,如 issue 里面说的没支持而已,哦对那个应用叫 SwitchKey

不是SwitchKey(沒安裝過) 、也不是Hammperspoon(安裝過但未啓動),類似這樣的軟件還有幾種,也試驗過,都不起作用,仍然是亂跳。

也不是鼠鬚管,它有這功能,但我沒有啓用。

現在的故障縮小到:切換app時,鼠鬚管輸入法保持不變。

———————— 更新,好像問題找到了,勾選這個:

设计上来讲,sis是支持这种情况的:
即使在chrome中切成中文了,
回到emacs之后,也会切回到之前的输入法。

这是符合预期的。前面你说的那几个应用是为了解决这个问题,给特定应用设定切换过去时特定的输入法,不是造成这个问题的原因呀😂

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

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

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

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

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

谢谢。我去试试。