当前位置: 首页 > article >正文

告别Moom!用Hammerspoon实现Mac窗口精准控制(附完整快捷键表+配置文件)

用Hammerspoon打造Mac高效工作流从窗口管理到自动化脚本每次看到同事花十几秒拖动窗口调整大小或者在不同显示器间来回切换应用时我总忍不住想分享这个改变我工作效率的神器。Hammerspoon——这个完全免费的开源工具让我彻底告别了付费窗口管理软件的束缚实现了远超Moom、Rectangle等商业工具的个性化工作流。1. 为什么选择Hammerspoon在Mac生态中窗口管理工具层出不穷。Moom提供精美的预设布局Rectangle带来简洁的分屏操作但它们的共同局限在于功能固定、扩展性差、无法深度融入个人工作习惯。而Hammerspoon则像一把瑞士军刀零成本自由完全开源免费无订阅烦恼无限扩展性通过Lua脚本实现任何你能想到的自动化系统级控制深度整合macOS系统API远超普通工具的权限轻量高效原生应用级别的性能几乎不占系统资源提示Hammerspoon适合愿意花1小时配置、之后每天节省2小时的效率追求者我最初只是用它替代Moom的窗口管理后来逐渐开发出应用快速启动、文本片段管理、多显示器工作流等全套方案。现在我的配置文件中包含37个自定义快捷键和11个自动化脚本每天使用超过200次。2. 基础配置与窗口管理2.1 安装与初始化# 通过Homebrew安装推荐 brew install --cask hammerspoon # 创建配置文件目录 mkdir -p ~/.hammerspoon首次启动后需要在系统设置中授予辅助功能权限。建议将Hammerspoon设置为登录启动项这样配置一次就能长期使用。2.2 精准窗口控制方案我的窗口管理方案比Moom更精细支持1/3、1/4等非常用比例。以下是核心快捷键设置功能描述快捷键组合适用场景左半屏⌃⌥⌘ ←文档对照右上1/4屏⌃⌥⇧ ↑参考资料小窗中心中等窗口⌃⌥⌘ C临时对话框全屏切换⌃⌥⌘ F专注写作/编码下一个显示器⇧⌥ →双屏协作-- 示例实现右下1/4屏的Lua代码 hs.hotkey.bind({ctrl, alt, shift}, down, function() local win hs.window.focusedWindow() local screen win:screen() local max screen:frame() win:setFrame({ x max.w/2, y max.h/2, w max.w/2, h max.h/2 }) end)这套方案特别适合程序员和文字工作者。我写代码时习惯左侧IDE占3/5屏右侧浏览器占2/5屏写文章时则变成左侧文献1/3屏中间写作区2/3屏。3. 多显示器高级工作流作为双屏用户我开发了这些独特功能智能窗口接力按⇧⌥数字键将窗口发送到指定显示器并自动调整到预设尺寸光标跳跃⌃⌥方向键在显示器间快速移动光标比鼠标拖动快3倍应用记忆位置特定应用如邮件总是在第二显示器的固定位置打开-- 将窗口移动到第二显示器并最大化的代码示例 hs.hotkey.bind({shift, alt}, 2, function() local win hs.window.focusedWindow() local screens hs.screen.allScreens() if #screens 2 then win:moveToScreen(screens[2]) win:maximize() end end)实测这套方案让我的多屏切换效率提升60%特别是在这些场景会议室演示时快速调整窗口布局外接显示器时自动恢复工作环境视频会议时一键隐藏私密窗口4. 超越窗口管理的自动化技巧4.1 应用快速启动器我配置了这套比Spotlight更高效的启动方案⌃⇧ T → Terminal ⌃⇧ C → Chrome ⌃⇧ I → IDEA ⌃⇧ D → Finder ⌃⇧ S → 系统设置实现代码非常简洁hs.hotkey.bind({ctrl, shift}, t, function() hs.application.launchOrFocus(Terminal) end)4.2 智能片段管理系统作为技术写作者我收集了200个常用代码片段和命令行。Hammerspoon的片段管理比任何付费工具都灵活选中文本按⌃⌘A保存输入时按⌃⌘V调出片段面板支持关键字搜索和多级分类// 片段存储格式示例 { docker_prune: { content: docker system prune -a --volumes, keywords: [docker,clean], desc: 彻底清理Docker占用空间 } }4.3 你可能不知道的实用功能自动暗色模式根据时间自动切换系统主题键盘状态灯用CapsLock灯提示邮件到达Wi-Fi触发器连接到公司网络时自动打开工作软件组合-- 根据时间切换暗色模式的示例 hs.timer.doAt(18:00, function() hs.osascript.applescript(tell app System Events to tell appearance preferences to set dark mode to true) end)5. 高级调优与问题排查使用三年间我总结了这些宝贵经验快捷键冲突解决方案先用hs.hotkey.showHotkeys()查看所有注册热键系统级冲突可用Karabiner-Elements辅助排查为Hammerspoon保留⌃⌥⌘符号键的安全区性能优化技巧复杂脚本使用hs.timer.delayed.new()延迟执行避免在hs.window.filter回调中执行耗时操作定期用collectgarbage()清理Lua内存我的配置文件结构~/.hammerspoon/ ├── init.lua -- 主入口 ├── modules/ │ ├── window.lua -- 窗口管理 │ ├── app.lua -- 应用控制 │ └── utils.lua -- 实用工具 └── history.json -- 片段数据库遇到问题时先检查Hammerspoon控制台的Lua错误输出再逐步禁用模块定位问题源。我的配置已在GitHub开源包含详细注释和备用方案。

