defaults 命令简短回答:每一项 Dock 设置都保存在 com.apple.dock 中,
每次改动之后都需要运行 killall Dock,否则什么都不会发生。
本页列出了每一个值得了解的键、它接受的值,以及它实际的作用。这是一份 参考资料,而不是教程,所以请直接跳到你要找的那一行。
两条命令。第一条写入设置,第二条重启 Dock 让它读取这个设置:
defaults write com.apple.dock tilesize -int 48; killall Dock
没有 killall Dock,这个值就只是存在偏好设置文件里,不起任何作用。这正是
博客文章里的命令看起来没有效果的最常见原因。想了解细节,参见
killall Dock 的作用。
在改动任何东西之前,先记录下它现在的状态,以便你能恢复原状:
defaults read com.apple.dock tilesize
如果某个键从未被设置过,defaults read 会返回一个错误,而不是一个值。这是
正常现象,说明 Dock 正在使用内置的默认值。要恢复到那个状态,删除这个键,
而不是去猜测原来的数值:
defaults delete com.apple.dock tilesize; killall Dock
tilesize 是大家都想知道的那个键。它是以点为单位的图标大小,
“系统设置”的滑块写入的正是同一个值。
defaults write com.apple.dock tilesize -int 48; killall Dock
tilesize整数,16 到 128。“系统设置”里的滑块
同样只覆盖 16 到 128,但输入具体数字才能精确定位到一个大小,日后也能回到那个大小。magnification布尔值。指针经过图标时它们是否会放大。largesize整数,最大 128。放大功能开启时它们会放大到的尺寸。关闭时会被完全忽略。值得了解的一点:Dock 会欣然接受命令行给出的高于 128 的 tilesize 值,
然后在下次启动时把它限制到上限,所以不要把更大的数值当成一个隐藏功能。
orientation字符串,取值为 left、bottom 或
right。没有 top。macOS 从未支持过它。autohide布尔值。Dock 是否要等你推向边缘才会显示。autohide-delay浮点数,单位为秒。指针必须在边缘停留多久
Dock 才会出现。设为 0 即可立即出现。autohide-time-modifier浮点数。滑动动画持续的时间。
0.15 很快,0 则完全取消动画。大家真正想要的那一对,是让 Dock 立刻出现:
defaults write com.apple.dock autohide-delay -float 0
defaults write com.apple.dock autohide-time-modifier -float 0
killall Dock
这些正是这个网站存在的原因所在的键。每一个都会让“系统 设置”中对应的控件停止响应,这样这项设置就不会被意外改动、被其他 App 改动,也不会被你自己在 六个月后忘记时改动。
defaults write com.apple.dock size-immutable -bool true
defaults write com.apple.dock position-immutable -bool true
defaults write com.apple.dock contents-immutable -bool true
defaults write com.apple.dock autohide-immutable -bool true
killall Dock
size-immutable会冻结大小,连带冻结分隔线上的拖动把手,这才是大多数人真正想要阻止的东西。position-immutable会冻结 Dock 所在的边缘。contents-immutable能阻止图标被拖出、拖入或重新排序。autohide-immutable会冻结隐藏与显示设置。这是大多数指南都会遗漏的一项。把 true 换成 false 即可解除任意一项锁定。我们的
命令生成器会针对你选择的锁定项写出准确的一组命令,
包括撤销命令。这些方法更全面的对比参见
锁定 Mac Dock 的三种方法。
这四项是按用户设置且可撤销的。能在终端命令和重启后依然生效的 是描述文件版本,它是适合其他人使用的 Mac 的正确工具,却不适合你自己的 Mac。
show-recents布尔值,即右侧的最近使用的应用区域。
升级之后大家搜索最多的解决办法,就是把它设为 false。static-only布尔值。为真时,Dock 只显示当前正在运行
的应用,并隐藏所有已固定的图标。是一种截然不同的使用方式。persistent-apps数组,即已固定的应用。手动编辑它是可行的,但很麻烦;拖拽操作更简单。persistent-others数组,即分隔线右侧的文件夹和堆栈。show-process-indicators布尔值。正在运行的 App 下方的那个点。要彻底清空 Dock 中已固定的 App,只保留正在运行的内容:
defaults write com.apple.dock persistent-apps -array; killall Dock
mineffect字符串,取值为 genie、scale 或
suck,即最小化动画。suck 从未出现在“系统设置”里,却已经存在并生效了超过十五年。minimize-to-application布尔值。最小化的窗口是缩进它所属的应用图标,
还是单独显示在右侧。launchanim布尔值。App 打开时图标弹跳的动画。scroll-to-open布尔值。在图标上向上滚动即可打开该应用的
Exposé。expose-group-apps布尔值。调度中心是否按应用对窗口分组。mru-spaces布尔值。空间是否会按最近使用顺序重新排列。
设为 false 可以让你的桌面保持固定顺序,这是让桌面保持不变的另外一半。| 键 | 类型 | 它的作用 |
|---|---|---|
tilesize | int 16–128 | 图标大小 |
magnification | bool | 鼠标悬停时放大图标 |
largesize | int | 放大后的大小 |
orientation | left/bottom/right | 哪条边 |
autohide | bool | 需要时才显示 |
autohide-delay | float | 显示前的延迟 |
autohide-time-modifier | float | 滑动速度 |
size-immutable | bool | 锁定大小 |
position-immutable | bool | 锁定边缘 |
contents-immutable | bool | 锁定图标 |
autohide-immutable | bool | 锁定隐藏与显示 |
show-recents | bool | 最近使用的应用区域 |
static-only | bool | 仅限正在运行的应用 |
persistent-apps | array | 已固定的 App |
persistent-others | array | 文件夹和堆栈 |
show-process-indicators | bool | 运行指示点 |
mineffect | genie/scale/suck | 最小化动画 |
minimize-to-application | bool | 最小化到图标 |
launchanim | bool | 启动时弹跳 |
scroll-to-open | bool | 滚动以打开 Exposé |
expose-group-apps | bool | 按应用分组 |
mru-spaces | bool | 按使用顺序重新排列空间 |
要丢弃你曾经改过的每一项 Dock 设置,恢复出厂时的 Dock:
defaults delete com.apple.dock; killall Dock
这个操作无法撤销,而且确实会丢弃工作内容。你固定的 App、你的堆栈、 你的大小,全都会丢失。如果你只想撤销一件事,改为删除那一个键即可。更多内容见 如何重置 Mac Dock。
几乎总是因为漏掉了
killall Dock。值已经写入了,但正在运行的 Dock 还没有重新读取它。另一个原因
是键名打错了:defaults 会接受你随便发明的任何键并欣然写入,
因为它根本不知道 Dock 能识别哪些键。
会的。它们保存在你的用户偏好设置里, 而不是系统里,所以更新不会影响它们。迁移到新 Mac 时 同样会带过去。
不需要,也不应该使用它。这些是按用户设置的
设置。用 sudo 运行它们会写入 root 的偏好设置,而不是你自己的,看起来就像是
命令悄悄失败了一样。
会的,这正是那四个
immutable 键的用途。任何拥有你权限的 App 都可以写入
com.apple.dock;锁定阻止的就是这个改动真正生效。
Still Dock 是同样的四项锁定,变成菜单栏里的开关,还多了一样命令 没有的东西:它会记住你锁定之前的 Dock 样子,让你随时能回到那个状态。锁定大小是免费的。