i3wm: ¿más de 10 espacios de trabajo con doble tecla modificadora?

11

Recientemente, comencé a usar i3wmy me enamoré de él. Sin embargo, una cosa me molesta: controlar más de 10 espacios de trabajo.

En mi configuración $mod+1para $mod+9cambiar entre los espacios de trabajo 1 a 9 (y $mod+0para 10), pero a veces 10 espacios de trabajo simplemente no son suficientes.

En este momento me acerco al espacio de trabajo 11 a 20 con $mod+mod1+1to $mod+mod1+0, es decir, golpear mod+alt+number. Por supuesto, esto funciona sin ningún problema, pero es bastante complicado cambiar los espacios de trabajo de esa manera, ya que las teclas no se presionan fácilmente. Además, mover aplicaciones entre espacios de trabajo 11 a 20 requiere mod+shift+alt+number-> feo.

En mis Vimenlaces (tengo muchos complementos) comencé a usar accesos directos de doble modificador, como modkey + rpara el Plugin 1 y modkey + modkey + rpara el Plugin 2. De esta manera puedo vincular cada tecla dos veces y presionar la tecla mod dos veces es fácil y rápido.

¿Puedo hacer algo similar en i3wm?

¿Cómo utiliza más de 10 espacios de trabajo i3wm? ¿Alguna otra solución?

daniel451
fuente
No sé qué tipo de distribución de teclado tiene, pero ¿podría usar algunas / todas las teclas a continuación y a la derecha de los números en la parte superior? es decir, $ mod + q es el espacio de trabajo 11, etc. Por supuesto, tendría que reasignar cualquiera de las teclas que están en uso.
airhuff
Sí, pero esto efectivamente reduce la cantidad de accesos directos disponibles para las i3acciones. Preferiblemente, me gustaría tener algo así como $mod + $mod + 1para el espacio de trabajo 11, de modo que una doble pulsación rápida de la tecla mod me permita ir directamente al espacio de trabajo 11-20 con la tecla numérica 1, 2, ..., 9, 0. En VimTengo este comportamiento: leader + rse asigna a otra acción que no sea leader + leader + r, por lo que puedo desencadenar diferentes acciones con la misma tecla de acceso rápido simplemente presionando la tecla líder una o dos veces.
daniel451

Respuestas:

14

i3 realmente no admite secuencias de teclas como vim . Cualquier enlace de teclas consiste en una sola tecla precedida por una lista opcional de Shift+Shiftmodificadores distintos (por lo que no ). Y todos los modificadores deben presionarse en el momento en que se presiona la tecla principal.

Dicho esto, hay dos formas principales de tener muchos espacios de trabajo sin tener que vincularlos a largas listas de modificadores:

1. Cree y acceda dinámicamente a espacios de trabajo con programas externos

No es necesario que defina un acceso directo para cada espacio de trabajo, simplemente puede crearlos sobre la marcha enviando un workspace NEW_WSa i3 , por ejemplo con el i3-msgprograma:

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

i3 también viene con el i3-inputcomando, que abre un pequeño campo de entrada y luego ejecuta un comando con la entrada dada como parámetro

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

Vincula estos dos comandos a atajos y puedes acceder a un número arbitrario de espacios de trabajo simplemente presionando el atajo y luego ingresando el nombre (o número) del espacio de trabajo que deseas. (Si solo trabaja con espacios de trabajo numerados, puede usar en workspace number %slugar de solo workspace %s)

2. Vincula estáticamente espacios de trabajo a atajos simples dentro de modos de vinculación de teclas

Alternativamente, para un enfoque más estático, puede usar modos en su configuración de i3 . Podría tener modos separados para enfocar y moverse a espacios de trabajo:

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

O podría tener enlaces separados para enfocar y moverse dentro de un solo 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

En ambos ejemplos, los comandos workspaceo moveestán encadenados mode "default", de modo que i3 vuelve automáticamente al mapa de enlace de teclas predeterminado después de cada comando.

Adaephon
fuente
1

Mi solución a esto es simplemente usar más teclas:

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
fuente