All Installations

Unix Porn 1 2 3 4 5

やばいですね!
yabai desu ne!

yabai

preface

曾经自己也是一个层叠式窗口的使用者,在一个macOS的桌面开很多程序,每次切换的时候 <c-tab> 或是点击 dock 栏,要么用 Spootlight Search 切换。配合一些可以左右分屏 left half first two thirds center three fourths 的软件也还算便捷,但似乎总是不那么愉快。不断地调整窗口的大小,移动窗口的位置,不断地选择切换程序,一次一次一次又一次,终于感到了一丝厌烦。开始思考平铺窗口,为什么不呢?

在 Windows 下尚且可以利用 AutoHotKey 之类进行Hyper + 左键窗口任意位置拖动,Hyper + 右键拖动改变大小。但 Mac 带用鼠标的情况比较少,放弃了这种方式。

以上种种让我最终决定完全切换到 bsp 类的窗口管理器,从繁杂的小事情中解脱出来吧啊啊啊啊。
自己学习使用 yabai 并不是一蹴而就。自己早先尝试过一次,但又切换回了 macOS 默认的浮动窗口。原因莫过于要自己写很多配置,或者发现命令无效,需要关闭 SIP 才可以。最终阅读 yabai 文档的麻烦 < 层叠窗口的折磨,于是开始了彻底地切换到 WM(Windows Manager)。

看到网上很多的和 yabai 有关的小教程都是安装和最简单的使用,自己决定还是把自己额外从 yabai wiki 中看到的一些记录一下。如何你看到了这篇文章,那么我强烈建议通过阅读上面列出的 yabai wiki 来学习使用。以下仅为个人的自娱自乐

首先列出的所有的软件都是什么?
yabai 是适用于 macOS 的窗口管理器本体,快速上手只需要简单学习一下: yabai 的安装、配置、命令即可; skhd 是一个快捷键工具,用于把快捷键绑定到 yabai 的命令,比如 alt - 1 : yabai -m space --focus 1alt + 1 快捷键设置为切换到第一个虚拟桌面; 至此已经足够。如果更多的想要设置一个 status-bar(用来查看所有的spaces也就是虚拟桌面),可以继续选择第三方状态栏。我的选择是 übersicht 中的 simplebar widget(widget就是小组件的意思啦) 实现效果如下,左侧可以看到当前的处于哪一个桌面,这对于经常开7~9个桌面的我来说很有帮助。

quickstart

yabai install
https://github.com/koekeishiya/yabai/wiki/Installing-yabai-(latest-release)

skhd install
https://githubcom/koekeishiya/skhd

tutorials
TheNiceBoy video
SSpai post

little things

window resize detail

"cannot locate a bsp node fence" error

+---------+
| A  |  C |
|----|----|
| B  |  D |
+---------+

E.g:
# operations that work on window A

# move right border towards C (increase size of A)
yabai -m window --resize right:20:0
# move right border away from C (decrease size of A)
yabai -m window --resize right:-20:0

# move left border of A (there is no border, bsp fence message will be reported)
yabai -m window --resize left:20:0
# move left border of A (there is no border, bsp fence message will be reported)
yabai -m window --resize left:-20:0

# the same set of restrictions apply to window C (although mirrored).
# the same set of restrictions apply to the y-axis, although rotated

regex rule filter

https://github.com/koekeishiya/yabai/issues/885
https://github.com/koekeishiya/yabai/issues/1687

# IntelliJ
JB_Apps='^(CLion|PyCharm|IntelliJ IDEA)$'
yabai -m rule --add app="${JB_Apps}" manage=off
# If `Open last project when launch` is checked, add this rule. And make sure `always show project path` is also checked.
# yabai -m rule --add app="${JB_Apps}" title=".*\[.*\].*" manage=on
yabai -m rule --add app="${JB_Apps}" title="^$"  manage=on

#wechat
yabai -m rule --add app="^WeChat$" manage=off
yabai -m rule --add app="^WeChat$" title='WeChat \((.*)\)' manage=on

# qq image
yabai -m rule --add app='QQ' title='图片查看器' manage=off

# others
yabai -m rule --add app="System Settings" manage=off
yabai -m rule --add app="^Bartender" manage=off
yabai -m rule --add app="Chrome" title="^DevTools" manage=off

很多时候软件有一些弹出窗口,而我们并不希望这些窗口也被平铺。比如QQ、微信查看一张图片,IDEA 一些设置窗口。那么我们可以 yabai -m rule -add app="...." title="...." manage=off/on app和title里面使用正则匹配,那如何知道我们使用的apps titles 呢,可以使用 yabai query commands e.g. yabai -m query --windows

opacity

yabai -m config
    window_opacity_duration      0.0            \
    active_window_opacity        0.90           \
    normal_window_opacity        0.95           \
    window_opacity               on

我发现透明度好好看,设置几个好看的壁纸相当于给所有窗口加背景了!而且可以区分 focus windows