Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
229
Help us understand the problem. What is going on with this article?
@psyashes

Mac用タイル型ウィンドウマネージャーのyabaiがヤバイ

WM(Window Manager)とは

Linuxを普段使いしている人ならおなじみのWM(Window Manger)。
キーボードだけでモニター内のアプリのウィンドウを操作できるツールです。
有名なものだとi3xmonadがあります。
この二つをは基本的にLinuxのみで動くもので、LinuxからMacに移行する人や、両方とも使う人にはMac用の代替品が欲しくなります。
その一つがyabaiです。

yabaiとは

yabaiはi3ライクにウィンドウ操作ができるWMです。
yabai.gif

キーボードのみでウィンドウの切り替えやサイズ・レイアウトの変更ができます。

yabaiのセットアップ

yabaiをbrewでインストール

brew install koekeishiya/formulae/yabai

yabai自体は yabai -m window --focus recentなどのコマンドでウィンドウを操作するもので、キーボードで操作するには、skhdというショートカットツールが必要になります。

skhdをbrewでインストール

brew install koekeishiya/formulae/skhd

yabaiとskhdには、ショートカットを定義するそれぞれの設定ファイルをルートディレクトリに置く必要があります。
基本的には、yabaiの開発者の設定ファイルを参考にして改良しました。

.yabairc
#!/usr/bin/env sh

# global settings
yabai -m config mouse_follows_focus          on
yabai -m config focus_follows_mouse          autoraise
yabai -m config window_placement             second_child
yabai -m config window_topmost               on
yabai -m config window_shadow                off
yabai -m config window_opacity               on
yabai -m config window_opacity_duration      0.0
yabai -m config active_window_opacity        1.0
yabai -m config normal_window_opacity        0.95
yabai -m config window_border                on
yabai -m config window_border_width          6
yabai -m config active_window_border_color   0xff775759
yabai -m config normal_window_border_color   0xff555555
yabai -m config insert_feedback_color        0xaad75f5f
yabai -m config split_ratio                  0.50
yabai -m config auto_balance                 on
yabai -m config mouse_modifier               fn
yabai -m config mouse_action1                move
yabai -m config mouse_action2                resize

# general space settings
yabai -m config layout                       bsp
yabai -m config top_padding                  12
yabai -m config bottom_padding               12
yabai -m config left_padding                 12
yabai -m config right_padding                12
yabai -m config window_gap                   06

# restore position of floating windows when they are manually unfloated
# ~/Scripts/yabai_restore.sh

echo "yabai configuration loaded.."
.skhdrc
# focus window
alt - x : yabai -m window --focus recent
alt - h : yabai -m window --focus west
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - l : yabai -m window --focus east
alt - z : yabai -m window --focus stack.prev
alt - c : yabai -m window --focus stack.next

# swap window
shift + alt - x : yabai -m window --swap recent
shift + alt - h : yabai -m window --swap west
shift + alt - j : yabai -m window --swap south
shift + alt - k : yabai -m window --swap north
shift + alt - l : yabai -m window --swap east

# move window
shift + cmd - h : yabai -m window --warp west
shift + cmd - j : yabai -m window --warp south
shift + cmd - k : yabai -m window --warp north
shift + cmd - l : yabai -m window --warp east

# move window
shift + ctrl - a : yabai -m window --move rel:-20:0
shift + ctrl - s : yabai -m window --move rel:0:20
shift + ctrl - w : yabai -m window --move rel:0:-20
shift + ctrl - d : yabai -m window --move rel:20:0

# increase window size
shift + alt - a : yabai -m window --resize left:-20:0
shift + alt - s : yabai -m window --resize bottom:0:20
shift + alt - w : yabai -m window --resize top:0:-20
shift + alt - d : yabai -m window --resize right:20:0

# decrease window size
shift + cmd - a : yabai -m window --resize left:20:0
shift + cmd - s : yabai -m window --resize bottom:0:-20
shift + cmd - w : yabai -m window --resize top:0:20
shift + cmd - d : yabai -m window --resize right:-20:0

# rotate tree
alt - r : yabai -m space --rotate 90

# mirror tree y-axis
alt - y : yabai -m space --mirror y-axis

# mirror tree x-axis
alt - x : yabai -m space --mirror x-axis

# toggle desktop offset
alt - a : yabai -m space --toggle padding && yabai -m space --toggle gap

# toggle window fullscreen zoom
alt - f : yabai -m window --toggle zoom-fullscreen

# toggle window native fullscreen
shift + alt - f : yabai -m window --toggle native-fullscreen

# toggle window split type
alt - e : yabai -m window --toggle split

# float / unfloat window and restore position
# alt - t : yabai -m window --toggle float && /tmp/yabai-restore/$(yabai -m query --windows --window | jq -re '.id').restore 2>/dev/null || true
alt - t : yabai -m window --toggle float && yabai -m window --grid 4:4:1:1:2:2

また、yabaiとskhdを有効化するには、[設定]→[セキュリティとプライバシー]→[プライバシー]→[アクセシビリティ]でコンピュータの制御の権限を有効にする必要があります。

スクリーンショット 2020-09-26 15.30.37.png

権限を有効化できたら、serviceとして起動します。

brew services start skhd
brew services start yabai

これで既存のウィンドウが自動で綺麗なタイル型に配置され、.skhdrcで設定したショートカットでウィンドウを操作できます。

デモ

上記のショートカット設定で、実際にウィンドウを操作してみます。

ウィンドウの移動

alt + hjkl(vimと同じキーバインドの上下左右)

move_window2.gif

ウィンドウの切り替え

shift + alt + hjkl

swap_window.gif

ウィンドウサイズを大きくする

shift + alt + aswd

yabai_increase.gif

ウィンドウサイズを小さくする

shift + command + aswd

yabai_decrease.gif

ウィンドウを画面の中心に配置する

alt + t

yabai_senter.gif

.cf

https://github.com/koekeishiya/yabai
https://github.com/koekeishiya/dotfiles/blob/master/skhd/skhdrc

229
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
229
Help us understand the problem. What is going on with this article?