hs
ModuleProperties
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
Declaration
hs.reload() -> None
Returns
None
Example
hs.reload()
hs.collectGarbage() -> None
Force garbage collection of JavaScript objects that no longer have any references
Declaration
hs.collectGarbage() -> None
Returns
None
Notes
This uses private macOS API
Example
hs.collectGarbage()
hs.openConsole() -> None
Open the Hammerspoon Console window
Declaration
hs.openConsole() -> None
Returns
None
Example
hs.openConsole()
hs.closeConsole() -> None
Close the Hammerspoon Console window
Declaration
hs.closeConsole() -> None
Returns
None
Example
hs.closeConsole()
hs.clearConsole() -> None
Clear the Hammerspoon Console log
Declaration
hs.clearConsole() -> None
Returns
None
Example
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.
Declaration
hs.loadSpoon(name) -> Object
Parameters
| Name | Type | Description |
|---|---|---|
| name | string | The Spoon's name, matching its directory name under `Spoons/` |
Returns
Object
Whatever the Spoon's `init.js` assigned to `module.exports`
Example
const MySpoon = hs.loadSpoon("MySpoon")
console.log(MySpoon.version)
// ...later, from anywhere...
hs.spoons.MySpoon.doSomething()