mirror of https://github.com/einverne/dotfiles.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.9 KiB
120 lines
2.9 KiB
4 years ago
|
--- === Caffeine ===
|
||
|
---
|
||
|
--- Prevent the screen from going to sleep
|
||
|
--- Download: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip)
|
||
|
local obj = { __gc = true }
|
||
|
--obj.__index = obj
|
||
|
setmetatable(obj, obj)
|
||
|
obj.__gc = function(t)
|
||
|
t:stop()
|
||
|
end
|
||
|
|
||
|
-- Metadata
|
||
|
obj.name = "Caffeine"
|
||
|
obj.version = "1.0"
|
||
|
obj.author = "Chris Jones <[email protected]>"
|
||
|
obj.homepage = "https://github.com/Hammerspoon/Spoons"
|
||
|
obj.license = "MIT - https://opensource.org/licenses/MIT"
|
||
|
|
||
|
obj.menuBarItem = nil
|
||
|
obj.hotkeyToggle = nil
|
||
|
|
||
|
-- Internal function used to find our location, so we know where to load files from
|
||
|
local function script_path()
|
||
|
local str = debug.getinfo(2, "S").source:sub(2)
|
||
|
return str:match("(.*/)")
|
||
|
end
|
||
|
obj.spoonPath = script_path()
|
||
|
|
||
|
function obj:init()
|
||
|
end
|
||
|
|
||
|
--- Caffeine:bindHotkeys(mapping)
|
||
|
--- Method
|
||
|
--- Binds hotkeys for Caffeine
|
||
|
---
|
||
|
--- Parameters:
|
||
|
--- * mapping - A table containing hotkey modifier/key details for the following items:
|
||
|
--- * toggle - This will toggle the state of display sleep prevention, and update the menubar graphic
|
||
|
---
|
||
|
--- Returns:
|
||
|
--- * The Caffeine object
|
||
|
function obj:bindHotkeys(mapping)
|
||
|
if (self.hotkeyToggle) then
|
||
|
self.hotkeyToggle:delete()
|
||
|
end
|
||
|
local toggleMods = mapping["toggle"][1]
|
||
|
local toggleKey = mapping["toggle"][2]
|
||
|
self.hotkeyToggle = hs.hotkey.new(toggleMods, toggleKey, function() self.clicked() end)
|
||
|
|
||
|
return self
|
||
|
end
|
||
|
|
||
|
--- Caffeine:start()
|
||
|
--- Method
|
||
|
--- Starts Caffeine
|
||
|
---
|
||
|
--- Parameters:
|
||
|
--- * None
|
||
|
---
|
||
|
--- Returns:
|
||
|
--- * The Caffeine object
|
||
|
function obj:start()
|
||
|
if self.menuBarItem then self:stop() end
|
||
|
self.menuBarItem = hs.menubar.new()
|
||
|
self.menuBarItem:setClickCallback(self.clicked)
|
||
|
if (self.hotkeyToggle) then
|
||
|
self.hotkeyToggle:enable()
|
||
|
end
|
||
|
self.setDisplay(hs.caffeinate.get("displayIdle"))
|
||
|
|
||
|
return self
|
||
|
end
|
||
|
|
||
|
--- Caffeine:stop()
|
||
|
--- Method
|
||
|
--- Stops Caffeine
|
||
|
---
|
||
|
--- Parameters:
|
||
|
--- * None
|
||
|
---
|
||
|
--- Returns:
|
||
|
--- * The Caffeine object
|
||
|
function obj:stop()
|
||
|
if self.menuBarItem then self.menuBarItem:delete() end
|
||
|
if (self.hotkeyToggle) then
|
||
|
self.hotkeyToggle:disable()
|
||
|
end
|
||
|
self.menuBarItem = nil
|
||
|
return self
|
||
|
end
|
||
|
|
||
|
function obj.setDisplay(state)
|
||
|
local result
|
||
|
if state then
|
||
|
result = obj.menuBarItem:setIcon(obj.spoonPath.."/caffeine-on.pdf")
|
||
|
else
|
||
|
result = obj.menuBarItem:setIcon(obj.spoonPath.."/caffeine-off.pdf")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function obj.clicked()
|
||
|
obj.setDisplay(hs.caffeinate.toggle("displayIdle"))
|
||
|
end
|
||
|
|
||
|
--- Caffeine:setState(on)
|
||
|
--- Method
|
||
|
--- Sets whether or not caffeination should be enabled
|
||
|
---
|
||
|
--- Parameters:
|
||
|
--- * on - A boolean, true if screens should be kept awake, false to let macOS send them to sleep
|
||
|
---
|
||
|
--- Returns:
|
||
|
--- * None
|
||
|
function obj:setState(on)
|
||
|
hs.caffeinate.set("displayIdle", on)
|
||
|
obj.setDisplay(on)
|
||
|
end
|
||
|
|
||
|
return obj
|