如何将默认模式键绑定保留在新模式中?

如何将默认模式键绑定保留在新模式中?

我的 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 键)。

我不想将默认模式中的每一个bindsyms 和bindcodes 复制到我的其他模式中,这将导致无法维护的混乱1。有什么方法可以将键绑定从默认模式“继承”到另一种模式吗?

1:嗯,Skype 模式的硬编码像素值已经混乱不堪,但我不想让它变得更糟。 ;)

答案1

很明显,没有“普通”i3 方法可以做到这一点,我创建了一个名为 i3bang 的小型预处理器这让我能够实现这一目标。

简单地

  1. 下载并设置 i3bang。

  2. 将所有键绑定包装在默认模式下,如下所示:

    !@<+default_keybindings
    bindsym ...
    >
    
  3. 现在,在您想要保留默认键绑定的模式末尾包含对该部分的引用:

    mode "skype" {
            bindsym $mod+!!1..9,0 exec xdotool mousemove 90 !<70+40*!!<0..9>>; \
                                  exec xdotool click 1
            ...
            !@default_keybindings
    }
    

    由于 i3 (有点不直观)使用第一的如果有多个绑定使用同一键,则发生对某个键的绑定,将引用放入 default_keybindings最后的意味着新模式中任何冲突的键绑定都将覆盖默认值。

全面披露:如果还不够清楚,这是我自己的工具。

相关内容