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

终端是额外开启的 Termite,不是 emacs 里的; LC_CTYPE 默认确实是 en_US.UTF-8

这个猜测是对的。

是的。

跟这个人的状况是一样的:

是的,所以我觉得我不应该就这个问题耽误您太多时间,涉及到的环节太多了,并且实际上通过在启动 emacs 时传递 LC_CTYPE=zh_CN.UTF-8 就能够解决。

最后我想问下 package 是否提供了 log 功能,在设置好 LC_CTYPE 的时候,我测试发现 -set-english 函数是有效的,但是其他功能并未起作用,我觉得先解决这个问题会好些。

===Update===

确认了,是我并未把下面这些配置放入 config 导致退出 insert 模式无法切换英文等情况出现

   (smart-input-source-global-cursor-color-mode t)
   (smart-input-source-global-respect-mode t)
   (smart-input-source-global-follow-context-mode t)
   (smart-input-source-global-inline-mode t)

Github 上只看了关于 Linux 的那部份,以为这些不用设置(汗

===Update2===

现在唯一的问题就是必须在配置里添加 (requre 'smart-input-source),不然启动时就会提示找不到 -ism-lazyman-config 函数。

smart-input-source-log-mode

因为set-english实际上是关闭输入法,
无论当时输入法是什么,关掉是确定的,跟locale无关的,所以fcitx可以正常工作。
而set-other是打开fcitx的输入法,
fcitx需要从locale中获取语言,从而打开相应的输入法
这时候,locale出问题,就无法打开了。

@nujabse
fix了。
现在即使enable这个选项,也会正常工作。

@Sollovin
最新版你再试试。应该是因为之前没加autoload

@aqua0210 @emacle

你们有用isearch通过拼音首字母搜索汉字的需求么? 我下一步可以考虑把evil-pinyin移植过去

一直很想用,如果能移植过来,应该很多使用原生键位朋友也会很高兴😊

好的,明白了。

更新到最新版确实不需要 require 了,谢谢。

不兼容重大更新

  1. smart-input-source 改名为 sis
  2. sis-english 改名为 sis-english-source
  3. sis-other 改名为 sis-other-source

进行中

  • 目前在melpa中,package名称仍然是smart-input-source
  • 用户除了在安装package这一块,其它所有的地方都应该用sis.
  • 修改melpa中package名称的PR正在等待合并

接口 (变量和函数名) 更改太频繁了,跟不上。

windows平台,装了im-select,在emacs里调用 M-& im-select 2052 M-& im-select 1033,可以正常切换语言。

不过用smart-input-source-20200721.1220 版本,怎么也没配置成功。

Windows 平台上已经切换到最新版,目前使用一切正常。你需要根据readme更新一下配置。

你的最新帖子,
上面一个就是我发的:不兼容重大更新
必须阅读~~~~

能否分享一下配置? 我的如下:

(require 'sis)
(sis-ism-lazyman-config "1033" "2052" 'im-select)
(sis-global-respect-mode t)

(sis-follow-context-mode t)
(sis-inline-mode t)

sis-english-source sis-other-source 几个变量都设置成功了。 但是evil-mode下,退出insert,输入法还是中文。

你是不是用的spacemacs?readme还是要读一下的

我的配置跟你的一样,但我不用evil,我是用在原生按键模式的。

我没有用spacemacs,用的是 evil的原生vim模式。 sis-inline-mode 生效了,在evil下也生效。 sis-global-respect-mode ,在中文输入法时, c-x 切换成英文也成功了。 只有evil,从插入模式退出正常模式,不切换语言。

最后加了一个hook

(add-hook  'evil-normal-state-entry-hook  #'sis-set-english)

解决了。 目前没发现其他问题。

@chiron

  1. 你describe symbol看下这个:evil-insert-state-exit-hook
  2. 插入模式下,你describe symbol看下这个:evil-state

目前我的配置 (平台 win7 emacs26.1):

(require 'sis)
(sis-ism-lazyman-config "1033" "2052" 'im-select)
(sis-global-respect-mode t)
(sis-global-follow-context-mode t)
(sis-global-inline-mode t)
(add-hook 'evil-normal-state-entry-hook #'sis-set-english)

可以工作。

    1. 你describe symbol看下这个: evil-insert-state-exit-hook

evil-insert-state-exit-hook is a variable defined in ‘evil-states.el’. Its value is (evil-maybe-expand-abbrev evil-stop-track-last-insertion evil-cleanup-insert-state)

    • 插入模式下,你describe symbol看下这个: evil-state

evil-state is a variable defined in ‘evil-vars.el’. Its value is ‘insert’ Local in buffer init.el; global value is nil

Automatically becomes permanently buffer-local when set.

你改成下面的话,可以正常工作么?

         (add-hook 'evil-insert-state-exit-hook #'sis-set-english)
 (add-hook 'evil-insert-state-exit-hook #'sis-set-english)

也可以正常工作。

不过我感觉,放到evil-normal-state-entry-hook上,更合适吧?