V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zuorn
V2EX  ›  Apple

Hammerspoon - 岂至于窗口管理

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

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

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

    鼠标长久以来都是顺应人的本能去设计的。但高阶操作是什么?高阶操作就是训练人克服本能,用更有效更科学的但非本能的方式去应对,所以才需要大量的练习,大量的实战,从而形成肌肉记忆思维定势去对抗本能。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  
       2019-07-06 21:04:25 +08:00
    收藏备用!!!
    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   ·   实用小工具   ·   1155 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:17 · PVG 07:17 · LAX 15:17 · JFK 18:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.