V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
easternslope
V2EX  ›  程序员

推荐一个 MacOS 上用了就无法自拔的神器 [Hammerspoon]

  easternslope ·
wangshub · 2019-04-09 10:27:30 +08:00 · 34250 次点击
这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。

推荐一个 MacOS 上用了就无法自拔的 App

Hammerspoon

Hammerspoon 是 MacOS 上的自动化工具,许多介绍 Hammerspoon 的文章都主要介绍了它是一个窗口管理工具,但是 Hammerspoon 能做到的远远不仅如此。

Hammerspoon 开源、免费和支持插件,将大多数系统层面的接口封装成了 Lua API,这就让这把小锤子在 MacOS 上近乎无所不能,可玩性极高

我都用 Hammerspoon 做了些什么?

  • 菜单栏显示最近几天天气情况
    • 参考示例
    • 请求免费的天气 API,在深圳这个多雨的城市里提醒我别忘记带伞。
  • 剪切板历史记录

    • 参考示例
    • 记录剪贴板历史,点击某一项再重新复制。
  • 音量调节快捷键

    • 参考示例

    • 当我使用外接键盘时,自定义快捷键 cmd + up/down 调节系统音量

  • 窗口管理

    • 参考示例
    • 快捷键实现二分屏、三分屏和全屏
  • Wi-Fi 自动脚本

    • 参考示例
    • 根据 Wi-Fi SSID 判断是否在公司还是在家,例如在家里自动挂载 NAS 服务器,如果在公司 sshfs 挂载服务器目录等。
  • 蓝牙耳机自动连接

  • 输入法自动切换

    • 参考示例
    • 在每个 App 界面自动切换成搜狗输入法,配合搜狗输入法自动中英文切换,再也不用在系统默认的英文输入法和搜狗输入法之间来回切换了。
  • 定时自动提交代码

    • 参考示例
    • 使用 hs.timer 定时器,定时自动推送我的笔记和下载的电子书到 Github 仓库。
  • USB 设备连接记录

    • 参考示例
    • 记录插上你电脑的每一个 USB 设备信息,凡插过必留记录。
  • 消息推送

  • TTS 发声

    • 参考示例
    • 调用 say hello world 合成 TTS,模拟真人发音,让 Mac 会说话。
  • 更多... (完全停不下来啊)

其他插件思路

  • 番茄钟
  • 应用搜索
  • 桌面小部件
  • ...

使用入门

Hammerspoon 已经将与 MacOS 之间的系统交互封装成了 Lua 的 API,配置 ~/.hammerspoon/init.lua 脚本可以与系统进行交互,只需要了解一些基本的 Lua 语法,就可以 Happy Hacking 了。

我的参考配置

如果你懒得配置,可以参考我的配置,

wangshub/hammerspoon-config

最后

已经完全停不下来了,Hammerspoon 每天至少省下了 30 分钟的时间 😀⏱

156 条回复    2019-11-28 17:08:54 +08:00
1  2  
jiangbingo
    1
jiangbingo  
   2019-04-09 10:37:51 +08:00
看起来不错
daben1990
    2
daben1990  
   2019-04-09 10:39:15 +08:00
厉害了,
holy_sin
    3
holy_sin  
   2019-04-09 10:42:46 +08:00
有点像 Alfred
Mirage09
    4
Mirage09  
   2019-04-09 10:44:18 +08:00 via iPhone   ❤️ 1
用很久了,根据不同软件自动切换输入法。
easternslope
    5
easternslope  
OP
   2019-04-09 10:46:51 +08:00
@holy_sin Alfred 和 Hammerspoon 都在重度使用,个人使用下来感觉,Alfred 更适合主动触发和查询事件,而 Hammerspoon 更适合定时任务和注册事件回调触发一些自动脚本
fyooo
    6
fyooo  
   2019-04-09 10:47:31 +08:00
收藏+感谢
yangg
    7
yangg  
   2019-04-09 10:53:42 +08:00
想系统休眠时退出 微信不知道能做到么?因为电脑端登录时关了手机端的提醒,导致手机上收不到提醒。
easternslope
    8
