试了下 melpa 版 Version: 20200623.304 的没有这个问题,但是没法切换, 在 eshell 中执行 macism 可以
- 不放到初始化脚本里面,而是手工运行
smart-input-source-global-respect-mode
能不能正常? -
emacs --debug-init
能给出什么信息?
也不行,
Debugger entered--Lisp error: (void-variable global-respect-mode)
smart-input-source-global-respect-mode()
(progn (smart-input-source-global-respect-mode))
eval((progn (smart-input-source-global-respect-mode)) t)
elisp--eval-last-sexp(nil)
#f(compiled-function (eval-last-sexp-arg-internal) "Evaluate sexp before point; print value in the echo area.\nInteractively, with a non `-' prefix argument, print output into\ncurrent buffer.\n\nNormally, this function truncates long output according to the\nvalue of the variables `eval-expression-print-length' and\n`eval-expression-print-level'. With a prefix argument of zero,\nhowever, there is no such truncation.\nInteger values are printed in several formats (decimal, octal,\nand hexadecimal). When the prefix argument is -1 or the value\ndoesn't exceed `eval-expression-print-maximum-character', an\ninteger value is also printed as a character of that codepoint.\n\nIf `eval-expression-debug-on-error' is non-nil, which is the default,\nthis command arranges for all errors to enter the debugger." (interactive "P") #<bytecode 0x427bc439>)(nil)
#f(compiled-function (&rest _it) #<bytecode 0x1fff396991d1>)()
eval-sexp-fu-flash-doit-simple(#f(compiled-function (&rest _it) #<bytecode 0x1fff396991d1>) #f(compiled-function (&rest args2) #<bytecode 0x1fff37a3a0b5>) #f(compiled-function (&rest args2) #<bytecode 0x1fff37a39fd1>))
eval-sexp-fu-flash-doit(#f(compiled-function (&rest _it) #<bytecode 0x1fff396991d1>) #f(compiled-function (&rest args2) #<bytecode 0x1fff37a3a0b5>) #f(compiled-function (&rest args2) #<bytecode 0x1fff37a39fd1>))
esf-flash-doit(#f(compiled-function (&rest _it) #<bytecode 0x1fff396991d1>) #f(compiled-function (&rest args2) #<bytecode 0x1fff37a3a0b5>) #f(compiled-function (&rest args2) #<bytecode 0x1fff37a39fd1>) #f(compiled-function (&rest args2) #<bytecode 0x1fff37a3c74d>))
ad-Advice-eval-last-sexp(#f(compiled-function (eval-last-sexp-arg-internal) "Evaluate sexp before point; print value in the echo area.\nInteractively, with a non `-' prefix argument, print output into\ncurrent buffer.\n\nNormally, this function truncates long output according to the\nvalue of the variables `eval-expression-print-length' and\n`eval-expression-print-level'. With a prefix argument of zero,\nhowever, there is no such truncation.\nInteger values are printed in several formats (decimal, octal,\nand hexadecimal). When the prefix argument is -1 or the value\ndoesn't exceed `eval-expression-print-maximum-character', an\ninteger value is also printed as a character of that codepoint.\n\nIf `eval-expression-debug-on-error' is non-nil, which is the default,\nthis command arranges for all errors to enter the debugger." (interactive "P") #<bytecode 0x427bc439>) nil)
apply(ad-Advice-eval-last-sexp #f(compiled-function (eval-last-sexp-arg-internal) "Evaluate sexp before point; print value in the echo area.\nInteractively, with a non `-' prefix argument, print output into\ncurrent buffer.\n\nNormally, this function truncates long output according to the\nvalue of the variables `eval-expression-print-length' and\n`eval-expression-print-level'. With a prefix argument of zero,\nhowever, there is no such truncation.\nInteger values are printed in several formats (decimal, octal,\nand hexadecimal). When the prefix argument is -1 or the value\ndoesn't exceed `eval-expression-print-maximum-character', an\ninteger value is also printed as a character of that codepoint.\n\nIf `eval-expression-debug-on-error' is non-nil, which is the default,\nthis command arranges for all errors to enter the debugger." (interactive "P") #<bytecode 0x427bc439>) nil)
eval-last-sexp(nil)
funcall-interactively(eval-last-sexp nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
回复错了
最新的git 还是不会恢复输入法状态,加油 感觉 就差临门那么一脚了
@goumao 遇到了个奇怪的 bug,同时使用 yasnippet,eaf,和 smart-input-source,开启 eaf 后,eaf 会把自己的按键绑定到所有 mode 上,按绝大部分按键都会提示 command can only be called in an EAF buffer!
。
这个是我在 emacs -q
下可以复现的配置。
(package-initialize)
(package-refresh-contents)
(package-install 'use-package)
(use-package yasnippet
:ensure t
:config
(yas-global-mode))
(use-package eaf
:load-path "/eaf/path")
(use-package smart-input-source
:ensure t
:init
(setq smart-input-source-external-ism "fcitx5-remote")
:config
(smart-input-source-global-respect-mode t)
(smart-input-source-global-inline-english-mode t))
执行 M-x
eaf-open-browser
随便打开个网页之后,再切换回别的 buffer,会发现 C-n
C-p
什么的都不能用了,提示 command can only be called in an EAF buffer!
。
这三个包任意两个配合使用都没问题,三个一起开就出事儿了😂️,最近 eaf 和 smart-input-source 都有更新,之前是好好的,我一时半会儿排查不出来是哪里的问题。
如果谁也碰巧用了这三个包,暂时办法就是不开 global mode:
:hook
(((text-mode prog-mode) . smart-input-source-inline-english-mode))
经过测试,有新的问题:
- 光标颜色在用过C-x,b后就没法自动显示为黄色了。需要手动执行一些输入法切换(我这里是shift)
- C-x,b 会把当前buffer的输入法状态带到目标输入法。
操作步骤如下:
开始之前,确认buffer A 和 B 都是英文输入法,这时 C-x,b 随便切换,不改边输入法状态。正常。
- Buffer A ,切换为中文输入法 ,光标为黄颜色。正常
- C-x, 光标变为红色, 按b 进行切换到 Buffer B,这时的buffer B 是中文输入法,但是光标为红色。
- 在buffer B 手动切换为英文,再切回中文,光标才变回黄色。 4 再重复 第一步的操作,结果同上,这样循环。
smart-input-source会把自己的前缀键绑定放到最前面,
毕竟它只是个前处理,最后的绑定执行还是交给别的包处理的。
这些包都会写这个变量:emulation-mode-map-alists
下面这个变量配置何时触发把smart-input-source提到前面:
smart-input-source-prefix-override-recap-triggers
哦哦哦,
我只测了 C-x, b C-g
以为完美了。
那我再继续完善
请求协助:
- 对象:非 evil 用户
- 内容:follow-context 的意思是,当你把光标挪到一个新的地方时,根据上下文自动判断输入法。比如:你原来是在英文状态,但你把光标插入到两个汉字之间时,自动转换成中文状态。本package提供了一个变量
smart-input-source-follow-context-hooks
,如果开启了smart-input-source-follow-context-mode
,就会在相应的时机触发。对于evil用户,很简单,那个变量预置了evil-insert-state-entry-hook
,当进入插入模式时,就follow context一下。但是native emacs用户希望的是什么时机,我一无所知。希望你们能给一些线索。
尝试这样使用,不行。这个应该是怎么配置呢?
(push 'eaf-mode smart-input-source-prefix-override-recap-triggers)
(add-to-list 'smart-input-source-prefix-override-recap-triggers 'eaf-mode)
我这里也发现了,输入法是对的,但是光标颜色不对,是吧?
这和 push 也没啥区别啊
是的。一样的。
你把 respect-mode关掉。其它能正常工作么?
将 'eaf-mode 加入这个列表中还是出问题
关掉 respect-mode 可以正常工作
好像解决了,感谢!
对,中文书法对应到了红色。
我的理解是这样的:buffer B 的中文输入法是被buffer C-x,b 后强制改成的中文,所以buffer B的的光标并没有启动设置输入法颜色的hook。
补充:你们都用什么动图软件?我用QQ录屏保存的动图太大了,25M 没法上传。
那我再研究一下。。。。
有点奇怪。
你用doom还是什么的?
如果是doom,配置我拿过来,更容易重现问题。
gif brewery