相关文章:

告别Moom!用Hammerspoon实现Mac窗口精准控制(附完整快捷键表+配置文件)

用Hammerspoon打造Mac高效工作流:从窗口管理到自动化脚本 每次看到同事花十几秒拖动窗口调整大小,或者在不同显示器间来回切换应用时,我总忍不住想分享这个改变我工作效率的神器。Hammerspoon——这个完全免费的开源工具,让我彻底…...

原神抽卡数据分析终极指南:genshin-wish-export完全使用教程

原神抽卡数据分析终极指南:genshin-wish-export完全使用教程 【免费下载链接】genshin-wish-export biuuu/genshin-wish-export - 一个使用Electron制作的原神祈愿记录导出工具,它可以通过读取游戏日志或代理模式获取访问游戏祈愿记录API所需的authKey。…...

5G NR PUSCH实战:手把手教你理解Type A/B时域映射与SLIV计算(附避坑指南)

5G NR PUSCH实战:Type A/B时域映射与SLIV计算全解析 从理论到实践:PUSCH时域资源分配的核心逻辑 在5G NR系统中,物理上行共享信道(PUSCH)的时域资源分配直接决定了上行数据传输的效率和可靠性。对于物理层开发工程师而…...

移动机器人自主导航与集群协同:从单机优化到群体智能

1. 移动机器人自主导航的核心框架 当你第一次看到扫地机器人在房间里自如穿梭时,有没有好奇过它是如何做到的?这背后就是移动机器人自主导航技术的魔力。简单来说,自主导航系统就像机器人的"大脑",由感知、规划、控制三…...

数据标注公司怎么选?从百度、阿里到龙猫、倍赛,聊聊2024年不同类型平台的合作门道

2024年数据标注平台合作指南:如何根据团队基因选择最优赛道 数据标注行业正在经历一场静默的革命。从传统的人工密集型标注到AI辅助的半自动化流程,从单一文本标注到多模态数据清洗,这个曾经被视为"AI流水线工人"的行业&#xff0c…...

别再傻傻分不清!Windows锁屏参数ScreenSaveTimeOut和InactivityTimeoutSecs保姆级对比与实战配置

Windows锁屏参数深度解析:ScreenSaveTimeOut与InactivityTimeoutSecs的精准掌控 你是否曾经遇到过这样的场景:明明设置了屏幕保护程序10分钟后启动,但电脑却迟迟不锁屏?或者在公司域环境下,IT部门推送的策略让你的个人…...

chronyd服务端123端口未启动的深度排查与修复指南