easternslope  
OP
   2019-04-09 10:55:47 +08:00
@yangg

当然可以

参考我这段代码 https://github.com/wangshub/hammerspoon-config/tree/master/headphone

休眠或者锁屏状态自动退出和启动应用
jpdev
    9
jpdev  
   2019-04-09 10:58:46 +08:00 via iPhone
感觉功能很类似一款正准备买的 app,能禁止待机不呢?
FunnyCodingXu
    10
FunnyCodingXu  
   2019-04-09 11:00:54 +08:00
看起来不错
easternslope
    11
easternslope  
OP
   2019-04-09 11:09:37 +08:00
@jpdev 哈哈,可以禁止待机,参考官方文档的这里 https://www.hammerspoon.org/docs/hs.caffeinate.html
lzs5240
    12
lzs5240  
   2019-04-09 11:16:35 +08:00
楼主的 zsh 美化好漂亮, 发一下?
ffkjjj
    13
ffkjjj  
   2019-04-09 11:19:06 +08:00
不错不错
OrangeM21
    14
OrangeM21  
   2019-04-09 11:20:18 +08:00
收藏 感谢
jsondog
    15
jsondog  
   2019-04-09 11:21:37 +08:00
炫酷
MuscleOf2016
    16
MuscleOf2016  
   2019-04-09 11:23:59 +08:00
那么 win 上有类似的吗
Tomorrowxxy
    17
Tomorrowxxy  
   2019-04-09 11:28:27 +08:00   ❤️ 1
好牛逼的样子,我先去买个 mac
easternslope
    18
easternslope  
OP
   2019-04-09 11:28:57 +08:00
@lzs5240 满足你! 刚开源了 https://github.com/wangshub/dotfile
easternslope
    19
easternslope  
OP
   2019-04-09 11:29:35 +08:00
@Tomorrowxxy 我在这儿等你
yangg
    20
yangg  
   2019-04-09 11:33:20 +08:00
@easternslope 不知道微信怎么退出 ,之前试过结束进程,微信登录不会掉。
tell application "WeChat"
quit
end tell
这个也找不到。
RuiQu
    21
RuiQu  
   2019-04-09 11:33:47 +08:00
哇哦 炫酷青年
youngitachi
    22
youngitachi  
   2019-04-09 11:33:54 +08:00 via Android
看起来不错
sarlanori
    23
sarlanori  
   2019-04-09 11:35:08 +08:00   ❤️ 1
@MuscleOf2016 AutoHotkey 吧
scukmh
    24
scukmh  
   2019-04-09 11:35:23 +08:00 via iPhone
刚刚一直想着用 alfred 实现相同的功能,因为不想装两个软件,但好像确实 alfred 不适合做这个。
Hilong
    25
Hilong  
   2019-04-09 11:37:44 +08:00 via Android
之前研究了下,自己写了一点小脚本,感觉发挥不了它的功能,就卸载了,看到楼主的分享,又想搞起来了
easing
    26
easing  
   2019-04-09 11:40:45 +08:00
我其实并不需要这些功能,但我还是点进来赞一下
easternslope
    27
easternslope  
OP
   2019-04-09 11:42:54 +08:00 via Android
@yangg
有两种方式都可以
1. hammerspoon 应用管理 api https://www.hammerspoon.org/docs/hs.application.html

2. hanmerspoon 去调用 applescript,再 applescript 里面调用 shell
yangg
    28
yangg  
   2019-04-09 11:43:04 +08:00
osascript -e 'tell application "WeChat" to quit' 用这个可以了,多谢,就是要花好久,不知道能不能行
mosesyou
    29
mosesyou  
   2019-04-09 11:44:14 +08:00
天气怎么切换城市呢,我这里使用你的脚本还是深圳的天气
hhyvs111
    30
hhyvs111  
   2019-04-09 11:44:48 +08:00 via iPhone
不错,马克了
easternslope
    31
easternslope  
OP
   2019-04-09 11:45:13 +08:00 via Android
