def pipe_to_process command
Open3.popen3(command) do |input, output, error|
err, data, * = IO.select [error], [input], nil
unless err.empty?
message = err.first.read
if message =~ /^\s*$/
warn "error running #{command} (but no error message)"
BufferManager.flash "Error running #{command}!"
else
warn "error running #{command}: #{message}"
BufferManager.flash "Error: #{message}"
end
return
end
data = data.first
data.sync = false
yield data
data.close
data, * = IO.select [output, error], nil, nil
data = data.first
if data.eof
BufferManager.flash "'#{command}' done!"
nil
else
data.read
end
end
end