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

对的,就是到了第六步 是英文。

这样回来是中文输入法吗?

在输入b的时候,是什么输入法?

现在有了颜色,观察挺明显的。 按了C-x 前缀以后,当前buffer的输入法就变成英文了。 当执行C-g 取消命令的话,会正常恢复到中文输入法。

更新: 我的ESC 没法取消命令,所以没法尝试,难道是因为ESC的问题?
因为C-x 连着ESC ESC 会组成别的命令。

我这里测试也不正常 到第6步时就又变回英文状态了, 基本上就是完全不会记录buffer输入法状态了 , 我没有用 evil

你们两人都是不用evil的吧?
我这里用evil,可能这就是问题。

我自己再考虑一下。

不过我上面的操作,其实没用到evil
所有有点奇怪。

应该就是这个问题了,我们都是Emacs正常模式,估计是操作上的次数不一样。 只恢复到了上一次的被C-x改变的英文输入法。

上面我测试的都是在windows上的。 在Mac OS上的行为还有点不一样,C-x后按C-g 取消命令,并不会恢复中文。

我把evil从配置里删掉了,还是正常的。
你们的emacs版本是什么呢?
我是 26.3

2020-06-21 23-19-20.2020-06-21 23_21_03

跟版本估计没有关系,我26.3 和 28.0.50 都试过,问题还是存在,Windows 系统。
mac 我没装26.3 没法测试。

windows 26.1. 26.3 都一样

  1. A buffer 中文
  2. B buffer英文

A buffer 里 C-x C-g A buffer可以正常恢复中文

A buffer 里 C-x b C-g A buffer不能恢复中文

A buffer 里 C-x b 选择b buffer 再 C-x b 选择A buffer, Abuffer还是不能恢复中文

感觉就是按下 前缀键后 再按其他的键 如 b 后 就直接将A buffer重置成 en 状态了

我这里C-x b 是ido-switch-buffer 命令,你的是 ivy 还是 helm?

It is bound to C-x b, <menu-bar> <buffer> <select-named-buffer>.

(ido-switch-buffer)

我这里也是用的ido-switch-buffer,问题和你一样,这个ido和ivy 有什么行为上的差异吗?

我不知道啊,我菜得很看到elisp头都晕了,我看大佬gif里用的反正不是ido

你们给的信息很重要。
我有点眉目,明天把这部分再优化一下。

还有个小问题反馈一下,s-i,s-p这些super开头的组合键没法在中文状态下使用。

这个super键 在mac 下我是通过下面的命令绑定:

  (setq mac-option-modifier 'super)

Windows 下这样绑定:

(when (eq system-type 'windows-nt)
  (setq w32-pass-lwindow-to-system nil)
  (setq w32-lwindow-modifier 'super)
  (setq w32-pass-rwindow-to-system nil)
  (setq w32-rwindow-modifier 'super)
  (w32-register-hot-key [s-]))

测试代理不要用ping,可以curl <destination>

现在的代理基本上只能支持TCP/UDP协议,ping是基于ICMP协议的,据我所知只有VPN这样的代理才能支持

1 个赞

几个可能发生问题的环节

  • Windows Terminal
  • WSL 2 Ubuntu
  • 调用 Windows 分区下的 /mnt/d/im-select.exe 可执行文件

ezgif-4-8a3d95320b84

  1. A buffer 中文
  2. B buffer英文

A buffer 里 M-x ido-switch-buffer 切换到 b buffer

B buffer 里 M-x ido-switch-buffer A buffer能恢复中文

在A buffer里按 C-x b 这样切换到到b buffer 再C-x b 切换回a buffe A buffer 不能恢复中文状态了

C-x b 绑定的 ido-switch-buffer 命令 , 直接使用命令的话可以恢复,使用按键 不能恢复了???

(defvar preserve-triggers
  '(switch-to-buffer
    switch-to-prev-buffer
    switch-to-next-buffer
    other-window
    windmove-up
    windmove-down
    windmove-left
    windmove-right)

我找出问题了,
是前缀键的处理和记住buffer的输入法之间冲突了。
可以很容易的改掉。

不过我在尝试一个更底层的机制。

@emacle @aqua0210

我修正一下C-x, b那个问题,
请测试一下是否解决了。
一定一定记得要最用git上的新版

另外,我还在尝试新的底层机制,
如果没有很好的优化机制
对性能影响太大的话,我就会放弃。