HammerSpoon - 不止是窗口管理

來源: 我的博客

概述

HammerSpoon 是一個可以用來進(jìn)行窗口管理的 App,開源免費(fèi)。當(dāng)然,功能也不僅限于此

本文旨在介紹如何用 HammerSpoon 配置窗口管理功能。類似的軟件,收費(fèi)的有 SizeUp,MoomDivvy, 免費(fèi)的有 SpectacleSlate

SizeUp 和 Divvy 在功能上各有所長。SizeUp 方便快速調(diào)節(jié)窗口位置,但不方便快速調(diào)節(jié)窗口大小,Divvy反之。雖然也可以在 Divvy 里設(shè)置快速 Resize 到指定大小的快捷鍵,但只是比較基礎(chǔ)的設(shè)置,不能實(shí)時調(diào)整。而 Spectacle 和 Slate 更像是這兩個軟件的功能集合,而且比他們都強(qiáng)大,只是在配置方面要花些時間。Slate 的原作者已經(jīng) 3 年沒管過這個項(xiàng)目了,但這個 fork 還是有人維護(hù)的

推薦HammerSpoon,因?yàn)樗拇翱诠芾砉δ茏銐驈?qiáng)大。而且對開發(fā)者很友好,有控制臺可以 Debug。語言采用 Lua,不難上手。另外,還有茫茫多的系統(tǒng) API 可以隨意調(diào)用。所以說,HammerSpoon 絕不僅僅是一個窗口管理軟件

如果你符合以下這幾點(diǎn):

  1. 使用 MacOS
  2. 想用鍵盤調(diào)整窗口大小和位置
  3. 有多個外接屏幕,想用快捷鍵把窗口在屏幕之間扔來扔去

那么,請繼續(xù)往下讀

不想看配置細(xì)節(jié)或者已經(jīng)掌握了配置方法的朋友,可以直接跳到下載頁面,載入我的配置文件,只需要幾分鐘,你就可以告別這些不科學(xué)的操作了

使用

我們先來看看配置好之后,有什么效果,隨便舉兩個例子:

Halves.gif
AnchorLeft.gif

按照這篇教程配置,你可以用鍵盤快捷鍵觸發(fā)以下動作:

  1. 在當(dāng)前的屏幕全屏化某個窗口,適用于任何屏幕和窗口
  2. 在當(dāng)前屏幕上居中窗口
  3. 把窗口大小調(diào)整到屏幕大小的一半(上下左右)。適用于任何屏幕和窗口
  4. 把當(dāng)前窗口扔到其他顯示器上,并且全屏(可選)
  5. 任意調(diào)整當(dāng)前窗口大小
  6. 關(guān)于任意移動窗口,我沒把這個功能寫進(jìn)來,因?yàn)樽约翰惶枰H绻阈枰獙?shí)現(xiàn)這個功能,看完這篇博客就會了

下載安裝

  1. 首先是 HammerSpoon 的主程序。這個一定要下載安裝
    • 先找到當(dāng)前的最新版
    • 下載安裝,把圖標(biāo)拖到 Application 里面去
  2. 我的配置文件在這里:S1ngS1ng - HammerSpoon,懶得自己配置了就用這個好了
  3. 可以直接 git clone 我的 HammerSpoon 庫,并把我的 init.lua 以及 window-management.lua 放到本地的 ~/.hammerspoon/ 文件夾中,然后 Reload 一下就可以使用了

快捷鍵

README 文件里寫的很清楚了,這里還是列出來吧(快捷鍵均為 MacOS 的):

  • 把窗口移到另一個屏幕
    • Ctrl-Alt + 左 移到左邊的屏幕
    • Ctrl-Alt + 右 移到右邊的屏幕
  • 全屏
    • Ctrl-Alt-Command + M
  • 把窗口放到屏幕中心
    • Ctrl-alt-Command + C
  • 設(shè)置窗口大小為屏幕大小的一半
    • Ctrl-Alt-Command + 左 寬度為一半,靠左
    • Ctrl-Alt-Command + 右 寬度為一半,靠右
    • Ctrl-Alt-Command + 上 高度為一半,靠上
    • Ctrl-Alt-Command + 下 高度為一半,靠下
  • 設(shè)置窗口大小,以左、上為基準(zhǔn) (意思是左邊界和上邊界不動)
    • Ctrl-Alt-Shift + 左 窗口右側(cè)邊左移
    • Ctrl-Alt-Shift + 右 窗口右側(cè)邊右移
    • Ctrl-Alt-Shift + 上 窗口上邊界上移
    • Ctrl-Alt-Shift + 下 窗口上邊界下移
  • 設(shè)置窗口大小,以右、下為基準(zhǔn)
    • Alt-Command-Shift + 左 窗口左側(cè)邊左移
    • Alt-Command-Shift + 右 窗口左側(cè)邊右移
    • Alt-Command-Shift + 上 窗口下邊界上移
    • Alt-Command-Shift + 下 窗口下邊界下移

其中,居中、全屏、窗口移到其他屏幕、窗口設(shè)置為一半屏幕大小的快捷鍵都和 SizeUp 的一樣。至于窗口大小調(diào)整,只要記住Ctrl-Alt-Shift 是保持左邊和下邊不動,Command-Alt-Shift 是保持右邊和下邊不動就好了。畢竟,CtrlCommand 的左邊

配置

