Yabai : gestionnaire de fenêtres en mosaïque avec prise en charge des espaces
https://github.com/koekeishiya/yabai/wiki#comparison-with-other-window-managers
Exigences de Yabai
- "La protection de l'intégrité du système (SIP) doit être désactivée.
- "Les affichages ont des espaces séparés" doit être activé
Note
- Yabai vous permet de passer à un autre espace sans animation (génial)
Désactivez les mappings de contrôle de mission et utilisez ceci ~/.skhdrc
avec des mappings comme le souhaite le PO (utilisation de jq
par exemple, installer avec $ brew install jq
)
ctrl - left : index=`yabai -m query --spaces --space | jq '.index'` &&\
if (($index != 1 && $index != 6 )) then\
new=$((index-1)); \
other=$(((new+4)%10+1));\
yabai -m space --focus "${other}"; yabai -m space --focus "${new}";\
fi
ctrl - right : index=`yabai -m query --spaces --space | jq '.index'` &&\
if (($index != 5 && $index != 10 )) then\
new=$((index+1)); \
other=$(((index+4)%10+1));\
yabai -m space --focus "${other}"; yabai -m space --focus "${new}";\
fi
# ctrl+1-5:
ctrl - 1 : index=`yabai -m query --displays --display | jq '.index'` &&\
if (($index == 1)) then\
yabai -m space --focus 6; yabai -m space --focus 1;\
else \
yabai -m space --focus 1; yabai -m space --focus 6;\
fi
ctrl - 2 : index=`yabai -m query --displays --display | jq '.index'` &&\
if (($index == 1)) then\
yabai -m space --focus 7; yabai -m space --focus 2;\
else \
yabai -m space --focus 2; yabai -m space --focus 7;\
fi
ctrl - 3 : index=`yabai -m query --displays --display | jq '.index'` &&\
if (($index == 1)) then\
yabai -m space --focus 8; yabai -m space --focus 3;\
else \
yabai -m space --focus 3; yabai -m space --focus 8;\
fi
ctrl - 4 : index=`yabai -m query --displays --display | jq '.index'` &&\
if (($index == 1)) then\
yabai -m space --focus 9; yabai -m space --focus 4;\
else \
yabai -m space --focus 4; yabai -m space --focus 9;\
fi
ctrl - 5 : index=`yabai -m query --displays --display | jq '.index'` &&\
if (($index == 1)) then\
yabai -m space --focus 10; yabai -m space --focus 5;\
else \
yabai -m space --focus 5; yabai -m space --focus 10;\
fi
Ajout : Signal Yabai space_changed
Lorsque vous cliquez dans le dock sur une application non visible, seul change l'affichage qui comporte l'espace avec l'application souhaitée. Vous pouvez utiliser le signal Yabai space_changed
de réagir à tout changement d'espace pour modifier également l'espace de l'autre écran :
# file ~/.config/yabai/yabairc
yabai -m signal --add event=space_changed action="~/.config/yabai/maintain_paired_spaces.sh"
#!/usr/bin/env sh
# file: ~/.config/yabai/maintain_paired_spaces.sh
# Keep two displays with spaces [1-5] and [6-12] in sync
#
# yabai signal 'space_changed'
# Passes two arguments $YABAI_SPACE_ID and $YABAI_RECENT_SPACE_ID
# Note $YABAI_SPACE_ID is not the same as the mission control index.
# Translate YABAI_SPACE_ID to mission control index as following
new=$(yabai -m query --spaces | jq ".[] | select(.id == $YABAI_SPACE_ID) | .index")
# modulo arithmetic
other=$(((new+4)%10+1))
# Check if already visible
visible=$(yabai -m query --spaces | jq ".[] | select(.visible == 1 and .index == $other)")
if [ -z "$visible" ]; then
yabai -m space --focus "${other}"
display=$(yabai -m query --spaces --space $other | jq ".display")
fi
Notez qu'il y a un petit délai.
Désactiver le carrelage
Si vous n'êtes pas intéressé par un gestionnaire de fenêtres en mosaïque mais que vous souhaitez utiliser ces mappages, vous pouvez choisir le mode de mise en page "float" dans le champ ~/.config/yabai/yabairc
:
yabai -m config layout float
Alternatives avec des problèmes plus importants
Alternative non testée
Bspwm (linux)
Une question sur github pour le gestionnaire de fenêtres en mosaïque Linux bspwm peut être trouvée. aquí avec un suggestion de cartographie de l'auteur de bspwm pour bspwm (l'idée est la même que cette réponse).