推荐一个 MacOS 上用了就无法自拔的 App
Hammerspoon!
Hammerspoon 是 MacOS 上的自动化工具,许多介绍 Hammerspoon 的文章都主要介绍了它是一个窗口管理工具,但是 Hammerspoon 能做到的远远不仅如此。
Hammerspoon 开源、免费和支持插件,将大多数系统层面的接口封装成了 Lua API,这就让这把小锤子在 MacOS 上近乎无所不能,可玩性极高。
剪切板历史记录
音量调节快捷键
当我使用外接键盘时,自定义快捷键 cmd + up/down
调节系统音量
窗口管理
Wi-Fi 自动脚本
蓝牙耳机自动连接
输入法自动切换
定时自动提交代码
hs.timer
定时器,定时自动推送我的笔记和下载的电子书到 Github 仓库。USB 设备连接记录
消息推送
TTS 发声
say hello world
合成 TTS,模拟真人发音,让 Mac 会说话。更多... (完全停不下来啊)
Hammerspoon 已经将与 MacOS 之间的系统交互封装成了 Lua 的 API,配置 ~/.hammerspoon/init.lua
脚本可以与系统进行交互,只需要了解一些基本的 Lua 语法,就可以 Happy Hacking 了。
如果你懒得配置,可以参考我的配置,
已经完全停不下来了,Hammerspoon 每天至少省下了 30 分钟的时间 😀⏱
101
cuixiao603 2019-04-09 21:59:26 +08:00
@kwGao 一样问题
|
102
letmeformatyou 2019-04-09 22:04:42 +08:00
不错,下载下来研究一下
|
103
ladypxy 2019-04-09 22:07:00 +08:00 via iPhone ![]() 用了 mac 才知道,窗口管理真是一坨屎
|
![]() |
104
MrUser 2019-04-09 22:09:31 +08:00
用的清歌输入法,怎么替换 ime.lua 中的搜狗?
如何获得 APP 的包名? |
![]() |
105
rppig42 2019-04-09 22:16:00 +08:00
|
![]() |
106
easternslope OP ![]() @MrUser 我这里加载了一个快捷键调试函数,ctl+cmd+. 就可以获得当前应用 id
https://github.com/wangshub/hammerspoon-config/blob/master/hotkey/hotkey.lua |
![]() |
107
martint028 2019-04-09 22:47:43 +08:00
又可以来个新语言了
|
![]() |
108
hujianxin 2019-04-09 22:57:27 +08:00
这个真心不错,不过楼主的几个功能都是 macos 自带的
|
109
luozhiyun 2019-04-09 23:03:34 +08:00
自动挂载 NAS 服务器 的代码是什么呀?可以发一下吗?
|
![]() |
110
xiubin 2019-04-09 23:06:08 +08:00 via iPhone
输入法切换和搜狗自带的 app 切换有什么区别吗?
|
![]() |
111
ligyxy 2019-04-09 23:13:23 +08:00
不错,看来可以淘汰 ControlPlane 了
|
![]() |
112
Soutxx 2019-04-09 23:55:26 +08:00 via iPhone
mac 小白一个 能新建文件吗? txt 的
|
113
ShuoHui 2019-04-10 00:18:40 +08:00 via iPhone
哇看起来很不错
|
![]() |
114
djyde 2019-04-10 00:21:42 +08:00
感谢分享
|
![]() |
115
vjnjc 2019-04-10 01:05:52 +08:00 via Android
看起来不错,明天上班去配一个
|
![]() |
116
lxml 2019-04-10 01:34:29 +08:00
感觉是不是支持 Js 好一些,Lua 还是太小众了耶
|
![]() |
117
logozy 2019-04-10 08:57:09 +08:00 via Android
好东西
|
118
Zchary 2019-04-10 09:21:05 +08:00 via iPhone
活久见,估计我 mbp 上可以卸载至少 5 款软件。
|
![]() |
119
rppig42 2019-04-10 09:44:43 +08:00
@yangg 昨天半夜想到个方法,logout 就行了...写了个脚本亲测有效
https://gist.github.com/rppig42/eb20337790cf17bb0d2c664d52351d5d |
![]() |
120
easternslope OP @lxml 我也是头一回接触 Lua,用起来很容易上手哦
|
![]() |
121
TheLamb 2019-04-10 10:20:13 +08:00
感觉有点意思的 app,就差一台 mbp 了
|
123
feYAN7 2019-04-10 10:31:47 +08:00
@easternslope 楼主你截图的字体怎么安装啊
|
![]() |
124
anonym233 2019-04-10 10:32:04 +08:00
感谢推荐,回去试试
|
125
jjww 2019-04-10 10:33:45 +08:00
|
126
zealinux 2019-04-10 10:45:28 +08:00
我想要个功能,能不能 切换 SS 梯子?
我同时使用两三个个梯子, 但是有时某个梯子不好用, 我想切换一下。 每天都要切换个两三次。 |
127
Heanes 2019-04-10 10:55:30 +08:00
看着感觉不错,准备试下
|
![]() |
128
IBNOTW 2019-04-10 11:01:54 +08:00
「 Hammerspoon 每天至少省下了 30 分钟的时间」然后用这省下来的 30 分钟鼓捣各种新奇古怪的用法,不能自拔😂
|
![]() |
129
easternslope OP |
![]() |
130
yuanshuai1995 2019-04-10 11:08:32 +08:00
收藏了,等我买笔记本之后再来看
|
![]() |
131
easternslope OP @zealinux 嗯嗯,记下了,我也想要这个功能,调研一下有没有 ss 客户端支持的
|
![]() |
132
easternslope OP |
133
H0H 2019-04-10 11:13:33 +08:00
兄弟,你列举的这么多其实平时使用频率并不算高的场景,手动切换也没多麻烦。这种自动化脚本,你调试脚本+长期维护要花多少时间?
我最开始用电脑时,也是狂记快捷键,现在 Win 系统下也就能记住 Win+R,Mac 下基本都是触摸板点点点。其实效率也没降低多少 |
134
feYAN7 2019-04-10 11:13:53 +08:00
@easternslope 安装好了,谢谢楼主
|
![]() |
135
easternslope OP @H0H 这其实是一些启发性的示例而已,纯属个人习惯,当一件事情需要我重复做 3 次我就会考虑用代码解决,而这花费的时间对我来说是相同甚至是更少的。并且可以从中获得一些小乐趣。:)
|
![]() |
137
MrUser 2019-04-10 11:38:22 +08:00
LZ 能写个 hs.location 进入某个范围后干点什么事的示例么?官方的 API 手册看不太懂
@easternslope |
138
H0H 2019-04-10 11:58:47 +08:00
@easternslope 我自己也是开发人员出身,以前也非常喜欢玩这些东西。后来发现这些自动化的东西,其实花的时间要比手工方式更多。所以我现在自动化的东西,基本上要求为『一次配置,永远运行』,如果达不到这点那就拆分成『部分操作一次配置永远运行+其他操作手工进行』。
所以现在家庭网络只有 Samba、NFS、FTP、TimeMachine 这类已经问世 n 年并且协议功能以及足够完善足够稳定的东西,我才考虑配置后日常使用,新奇的东西坚决不用。 日常个人照片备份,也只是写个简单工具抽取照片中 exif 信息然后按月分类到不同文件夹。但往自己真实归档目录拷贝时,依然选择手工方式,以免自动化方式有 bug 导致老照片被覆盖。 个人数据在多个归档磁盘同步时,只是选择 BeyondCompare 作为辅助,但同步操作依然是人工确认后点击复制。 |
![]() |
139
easternslope OP @H0H Cool 完全赞同:一次配置,一劳永逸。平时有很多重复性工作需要安排,所以造了很多工具和脚本来解决自己的问题,省下了很多时间,单纯的为了折腾而折腾实在有点无用功。
|
![]() |
140
dany813 2019-04-10 13:14:02 +08:00
收藏
|
141
cuixiao603 2019-04-10 13:17:03 +08:00
|
![]() |
142
yoohwzy 2019-04-10 13:46:05 +08:00
借着帖子问一下, Hammerspoon 的两种 watcher:start() 哪种更好一些, 还是没有区别, 抑或是有其它更好的写法?
https://pastebin.com/8uj3RkVd 第一种是两个不同的功能, start 两个 watcher. 第二种是将新建 fun, 汇聚两个功能函数, 然后 start 一个 watcher. |
![]() |
143
firhome 2019-04-10 14:08:34 +08:00
楼主,你的自动提交 git 和 拉取 git 的 .sh 可以提供一下吗?
|
![]() |
144
ahonn 2019-04-10 14:20:03 +08:00
有意思,自己写了个窗口管理脚本 https://github.com/ahonn/dotfiles/blob/master/hammerspoon/modules/window.lua
还是这种能够深度按自己需求定制的软件给力啊 |
![]() |
145
ahonn 2019-04-10 14:21:14 +08:00
|
![]() |
146
phpcyy 2019-04-10 15:03:23 +08:00
@yangg
我发现我也有这个需求,看下下边的可以不 function caffeinateCallback(eventType) if (eventType == hs.caffeinate.watcher.screensDidSleep) then timer = hs.timer.doAfter(300, function() local wechat = hs.application.get("WeChat") wechat:kill() end) print("timer started") elseif (eventType == hs.caffeinate.watcher.screensDidWake) then timer:stop() print("timer canceled") elseif (eventType == hs.caffeinate.watcher.screensDidLock) then print("lock") elseif (eventType == hs.caffeinate.watcher.screensDidUnlock) then print("unlock") end end caffeinateWatcher = hs.caffeinate.watcher.new(caffeinateCallback) caffeinateWatcher:start() |
147
Volekingsg 2019-04-10 16:55:45 +08:00
当初拉我入 Hammerspoon 坑的是这篇文章的题图,通过鼠标滑动一个建立一个 iTerm2 的窗口,酷爆了,虽然后来发现还是 Hotkey Window 方便🤣
https://blog.theodo.fr/2018/03/making-runtime-funtime-hammerspoon/ |
![]() |
148
circleee 2019-04-10 17:33:22 +08:00
厉害
|
![]() |
149
EINDEX 2019-04-10 20:26:31 +08:00 via iPhone
可以实现状态栏 文字分两行吗
|
![]() |
150
nobody123123 2019-04-11 09:38:06 +08:00
@ladypxy 这话真不假,装了一堆窗口管理插件用起来还是屎一样难受。为了贪念原生的命令行和 Cmd 快捷键。 默默忍受 3 年了
|
![]() |
151
superzzy 2019-04-11 10:18:51 +08:00
collection list
|
![]() |
152
biabia123456 2019-04-12 08:59:46 +08:00 via iPhone
已搞定家里 WiFi 自动设置指定网关 公司 WiFi 自动设置指定 ip 其余默认 DHCP 美滋滋
|
153
cooooler 2019-05-02 23:21:32 +08:00
自动切换输入法在我这无效
|
![]() |
154
zuorn 2019-06-29 11:33:29 +08:00
真的爱了,相见恨晚。
|
![]() |
155
LudwigWS 2019-08-12 13:41:06 +08:00
Mark 一下,参考学习
|
![]() |
156
MrUser 2019-11-28 17:08:54 +08:00
|