diff options
| author | Eltrac <hi@guhub.cn> | 2025-11-29 12:45:30 +0800 |
|---|---|---|
| committer | Eltrac <hi@guhub.cn> | 2025-11-29 12:45:30 +0800 |
| commit | 3d08c0adedcb89989dcf05445d01af4f01b0d8a9 (patch) | |
| tree | 29ce9aee7b9f990eb3451338c6109926952a5dd2 /content | |
| parent | 11319c2080abb146721cff7554ab97da8c8460fd (diff) | |
docs: update weekly draft
Diffstat (limited to 'content')
| -rw-r--r-- | content/_drafts/57.md | 58 |
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 |
