annotate lib/ipython_view.py @ 2445:af83aeef8b0a

fancier spectrograms
author drewp@bigasterisk.com
date Sat, 01 Jun 2024 12:58:25 -0700
parents 3c523c71da29
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
1 # this version is adapted from http://wiki.ipython.org/Old_Embedding/GTK
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
2
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
3 """
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
4 Backend to the console plugin.
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
5
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
6 @author: Eitan Isaacson
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
7 @organization: IBM Corporation
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
8 @copyright: Copyright (c) 2007 IBM Corporation
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
9 @license: BSD
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
10
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
11 All rights reserved. This program and the accompanying materials are made
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
12 available under the terms of the BSD which accompanies this distribution, and
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
13 is available at U{http://www.opensource.org/licenses/bsd-license.php}
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
14 """
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
15 # this file is a modified version of source code from the Accerciser project
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
16 # http://live.gnome.org/accerciser
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
17
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
18 from gi.repository import Gtk
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
19 from gi.repository import Gdk
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
20 import re
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
21 import sys
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
22 import os
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
23 from gi.repository import Pango
1866
3c523c71da29 pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents: 1056
diff changeset
24 from io import StringIO
3c523c71da29 pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents: 1056
diff changeset
25 from functools import reduce
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
26
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
27 try:
1866
3c523c71da29 pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents: 1056
diff changeset
28 import IPython
3c523c71da29 pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents: 1056
diff changeset
29 except Exception as e:
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
30 raise "Error importing IPython (%s)" % str(e)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
31
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
32 ansi_colors = {'0;30': 'Black',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
33 '0;31': 'Red',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
34 '0;32': 'Green',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
35 '0;33': 'Brown',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
36 '0;34': 'Blue',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
37 '0;35': 'Purple',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
38 '0;36': 'Cyan',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
39 '0;37': 'LightGray',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
40 '1;30': 'DarkGray',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
41 '1;31': 'DarkRed',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
42 '1;32': 'SeaGreen',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
43 '1;33': 'Yellow',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
44 '1;34': 'LightBlue',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
45 '1;35': 'MediumPurple',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
46 '1;36': 'LightCyan',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
47 '1;37': 'White'}
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
48
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
49 class IterableIPShell:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
50 def __init__(self,argv=None,user_ns=None,user_global_ns=None,
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
51 cin=None, cout=None,cerr=None, input_func=None):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
52 if input_func:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
53 IPython.iplib.raw_input_original = input_func
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
54 if cin:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
55 IPython.Shell.Term.cin = cin
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
56 if cout:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
57 IPython.Shell.Term.cout = cout
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
58 if cerr:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
59 IPython.Shell.Term.cerr = cerr
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
60
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
61 if argv is None:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
62 argv=[]
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
63
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
64 # This is to get rid of the blockage that occurs during
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
65 # IPython.Shell.InteractiveShell.user_setup()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
66 IPython.iplib.raw_input = lambda x: None
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
67
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
68 self.term = IPython.genutils.IOTerm(cin=cin, cout=cout, cerr=cerr)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
69 os.environ['TERM'] = 'dumb'
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
70 excepthook = sys.excepthook
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
71 self.IP = IPython.Shell.make_IPython(argv,user_ns=user_ns,
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
72 user_global_ns=user_global_ns,
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
73 embedded=True,
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
74 shell_class=IPython.Shell.InteractiveShell)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
75 self.IP.system = lambda cmd: self.shell(self.IP.var_expand(cmd),
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
76 header='IPython system call: ',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
77 verbose=self.IP.rc.system_verbose)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
78 sys.excepthook = excepthook
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
79 self.iter_more = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
80 self.history_level = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
81 self.complete_sep = re.compile('[\s\{\}\[\]\(\)]')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
82
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
83 def execute(self):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
84 self.history_level = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
85 orig_stdout = sys.stdout
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
86 sys.stdout = IPython.Shell.Term.cout
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
87 try:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
88 line = self.IP.raw_input(None, self.iter_more)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
89 if self.IP.autoindent:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
90 self.IP.readline_startup_hook(None)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
91 except KeyboardInterrupt:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
92 self.IP.write('\nKeyboardInterrupt\n')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
93 self.IP.resetbuffer()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
94 # keep cache in sync with the prompt counter:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
95 self.IP.outputcache.prompt_count -= 1
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
96
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
97 if self.IP.autoindent:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
98 self.IP.indent_current_nsp = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
99 self.iter_more = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
100 except:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
101 self.IP.showtraceback()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
102 else:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
103 self.iter_more = self.IP.push(line)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
104 if (self.IP.SyntaxTB.last_syntax_error and
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
105 self.IP.rc.autoedit_syntax):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
106 self.IP.edit_syntax_error()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
107 if self.iter_more:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
108 self.prompt = str(self.IP.outputcache.prompt2).strip()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
109 if self.IP.autoindent:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
110 self.IP.readline_startup_hook(self.IP.pre_readline)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
111 else:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
112 self.prompt = str(self.IP.outputcache.prompt1).strip()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
113 sys.stdout = orig_stdout
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
114
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
115 def historyBack(self):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
116 self.history_level -= 1
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
117 return self._getHistory()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
118
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
119 def historyForward(self):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
120 self.history_level += 1
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
121 return self._getHistory()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
122
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
123 def _getHistory(self):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
124 try:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
125 rv = self.IP.user_ns['In'][self.history_level].strip('\n')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
126 except IndexError:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
127 self.history_level = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
128 rv = ''
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
129 return rv
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
130
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
131 def updateNamespace(self, ns_dict):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
132 self.IP.user_ns.update(ns_dict)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
133
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
134 def complete(self, line):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
135 split_line = self.complete_sep.split(line)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
136 possibilities = self.IP.complete(split_line[-1])
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
137 if possibilities:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
138 common_prefix = reduce(self._commonPrefix, possibilities)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
139 completed = line[:-len(split_line[-1])]+common_prefix
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
140 else:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
141 completed = line
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
142 return completed, possibilities
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
143
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
144 def _commonPrefix(self, str1, str2):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
145 for i in range(len(str1)):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
146 if not str2.startswith(str1[:i+1]):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
147 return str1[:i]
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
148 return str1
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
149
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
150 def shell(self, cmd,verbose=0,debug=0,header=''):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
151 stat = 0
1866
3c523c71da29 pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents: 1056
diff changeset
152 if verbose or debug: print(header+cmd)
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
153 # flush stdout so we don't mangle python's buffering
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
154 if not debug:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
155 input, output = os.popen4(cmd)
1866
3c523c71da29 pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents: 1056
diff changeset
156 print(output.read())
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
157 output.close()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
158 input.close()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
159
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
160 class ConsoleView(Gtk.TextView):
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
161 def __init__(self):
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
162 Gtk.TextView.__init__(self)
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
163 self.modify_font(Pango.FontDescription('Mono'))
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
164 self.set_cursor_visible(True)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
165 self.text_buffer = self.get_buffer()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
166 self.mark = self.text_buffer.create_mark('scroll_mark',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
167 self.text_buffer.get_end_iter(),
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
168 False)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
169 for code in ansi_colors:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
170 self.text_buffer.create_tag(code,
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
171 foreground=ansi_colors[code],
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
172 weight=700)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
173 self.text_buffer.create_tag('0')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
174 self.text_buffer.create_tag('notouch', editable=False)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
175 self.color_pat = re.compile('\x01?\x1b\[(.*?)m\x02?')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
176 self.line_start = \
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
177 self.text_buffer.create_mark('line_start',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
178 self.text_buffer.get_end_iter(), True
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
179 )
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
180 self.connect('key-press-event', self._onKeypress)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
181 self.last_cursor_pos = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
182
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
183 def write(self, text, editable=False):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
184 segments = self.color_pat.split(text)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
185 segment = segments.pop(0)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
186 start_mark = self.text_buffer.create_mark(None,
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
187 self.text_buffer.get_end_iter(),
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
188 True)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
189 self.text_buffer.insert(self.text_buffer.get_end_iter(), segment)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
190
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
191 if segments:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
192 ansi_tags = self.color_pat.findall(text)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
193 for tag in ansi_tags:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
194 i = segments.index(tag)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
195 self.text_buffer.insert_with_tags_by_name(self.text_buffer.get_end_iter(),
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
196 segments[i+1], tag)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
197 segments.pop(i)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
198 if not editable:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
199 self.text_buffer.apply_tag_by_name('notouch',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
200 self.text_buffer.get_iter_at_mark(start_mark),
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
201 self.text_buffer.get_end_iter())
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
202 self.text_buffer.delete_mark(start_mark)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
203 self.scroll_mark_onscreen(self.mark)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
204
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
205 def showPrompt(self, prompt):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
206 self.write(prompt)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
207 self.text_buffer.move_mark(self.line_start,self.text_buffer.get_end_iter())
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
208
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
209 def changeLine(self, text):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
210 iter = self.text_buffer.get_iter_at_mark(self.line_start)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
211 iter.forward_to_line_end()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
212 self.text_buffer.delete(self.text_buffer.get_iter_at_mark(self.line_start), iter)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
213 self.write(text, True)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
214
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
215 def getCurrentLine(self):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
216 rv = self.text_buffer.get_slice(self.text_buffer.get_iter_at_mark(self.line_start),
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
217 self.text_buffer.get_end_iter(), False)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
218 return rv
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
219
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
220 def showReturned(self, text):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
221 iter = self.text_buffer.get_iter_at_mark(self.line_start)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
222 iter.forward_to_line_end()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
223 self.text_buffer.apply_tag_by_name('notouch',
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
224 self.text_buffer.get_iter_at_mark(self.line_start),
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
225 iter)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
226 self.write('\n'+text)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
227 if text:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
228 self.write('\n')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
229 self.showPrompt(self.prompt)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
230 self.text_buffer.move_mark(self.line_start,self.text_buffer.get_end_iter())
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
231 self.text_buffer.place_cursor(self.text_buffer.get_end_iter())
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
232
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
233 def _onKeypress(self, obj, event):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
234 if not event.string:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
235 return
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
236 insert_mark = self.text_buffer.get_insert()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
237 insert_iter = self.text_buffer.get_iter_at_mark(insert_mark)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
238 selection_mark = self.text_buffer.get_selection_bound()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
239 selection_iter = self.text_buffer.get_iter_at_mark(selection_mark)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
240 start_iter = self.text_buffer.get_iter_at_mark(self.line_start)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
241 if start_iter.compare(insert_iter) <= 0 and \
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
242 start_iter.compare(selection_iter) <= 0:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
243 return
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
244 elif start_iter.compare(insert_iter) > 0 and \
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
245 start_iter.compare(selection_iter) > 0:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
246 self.text_buffer.place_cursor(start_iter)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
247 elif insert_iter.compare(selection_iter) < 0:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
248 self.text_buffer.move_mark(insert_mark, start_iter)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
249 elif insert_iter.compare(selection_iter) > 0:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
250 self.text_buffer.move_mark(selection_mark, start_iter)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
251
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
252
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
253 class IPythonView(ConsoleView, IterableIPShell):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
254 def __init__(self, **kw):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
255 ConsoleView.__init__(self)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
256 self.cout = StringIO()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
257 IterableIPShell.__init__(self, cout=self.cout,cerr=self.cout,
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
258 input_func=self.raw_input, **kw)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
259 self.connect('key_press_event', self.keyPress)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
260 self.execute()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
261 self.cout.truncate(0)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
262 self.showPrompt(self.prompt)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
263 self.interrupt = False
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
264
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
265 def raw_input(self, prompt=''):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
266 if self.interrupt:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
267 self.interrupt = False
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
268 raise KeyboardInterrupt
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
269 return self.getCurrentLine()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
270
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
271 def keyPress(self, widget, event):
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
272 if event.state & Gdk.ModifierType.CONTROL_MASK and event.keyval == 99:
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
273 self.interrupt = True
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
274 self._processLine()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
275 return True
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
276 elif event.keyval == Gtk.keysyms.Return:
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
277 self._processLine()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
278 return True
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
279 elif event.keyval == Gtk.keysyms.Up:
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
280 self.changeLine(self.historyBack())
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
281 return True
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
282 elif event.keyval == Gtk.keysyms.Down:
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
283 self.changeLine(self.historyForward())
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
284 return True
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
285 # todo: Home needs to advance past the ipython prompt
1056
547d65ea9902 port curvecalc to gtk3. mostly worked, but there are severe bugs with redraws
Drew Perttula <drewp@bigasterisk.com>
parents: 709
diff changeset
286 elif event.keyval == Gtk.keysyms.Tab:
709
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
287 if not self.getCurrentLine().strip():
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
288 return False
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
289 completed, possibilities = self.complete(self.getCurrentLine())
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
290 if len(possibilities) > 1:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
291 slice = self.getCurrentLine()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
292 self.write('\n')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
293 for symbol in possibilities:
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
294 self.write(symbol+'\n')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
295 self.showPrompt(self.prompt)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
296 self.changeLine(completed or slice)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
297 return True
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
298
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
299 def _processLine(self):
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
300 self.history_pos = 0
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
301 self.execute()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
302 rv = self.cout.getvalue()
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
303 if rv: rv = rv.strip('\n')
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
304 self.showReturned(rv)
7a41504ed8fc 3rdparty ipython widget
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
305 self.cout.truncate(0)