Reno is the second iteration of the AWMTK-powered AwesomeWM config.
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.
 
 
 
 

163 lines
6.4 KiB

-- This file is part of Reno desktop.
--
-- Reno desktop is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
--
-- Reno desktop is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with Reno desktop. If not, see <https://www.gnu.org/licenses/>.
local awful = require("awful")
local gears = require("gears")
local ask = require("asckey")
local fs = gears.filesystem
_G.MacroTimer = {}
_G.MacroActive = {}
local mconf = config.macros
local macro_loop = false
local macro_delay = mconf.step or 10
local macro_base_dir = mconf.base_dir or (root_path.."/macros/")
if not fs.dir_readable(root_path.."/macros/") then
fs.make_directories(root_path.."/macros/")
end
awesome.connect_signal("macro::record",function(filename)
if not filename then return end
local timeline = "loop="..tostring(macro_loop).."\n"..
"delay="..tostring(macro_delay).."\n"
require("naughty").notify({title =
"Recording macro "..
tostring(filename)..
" (Escape to stop)"
})
awful.keygrabber {
autostart = true,
stop_key = "Escape",
keypressed_callback = function(self, mod, key, event)
if key == " " then
key = "space"
end
timeline = timeline.."+"..key.."\n"
end,
keyreleased_callback = function(self, mod, key, event)
if key == " " then
key = "space"
end
timeline = timeline.."-"..key.."\n"
end,
stop_callback = function()
local macrofile = io.open(filename,"w")
if macrofile then
macrofile:write(timeline)
macrofile:close()
require("naughty").notify({title="Macro saved as "..tostring(filename)})
else
require("naughty").notify({title="Failed to save macro"})
end
-- For some reason after keygrabber is done input doesn't work
gears.timer.delayed_call(function()
awful.keygrabber:stop()
end)
end
}
end)
awesome.connect_signal("macro::play",function(filename)
if (not filename) or (not fs.file_readable(filename)) then
return
end
local macrofile = io.open(filename,"r")
local macrodata = macrofile:read("*a")
macrofile:close()
local macro = {}
local step = 0
macrodata:gsub("([^\n]+)",function(line)
table.insert(macro,line)
end)
local delay = tonumber(macro[2]:match("delay=(%d+)"))
_G.MacroActive[filename] = (macro[1]:match("loop=(.+)") == "true")
table.remove(macro,2)
table.remove(macro,1)
local macro_length = #macro
_G.MacroTimer[filename] = gears.timer.start_new((1/1000)*delay,function()
step = step + 1
local instruction = macro[step]
local event = (instruction:match("^%+") and "key_press") or "key_release"
root.fake_input(event,instruction:match("^[%+%-](.*)"))
if (step == macro_length) and (_G.MacroActive[filename]) then
step = 0
return true
elseif (step < macro_length) then
return true
else
_G.MacroTimer[filename] = nil
_G.MacroActive[filename] = nil
return false
end
end)
end)
root.keys(gears.table.join(
root.keys(),
ask.k(":macro.record_1", function()
awesome.emit_signal("macro::record",macro_base_dir.."macro1")
end,{group="macros",description="Record macro 1"}),
ask.k(":macro.record_2", function()
awesome.emit_signal("macro::record",macro_base_dir.."macro2")
end,{group="macros",description="Record macro 2"}),
ask.k(":macro.record_3", function()
awesome.emit_signal("macro::record",macro_base_dir.."macro3")
end,{group="macros",description="Record macro 3"}),
ask.k(":macro.record_4", function()
awesome.emit_signal("macro::record",macro_base_dir.."macro4")
end,{group="macros",description="Record macro 4"}),
ask.k(":macro.record_5", function()
awesome.emit_signal("macro::record",macro_base_dir.."macro5")
end,{group="macros",description="Record macro 5"}),
ask.k(":macro.play_1", function()
if not _G.MacroActive[macro_base_dir.."macro1"] then
awesome.emit_signal("macro::play",macro_base_dir.."macro1")
else
_G.MacroActive[macro_base_dir.."macro1"] = false
end
end,{group="macros",description="Play macro 1",release_pre=true}),
ask.k(":macro.play_2", function()
if not _G.MacroActive[macro_base_dir.."macro2"] then
awesome.emit_signal("macro::play",macro_base_dir.."macro2")
else
_G.MacroActive[macro_base_dir.."macro2"] = false
end
end,{group="macros",description="Play macro 2",release_pre=true}),
ask.k(":macro.play_3", function()
if not _G.MacroActive[macro_base_dir.."macro3"] then
awesome.emit_signal("macro::play",macro_base_dir.."macro3")
else
_G.MacroActive[macro_base_dir.."macro3"] = false
end
end,{group="macros",description="Play macro 3",release_pre=true}),
ask.k(":macro.play_4", function()
if not _G.MacroActive[macro_base_dir.."macro4"] then
awesome.emit_signal("macro::play",macro_base_dir.."macro4")
else
_G.MacroActive[macro_base_dir.."macro4"] = false
end
end,{group="macros",description="Play macro 4",release_pre=true}),
ask.k(":macro.play_5", function()
if not _G.MacroActive[macro_base_dir.."macro5"] then
awesome.emit_signal("macro::play",macro_base_dir.."macro5")
else
_G.MacroActive[macro_base_dir.."macro5"] = false
end
end,{group="macros",description="Play macro 5",release_pre=true}),
ask.k(":macro.loop",function()
macro_loop = not macro_loop
if macro_loop then
require("naughty").notify({title="Macro looping turned on"})
else
require("naughty").notify({title="Macro looping turned off"})
end
end,{group="macros",description="turn looping on/off"})
))