Example #1
0
File: shell.py Project: burst/burst
def main_twisted(con, my_ns):
    import gtk
    from ipython_view import IPythonView
    import pango

    import platform
    if platform.system()=="Windows":
            FONT = "Lucida Console 9"
    else:
            FONT = "Luxi Mono 10"

    W = gtk.Window()
    W.set_size_request(750,550)
    W.set_resizable(True)
    S = gtk.ScrolledWindow()
    S.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
    V = IPythonView(user_ns=my_ns)
    shell = V.IP
    V.modify_font(pango.FontDescription(FONT))
    V.set_wrap_mode(gtk.WRAP_CHAR)
    V.show()
    S.add(V)
    S.show()
    W.add(S)
    W.show()
    W.connect('delete_event',lambda x,y:False)
    W.connect('destroy',lambda x:gtk.main_quit())

    globals()['shell'] = shell # for later updating variables in user table
    globals()['user_ns'] = my_ns
    pimp_my_shell(shell, con)

    twisted_banner(print_own_deferred_help = True)

    # Start the mainloop, and add a hook to display deferred results when they
    # are available (also affects *any* deferred you try to print)
    import twisted.internet.defer as defer
    from IPython.hooks import result_display
    from IPython.genutils import Term

    def print_deferred(x):
        s = str(x)
        if len(s) > 1000:
            s = s[:1000] + '...'
        print >>Term.cout, "deferred: %s" % s
        shell.user_ns['_d'] = x
        return x

    def display_deferred(self, arg):
        # don't display already called deferreds?
        if isinstance(arg, defer.Deferred):
            arg.addCallback(print_deferred)
        else:
            result_display(self, arg)
    shell.set_hook('result_display', display_deferred)

    start_names_request(my_ns)

    #gtk.main()
    from twisted.internet import reactor
    reactor.run()