Re: libseed-list interpreter, reading stdout
- From: "Alan Knowles" <alan akbkhome com>
- To: "Jonatan Liljedahl" <libseed-list-bounces gnome org>
- Cc: libseed-list gnome org
- Subject: Re: libseed-list interpreter, reading stdout
- Date: Tue, 29 Jun 2010 11:03:19 +0800
I ended up giving up when doing something similar.
Since I was doing all sorts of GIR calls, I would often segfault the whole application by running the wrong thing in the sandbox.
I ended up using a vte, and running another instance of seed and using a temporary file..
http://devel.akbkhome.com/seed/Vte.html
Regards
Alan
--- On 29/Jun/2010, Jonatan Liljedahl wrote:
> Hi,
> I'm making an interpreter program that creates a gtk window with a
> textview for log output, and listens on stdin. Every line that comes in
> is appended to a buffer until ^E is encountered, then the buffer is
> evaluated.
>
> I use this as a plugin for gedit, so that I can select text in a
> document and evaluate it in the seed interpreter while it's running, and
> since it's running a gtk mainloop I can use all stuff that needs this,
> like creating windows, setting up timers, etc "live".. (Right now it
> also parses the code through my AlgoScript parser, but it would be easy
> to bypass this for a flexible seed live-coding environment.)
>
> Now to the problem, for print() I can simply set ctx.global.print =
> myprint, where the latter is a function that appends text to the log
> window instead. But this doesn't work in all cases, since any imported
> module gets the default original print function in their context again,
> and also any errors or warnings printed from the C code still gets to
> stdout.. (like g_warning())
>
> One solution would be to use GLib.set_print_handler(),
> set_printerr_handler() and set_log_handler(), but these doesn't seem to
> work (probably needs some wrapper to call a supplied JS callback).
>
> So instead I want to just capture stdout, which would work for
> everything. I know how to capture stdout from a child process, but how
> do I capture my own stdout? I tried stuff like this:
>
> //var fd = os.dup(1);
> var fd = 1;
> var stdout = GLib.io_channel_unix_new(fd);
> GLib.io_channel_set_flags(stdout,GLib.IOFlags.NONBLOCK);
> GLib.io_add_watch(stdout, 0, GLib.IOCondition.IN, function(source,
> condition, data) {
> var x = new GLib.String;
> GLib.io_channel_read_line_string(source,x);
> _print(x.str);
> return true;
> });
>
> But all I can make it do is to redirect everything from stdin to this
> watcher (why this happens I don't understand), still triggering my
> stdin-watcher but only giving it empty strings..
>
> /Jonatan
> _______________________________________________
> libseed-list mailing list
> libseed-list gnome org
> http://mail.gnome.org/mailman/listinfo/libseed-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]