GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Public Member Functions | Data Fields
pycons.console.Console Class Reference
Inheritance diagram for pycons.console.Console:

Public Member Functions

def __init__
 
def history_init
 
def history_save
 
def history_add
 
def history_reset
 
def history_next
 
def history_prev
 
def raw_input
 
def grab_focus
 
def write
 
def overwrite
 
def last_line
 
def prompt
 
def key_press_event
 
def execute
 
def quit
 

Data Fields

 do_quit
 
 view
 
 buffer
 
 color_pat
 
 killbuffer
 
 argv
 
 cout
 
 shell
 
 interrupt
 
 input_mode
 
 input
 
 stdout
 
 stderr
 
 stdin
 
 fifoname
 
 piperead
 
 pipewrite
 
 history_file
 
 history_size
 
 history_index
 

Detailed Description

GTK python console 

Definition at line 122 of file console.py.

Constructor & Destructor Documentation

def pycons.console.Console.__init__ (   self,
  argv = [],
  shelltype = 'python',
  banner = [],
  filename = None,
  size = 100 
)
Console interface building + initialization

Definition at line 126 of file console.py.

127  filename=None, size=100):
128 
129  """ Console interface building + initialization"""
130 
131  # GTK interface
132  self.do_quit = False
133  gtk.ScrolledWindow.__init__(self)
134  self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
135  self.set_shadow_type (gtk.SHADOW_NONE)
136  self.set_border_width(0)
137  self.view = gtk.TextView()
138  self.view.modify_font (pango.FontDescription("Mono 10"))
139  self.view.set_editable (True)
140  self.view.set_wrap_mode(True)
141  self.view.set_left_margin(0)
142  self.view.set_right_margin(0)
143  self.buffer = self.view.get_buffer()
144  self.buffer.create_tag ('title',
145  indent = 2,
146  weight=pango.WEIGHT_BOLD,
147  foreground='blue',
148  font='Mono 12')
149  self.buffer.create_tag ('subtitle',
150  indent = 2,
151  foreground='blue',
152  font='Mono 8')
153  self.buffer.create_tag ('output',
154  foreground = 'blue',
155  font='Mono 10')
156  self.buffer.create_tag ('error',
157  foreground='red',
158  style=pango.STYLE_OBLIQUE,
159  font='Mono 10')
160  self.buffer.create_tag ('prompt',
161  foreground='blue',
162  weight=pango.WEIGHT_BOLD,
163  font='Mono 10')
164  self.buffer.create_tag('0')
165  self.color_pat = re.compile('\x01?\x1b\[(.*?)m\x02?')
166  for code in ansi_colors:
167  self.buffer.create_tag(code,
168  foreground=ansi_colors[code],
169  weight=700)
170  for text, style in banner:
171  self.write (text, style)
172  iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
173  self.buffer.create_mark ('linestart', iter, True)
174  self.view.add_events(gtk.gdk.KEY_PRESS_MASK)
175  self.view.connect ('key-press-event', self.key_press_event)
176  self.add(self.view)
177  self.show_all()
178  self.killbuffer = None
179 
180  # Console stuff
181  self.argv = argv
182  self.history_init(filename, size)
183  self.cout = StringIO()
184  self.cout.truncate(0)
185  if shelltype=='ipython':
186  self.shell = ishell.Shell(argv,locals(),globals(),
187  cout=self.cout, cerr=self.cout,
188  input_func=self.raw_input)
189  else:
190  self.shell = shell.Shell(locals(),globals())
191  self.interrupt = False
192  self.input_mode = False
193  self.input = None
194  self.stdout = ConsoleOut (self, sys.stdout.fileno(), 'output')
195  self.stderr = ConsoleOut (self, sys.stderr.fileno(), 'error')
196  self.stdin = ConsoleIn (self, sys.stdin.fileno())
197 
198  # Create a named pipe for system stdout/stderr redirection
199  self.fifoname = tempfile.mktemp()
200  if not os.path.exists (self.fifoname):
201  os.mkfifo (self.fifoname)
202  self.piperead = os.open (self.fifoname, os.O_RDONLY | os.O_NONBLOCK)
203  self.pipewrite = os.open (self.fifoname, os.O_WRONLY | os.O_NONBLOCK)
204  self.shell.eval(self)
205  self.cout.truncate(0)

Member Function Documentation

def pycons.console.Console.grab_focus (   self)
Give focus to the TextView 

Definition at line 246 of file console.py.

247  def grab_focus (self):
248  """ Give focus to the TextView """
249 
250  self.view.grab_focus()
def pycons.console.Console.key_press_event (   self,
  widget,
  event 
)
Handle key press event 

Definition at line 300 of file console.py.

