Maya Workflow Kit
Blender에서 Maya 전체 워크플로를 한 번에 설치, 무료 오픈소스, Blender 4.5‑5.2 지원
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Hammerspoon Spoon: hotkeys to launch or focus apps, open files or URLs, or run functions, with a menu bar indicator for slow actions
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A Hammerspoon Spoon that binds hotkeys to launch or focus apps, open files or URLs, or run functions.
Repository: https://github.com/hugoh/AppLauncher.spoon
● appears in the menu bar only when an action is slow (still running after 0.2 s by default), and is always cleared, even if an action never finishesdone callback, so the indicator and the logged time cover the whole actionEnsure you have Hammerspoon installed, then choose a method:
AppLauncher.spoon.zip from the latest releaseAppLauncher.spoon folder~/.hammerspoon/Spoons/hs.reload() in the console)spoon.SpoonInstall:installSpoonFromZip(
"https://github.com/hugoh/AppLauncher.spoon/releases/latest/download/AppLauncher.spoon.zip"
)
cd ~/.hammerspoon/Spoons
git clone https://github.com/hugoh/AppLauncher.spoon.git
local hyper = { "ctrl", "alt", "cmd" }
hs.loadSpoon("AppLauncher"):registerMappings(hyper, {
{ key = "s", app = "Slack" },
{ key = "o", app = "Microsoft Outlook", forceOpen = true },
{ key = "w", open = "https://example.com" },
{ key = "9", label = "Play/Pause", func = function() hs.eventtap.event.newSystemKeyEvent("PLAY", true):post() end },
{
key = "m",
label = "Slow thing",
async = true,
func = function(done)
hs.timer.doAfter(2, done) -- report when the work is finished
end,
},
})
Each mapping has a key and one action:
| Field | Action |
|---|---|
app | Focus the app, bringing all its windows forward, and launch it first if it isn't running; a running app with no window goes through hs.application.launchOrFocus so one reopens. forceOpen = true always goes through hs.application.launchOrFocus instead. raiseWindows = true also raises each window individually, e.g. if some don't come forward; it's off by default because it can be slow in some apps (about 150 ms per window in Obsidian), and Hammerspoon is blocked meanwhile. |
open | Pass a file, folder or URL to /usr/bin/open. |
func | Call a function. With async = true, it receives a done callback to call when finished. |
label | Optional name for a func mapping, used in logs and alerts. |
registerMappings can be called more than once, for example to keep machine-specific mappings in a separate block.
Tune behaviour with configure() before registerMappings (all optional):
hs.loadSpoon("AppLauncher"):configure({
notify = true, -- show Hammerspoon's hotkey alert with the mapping's name on each press
indicatorDelay = 0.2, -- seconds an action may run before the ● appears; false to never show it
actionTimeout = 5, -- seconds before an unfinished action stops counting as running; false to wait forever
logElapsedAbove = 0.1, -- seconds an action must take before its elapsed time is logged; 0 always, false never
}):registerMappings(hyper, mappings)
Hammerspoon draws the menu bar on the same main thread that runs your hotkeys, so the ● can only appear while that thread is free: while an app is launching, open is running, or an async function is waiting on something. Work that blocks the main thread shows nothing. Painting the indicator before every action would mean delaying every action, so AppLauncher shows it only for actions that turn out to be slow.
If an async function never calls done, the action stops counting as running after actionTimeout and a warning is logged, so the indicator can't get stuck. A done that arrives after that still logs the real elapsed time, if it exceeds logElapsedAbove.
Focusing apps and raising their windows uses the accessibility API, so Hammerspoon needs Accessibility permission (System Settings → Privacy & Security → Accessibility).
Full API reference is generated from the docstrings in init.lua (mise run docs).