summaryrefslogtreecommitdiff
path: root/lain/widgets/contrib/redshift.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lain/widgets/contrib/redshift.lua')
-rw-r--r--lain/widgets/contrib/redshift.lua79
1 files changed, 79 insertions, 0 deletions
diff --git a/lain/widgets/contrib/redshift.lua b/lain/widgets/contrib/redshift.lua
new file mode 100644
index 0000000..5ed9300
--- /dev/null
+++ b/lain/widgets/contrib/redshift.lua
@@ -0,0 +1,79 @@
+
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2014, blueluke <http://github.com/blueluke>
+
+--]]
+
+local awful = require("awful")
+local os = os
+local spawn = awful.util.spawn_with_shell
+
+local setmetatable = setmetatable
+
+-- Redshift
+-- 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().
+
+
+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()
+ if running then
+ -- Sending -USR1 toggles redshift (See project website)
+ os.execute("pkill -USR1 redshift")
+ active = not active
+ else
+ 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
+-- @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.
+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 })