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
|
|
|
|
local spawn = awful.util.spawn_with_shell
|
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 = {}
|
|
|
|
|
2015-07-03 12:17:31 +02:00
|
|
|
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
|
|
|
|
spawn("redshift -x")
|
|
|
|
-- (Re)start redshift
|
|
|
|
spawn("redshift")
|
|
|
|
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 })
|