annotate lib/ipython_view.py @ 2405:69ca2b2fc133

overcomplicated attempt at persisting the pane layout in the rdf graph this was hard because we have to somehow wait for the graph to load before config'ing the panes
author drewp@bigasterisk.com
date Fri, 17 May 2024 16:58:26 -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)