I am writing some code to write out an email to a file, let you edit it in your own editor, and when you're done you can tell my code to carry on. I'd like to have it catch the common error where you still have the file open, and therefore might not have saved it.
My first attempt was to try to obtain an exclusive lock on the file (using File.flock) but that never caught it. A bit more googling suggests that this is a hard problem.
The best suggestion appears to be to look for common lock files, eg vi foo
will make .foo.swp
while joe foo
will make .#foo
.
So the question is, is there a better way to tell if a file is being edited? And if not, is there a list of all common lock file naming conventions?
Use
system("#{ENV['EDITOR']} #{path})
to call up their editor of choice. The program will continue when that process ends, ie, they exit their editor.If you don't trust them to exit their editor, you could fork off a process to watch the file's modification time, and queue off the rest of the program when the modification time changes (though this may happen multiple times if they save incrementally).