使用反馈:smart-input-source 挂 emacs-rime

那你只能手工交换 english 和 other 的配置了。

但是,那样也有问题。
就是你打开minibuffer等,默认都是中文。

这个需求,倒是有点意思,
我考虑考虑能不能实现。

===更新====
搞一个 inline-chinese-mode,嗯,可以的。

最新版已经可以实现了:

这一点不是预期的行为。除非你自己定制了。
with-english 选项默认是开的,打开emacs之后,默认是英文。

好用。多谢。

还会实现吗?

@yqu212

已经实现了!

(setq-default smart-input-source-inline-with-other t)

用上了。多谢。

挂 emacs-rime 的时候发现 smart-input-source-global-respect-mode 会让 (setq default-input-method "rime") 失效

respect-mode 并没有特别的对内置输入法进行处理。

所有和内置输入法有关的,就是你在配置的时候的挂接:
牵涉到 current-input-methodset-input-method

(setq-default smart-input-source-english nil)
(setq-default smart-input-source-other "rime")
(setq-default smart-input-source-do-get (lambda() current-input-method))
(setq-default smart-input-source-do-set (lambda(source) (set-input-method source)))

你说的失效,
是什么现象?
如何复现?

就是 (setq default-input-method "rime"),describe-value 值是对的。如果 M-x smart-input-source-global-respect-mode,default-input-method 的值就变成 nil 了。

(use-package smart-input-source
  :quelpa (smart-input-source :fetcher github :repo "laishulu/emacs-smart-input-source")
  ;; :hook ((after-init . smart-input-source-global-respect-mode)
  ;;        (org-mode . smart-input-source-follow-context-mode)
  ;;        (org-mode . smart-input-source-inline-mode))
  :config
  (setq-default smart-input-source-inline-tighten-head-rule 0
                smart-input-source-inline-tighten-tail-rule 1)
  (setq-default smart-input-source-other "rime")
  (setq smart-input-source-english nil)
  (setq smart-input-source-do-get (lambda () current-input-method)
        smart-input-source-do-set (lambda (source) (set-input-method source))))

那是因为,mode启动的时候,自动设置成英文了。
你设成nil,就不改变当前的状态。

default-input-method 应该是和当前输入状态无关的变量?是 C-\ 选择的输入法,自动设置英文为什么需要改变这个变量。ps 设置 smart-input-source-respect-start nil 也会改变 default-input-method 为 nil,并且设置不回去了。

是的,无关的变量。
本package操作的是current-input-method,不是default-input-method.

这个就很奇怪了。本package其实没有一行代码是关于内置输入法的。
唯一相关的地方,就是用户自己config进去的挂接代码。
就像和im-select/fcitx的处理一样。

我本地复现了。。。
正在查找原因。

@Voleking 这个是emacs系统自己的行为,set-input-method 就是会改变default-input-method。 下面这个截屏来源于emacs自带的系统实现。

你切到中文输入法,这个值也会变成rime

我一会写个新的配置example。。。通用配置。。。。

  ;; (setq-default default-input-method "rime")
  (setq-default smart-input-source-english nil)
  (setq-default smart-input-source-other default-input-method)
  (setq-default smart-input-source-do-get (lambda() current-input-method))
  (setq-default smart-input-source-do-set
                (lambda(source)
                  (unless (equal source current-input-method)
                    (toggle-input-method))))

感谢,这个配置可以了,没有想到是 set-input-method 的问题,本来还以为你代码里改了什么。

我给更新到readme里面了。

这样别人也能避免踩坑。

1 个赞

很多功能确实是重复的,能merge到一起就好了。

都放在lazy-config里面了。