自建网站套现,古典网站素材,简洁手机导航网站模板下载安装,商品展示的网站谈一下快捷捷冲突的问题。 Emacs几乎穷尽所有组合键
我用下面命令#xff0c;在Fundamental模式下#xff0c;枚举所有绑定。
(defun keymap-lookup-test-fn(); printable keys(setq printable-chars (number-sequence 33 126))(setq i 0)(while ( i (length printable…谈一下快捷捷冲突的问题。 Emacs几乎穷尽所有组合键
我用下面命令在Fundamental模式下枚举所有绑定。
(defun keymap-lookup-test-fn(); printable keys(setq printable-chars (number-sequence 33 126))(setq i 0)(while ( i (length printable-chars)); (setq key-name (format C-%c (nth i printable-chars))); (setq key-name (format M-%c (nth i printable-chars)))(setq key-name (format C-M-%c (nth i printable-chars))); (setq key-name (format (concat custom-user-prefix-key %c (nth i printable-chars)))); (setq key-name (format (concat custom-user-prefix-key C-%c (nth i printable-chars)))); (setq key-name (format C-x %c (nth i printable-chars))); (setq key-name (format C-x C-%c (nth i printable-chars)))(setq key-desc (keymap-lookup (current-global-map) key-name))(message ---------- %S : %S key-name key-desc)(setq i (1 i))))发现没有使用的绑定只有:
M-NM-OM-PC-M GC-M MC-M QC-M XC-M YC-M ZC-x cC-x gC-x jC-x yC-x C-aC-x C-gC-x C-hC-x C-y
M-n M-p 实际是配合其它命令使用的不能再占用。
值得一提的是C-c本来是给用户使用的但其它包可能会占用Emacs自带的Org Mode就大量占用C-c甚至Org自身的绑定都相互冲突。
无法保证其它Mode或者包可能占用组合冲突问题无法化解。
我机器上我会关掉所有可见的全局快捷键以避免与Emacs绑定冲突。
于是Emacs用户经常会面临一个问题自定义命令无键可绑! Hyper键
Hyper存在于上古的Lisp machine现在的键盘几乎没有这个键。
所以没有谁会使用这个键这个对于用户来说可是一个宝贵资源。
但Hyper只存在传说中了在硬件层面已经不支持。 USB标准里面根本没有空间给Hyper一个字节已经占满 出处 https://files.microscan.com/helpfiles/ms4_help_file/ms-4_help-02-46.html
另外QMK中也不支持Hyper键这基本上证实物理上的Hyper不存在了。
但Emacs并没有遗忘Hyper可能是因为Lisp血统。
做法是在Emacs中把一个不常用的键映射成Hyper键这个是纯属Emacs自己做的事与物理上有没有Hyper没有关系。
下面的代码把菜单键(KCAPP/KCMENU)配置成Hyper, 再把Hyper-b配置为打开ibuffer的快捷键。
(setq w32-apps-modifier hyper) ; Menu key
(global-set-key (kbd H-b) ibuffer)这样在键盘上按着菜单键同时按下b键就可以打开ibuffer. QMK改键方案
这个是本文的重点。
Hyper方案的缺点是来自Emacs即在Emacs是Hyper在其它地方是菜单键。
所以你会时不时的在其它软件上打开菜单另加上一个字母。
另外菜单键本身不是Modifier并不是为组合设计的存在按键冲突的可能。
所以这个方案并不完美。
我现在的方案是使用F12以上的功能键即F13-F24常规键盘不存在这些键但是允许使用的再加组合键使这个组合几乎唯一。
(setq custom-user-prefix-key C-M-S-f13 )
(global-set-key (kbd (concat custom-user-prefix-key ;)) custom/move-to-midlle-forward)这里使用Ctrl-Alt-Shift-F13做前缀再加分号执行一个自定义命令。
相信没有哪个厂家或者第三方包会使用这样一个怪异的组合了 就算有我还有F13后面的11个键可以选再冲突比被陨石击中概率还小了
但随之而来的问题是自己如何方便都按下Ctrl-Alt-Shift-F13四个键呢
直接的做法就是在QMK中录制这个组合的宏再把这个宏赋值到你方便的键上。
但这个做法就是牺牲一个方便的键这可是宝贵资源。
我的做法是当这个键正常按下松开时释放Ctrl-Alt-Shift-F13组合 如果按住不放着切换另一个键盘逻辑层。对应的键设置为LT(1,KCESC). 然后修改QMK源码,代码如下(位于keymap.c)
bool process_record_user(uint16_t keycode, keyrecord_t *record) {bool is_continue true;switch (keycode) {case LT(1,KC_ESC):if (record-tap.count record-event.pressed) {register_code16( LCTL(LALT(LSFT(KC_F13))) );is_continue false; // Return false to ignore further processing of key} else if (record-tap.count !record-event.pressed) {unregister_code16( LCTL(LALT(LSFT(KC_F13))) );is_continue false; // Return false to ignore further processing of key}break;}return is_continue;
}至此这个世界清静了很多 你的绑定只要你顺手就可以了不再有与他人冲突的问题!