我的 i3 配置中有几种“较小”模式,其中只有一些用于特定任务的键绑定。例如Skype模式:
mode "skype" {
bindsym $mod+1 exec xdotool mousemove 90 70; exec xdotool click 1
bindsym $mod+2 exec xdotool mousemove 90 110; exec xdotool click 1
bindsym $mod+3 exec xdotool mousemove 90 150; exec xdotool click 1
bindsym $mod+4 exec xdotool mousemove 90 190; exec xdotool click 1
bindsym $mod+5 exec xdotool mousemove 90 230; exec xdotool click 1
bindsym $mod+6 exec xdotool mousemove 90 270; exec xdotool click 1
bindsym $mod+7 exec xdotool mousemove 90 310; exec xdotool click 1
bindsym $mod+8 exec xdotool mousemove 90 350; exec xdotool click 1
bindsym $mod+9 exec xdotool mousemove 90 390; exec xdotool click 1
bindsym $mod+0 exec xdotool mousemove 90 430; exec xdotool click 1
...
}
它更改 Alt+数字以切换 Skype 聊天而不是工作区。
但是,在 Skype 模式下,我无法再使用在 .i3/config 中设置的其他键绑定(例如 Alt+hjkl、dmenu,尤其是亮度、音量和 PrtSc 键)。
我不想将默认模式中的每一个bindsym
s 和bindcode
s 复制到我的其他模式中,这将导致无法维护的混乱1。有什么方法可以将键绑定从默认模式“继承”到另一种模式吗?
1:嗯,Skype 模式的硬编码像素值已经是混乱不堪,但我不想让它变得更糟。 ;)
答案1
很明显,没有“普通”i3 方法可以做到这一点,我创建了一个名为 i3bang 的小型预处理器这让我能够实现这一目标。
简单地
下载并设置 i3bang。
将所有键绑定包装在默认模式下,如下所示:
!@<+default_keybindings bindsym ... >
现在,在您想要保留默认键绑定的模式末尾包含对该部分的引用:
mode "skype" { bindsym $mod+!!1..9,0 exec xdotool mousemove 90 !<70+40*!!<0..9>>; \ exec xdotool click 1 ... !@default_keybindings }
由于 i3 (有点不直观)使用第一的如果有多个绑定使用同一键,则发生对某个键的绑定,将引用放入 default_keybindings最后的意味着新模式中任何冲突的键绑定都将覆盖默认值。
全面披露:如果还不够清楚,这是我自己的工具。