summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/_drafts/57.md58
1 files changed, 57 insertions, 1 deletions
diff --git a/content/_drafts/57.md b/content/_drafts/57.md
index aa4ed14e..8a20b4a8 100644
--- a/content/_drafts/57.md
+++ b/content/_drafts/57.md
@@ -113,10 +113,66 @@ toc: true
### Penpot
-开源版的 Figma
+开源版的 Figma。
访问:[GitHub - penpot/penpot: Penpot: The open-source design tool for design and code collaboration](https://github.com/penpot/penpot)
+### Hammerspoon
+
+一个允许用户编写 Lua 脚本控制 macOS 系统,以实现强大自动化的 App,开源免费,非常黑客。我发现这个 App 是因为最近改变了自己使用设备的逻辑。以前我出门会用 MacBook,在家就用桌面上的 Mac mini,但我逐渐发现在两台电脑之间同步数据非常痛苦,时常忘记 `git pull`,一些软件的配置项更难同步,再加上两台电脑上装的软件不一样,维护一个整洁的 `$HOME` 目录就已经很要命了,如果用同样的态度处理两台电脑,我大概会在扯不开的毛线堆里疯掉的。所以,现在我的思路是,需要敲代码和写文是,就用 MacBook,在家的话可以连接外界显示屏;而 Mac mini 就作为一台长期开机的 Home Server,同时起到娱乐功能(看剧,以及…… 用 Mac 打游戏)。
+
+这样区分之后,MacBook 就经常需要连接外接显示器。在较小的屏幕上,我需要 Dock 栏自动隐藏,并且显示在最底部;但是在较大的外界显示屏上,Dock 栏最好是一直显示,而且放在左边会更好。然而,macOS 没有提供分显示器的 Dock 栏设置,于是我只能通过 Hammerspoon 这样的脚本工具来监听外接设备连接情况,然后自动更改设置。
+
+因为只是想临时解决一个小需求,我就没有去看 Hammerspoon 的文档,而是让 ChatGPT 帮我写了一个脚本。如果以后有更黑客的需求,我大概会去读一下 Hammerspoon 提供的 API。
+
+```lua
+-- 自动检测屏幕变化并调整 Dock 行为
+local function updateDockPosition()
+ local screens = hs.screen.allScreens()
+ local dockPos = "bottom"
+ local autoHide = true
+ local foundExternal = false
+
+ -- 查找名为 "P5" 的外接屏
+ for _, s in ipairs(screens) do
+ if s:name() == "P5" then
+ foundExternal = true
+ break
+ end
+ end
+
+ if foundExternal then
+ -- 外接屏存在:Dock 左侧 + 不自动隐藏
+ dockPos = "left"
+ autoHide = false
+ else
+ -- 无外接屏:Dock 底部 + 自动隐藏
+ dockPos = "bottom"
+ autoHide = true
+ end
+
+ -- 设置 Dock 位置 & 自动隐藏
+ local cmd = string.format(
+ 'defaults write com.apple.dock orientation %s; ' ..
+ 'defaults write com.apple.dock autohide -bool %s; ' ..
+ 'killall Dock',
+ dockPos,
+ autoHide and "true" or "false"
+ )
+
+ hs.execute(cmd)
+end
+
+-- 监听屏幕改变事件
+local screenWatcher = hs.screen.watcher.new(updateDockPosition)
+screenWatcher:start()
+
+-- Hammerspoon 启动时执行一次
+updateDockPosition()
+```
+
+访问:[Hammerspoon](http://www.hammerspoon.org/)
+
## ↯ · 当下
### 开发 Growel