推荐一个 MacOS 上用了就无法自拔的神器 [Hammerspoon] - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
easternslope
V2EX    程序员

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

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

推荐一个 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
NVDA
    4
NVDA  
   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 吧
    24
scukmh  
   2019-04-09 11:35:23 +08:00 via iPhone
刚刚一直想着用 alfred 实现相同的功能,因为不想装两个软件,但好像确实 alfred 不适合做这个。
scukmh
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
rrubick
    45
rrubick  
   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 吗?
00ps
    60
00ps  
   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  
nbsp;  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
@heeto 别慌兄弟,里面有很多我使用第三方插件,你把 ~/.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 自带呀
ruolis
    87
ruolis  
   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
能不能搞个看股票的插件
NVDA
    98
NVDA  
   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     Solana     2941 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 32ms UTC 12:51 PVG 20:51 LAX 05:51 JFK 08:51
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86