301  def key_press_event (self, widget, event):
302  """ Handle key press event """
303 
304  keyname = gtk.gdk.keyval_name (event.keyval)
305 
306  # New command
307  if keyname in ['Return', 'KP_Enter']:
308  line = self.last_line()
309  self.history_add (line)
310  if self.input_mode:
311  self.input_mode = False
312  self.input = self.last_line()
313  self.write('\n')
314  else:
315  self.execute()
316  return True
317 
318  # Prevent cursor to go back past prompt
319  elif keyname in ['Left', 'BackSpace']:
320  mark = self.buffer.get_mark('linestart')
321  linestart = self.buffer.get_iter_at_mark(mark)
322  iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
323  if iter.compare(linestart) <= 0:
324  return True
325 
326  elif keyname == 'Right':
327  return False
328 
329  # Next history item
330  elif keyname == 'Down':
331  self.overwrite (self.history_next())
332  return True
333 
334  # Previous history item
335  elif keyname == 'Up':
336  self.overwrite (self.history_prev())
337  return True
338 
339  # Move cursor just after prompt
340  elif keyname == 'Home':
341  mark = self.buffer.get_mark('linestart')
342  linestart = self.buffer.get_iter_at_mark(mark)
343  self.buffer.place_cursor (linestart)
344  return True
345 
346  # Completion if line not empty
347  elif keyname == 'Tab':
348  line = self.last_line()
349  if not line.strip():
350  return False
351  completed, possibilities = self.shell.complete(line)
352  if len(possibilities) > 1:
353  slice = line
354  self.write('\n')
355  for symbol in possibilities:
356  self.write(symbol+'\n')
357  self.prompt('prompt')
358  self.overwrite(completed or slice)
359  return True
360 
361  # Controls
362  elif event.state & gtk.gdk.CONTROL_MASK:
363  if keyname in ['a','A']:
364  mark = self.buffer.get_mark('linestart')
365  linestart = self.buffer.get_iter_at_mark(mark)
366  self.buffer.place_cursor (linestart)
367  return True
368  elif keyname in ['e','E']:
369  end = self.buffer.get_end_iter()
370  self.buffer.place_cursor (end)
371  return True
372  elif keyname in ['k','K']:
373  start = self.buffer.get_iter_at_mark (self.buffer.get_insert())
374  end = self.buffer.get_end_iter()
375  self.killbuffer = self.buffer.get_text(start,end)
376  self.buffer.delete(start,end)
377  return True
378  elif keyname in ['y','Y']:
379  if self.killbuffer:
380  iter = self.buffer.get_iter_at_mark (self.buffer.get_insert())
381  self.buffer.insert(iter, self.killbuffer)
382  return True
383  elif keyname in ['l', 'L']:
384  start = self.buffer.get_start_iter()
385  end = self.buffer.get_end_iter()
386  end.backward_sentence_start()
387  self.buffer.delete (start,end)
388  elif keyname in ['d', 'D']:
389  if not len(self.last_line().strip()):
390  self.quit()
391 
392  # Editing before prompt is forbidden
393  else:
394  mark = self.buffer.get_mark('linestart')
395  linestart = self.buffer.get_iter_at_mark(mark)
396  iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
397  if iter.compare(linestart) < 0:
398  iter = self.buffer.get_end_iter()
399  self.buffer.place_cursor (iter)
400  return False
401 
def pycons.console.Console.last_line (   self)
Get last line (without prompt) 

Definition at line 278 of file console.py.

279  def last_line (self):
280  """ Get last line (without prompt) """
281 
282  mark = self.buffer.get_mark('linestart')
283  start = self.buffer.get_iter_at_mark(mark)
284  end = self.buffer.get_end_iter()
285  return self.buffer.get_text (start,end,True)
286 
def pycons.console.Console.overwrite (   self,
  text,
  style = None 
)
Overwrite text after prompt with text 

Definition at line 269 of file console.py.

270  def overwrite (self, text, style=None):
271  """ Overwrite text after prompt with text """
272 
273  mark = self.buffer.get_mark('linestart')
274  start = self.buffer.get_iter_at_mark(mark)
275  end = self.buffer.get_end_iter()
276  self.buffer.delete (start,end)
277  self.write (text, style)
def pycons.console.Console.prompt (   self,
  style = None 
)
Display prompt 

Definition at line 287 of file console.py.

288  def prompt (self, style=None):
289  """ Display prompt """
290 
291  iter = self.buffer.get_end_iter()
292  self.buffer.place_cursor (iter)
293  self.write (self.shell.prompt, style)
294  iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
295  self.buffer.move_mark (self.buffer.get_mark('linestart'), iter)
296  self.history_reset()
297  self.view.scroll_mark_onscreen(self.buffer.get_insert())
298  while gtk.events_pending():
299  gtk.main_iteration()
def pycons.console.Console.quit (   self)
Quit console 

Definition at line 431 of file console.py.

432  def quit(self):
433  """ Quit console """
434 
435  gtk.main_quit()
436  self.history_save()
437  try:
438  os.close (self.piperead)
439  os.close (self.pipewrite)
440  except:
441  pass
442  if os.path.exists (self.fifoname):
443  os.remove (self.fifoname)
444  self.do_quit = True
def pycons.console.Console.write (   self,
  text,
  style = None 
)
Write text using given style (if any) 

Definition at line 251 of file console.py.

252  def write (self, text, style=None):
253  """ Write text using given style (if any) """
254  segments = self.color_pat.split(text)
255  segment = segments.pop(0)
256  start,end = self.buffer.get_bounds()
257  if style==None:
258  self.buffer.insert(end, segment)
259  else:
260  self.buffer.insert_with_tags_by_name(end, segment, style)
261  if segments:
262  ansi_tags = self.color_pat.findall(text)
263  for tag in ansi_tags:
264  i = segments.index(tag)
265  self.buffer.insert_with_tags_by_name(self.buffer.get_end_iter(),
266  segments[i+1], tag)
267  segments.pop(i)
268  self.view.scroll_mark_onscreen(self.buffer.get_insert())

The documentation for this class was generated from the following file: