GnuCash  5.6-150-g038405b370+
Public Member Functions | Data Fields
pycons.console.Console Class Reference
Inheritance diagram for pycons.console.Console:

Public Member Functions

def __init__ (self, argv=[], shelltype='python', banner=[], filename=None, size=100, user_local_ns=None, user_global_ns=None)
 
def history_init (self, filename, size)
 
def history_save (self)
 
def history_add (self, item)
 
def history_reset (self)
 
def history_next (self)
 
def history_prev (self)
 
def raw_input (self, prompt='')
 
def grab_focus (self)
 
def write (self, text, style=None)
 
def overwrite (self, text, style=None)
 
def last_line (self)
 
def prompt (self, style=None)
 
def key_press_event (self, widget, event)
 
def execute (self)
 
def quit (self)
 

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 125 of file console.py.

Constructor & Destructor Documentation

◆ __init__()

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

Definition at line 129 of file console.py.

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

Member Function Documentation

◆ grab_focus()

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

Definition at line 255 of file console.py.

255  def grab_focus (self):
256  """ Give focus to the TextView """
257 
258  self.view.grab_focus()
259 

◆ key_press_event()

def pycons.console.Console.key_press_event (   self,
  widget,
  event 
)
Handle key press event 

Definition at line 309 of file console.py.

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

◆ last_line()

def pycons.console.Console.last_line (   self)
Get last line (without prompt) 

Definition at line 287 of file console.py.

287  def last_line (self):
288  """ Get last line (without prompt) """
289 
290  mark = self.buffer.get_mark('linestart')
291  start = self.buffer.get_iter_at_mark(mark)
292  end = self.buffer.get_end_iter()
293  return self.buffer.get_text (start,end,True)
294 
295 

◆ overwrite()

def pycons.console.Console.overwrite (   self,
  text,
  style = None 
)
Overwrite text after prompt with text 

Definition at line 278 of file console.py.

278  def overwrite (self, text, style=None):
279  """ Overwrite text after prompt with text """
280 
281  mark = self.buffer.get_mark('linestart')
282  start = self.buffer.get_iter_at_mark(mark)
283  end = self.buffer.get_end_iter()
284  self.buffer.delete (start,end)
285  self.write (text, style)
286 

◆ prompt()

def pycons.console.Console.prompt (   self,
  style = None 
)
Display prompt 

Definition at line 296 of file console.py.

296  def prompt (self, style=None):
297  """ Display prompt """
298 
299  iter = self.buffer.get_end_iter()
300  self.buffer.place_cursor (iter)
301  self.write (self.shell.prompt, style)
302  iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
303  self.buffer.move_mark (self.buffer.get_mark('linestart'), iter)
304  self.history_reset()
305  self.view.scroll_mark_onscreen(self.buffer.get_insert())
306  while Gtk.events_pending():
307  Gtk.main_iteration()
308 

◆ quit()

def pycons.console.Console.quit (   self)
Quit console 

Definition at line 440 of file console.py.

440  def quit(self):
441  """ Quit console """
442 
443  self.history_save()
444  try:
445  os.close (self.piperead)
446  os.close (self.pipewrite)
447  except:
448  pass
449  if os.path.exists (self.fifoname):
450  os.remove (self.fifoname)
451  self.do_quit = True
452 

◆ write()

def pycons.console.Console.write (   self,
  text,
  style = None 
)
Write text using given style (if any) 

Definition at line 260 of file console.py.

260  def write (self, text, style=None):
261  """ Write text using given style (if any) """
262  segments = self.color_pat.split(text)
263  segment = segments.pop(0)
264  start,end = self.buffer.get_bounds()
265  if style==None:
266  self.buffer.insert(end, segment)
267  else:
268  self.buffer.insert_with_tags_by_name(end, segment, style)
269  if segments:
270  ansi_tags = self.color_pat.findall(text)
271  for tag in ansi_tags:
272  i = segments.index(tag)
273  self.buffer.insert_with_tags_by_name(self.buffer.get_end_iter(),
274  segments[i+1], tag)
275  segments.pop(i)
276  self.view.scroll_mark_onscreen(self.buffer.get_insert())
277 

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