API Docs

Properties

hs.spoons

JSValue
A namespace holding every Spoon loaded so far via `loadSpoon()`, keyed by name - e.g. a Spoon loaded with `hs.loadSpoon("MySpoon")` is also reachable as `hs.spoons.MySpoon`. Empty until at least one Spoon has been loaded.

Methods

hs.reload() -> None

Destroy the current JavaScript runtime and start a new one, loading all configuration from disk again
hs.reload() -> None
None
hs.reload()

hs.collectGarbage() -> None

Force garbage collection of JavaScript objects that no longer have any references
hs.collectGarbage() -> None
None
This uses private macOS API
hs.collectGarbage()

hs.openConsole() -> None

Open the Hammerspoon Console window
hs.openConsole() -> None
None
hs.openConsole()

hs.closeConsole() -> None

Close the Hammerspoon Console window
hs.closeConsole() -> None
None
hs.closeConsole()

hs.clearConsole() -> None

Clear the Hammerspoon Console log
hs.clearConsole() -> None
None
hs.clearConsole()

hs.loadSpoon(name) -> Object

Load a Spoon - a packaged, reusable piece of configuration - by name, from the `Spoons` directory inside your config directory. A Spoon must contain a well-formed `spoon.json` (with non-empty `name`, `author`, `version`, and `description` fields) and an `init.js`, or loading fails with an exception. `init.js` is loaded through the same `require()` used for the rest of your config, so it can itself `require()` further files from within the Spoon's own directory using relative paths. On success, the Spoon's `module.exports` is also stored on `hs.spoons` under its name, so other code can reach an already-loaded Spoon without needing to call `loadSpoon()` again. `init.js` must set `module.exports` to an object (or a function, since functions are objects too) - loading fails with an exception otherwise. Its `author`, `description`, and `version` properties are then set from `spoon.json`, overwriting any of the same name the Spoon's own `init.js` set, so that information is always present and always reflects what's on disk. If the resulting object has an `init()` method, it's called automatically (with `this` bound to the object) before `loadSpoon()` returns - matching Hammerspoon 1's behavior. An exception thrown from `init()` fails the load: nothing is stored on `hs.spoons`, and `loadSpoon()` throws. Unlike `init.js` itself (which `require()` only ever evaluates once), `init()` runs again on every `loadSpoon()` call for the same Spoon, since the same cached object is returned each time - write it to be safe to call more than once, or do one-time setup at `init.js`'s top level instead.
hs.loadSpoon(name) -> Object
Name Type Description
name string The Spoon's name, matching its directory name under `Spoons/`
Object
Whatever the Spoon's `init.js` assigned to `module.exports`
const MySpoon = hs.loadSpoon("MySpoon")
console.log(MySpoon.version)
// ...later, from anywhere...
hs.spoons.MySpoon.doSomething()