i3wm: mais de 10 áreas de trabalho com chave modificadora dupla?

11

Recentemente, comecei a usar i3wme me apaixonei por ela. No entanto, uma coisa me incomoda: controlar mais de 10 áreas de trabalho.

Na minha configuração $mod+1para $mod+9alterna entre os espaços de trabalho de 1 a 9 (e $mod+0para 10), mas, por vezes, 10 espaços de trabalho simplesmente não são suficientes.

No momento, chego ao espaço de trabalho 11 a 20 com $mod+mod1+1to $mod+mod1+0, ou seja, pressionando mod+alt+number. É claro que isso funciona sem problemas, mas é um incômodo trocar de espaço de trabalho assim, pois as teclas não são pressionadas facilmente. Além disso, mover aplicativos entre os espaços de trabalho 11 a 20 exige mod+shift+alt+number-> feio.

Nas minhas Vimligações (eu tenho muitos plugins), comecei a usar atalhos de modificador duplo, como modkey + rno Plugin 1 e modkey + modkey + rno Plugin 2. Dessa forma, eu posso ligar cada tecla duas vezes e pressionar a tecla mod duas vezes é fácil e rápido.

Posso fazer algo semelhante i3wm?

Como você utiliza mais de 10 áreas de trabalho i3wm? Alguma outra solução?

daniel451
fonte
Não sei que tipo de layout de teclado você possui, mas você poderia usar algumas / todas as teclas abaixo e à direita dos números na parte superior? ou seja, $ mod + q é o espaço de trabalho 11 etc. É claro que você teria que reatribuir qualquer uma dessas chaves que estão em uso.
airhuff
Sim, mas isso reduz efetivamente o número de atalhos disponíveis para i3ações. De preferência, gostaria de ter algo parecido $mod + $mod + 1com o espaço de trabalho 11, para que um pressionamento rápido rápido da tecla mod me permita ir para o espaço de trabalho 11-20 com a tecla numérica 1, 2, ..., 9, 0. VimEu tenho esse comportamento: leader + restá mapeado para outra ação que leader + leader + r, portanto, posso desencadear ações diferentes com a mesma tecla de acesso, pressionando a tecla líder uma ou duas vezes.
precisa saber é o seguinte

Respostas:

14

O i3 realmente não suporta sequências de teclas como o vim . Qualquer ligação de chave consiste em uma única chave precedida por uma lista opcional de Shift+Shiftmodificadores distintos (portanto, não ). E todos os modificadores precisam ser pressionados no momento em que a tecla principal é pressionada.

Dito isto, existem duas maneiras principais de ter muitos espaços de trabalho sem precisar vinculá-los a longas listas de modificadores:

1. Crie e acesse dinamicamente áreas de trabalho com programas externos

Não é necessário definir um atalho para cada espaço de trabalho; basta criá-los instantaneamente enviando um workspace NEW_WSpara o i3 , por exemplo, com o i3-msgprograma:

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

O i3 também vem com o i3-inputcomando, que abre um pequeno campo de entrada e executa um comando com a entrada fornecida como parâmetro

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

Vincule esses dois comandos aos atalhos e você poderá acessar um número arbitrário de áreas de trabalho pressionando o atalho e inserindo o nome (ou número) da área de trabalho desejada. (Se você trabalha apenas com áreas de trabalho numeradas, pode usar em workspace number %svez de apenas workspace %s)

2. Ligar estaticamente os espaços de trabalho a Atalhos simples nos modos de ligação de teclas

Como alternativa, para uma abordagem mais estática, você pode usar modos na configuração do i3 . Você pode ter modos separados para focar e mover para áreas de trabalho:

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

Ou você pode ter ligações separadas para focar e mover-se em um único modo:

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

Nos dois exemplos, os comandos workspaceou movesão encadeados mode "default", para que o i3 retorne automaticamente ao mapa de ligação de teclas padrão após cada comando.

Adaephon
fonte
1

Minha solução para isso é apenas usar mais chaves:

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
fonte