#!/usr/bin/python
import sys,os
hist=[]
def actually_write():
global hist
sys.stdout.write("\x1b[%sm"%(";".join(hist)))
def o(msg):
global hist
msg="%02i"%msg
hist.append(msg)
actually_write()
def undo():
global hist
hist.pop()
actually_write()
def reset():
global hist
hist=[]
sys.stdout.write("\x1bc\x1b[!p\x1b[?3;4l\x1b[4l\x1b>")
default()
def default():
o(10) # in case someone called o(12) by mistake :P
o(0)
def clear():
sys.stdout.write("\x1b[H\x1b[2J")
def move(y,x):
sys.stdout.write("\x1b[%i;%iH"%(y+1,x+1))
def up():
sys.stdout.write("\x1b[A")
def down():
sys.stdout.write("\x1b[B")
def right():
sys.stdout.write("\x1b[C")
def left():
sys.stdout.write("\x1b[D")
def endline():
sys.stdout.write("\x1b[K")
def cursorinvisible():
sys.stdout.write("\x1b[?25l")
def cursornormal():
sys.stdout.write("\x1b[?12l\x1b[?25h")
def cursorveryvisible():
sys.stdout.write("\x1b[?12;25h")
def deletelines(lines=1):
sys.stdout.write("'\x1b[%iM"%lines)
def scrolldown():
sys.stdout.write("\x1bM")
def cols():
return int(os.popen("tput cols").read().strip())
def lines():
return int(os.popen("tput lines").read().strip())
def savecursor():
sys.stdout.write("\x1b7")
def restorecursor():
sys.stdout.write("\x1b8")
def bold():
o(1)
def hidden():
o(2)
def underline():
o(4)
def blink():
o(5)
def reverse():
o(7)
def formatting():
o(12)
def black():
o(30)
def red():
o(31)
def green():
o(32)
def orange():
o(33)
def blue():
o(34)
def magenta():
o(35)
def cyan():
o(36)
def white():
o(37)
def bgred():
o(41)
def bggreen():
o(42)
def bgorange():
o(43)
def bgblue():
o(44)
def bgmagenta():
o(45)
def bgcyan():
o(46)
def bgwhite():
o(47)
def put(line,indent,msg):
move(line,indent)
sys.stdout.write(msg)
def center(line,msg):
columns=cols()
indent=(columns-len(msg))/2
put(line,indent,msg)
return line,indent+len(msg)
def wrap(*args):
"wrap(line, [[lmargin,] rmargin,] msg)"
if len(args)==4:
line,lmargin,rmargin,msg=args
elif len(args)==3:
line,rmargin,msg=args
lmargin=0
elif len(args)==2:
line,msg=args
lmargin,rmargin=0,0
elif len(args)<2:
raise TypeError,"wrap() takes at least two arguments"
else:
raise TypeError,"wrap() takes at most four arguments"
line_length=cols()-lmargin-rmargin
msg=list(msg)
curr_indent=0
curr_line=line
char=msg.pop(0)
while 1:
if line_length-curr_indent<1:
put(curr_line,lmargin+curr_indent,'\n')
curr_line+=1
curr_indent=0
put(curr_line,lmargin,char)
else:
put(curr_line,lmargin+curr_indent,char)
curr_indent+=1
if len(msg)==0:
break
char=msg.pop(0)
return curr_line,lmargin+curr_indent
def wordwrap(*args):
"wordwrap(line, [[lmargin,] rmargin,] msg)"
if len(args)==4:
line,lmargin,rmargin,msg=args
elif len(args)==3:
line,rmargin,msg=args
lmargin=0
elif len(args)==2:
line,msg=args
lmargin,rmargin=0,0
elif len(args)<2:
raise TypeError,"wordwrap() takes at least two arguments"
else:
raise TypeError,"wordwrap() takes at most four arguments"
line_length=cols()-lmargin-rmargin
msg=msg.split()
curr_indent=0
curr_line=line
word=msg.pop(0)
while 1:
if line_length