我还是没搞明白command的normal prefix sequence stage 是怎么判断的
如果有什么现在smart-input-source没有的特性
但你又想实现进imbot
里面的,
还请提出来。
我看看是否需要也做进smart-input-source里。
代码里面有嘛。
- C-x 被截取了,就从normal stage的pre里面直接短路,进入了pre prefix stage
- pre prefix stage里面,禁止截取prefix key,并且保存相关状态
- -prefix-override-handler 里面把prefix key放回event loop里
- post prefix stage 里面转换状态到 sequence stage
- 用户继续输入b(现在是C-x b)
- 这个时候是pre sequence stage, 啥也不干
- 在post sequence stage里面,分成多种情况:
- C-x x y z 这种多层一系列的key sequence,每次都还是在sequence stage里面
- 中途 C-g 退出的key sequence,这时候要回到normal
- key sequence 完成了,映射到命令,这时候也要回到normal。
你也可以不这么实现。
只不过用状态装换的方式,逻辑比较清晰。
(smart-input-source-global-follow-context-mode t)
请问下这个功能是用在什么地方,怎么用?我关闭的时候出现错误
let: Wrong number of arguments: (2 . 3), 4
-
这个bug刚才fix了。
-
关于这个mode:
默认值是起这个作用:当你从evil normal state进入到evil insert state时,会自动根据上下文切换输入法。比如你光标在汉字中间进入插入状态,输入法会自动切换到中文。 非evil用户的话,你可以定制这个变量,把别的触发条件也加进去。比如emacs原生用户,可能把光标移动加进去,自动触发切换。但我不是emacs原生用户,不清楚操作习惯,这块就留白了,让用户自己决定。
你好 我有这样一个诉求,请问应该怎么配置
情况
下面图1中,快捷插入同级header后,变为图2后我想直接输入中文。但是输入法切换被接管了,系统默认(Linux ibus)切换按键无效,只能通过内置的‘smart-input-source-switch’切换
- 图1
- 图2
问题
请问可以通过配置调整为,在进入‘编辑’模式后不接管输入法的切换吗? 发现输入状态不符合使用情况,第一反应就是使用默认的输入法切换方法。github文档看了下,也没整明白。
现在的配置:
- 不会的。设计上来讲,smart-input-source (记为sis)不会接管OS的快捷键。
你可以详细描述一下这一步么?
OS切换的快捷键,有或者无sis的情况下的差别。
我来分析一下是什么原因 - 前面有个用户提过相同的问题。sis这种情况下,并不会切换输入法,
别人汇报过同样的问题,后来发现应该用M-enter,详情请见:
请见 org-mode模式下,item换行切换输入法的问题 · Issue #10 · laishulu/emacs-smart-input-source · GitHub - 根据上下文自动切换输入法是follow-context-mode,
但是默认只对进入evil insert state有效
见 (重新设计)中英文混打:OS输入法管理包 smart-input-source - #775,来自 goumao
如果你不想开这个功能,可以那一行配置删掉,或者设置为-1
注意 不能设置成nil
。在emacs中,mode设置成nil
和设置成t
效果是一样的。
你好,我使用fcitx5
,最新版本的懒人配置函数smart-input-source-ism-lazyman-config
却不能控制输入法。
smart-input-source-ism-lazyman-config
的配置是
(smart-input-source-ism-lazyman-config nil nil 'fcitx5)
按照之前版本的配置却是可以控制输入法的,配置是
(require 'subr-x)
(setq-default smart-input-source-english "1")
(setq-default smart-input-source-other "2")
(setq-default smart-input-source-do-get
(lambda() (string-trim (shell-command-to-string "fcitx5-remote"))))
(setq-default smart-input-source-do-set
(lambda(source)
(pcase source
("1" (string-trim (shell-command-to-string "fcitx5-remote -c")))
("2" (string-trim (shell-command-to-string "fcitx5-remote -o"))))))
多谢解释,感觉我不太会用上,不会定制这个变量哈哈
还有一个小问题,就是通过melpa升级的时候,会先删除旧的包,再安装新的包,这个过程中一直会弹出
Error running timer auto-refresh 未定义的警告信息
我只能关闭emacs,再重新打开一次,不算什么大问题,就是感觉升级的时候有点烦心,如果能不关闭Emacs无痛升级就太好了
好像仍然不行
这是我的配置
(use-package smart-input-source
:quelpa (smart-input-source :fetcher github :repo "laishulu/emacs-smart-input-source")
;; :hook
;; enable the /follow context/ and /inline region/ mode for specific buffers
;; (((text-mode prog-mode) . smart-input-source-follow-context-mode)
;; ((text-mode prog-mode) . smart-input-source-inline-mode))
:config
(smart-input-source-ism-lazyman-config nil nil 'fcitx5)
;; enable the /cursor color/ mode
(smart-input-source-global-cursor-color-mode t)
;; enable the /respect/ mode
(smart-input-source-global-respect-mode t)
;; enable the /follow context/ mode for all buffers
(smart-input-source-global-follow-context-mode t)
;; enable the /inline english/ mode for all buffers
(smart-input-source-global-inline-mode t)
)
谢谢反馈
愚蠢的bug,已修复。
请继续反馈。
可以正常控制了 感谢
除此之外 我这里还无法实现记录输入法状态的功能 即
#1 从 evil-normal 进入 evil-insert 手动切换为中文输入法 但不输入中文
#2 esc
#3 再次进入evil-insert
此时的输入法却不是中文输入法
这是我的配置
(use-package smart-input-source
:quelpa (smart-input-source :fetcher github :repo "laishulu/emacs-smart-input-source")
;; :hook
;; enable the /follow context/ and /inline region/ mode for specific buffers
;; (((text-mode prog-mode) . smart-input-source-follow-context-mode)
;; ((text-mode prog-mode) . smart-input-source-inline-mode))
:config
(smart-input-source-ism-lazyman-config nil nil 'fcitx5)
;; enable the /cursor color/ mode
(smart-input-source-global-cursor-color-mode t)
;; enable the /respect/ mode
(smart-input-source-global-respect-mode t)
;; enable the /inline english/ mode for all buffers
(smart-input-source-global-inline-mode t)
)
这个功能是没有的。
原因是normal模式下,
正常情况下你可能做各种操作,
比如光标从中文区移动到英文区。
聪明的做法,
不是恢复离开evil insert之前的输入法
而是根据上下文自适应切换输入法。
evil用户,我是强烈建议开follow context模式的。
我自己就是开着的。
我看你之前的配置中,这个mode是开着的,
但你刚才的配置中,把这个删掉了。。。。。
一些比较特殊的场景还是需要一直开着中文输入的 比如telega每次进入想要输入中文都需要C-SPC调出
在follow context模式被关闭的情况下记忆输入法状态可能会更好一点 而且不会损失其余特性
这个有啊 。
最好:
- 通过
make-local-variable
设成telega这个buffer local的变量。 - 把telega buffer这个变量设置成:
'other
这样,别的buffer仍然是follow-context自适应的,
而telega buffer中的context是固定成中文的。
你好,我在 Linux 下使用 spacemacs,与 smart-input-source 相关的配置是
dotspacemacs-additional-package '(smart-input-source)
(defun dotspacemacs/user-config ()
(smart-input-source-ism-lazyman-config nil nil 'fcitx)
)
这样设置的话 emacs 在启动时会有如下报错。我根据报错原因用 C-h 查了下 smart-input-source-ism-lazyman-config 这个函数并不能查到。
目前我这里安装的 smart-input-source 版本是 20200720.610。这个版本虽然有bug,但是这个函数应该还是有的。
所以,还是挺奇怪的。
现在最新的版本是20200720.911.
你先更新一下试试吧~~~
describe function的话,一直补到 ism
试试呢?
smart-input-source-ism-
找不到 smart-input-source-ism-lazyman-config 函数这个问题可以通过添加 (require 'smart-input-source) 这项配置解决。但是现在的问题,即使更新到 20200720.911,在我的 Linux 上并不能正常运作(不论是 GUI or Terminal)。
我的 Linux 环境是 Archlinux+i3wm,之前是通过给 emacs 的启动命令传递 LC_CTYPE=zh_CN.UTF-8 的方式使得 fcitx 能够被使用。
希望您能在 Linux 环境下进行更多的测试。
是这样的。
本质上来讲,本package自己并不会切换输入法,
只是提供了接口,让用户可以通过配置把输入法的切换方式给接入进去
对于fcitx来讲,是调用了 fcitx-remote
命令。
你可以看下lazyman config函数的实现
lazyman config只是个懒人包,可以满足大部分人的需求
如果不满足你的需求的话,
可以参照lazyman config的实现方式,
设置自己的do-get
和do-set
函数
@Sollovin
你的问题,似乎是环境变量没有传进去?
如果是这样的话,我来看看怎么实现。
==== 更新 =====
在smart-input-source
的config中,加入下列语句试试?
(setenv "LC_CTYPE" "zh_CN.UTF-8")
请把结果反馈过来