bspwm/examples/external_rules/lua/rulc
2014-01-21 20:48:49 +01:00

68 lines
1.4 KiB
Lua
Executable file

#! /usr/bin/env lua
local p = require "posix"
local port = 54321
local short = "hp:arltq"
local long = {
{"help", "none", 'h'},
{"port", "required", 'p'},
{"add", "none", 'a'},
{"remove", "none", 'r'},
{"list", "none", 'l'},
{"test", "none", 't'},
{"quit", "none", 'q'}
}
local cmd_assoc = {
a = "add",
r = "remove",
l = "list",
t = "test",
q = "quit"
}
local cmd
local data_idx = 1
for opt, optarg, optind, longind in p.getopt(arg, short, long) do
if opt == '?' then
print("Unrecognized option")
os.exit(1)
elseif opt == 'h' then
print("Usage: rulc [-h|-p PORT|-a|-r|-l|-t|-q] DATA ...")
os.exit(0)
elseif opt == 'p' then
port = optarg
else
cmd = cmd_assoc[opt]
end
data_idx = optind
end
if not cmd then
os.exit(1)
end
local msg = cmd
if cmd == "test" then
msg = string.format("%s {class=%q, instance=%q, title=%q, type=%q, state=%q}", msg, arg[data_idx], arg[data_idx+1], arg[data_idx+2], arg[data_idx+3], arg[data_idx+4])
elseif cmd == "add" then
msg = string.format("%s {%q, %q, %s}", msg, arg[data_idx], arg[data_idx+1], arg[data_idx+2] and string.format("{%s}", arg[data_idx+2]) or "")
elseif cmd == "remove" then
msg = string.format("%s %s", msg, arg[data_idx])
end
local fd = p.socket(p.AF_INET, p.SOCK_STREAM, 0)
local s = p.connect(fd, {family=p.AF_INET, addr="127.0.0.1", port=port})
if not s then
p.close(fd)
os.exit(1)
end
p.send(fd, msg)
rsp = p.recv(fd, p.BUFSIZ)
if rsp and #rsp > 0 then
print(rsp)
end
p.close(fd)