--[[ Licensed under GNU General Public License v2 * (c) 2017, Luca CPZ * (c) 2014, blueluke --]] local async = require('lain.helpers').async local awful = require('awful') local execute = os.execute local type = type -- Redshift -- lain.widget.contrib.redshift local redshift = { active = false, pid = nil } function redshift.start() execute('pkill redshift') awful.spawn.with_shell('redshift -x') -- clear adjustments redshift.pid = awful.spawn.with_shell('redshift') redshift.active = true if type(redshift.update_fun) == 'function' then redshift.update_fun(redshift.active) end end function redshift.toggle() async({ awful.util.shell, '-c', string.format('ps -p %d -o pid=', redshift.pid) }, function(f) if f and #f > 0 then -- redshift is running -- Sending -USR1 toggles redshift (See project website) execute('pkill -USR1 redshift') redshift.active = not redshift.active else -- not started or killed, (re)start it redshift.start() end redshift.update_fun(redshift.active) end) end -- Attach to a widget -- Provides a button which toggles redshift on/off on click -- @param widget: Widget to attach to. -- @param fun: 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, fun) redshift.update_fun = fun or function() end if not redshift.pid then redshift.start() end if widget then widget:buttons(awful.util.table.join(awful.button({}, 1, function() redshift.toggle() end))) end end return redshift