Source code for vqt.cli
import os
from PyQt4 import QtCore, QtGui
import envi.cli as e_cli
import envi.qt.memory as e_q_memory
import envi.qt.memcanvas as e_q_memcanvas
from envi.threads import firethread
import vqt.colors as vq_colors
import vqt.shortcut as vq_shortcut
from vqt.basics import *
from vqt.main import idlethread
[docs]class VQCli(QtGui.QWidget):
'''
A Qt class to wrap and emulate a Cmd object.
'''
__canvas_class__ = e_q_memcanvas.VQMemoryCanvas
sigCliQuit = QtCore.pyqtSignal()
def __init__(self, cli, parent=None):
QtGui.QWidget.__init__(self, parent=parent)
self.cli = cli
self.input = QtGui.QLineEdit(self)
# Create our output window...
self.output = QtGui.QTextEdit(self)
# If it's an EnviCli, let's over-ride the canvas right away.
if isinstance(cli, e_cli.EnviCli):
self.output.close()
self.output = self.__canvas_class__(cli.memobj, syms=cli.symobj, parent=self)
self.output.setScrolledCanvas(True)
cli.setCanvas(self.output)
self.setStyleSheet( vq_colors.getDefaultColors() )
# Create they vertical layout and add widgets...
vbox = VBox( self.output, self.input )
self.setLayout(vbox)
self.connect(self.input, QtCore.SIGNAL('returnPressed()'), self.returnPressedSlot)
vq_shortcut.addShortCut(self.input, QtCore.Qt.Key_Up, self.keyCodeUp)
vq_shortcut.addShortCut(self.input, QtCore.Qt.Key_Down, self.keyCodeDown)
self.history = []
self.histidx = 0
self.resize(250, 150)
[docs] def returnPressedSlot(self):
cmd = str(self.input.text())
self.input.clear()
self.addHistory(cmd)
self.output.addText('> %s\n' % cmd)
firethread(self.onecmd)(cmd)
[docs] def onecmd(self, cmdline):
if self.cli.onecmd( cmdline ):
self._emit_quit()
@idlethread
def _emit_quit(self):
# A way to emit the "quit" signal from threads other than the
# qt main thread.
self.sigCliQuit.emit()
[docs] def useHistory(self, delta):
if delta < 0 and self.histidx == 0:
return
if delta > 0 and len(self.history) <= self.histidx+delta:
self.histidx = len(self.history)
self.input.clear()
return
self.histidx += delta
htext = self.history[self.histidx]
self.input.setText(htext)
#self.input.selectAll()
[docs] def addHistory(self, histcmd):
if histcmd:
self.history.append(histcmd)
self.histidx = len(self.history)
[docs] def keyCodeUp(self,*args):
self.useHistory(-1)
[docs] def keyCodeDown(self):
self.useHistory(1)
[docs] def loadHistory(self, filename):
if os.path.isfile(filename):
hist = file(filename, 'r').readlines()[-1000:]
self.history = [ x.strip() for x in hist ]
self.histidx = len(self.history)
[docs] def saveHistory(self, filename):
# Only save the last 1000 commands
# (gotta put a limit somewhere...)
histbuf = '\n'.join( self.history[-1000:] )
file(filename, 'w').write( histbuf )