Mac窗口管理方案
0x00 前言
Mac和Windows的桌面、窗口的分布和管理方案有所不同,并且平时工作会开启很多软件窗口,在没有窗口管理之前,大多都重叠在一起,或者最小化在Dock栏,使用上有诸多不便。
后面在网上不断的查询和探索,有了下面的窗口管理方案,目前我的系统是Macos 13.1 (22C65),软件方案是 yabai + skhd + spacebar + BetterAndBetter + Contexts + 台前调度。
0x01 思路
Yabai: https://github.com/koekeishiya/yabai
Skid: https://github.com/koekeishiya/skhd
Spacebar: https://github.com/cmacrae/spacebar
BetterAndBetter: https://www.better365.cn/bab2.html
Contexts: https://contexts.co/
Yabai 是一个窗口管理实用程序,旨在作为 MacOS 内置窗口管理器的扩展,可以自动排列打开的窗口。所以通过yabai可以实现窗口自动化管理。
Skhd 是一个针对 macOS 的简单热键守护进程,侧重于响应性和性能,可以和yabai结合起来,通过按键对窗口进行调整,比如切换桌面,调整排列方向。
(可选)Spacebar 是macOS 的最小状态栏,可以显示当前在哪个桌面,主要是结合以上两个软件,因为有的时候桌面太多,但是系统本身查看桌面步骤有点儿多。
(可选)BetterAndBetter 是一款功能很丰富的软件,可以对触控板、鼠标、键盘等进行自定义设置,我这里主要是用来做窗口调整,可以选择其他专门用来调整窗口大小的软件,比如Moom等,但是最好可以支持自定义窗口布局的,比如说上下左右的间隙。
(可选)Contexts 是一个应用程序窗口切换软件,我这里主要是看重他的侧边栏功能,可以在旁边放一个侧边栏,快速进行切换,因为窗口多的时候,系统本身的窗口切换功能相对比较逊色。
(可选)台前调度是Macos 13的系统功能,这个主要是增大了单个桌面的显示量,如果不习惯这个功能其实可以pass掉,这个功能实际上和yabai的风格有些冲突,我这边也只是尝鲜使用。
0x02 安装和配置
1 yabai
安装参考:https://sspai.com/post/73620
安装brew
/bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
用brew安装yabai
brew install koekeishiya/formulae/yabai
安装脚本插件
sudo yabai --load-sa
配置root权限和开机自启
- 官方写的是macOS Big Sur 或 Monterey 系统需要,感觉macOS 13应该也是需要的
- 编辑文件
sudo visudo -f /private/etc/sudoers.d/yabai
- 在打开的文件中添加以下内容
<user> ALL = (root) NOPASSWD: <path> --load-sa
<>
内的user
和path
可以通过whoami
和which yabai
命令获取,一般brew安装的路径默认都是/usr/local/bin/yabai
- 示例:
soft98 ALL = (root) NOPASSWD: /usr/local/bin/yabai --load-sa
配置文档:https://github.com/koekeishiya/yabai/blob/master/doc/yabai.asciidoc
- 编写配置文件
vi ~/.yabairc
#!/usr/bin/env sh
sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
#SPACEBAR_HEIGHT=$(spacebar -m config height)
yabai -m config external_bar all:0:26
# 全局配置
yabai -m config mouse_follows_focus off
yabai -m config focus_follows_mouse off
yabai -m config window_origin_display default
yabai -m config window_placement second_child
yabai -m config window_topmost off
yabai -m config window_shadow on
yabai -m config window_opacity off
yabai -m config active_window_opacity 1.0
yabai -m config normal_window_opacity 0.90
yabai -m config window_border off
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 0xffd75f5f
yabai -m config split_ratio 0.50
yabai -m config auto_balance off
yabai -m config mouse_modifier fn
yabai -m config mouse_action1 move
yabai -m config mouse_action2 resize
yabai -m config mouse_drop_action swap
# space 配置
yabai -m config layout bsp
yabai -m config top_padding 15
yabai -m config bottom_padding 15
yabai -m config left_padding 15
yabai -m config right_padding 15
yabai -m config window_gap 15
# 忽略的 app
yabai -m rule --add app="^System Preferences$" manage=off
yabai -m rule --add app="^系统偏好设置$" manage=off
yabai -m rule --add app="^系统设置$" manage=off
yabai -m rule --add app="^Dock$" manage=off
yabai -m rule --add app="^Dock\ Helper$" manage=off
yabai -m rule --add app="^Dock\ Extra$" manage=off
yabai -m rule --add app="^程序坞$" manage=off
yabai -m rule --add app="^System Information$" sticky=on layer=above manage=off
yabai -m rule --add app="^系统信息$" sticky=on layer=above manage=off
yabai -m rule --add app="^系统报告$" sticky=on layer=above manage=off
# yabai -m rule --add app="^Finder$" sticky=on layer=above manage=off
# yabai -m rule --add app="^访达$" sticky=on layer=above manage=off
yabai -m rule --add app="^Archive Utility$" manage=off
yabai -m rule --add app="^Logi Options+$" manage=off
yabai -m rule --add app="^Alfred Preferences$" manage=off
yabai -m rule --add app="^WeChat$" title!="微信\ \(聊天\)|登录" manage=off
yabai -m rule --add app="^微信$" title!="微信\ \(聊天\)|登录" manage=off
yabai -m rule --add app="^Parallels Desktop$" title="配置" manage=off
yabai -m rule --add app="^FortiClient$" title="^正在连接VPN" manage=off
#yabai -m rule --add app="^钉钉$" title!="钉钉" manage=off
#yabai -m rule --add title="^Sidebar$" manage=off border=off
yabai -m rule --add app="^Contexts$" sticky=on layer=above manage=off border=off
yabai -m rule --add app="^BetterAndBetter$" manage=off border=off
yabai -m rule --add app="^AutoSwitchInput$" manage=off border=off
yabai -m rule --add app="^自动切换输入法$" manage=off border=off
- 配置文件增加可执行权限
chmod +x ~/.yabairc
- 重启服务
brew services restart yabai
2 skhd
- 安装skhd
brew install koekeishiya/formulae/skhd
- 编写配置文件
vi ~/.skhdrc
# 窗口聚焦
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
# 交换窗口
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
# 移动窗口
shift + alt + ctrl - h : yabai -m window --warp west
shift + alt + ctrl - h : yabai -m window --warp south
shift + alt + ctrl - h : yabai -m window --warp north
shift + alt + ctrl - h : yabai -m window --warp east
# 旋转窗口布局
alt - r : yabai -m space --rotate 90
# 全屏
alt -f : yabai -m window --toggle zoom-fullscreen
# 设置/取消窗口 space
alt - g : yabai -m space --toggle padding; yabai -m space --toggle gap
# 挂起窗口至屏幕中央/取消挂起窗口
alt - t : yabai -m window --toggle float;\
yabai -m window --grid 4:4:1:1:2:2
# 修改窗口切分方式
alt - e : yabai -m window --toggle split
# 重置窗口布局
shift + alt - 0 : yabai -m space --balance
# 移动窗口至特定桌面
shift + alt - 1 : yabai -m window --space 1; yabai -m space --focus 1
shift + alt - 2 : yabai -m window --space 2; yabai -m space --focus 2
shift + alt - 3 : yabai -m window --space 3; yabai -m space --focus 3
shift + alt - 4 : yabai -m window --space 4; yabai -m space --focus 4
shift + alt - 5 : yabai -m window --space 5; yabai -m space --focus 5
shift + alt - 6 : yabai -m window --space 6; yabai -m space --focus 6
shift + alt - 7 : yabai -m window --space 7; yabai -m space --focus 7
shift + alt - 8 : yabai -m window --space 8; yabai -m space --focus 8
shift + alt - 9 : yabai -m window --space 9; yabai -m space --focus 9
# 增加窗口大小
shift + alt - w : yabai -m window --resize top:0:-20
shift + alt - d : yabai -m window --resize left:-20:0
# 减少窗口大小
shift + alt - s : yabai -m window --resize bottom:0:-20
shift + alt - a : yabai -m window --resize top:0:20
- 重启服务
brew services restart skhd
3 spacebar
安装中文参考:https://blog.csdn.net/lxyoucan/article/details/121209267
安装
brew install cmacrae/formulae/spacebar
brew services start spacebar
编辑配置文件
vi ~/.spacebarrc
#!/usr/bin/env sh
spacebar -m config position bottom
spacebar -m config height 26
spacebar -m config title off
spacebar -m config spaces on
spacebar -m config clock on
spacebar -m config power on
spacebar -m config padding_left 20
spacebar -m config padding_right 20
spacebar -m config spacing_left 25
spacebar -m config spacing_right 15
spacebar -m config spaces_for_all_displays off
spacebar -m config text_font "Helvetica Neue:Bold:12.0"
spacebar -m config icon_font "Font Awesome 5 Free:Solid:12.0"
spacebar -m config background_color 0xff202020
spacebar -m config foreground_color 0xffa8a8a8
spacebar -m config space_icon_color 0xff458588
spacebar -m config power_icon_color 0xffcd950c
spacebar -m config battery_icon_color 0xffd75f5f
spacebar -m config dnd_icon_color 0xffa8a8a8
spacebar -m config clock_icon_color 0xffa8a8a8
spacebar -m config power_icon_strip 🔋 ♻️
spacebar -m config space_icon_strip ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
spacebar -m config space_icon
spacebar -m config clock_icon ⏰
spacebar -m config dnd_icon
#spacebar -m config clock_format "%d/%m/%y %R"
spacebar -m config clock_format "%m月%d日 %R"
spacebar -m config right_shell off
spacebar -m config right_shell_icon
spacebar -m config right_shell_command "whoami"
echo "spacebar configuration loaded.."
- 配置文件增加可执行权限
chmod +x ~/.spacebarrc
- 重启服务
brew services restart spacebar
yabai的配置文件中就包含了skhd和spacebar的适配设置,如果想了解更多配置的话,就需要自己去github仓库找文档看一下,文章开头已经给出了所有的仓库地址。
4 其他软件
其他的软件就是正常下载使用就可以了,这里就不过多赘述,Contexts的推荐设置可以给一下大家,主要是侧边栏的显示设置和option+tab在当前应用的窗口内进行切换,如下图。
Contexts的无限试用,我之前发过文章,有兴趣的可以去看下:Contexts For Mac 无限试用。