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

设置8000 以上(试过10000,15000,20000)的值都没问题。
说明默认的值没有成功设置成20000?

不会,我把代码中改成20秒,确实就等了20秒才关闭。

确实很诡异,那我就暂时这样用了。多加一条配置而已。

报告问题:

1,在evil normal模式下,输入 :%s/某甲/某乙/g 替换命令时,命令执行之后,这时的normal 模式变为汉字。

2,在执行M-x 然后输入命令后,有的命令执行后,normal 模式变为汉字。比如:org-roam-db-build-cache命令。

再次建议:「 evil 的 normal 模式必然是英文模式」成为最高优先级,可以避免挂一漏万的情况。谢谢。

我复现了。。。。

这两天就搞这个事~~~

我先记下了~~

等后面确认

终于被我找到了~~~~

eaf 有三行代码代码,不是大家常见的写法。
改掉就行了。

1 个赞

不能复现。
请确认使用的是最新版。

你这个evil normal模式
在替换前,已经切了英文
原理上来讲, 漏掉切中文更可能些
多切了中文不太可能

magit-revision: buffer 不能使用 C-x 1, C-x 0 , C-x b 我这边稳定复现了,只要光标位置在下图所列的 某些行 上,这些快捷键不能使用,大佬能帮忙分析下原因吗?

早先的git版本也是一样的效果。

不使用本包的情况下,那些快捷键是正常使用的

gif 操作如下

other

收到。

我再试试。

(setq-default smart-input-source-inline-with-other t) ; 默认是nil,而且prog-mode不建议开启, 英文context下输入<spc> <spc>

这个怎么不起作用了

  1. 当前输入法为EN, abcdefg<spc><spc>

  2. 两次空格后 输入法还是EN,不是应该变为中文输入法吗?

使用git ed85128

我试试,看是不是最近的修改引入的bug

=== 更新 ===

嗯。fix了。

我没用过magit,
完了在doom里面打开log的话,不能复现,
跟你的界面不一样。

把你的最小配置给我,
我再试试看。

@BlindingDark

eaf/smart-input-source/yasnippet冲突的问题,
我已经彻底解决。
是eaf的一个bug
我已经提交PR了。

等合并完,
你用最新版的eaf,
就不会有问题了

=== 更新 ====
PR 已合并

emacs我用的原生的,magit 我也没怎么配置

(use-package magit
  :bind (("C-x g" . magit)))

下面是log开启后,光标在两个不同位置按下 C-x b 再按下 C-g 的操作日志

正常情况下多了几行日志且保存了输入法状态。

Smart-Input-Source-Log mode enabled
post@[normal]: [[f9]]@key [smart-input-source-log-mode]@cmd [magit-revision: elpa]@buf [t]@override.
pre@[normal]: [^X]@key [smart-input-source--prefix-override-handler]@cmd [magit-revision: elpa]@buf [t]@override.
pre@[prefix]: [^X]@key [smart-input-source--prefix-override-handler]@cmd [magit-revision: elpa]@buf [t]@override.
Do set input source: [english]
Input source: [english] (saved) => [1033].
post@[prefix]: [^X]@key [smart-input-source--prefix-override-handler]@cmd [magit-revision: elpa]@buf [nil]@override.
pre@[sequence]: [^Xb]@key [ido-switch-buffer]@cmd [magit-revision: elpa]@buf [nil]@override.
post@[sequence]: []@key [ido-switch-buffer]@cmd [ *Minibuf-1*]@buf [nil]@override.
pre@[sequence]: [^G]@key [abort-recursive-edit]@cmd [ *Minibuf-1*]@buf [nil]@override.
Quit
post@[sequence]: []@key [abort-recursive-edit]@cmd [magit-revision: elpa]@buf [nil]@override.
Key sequence ended.
restore: [english]@[magit-revision: elpa].
Do set input source: [english]
pre@[normal]: [[f9]]@key [smart-input-source-log-mode]@cmd [magit-revision: elpa]@buf [t]@override.
Smart-Input-Source-Log mode disabled
 ====================上面是正常的情况=================
 ====================下面面是不正常的情况==============
Smart-Input-Source-Log mode enabled
post@[normal]: [[f9]]@key [smart-input-source-log-mode]@cmd [magit-revision: elpa]@buf [t]@override.
pre@[normal]: [^Xb]@key [nil]@cmd [magit-revision: elpa]@buf [t]@override.
C-x b is undefined
post@[normal]: [^Xb]@key [nil]@cmd [magit-revision: elpa]@buf [t]@override.
pre@[normal]: [^G]@key [keyboard-quit]@cmd [magit-revision: elpa]@buf [t]@override.
Quit
post@[normal]: []@key [keyboard-quit]@cmd [magit-revision: elpa]@buf [t]@override.
pre@[normal]: [[f9]]@key [smart-input-source-log-mode]@cmd [magit-revision: elpa]@buf [t]@override.
Smart-Input-Source-Log mode disabled

感觉应该是magit的问题,magit 我也不太懂,它的快捷键好像用什么 transient,不知道是不是里面的 C-x 前缀有特别处理

