新しいモードでプライマリモードキーバインディングを維持する方法は?

新しいモードでプライマリモードキーバインディングを維持する方法は?

私の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

        ...
}

ワークスペースの代わりにSkypeチャットを切り替えるには、Alt +数字を変更します。

ただし、Skypeモードでは、.i3 / configに設定されている他のキーバインディング(Alt + hjkl、dmenu、特に明るさ、音量、PrtScキーなど)は使用できなくなります。

デフォルトスキーマのすべてのbindsymsとsを別のスキーマにコピーしたくありません。これによりメンテナンスが不可能になります1。基本モードから別のモードにキーバインディングを「継承」する方法はありますか?bindcode

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に入れます。最後つまり、新しいモードで競合するキーバインディングがデフォルト値をオーバーライドすることを意味します。

全公開:十分に明確ではない場合は、これは私のツールです。

おすすめ記事