Mac下的平铺式桌面 - Yabai

近来无事,凑着周末休息的时间,想折腾一下 Mac。很久之前就有朋友给我推荐过一款名为“Yabai”的平铺式桌面管理软件,今天,就折腾起来了。

老样子,先上配置。因为这次折腾时,有一点意外情况。好在通过 GitHub 的朋友给解决掉了。

PS:遗憾的是出差在外,网络不佳,状态栏(一个类似 i3-status 的东西)一直 clone 不下来。所以就没有状态栏的折腾日记了~

系统 MacOS Monterey 12.2.1 系统
软件包管理器 Homebrew 3.4.0 软件包管理器
Yabai 3.3.10 平铺式桌面管理器
skhd 0.3.5 快捷键绑定

什么是 Yabai

Yabai

玩过 linux 的差不多应该都听过 i3wm 吧。Yabai 可以看做是一款在 Mac Os 上的 i3wm

安装

PS:

  1. 我就是在这里除了意外。因为我是按文档直接安装的,但是在 Monterey 中sudo yabai –install-sa一直失败。所以下面我就按我成功后的操作来记录了。
  2. 此次安装的前提是默认已经安装过 Homebrew 了。至于国内怎么安装 Homebrew。那就自己搜吧,有时间的话,我就在记录一篇到博文中~~
  1. # 安装yabai
  2. brew install koekeishiya/formulae/yabai --HEAD
  3. # 安装 skhd
  4. brew install koekeishiya/formulae/skhd
  5. # 安装 jq -> 主要在寻找桌面和显示器的时候使用。
  6. brew install jq
  7. # 命令成功之后需要执行一下命令
  8. sudo yabai --install-sa
  9. sudo yabai --load-sa
  10. # 下面会讲如何自动执行

配置

PS:安装完之后别着急启动。

  1. 创建 yabai 的配置文件
  2. 创建 skhd 的配置文件
  3. 启动 yabai
  4. 启动 shkd

yabai 配置文件

