ocarina/trunk/cline.py

69 lines
1.3 KiB
Python

import threading
import curses
class CLine(threading.Thread):
# Initialize ncurses stuff
def __init__(self):
threading.Thread.__init__(self)
self.stdscr = curses.initscr()
self.maxSize = self.stdscr.getmaxyx()
curses.cbreak()
curses.noecho()
self.stdscr.keypad(1)
self.input = ""
self.pos = (0,0) # REMEMBER: (y,x)
self.start()
# Reverse ncurses stuff
def quit(self):
curses.nocbreak()
curses.echo()
self.stdscr.keypad(0)
curses.endwin()
# Print the prompt
def prompt(self):
self.stdscr.addstr(self.pos[0],0,">>> ")
# Run the command line
def run(self):
try:
self.prompt()
while(True):
#self.prompt()
self.pos=self.stdscr.getyx()
c = self.stdscr.getch()
if c==10:
if self.enter()==False:
return
else:
self.input+=curses.keyname(c)
self.changeline()
finally:
self.quit()
# Enter key pressed
# Returns true if we keep going
def enter(self):
if self.input=="":
return True
elif self.input=="quit":
self.quit()
return False
else:
self.input = ""
# Change the current line to reflect self.input
def changeline(self):
(y,x) = self.stdscr.getyx()
self.stdscr.deleteln()
self.stdscr.move(y,0)
self.prompt()
self.stdscr.addstr(self.input)
#self.stdscr.move(y,x+10)