0.9.44 - 15 Jan 2016
Minimum OS X version: 10.8
Core
- The bundled version of Lua is now 5.3.2
- The Hammerspoon community Code of Conduct has been updated to Contributors Covenant 1.3.0
- Added: hs.printf()
Extensions
- Fixed: hs.menubar no longer causes WindowServer to log an error when menu items are removed
- Fixed: hs.drawing should no longer crash on invalid UTF-8 inputs
- Fixed: various minor issues in hs.grid
- Fixed: hs.window.filter is now more reliable when “unusual” helper applications are running
- Fixed: hs.host no longer crashes when iterating volumes while a volume is being removed from the system
- Fixed: hs.urlevent now handles HTML files being opened by the system, and now works correctly if an http(s) URL, or HTML file, is opened while Hammerspoon is not running
- Changed: hs.eventtap.event events are now more efficient and reliable
- Changed: hs.webview now hands unknown URL schemes to the OS
- Changed: hs.wifi can now perform background scans and return more information about WiFi adapters
- Added: hs.redshift
- Added: hs.speech and hs.speech.listener for Text-To-Speech and Speech Recognition, respectively
- Added: hs.fs.volume
- Added: hs.chooser
- Added: hs.task now supports long-running tasks, with callbacks for capturing stdout/stderr
- Added: hs.task now supports writing data to the stdin of tasks
- Added: hs.task:workingDirectory(), hs.task:setCallback()
- Added: hs.console for interacting with the Hammerspoon Console window
- Added: hs.drawing.arc() for drawing partial circles
- Added: hs.window.filter.windowAllowed, hs.window.filter.windowRejected, hs.window.filter.hasWindow and hs.window.filter.hasNoWindows events
- Added: hs.timer.doAt(), hs.timer.delayed() and hs.timer.localTime()
- Added: hs.setLogLevel()
- Added: hs.logger now keeps a small history buffer
- Added: .getVolume(), .setVolume(), .volumeUp(), .volumeDown(), .getPosition(), .setPosition(), .ff() and .rw() to hs.itunes and hs.spotify
- Added: hs.caffeinate.watcher now supports events for screensaver activity and Fast User Switching activity
- Removed: hs.crash.isMainThread() as we now perform this check automatically in almost all internal functions
0.9.43 - 17 Nov 2015
Minimum OS X version: 10.8
Core
- Improved the icon for non-retina screens
- LuaSkin API documentation is now published at http://www.hammerspoon.org/docs/LuaSkin/
- Force OS X to not try and place Hammerspoon in AppNap
- Updated Crashlytics.framework to 3.4.0
Extensions
- Fixed: hs.expose is now correctly included in the application
- Fixed: hs.screen.find() by screen ID now works correctly
- Fixed: hs.drawing:setImageFromPath() and hs.drawing:setImageFromASCII() now work correctly
- Changed: The desktop is now excluded from hs.window.allWindows()
- Changed: The play() functions in hs.spotify and hs.itunes no longer toggle between play and pause
- Changed: hs.layout now defaults to using the main screen if it encounters a problem finding a screen
- Changed: hs.application.nameForBundleID() now returns the full application name, not the name of its executable
- Added: hs.window.desktop()
- Added: hs.audiodevice can now inspect device datasources and watch for configuration changes and device addition/removal
- Added: hs.audiodevice.watcher for observing changes on specific audio devices (e.g. headphone insertion/removal)
- Added: hs.audiodevice.findDeviceByName(), hs.audiodevice.findOutputDeviceByUID(), hs.audiodevice.findInputDeviceByUID(), hs.audiodevice:jackConnected()
- Added: hs.spotify.playpause(), hs.spotify.getPlayerState(), hs.spotify.isRunning(), hs.spotify.isPlaying()
- Added: hs.itunes.playpause(), hs.itunes.getPlayerState(), hs.itunes.isRunning(), hs.itunes.isPlaying()
- Added: hs.application:isRunning()
- Added: hs.screen:getBrightness(), hs.screen:setBrightness() (separate from hs.brightness because they are able to work on Apple external displays)
- Added: hs.menubar:frame()
- Added: hs.styledtext (highly configurable text styling for hs.drawing)
- Added: hs.javascript (analogous to hs.applescript)
- Added: hs.pasteboard.getImageContents(), hs.pasteboard.setImageContents()
- Added: hs.task (asynchronous execution of external binaries)
- Added: hs.host.volumeInformation()
- Added: hs.keycodes.layouts(), hs.keycodes.currentLayout(), hs.keycodes.setLayout()
- Added: hs.drawing:frame()