I wrote a program in C++ which does some long calculations. For information purpose it has a "cout" function which tels me about a progress of evaluation. I'm used to compile my program via TM with my own boundle-command script which looks like that: ------------------------------------------------------------ echo "<html><body><pre>"
make | pre
find_name="grep 'NAME=' ./makefile | cut -c 6- " cmd= `eval $find_name | awk '{print "./"$0}'` $cmd
echo "</pre></body></html>" ------------------------------------------------------------ My problem is that the standard output (text that "cout" presents) is shown at once after program is finished (but non during program is running) so I don't see progress of calculation.
Is there a way for presenting standard output in these case (in real-time)?
maybe try:
if ($ENV{'TM_PID'}) { $| = 1 };
at the start of your script. Which I ripped out of another thread:
Alex Ross z-textmate@lasersox.net date Mon, Mar 8, 2010 at 3:46 AM subject [TxMt] Re: Interactive input in Textmate (for Perl)
-chris
On Sun, Mar 21, 2010 at 4:46 PM, hugos kluczka@o2.pl wrote:
I wrote a program in C++ which does some long calculations. For information purpose it has a "cout" function which tels me about a progress of evaluation. I'm used to compile my program via TM with my own boundle-command script which looks like that:
echo "<html><body><pre>"
make | pre
find_name="grep 'NAME=' ./makefile | cut -c 6- " cmd= `eval $find_name | awk '{print "./"$0}'` $cmd
echo "</pre></body></html>"
My problem is that the standard output (text that "cout" presents) is shown at once after program is finished (but non during program is running) so I don't see progress of calculation.
Is there a way for presenting standard output in these case (in real-time)?
View this message in context: http://old.nabble.com/Problem-with-real-time-presenting-standard-output-%28c... Sent from the textmate users mailing list archive at Nabble.com.
textmate mailing list textmate@lists.macromates.com http://lists.macromates.com/listinfo/textmate
hugos kluczka@o2.pl wrote:
I wrote a program in C++ which does some long calculations. For information purpose it has a "cout" function which tels me about a progress of evaluation. I'm used to compile my program via TM with my own boundle-command script which looks like that:
echo "<html><body><pre>"
make | pre
find_name="grep 'NAME=' ./makefile | cut -c 6- " cmd= `eval $find_name | awk '{print "./"$0}'` $cmd
echo "</pre></body></html>"
My problem is that the standard output (text that "cout" presents) is shown at once after program is finished (but non during program is running) so I don't see progress of calculation.
Is there a way for presenting standard output in these case (in real-time)?
The first thing to try is getting rid of the <pre> tags, since these explicitly *prevent* output from appearing in real time.
If that works, then you may notice that you're losing the formatting advantage of using <pre>. You can work around this, and keep the <pre>, by appending <br> tags to each line as it appears, but to do that you're probably going to need to pipe your output through something else.
For example, what I do (since Ruby is what I happen to use) is wrap the call to my script in a Ruby script which redirects stdout to pass thru my own class. Here are some relevant excerpts:
require "#{ENV["TM_SUPPORT_PATH"]}/lib/web_preview.rb" require "#{ENV["TM_SUPPORT_PATH"]}/lib/escape.rb"
def write(s) s = htmlize(s, :no_newline_after_br => true) @old_stdout.print s end
So, what happens is as output occurs it is passed to me, because I am substituting myself for stdout. (Heh heh.) Meanwhile the real stdout has been saved as @old_stdout. So my write() is called (because I appear to be stdout), I fix up the output with a <br> using TextMate's built-in htmlize(), and then pass the line on out to the real stdout, thus causing it to appear in TextMate's output window, in real time.
So you might be able to set up a pipe that does something similar. There are buffering issues, of course, which are too elaborate to discuss here... :)
m.