@mosesyou 不用切换,api 根据请求的 ip 地址自动识别城市,你 curl 试试~
thet
    32
thet  
   2019-04-09 11:48:59 +08:00 via Android
看起来不错 回头试试看
sunocean
    33
sunocean  
   2019-04-09 11:51:03 +08:00 via iPhone
楼主我能转载到我的博客吗?
sunocean
    34
sunocean  
   2019-04-09 11:52:41 +08:00 via iPhone
话说楼主录屏用的什么软件啊?
easternslope
    35
easternslope  
OP
   2019-04-09 12:01:17 +08:00 via Android
@scukmh 之前和你也有同样的困惑,但是后来发现 Alfred + Hammersoon 一起才是双剑合璧
lishv2
    36
lishv2  
   2019-04-09 12:47:23 +08:00
插眼
goodryb
    37
goodryb  
   2019-04-09 12:48:13 +08:00
@sunocean #34 应该是自带的 QuickTime 吧
ATiGr
    38
ATiGr  
   2019-04-09 13:16:38 +08:00 via iPhone
很早以前就发现了这个神器,然而因为自己太菜鸡,没有写出来什么有用的东西,不得不放弃…… 看到 LZ …… 膜拜一下
gkiwi
    39
gkiwi  
   2019-04-09 13:19:36 +08:00
已经用起来了,楼主 clipboard 就是我最想要的~3ks !
18k
    40
18k  
   2019-04-09 13:34:37 +08:00
现在在用

Alfred 的 clipboard 管剪切板
manico 管窗口
万年历做日历和天气
滴答做番茄

LZ 这个一个打十个。。。
hihikm
    41
hihikm  
   2019-04-09 13:44:35 +08:00 via Android
确实方便
easternslope
    42
easternslope  
OP
   2019-04-09 13:44:37 +08:00
@18k 哈哈哈,习惯用脚本解决问题了 😂
cxtrinityy
    43
cxtrinityy  
   2019-04-09 13:44:50 +08:00
买了一个显示器后,写了几个脚本,外接屏的时候快速拖屏到另外一个屏幕,鼠标快速屏幕切换和外屏分辨率切换
easternslope
    44
easternslope  
OP
   2019-04-09 13:47:04 +08:00
magic3584
    45
magic3584  
   2019-04-09 13:47:21 +08:00
貌似类似 bitbar ? 不过这得用 lua 吗?
easternslope
    46
easternslope  
OP
   2019-04-09 13:50:13 +08:00
@magic3584

1. 可以实现 bitbar 的全部功能,得用 lua 来写插件,
2. 但是别担心,lua 的语法很简单,很值得一试,你可以先用我的配置,慢慢改
3. 我也是刚开始写 lua
cxtrinityy
    47
cxtrinityy  
   2019-04-09 13:55:41 +08:00
@easternslope 没有,mac 的,自己 xjb 写的,看了下官方文档折腾几下就出来了,写的时候还不知道是 lua,后来工作的时候用到 lua 才发现
kwGao
    48
kwGao  
   2019-04-09 14:41:07 +08:00
@easternslope 大神,我执行你给的 zsh 主题之后,zsh 报这个错误:
/Users/gao/.zshrc:source:28: no such file or directory: /Users/kaboom/.oh-my-zsh/oh-my-zsh.sh
ERROR: Can't find Ruby library file or shared library colorls
/Users/gao/.zshrc:source:33: no such file or directory: /tab_complete.sh
/Users/gao/.zshrc:source:51: no such file or directory: /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
/Users/gao/.zshrc:source:53: no such file or directory: /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
/Users/gao/.zshrc:77: command not found: pyenv
/Users/gao/.zshrc:78: command not found: pyenv
/Users/gao/.zshrc:80: command not found: fortune
这还有治不~
tyhunter
    49
tyhunter  
   2019-04-09 14:51:15 +08:00
准备试试,好像能解决一个痛点:
合盖睡眠后自动退出 Mac 微信,这样手机就会恢复推送
RockPoetTodd
    50
RockPoetTodd  
   2019-04-09 15:05:38 +08:00