1. 问题现象与初步判断 最近在搭建NTP时间同步架构时遇到了一个典型问题:作为中转节点的Master服务器123端口未启动,导致下游ServerA设备无法同步时间。具体表现为执行chronyc sources命令时,客户端显示^?符号(表示无法连接服务端…...

老旧Mac升级指南:OpenCore Legacy Patcher实现Monterey系统适配

老旧Mac升级指南:OpenCore Legacy Patcher实现Monterey系统适配 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着macOS系统不断迭代,许多经典Ma…...

别再问同步安全了!手把手教你用Docker部署思源笔记,并彻底搞懂它的端到端加密

从零构建安全笔记系统:Docker部署思源笔记与端到端加密实战指南 在信息爆炸的时代,如何安全地管理个人知识库成为技术爱好者的核心诉求。思源笔记作为一款支持Markdown的本地优先笔记工具,配合Docker容器化部署,能够打造真正私有化…...

低成本搭建AI助手:OpenClaw+nanobot镜像每月节省80%Token费用

低成本搭建AI助手:OpenClawnanobot镜像每月节省80%Token费用 1. 为什么选择OpenClawnanobot组合 作为一个长期关注AI自动化工具的技术爱好者,我一直在寻找一个既经济实惠又能满足个人需求的AI助手方案。市面上大多数解决方案要么价格昂贵,要…...

运维工程师必看:如何用因果AI+DeepSeek实现3分钟精准故障定位(实战案例)

运维工程师必看:如何用因果AIDeepSeek实现3分钟精准故障定位(实战案例) 在当今复杂的云原生和微服务架构环境中,运维工程师面临的挑战前所未有。系统组件间的依赖关系错综复杂,一个微小的故障可能引发连锁反应&#xf…...

用循环链表实现大整数加法:一个被遗忘的C语言经典数据结构实战

用循环链表实现大整数加法:一个被遗忘的C语言经典数据结构实战 在计算机科学教育中,数据结构与算法的学习往往陷入理论脱离实践的困境。而实现一个大整数加法计算器,恰好为循环链表这一经典数据结构提供了绝佳的应用场景。本文将带您深入探索…...

5分钟搞定ESP32开发:VSCode+ESP-IDF插件极简配置教程

5分钟极速搭建ESP32开发环境:VSCodeESP-IDF全流程指南 在物联网开发领域,ESP32凭借其出色的性价比和丰富的功能接口,已经成为智能硬件开发者的首选平台。但对于刚接触ESP32的开发者来说,传统的环境搭建过程往往充满挑战——从工具…...

单片机I/O口阻抗特性及其在电路设计中的关键作用

1. 阻抗基础:从水管到电路的理解 第一次接触阻抗概念时,我盯着教科书上的公式发呆了半小时。直到有天修水管时突然开窍——这不就是水管的粗细对水流的影响吗?在电路中,阻抗就是电子流动遇到的"阻力"。但和水管不同&…...

OpenHarmony 5.0.2 音频驱动适配实战:从ADM配置到耳机/扬声器切换

1. OpenHarmony音频驱动适配背景与问题定位 最近在RK3568平台上适配OpenHarmony 5.0.2的音频功能时,遇到了一个典型问题:使用RK809音频芯片时,耳机可以正常发声,但内置扬声器完全没声音,而且插入耳机后扬声器也不会自动…...

OpenClaw技能组合:GLM-4.7-Flash多功能集成方案

OpenClaw技能组合:GLM-4.7-Flash多功能集成方案 1. 为什么需要技能组合? 去年冬天,我接手了一个内容运营的兼职项目,需要每周整理行业动态、生成分析报告并发布到三个不同平台。最初我尝试手动操作,但很快发现这种重…...

G-Helper:华硕ROG笔记本性能调校的轻量级解决方案

G-Helper:华硕ROG笔记本性能调校的轻量级解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: h…...

解决PyQtWebEngine安装难题:高效配置与常见问题排查

1. PyQtWebEngine安装问题全景分析 第一次接触PyQt5的开发者经常会遇到这样的报错:ModuleNotFoundError: No module named PyQt5.QtWebEngineWidgets。这个看似简单的错误背后,其实隐藏着PyQt5版本演进带来的架构变化。从PyQt5 5.12版本开始,…...

PyTorch 3.0静态图分布式训练:如何用3行torch.compile + 2行DTensor替代自研调度器?一线大厂已全面切换

第一章:PyTorch 3.0静态图分布式训练概览 PyTorch 3.0 引入了原生静态图(Static Graph)支持,通过 TorchDynamo Inductor 后端实现高效图捕获与跨设备编译,为大规模分布式训练提供低开销、高一致性的执行基础。静态图模…...

Ubuntu下基于simple-rtsp-server构建轻量级实时视频流媒体服务

1. 为什么选择simple-rtsp-server搭建流媒体服务 最近在给公司搭建内部监控系统时,我对比了市面上七八种RTSP服务器方案,最终选择了simple-rtsp-server。这个用纯C语言编写的轻量级服务器,编译后二进制文件只有几百KB,但性能却出乎…...

终极go2rtc流媒体解决方案:3分钟搭建多协议摄像头管理系统

终极go2rtc流媒体解决方案:3分钟搭建多协议摄像头管理系统 【免费下载链接】go2rtc Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc. 项目地址: https://gitcode.com/GitHub_Tre…...

Windows系统信息导出全攻略:从msinfo32生成报告到用PowerShell定制你的专属硬件清单

Windows系统信息自动化采集与定制化报告实战指南 对于IT资产管理专员和技术团队而言,准确获取终端设备的硬件配置信息是软件许可合规、资产盘点和故障排查的基础工作。传统的手动记录方式效率低下且容易出错,而Windows内置的msinfo32工具生成的报告又过于…...

保姆级教程:在Ubuntu 22.04物理机上,从开启SSH到配置IPv6防火墙的完整流程

Ubuntu 22.04物理机从SSH配置到IPv6防火墙的完整安全指南 当你拿到一台全新的Ubuntu物理机时,如何安全地配置远程访问并启用IPv6连接?本文将带你从零开始,一步步完成从系统初始化到防火墙配置的全过程。无论你是搭建家庭服务器、开发测试环境…...

Python 3.14 JIT编译器实测对比:启动耗时降63%、内存开销压减41%,你的服务还在用默认配置?

第一章:Python 3.14 JIT编译器实测性能跃迁全景Python 3.14 引入的实验性 JIT 编译器(基于 Pyjion 与 CPython 运行时深度集成)首次在标准发行版中启用可配置的即时编译通道,显著改变了传统解释执行的性能边界。我们通过统一基准套…...

Kubernetes集群的搭建与DevOps实践(下)- 部署实践篇

需求清单: 100张数据表要迁移(还要支持后续动态新增) 双链路同步:MySQL到MySQL、MongoDB到PostgreSQL 不能写死配置,要能灵活扩展 工期不到1个月 技术约束: 源环境(塔外)和目标环境&…...

基于DQN深度强化学习电力-热力-算力三维协同的数据中心智能调度优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Xilinx FPGA FIFO IP核复位机制深度解析与实战调试

1. Xilinx FPGA FIFO IP核复位机制基础解析 第一次接触Xilinx FPGA的FIFO IP核时,很多人都会在复位环节栽跟头。我刚开始用Vivado生成FIFO IP核时,就遇到过复位信号处理不当导致数据丢失的问题。FIFO(First In First Out)作为数据…...

AD5660 16位DAC驱动库深度解析:嵌入式SPI接口实践

1. AD5660 数字模拟转换器库深度解析:面向嵌入式工程师的16位高精度DAC驱动实践1.1 器件本质与工程定位AD5660 是 Analog Devices 推出的单通道、16位电压输出型数模转换器(DAC),采用紧凑的 8 引脚 MSOP 封装,专为对精…...

EF Core与SQLite实战:从零构建轻量级数据库应用

1. 为什么选择EF Core与SQLite这对黄金组合 如果你正在开发一个需要本地数据存储的移动应用或桌面小工具,SQLite绝对是你的首选数据库。这个只有几百KB的小家伙,不需要任何服务器配置,直接读写单个文件就能完成所有数据库操作。而EF Core作为…...

STM32F103 SPI+DMA驱动WS2812B的时序实现原理

1. WS2812B_STM32_Libmaple 库深度解析:基于 SPI DMA 的高性能 NeoPixel 驱动实现WS2812B(常被称作 NeoPixel)是当前嵌入式系统中最主流的单线协议可寻址 RGB LED。其核心挑战在于严格的时序要求:T0H(逻辑 0 的高电平时…...