我是直接把yabai 配置文件放在了 ``~/.config/yabai/`下。当然,这个目录是自己创建的=,=

  1. mkdir ~/.config/yabai
  2. # 注意,在.config 下的话,用的是 yabairc 没有.哦
  3. cp /usr/local/opt/yabai/share/yabai/examples/yabairc ~/config/yabai/yabairc
  4. chmod u+x ~/config/yabai/yabairc

yabai 配置文件可以放的位置

  • $XDG_CONFIG_HOME/yabai/yabairc
  • $HOME/.config/yabai/yabairc
  • $HOME/.yabairc
  • 自定义位置,手动加载

skhd 配置文件

  1. cp /usr/local/opt/yabai/share/yabai/examples/skhdrc ~/.skhdrc

启动 yabai

  1. brew services start yabai
  2. brew services start skhd

第一次启动 skhd 和 yabai 之后,macOS 会提示是否允许两者访问辅助功能。在系统偏好设置->安装性与隐私->隐私中添加权限后,再执行一次上述命令,或者下面的命令即可

  1. brew services restart yabai
  2. brew services restart skhd

启动后的效果图~

可以看到~~当前窗口是 Finder 在激活,后台窗口中都增加了透明度,这是我特别喜爱的一个功能~

接下来就上一下配置吧。这才是核心。至于怎么使用,看配置的注释就能看懂咯。玩过平铺式桌面的同学,肯定更容易上手。

配置篇

yabairc

  1. #!/usr/bin/env sh
  2. # 这里参考了 yabai 的 wiki 。具体步骤下面讲
  3. sudo yabai --load-sa
  4. yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
  5. # 窗口布局 bsp: 平铺 float: 浮动
  6. yabai -m config layout bsp
  7. # 默认拆分规则 first_child second_child
  8. yabai -m config window_placement second_child
  9. # 窗口间距设置
  10. yabai -m config top_padding 5
  11. yabai -m config bottom_padding 5
  12. yabai -m config left_padding 5
  13. yabai -m config right_padding 5
  14. yabai -m config window_gap 4
  15. # 自动平衡所有窗口始终占据相同的空间
  16. yabai -m config auto_balance off
  17. # 如果禁用自动平衡,此项属性定义的是新窗口占用的空间量。0.5意为旧窗口占用50%
  18. yabai -m config split_ratio 0.50
  19. # 鼠标修饰键 意思就是按着这个键就可以使用鼠标单独修改窗口大小了
  20. yabai -m config mouse_modifier fn
  21. # fn + 左键 移动
  22. yabai -m config mouse_action1 move
  23. # fn + 右键
  24. yabai -m config mouse_action2 resize
  25. # 焦点跟随鼠标 默认off: 关闭 autoraise:自动提升 autofocus: 自动对焦
  26. yabai -m config focus_follows_mouse autofocus
  27. # 设置鼠标是否跟随当前活动窗口 默认 off: 关闭 on: 开启
  28. yabai -m config mouse_follows_focus on
  29. # 浮动窗口问题在顶部
  30. yabai -m config window_topmost on
  31. # 修改窗口阴影 on: 打开 off: 关闭 float: 只显示浮动窗口的阴影
  32. yabai -m config window_shadow float
  33. # 窗口透明度设置
  34. yabai -m config window_opacity on
  35. # 配置活动窗口不透明度
  36. yabai -m config active_window_opacity 1.0
  37. yabai -m config normal_window_opacity 0.9
  38. yabai -m config window_opacity_duration 0.0
  39. # 在主显示器上的每个空间顶部添加 20 填充 底部添加 0 填充
  40. # yabai -m config external_bar main:20:0
  41. # 在所有显示器上的每个空间顶部添加 0 填充 底部添加 0 填充
  42. yabai -m config external_bar all:0:5
  43. # ================================ 规则 ================================
  44. # 打开系统偏好设置,不使用平铺模式
  45. yabai -m rule --add app="^系统偏好设置$" manage=off
  46. yabai -m rule --add app="^提醒事项$" manage=off
  47. yabai -m rule --add app="^关于本机$" manage=off
  48. echo "yabai configuration loaded.."

.skhdrc

  1. # ================================ 窗口设置 ================================
  2. # focus window : 激活窗口快捷键 h: 左 j: 下 k: 右 l: 上
  3. alt - h : yabai -m window --focus west
  4. alt - j : yabai -m window --focus south
  5. alt - k : yabai -m window --focus north
  6. alt - l : yabai -m window --focus east
  7. # 交换窗口位置
  8. shift + alt - h : yabai -m window --swap west
  9. shift + alt - j : yabai -m window --swap south
  10. shift + alt - k : yabai -m window --swap north
  11. shift + alt - l : yabai -m window --swap east
  12. # 移动窗口位置
  13. shift + cmd - h : yabai -m window --warp west
  14. shift + cmd - j : yabai -m window --warp south
  15. # 因与IDEA shift + cmd + K push code 冲突,故注释了此快捷键
  16. # shift + cmd - k : yabai -m window --warp north
  17. shift + cmd - l : yabai -m window --warp east
  18. # 浮动窗口设置 参考了Magent默认设置。因为之前用习惯了。。。。
  19. # 恢复原始窗口大小
  20. ctrl + alt - 0 : yabai -m space --balance
  21. # 把浮动窗口左右平分整个屏幕 rows:cols:start-x:star-y:width:height m行:n列:x:y:w:h
  22. # 最大化
  23. ctrl + alt - return : yabai -m window --grid 1:1:0:0:1:1
  24. # 2分屏上
  25. ctrl + alt - up : yabai -m window --grid 2:1:0:0:2:1
  26. # 2分屏左
  27. ctrl + alt - left : yabai -m window --grid 1:2:0:0:1:1
  28. # 2分屏右
  29. ctrl + alt - right : yabai -m window --grid 1:2:1:1:1:1
  30. # 2分屏下
  31. ctrl + alt - down : yabai -m window --grid 2:1:0:1:2:1
  32. # 4分屏左上
  33. ctrl + alt - u : yabai -m window --grid 2:2:0:0:1:1
  34. # 4分屏右上
  35. ctrl + alt - i : yabai -m window --grid 2:2:0:1:1:1
  36. # 4分屏左下
  37. ctrl + alt - j : yabai -m window --grid 2:2:1:0:1:1
  38. # 4分屏右下
  39. ctrl + alt - k : yabai -m window --grid 2:2:1:1:1:1
  40. # 3分屏左1
  41. ctrl + alt - d : yabai -m window --grid 1:3:0:0:1:1
  42. # 3分屏左2
  43. ctrl + alt - e : yabai -m window --grid 1:3:0:0:2:1
  44. # 3分屏中1
  45. ctrl + alt - f : yabai -m window --grid 1:3:1:0:1:1
  46. # 3分屏右2
  47. ctrl + alt - t : yabai -m window --grid 1:3:1:0:2:1
  48. # 3分屏右1
  49. ctrl + alt - g : yabai -m window --grid 1:3:3:0:1:1
  50. # 9分屏居中
  51. ctrl + alt - c : yabai -m window --grid 3:3:1:1:1:1
  52. # 浮动/不浮动窗口 float / unfloat window and center on screen
  53. alt - t : yabai -m window --toggle float;yabai -m window --grid 4:4:1:1:2:2
  54. alt - r : yabai -m space --rotate 90
  55. # 调整窗口大小
  56. ctrl + alt + cmd - left : yabai -m window --resize left:-50:0; yabai -m window --resize right:-50:0
  57. ctrl + alt + cmd - down : yabai -m window --resize bottom:0:50; yabai -m window --resize top:0:50
  58. ctrl + alt + cmd - up : yabai -m window --resize top:0:-50; yabai -m window --resize bottom:0:-50
  59. ctrl + alt + cmd - right : yabai -m window --resize right:50:0; yabai -m window --resize left:50:0
  60. # 重启 Yabai
  61. cmd + alt - r : /usr/bin/env osascript <<< "display notification \"正在重启 Yabai\" with title \"Yabai\""; launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"
  62. # ================================ 多桌面配置 ================================
  63. # 创建一个新桌面,并把当前活动的窗口发送到新桌面,并且自动跳转到新桌面 需要jq支持 brew install jq
  64. shift + cmd - n : yabai -m space --create && index="$(yabai -m query --spaces --display | jq '.| length')" && yabai -m window --space "${index}" && yabai -m space --focus "${index}"
  65. # 切换回最近的一个桌面
  66. alt - x : yabai -m space --focus recent
  67. # 切换回第一个桌面
  68. alt - 1 : yabai -m space --focus 1
  69. alt - 2 : yabai -m space --focus 2
  70. alt - 3 : yabai -m space --focus 3
  71. alt - 4 : yabai -m space --focus 4
  72. alt - 5 : yabai -m space --focus 5
  73. alt - 6 : yabai -m space --focus 6
  74. alt - 7 : yabai -m space --focus 7
  75. alt - 8 : yabai -m space --focus 8
  76. alt - 9 : yabai -m space --focus 9
  77. # 关闭当前桌面
  78. cmd + alt - w : yabai -m space --destroy
  79. # 把窗口发送到桌面,并跟随过去 send window to desktop and follow focus
  80. shift + cmd - z : yabai -m window --space next; yabai -m space --focus next
  81. shift + cmd - 1 : yabai -m window --space 1; yabai -m space --focus 1
  82. shift + cmd - 2 : yabai -m window --space 2; yabai -m space --focus 2
  83. shift + cmd - 3 : yabai -m window --space 3; yabai -m space --focus 3
  84. shift + cmd - 4 : yabai -m window --space 4; yabai -m space --focus 4
  85. shift + cmd - 5 : yabai -m window --space 5; yabai -m space --focus 5
  86. shift + cmd - 6 : yabai -m window --space 6; yabai -m space --focus 6
  87. shift + cmd - 7 : yabai -m window --space 7; yabai -m space --focus 7
  88. shift + cmd - 8 : yabai -m window --space 8; yabai -m space --focus 8
  89. shift + cmd - 9 : yabai -m window --space 9; yabai -m space --focus 9
  90. # ================================ APPS ================================
  91. # iTerm2
  92. cmd - return : open -a iTerm
  93. # ================================ 多显示器配置 ================================
  94. # focus monitora :
  95. # ctrl + alt - z : yabai -m display --focus prev
  96. # ctrl + alt - 3 : yabai -m display --focus 3
  97. # send window to monitor and follow focus
  98. # ctrl + cmd - c : yabai -m window --display next; yabai -m display --focus next
  99. # ctrl + cmd - 1 : yabai -m window --display 1; yabai -m display --focus 1
  100. # move floating window
  101. # shift + ctrl - a : yabai -m window --move rel:-20:0
  102. # shift + ctrl - s : yabai -m window --move rel:0:20
  103. # increase window size
  104. # shift + alt - a : yabai -m window --resize left:-20:0
  105. # shift + alt - w : yabai -m window --resize top:0:-20
  106. # decrease window size
  107. # shift + cmd - s : yabai -m window --resize bottom:0:-20
  108. # shift + cmd - w : yabai -m window --resize top:0:20
  109. # set insertion point in focused container
  110. # ctrl + alt - h : yabai -m window --insert west
  111. # toggle window zoom
  112. # alt - d : yabai -m window --toggle zoom-parent
  113. # alt - f : yabai -m window --toggle zoom-fullscreen
  114. # toggle window split type
  115. # alt - e : yabai -m window --toggle split
  116. # 浮动/不浮动窗口 float / unfloat window and center on screen
  117. #alt - t : yabai -m window --toggle float;yabai -m window --grid 4:4:1:1:2:2
  118. # toggle sticky(+float), topmost, picture-in-picture
  119. # alt - p : yabai -m window --toggle sticky;\
  120. # yabai -m window --toggle topmost;\
  121. # yabai -m window --toggle pip

MacOS BigSur以上版本启动自动加载脚本步骤

  1. sudo visudo -f /private/etc/sudoers.d/yabai
  2. # 然后输入一下内容,其中 <user>为当前 mac 的用户名
  3. <user> ALL = (root) NOPASSWD: /usr/local/bin/yabai --load-sa
  4. # 之后在 yabairc 中添加以下命令即可,也就是上面的配置文件中的 345 行,已经添加完了
  5. sudo yabai --load-sa
  6. yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"

至此,可以尽情的在 mac 上享受平铺式桌面的快感了~~

Mac下的平铺式桌面 - Yabai的更多相关文章

  1. dvtm: 平铺式终端管理器 — LinuxTOY

    dvtm: 平铺式终端管理器 — LinuxTOY LinuxTOY 是一个致力于提供 Linux 相关资讯的专题站点.如果您发现了好用好玩的 Linux 东东并愿意发扬自由.分享的精神,可以点击顶部 ...

  2. 平铺式窗口管理器 Musca 初体验

    作者: 吴吉庆 Version: 1.0 release: 2009-11-04 update: 2009-11-04 为什么用平铺式窗口管理器? 什么是平铺式窗口管理器(tiling window ...

  3. subtle:有趣的伪平铺式窗口管理器

    Author:吴吉庆 email: jiqingwu@gmail.com home:http://hi.baidu.com/jiqing0925 create:2011-02-19 update:20 ...

  4. Terminix:基于 GTK3 的平铺式 Linux 终端模拟器

    现在,你可以很容易的找到大量的 Linux 终端模拟器,每一个都可以给用户留下深刻的印象.但是,很多时候,我们会很难根据我们的喜好来找到一款心仪的日常使用的终端模拟器.这篇文章中,我们将会推荐一款叫做 ...

  5. Dvtm -- 平铺式终端

    Dvtm -- 平铺式终端_Linux伊甸园开源社区-24小时滚动更新开源资讯,全年无休! Dvtm -- 平铺式终端 关注我们: 如果你使用过 Dwn 或 Awesome 这种平铺式窗口管理器,一定 ...

  6. labview中层叠式顺序结构与平铺式顺序结构有什么不同?

    也就看着不同,平铺式看着直观,但比较占地方,程序复杂了就显得过大.二者可互相转换,从这点也可以看出它们没有本质不同!

  7. blfs(systemv版本)学习笔记-编译安装i3-wm平铺式窗口管理器

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! i3-wm项目的官网:https://i3wm.org/ 首先需要lfs基础上编译安装完整的xorg服务 我的xorg服务编译安 ...

  8. 躺平吧,平铺的窗口「GitHub 热点速览 v.21.47」

    作者:HelloGitHub-小鱼干 用 macOS 系统经常会遇到的一个问题便是多开窗口如何快速找寻的问题,本周特推项目 yabai 便是来解决这个问题的.直接把所有窗口平铺,是不是很"正 ...

  9. 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载

    如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...

随机推荐

  1. 集合框架-工具类-Arrays方法介绍

    1 package cn.itcast.p3.toolclass.arrays.demo; 2 3 import java.util.Arrays; 4 5 public class ArraysDe ...

  2. Linux下安装confluence汉化破解版

    Atlassian Confluence(简称Confluence)是一个专业的wiki程序.它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享.Confluence 不是一个开源软件 ...

  3. 日志模块详细介绍 hashlib模块 动态加盐

    目录 一:hashlib模块 二:logging 一:hashlib模块 加密: 将明文数据通过一系列算法变成密文数据(目的就是为了数据的安全) 能够做文件一系列校验 python的hashlib提供 ...

  4. Linux 系统conda环境,pip文件的导出和安装。

    /** * 注意:1.在当前的Linux系统中,先生成yaml和requirement.txt文件.通过ssh命令连接到另一台Linux实例.需要先在新的Linux实例上安装 conda.然后再将 y ...

  5. C++函数调用过程解析

    编译环境:Windows 10 + VS2015. 0.引言 函数调用的过程实际上也就是一个中断的过程,本文演示和深入分析参数入栈.函数跳转.保护现场.恢复现场等函数调用过程. 首先对三个常用的寄存器 ...

  6. Python中列表操作函数append的浅拷贝问题

    L=int(input())#L位数N=int(input())#N进制row=[]list1=[]for i in range(1,N): row.append(1)list1.append(row ...

  7. ApacheCN 数据科学译文集 20211109 更新ApacheCN 数据科学译文集 20211109 更新

    计算与推断思维 一.数据科学 二.因果和实验 三.Python 编程 四.数据类型 五.表格 六.可视化 七.函数和表格 八.随机性 九.经验分布 十.假设检验 十一.估计 十二.为什么均值重要 十三 ...

  8. canvas绘制“飞机大战”小游戏,真香!

    canvas是ArkUI开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活.高效等优点,被广泛应用于UI界面开发中. 本期,我们将为大家介绍canvas组件的使用. 一.canvas介绍 1 ...

  9. Java里的new

    java里的new的英文意思就是"新的"的意思.在JAVA里就是创建一个新的实例,或者说一个新的对象,一个普通类在没有实例化之前,就是new之前,它的属性,方法等等在内存中都是不存 ...

  10. js window.event

    转载请注明来源:https://www.cnblogs.com/hookjc/ 描述event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的 ...