From 8fae593ae9e7fcfefaa0d724db707bfb32886ebf Mon Sep 17 00:00:00 2001 From: Eltrac Date: Sat, 29 Nov 2025 12:45:30 +0800 Subject: docs: update weekly draft Former-commit-id: 3d08c0adedcb89989dcf05445d01af4f01b0d8a9 --- content/_drafts/57.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3