i3wm: więcej niż 10 obszarów roboczych z podwójnym klawiszem modyfikatora?

11

Ostatnio zacząłem go używać i3wmi zakochałem się w nim. Niepokoi mnie jednak jedno: kontrolowanie ponad 10 obszarów roboczych.

W moim config $mod+1do $mod+9łączników między obszarami roboczymi 1 do 9 (i $mod+0do 10), ale czasami 10 obszarów roboczych po prostu nie są wystarczające.

W tej chwili dotrzeć do przestrzeni roboczej od 11 do 20 z $mod+mod1+1celu $mod+mod1+0, czyli uderzenia mod+alt+number. Oczywiście działa to bez żadnych problemów, ale zmiana obszarów roboczych jest dość kłopotliwa, ponieważ klawisze nie są łatwo uderzane. Ponadto przenoszenie aplikacji między obszarami roboczymi od 11 do 20 wymaga mod+shift+alt+number-> brzydkich.

W swoich Vimpowiązaniach (mam wiele wtyczek) zacząłem używać podwójnych skrótów modyfikujących, jak modkey + rdla wtyczki 1 i modkey + modkey + rwtyczki 2. W ten sposób mogę przypisać każdy klawisz dwa razy, a dwukrotne naciśnięcie klawisza mod jest łatwe i szybkie.

Czy mogę zrobić coś podobnego i3wm?

Jak korzystać z ponad 10 obszarów roboczych i3wm? Jakieś inne rozwiązania?

daniel451
źródło
Nie wiem, jaki masz układ klawiatury, ale czy możesz użyć niektórych / wszystkich klawiszy poniżej i po prawej stronie liczb u góry? tzn. $ mod + q jest obszarem roboczym 11 itd. Oczywiście musiałbyś ponownie przypisać dowolny z używanych kluczy.
airhuff
Tak, ale to skutecznie zmniejsza liczbę skrótów dostępnych dla i3akcji. Najlepiej byłoby mieć coś takiego jak $mod + $mod + 1dla obszaru roboczego 11, aby szybkie podwójne naciśnięcie klawisza mod bezpośrednio umożliwiło mi przejście do obszaru roboczego 11-20 z klawiszami numerycznymi 1, 2, ..., 9, 0. W VimMam takie zachowanie: leader + rjest mapowane na inną akcję niż leader + leader + r, dlatego mogę wywoływać różne akcje za pomocą tego samego skrótu, naciskając tylko raz klawisz lidera raz lub dwa razy.
daniel451

Odpowiedzi:

14

i3 tak naprawdę nie obsługuje kluczowych sekwencji, takich jak vim . Każde powiązanie klucza składa się z jednego klucza poprzedzonego opcjonalną listą różnych (więc nie Shift+Shift) modyfikatorów. I wszystkie modyfikatory należy nacisnąć w momencie naciśnięcia klawisza głównego.

Biorąc to pod uwagę, istnieją dwa główne sposoby posiadania wielu obszarów roboczych bez konieczności wiązania ich z długimi listami modyfikatorów:

1. Dynamicznie twórz i uzyskuj dostęp do obszarów roboczych za pomocą programów zewnętrznych

Nie musisz definiować skrótu dla każdego obszaru roboczego, możesz po prostu utworzyć je w locie, wysyłając workspace NEW_WSdo i3 , na przykład za pomocą i3-msgprogramu:

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

i3 zawiera również i3-inputpolecenie, które otwiera małe pole wprowadzania, a następnie uruchamia polecenie z podanym wejściem jako parametrem

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

Powiąż te dwa polecenia ze skrótami, aby uzyskać dostęp do dowolnej liczby obszarów roboczych, po prostu naciskając skrót, a następnie wprowadzając nazwę (lub numer) żądanego obszaru roboczego. (Jeśli pracujesz tylko z numerowanymi obszarami roboczymi, możesz chcieć użyć workspace number %szamiast po prostu workspace %s)

2. Wiąż statycznie obszary robocze do prostych skrótów w trybach łączenia klawiszy

Alternatywnie, dla bardziej statycznego podejścia, możesz użyć trybów w konfiguracji i3 . Możesz mieć osobne tryby ustawiania ostrości i przenoszenia do obszarów roboczych:

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

Lub możesz mieć osobne powiązania do ustawiania ostrości i poruszania się w jednym trybie:

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

W obu przykładach polecenia workspacelub movesą połączone łańcuchem mode "default", dzięki czemu i3 automatycznie powraca do domyślnej mapy powiązań klawiszy po każdym poleceniu.

Adaefon
źródło
1

Moim rozwiązaniem jest po prostu użycie większej liczby kluczy:

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
Lukas Elsner
źródło