呆貓桌面云 for Mac V1.20.3 蘋(píng)果電腦版203MB / 12-29
OnTime PRO for Mac(桌面時(shí)鐘工具) v3.2 直裝激活版72.1MB / 07-17
天翼云電腦 for Mac v2.1.0 蘋(píng)果電腦版96.7MB / 01-11
Digital Clock 3D for Mac(3D數(shù)字時(shí)鐘動(dòng)態(tài)桌面) v2.1.1 免費(fèi)激活64.2MB / 08-02
Firework for Mac(Web應(yīng)用轉(zhuǎn)桌面程序) V3.0.37.8 蘋(píng)果電腦版126MB / 03-25
Desktop Curtain(桌面圖標(biāo)快速隱藏軟件) for Mac v3.1 一鍵安裝9.29MB / 03-08
將任何網(wǎng)站轉(zhuǎn)換為桌面Mac應(yīng)用程序 Coherence X v4.4.0 直裝特別12.63MB / 04-20
Pap.er (mac桌面壁紙軟件) for Mac V3.5.1 蘋(píng)果電腦版2.27MB / 06-05
Quick Desktop(一鍵最小化窗口)for Mac V1.0.2 蘋(píng)果電腦版102MB / 02-17
Digital Clock (桌面數(shù)字時(shí)鐘) for Mac V4.7.8 蘋(píng)果電腦版22.7MB / 05-26
-
Cherry Studio AI桌面客戶(hù)端 v1.2.6 Mac官方中文版(Intel/Apple 其他軟件 / 228MB
-
開(kāi)源電子書(shū)閱讀神器Koodo Reader for Mac v1.9.4中文版 蘋(píng)果電腦 其他軟件 / 239MB
-
Deskflow(鍵盤(pán)鼠標(biāo)共享工具) v1.21.2 蘋(píng)果電腦版 支持m1芯片 其他軟件 / 29.5 MB
-
Deskflow for mac(鍵盤(pán)鼠標(biāo)共享工具) v1.21.2 蘋(píng)果電腦版 其他軟件 / 28.8 MB
-
都玩投屏(手機(jī)投屏電腦端) for mac v4.4.0.0 蘋(píng)果電腦版 其他軟件 / 35.4 MB
-
-
-
Scholaread靠岸學(xué)術(shù)(論文閱讀器)v1.1.41 Apple芯片版 其他軟件 / 125MB
-
Scholaread靠岸學(xué)術(shù)(論文閱讀器)v1.1.41 Intel芯片版 其他軟件 / 131MB
-
Markdown編輯器Typora for Mac V1.10.10 蘋(píng)果直裝免費(fèi)版 其他軟件 / 17.8MB
詳情介紹
hammerspoon mac版是一款簡(jiǎn)單而強(qiáng)大的macOS自動(dòng)化工具,它為您提供了一個(gè)合適的環(huán)境,用于編寫(xiě)Lua代碼腳本,用于設(shè)置可以使用全局熱鍵組合觸發(fā)的自動(dòng)操作。簡(jiǎn)而言之,Hammerspoon將系統(tǒng)API橋接到一個(gè)簡(jiǎn)單的Lua腳本引擎,這意味著它使您能夠編寫(xiě)Lua腳本以自動(dòng)執(zhí)行各種自動(dòng)化任務(wù)。

Hammerspoon Mac版安裝教程
hammerspoon mac版安裝包下載完成后打開(kāi),將【Hammerspoon】拖到應(yīng)用程序。

Hammerspoon Mac最新版軟件介紹
Hammerspoon是OS X的桌面自動(dòng)化工具。它將各種系統(tǒng)級(jí)API連接到Lua腳本引擎,通過(guò)編寫(xiě)Lua腳本,您可以對(duì)系統(tǒng)產(chǎn)生強(qiáng)大的影響。
這很簡(jiǎn)單的描述。您可以編寫(xiě)與應(yīng)用程序,Windows,鼠標(biāo)指針,文件系統(tǒng)對(duì)象,音頻設(shè)備,電池,屏幕,低級(jí)鍵盤(pán)/鼠標(biāo)事件,剪貼板,定位服務(wù),WiFi等等的OS X API進(jìn)行交互的Lua代碼。通常,您將在Lua中編寫(xiě)一個(gè)將事件連接到操作的配置文件。您可能希望將鍵盤(pán)快捷鍵綁定到一系列窗口操作或applescript。當(dāng)您的WiFi接口連接到家庭網(wǎng)絡(luò)時(shí),您可能需要運(yùn)行一系列命令。當(dāng)您的電池電量低于一定百分比時(shí),您可能希望顯示警報(bào)。你可能想做一些瘋狂的事情,就像iTunes在Mac偵測(cè)到你在巴黎時(shí)自動(dòng)開(kāi)始播放的那樣。

Hammerspoon for Mac功能介紹
你好,世界
所有優(yōu)秀的編程教程都以某種類(lèi)型的Hello World示例開(kāi)頭,因此我們將使用Hammerspoon綁定鍵盤(pán)熱鍵來(lái)演示通過(guò)簡(jiǎn)單通知說(shuō)出Hello World。
在您的init.lua位置以下:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "W", function()
hs.alert.show("Hello World!")
end)
然后保存文件,單擊Hammerspoon菜單欄圖標(biāo)并選擇Reload Config。您現(xiàn)在應(yīng)該發(fā)現(xiàn)按?+ ?+ ctrl+ W將在屏幕上顯示Hello World通知。
這里發(fā)生的是我們告訴Hammerspoon將匿名函數(shù)綁定到特定的熱鍵。熱鍵是通過(guò)修飾鍵的表(指定?,?并且ctrl在這種情況下)和正常鍵(W)。匿名函數(shù)只是一個(gè)沒(méi)有名稱(chēng)的函數(shù)。我們可以使用名稱(chēng)單獨(dú)定義警報(bào)功能并將該名稱(chēng)傳遞給hs.hotkey.bind(),但是Lua可以很容易地定義內(nèi)聯(lián)函數(shù)。
發(fā)燒友你好世界
雖然hs.alert很有用,但您可能更喜歡使用OS X本機(jī)通知,只需將上一個(gè)示例修改為:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "W", function()
hs.notify.new({title="Hammerspoon", informativeText="Hello World"}):send()
end)
窗戶(hù)運(yùn)動(dòng)簡(jiǎn)介
使用Hammerspoon可以做的最直接有用的事情之一是操縱屏幕上的窗口。我們將從一個(gè)簡(jiǎn)單的例子開(kāi)始,并構(gòu)建一個(gè)更復(fù)雜的東西。
將以下內(nèi)容添加到您的init.lua:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "H", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x - 10
win:setFrame(f)
end)
這將導(dǎo)致?+ ?+ ctrl+ H使當(dāng)前聚焦的窗口向左移動(dòng)10個(gè)像素。您可以看到我們獲取當(dāng)前聚焦的窗口然后獲取其幀。這描述了窗口的位置和大小。然后我們可以修改框架并使用它將其應(yīng)用回窗口setFrame()。
快速結(jié)束冒號(hào)語(yǔ)法
您可能已經(jīng)注意到,有時(shí)我們?cè)诤瘮?shù)調(diào)用中使用點(diǎn),有時(shí)我們使用冒號(hào)。冒號(hào)語(yǔ)法意味著您正在調(diào)用該對(duì)象的方法之一。它仍然是一個(gè)函數(shù)調(diào)用,但它隱式地將對(duì)象作為self參數(shù)傳遞給方法。
快速關(guān)注可變生命周期
Lua使用垃圾收集來(lái)清理其內(nèi)存使用情況 - 它認(rèn)為不再使用的任何對(duì)象將在未來(lái)的某個(gè)時(shí)刻被銷(xiāo)毀(確切地說(shuō),何時(shí),可能非常不可預(yù)測(cè),但它基于您的Lua代碼的活躍程度) 。
這意味著一旦函數(shù)/循環(huán)執(zhí)行完畢,只存在于函數(shù)/ loop / etc中的變量將可用于垃圾收集。這包括您的init.lua,它被認(rèn)為是在最后一行代碼運(yùn)行時(shí)完成的單個(gè)范圍。
如果您在自己中創(chuàng)建任何對(duì)象init.lua,則必須在變量中捕獲它們,否則將來(lái)會(huì)在某些時(shí)候以靜默方式銷(xiāo)毀它們。例如:
hs.pathwatcher.new(.....):start()
此處返回的對(duì)象(一個(gè)hs.pathwatcher對(duì)象)未被捕獲,因此只要init.lua完成,它就可用于垃圾收集。它可能不會(huì)在幾分鐘/幾小時(shí)后被銷(xiāo)毀,但是你會(huì)感到困惑,為什么你的pathwatcher沒(méi)有運(yùn)行。相反,這個(gè)版本將繼續(xù)存在,直到您重新加載配置,或退出Hammerspoon:
myWatcher = hs.pathwatcher.new(.....):start()
該myWatcher變量是一個(gè)全局變量,所以永遠(yuǎn)不會(huì)走出去的范圍。
關(guān)于變量的生命周期 - 在Console窗口中,每次鍵入一行并按Enter鍵時(shí),都會(huì)創(chuàng)建,執(zhí)行和完成不同的Lua范圍。這意味著local當(dāng)您按Enter鍵時(shí),在控制臺(tái)窗口中創(chuàng)建的變量將立即變得不可訪問(wèn),因?yàn)樗鼈兊姆秶殃P(guān)閉。
更復(fù)雜的窗口移動(dòng)
我們可以在簡(jiǎn)單的窗口移動(dòng)示例的基礎(chǔ)上構(gòu)建一組鍵盤(pán)快捷鍵,允許我們使用nethack移動(dòng)鍵在所有方向上移動(dòng)窗口:
y k u
h l
b j n
要做到這一點(diǎn),我們只需要hs.hotkey.bind()稍微不同的幀修改重復(fù)前一個(gè)調(diào)用:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Y", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x - 10
f.y = f.y - 10
win:setFrame(f)
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "K", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.y = f.y - 10
win:setFrame(f)
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "U", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x + 10
f.y = f.y - 10
win:setFrame(f)
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "H", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x - 10
win:setFrame(f)
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "L", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x + 10
win:setFrame(f)
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "B", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x - 10
f.y = f.y + 10
win:setFrame(f)
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "J", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.y = f.y + 10
win:setFrame(f)
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "N", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x + 10
f.y = f.y + 10
win:setFrame(f)
end)
試試看!
窗口大小
在本節(jié)中,我們將實(shí)現(xiàn)移動(dòng)窗口的常見(jiàn)窗口管理功能,使其占據(jù)屏幕的左半部分或右半部分,允許您為Productivity™平鋪兩個(gè)彼此相鄰的窗口。
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Left", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen()
local max = screen:frame()
f.x = max.x
f.y = max.y
f.w = max.w / 2
f.h = max.h
win:setFrame(f)
end)
這里我們將?+ ?+ ctrl+ ←(如左光標(biāo)鍵)綁定到將獲取聚焦窗口的函數(shù),然后獲取聚焦窗口所在的屏幕,獲取屏幕的框架(注意hs.screen.frame()不包括菜單欄)和停靠,看看hs.screen.fullFrame()你是否需要)并設(shè)置窗口的框架占據(jù)屏幕的左半部分。
為了解決這個(gè)問(wèn)題,我們將添加一個(gè)函數(shù)將窗口移動(dòng)到屏幕的右半部分:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Right", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen()
local max = screen:frame()
f.x = max.x + (max.w / 2)
f.y = max.y
f.w = max.w / 2
f.h = max.h
win:setFrame(f)
end)
這里一個(gè)很好的練習(xí)是看你現(xiàn)在是否可以為自己編寫(xiě)功能,將上/下光標(biāo)鍵綁定到分別調(diào)整窗口的上半部/下半部分。
多窗口布局
當(dāng)您想要保持多個(gè)應(yīng)用程序一直打開(kāi),并以特定方式安排其窗口時(shí),您可以使用hs.layout擴(kuò)展名:
local laptopScreen = "Color LCD"
local windowLayout = {
{"Safari", nil, laptopScreen, hs.layout.left50, nil, nil},
{"Mail", nil, laptopScreen, hs.layout.right50, nil, nil},
{"iTunes", "iTunes", laptopScreen, hs.layout.maximized, nil, nil},
{"iTunes", "MiniPlayer", laptopScreen, nil, nil, hs.geometry.rect(0, -48, 400, 48)},
}
hs.layout.apply(windowLayout)
為了解決這個(gè)問(wèn)題,我們首先在Mac上創(chuàng)建一個(gè)帶有主屏幕名稱(chēng)的變量。您可以:name()在hs.screen對(duì)象上使用該方法找到這些名稱(chēng)(例如hs.screen.allScreens()[1]:name(),在Hammerspoon控制臺(tái)中鍵入)。
然后,我們創(chuàng)建一個(gè)描述所需布局的表。表中的每個(gè)條目windowLayout都是另一個(gè)表,它選擇我們感興趣的窗口,并指定它們所需的位置和大小。
表格中的第一項(xiàng)是我們希望影響的應(yīng)用程序的名稱(chēng),第二項(xiàng)是我們希望影響的窗口的標(biāo)題。這些項(xiàng)目中的任何一項(xiàng)都可以nil,但不能兩者兼而有之。如果應(yīng)用程序名稱(chēng)是,nil那么我們將匹配所有應(yīng)用程序中的給定窗口標(biāo)題。如果窗口標(biāo)題項(xiàng)是,nil那么我們將匹配給定應(yīng)用程序的所有窗口。
第四,第五和第六項(xiàng)用于以不同方式描述匹配窗口的布局。只有這些項(xiàng)目中的一個(gè)可具有一個(gè)值,并且該值應(yīng)為包含四個(gè)項(xiàng)目,一個(gè)表x,y,w和h(水平位置,垂直位置,寬度和高度,分別地)。
第四項(xiàng)是將給予的矩形hs.window:moveToUnit()。的x,y,w,和h該矩形的值,是值之間0.0并且1.0,允許你位置的窗口作為顯示器的級(jí)分,而不必關(guān)心顯示器的精確分辨率(例如hs.layout.left50是一個(gè)預(yù)先定義的矩形{x=0, y=0, w=0.5, h=1})。
第五項(xiàng)是一個(gè)矩形,它將被賦予hs.window:setFrame()并應(yīng)該將位置/大小值指定為屏幕上的像素位置,但不考慮OS菜單欄和底座。
第六個(gè)項(xiàng)目類(lèi)似于第五個(gè)項(xiàng)目,但它確實(shí)考慮了操作系統(tǒng)菜單欄和??俊_@在上面的示例中顯示,它將iTunes Mini Player窗口置于屏幕的最左下方,即使底座在那里也是如此。請(qǐng)注意,我們使用hs.geometry.rect()輔助函數(shù)來(lái)構(gòu)造rect表,并且y值為負(fù),這意味著窗口的頂部應(yīng)該在顯示屏底部上方48像素處開(kāi)始。
這可能看起來(lái)是一組相當(dāng)復(fù)雜的選項(xiàng),但是值得花一些時(shí)間學(xué)習(xí),因?yàn)樗试S非常強(qiáng)大的窗口布局,特別是對(duì)系統(tǒng)事件的反應(yīng)(例如插入監(jiān)視器時(shí)屏幕數(shù)量的變化,或者甚至只需按一個(gè)特定的熱鍵即可恢復(fù)窗戶(hù)的健康狀況。
窗口過(guò)濾器
在某些上下文或應(yīng)用程序中綁定熱鍵而不是其他熱鍵不是很有用嗎?組織窗口并根據(jù)位置,大小,工作流程或其任何組合對(duì)事件做出反應(yīng)?極其通用的hs.window.filter模塊允許您使用過(guò)濾規(guī)則和事件監(jiān)視器創(chuàng)建復(fù)雜的窗口分組和行為。展示該模塊功能的最佳方式是通過(guò)示例。
將內(nèi)容從Safari復(fù)制并粘貼到Messages.app時(shí),所有鏈接都在不斷擴(kuò)展,使文本難以閱讀:
Thrushes make up the Turdidae, a family of passerine birds that occurs worldwide.
只有Safari / Messages對(duì)受此影響,而其他OS X應(yīng)用程序通常會(huì)毫發(fā)意外地復(fù)制和粘貼。在窗口過(guò)濾器的幫助下,這種煩惱得到了徹底的糾正:
local function cleanPasteboard()
local pb = hs.pasteboard.contentTypes()
local contains = hs.fnutils.contains
if contains(pb, "com.apple.webarchive") and contains(pb, "public.rtf") then
hs.pasteboard.setContents(hs.pasteboard.getContents())
end
end
local messagesWindowFilter = hs.window.filter.new(false):setAppFilter('Messages')
messagesWindowFilter:subscribe(hs.window.filter.windowFocused, cleanPasteboard)
cleanPasteboard在檢查粘貼板內(nèi)容元數(shù)據(jù)類(lèi)型后,該函數(shù)用純文本替換粘貼板上的Safari“富文本”。這確保了從Safari復(fù)制和粘貼圖像仍然有效。false默認(rèn)情況下,通過(guò)初始化來(lái)創(chuàng)建空窗口過(guò)濾器以排除所有窗口。添加了消息'appfilter',以便此窗口過(guò)濾器僅觀察消息窗口。然后我們訂閱windowfilter,以便cleanPasteboard每次Message窗口獲得焦點(diǎn)時(shí)都會(huì)調(diào)用它。當(dāng)某些窗口或應(yīng)用程序具有焦點(diǎn)時(shí),您可以類(lèi)似地啟用/禁用自定義熱鍵。
Windowfilters是動(dòng)態(tài)的,根據(jù)約束集在后臺(tái)自動(dòng)過(guò)濾。通過(guò)使用謂詞函數(shù)初始化windowfilter,您可以創(chuàng)建任意復(fù)雜的過(guò)濾規(guī)則:
local wf = hs.window.filter.new(function(win)
local fw = hs.window.focusedWindow()
return (
win:isStandard() and
win:application() == fw:application() and
win:screen() == fw:screen()
)
end)
此窗口過(guò)濾器包含所有標(biāo)準(zhǔn)(非隱藏,非模態(tài))窗口,這些窗口共享當(dāng)前聚焦窗口的應(yīng)用程序和屏幕。窗口過(guò)濾器不斷更新,以便當(dāng)前聚焦的窗口確定正在播放的窗口組。這可用于使用hs.window.switcher或您自己的自定義循環(huán)器在當(dāng)前屏幕上循環(huán)使用聚焦的應(yīng)用程序窗口。
簡(jiǎn)單的配置重新加載
您可能已經(jīng)注意到,在編輯配置時(shí),Reload Config每次進(jìn)行更改時(shí)都必須繼續(xù)選擇菜單項(xiàng),這有點(diǎn)煩人。我們可以通過(guò)添加鍵盤(pán)快捷鍵來(lái)重新加載配置來(lái)解決這個(gè)問(wèn)題:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "R", function()
hs.reload()
end)
hs.alert.show("Config loaded")
我們現(xiàn)在將?+ ?+ ?+ 綁定R到一個(gè)函數(shù),該函數(shù)將重新加載配置并在屏幕上顯示一個(gè)簡(jiǎn)單的警報(bào)橫幅幾秒鐘。
這里要提到的一個(gè)重要細(xì)節(jié)是hs.reload()破壞當(dāng)前的Lua解釋器并創(chuàng)建一個(gè)新解釋器。如果我們hs.reload()在此函數(shù)后面有任何代碼,則不會(huì)調(diào)用它。
花式配置重新加載
所以我們現(xiàn)在可以手動(dòng)強(qiáng)制重新加載,但是為什么我們甚至必須在計(jì)算機(jī)為我們做的時(shí)候這樣做呢?
以下代碼段引入了另一個(gè)新擴(kuò)展,pathwatcher它允許我們?cè)谖募臅r(shí)自動(dòng)重新加載配置:
function reloadConfig(files)
doReload = false
for _,file in pairs(files) do
if file:sub(-4) == ".lua" then
doReload = true
end
end
if doReload then
hs.reload()
end
end
myWatcher = hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/", reloadConfig):start()
hs.alert.show("Config loaded")
關(guān)于這個(gè)例子有幾件值得打破的事情。首先,我們使用一個(gè)Lua函數(shù)來(lái)調(diào)用系統(tǒng)環(huán)境中os.getenv()的HOME變量。這將告訴我們您的主目錄在哪里。然后我們使用Lua的..運(yùn)算符將該字符串連接到我們知道的配置文件路徑的/.hammerspoon/一部分。這為我們提供了Hammerspoon配置目錄的完整路徑。
然后,我們使用此路徑創(chuàng)建一個(gè)新的路徑觀察器,并告訴它reloadConfig在.hammerspoon目錄中發(fā)生更改時(shí)調(diào)用我們的函數(shù)。然后我們立即調(diào)用start()路徑觀察器對(duì)象,因此它開(kāi)始工作。
在這個(gè)例子中,我們將配置重新加載函數(shù)實(shí)現(xiàn)為一個(gè)單獨(dú)的命名函數(shù),我們將其作為參數(shù)傳遞給hs.pathwatcher.new()。無(wú)論是傳遞命名函數(shù)還是在線使用匿名函數(shù),完全取決于您。
此函數(shù)接受單個(gè)參數(shù),該參數(shù)是包含已修改的文件的所有名稱(chēng)的表。它迭代該列表并檢查每個(gè)文件以查看它是否以.lua。如果任何Lua文件已被更改,它會(huì)告訴Hammerspoon銷(xiāo)毀當(dāng)前的Lua設(shè)置并重新加載其配置文件。
使用Spoons重新加載智能配置
Hammerspoon支持Lua插件,我們稱(chēng)之為“Spoons”。它們?cè)试S任何人使用Hammerspoon的API構(gòu)建有用的功能,然后將其分發(fā)給其他人。
由于配置重新加載是許多用戶(hù)可能想要的東西,因此它是Spoon的理想候選者,并且在此處的官方Spoons存儲(chǔ)庫(kù)中存在一個(gè)。
首先,單擊Spoon網(wǎng)頁(yè)上的“下載”鏈接 - 這應(yīng)該下載Zip文件并將其解壓縮到您的Downloads文件夾,在該文件夾中將顯示一個(gè)勺子圖標(biāo)。打開(kāi)該文件,Hammerspoon將自動(dòng)導(dǎo)入Spoon ~/.hammerspoon/Spoons/。
然后將以下內(nèi)容添加到您的init.lua完成中:
hs.loadSpoon("ReloadConfiguration")
spoon.ReloadConfiguration:start()
與應(yīng)用程序菜單交互
有時(shí),自動(dòng)化某事的唯一方法是與應(yīng)用程序的GUI交互,這不是理想的,但通常需要完成某些事情。
為了說(shuō)明這一點(diǎn),我們將構(gòu)建一個(gè)熱鍵,在多個(gè)用戶(hù)代理字符串之間循環(huán)Safari(即它如何向Web服務(wù)器標(biāo)識(shí)自己)。要做到這一點(diǎn),你需要有Safari瀏覽器Develop啟用菜單,您可以通過(guò)勾選做Show Develop menu in menu bar在Safari→Preferences→Advanced。
function cycle_safari_agents()
hs.application.launchOrFocus("Safari")
local safari = hs.appfinder.appFromName("Safari")
local str_default = {"Develop", "User Agent", "Default (Automatically Chosen)"}
local str_ie10 = {"Develop", "User Agent", "Internet Explorer 10.0"}
local str_chrome = {"Develop", "User Agent", "Google Chrome — Windows"}
local default = safari:findMenuItem(str_default)
local ie10 = safari:findMenuItem(str_ie10)
local chrome = safari:findMenuItem(str_chrome)
if (default and default["ticked"]) then
safari:selectMenuItem(str_ie10)
hs.alert.show("IE10")
end
if (ie10 and ie10["ticked"]) then
safari:selectMenuItem(str_chrome)
hs.alert.show("Chrome")
end
if (chrome and chrome["ticked"]) then
safari:selectMenuItem(str_default)
hs.alert.show("Safari")
end
end
hs.hotkey.bind({"cmd", "alt", "ctrl"}, '7', cycle_safari_agents)
我們?cè)谶@里做的是首先啟動(dòng)Safari或?qū)⑵鋷У角懊妫ㄈ绻呀?jīng)運(yùn)行)。這是任何菜單交互中的重要步驟 - 通常會(huì)禁用當(dāng)前未關(guān)注的應(yīng)用程序的菜單。
然后我們使用了對(duì)Safari本身的引用hs.appfinder.appFromName()。使用此對(duì)象,我們可以搜索可用的菜單項(xiàng)并與它們進(jìn)行交互。具體來(lái)說(shuō),我們正在尋找三個(gè)用戶(hù)代理字符串的當(dāng)前狀態(tài)Develop→User Agent。然后我們檢查它們中的哪一個(gè)被勾選,然后選擇下一個(gè)。
因此,反復(fù)按?+ ?+ ?+ 7將在默認(rèn)用戶(hù)代理字符串,IE10用戶(hù)代理和Chrome用戶(hù)代理之間循環(huán)。每次,我們都會(huì)顯示一個(gè)簡(jiǎn)單的屏幕警報(bào),其中包含我們已循環(huán)訪問(wèn)的用戶(hù)代理的名稱(chēng)。
創(chuàng)建一個(gè)簡(jiǎn)單的菜單欄項(xiàng)目
許多Mac實(shí)用程序在系統(tǒng)菜單欄中放置一個(gè)小圖標(biāo)來(lái)顯示其狀態(tài)并讓您與它們進(jìn)行交互。我們將使用兩個(gè)Hammerspoon的擴(kuò)展來(lái)為流行的實(shí)用程序添加一個(gè)非常簡(jiǎn)單的替代品Caffeine。
caffeine = hs.menubar.new()
function setCaffeineDisplay(state)
if state then
caffeine:setTitle("AWAKE")
else
caffeine:setTitle("SLEEPY")
end
end
function caffeineClicked()
setCaffeineDisplay(hs.caffeinate.toggle("displayIdle"))
end
if caffeine then
caffeine:setClickCallback(caffeineClicked)
setCaffeineDisplay(hs.caffeinate.get("displayIdle"))
end
此代碼段將創(chuàng)建一個(gè)菜單欄項(xiàng),SLEEPY如果您的計(jì)算機(jī)在您不使用時(shí)允許其***睡眠狀態(tài),或者AWAKE它將拒絕睡眠,則會(huì)顯示該文本。的hs.caffeine擴(kuò)展提供以防止睡眠顯示的能力,但hs.menubar被提供的菜單欄項(xiàng)。
在這種情況下,我們創(chuàng)建菜單欄項(xiàng)并連接回調(diào)(在本例中caffeineClicked())以單擊菜單欄項(xiàng)上的事件。您還可以使用圖標(biāo)而不是文本,方法是在您的菜單欄對(duì)象中放置小圖像文件~/.hammerspoon/并使用該:setIcon()方法。有關(guān)此內(nèi)容hs.menubar的詳細(xì)信息,請(qǐng)參閱完整的API文檔。
對(duì)應(yīng)用程序事件做出反應(yīng)
使用hs.application.watcher回調(diào),我們可以對(duì)各種應(yīng)用程序級(jí)事件做出反應(yīng),例如正在啟動(dòng),退出,隱藏和激活的應(yīng)用程序。
我們可以通過(guò)創(chuàng)建一個(gè)非常簡(jiǎn)單的回調(diào)來(lái)證明這一點(diǎn),這將確保當(dāng)您激活Finder應(yīng)用程序時(shí),它的所有窗口都將被帶到顯示器的前面。
function applicationWatcher(appName, eventType, appObject)
if (eventType == hs.application.watcher.activated) then
if (appName == "Finder") then
-- Bring all Finder windows forward when one gets activated
appObject:selectMenuItem({"Window", "Bring All to Front"})
end
end
end
appWatcher = hs.application.watcher.new(applicationWatcher)
appWatcher:start()
首先,我們定義一個(gè)接受三個(gè)參數(shù)的回調(diào)函數(shù),并在其中檢查觸發(fā)該函數(shù)的事件類(lèi)型是否是一個(gè)被激活的應(yīng)用程序。然后我們檢查被激活的應(yīng)用程序是否是Finder。如果是,我們選擇其菜單項(xiàng)將其所有窗口都放在前面。
然后,我們創(chuàng)建一個(gè)應(yīng)用程序觀察器對(duì)象,它將調(diào)用我們的函數(shù),并告訴它啟動(dòng)。
請(qǐng)注意,我們保留了對(duì)watcher對(duì)象的引用,而不是簡(jiǎn)單地調(diào)用hs.application.watcher.new(applicationWatcher):start()。這樣做的原因是,:stop()如果我們需要,我們可以稍后調(diào)用觀察者(例如,在重新加載我們的配置的函數(shù)中 - 有關(guān)如何自動(dòng)重新加載Hammerspoon配置的信息,請(qǐng)參閱Fancy Config Reloading示例)。
對(duì)wifi事件做出反應(yīng)
如果你使用MacBook,那么你家里可能有一個(gè)WiFi網(wǎng)絡(luò)。Hammerspoon在您到家并加入您的WiFi網(wǎng)絡(luò),或離家出走并離開(kāi)網(wǎng)絡(luò)時(shí)觸發(fā)事件非常簡(jiǎn)單。在這種情況下,我們將做一些簡(jiǎn)單的事情并調(diào)整MacBook的音量,使其在您離家時(shí)為零(保護(hù)您免受在咖啡店打開(kāi)MacBook并肆無(wú)忌憚地播放音樂(lè)的恥辱感)在家里玩?。?/p>
wifiWatcher = nil
homeSSID = "MyHomeNetwork"
lastSSID = hs.wifi.currentNetwork()
function ssidChangedCallback()
newSSID = hs.wifi.currentNetwork()
if newSSID == homeSSID and lastSSID ~= homeSSID then
-- We just joined our home WiFi network
hs.audiodevice.defaultOutputDevice():setVolume(25)
elseif newSSID ~= homeSSID and lastSSID == homeSSID then
-- We just departed our home WiFi network
hs.audiodevice.defaultOutputDevice():setVolume(0)
end
lastSSID = newSSID
end
wifiWatcher = hs.wifi.watcher.new(ssidChangedCallback)
wifiWatcher:start()
在這里,我們創(chuàng)建了一個(gè)回調(diào)函數(shù),將當(dāng)前WiFi網(wǎng)絡(luò)的名稱(chēng)與之前網(wǎng)絡(luò)的名稱(chēng)進(jìn)行比較,并檢查我們是否已從預(yù)定義的家庭網(wǎng)絡(luò)遷移到其他地方,反之亦然,然后用于hs.audiodevice調(diào)整系統(tǒng)容量。
對(duì)USB事件做出反應(yīng)
如果你有一件你希望能夠做出反應(yīng)的USB硬件,那么它就是你hs.usb.watcher的擴(kuò)展。在下面的示例中,我們將在插入掃描儀時(shí)自動(dòng)啟動(dòng)掃描儀軟件,然后在拔下掃描儀時(shí)終止軟件。
usbWatcher = nil
function usbDeviceCallback(data)
if (data["productName"] == "ScanSnap S1300i") then
if (data["eventType"] == "added") then
hs.application.launchOrFocus("ScanSnap Manager")
elseif (data["eventType"] == "removed") then
app = hs.appfinder.appFromName("ScanSnap Manager")
app:kill()
end
end
end
usbWatcher = hs.usb.watcher.new(usbDeviceCallback)
usbWatcher:start()
擊敗粘貼阻塞
您可能已經(jīng)注意到某些程序和網(wǎng)站非常努力阻止您粘貼密碼。他們似乎認(rèn)為它使它們更安全,但在高度加密的密碼管理器時(shí)代,這當(dāng)然是無(wú)稽之談。
幸運(yùn)的是,我們可以通過(guò)發(fā)出虛假鍵盤(pán)事件來(lái)鍵入剪貼板內(nèi)容來(lái)繞過(guò)它們的損壞:
hs.hotkey.bind({"cmd", "alt"}, "V", function() hs.eventtap.keyStrokes(hs.pasteboard.getContents()) end)
運(yùn)行AppleScript
有時(shí)您需要的自動(dòng)化被鎖定在一個(gè)應(yīng)用程序中,這似乎是不可能從Hammerspoon控制的,除了許多應(yīng)用程序通過(guò)AppleScript公開(kāi)它們的功能,Hammerspoon可以為您執(zhí)行:
ok,result = hs.applescript('tell Application "iTunes" to artist of the current track as string')
hs.alert.show(result)
這將要求iTunes詢(xún)問(wèn)當(dāng)前正在播放的曲目的藝術(shù)家,然后使用在屏幕上顯示該曲目hs.alert。
但是,在您急于開(kāi)始編寫(xiě)大量與iTunes相關(guān)的AppleScript之前,請(qǐng)查看本指南中的下一個(gè)條目。
控制iTunes / Spotify
使用hs.itunes和hs.spotify我們可以查詢(xún)/控制iTunes和Spotify的各個(gè)方面,例如,如果您需要在一個(gè)應(yīng)用程序和另一個(gè)應(yīng)用程序之間切換:
hs.itunes.pause()
hs.spotify.play()
hs.spotify.displayCurrentTrack()
在屏幕上繪圖
有時(shí)你找不到你的鼠標(biāo)指針。你確定你把它留在了某個(gè)地方,但它隱藏在你的一個(gè)顯示器上,擺動(dòng)鼠標(biāo)并沒(méi)有幫助你發(fā)現(xiàn)它。幸運(yùn)的是,我們可以查詢(xún)和控制鼠標(biāo)指針,我們可以在屏幕上繪制內(nèi)容,這意味著我們可以這樣做:
mouseCircle = nil
mouseCircleTimer = nil
function mouseHighlight()
-- Delete an existing highlight if it exists
if mouseCircle then
mouseCircle:delete()
if mouseCircleTimer then
mouseCircleTimer:stop()
end
end
-- Get the current co-ordinates of the mouse pointer
mousepoint = hs.mouse.getAbsolutePosition()
-- Prepare a big red circle around the mouse pointer
mouseCircle = hs.drawing.circle(hs.geometry.rect(mousepoint.x-40, mousepoint.y-40, 80, 80))
mouseCircle:setStrokeColor({["red"]=1,["blue"]=0,["green"]=0,["alpha"]=1})
mouseCircle:setFill(false)
mouseCircle:setStrokeWidth(5)
mouseCircle:show()
-- Set a timer to delete the circle after 3 seconds
mouseCircleTimer = hs.timer.doAfter(3, function() mouseCircle:delete() end)
end
hs.hotkey.bind({"cmd","alt","shift"}, "D", mouseHighlight)
目前支持幾種不同類(lèi)型的繪圖對(duì)象 - 線條,圓形,方框,文本和圖像。不同的圖紙類(lèi)型可以具有不同的屬性,這些屬性都在API文檔中完整記錄。
繪圖對(duì)象可以放在所有其他窗口的頂部,也可以放在桌面圖標(biāo)后面 - 這使得它們可以用于在屏幕頂部顯示上下文疊加層(例如鼠標(biāo)查找示例),并在所有窗口后面顯示更多永久性信息(例如人們使用GeekTool的各種狀態(tài)信息。
發(fā)送iMessage / SMS消息
coffeeShopWifi = "Baristartisan_Guest"
lastSSID = hs.wifi.currentNetwork()
wifiWatcher = nil
function ssidChanged()
newSSID = hs.wifi.currentNetwork()
if newSSID == coffeeShopWifi and lastSSID ~= coffeeShopWifi then
-- We have arrived at the coffee shop
hs.messages.iMessage("iphonefriend@hipstermail.com", "Hey! I'm at Baristartisan's, come join me!")
hs.messages.SMS("+1234567890", "Hey, you don't have an iPhone, but you should still come for a coffee")
end
end
wifiWatcher = hs.wifi.watcher.new(ssidChanged)
wifiWatcher:start()
正如您無(wú)疑注意到的,只要您的Mac到達(dá)您最喜愛(ài)的時(shí)尚咖啡店,這將向人們發(fā)送兩條消息。您需要配置OS X的消息應(yīng)用程序,并且可以發(fā)送iMessage和SMS(后者通過(guò)使用SMS Relay的iPhone)來(lái)實(shí)現(xiàn)此功能。
使用URL自動(dòng)化Hammerspoon
有時(shí)您需要自動(dòng)化自動(dòng)化工具,而Hammerspoon可以通過(guò)多種方式實(shí)現(xiàn)自動(dòng)化。我們?cè)谶@里介紹的第一種方式是使用URL。特別是,以hammerspoon://。開(kāi)頭的網(wǎng)址。鑒于這個(gè)簡(jiǎn)單的片段:
hs.urlevent.bind("someAlert", function(eventName, params)
hs.alert.show("Received someAlert")
end)
我們現(xiàn)在為一個(gè)名為的事件綁定了一個(gè)URL事件處理程序,該事件someAlert將顯示一些屏幕上的文本警報(bào)。要在終端中觸發(fā)此事件,請(qǐng)運(yùn)行open -g hammerspoon://someAlert。許多應(yīng)用程序都能夠打開(kāi)URL,因此這成為自動(dòng)化Hammerspoon采取某些行動(dòng)的一種非常簡(jiǎn)單的方法。有關(guān)此更具體(和復(fù)雜)的示例,請(qǐng)參閱下一節(jié)。請(qǐng)注意,該-g選項(xiàng)open會(huì)導(dǎo)致URL在后臺(tái)打開(kāi),以避免打開(kāi)Hammerspoon的控制臺(tái)窗口,或者讓它為鍵盤(pán)焦點(diǎn)。
具有Karabiner和URL的Hammerspoon的高級(jí)自動(dòng)化
注意:Karabiner目前不在macOS Sierra中工作。它的作者正在研究一個(gè)新版本。
在我們的第一個(gè)例子中,我們?cè)?jīng)hs.hotkey將鍵盤(pán)快捷鍵綁定到Lua函數(shù),這是Hammerspoon可以做的最有用的事情之一。但是,這些熱鍵是在OS X中使用Carbon API執(zhí)行的,這在理解鍵盤(pán)事件方面是相當(dāng)高的 - 例如,它無(wú)法區(qū)分?按下哪個(gè)鍵(因?yàn)橛袃蓚€(gè),一個(gè)在鍵盤(pán)左側(cè),右側(cè)一個(gè)),也不能綁定涉及Fn鍵的熱鍵。
一個(gè)能夠以非常低的水平理解這些鍵盤(pán)事件的應(yīng)用程序是Karabiner,它連接到OS X內(nèi)核以讀取來(lái)自鍵盤(pán)的原始事件。通常它用于將這些鍵事件重新映射到其他鍵事件(即更改鍵盤(pán)上鍵的行為),但是,它也可以將低級(jí)鍵事件轉(zhuǎn)換為更高級(jí)別的系統(tǒng)操作,例如執(zhí)行終端命令,或者打開(kāi)一個(gè)URL。
因此,我們可以結(jié)合Karabiner和Hammerspoon來(lái)執(zhí)行一些非常強(qiáng)大和靈活的熱鍵綁定。在這個(gè)例子中,我們將把一些鍵盤(pán)修飾符從鍵盤(pán)的右側(cè)綁定到Hammerspoon中的Lua函數(shù)。
首先,安裝Karabiner并打開(kāi)其配置應(yīng)用程序在Misc & Uninstall選項(xiàng)卡中,單擊Open private.xml。這將顯示一個(gè)Finder窗口,顯示一個(gè)名為的文件private.xml。右鍵單擊該文件并選擇Open With → TextEdit.app。您現(xiàn)在將看到TextEdit打開(kāi),顯示XML文檔。如果您之前從未使用過(guò)Karabiner,它將包含:
在該部分中,添加以下內(nèi)容:
KeyCode::VK_OPEN_URL_HS_test1
hammerspoon://test1?someParam=hello
Hammerspoon test1
hammerspoon.test1
--KeyToKey--
KeyCode::CURSOR_RIGHT, ModifierFlag::CO***AND_R | ModifierFlag::OPTION_R,
KeyCode::VK_OPEN_URL_HS_test1
打破這一點(diǎn),我們首先使用該部分為Karabiner定義一個(gè)URL 。這里需要注意的是,屬性必須以KeyCode::VK_OPEN_URL并且不應(yīng)包含任何空格開(kāi)頭。該選項(xiàng)意味著Karabiner將在不激活Hammerspoon的情況下打開(kāi)URL。幾乎沒(méi)有理由想要將焦點(diǎn)轉(zhuǎn)移到Hammerspoon,因此建議您始終使用此選項(xiàng)。
將URL定義為虛擬鍵碼后,我們告訴Karabiner聽(tīng)右手?,右手?和→光標(biāo)鍵。如果按下這些鍵,它將打開(kāi)URL hammerspoon://test1?someParam=hello。
保存private.xml文檔并關(guān)閉TextEdit?,F(xiàn)在,在Karabiner中,切換回Change Key選項(xiàng)卡并單擊Reload XML。假設(shè)您沒(méi)有收到任何錯(cuò)誤,請(qǐng)勾選旁邊的框Hammerspoon test1并配置重新映射。
在您的Hammerspoon中init.lua,添加以下內(nèi)容:
hs.urlevent.bind("test1", function(eventName, params)
if params["someParam"] then
hs.alert.show(params["someParam"])
end
end)
你現(xiàn)在在Hammerspoon中有一個(gè)Lua函數(shù),如果按下right ?+ right ?+ ,它將被觸發(fā)→。
Hammerspoon Mac最新版功能演示
我都用 Hammerspoon 做了些什么?
菜單欄顯示最近幾天天氣情況
· 請(qǐng)求免費(fèi)的天氣 API,在深圳這個(gè)多雨的城市里提醒我別忘記帶傘。

