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

Snipaste_2020-10-19_12-06-46

我这个截屏,
是在* 我是 之后,
alt-enter 然后进行输入

还是中文啊。

你要描述详细一点:

  • 某个按键之前,上下文是什么样子,截屏
  • 某个按键之后,是什么样的期望,但却是什么样的表现。

初始处于normal state的状态下 输入法为英文状态。

这个时候在这个光标所在的headline下 按ctrl enter
新建headline并进入insert state,期望的是输入法自动切换到中文,但实际却是英文输入法的状态

按org-capture的快捷键,新建一个capture,自动在headline进入insert state,期望的是输入法自动切换到中文,但实际却是英文输入法的状态

嗯。这回彻底明白了。

目前只能强行指定中文,但这种方式不适合你编辑英文文档。

参见

我有计划在这块增加predicate,让用户自己决定如何切换。
不过还没有做。

感谢您的快速回复 我试试看

但我在正文的输入的状态下,中英文切换是没有问题的

我刚才测试了下 在中英文混编的句子里 从normal切换到insert的状态下 会根据光标所在位置的中英文自动切换

新增:sis-follow-context-detectors

用户可以自定义上下文检测子。

!!! 不兼容更新


所有符号中的`-follow`都需要删掉。
比如 `global-folllow-context-mode` 改名为 `global-context-mode`

功能更新


支持org mode中C-RET新建item时,自动切换输入法。
底层代码写好了,但是默认的配置只支持doom。

此处需要原生emacs用户的帮助:

  1. 安装 MELPA
  2. 开启 command-log-mode,并 toggle command log mode buffer
  3. 在org mode buffer中,通过C-RET新建item,
  4. 在log mode buffer里面,看触发了什么命令。
  5. 将此命令报给我。

注意::::::::此贴已废弃,
请移步到新帖:

@jingow
新版已经支持在normal模式下,
C-RET 自适应切换输入法。
具体见我上一个回帖

我之前用emacs-mac,眼馋xwidget换成了emacs-plus@27,一样的配置可是sis不起作用了,请问可能是什么原因呢?

1 个赞

可以的。我现在就用的是emacs-plus@27

你要装一下macism(见sis的readme)。

emacs-mac原生支持输入法切换。
但是emacs-plus需要通过macism这个工具来帮你切换输入法。
相关的配置是自适应自动检测的,你不用改配置。

另外,如果你的sis更新了的话,记得看一下范例配置。
比如sis-follow-context-mode重命名成sis-context-mode了

啊谢谢,没有看到readme前半部分,谢谢!

目前的插件运行的非常的好,但是在org agenda view的状态下,还是中文法输入的状态,比较麻烦,不知道怎么处理,个人配置如下:

(sis-ism-lazyman-config “1033” “2052” 'im-select)

;;为了方便在org mode方便输入中文,尤其是在org-capture的状态下,设置成other

(setq sis-context-fixed 'other)

;; 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) )

定制 sis-context-detectors 即可。
实际上 sis-context-fixed 只是一个傻瓜化配置。

(defvar sis-context-detectors
  (list (lambda (&rest _) sis-context-fixed)
        (lambda (back-detect fore-detect)
          (when (sis--context-english-p back-detect fore-detect)
            'english))
        (lambda (back-detect fore-detect)
          (when (sis--context-other-p back-detect fore-detect)
            'other)))

  "Detectors to detect the context.
Each detector should:
- have two arguments:
  - back-detect: which is the result of (sis--back-detect-chars).
  - fore-detect: which is the result of (sis--fore-detect-chars).
- return one of the following values:
  - nil: left the determination to later detectors.
  - 'english: English context.
  - 'other: other language context.")
1 个赞

@jingow

oh…
你只是要在进入capture的时候,自动设置中文输入法么?
那不用定制那个变量的方法,
在sis 的配置中,加入这一句这个就行了:

  (add-hook 'org-capture-mode-hook #'sis-set-other)

好了,非常感谢!

又碰到一个新问题,请教下 在调用helm-org-agenda-files-headings来在agend files的headline之间进行跳转的时候,sis似乎导致了问题,举例如下,有三个headline分别为

  • test a 测试

  • test b 测试

  • test c 测试

如果我调用helm-org-agenda-files-headings来进行跳转的时候,在minibuffer输入的时候

  • 如果通过英文搜索,我输入 test和空格键 再加上 a或b或c的时候,可以顺利的搜索到相关条目,然后按enter就跳转到相关条目上去

  • 但如果通过中文搜索, 我输入“测试”和空格键的时候 再加上 a或b或c的时候

它会搜索到相关条目,但是当我按enter键的时候,它的反应是把中间的空格键删除,然后停在那里没有进行跳转,这个时候我再来一次,也可以跳转了。

  • 当我把sis插件关闭的时候,也没有这个问题

是sis-inline-mode的原因,而且是期望中的行为。
这个mode是为了中英文混合输入的自动切换。
你中文后面加空格,就触发了inline mode,
输入完英文,回车或者双空格,关闭inline mode,并删除头尾的一个空格。
其中,回车和双空格的效果不一样,并且是否删除头尾空格等很多方面,都可以配置。
默认配置下,你可以通过在测试后面输入两个空格来自动切换到英文,
这样关闭inline mode时,测试后面还有一个空格。

默认配置下的行为,readme中有详细的图解。

另外,你可以只在prog mode和text mode中启用inline mode
见readme中的范例config: GitHub - laishulu/emacs-smart-input-source: Less manual switch for native or OS input source (input method).

看到我修改后的回复了么?

收到 配置就不改了 直接回车解决了

有考虑适配 GitHub - meow-edit/meow: Yet another modal editing on Emacs / 猫态编辑

https://github.com/DogLooksGood/emacs.d/blob/master/elisp/init-input-method.el#L13

也许这段代码有帮助。