-- ============================================================ -- Hammerspoon 設定 -- 版控於 ~/Workspace/00_MacOS/02-setup/hammerspoon/init.lua -- 由 ~/.hammerspoon/init.lua symlink 過來 -- ============================================================ -- 載入 IPC 模組,讓終端機的 hs 指令能與 Hammerspoon 通訊 -- 例:hs -c "hs.accessibilityState()" require("hs.ipc") -- 開機自動啟動(設定即程式碼,不必手動去 GUI 勾選) hs.autoLaunch(true) -- 關閉視窗動畫:跨螢幕移動時避免 setFrame 與動畫的時序競爭 hs.window.animationDuration = 0 -- ------------------------------------------------------------ -- ⌥⌘↑ 將目前視窗移到下一個螢幕並最大化 -- 只有單一螢幕時,退化為原地最大化 -- ------------------------------------------------------------ local function maximizeToNextScreen() local win = hs.window.focusedWindow() if not win then return end -- 綠燈全螢幕的視窗自成一個 Space,必須先退出才能跨螢幕移動 if win:isFullScreen() then win:setFullScreen(false) hs.timer.doAfter(0.5, maximizeToNextScreen) return end -- 單螢幕時 next() 回傳自己,因此不需要額外的條件判斷 local target = win:screen():next() -- frame() 已扣除選單列與 Dock,故不需要再呼叫 maximize() win:setFrame(target:frame()) end local maxToNextHotkey = hs.hotkey.new({ "cmd", "alt" }, "up", maximizeToNextScreen) maxToNextHotkey:enable() -- ------------------------------------------------------------ -- 關於 Finder 的快捷鍵衝突 -- -- ⌥⌘↑ 在 Finder 原本是「前往上層資料夾並關閉目前視窗」, -- 會被本設定蓋掉。但單純的「前往上層資料夾」是 ⌘↑,不受影響, -- 因此不做讓行,讓 ⌥⌘↑ 在所有 app 中行為一致。 -- ------------------------------------------------------------ -- ------------------------------------------------------------ -- 修改設定檔後自動重新載入 -- 監看專案內的實際路徑(symlink 的來源,非 ~/.hammerspoon) -- ------------------------------------------------------------ configWatcher = hs.pathwatcher.new( os.getenv("HOME") .. "/Workspace/00_MacOS/02-setup/hammerspoon/", function(files) for _, file in pairs(files) do if file:sub(-4) == ".lua" then hs.reload() return end end end ) configWatcher:start() hs.notify.show("Hammerspoon", "", "設定已載入")