1. 外部プログラムを使用してワークスペースを動的に作成してアクセスします。

1. 外部プログラムを使用してワークスペースを動的に作成してアクセスします。

最近私はそれを使い始め、それとi3wm恋に落ちた。しかし、1つの面倒なことは、10以上のワークスペースを制御することです。

私の構成では、ワークスペース1から9(および10)を切り替えますが、$mod+1時には10のワークスペースでは不十分です。$mod+9$mod+0

現在私はクリックを介して$mod+mod1+1ワークスペース11〜20に達しています。もちろん、あまり問題はありませんが、このようにワークスペースを切り替えるのはキーを簡単に押すことができないのでかなり面倒です。また、ワークスペース11と20の間でアプリを移動するのに時間がかかります。 -> 見苦しいです。$mod+mod1+0mod+alt+numbermod+shift+alt+number

私のVimバインディング(プラグインがたくさんあります)では、私はmodkey + rプラグイン1やmodkey + modkey + rプラグイン2などの二重修飾子ショートカットを使い始めました。これにより、各キーを2回バインドでき、モードキーを2回押すのが簡単で迅速です。

似たようなことができますかi3wm

10以上のワークスペースをどのように活用しますかi3wm?他の解決策がありますか?

答え1

i3実際、このようなキーシーケンスをサポートしていませんウィム。すべてのキーバインディングは、単一のキーとその前のShift+Shift別の修飾子(したがってなし)のオプションのリストで構成されています。そして、すべての修飾キーは主キーと同時に押す必要があります。

つまり、長い修飾子のリストに縛らずに大きなワークスペースを持つことができる2つの主な方法があります。

1. 外部プログラムを使用してワークスペースを動的に作成してアクセスします。

各ワークスペースのショートカットを定義する必要はなく、転送して動的に作成できますworkspace NEW_WSi3たとえば、プログラムは次のようになりますi3-msg

i3-msg workspace NEW_WS
i3-msg move container to workspace NEW_WS

i3また、i3-input小さな入力フィールドを開き、与えられた入力を引数として使用してコマンドを実行するコマンドも付属しています。

i3-input -F 'workspace %s' -P 'go to workspace: '
i3-input -F 'move container to workspace %s' -P 'move to workspace: '