· 剪切板歷史記錄
· 記錄剪貼板歷史,點(diǎn)擊某一項(xiàng)再重新復(fù)制。

· 音量調(diào)節(jié)快捷鍵
· 當(dāng)我使用外接鍵盤(pán)時(shí),自定義快捷鍵
cmd + up/down
調(diào)節(jié)系統(tǒng)音量

· 窗口管理
· 快捷鍵實(shí)現(xiàn)二分屏、三分屏和全屏

· Wi-Fi 自動(dòng)腳本
· 根據(jù) Wi-Fi SSID 判斷是否在公司還是在家,例如在家里自動(dòng)掛載 NAS 服務(wù)器,如果在公司 sshfs 掛載服務(wù)器目錄等。 
· 藍(lán)牙
耳機(jī)自動(dòng)連接
· 電腦鎖屏?xí)r,自動(dòng)斷開(kāi)連接的藍(lán)牙耳機(jī),參考我的另一篇介紹。
· 輸入法自動(dòng)切換
· 在每個(gè) App 界面自動(dòng)切換成
搜狗輸入法
,配合搜狗輸入法自動(dòng)中英文切換,再也不用在系統(tǒng)默認(rèn)的英文輸入法和搜狗輸入法之間來(lái)回切換了。
· 定時(shí)自動(dòng)提交代碼
· 使用
hs.timer
定時(shí)器,定時(shí)自動(dòng)推送我的筆記和下載的電子書(shū)到 Github 倉(cāng)庫(kù)。
· USB 設(shè)備連接記錄
· 記錄插上你電腦的每一個(gè) USB 設(shè)備信息,凡插過(guò)必留記錄。
· 消息推送
· 推送任意消息提醒
· TTS 發(fā)聲
· 調(diào)用
say hello world
合成 TTS,模擬真人發(fā)音,讓 Mac 會(huì)說(shuō)話。
· 更多... (完全停不下來(lái)啊)
其他插件思路
· 番茄鐘
· 應(yīng)用搜索
· 桌面小部件

