All pastes #423439 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-04-04 04:39 UTC
rendered paste body
#
import subprocess
import curses
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='/tmp/myapp.log',
                    filemode='w')

def getFileList():
    lines =  subprocess.Popen(["svn", "status"], stdout=subprocess.PIPE).communicate()[0].split("\n")
    fileList = list()
    for line in lines:
        status = line[0:7].strip()
        file = line[7:].strip()
        fileList.append({"status" : status, "file" : file, "checked" : False})
    return fileList 
    
#init curses
def initCurses():
    global stdscr 
    stdscr = curses.initscr()
    curses.noecho()
    curses.cbreak()
    stdscr.keypad(1)
    pad = curses.newpad(1000, 1000)


#clean up
def cleanupCurses():
    curses.nocbreak(); stdscr.keypad(0); curses.echo();curses.endwin()

def redraw():
    x = 0;
    for file in filelist:
        try:
            s = "[" + ("x" if file["checked"] else " ") + "] " + file["status"].ljust(6, " ") + file["file"]; 
            stdscr.addstr(x, 0, s, curses.A_BOLD)
        except Exception, err:
            logging.error(err);
        x = x+1     


def toggleChecked(index):
    checked = filelist[index]["checked"]
    filelist[index]["checked"] = not checked

def checkall(checked=True):
    for file in filelist:
        file["checked"] = checked
    
def main():
    global stdscr 
    try:
        global filelist
        initCurses()
        filelist = getFileList()

        redraw()
                
        while 1:
            curses.getsyx()
            c = stdscr.getch()
            stdscr.move(1,1)
            if c == ord('q'): break  # Exit the while()
            if c == curses.KEY_UP : 
                logging.debug("KEYUP!")
                y,x = curses.getsyx()
                logging.debug("%(x)d %(y)d" % {"x" : x, "y" : y})
                stdscr.move(y-1, 1);
            if c == curses.KEY_DOWN : 
                logging.debug("KEYDOWN")
                y,x = curses.getsyx()
                logging.debug("%(x)d %(y)d" % {"x" : x, "y" : y})
                stdscr.move(y+1, 1);
            if c == ord(' '):
                logging.debug("SPACE")
                y,x = curses.getsyx()
                toggleChecked(y)
                redraw();
                stdscr.move(y+1,x);
            if c == ord('a'):
                y,x = curses.getsyx()
                checkall();
                redraw();
                stdscr.move(y,x);
            if c == ord('u'):
                y,x = curses.getsyx()
                checkall(False);
                redraw();
                stdscr.move(y,x);
            
                
    except Exception, err:
        logging.error(err);
    finally:
        cleanupCurses()
    
if __name__ == "__main__":
    main()