-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathcatch_exception.rb
More file actions
39 lines (30 loc) · 1.28 KB
/
catch_exception.rb
File metadata and controls
39 lines (30 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
STDOUT.sync = true
STDERR.sync = true
require 'pathname'
at_exit do
if (e = $!) && !e.instance_of?(SystemExit)
require "#{ENV['TM_SUPPORT_PATH']}/lib/escape"
require "cgi"
io = IO.for_fd(ENV['TM_ERROR_FD'].to_i)
io.write "<div id='exception_report' class='framed'>\n"
io.write "<p id='exception'><strong>#{e.class.name}:</strong> #{CGI.escapeHTML(e.message).sub(/`(\w+)'/, '<strong>\1</strong>')}</p>\n"
io.write "<blockquote><table border='0' cellspacing='4' cellpadding='0'>\n"
e.backtrace.each do |b|
if b =~ /(.*?):(\d+)(?::in\s*`(.*?)')?/ then
file, line, method = $1, $2, $3
url, display_name = '', 'untitled document';
if file != '-' && File.exists?(file) && !ENV['TM_SCRIPT_IS_UNTITLED'] then
file = Pathname.new(file).realpath.to_s
url = '&url=file://' + e_url(file)
display_name = File.basename(file)
end
io << "<tr><td><a class='near' href='txmt://open?line=#{line + url}'>"
io << (method ? "method #{CGI::escapeHTML method}" : '<em>at top level</em>')
io << "</a></td>\n<td>in <strong>#{CGI::escapeHTML display_name}</strong> at line #{line}</td></tr>\n"
end
end
io.write "</table></blockquote></div>"
io.flush
exit!
end
end