aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.lua11
-rw-r--r--lockfiles.lua12
2 files changed, 13 insertions, 10 deletions
diff --git a/init.lua b/init.lua
index 37504ce..0c47973 100644
--- a/init.lua
+++ b/init.lua
@@ -31,9 +31,9 @@ end
-- get a user confirmation
-- return true if user selected yes, false otherwise
-local function confirm(path)
+local function confirm(path, pid)
local choices = 'no\nyes'
- local prompt = path .. ' exists. Edit anyway:'
+ local prompt = path .. ' for PID '..pid .. ' exists. Edit anyway:'
local cmd = 'printf %s \'' .. choices .. '\' | vis-menu -b -p \'' .. prompt .. '\''
-- local status, output = vis:pipe(nil, {start = 0, finish = 0}, cmd)
@@ -43,7 +43,7 @@ local function confirm(path)
vis:redraw()
if status == 0 then
- return 'yes' == output:sub(1, 3)
+ return output:find('^edit') ~= nil
end
return false
end
@@ -56,9 +56,10 @@ vis.events.subscribe(vis.events.FILE_OPEN, function(file)
return
end
local lfile_path = lockfiles.lock_file_path(get_lock_dir(), file.path)
- if lockfiles.create_lock_file(get_lock_dir(), lfile_path) then
+ local lock_pid = lockfiles.create_lock_file(get_lock_dir(), lfile_path)
+ if lockfiles.vis_pid == lock_pid then
created_locks[file.path] = lfile_path
- elseif not confirm(lfile_path) then
+ elseif not confirm(lfile_path, lock_pid) then
vis:exit(1)
end
end)
diff --git a/lockfiles.lua b/lockfiles.lua
index d018bc9..e223e10 100644
--- a/lockfiles.lua
+++ b/lockfiles.lua
@@ -45,11 +45,14 @@ do
end
assert(vis_pid)
+-- returns PID owning lock (possibly vis_pid)
local function create_lock_file(lock_dir, lfile_path)
+ local lock_pid
local lock_file = io.open(lfile_path)
if lock_file then
+ lock_pid = lock_file:read('*n')
lock_file:close()
- return false
+ return lock_pid
end
-- create the lock file with our pid
@@ -64,11 +67,9 @@ local function create_lock_file(lock_dir, lfile_path)
-- detect a possible race
lock_file = assert(io.open(lfile_path))
- local lock_pid = lock_file:read('*n')
+ lock_pid = tonumber(lock_file:read('*n'))
lock_file:close()
- local locked = tonumber(lock_pid) == vis_pid
-
- return locked
+ return lock_pid
end
local function delete_lock_file(lfile_path)
@@ -79,6 +80,7 @@ local function delete_lock_file(lfile_path)
end
return {
+ vis_pid = vis_pid,
capture_cmd = capture_cmd,
lock_file_path = lock_file_path,
delete_lock_file = delete_lock_file,