配置方面,HammerSpoon 本身就提供了眾多的 API,不光有它自己的,還有來自 Mac OS 系統(tǒng)的。完整的 API 文檔在這里

API

以下是我的配置文件中,用到的 API:

  1. hs.alert - 用來顯示提示信息。位置默認(rèn)為屏幕中央,黑底白字,大概三秒鐘之后消失。類似功能的還有 hs.notify,也就是系統(tǒng)的 Notification(通知)
  2. hs.grid - 用來設(shè)置 Grid(網(wǎng)格)。我的配置文件中,實(shí)現(xiàn)窗口大小調(diào)整和位置調(diào)整,都是基于這個 API
  3. hs.hotkey - 用來設(shè)置快捷鍵。我的配置文件中調(diào)用的是它的 bind 方法
  4. hs.screen - 與屏幕(顯示器)相關(guān)的 API,可以獲取屏幕參數(shù),設(shè)置 Grid(網(wǎng)格)
  5. hs.screen.watcher - 用于監(jiān)聽屏幕(顯示器)分辨率、數(shù)量變化等的 watcher
  6. hs.window - 與應(yīng)用程序窗口相關(guān)的 API,提供了獲取激活窗口,移動窗口到其他顯示器,移動窗口到屏幕中心等方法

基本原理

首先,根據(jù)屏幕的長寬比,把屏幕分成 Grid(網(wǎng)格)。比如 16:9 的屏幕,就分成 8 * 4,也就是這樣:


GridExample.jpg

那么,通過設(shè)置窗口占多少個格子,就可以實(shí)現(xiàn)快速布局了

一點(diǎn)建議

  1. 關(guān)于 Lua 語言。如果有 Python 或者 JavaScript 的基礎(chǔ),寫起配置來并不會太難,可以參考最新版(目前是5.3.3) Lua 語言的官網(wǎng)。遇到語言方面的問題了,可以先去 StackOverflow 搜搜看,基本都能搜到結(jié)果
  2. 遇到關(guān)于 HammerSpoon 的問題,可以先看看他們的 Start Guide,一些初級的問題可以在這里找到答案
  3. Lua 語言中,調(diào)用 function 有兩種寫法。一個是 foo.bar(),另一個是 foo:bar()。用了冒號,就相當(dāng)于傳入了 this(或者說是 Python 中的 self)作為函數(shù)的第一個參數(shù)。因此,foo:bar(baz) 其實(shí)就相當(dāng)于 foo.bar(foo, baz)
  4. 用好 Console(控制臺),這十分重要。安裝好 HammerSpoon,點(diǎn)擊 MenuBar 上的 HammerSpoon 圖標(biāo),然后點(diǎn)擊 Console,就可以打開控制臺了。HammerSpoon 本身也提供了 Console 的接口 hs.console
  5. 如果只是簡單的想在 Console 輸出內(nèi)容,那么只需要在代碼中寫上 print 就可以了。Lua 中支持兩種 print 寫法,一個是 print "foo",適用于字符串。還有一種是 print(foo),適用于變量
  6. HammerSpoon 的文檔中,一些方法是用.調(diào)用的,一些是用:調(diào)用的。用.調(diào)用的方法,基本都可以在 Console 中直接執(zhí)行。但用:調(diào)用的方法,如果直接在 Console 中執(zhí)行是會報(bào)錯的。比如這個:hs.application:allWindows()。看名字就知道,這個是用來獲取某個 Application(應(yīng)用)的所有窗口。在 Console 中,我們只需要用一個實(shí)例來調(diào)用它就好了。比如,我們要顯示 Chrome 的所有窗口,那么這兩種寫法其實(shí)是一樣的:
hs.application.find('chrome'):allWindows()
hs.application.allWindows(hs.application.find('chrome'))

寫在最后

開頭提到過,其實(shí) HammerSpoon 能干的事情很多,絕不止窗口管理。我會在下一篇博客中講講關(guān)于音樂播放器的全局控制。感興趣的朋友可以看下我提交的代碼,以及文檔


歡迎在頁面下方評論和留言。如果你喜歡這篇文章,請幫我點(diǎn)個贊??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Sublime Text:一款具有代碼高亮、語法提示、自動完成且反應(yīng)快速的編輯器軟件,不僅具有華麗的界面,還支持插...
    追風(fēng)逸少丶閱讀 11,469評論 1 34
  • Sublime Text:一款具有代碼高亮、語法提示、自動完成且反應(yīng)快速的編輯器軟件,不僅具有華麗的界面,還支持插...
    xiaotao123閱讀 9,604評論 0 27
  • 返回上次光標(biāo)的位置Ctrl+Alt+ left/right 返回至上次瀏覽的位置 Alt+回車 導(dǎo)入包,自動修正C...
    請叫我四爺閱讀 2,224評論 1 2
  • 又值一年中秋日 與一友相談,有感于他的境遇和自己的經(jīng)歷一路走來的心路歷程,隨做一詞: 水調(diào)歌頭 中秋 客寄邊城月...
    而淑閱讀 607評論 5 7
  • 史蒂芬柯維在高效能人士的七個習(xí)慣中將積極主動列為第一個習(xí)慣,是由內(nèi)到外全面打造自己的基礎(chǔ)。 梭羅說,最令人鼓舞的事...
    向日小葵123閱讀 906評論 1 1

友情鏈接更多精彩內(nèi)容