commit
ea35ea0e23
71
pronsole.py
71
pronsole.py
|
@ -102,15 +102,23 @@ class pronsole(cmd.Cmd):
|
||||||
|
|
||||||
def end_macro(self):
|
def end_macro(self):
|
||||||
if self.__dict__.has_key("onecmd"): del self.onecmd # remove override
|
if self.__dict__.has_key("onecmd"): del self.onecmd # remove override
|
||||||
if not self.processing_rc:
|
|
||||||
print "Macro '"+self.cur_macro_name+"' defined"
|
|
||||||
#print self.cur_macro+"------------" # debug
|
|
||||||
self.prompt="PC>"
|
self.prompt="PC>"
|
||||||
if self.cur_macro_def!="":
|
if self.cur_macro_def!="":
|
||||||
self.macros[self.cur_macro_name] = self.cur_macro_def
|
self.macros[self.cur_macro_name] = self.cur_macro_def
|
||||||
exec self.cur_macro
|
exec self.cur_macro
|
||||||
setattr(self.__class__,"do_"+self.cur_macro_name,lambda self,largs,macro=macro:macro(self,*largs.split()))
|
setattr(self.__class__,"do_"+self.cur_macro_name,lambda self,largs,macro=macro:macro(self,*largs.split()))
|
||||||
setattr(self.__class__,"help_"+self.cur_macro_name,lambda self,macro_name=self.cur_macro_name: self.subhelp_macro(macro_name))
|
setattr(self.__class__,"help_"+self.cur_macro_name,lambda self,macro_name=self.cur_macro_name: self.subhelp_macro(macro_name))
|
||||||
|
if not self.processing_rc:
|
||||||
|
print "Macro '"+self.cur_macro_name+"' defined"
|
||||||
|
# save it
|
||||||
|
macro_key = "macro "+self.cur_macro_name
|
||||||
|
macro_def = macro_key
|
||||||
|
if "\n" in self.cur_macro_def:
|
||||||
|
macro_def += "\n"
|
||||||
|
else:
|
||||||
|
macro_def += " "
|
||||||
|
macro_def += self.cur_macro_def
|
||||||
|
self.save_in_rc(macro_key,macro_def)
|
||||||
else:
|
else:
|
||||||
print "Empty macro - cancelled"
|
print "Empty macro - cancelled"
|
||||||
del self.cur_macro,self.cur_macro_name,self.cur_macro_def
|
del self.cur_macro,self.cur_macro_name,self.cur_macro_def
|
||||||
|
@ -131,6 +139,8 @@ class pronsole(cmd.Cmd):
|
||||||
delattr(self.__class__,"do_"+macro_name)
|
delattr(self.__class__,"do_"+macro_name)
|
||||||
del self.macros[macro_name]
|
del self.macros[macro_name]
|
||||||
print "Macro '"+macro_name+"' removed"
|
print "Macro '"+macro_name+"' removed"
|
||||||
|
if not self.processing_rc:
|
||||||
|
self.save_in_rc("macro "+macro_name,"")
|
||||||
else:
|
else:
|
||||||
print "Macro '"+macro_name+"' is not defined"
|
print "Macro '"+macro_name+"' is not defined"
|
||||||
return
|
return
|
||||||
|
@ -181,17 +191,70 @@ class pronsole(cmd.Cmd):
|
||||||
self.processing_rc=True
|
self.processing_rc=True
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
rc=open(os.path.join(os.path.expanduser("~"),rc_filename))
|
self.rc_filename = os.path.join(os.path.expanduser("~"),rc_filename)
|
||||||
|
rc=open(self.rc_filename)
|
||||||
except IOError:
|
except IOError:
|
||||||
rc=open(rc_filename)
|
rc=open(rc_filename)
|
||||||
|
self.rc_filename = os.path.abspath(rc_filename)
|
||||||
for rc_cmd in rc:
|
for rc_cmd in rc:
|
||||||
if not rc_cmd.lstrip().startswith("#"):
|
if not rc_cmd.lstrip().startswith("#"):
|
||||||
self.onecmd(rc_cmd)
|
self.onecmd(rc_cmd)
|
||||||
rc.close()
|
rc.close()
|
||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
if hasattr(self,"cur_macro"):
|
||||||
|
self.end_macro()
|
||||||
self.processing_rc=False
|
self.processing_rc=False
|
||||||
|
|
||||||
|
def save_in_rc(self,key,definition):
|
||||||
|
"""
|
||||||
|
Saves or updates macro or other definitions in .pronsolerc
|
||||||
|
key is prefix that determines what is being defined/updated (e.g. 'macro foo')
|
||||||
|
definition is the full definition (that is written to file). (e.g. 'macro foo move x 10')
|
||||||
|
Set key as empty string to just add (and not overwrite)
|
||||||
|
Set definition as empty string to remove it from .pronsolerc
|
||||||
|
To delete line from .pronsolerc, set key as the line contents, and definition as empty string
|
||||||
|
Only first definition with given key is overwritten.
|
||||||
|
Updates are made in the same file position.
|
||||||
|
Additions are made to the end of the file.
|
||||||
|
"""
|
||||||
|
rci,rco = None,None
|
||||||
|
if definition != "" and not definition.endswith("\n"):
|
||||||
|
definition += "\n"
|
||||||
|
try:
|
||||||
|
written = False
|
||||||
|
rco=open(self.rc_filename+"~new","w")
|
||||||
|
if os.path.exists(self.rc_filename):
|
||||||
|
rci=open(self.rc_filename,"r")
|
||||||
|
overwriting = False
|
||||||
|
for rc_cmd in rci:
|
||||||
|
l = rc_cmd.rstrip()
|
||||||
|
ls = l.lstrip()
|
||||||
|
ws = l[:len(l)-len(ls)] # just leading whitespace
|
||||||
|
if overwriting and len(ws) == 0:
|
||||||
|
overwriting = False
|
||||||
|
if not written and key != "" and rc_cmd.startswith(key) and (rc_cmd+"\n")[len(key)].isspace():
|
||||||
|
overwriting = True
|
||||||
|
written = True
|
||||||
|
rco.write(definition)
|
||||||
|
if not overwriting:
|
||||||
|
rco.write(rc_cmd)
|
||||||
|
if not rc_cmd.endswith("\n"): rco.write("\n")
|
||||||
|
if not written:
|
||||||
|
rco.write(definition)
|
||||||
|
if rci is not None:
|
||||||
|
rci.close()
|
||||||
|
if os.path.exists(self.rc_filename+"~old"):
|
||||||
|
os.remove(rci.name+"~old")
|
||||||
|
os.rename(rci.name,rci.name+"~old")
|
||||||
|
rco.close()
|
||||||
|
os.rename(rco.name,self.rc_filename)
|
||||||
|
print "Saved '"+key+"' to '"+self.rc_filename+"'"
|
||||||
|
except Exception as e:
|
||||||
|
print "Saving failed for",key+":",str(e)
|
||||||
|
finally:
|
||||||
|
del rci,rco
|
||||||
|
|
||||||
def preloop(self):
|
def preloop(self):
|
||||||
self.load_rc()
|
self.load_rc()
|
||||||
print "Welcome to the printer console! Type \"help\" for a list of available commands."
|
print "Welcome to the printer console! Type \"help\" for a list of available commands."
|
||||||
|
|
Loading…
Reference in New Issue