小編的話
Hammerspoon for Mac版一個(gè)小而簡(jiǎn)單的實(shí)用程序,Hammerspoon為您提供了一種快速簡(jiǎn)便的方式來(lái)與窗口,鼠標(biāo)指針,文件系統(tǒng)對(duì)象,電池,屏幕,鍵盤(pán)和剪貼板以及位置服務(wù),Wi-Fi和其他設(shè)備進(jìn)行交互。Hammerspoon是一個(gè)有用且必備的自動(dòng)化工具,適合任何愿意通過(guò)盡可能使用鍵盤(pán)專(zhuān)注于應(yīng)用程序交互來(lái)提高生產(chǎn)力的人員!
下載地址
人氣軟件

Cherry Studio AI桌面客戶(hù)端 v1.2.6 Mac官方中文版(Intel/Apple
Mac html5 插件 for mac V1.1 蘋(píng)果電腦版
BookReader for Mac(電子書(shū)閱讀軟件) v5.15 (7) 直裝激活版
郵箱大師 for MAC版 1.0 官方蘋(píng)果電腦版
ps濾鏡合集(Perfect Photo Suite 9 Premium Edition) for Mac 蘋(píng)
Hardware Monitor for Mac(硬件檢測(cè)軟件) v5.2 蘋(píng)果電腦版
InsomniaX for mac V2.1.6 蘋(píng)果電腦版
FinalShell(SSH工具) v4.5.12 Mac 蘋(píng)果電腦最新版
Gifrocket for mac(視頻轉(zhuǎn)換為gif圖片) V0.1.2 蘋(píng)果電腦版
Dynamic Wallpaper Enginer for Mac 動(dòng)態(tài)壁紙 v17.5 中文版
相關(guān)文章
Deskflow(鍵盤(pán)鼠標(biāo)共享工具) v1.21.2 蘋(píng)果電腦版 支持m1芯片Deskflow mac版是一款免費(fèi)且開(kāi)源的多設(shè)備鍵盤(pán)鼠標(biāo)共享工具,通過(guò)Deskflow,您的鍵盤(pán)和鼠標(biāo)可以在多臺(tái)設(shè)備間自由切換,功能堪比“軟件版KVM切換器”...
Deskflow for mac(鍵盤(pán)鼠標(biāo)共享工具) v1.21.2 蘋(píng)果電腦版Deskflow mac版是一款免費(fèi)且開(kāi)源的多設(shè)備鍵盤(pán)鼠標(biāo)共享工具,通過(guò)Deskflow,您的鍵盤(pán)和鼠標(biāo)可以在多臺(tái)設(shè)備間自由切換,功能堪比“軟件版KVM切換器”...
Uotan Toolbox(柚壇刷機(jī)工具箱) v3.3.5 Mac官方免費(fèi)版Uotan Toolbox(柚壇工具箱)是一款基于C#語(yǔ)言開(kāi)發(fā)的開(kāi)源圖形用戶(hù)界面(GUI)程序,專(zhuān)為滿足刷機(jī)愛(ài)好者的需求而設(shè)計(jì),它集成了多種必要的刷機(jī)工具,旨在簡(jiǎn)化刷機(jī)流程,讓玩機(jī)...
DockDoor 窗口切換快速預(yù)覽小工具 v1.2.9 蘋(píng)果電腦版DockDoor是一款免費(fèi)開(kāi)源專(zhuān)為MAC打造的dock欄窗口預(yù)覽及切換小工具,采用Swift 和 SwiftUI開(kāi)發(fā),引入跟Windows系統(tǒng)一樣的窗口預(yù)覽體驗(yàn)...
LinkAndroid(安卓電腦互聯(lián)助手) v0.6.0 inter/Apple芯片 Mac官方免費(fèi)版LinkAndroid 是一款專(zhuān)為安卓設(shè)備與電腦連接設(shè)計(jì)的全能手機(jī)連接助手,方便快捷的連接 Android 和電腦,連接手機(jī)后可投屏、GIF/MP4錄屏、截屏、文件管理、手機(jī)操作等功能...
Cherry Studio AI桌面客戶(hù)端 v1.2.6 Mac官方中文版(Intel/Apple Silicon)Cherry Studio 是一個(gè)支持多款人工智能大語(yǔ)言模型的桌面客戶(hù)端,可以快速切換不同的模型回答問(wèn)題,開(kāi)源免費(fèi),Cherry Studio 支持多款國(guó)內(nèi)外最先進(jìn)的AI大語(yǔ)言模型,AI 響應(yīng)...
下載聲明
☉ 解壓密碼:www.dbjr.com.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
☉ 如果這個(gè)軟件總是不能下載的請(qǐng)?jiān)谠u(píng)論中留言,我們會(huì)盡快修復(fù),謝謝!
☉ 下載本站資源,如果服務(wù)器暫不能下載請(qǐng)過(guò)一段時(shí)間重試!或者多試試幾個(gè)下載地址
☉ 如果遇到什么問(wèn)題,請(qǐng)?jiān)u論留言,我們定會(huì)解決問(wèn)題,謝謝大家支持!
☉ 本站提供的一些商業(yè)軟件是供學(xué)習(xí)研究之用,如用于商業(yè)用途,請(qǐng)購(gòu)買(mǎi)正版。
☉ 本站提供的Hammerspoon for Mac(OS X桌面自動(dòng)化神器) v0.9.95 蘋(píng)果電腦版資源來(lái)源互聯(lián)網(wǎng),版權(quán)歸該下載資源的合法擁有者所有。



