Hammerspoon - 岂至于窗口管理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zuorn
V2EX    Apple

Hammerspoon - 岂至于窗口管理

  •  
  •   zuorn 2019-07-06 18:05:37 +08:00 5831 次点击
    这是一个创建于 2294 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么要费尽心思的用键盘替代鼠标操作。

    在使用电脑的过程中,最优先的操作方式应该是键盘,而次等的方式才是鼠标,因为鼠标需要使用者在键盘和鼠标之间来回切换,因此影响效率。而 “纯键盘操作” 需要使用者记忆大量的键位和操作模式,所以纯键盘从来都是高阶操作。

    鼠标长久以来都是顺应人的本能去设计的。但高阶操作是什么?高阶操作就是训练人克服本能,用更有效更科学的但非本能的方式去应对,所以才需要大量的练习,大量的实战,从而形成肌肉记忆思维定势去对抗本能。vim 如此,Hammerspoon 也如此。

    有些了解过 Hammerspoon 可能把它看作一款窗口管理工具,用此来替代 Magent 等付费工具,但 Hammerspoon 的玩法绝不仅于此,本文将介绍 Hammerspoon 及我的配置。

    Hammerspoon 介绍

    Hammerspoon 是一款免费开源的 app,通过桥接操作系统与 Lua 脚本引擎的方式,让我们可以通过编写 Lua 代码来实现操作应用程序、窗口、鼠标、文本、音频设备、电池、屏幕、剪切板、定位、wifi 等。基本囊括了系统的各方面。

    安装

    第一次打开需要授予辅助功能权限,点击 Enable Accessibility即可。此时在 ~/.hammerspoon/init.lua 写入自己的配置文件在 Hammerspoon 单栏图标并选择 Reload Config 重载配置即可生效。

    配置与升级:

    将配置文件克隆到本地根目录。

    git clone https://github.com/zuorn/hammerspoon_config ~/.hammerspoon 

    重新加载配置文件即可生效。

    如果提示:already exists and is not an empty directory. 先删除目录

    rm -rf ~/.hammerspoon 

    升级:

    cd ~/.hammerspoon && git pull 

    功能实现

    本配置基于 vim 风格,实现了窗口管理,剪切板,倒计时,快速启动等功能。所有模式按照指定快捷键进入,所有模式都可以用 escq退出。在进入对应模式之前只有模式快捷键生效,进入对应模式之后此模式的操作快捷键生效。

    可以按下快捷键 shift + option + / 显示帮助面板查看各个模式快捷键。再按照提示切换模式。

    窗口管理

    按下前缀键 Option + R 进入窗口管理模式:

    • 使用 h、j、k、l 移动为上下左右的半屏
    • 使用 y、u、i、o(即 hjkl 上方按键)移动为左上 /左下 /右上 /右下的四分之一窗口
    • 使用 c 居中,按下 =、- 进行窗口大小缩放
    • 使用 w、s、a、d 向上下左右移动窗口
    • 使用 H、J、K、L 向左 /下增减窗口大小
    • 使用方向键 上、下、左、右 移动到相应方向上的显示器(多块显示器的话)
    • 使用 [,] 左三分之二屏和右三分之二屏
    • 使用 空格 将窗口投送到另外一块屏幕(假如有两块以上显示器的话)
    • 使用 t 光标移动到所在窗口的中间位置
    • 使用 tab 显示帮助面板,查看键位图
    • 使用 q 或 Esc 退出管理

    应用快速切换

    按下前缀键 Option + tab 显示窗口提示,按下对应应用显示的字母快速切换。

    展示应用快捷键

    按下快捷键 Option + s 展示当前应用快捷键。

    快速启动

    按下快捷键 Option + a 打开快速启动,按下对应字母快速打开应用。

    AClock - 显示当前时间

    按下 Option + t 显示当前时间。

    倒计时(番茄钟)

    按下 Option + i 打开倒计时面板,按下对应数字开始计时。

    系统剪切板

    按下 Option + c 打开剪切板面板。

    功能:

    • 保存会话
    • 恢复上一个会话
    • 在浏览器中打开
    • 使用百度搜索
    • 使用谷歌搜索
    • 保存到桌面
    • 使用 github 搜索
    • 在 Sublime Text 打开

    顶部菜单栏实时显示网速

    没有对应快捷键,默认开启。

    其他快捷键

    • 粘贴 chrome 或 safari 打开最前置的网址:option + v
    • 显示 Hammerspoon 控制台: option + v
    • 锁定电脑快捷键:option + l
    • 重新加载配置文件: cmd + shift + ctrl + r
    • 临时禁用所有快捷键(注意:只能手动接禁。):cmd + shift + ctrl + q

    自定义配置

    拷贝私有配置文件

    cp ~/.hammerspoon/config-example.lua ~/.hammerspoon/private/config.lua 

    按照注释编辑私有配置文件 ~/.hammerspoon/private/config.lua 即可。

    其他功能(后续实现)

    • 按下前缀键滚动鼠标滚轮调节系统音量
    • 添加鼠标模式,进入鼠标模式后按下对应按键实现鼠标所有按键。
    • 切换 wifi 提醒
    • 显示已安装卷的列表以及桌面上每个指示可用空间的饼图
    • 连接 /断开耳机时播放 /暂停音乐播放器
    • 添加音乐控制模式,进入后通过按键控制 网易云音乐 和 iTunes

    可自定义范围:

    • 指定要启用模块

      找到配置文件启用模块,注释对应模块可禁止用对应功能。

    • 绑定快速启动 app 及快捷键

    • 自定义模式快捷键

    • 自定义 hammerspoon 快捷键绑定

    自己写配置

    Lua 是一种非常简单的语言,没有编程经验也很容易上手。hammerspoon 官方也提供了一份教程,或者看看菜鸟教程

    官方还有很多现成的 Spoons 勺子? 可以用,有些直接拿来绑定一下键位就可以直接用了,如果觉得官方勺子不符合自己的需求,你也可以把它改成自己想要的样子。多看看官方文档和相关的文章,以及官方勺子的源码,就很容易定制一个属于自己独一无二的神器。

    参考:

    14 条回复    2020-01-07 08:54:22 +08:00
    czjackjin
        1
    czjackjin  
       
    收藏备用!!!
    LMuyi
        2
    LMuyi  
       2019-07-07 00:51:22 +08:00 via iPhone
    NB
    shutongxinq
        3
    shutongxinq  
       2019-07-07 03:53:34 +08:00
    难道是 i3 wm mac 版?
    20015jjw
        4
    20015jjw  
       2019-07-07 05:39:12 +08:00
    amethyst 好用还是这个好用啊?我在用 amethyst 没理由换啊看这么复杂
    20015jjw
        5
    20015jjw  
       2019-07-07 05:39:42 +08:00
    仔细看了一下貌似没有 tiling?
    sunocean
        6
    sunocean  
       2019-07-07 08:58:14 +08:00
    感谢分享,不过 V2 有不少关于这个软件的帖子了。
    troyl
        7
    troyl  
       2019-07-07 09:06:53 +08:00 via iPhone
    「岂『止』于」
    ech0x
        8
    ech0x  
       2019-07-07 09:52:26 +08:00
    @20015jjw #5 有的,我记得上次看文档的时候有实验性质的 tiling 布局 API。
    ech0x
        9
    ech0x  
       2019-07-07 09:53:43 +08:00
    crystone
        10
    crystone  
       2019-07-08 09:08:20 +08:00
    图都挂了啊
    linora
        11
    linora  
       2019-07-08 10:36:25 +08:00
    magnet 屏幕管理
    controlplane 规则管理

    bugOS 偶尔拖后腿
    MrUser
        12
    MrUser  
       2019-11-03 16:00:06 +08:00
    咨询个问题:
    虽然 launchOrFocus 可以打开 App,但是如果这个 App 打开了 2 份,比如 vscode 打开了 2 个窗口,如何循环切换这 2 个窗口?( launchOrFocus 只能切换到最后用过的那个窗口)
    我想实现的是第一次 launchOrFocus 时切换到第 1 个 vscode,第二次打开时切换到第二个 vscode,第三次打开时切换到第 3 个 vscode,如果只有 3 个 vscode 窗口,在第四次 launchOrFocus 时 focus 第一个 vscode。
    如有空闲还望指点一下,不胜感激
    zuorn
        13
    zuorn  
    OP
       2020-01-05 20:02:39 +08:00   2
    @MrUser 你为什么不用 command + ~ 呢
    MrUser
        14
    MrUser  
       2020-01-07 08:54:22 +08:00
    > 回复 @zuorn 在 #13 发表的:
    > @MrUser 你为什么不用 command + ~ 呢
    --------
    感谢,没发现它,原来 MAC 天生自带这个功能……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     923 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 19:55 PVG 03:55 LAX 12:55 JFK 15:55
    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