lain/widgets/contrib/redshift.lua

78 lines
2.2 KiB
Lua
Raw Normal View History

2014-05-27 15:54:37 +02:00
--[[
2015-07-03 12:17:31 +02:00
Licensed under GNU General Public License v2
* (c) 2014, blueluke <http://github.com/blueluke>
2014-05-27 15:54:37 +02:00
--]]
2015-07-03 12:17:31 +02:00
local awful = require("awful")
local os = os
2014-05-27 15:54:37 +02:00
local setmetatable = setmetatable
2015-07-03 12:17:31 +02:00
-- Redshift
2014-05-27 15:54:37 +02:00
-- lain.widgets.contrib.redshift
local redshift = {}
local attached = false -- true if attached to a widget
local active = false -- true if redshift is active
local running = false -- true if redshift was initialized
local update_fnct = function() end -- Function that is run each time redshift is toggled. See redshift:attach().
2014-05-27 15:54:37 +02:00
local function init()
-- As there is no way to determine if redshift was previously
-- toggled off (i.e Awesome on-the-fly restart), kill redshift to make sure
os.execute("pkill redshift")
-- Remove existing color adjustment
2017-01-08 13:25:09 +01:00
awful.spawn_with_shell("redshift -x")
2014-05-27 15:54:37 +02:00
-- (Re)start redshift
2017-01-08 13:25:09 +01:00
awful.spawn_with_shell("redshift")
2014-05-27 15:54:37 +02:00
running = true
active = true
end
function redshift:toggle()
2015-07-03 12:17:31 +02:00
if running then
2014-05-27 15:54:37 +02:00
-- Sending -USR1 toggles redshift (See project website)
os.execute("pkill -USR1 redshift")
active = not active
2015-07-03 12:17:31 +02:00
else
2014-05-27 15:54:37 +02:00
init()
end
update_fnct()
end
function redshift:off()
if running and active then
redshift:toggle()
end
end
function redshift:on()
if not active then
redshift:toggle()
end
end
function redshift:is_active()
return active
end
-- Attach to a widget
-- Provides a button which toggles redshift on/off on click
2015-07-03 12:17:31 +02:00
-- @param widget: Widget to attach to.
-- @param fnct: Function to be run each time redshift is toggled (optional).
-- Use it to update widget text or icons on status change.
2014-05-27 15:54:37 +02:00
function redshift:attach(widget, fnct)
update_fnct = fnct or function() end
if not attached then
init()
attached = true
update_fnct()
end
widget:buttons(awful.util.table.join( awful.button({}, 1, function () redshift:toggle() end) ))
end
return setmetatable(redshift, { _call = function(_, ...) return create(...) end })