69 lines
1.3 KiB
Python
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)
|