不错 收藏了
easternslope
    51
easternslope  
OP
   2019-04-09 15:13:38 +08:00
@kwGao 这个和本主题无关,你在 https://github.com/wangshub/dotfile/issues 开个 Issue 吧 ~
Akikiki
    52
Akikiki  
   2019-04-09 15:15:56 +08:00
@kwGao。。。。 咱俩一样的问题
easternslope
    53
easternslope  
OP
   2019-04-09 15:17:57 +08:00
@tyhunter
- 这个倒是可以在 Hammerspoon 里面检测屏幕状态实现,参考 https://github.com/wangshub/hammerspoon-config/blob/master/headphone/headphone.lua

- 不过这个痛点我没注意,手机电脑同时登陆,微信里关闭手机静音,应该可以同时收到推送呀
Heavytiger
    54
Heavytiger  
   2019-04-09 15:22:45 +08:00
这个真心不错。
loading
    55
loading  
   2019-04-09 15:26:04 +08:00 via Android
似乎很不错,有时间看看。
byasm32
    56
byasm32  
   2019-04-09 15:26:18 +08:00
看起来很强大的样子,研究研究。。
blacklee
    57
blacklee  
   2019-04-09 15:27:59 +08:00
感谢分享。我造了一个显示 AQI 的菜单栏轮子。

https://gist.github.com/blacklee/7425b1f7b3e16acbfa9d1bbf04bdea28
ultimate010
    58
ultimate010  
   2019-04-09 15:39:19 +08:00
非常好用,顺便安利下一个好的 repo https://github.com/ashfinal/awesome-hammerspoon
dullwit
    59
dullwit  
   2019-04-09 15:43:06 +08:00
有获取当前时间的 api 吗?
g190875565
    60
g190875565  
   2019-04-09 15:43:37 +08:00
有点心动~
easternslope
    61
easternslope  
OP
   2019-04-09 15:46:05 +08:00   ❤️ 1
crbee
    62
crbee  
   2019-04-09 15:53:08 +08:00
插眼
stevenhawking
    63
stevenhawking  
   2019-04-09 15:57:04 +08:00
没有女朋友的你多 30 分钟有什么用
fsafdasfsdafsd
    64
fsafdasfsdafsd  
   2019-04-09 16:00:26 +08:00
@stevenhawking
扎心了
QMore
    65
QMore  
   2019-04-09 16:02:43 +08:00
很方便的样子,这有点类似于 iOS 上的捷径吧。
goodryb
    66
goodryb  
   2019-04-09 16:23:46 +08:00
天气 Mac 就自带了,剪切板还是 alfred 比较厉害,支持文件和图片

这个拿来做一些自动化或者事件触发脚本比较有用,比如来公司连上 WiFi 后就静音
freeznet
    67
freeznet  
   2019-04-09 16:37:17 +08:00
插眼感谢
hubahuba
    68
hubahuba  
   2019-04-09 16:41:00 +08:00
插眼感谢
Ginray
    69
Ginray  
   2019-04-09 16:42:47 +08:00
马……马来人.jpg
allonli
    70
allonli  
   2019-04-09 16:50:28 +08:00
会玩,zsh 主题效果真不错。
lzs5240
    71
lzs5240  
   2019-04-09 16:53:27 +08:00
@easternslope
字体好像安装有点问题, 所有图标全是 ?
是这个没安装好吗?
https://github.com/gabrielelana/awesome-terminal-fonts

安装说明安装了还是没弄好
godgc
    72
godgc  
   2019-04-09 16:55:01 +08:00
这个确实不错,定制化很强
cheeto
    73
cheeto  
   2019-04-09 16:56:00 +08:00
装完这个 zsh 之后我的 terminal 就挂掉了,现在正在疯狂 google 如何恢复 terminal
easternslope
    74
easternslope  
OP
   2019-04-09 16:57:05 +08:00   ❤️ 1
@lzs5240 配置 iterm 字体 Preference>profiles>Text>font

我的配置截图见

https://raw.githubusercontent.com/wangshub/image-hosting/master/img/20190409165546.png
easternslope
    75