これら2つのコマンドをショートカットにバインドしたら、ショートカットを押して目的のワークスペースの名前(または番号)を入力するだけで、必要な数のワークスペースにアクセスできます。 (番号付きのワークスペースのみを使用する場合は、代わりにworkspace number %s使用する必要がありますworkspace %s

2.キーバインディングモードでワークスペースを簡単なショートカットに静的にバインドする

または、より静的なアプローチのために、次の方法でこれを実行できます。i3構成。別のモードを使用してワークスペースに集中して移動できます。

set $mode_workspace "goto_ws"
mode $mode_workspace {
    bindsym 1 workspace 1; mode "default"
    bindsym 2 workspace 2; mode "default"
    # […]
    bindsym a workspace a; mode "default"
    bindsym b workspace b; mode "default"
    # […]
    bindsym Escape mode "default"
}
bindsym $mod+w mode $mode_workspace

set $mode_move_to_workspace "moveto_ws"
mode $mode_move_to_workspace {
    bindsym 1 move container to workspace 1; mode "default"
    bindsym 2 move container to workspace 2; mode "default"
    # […]
    bindsym a move container to workspace a; mode "default"
    bindsym b move container to workspace b; mode "default"
    # […]
    bindsym Escape mode "default"
}
bindsym $mod+shift+w mode $mode_move_to_workspace

あるいは、シングルモードでフォーカスとシフトに別々のバインディングを使用することもできます。

set $mode_ws "workspaces"
mode $mode_ws {
    bindsym 1 workspace 1; mode "default"
    bindsym Shift+1 move container to workspace 1; mode "default"
    bindsym 2 workspace 2; mode "default"
    bindsym Shift+2 move container to workspace 2; mode "default"
    # […]
    bindsym a workspace a; mode "default"
    bindsym Shift+a move container to workspace a; mode "default"
    bindsym b workspace b; mode "default"
    bindsym Shift+b move container to workspace b; mode "default"
    # […]
    bindsym Escape mode "default"
}
bindsym $mod+shift+w mode $mode_move_to_workspace

どちらの例でも、workspaceorコマンドはmove次のようにmode "default"関連付けられています。i3各コマンドの後、自動的に主キーバインディングマッピングに戻ります。

答え2

私の解決策は、より多くのキーを使用することでした。

set $ws0 "0:`:www"
set $ws1 "1:1"
set $ws2 "2:2"
set $ws3 "3:3:fm"
set $ws4 "4:4"
set $ws5 "5:5"
set $ws6 "6:6:dev"
set $ws7 "7:7"
set $ws8 "8:8"
set $ws9 "9:9"
set $ws10 "10:0:music"
set $ws11 "11:-:jd"
set $ws12 "12:=:comm"
set $ws13 "13:B"
set $ws14 "14:H"
set $ws15 "15:E"
set $ws16 "16:I"
set $ws17 "17:D:upwork"


bindsym $mod+grave workspace $ws0
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10
bindsym $mod+minus workspace $ws11
bindsym $mod+equal workspace $ws12
bindsym $mod+BackSpace workspace $ws13
bindsym $mod+Home workspace $ws14
bindsym $mod+End workspace $ws15
bindsym $mod+Insert workspace $ws16
bindsym $mod+Delete workspace $ws17

for_window [class="Upwork"] move container to workspace $ws17
for_window [class="Spotify"] move container to workspace $ws10
for_window [class="Brave-browser"] move container to workspace $ws0
for_window [class="TelegramDesktop"] move container to workspace $ws12
for_window [class="jetbrains-pycharm"] move container to workspace $ws6
for_window [class="Caja"] move container to workspace $ws3
for_window [class="JDownloader"] move container to workspace $ws11

答え3

私の解決策はLucasの答えに基づいています。

# win principal, alt secondary
# set $mod Mod4
# set $mod2 Mod1
#
# # alt principal, win secondary
set $mod Mod1
set $mod2 Mod4

# switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
# Workspaces 11-20, with mod2
bindsym $mod2+1 workspace 11
bindsym $mod2+2 workspace 12
bindsym $mod2+3 workspace 13
bindsym $mod2+4 workspace 14
bindsym $mod2+5 workspace 15
bindsym $mod2+6 workspace 16
bindsym $mod2+7 workspace 17
bindsym $mod2+8 workspace 18
bindsym $mod2+9 workspace 19
bindsym $mod2+0 workspace 20

# move focused container to workspace, keeping focus
bindsym $mod+Shift+1 move workspace 1; workspace 1
bindsym $mod+Shift+2 move workspace 2; workspace 2
bindsym $mod+Shift+3 move workspace 3; workspace 3
bindsym $mod+Shift+4 move workspace 4; workspace 4
bindsym $mod+Shift+5 move workspace 5; workspace 5
bindsym $mod+Shift+6 move workspace 6; workspace 6
bindsym $mod+Shift+7 move workspace 7; workspace 7
bindsym $mod+Shift+8 move workspace 8; workspace 8
bindsym $mod+Shift+9 move workspace 9; workspace 9
bindsym $mod+Shift+0 move workspace 10; workspace 10

bindsym $mod2+Shift+1 move workspace 11; workspace 11
bindsym $mod2+Shift+2 move workspace 12; workspace 12
bindsym $mod2+Shift+3 move workspace 13; workspace 13
bindsym $mod2+Shift+4 move workspace 14; workspace 14
bindsym $mod2+Shift+5 move workspace 15; workspace 15
bindsym $mod2+Shift+6 move workspace 16; workspace 16
bindsym $mod2+Shift+7 move workspace 17; workspace 17
bindsym $mod2+Shift+8 move workspace 18; workspace 18
bindsym $mod2+Shift+9 move workspace 19; workspace 19
bindsym $mod2+Shift+0 move workspace 20; workspace 20

答え4

"toggle"変数を/tmpbindsym execほとんどのディストリビューションはRAMに保存されて/tmpいるため、tmpfs依然として使用速度はかなり高速です。

Mod+=各ワークスペース番号に 10 を追加する「ワークスペース修飾子」を追加しました。

Mod+-各ワークスペース番号から 10 を減算して「ワークスペース修飾子」を減らします。

通常Mod+を1押すとワークスペース1Mod+を押して=次に進みます。ワークスペース11

構成は次のとおりです。

#Increase workspace modifier
bindsym $mod+equal exec echo $(( `cat /tmp/workspace_modifier` + 1 )) > /tmp/workspace_modifier

#Decrease workspace modifier
bindsym $mod+minus exec n=$(( `cat /tmp/workspace_modifier` - 1 )) && echo `[ $n -le 0 ] && echo '' || echo $n` > /tmp/workspace_modifier

#Switch to workspace
bindsym $mod+0 exec i3-msg workspace number `cat /tmp/workspace_modifier`0
bindsym $mod+1 exec i3-msg workspace number `cat /tmp/workspace_modifier`1
bindsym $mod+2 exec i3-msg workspace number `cat /tmp/workspace_modifier`2
bindsym $mod+3 exec i3-msg workspace number `cat /tmp/workspace_modifier`3
bindsym $mod+4 exec i3-msg workspace number `cat /tmp/workspace_modifier`4
bindsym $mod+5 exec i3-msg workspace number `cat /tmp/workspace_modifier`5
bindsym $mod+6 exec i3-msg workspace number `cat /tmp/workspace_modifier`6
bindsym $mod+7 exec i3-msg workspace number `cat /tmp/workspace_modifier`7
bindsym $mod+8 exec i3-msg workspace number `cat /tmp/workspace_modifier`8
bindsym $mod+9 exec i3-msg workspace number `cat /tmp/workspace_modifier`9

#Move focused container to workspace
bindsym $mod+Shift+0 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`0
bindsym $mod+Shift+1 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`1
bindsym $mod+Shift+2 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`2
bindsym $mod+Shift+3 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`3
bindsym $mod+Shift+4 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`4
bindsym $mod+Shift+5 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`5
bindsym $mod+Shift+6 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`6
bindsym $mod+Shift+7 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`7
bindsym $mod+Shift+8 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`8
bindsym $mod+Shift+9 exec i3-msg move container to workspace number `cat /tmp/workspace_modifier`9

この構成では、Mod+が0次に移動しました。ワークスペース0変えるワークスペース10。これが重要な場合は、次のバインディングを使用できます。

bindsym $mod+0 exec n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` && i3-msg workspace number `echo "$w*10 + 10" | bc`
bindsym $mod+Shift+0 exec n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` && i3-msg move container to workspace number `echo "$w*10 + 10" | bc`

ワークスペース名の保存は、i3 config が変数を処理する方法により複雑です。 exec コマンド環境に変数を注入せずに直接置換するため、exec コマンドで値を再宣言しないと動的に値を取得することはできません。これはすぐに混乱する可能性があります。

set $ws1 "1: one"
set $ws2 "2: two"
set $ws1 "11: eleven"
set $ws2 "12: twelve"

bindsym $mod+Shift+1 exec key=1 ws1=$ws1 ws2=$ws2 ws11=$ws11 ws12=$ws12 && i=`cat /tmp/workspace_modifier` && dynamic=ws${i}${key} && text=${!dynamic} && workspace=$(echo `[ "$text" ] && echo "$text" || echo ${i}${key}` ) && i3-msg move container to workspace number $workspace

setこれは、execコマンドでそのコマンドで指定されたワークスペースのみを宣言する限り機能します。たとえば、set $ws1 "1: text"定義したが設定しなかった$ws11後にws11=$ws11execコマンドに含めると、i3 configはで一致するようにws11=$ws11拡張されます。そうでなければうまくいきます。ws11="1: one"1$ws1$ws11

Modワークスペース名で保持+0設定を有効にするにはワークスペース10、次のバインディングシンボルを使用してください。

bindsym $mod+0 exec key=0 ws1=$ws1 ws2=$ws2 ws3=$ws3 ws4=$ws4 ws5=$ws5 ws6=$ws6 ws7=$ws7 ws8=$ws8 ws9=$ws9 ws10=$ws10 && n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` i=`echo "$w*10 + 10" | bc` && dynamic=ws${i} && text=${!dynamic} && workspace=$(echo `[ "$text" ] && echo "$text" || echo ${i}` ) && i3-msg workspace number $workspace
bindsym $mod+Shift+0 exec key=0 ws0=$ws0 ws1=$ws1 ws2=$ws2 ws3=$ws3 ws4=$ws4 ws5=$ws5 ws6=$ws6 ws7=$ws7 ws8=$ws8 ws9=$ws9 ws10=$ws10 && n=`cat /tmp/workspace_modifier` w=`[ $n ] && echo $n || echo 0` i=`echo "$w*10 + 10" | bc` && dynamic=ws${i} && text=${!dynamic} && workspace=$(echo `[ "$text" ] && echo "$text" || echo ${i}` ) && i3-msg move container to workspace number "$workspace"

関連情報