mirror of
https://github.com/troglobit/libuev.git
synced 2026-10-29 12:00:42 +00:00
61 lines
1.6 KiB
Lua
Executable File
61 lines
1.6 KiB
Lua
Executable File
#!/usr/bin/env lua
|
|
|
|
|
|
local function copyrec(s, d)
|
|
d = d or {}
|
|
for k,v in pairs(s) do d[k] = v end
|
|
return d
|
|
end
|
|
|
|
local function findandset(line, pattern, ret)
|
|
local t = { line:find(pattern) }
|
|
return t[1] and copyrec({ start = t[1], stop = t[2], select(3, unpack(t)) }, ret)
|
|
or nil
|
|
end
|
|
|
|
local function regsub_s(t, reg, sub)
|
|
local num
|
|
t.s, num = string.gsub(t.s, reg, sub, 1234567890)
|
|
return num > 0
|
|
end
|
|
|
|
local line,file,modified,pid,running
|
|
local pids = {}
|
|
local fd = io.popen("sh -c 'vi -r 2>&1'", "r")
|
|
while true do
|
|
local t = {}
|
|
|
|
line = fd:read("*line")
|
|
if not line then break end
|
|
if findandset(line, "^ *In directory (.*)", t) then
|
|
io.write(t[1].."\n")
|
|
elseif findandset(line, "^ *file name: (.*)", t) then
|
|
file = t[1]
|
|
elseif findandset(line, "^ *modified: (%a*)", t) then
|
|
modified = t[1] ~= "no"
|
|
elseif findandset(line, "^ *process ID: (%d*)(.*)", t) then
|
|
pid = t[1]
|
|
tty = { s = "" }
|
|
if string.find(t[2], "(still running)", 1, true) ~= nil then
|
|
if pids["pid-"..pid] then
|
|
tty.s = pids["pid-"..pid]
|
|
else
|
|
local ifd = io.popen("ps --no-headers --format tty --pid " .. pid, "r")
|
|
tty.s = ":" .. ifd:read("*line")
|
|
ifd:close()
|
|
if regsub_s(tty, "tty", "") then
|
|
elseif regsub_s(tty, "pts/", "pt") then
|
|
elseif regsub_s(tty, "tts/", "t") then
|
|
end
|
|
pids["pid-"..pid] = tty.s
|
|
end
|
|
end
|
|
if file and modified ~= nil then
|
|
io.write(string.format("%s %5d%-5s %s\n", modified and "+" or "-",
|
|
pid, tty.s, file))
|
|
end
|
|
line,file,modified,pid,running = nil
|
|
end
|
|
end
|
|
|