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
      • <> 内的 userpath 可以通过 whoamiwhich 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 无限试用

image-20221227163802709

image-20221227163817448