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

我一会写完,你跑一下,反馈给我就行了。

@aqua0210

(when (eq window-system "w32")
       ;; prevent single keypress from activating Start Menu
       (setq w32-pass-lwindow-to-system nil) 
       ;; make sure it's not used as a modifier
       (setq w32-lwindow-modifier 'hyper)
       ;; overwrite system hotkey by emacs      
       (w32-register-hot-key [s-])
       (define-key key-translation-map (kbd "<lwindow>")
         (lambda(prompt)
           (smart-input-source-set-english)
           (event-apply-super-modifier prompt))))

跑一下这段代码。
然后看看,按win键是否会自动设置成英文。
另外注意一下,win键按下时起作用,还是释放时起作用。

按下win键时返回错误:

Wrong number of arguments: (lambda nil (smart-input-source-set-english) (event-apply-super-modifier)), 1

而且系统可以识别到win 键盘的命令比如 win+x。

@goumao 跑新的代码出现下面的错误:

Wrong number of arguments: (1 . 1), 0 [5 times]

上面那段代码我改了下,你重新贴过去跑一下

==更新1===
我再看看。等下

===更新2===
@aqua0210

上面代码更新了,再去试下。
我本地测试过,除了跟windows相关的部分,其它都没问题

===更新3===
重新复制跑一下,
刚才把测试按键的配置放在上面了,
不是原始的windows按键。

用最新的代码 跑了, 单独按了win 键盘 会提示 lwindows- 的前缀,但是按和系统有定义过的组合键就会激活系统命令。

更新:

我有个想法,能否监控当用户按下Super按键的时候 就自动切换输入法为英文,按键松开 再恢复状态就行了。就能达到和Ctrl键一样的效果。

我觉得你们可以直接私聊了,这个帖子信息密度太低了🤣

我也觉得,造成这个帖子要重开了。可以到QQ号去交流。

而且会自动切换到英文输入法。

就是说, 系统快捷键的优先级高于emacs快捷键的优先级?

这样设置的话,win键本身成为了一个前缀按键,后面可以接其他按键操作。同时按win+x 或者win+i 会激活系统命令。

没事。现在是高强度开发期,变化很大。
等稳定了,这个帖子也没什么价值了

那个时候,再开新帖就可以了。

哦,这样我觉得更好啊:
比如原来的emacs里,Win-x
你分开按,
成了win x
这样emacs按键就跟系统按键分开了,
同时起作用,各不冲突。

只是使用习惯上要稍微适应一下。

我再想想办法吧,这个主要是Windows系统的问题,我看看AHK是否有更好的解决办法。因为我好多命令都依赖这个super键,比较难以适应。

感谢帮忙一起分析,我大概也有点头绪了。

@aqua0210

我刚才去读emacs的代码了
前面那段代码已更新。
我觉得这次没问题了。

你再测试一下。
完了反馈我看看~~

最新的方法,也是跟之前的一样。win 只能作为单个前缀来用,组合起来用就会激活系统命令。

又去读了下emacs的C代码,有眉目了。
只在elisp上,应该可以解决。

我一会写出来,你再测试一下。

@aqua0210

(when (eq window-system "w32")
       ;; prevent single keypress from activating Start Menu
       (setq w32-pass-lwindow-to-system nil) 
       (w32-register-hot-key [s-])
       (setq w32-lwindow-modifier nil)
       (define-key key-translation-map (kbd "<lwindow>")
         (lambda(prompt)
           (setq w32-lwindow-modifier 'super)
           (smart-input-source-set-english)
           (event-apply-super-modifier prompt))))

这个只是个概念验证,不是正式代码,
有效期:单次按win-SOMEKEY,第二次就无效了。

按一次 Win+x 就直接打开了系统的命令,然后emacs 就崩溃了

更新: 更新后的代码还是一样,直接弹出系统命令。

ooops…有个小错。

上面修改后的代码再试一次~~

====

想了想应该还是不行。。。

=====
我装了个windows 10的虚拟机,
doom也装上了
现在很多问题可以自己调试了~~~

经过试验,最终搞定了!
在Autohotkey的帮助下。

计划:

  1. 把autohotkey脚本生成exe文件,用户下载即可使用。
  2. 用elisp,把输入法、emacs映射和autohotkey都管起来。