从log来看,本package(这里记为sis)就没抓到前缀键。
应该是被被别的高优先级的给挡了。
但那种情况下,
[^Xb] 应该是原始的映射啊

但你说的,如果sis不开,又没有这个问题。。。

我查下magit的键映射吧,看看什么情况。

我查了下:

  1. 没用doom的配置,就用magit默认的,还是没有复现。
  2. magit的keymap机制看起来很简单。

你把你的完整的emacs配置给我。
我觉得不像sis的问题,也不像magit的问题。

如果emacs的配置不给我的话,
那你把出问题时的 (current-active-maps) 拿过来我看看

emacs -Q 启动后,执行下面的最小配置

  1. 打开git目录里的 smart-input-source.el 文件

  2. C-x g 进入magit

  3. <tab> 展开 Recent commits

  4. fix regression commit 上按 <RET>

  5. 下面弹出 magit-revision buffer, 在不同行按 C-x bC-x 0

    1 file changed, 1 insertion(+), 1 deletion(-) 行以上都正常,以下行基本都出现undefined

(setq user-emacs-directory "D:/Q/360/Emacs/winrc/emacsrc/.emacs.d/")
(add-to-list 'load-path "D:/Q/360/Emacs/winrc/emacsrc/.emacs.d/elisp")
(setenv "PATH" (concat "D:/Q/360/Emacs/bin/" ";" "D:/Q/360/Emacs/winrc/" ";" "D:/Q/360/Emacs/winrc/GnuWin32/bin/"))
(progn
  (setenv "PATH"
	  (concat
	   (getenv "PATH")  ";"	     
	   "C:/Program Files/Git/bin" ";" ; Git for windows 2.10.0
	   "C:/Program Files/Git/usr/bin" ";"
	   ))
  (setq exec-path
  	(append exec-path (split-string (getenv "PATH")  ";"))))

(package-initialize)

(use-package magit
  :bind (("C-x g" . magit)))

(use-package smart-input-source
  :init
  (setq smart-input-source-external-ism "im-select.exe") ; for windows 命令行切换输入法工具
  (setq smart-input-source-english "1033")
  (setq-default smart-input-source-other "2052")
  (setq smart-input-source-default-cursor-color "green yellow")
  (setq smart-input-source-other-cursor-color "magenta")
  :config
  ;; (global-set-key (kbd "<f9>") 'smart-input-source-log-mode)
  
  ;; enable the /cursor color/ mode 中英文光标颜色模式
  (smart-input-source-global-cursor-color-mode t)
  ;; enable the /respect/ mode buffer 输入法状态记录模式
  (smart-input-source-global-respect-mode t)

  ;; enable the /follow context/ and /inline english/ mode for all buffers
  (smart-input-source-global-follow-context-mode t)
  (smart-input-source-global-inline-mode t)

  ;; enable the /follow context/ and /inline english/ mode for specific buffers
  ;; :hook
  ;; (((text-mode prog-mode) . smart-input-source-follow-context-mode)
  ;;  ((text-mode prog-mode) . smart-input-source-inline-mode))

  ;; (setq-default smart-input-source-inline-tighten-head-rule 1) ; 删除头部空格,默认1,删除一个空格,1/0/'all
  (setq-default smart-input-source-inline-tighten-tail-rule 'all) ; 删除尾部空格,默认1,删除一个空格,1/0/'all
  (setq-default smart-input-source-inline-with-english t) ; 默认是t, 中文context下输入<spc>进入内联英文
  (setq-default smart-input-source-inline-with-other t) ; 默认是nil,而且prog-mode不建议开启, 英文context下输入<spc> <spc> 进行内联中文
  )

(Emacs 26.3 版本)

other

(current-active-maps) 这个输出。。。

C-x b is undefined
C-x o is undefined
((keymap #^[nil nil keymap nil nil nil nil nil nil nil nil nil ...]) (keymap (menu-bar keymap (lisp-interaction "Lisp-Interaction" keymap ... ... ... ... ... "Lisp-Interaction")) (10 . eval-print-last-sexp) (27 keymap (9 . completion-at-point) (17 . indent-pp-sexp) (24 . eval-defun)) keymap (127 . backward-delete-char-untabify) (27 keymap (17 . indent-sexp)) keymap (27 keymap (17 . prog-indent-sexp))) (keymap #^[nil nil keymap 
#^^[3 0 set-mark-command move-beginning-of-line backward-char mode-specific-command-prefix delete-char move-end-of-line forward-char keyboard-quit help-command indent-for-tab-command electric-newline-and-maybe-indent ...] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] (S-mouse-3 . kmacro-end-call-mouse) (C-wheel-left . mwheel-scroll) (S-wheel-left . mwheel-scroll) (wheel-left . mwheel-scroll) (C-wheel-right . mwheel-scroll) (S-wheel-right . mwheel-scroll) (wheel-right . mwheel-scroll) (C-wheel-down . mwheel-scroll) (S-wheel-down . mwheel-scroll) (wheel-down . mwheel-scroll) ...))

复现了。。。

很奇怪你刚开始全新干净的环境, 为什么没有复现?看你的gif操作应该是能复现的?