easternslope  
OP
   2019-04-09 16:59:02 +08:00
@cheeto 别慌兄弟,里面有很多我使用第三方插件,你把 ~/.zshrc 里面你不需要的功能删掉就行,如果只是对主题配色感兴趣的话,可以参考我的方案
kylix
    76
kylix  
   2019-04-09 17:02:08 +08:00
首先,得有一台 mac
hackpro
    77
hackpro  
   2019-04-09 17:02:56 +08:00
Python 撸个脚本配合 Alfred Workflow 爽歪歪
allonli
    78
allonli  
   2019-04-09 17:06:24 +08:00
@cheeto 哪个插件报错就安装哪个。全装完改一下 nerd 字体就 ok 了
missdeer
    79
missdeer  
   2019-04-09 17:11:49 +08:00
感谢推荐
easternslope
    80
easternslope  
OP
   2019-04-09 17:21:45 +08:00
@hackpro Alfred + Hammerspoon 一起用才是爽,哈哈,俩个正好互补
lzs5240
    81
lzs5240  
   2019-04-09 17:24:34 +08:00
@easternslope
安装你这个字体后搞定了,多谢
tyhunter
    82
tyhunter  
   2019-04-09 17:30:13 +08:00
@easternslope #53 感谢,我看下,如果手机也开启推送的话,两个地方的推送一起过来,会把其他推送都给淹没了
leesymbol
    83
leesymbol  
   2019-04-09 17:40:19 +08:00
不错 收藏了
Yien
    84
Yien  
   2019-04-09 17:45:52 +08:00 via iPhone
赞👍感谢分享
iiusky
    85
iiusky  
   2019-04-09 17:59:19 +08:00
玩玩看
btv2bt
    86
btv2bt  
   2019-04-09 18:02:55 +08:00
@Mirage09 这个功能 Mac 自带呀
ruooooooli
    87
ruooooooli  
   2019-04-09 18:08:37 +08:00
不错不错
Wicked
    88
Wicked  
   2019-04-09 18:11:46 +08:00 via iPhone
看起来不错
fazero
    89
fazero  
   2019-04-09 18:49:29 +08:00
感谢,那个输入切换正需要
rafa
    90
rafa  
   2019-04-09 19:21:39 +08:00
标记一下,回家试试
swsh007
    91
swsh007  
   2019-04-09 19:29:47 +08:00 via Android
用这个有送 mac ?
easternslope
    92
easternslope  
OP
   2019-04-09 20:37:25 +08:00
@swsh007 送你 5 元优惠券一张 🍺
yuthelloworld
    93
yuthelloworld  
   2019-04-09 21:19:19 +08:00 via Android
马克
OfJCQ35M0N9ZD98T
    94
OfJCQ35M0N9ZD98T  
   2019-04-09 21:21:05 +08:00
Hammerspoon 下载好难
haon
    95
haon  
   2019-04-09 21:24:00 +08:00
借楼问一下 macos 能不能实现同一时刻只有一个声音播放?例如听语音时自动停止播放音乐
gouflv
    96
gouflv  
   2019-04-09 21:25:42 +08:00 via Android
做窗口管理真的很棒,完全能根据自己的需求实现,比记住一堆快捷键舒服多了
entimm
    97
entimm  
   2019-04-09 21:26:05 +08:00 via Android
能不能搞个看股票的插件
Mirage09
    98
Mirage09  
   2019-04-09 21:39:21 +08:00 via iPhone
@btv2bt Mac 自带那个完全搞不懂怎么触发,简直是玄学。
scukmh
    99
scukmh  
   2019-04-09 21:43:25 +08:00
@yuanmiexinghai 没梯子嘛?不是挺方便的嘛?下个 zip 包,解压,拖进去就完事了。
OfJCQ35M0N9ZD98T
    100
OfJCQ35M0N9ZD98T  
   2019-04-09 21:53:58 +08:00
@scukmh 主要就是没梯子。
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   873 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 19:56 · PVG 03:56 · LAX 11:56 · JFK 14:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.