OS X桌面自动化神器:Hammerspoon for Mac

hammerspoon mac版是一款简单而强大的macOS自动化工具,它为您提供了一个合适的环境,用于编写Lua代码脚本,用于设置可以使用全局热键组合触发的自动操作。简而言之,Hammerspoon将系统API桥接到一个简单的Lua脚本引擎,这意味着它使您能够编写Lua脚本以自动执行各种自动化任务。

原文链接:https://mac.orsoon.com/Mac/163637.html(附安装下载教程)

OS X桌面自动化神器:Hammerspoon for Mac_第1张图片

Hammerspoon Mac最新版软件介绍

Hammerspoon是OS X的桌面自动化工具。它将各种系统级API连接到Lua脚本引擎,通过编写Lua脚本,您可以对系统产生强大的影响。
这很简单的描述。您可以编写与应用程序,Windows,鼠标指针,文件系统对象,音频设备,电池,屏幕,低级键盘/鼠标事件,剪贴板,定位服务,WiFi等等的OS X API进行交互的Lua代码。通常,您将在Lua中编写一个将事件连接到操作的配置文件。您可能希望将键盘快捷键绑定到一系列窗口操作或applescript。当您的WiFi接口连接到家庭网络时,您可能需要运行一系列命令。当您的电池电量低于一定百分比时,您可能希望显示警报。你可能想做一些疯狂的事情,就像iTunes在Mac侦测到你在巴黎时自动开始播放的那样。

OS X桌面自动化神器:Hammerspoon for Mac_第2张图片

Hammerspoon for Mac功能介绍

你好,世界

所有优秀的编程教程都以某种类型的Hello World示例开头,因此我们将使用Hammerspoon绑定键盘热键来演示通过简单通知说出Hello World。

在您的init.lua位置以下:

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "W", function()
 hs.alert.show("Hello World!")
end)

然后保存文件,单击Hammerspoon菜单栏图标并选择Reload Config。您现在应该发现按⌘+ ⌥+ ctrl+ W将在屏幕上显示Hello World通知。

这里发生的是我们告诉Hammerspoon将匿名函数绑定到特定的热键。热键是通过修饰键的表(指定⌘,⌥并且ctrl在这种情况下)和正常键(W)。匿名函数只是一个没有名称的函数。我们可以使用名称单独定义警报功能并将该名称传递给hs.hotkey.bind(),但是Lua可以很容易地定义内联函数。

发烧友你好世界

虽然hs.alert很有用,但您可能更喜欢使用OS X本机通知,只需将上一个示例修改为:

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "W", function()
 hs.notify.new({title="Hammerspoon", informativeText="Hello World"}):send()
end)

窗户运动简介

使用Hammerspoon可以做的最直接有用的事情之一是操纵屏幕上的窗口。我们将从一个简单的例子开始,并构建一个更复杂的东西。

将以下内容添加到您的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)

这将导致⌘+ ⌥+ ctrl+ H使当前聚焦的窗口向左移动10个像素。您可以看到我们获取当前聚焦的窗口然后获取其帧。这描述了窗口的位置和大小。然后我们可以修改框架并使用它将其应用回窗口setFrame()

快速结束冒号语法

您可能已经注意到,有时我们在函数调用中使用点,有时我们使用冒号。冒号语法意味着您正在调用该对象的方法之一。它仍然是一个函数调用,但它隐式地将对象作为self参数传递给方法。

快速关注可变生命周期

Lua使用垃圾收集来清理其内存使用情况 - 它认为不再使用的任何对象将在未来的某个时刻被销毁(确切地说,何时,可能非常不可预测,但它基于您的Lua代码的活跃程度) 。

这意味着一旦函数/循环执行完毕,只存在于函数/ loop / etc中的变量将可用于垃圾收集。这包括您的init.lua,它被认为是在最后一行代码运行时完成的单个范围。

如果您在自己中创建任何对象init.lua,则必须在变量中捕获它们,否则将来会在某些时候以静默方式销毁它们。例如:

hs.pathwatcher.new(.....):start()

此处返回的对象(一个hs.pathwatcher对象)未被捕获,因此只要init.lua完成,它就可用于垃圾收集。它可能不会在几分钟/几小时后被销毁,但是你会感到困惑,为什么你的pathwatcher没有运行。相反,这个版本将继续存在,直到您重新加载配置,或退出Hammerspoon:

myWatcher = hs.pathwatcher.new(.....):start()

myWatcher变量是一个全局变量,所以永远不会走出去的范围。

关于变量的生命周期 - 在Console窗口中,每次键入一行并按Enter键时,都会创建,执行和完成不同的Lua范围。这意味着local当您按Enter键时,在控制台窗口中创建的变量将立即变得不可访问,因为它们的范围已关闭。

更复杂的窗口移动

我们可以在简单的窗口移动示例的基础上构建一组键盘快捷键,允许我们使用nethack移动键在所有方向上移动窗口:

y k u
h l
b j n

要做到这一点,我们只需要hs.hotkey.bind()稍微不同的帧修改重复前一个调用:

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", "

你可能感兴趣的:(小程序,Mac,macos,桌面自动化)