{"id":13477952,"url":"https://github.com/KURANADO2/hammerspoon-kuranado","last_synced_at":"2025-03-27T07:30:41.321Z","repository":{"id":42473475,"uuid":"301617700","full_name":"KURANADO2/hammerspoon-kuranado","owner":"KURANADO2","description":"Hammerspoon config（Support custom shortcut keys, emoji search, application shortcut switching, real-time network speed, key echo, etc.）","archived":false,"fork":false,"pushed_at":"2023-10-03T06:34:47.000Z","size":27663,"stargazers_count":180,"open_issues_count":7,"forks_count":22,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-30T11:41:35.570Z","etag":null,"topics":["hammerspoon","lua"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KURANADO2.png","metadata":{"files":{"readme":"README-CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-10-06T04:55:13.000Z","updated_at":"2024-10-18T01:26:55.000Z","dependencies_parsed_at":"2023-10-03T12:34:39.560Z","dependency_job_id":null,"html_url":"https://github.com/KURANADO2/hammerspoon-kuranado","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KURANADO2%2Fhammerspoon-kuranado","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KURANADO2%2Fhammerspoon-kuranado/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KURANADO2%2Fhammerspoon-kuranado/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KURANADO2%2Fhammerspoon-kuranado/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KURANADO2","download_url":"https://codeload.github.com/KURANADO2/hammerspoon-kuranado/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245802156,"owners_count":20674597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hammerspoon","lua"],"created_at":"2024-07-31T16:01:50.240Z","updated_at":"2025-03-27T07:30:36.304Z","avatar_url":"https://github.com/KURANADO2.png","language":"Lua","funding_links":[],"categories":["Lua"],"sub_categories":[],"readme":"\u003cdiv align='center'\u003e\n    \u003cimg src='./images/logo.png' width='700' alt='logo'/\u003e\n\u003c/div\u003e\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='https://img.shields.io/badge/Hammerspoon-0.9.93-FFB100' alt='icon'/\u003e\n  \u003cimg src='https://img.shields.io/badge/Lua-5.4-00007C' alt='icon'/\u003e\n  \u003cimg src='https://img.shields.io/badge/Shell-417DDE' alt='icon'/\u003e\n\u003c/div\u003e\n\n[English](./README.md) | 简体中文 | [日本語](./README-JP.md)\n\n---\n\n[![](./images/bilibili.png)](https://www.bilibili.com/video/BV1VR4y1N7TS?share_source=copy_web\u0026vd_source=a06ac1449f22652843e9948a04dc214a)\n\n---\n\n- 如果你觉得本工程提供的功能对你有用，请帮忙点一个 Star，不胜感激，谢谢！\n\n\u003cdiv align='left'\u003e\n  \u003cimg src='./images/star-hoshii.png' width='200'/\u003e\n\u003c/div\u003e\n\n- 若 README 图片无法显示，请确保挂了梯子，并且 PAC 文件中配置 `||githubusercontent.com`，或者直接使用全局模式\n\n---\n\n## 如何安装\n\n本工程所有脚本都基于 Hammerspoon 运行，请先下载安装 [Hammerspoon](https://github.com/Hammerspoon/hammerspoon/releases)，然后再执行如下命令：\n\n```shell\ncurl -fsSL https://raw.githubusercontent.com/KURANADO2/hammerspoon-kuranado/main/install.sh | sh\n```\n\n如上面这条 `curl` 命令下载不了 `install.sh`，则请打开终端代理后重试或手动下载 `install.sh` 后执行\n\n最后，Menubar 中点击 Hammerspoon `Reload Config` 按钮即可\n\n---\n\n## 手动更新\n\n手动安装更新：\n\n```shell\ncd ~/.hammerspoon\ngit pull origin main\n```\n\n如果发现冲突，请解决冲突后再执行 `git pull origin main`\n\n---\n\n## 自动更新\n\n除手动更新外，本工程还支持自动检查更新并安装，可在功能菜单中关闭自动更新（不建议）\n\n自动更新原理如下：\n- .config 文件（用户配置文件）加入到 .gitignore 文件中\n- 定期执行 `git pull origin main`\n- 如果发现冲突，则 console 打印自动更新失败相关提示信息，此时请手动安装更新，参考：[手动更新](https://github.com/KURANADO2/hammerspoon-kuranado#%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0)\n- 如果发现默认配置版本号 \u003e 用户本地 .config 文件的配置版本号，则在保留用户原有配置的基础上，将新增配置合并到用户本地 .config 文件中，并更新配置版本号\n\n---\n\n## 本工程提供功能\n### 功能菜单\n\n鼠标单击功能项，即可启用/禁用功能项\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/menu-doc.png' width='600'/\u003e\n\u003c/div\u003e\n\n---\n\n### 窗口移动\n\n替代 [Magnet](https://apps.apple.com/us/app/magnet/id441258766?mt=12) 进行窗口移动\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/window_move.gif' width='700'/\u003e\n\u003c/div\u003e\n\n网格均分（2、4、6、9、12、16 等分）：\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/window_grid.gif' width='700'/\u003e\n\u003c/div\u003e\n\n左右交换：\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/window_swap.gif' width='700'/\u003e\n\u003c/div\u003e\n\n---\n\n### 应用切换\n\n为应用配置快捷键，比 `⌘` `⇥` 和 Alfred 切换程序更高效（建议只为高频使用的一些软件分配快捷键）\n\n---\n\n### 表情包搜索\n\n快捷键 `⌥` `K` 唤醒表情包搜索功能，输入关键词，**上下**键用于选择、预览表情包；**左右**键用于翻页；**回车键**用于发送表情包；`Esc` 关闭搜索窗口\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/emoji.gif' width='600'/\u003e\n\u003c/div\u003e\n\n**注：** 该功能我曾在 Alfred Workflow 中实现过一遍：[https://github.com/KURANADO2/emoji-alfredworkflow](https://github.com/KURANADO2/emoji-alfredworkflow)。但已很久没有维护，如果你对 Alfred 感兴趣，也可以看下\n\n---\n\n### 实时网速显示\n\n替代 [NetWorker Pro](https://apps.apple.com/us/app/networker-pro/id1163602886?mt=12) 实时显示网速（每两秒刷新一次）\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/network.png' width='700'/\u003e\n\u003c/div\u003e\n\n---\n\n### 密码粘贴\n\n解决某些网站禁止粘贴密码、SSH 登陆需要手动输入密码等问题。\n首先使用 `⌘` `C` 复制密码，然后在密码输入框内，按 `⌃` `⌘` `V` 即可将密码粘贴到输入框内。\n原理为读取剪贴板最新一条记录，针对读取到的每一个字符，模拟按键事件。\n\n---\n\n### 输入法切换\n\n个人最常用的三个输入法：\n- 系统自带 ABC\n- 系统自带简体拼音\n- 系统自带日语输入法\n\n默认分配了如下快捷键：\n\n快捷键|功能\n-|-\n`⌥` `J`|ABC\n`⌥` `K`|简体中文\n`⌥` `L`|Hiragana\n\n---\n\n### 按键回显\n\n替代 [KeyCastr](https://github.com/keycastr/keycastr)\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/keystroke-visualizer.gif' width='500'/\u003e\n\u003c/div\u003e\n\n注：目前暂且实现了简单的按键回显，和 KeyCastr 相比在功能上仍相差甚远，如：\n- 不支持多画布\n- 画布不支持拖拽\n- 缺少动画效果\n- ...\n感兴趣的同学欢迎提出实现思路，或直接贡献代码（不太懂 Objective-C，KeyCastr 的实现源码个人看不太懂）\n\n---\n\n### 壁纸切换\n\n每 10 min 自动切换一张壁纸，壁纸来源：Bing\n\n---\n\n### 快捷键列表查看\n\n任意界面下按 `⌥` `/` 显示/隐藏快捷键列表\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/shortcut.png' width='700'/\u003e\n\u003c/div\u003e\n\n---\n\n### 下班提醒\n\n每天 18:00 提醒下班（根据实际下班时间自行修改脚本），鼠标点击可关闭动画\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/after-work.png' width='700'/\u003e\n\u003c/div\u003e\n\n---\n\n## 默认快捷键列表\n\n如需自定义快捷键，请修改 shortcut.lua 文件，如 shortcut.lua 文件不存在，则执行如下命令创建一份\n\n```shell\ncp shortcut.lua.example shortcut.lua\n```\n\n快捷键|功能\n-|-\n`⌃` `⌥` `Z`|同一应用的所有窗口自动网格式布局\n`⌃` `⌥` `X`|同一调度中心下的所有窗口自动网格式布局（什么是 [调度中心？](https://support.apple.com/zh-cn/guide/mac-help/mh35798/14.0/mac/14.0)？）\n`⌃` `⌥` `A`|同一应用的所有窗口自动水平均分或垂直均分\n`⌃` `⌥` `S`|同一调度中心下的所有窗口自动水平均分或垂直均分\n`⌃` `⌥` `←`|左半屏\n`⌃` `⌥` `→`|右半屏\n`⌃` `⌥` `↑`|上半屏\n`⌃` `⌥` `↓`|下半屏\n`⌃` `⌥` `U`|左上角\n`⌃` `⌥` `I`|右上角\n`⌃` `⌥` `J`|左下角\n`⌃` `⌥` `K`|右下角\n`⌃` `⌥` `1`|1/9\n`⌃` `⌥` `2`|2/9\n`⌃` `⌥` `3`|3/9\n`⌃` `⌥` `4`|4/9\n`⌃` `⌥` `5`|5/9\n`⌃` `⌥` `6`|6/9\n`⌃` `⌥` `7`|7/9\n`⌃` `⌥` `8`|8/9\n`⌃` `⌥` `9`|9/9\n`⌃` `⌥` `C`|居中\n`⌃` `⌥` `D`|左 1/3（横屏）或上 1/3（竖屏）\n`⌃` `⌥` `F`|中 1/3\n`⌃` `⌥` `G`|右 1/3（横屏）或下 1/3（竖屏）\n`⌃` `⌥` `E`|左 2/3（横屏）或上 2/3（竖屏）\n`⌃` `⌥` `T`|右 2/3（横屏）或下 2/3（竖屏）\n`⌃` `⌥` `=`|等比例放大窗口\n`⌃` `⌥` `-`|等比例缩小窗口\n`⌃` `⌥` `↩︎`|最大化\n`⌃` `⌥` `⌘` `↑`|将窗口移动到上方屏幕\n`⌃` `⌥` `⌘` `↓`|将窗口移动到下方屏幕\n`⌃` `⌥` `⌘` `←`|将窗口移动到左侧屏幕\n`⌃` `⌥` `⌘` `→`|将窗口移动到右侧屏幕\n`⌘` \u0026#96; |在同一应用的多个窗口之间切换（此为 Mac 系统自带快捷键）\n`⌥` `Q` |打开 QQ\n`⌥` `W` |打开 WeChat\n`⌥` `V` |打开 Visual Studio Code\n`⌥` `F` |打开 Finder\n`⌥` `C` |打开 Chrome\n`⌥` `J` |打开 Intellij IDEA\n`⌥` `N` |打开 WizNote\n`⌥` `D` |打开 DataGrip\n`⌥` `T` |打开 iTerm2\n`⌥` `M` |打开 MailMaster\n`⌥` `P` |打开 Postman\n`⌥` `O` |打开 Word\n`⌥` `E` |打开 Excel\n`⌥` `Y` |打开 PyCharm\n`⌥` `R` |打开 Another Redis Desktop Manager\n`⌥` `K` |表情包搜索\n`⌃` `⌘` `V`|以模拟按键方式将剪贴板中的字符粘贴出来（解决某些网站禁止粘贴密码问题）\n`⌥` `L` |在简体拼音和日语输入法间切换\n`⌥` `/` |显示/隐藏快捷键列表\n\n---\n\n## 关于\n### 关于应用 bundle id\n\n上面配置中使用快捷键切换应用，需要拿到应用的 bundle id（请注意 bundle id 配置到 hammerspoon 中需要区分大小写，否则 console 会报错），可通过如下方式拿到：\n```shell\nosascript -e 'id of app \"Name of App\"'\n```\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/bundleid.png' width='500'/\u003e\n\u003c/div\u003e\n\n另外，如果你使用的是比较新的 Mac 系统，终端下输入 `ls /Applications` 可能是看不到系统自带应用的，如下图，`ll` 查看不到 Mac 自带的邮件应用，但 Finder 打开 /Applications 目录则可以看到邮件应用\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/applications.png' width='500'/\u003e\n\u003c/div\u003e\n\n此时我们可以在 Finder 中选中邮件应用，右键：显示包内容 -\u003e Contents -\u003e 打开 info.plist 文件，找到 CFBundleIdentifier 配置项，该配置项的值即为 bundle id，当然此方法也适应于自己安装的应用\n\n\u003cdiv align='center'\u003e\n  \u003cimg src='./images/mail.png' width='400'/\u003e\n\u003c/div\u003e\n\n---\n\n### 关于工程目录结构\n\n```shell\n.hammerspoon\n├── .config 用户本地配置文件，保存了用户每个功能模块的启用/禁用状态\n├── .emoji 表情包缓存目录\n├── .git\n├── .gitignore\n├── .wallpaper 壁纸缓存目录\n├── LICENSE\n├── README.md\n├── images 功能模块及 README 需要用到的图片\n├── init.lua 脚本入口\n└── modules 各个功能模块\n    ├── application.lua 应用切换模块\n    ├── base.lua 封装了 Lua 基本工具\n    ├── config.lua 菜单默认配置，记录了每一项功能的默认启用/禁用状态\n    ├── emoji.lua 表情包搜索模块\n    ├── hotkey.lua 快捷键列表查看模块\n    ├── input-method.lua 输入法切换\n    ├── keystroke-visualizer.lua 按键回显模块\n    ├── menu.lua 菜单模块\n    ├── network.lua 实时网速模块\n    ├── password.lua 密码粘贴模块\n    ├── reload.lua 重载配置模块（当 ～/.hammerspoon 目录下任意 .lua 文件发生变动时，自动重新加载 Hammerspoon 配置）\n    ├── remind.lua 下班提醒模块\n    ├── shortcut.lua 用于用户自定义快捷键，此文件已加入 .gitignore，若无该文件，则执行命令 cp shortcut.lua.example shortcut.lua 创建一份即可\n    ├── shortcut.lua.example 快捷键配置文件示例，用户请勿修改此文件\n    ├── update.lua 自动更新模块\n    ├── wallpaper.lua 壁纸切换模块\n    └── window.lua 窗口管理模块\n```\n\n---\n\n## 感谢\n\n- [JetBRAINS- Licenses for Open Source Development](https://www.jetbrains.com/community/opensource/#support)\n\n---\n\n## 参考\n\n- [学长博客 - OSX--OSX应用快速切换方案](https://mrdear.cn/posts/osx_app_switcher.html)\n- [官方 Quick Start](https://www.hammerspoon.org/go/)\n- [官方文档](http://www.hammerspoon.org/docs/)\n- [hammerspoon-init](https://github.com/rtoshiro/hammerspoon-init)\n- [Easily see any app’s bundle identifier](https://robservatory.com/easily-see-any-apps-bundle-identifier/)\n- [GitHub - wangshub/hammerspoon-config](https://github.com/wangshub/hammerspoon-config)\n- [GitHub - ashfinal/awesome-hammerspoon](https://github.com/ashfinal/awesome-hammerspoon)\n- [GitHub - forecho/hammerspoon-config](https://github.com/forecho/hammerspoon-config)\n- [Is it possible to show what a keycode being pressed is?](https://github.com/Hammerspoon/hammerspoon/issues/2937)\n- [GitHub - niumoo/bing-wallpaper](https://github.com/niumoo/bing-wallpaper)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKURANADO2%2Fhammerspoon-kuranado","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKURANADO2%2Fhammerspoon-kuranado","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKURANADO2%2Fhammerspoon-kuranado/lists"}