[TxMt] Re: error messages - R-Bundle
Martin Batholdy
batholdy at googlemail.com
Tue Feb 7 10:31:32 UTC 2012
Dear Hans,
Now it happened to me, that a script was actually finished, but the loading-circle of the textmate-window still indicated, that the script is running.
(I saw that it actually was finished by the files it generates).
I also didn't get any print-messages that were in the code.
best,
martin
On 04.02.2012, at 18:16, Hans-Jörg Bibiko wrote:
> Hi,
>
> maybe I found a fix for that issue (at least my test script now runs :) ):
>
> The new R.tmbundle stuff I host at https://github.com/avian/r.tmbundle/
> thus here the code which should be tested.
>
> Please replace everything in between
>
> STDOUT.sync = true {... and ...} STDOUT.flush
>
> in file tmR.rb by:
>
> STDOUT.sync = false
> STDERR.sync = false
>
> descriptors = [stdout, stderr]
> descriptors.each { |fd| fd.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK) }
> until descriptors.empty?
> select(descriptors).shift.each do |io|
> begin
> str = io.readline
> rescue
> descriptors.delete io
> io.close
> break
> end
> if str.nil? or str.empty?
> descriptors.delete io
> io.close
> elsif io == stderr
> # just in case
> print hideStartMessageJS
> print %{<span style="color: red">#{esc str}</span>}
> elsif io == stdout
> print hideStartMessageJS
> str.each_line do |line|
> # line counter for top level source
> if line.include?("#{linecountermarker}")
> linecounter += 1
> line.sub!("#{linecountermarker}", '')
> end
> # check for a comment sign at the beginning of a line
> if line.match(/>\s*#/)
> print "<i><font color=blue>#{esc line.chomp}</font></i>\n"
> # check for a comment within a line - regexp should be improved yet!
> elsif m=line.match(/(.*?)(#[^"']*)$/)
> print esc(m[1]).gsub(/^(>|\+)/,'<a class="prompt" href="txmt://open?line='+linecounter.to_s+'">\1</a>')
> print "<i><font color=blue>#{esc(m[2]).chomp}</font></i>\n"
> # check for error messages
> elsif m=line.match(/(?i)^\s*(error|erreur|fehler|errore|erro)( |:)/)
> where = (isSelection) ? " of selection" : ""
> print "<span style='color: red'>#{esc str.gsub(%r{(?m).*?#{m[1]}},m[1]).chomp}<br /><i>RMate</i> stopped at <a href='txmt://open?line=#{linecounter}'>line #{linecounter-selectionlinestart}#{where}</a></span><br />".gsub(%r{source\("(.*?)"\)},'source("<a href="txmt://open?url=file://\1">\1</a>")')
> print "<hr noshade width='300' size='2' align='left' color=lightgrey>"
> break
> # check for warnings
> elsif line.match(/^\s*(Warning|Warning messages?|Message d.avis|Warnmeldung|Messaggio di avvertimento|Mensagem de aviso):/)
> print "<span style='color: gray'>#{esc line}</span>"
> # print line simply with hyperlinked prompt if given
> elsif line.match(/_\x8./)
> print "#{line.gsub(/_\x8(.)/,'<b>\1</b>')}"
> else
> print esc(line).gsub(/^[\x0-\x9]?(>|\+)/,'<a class="prompt" href="txmt://open?line='+linecounter.to_s+'">\1</a>')
> end
> end
> end
> end
> end
>
> STDOUT.flush
>
> Feedback is welcome :)
>
> Cheers,
> --Hans
>
>
> _______________________________________________
> textmate mailing list
> textmate at lists.macromates.com
> http://lists.macromates.com/listinfo/textmate
More information about the textmate
mailing list